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.TagContext.Tag to Effect.ServeiceEffect.Serveice, and tbh I dont know what i am doingimport { 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;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;
