Creating a Service for Database Connection in TypeScript Using Effect and SurrealDB

How to create Service for Database connection Im trying to migrate my Code from Context.Tag to Effect.Serveice, and tbh I dont know what i am doing
import { Effect, Context, Data, Layer } from 'effect';
import { Surreal, type ConnectOptions } from 'surrealdb';

export class SurrealDBError extends Data.TaggedError('SurrealDBError')<{
    cause?: unknown;
    message?: string;
}> {}

export class SurrealDB extends Effect.Service<Surreal>()('app/Surrealdb', {
    effect: Effect.gen(function* () {
        const client = yield* Effect.acquireRelease(
            Effect.tryPromise({
                try: async () => {
                    const _c = new Surreal();
                    await _c.connect('', {});
                    return _c;
                },
                catch: (e) => new SurrealDBError({ cause: e, message: 'Error connecting' })
            }),
            (client) => Effect.promise(() => client.close())
        );

        return client
    })
}) {}

const layer: Layer.Layer<SurrealDB> = SurrealDB.Default;
image.png
Was this page helpful?