UNPKG

effect-sql-kysely

Version:

A full-featured integration between `@effect/sql` and `Kysely` that provides type-safe database operations with Effect's powerful error handling and resource management.

32 lines (31 loc) 1.86 kB
import * as kysely from "kysely"; import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; import * as Scope from "effect/Scope"; import * as Sql from "@effect/sql"; import { makeResolver } from "./internal/makeResolver.js"; import { makeSchema } from "./internal/makeSchema.js"; export interface KyselyDatabase<DB> { readonly sql: Sql.SqlClient.SqlClient; readonly db: kysely.Kysely<DB>; readonly kysely: <Out extends object>(f: (db: kysely.Kysely<DB>) => kysely.Compilable<Out>) => Effect.Effect<ReadonlyArray<Out>, Sql.SqlError.SqlError, never>; } export declare const make: <DB, Self>(id: string) => DatabaseConstructor<DB, Self>; declare const TagConstructor_: <DB, Self>() => Context.TagClass<Self, string, KyselyDatabase<DB>>; export interface CoreDatabaseConstructor<DB, Self> extends ReturnType<typeof TagConstructor_<DB, Self>> { readonly resolver: ReturnType<typeof makeResolver<Self, DB>>; readonly schema: ReturnType<typeof makeSchema<Self, DB>>; readonly client: Effect.Effect<Sql.SqlClient.SqlClient, never, Self>; readonly kysely: <Out extends object>(f: (db: kysely.Kysely<DB>) => kysely.Compilable<Out>) => Effect.Effect<ReadonlyArray<Out>, Sql.SqlError.SqlError, Self>; readonly withTransaction: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, Sql.SqlError.SqlError | E, Self | R>; } export interface DatabaseConstructor<DB, Self> extends CoreDatabaseConstructor<DB, Self> { readonly layer: <E, R>(options: { readonly acquire: Effect.Effect<kysely.Kysely<DB>, E, R | Scope.Scope>; readonly compiler: Sql.Statement.Compiler; readonly spanAttributes?: ReadonlyArray<readonly [string, string]>; readonly chunkSize?: number; }) => Layer.Layer<Self, E, Exclude<R, Scope.Scope>>; } export {};