import type { PgliteClient } from "../../pglite/index.ts" import type { AnySchemas, AnyRelations, DrizzleConfig } from "../orm/index.ts" import type { PgliteNormalDatabase } from "./database.ts" import { isPgliteNormalDatabase } from "./database.ts" import { drizzle } from "./pglite.ts" export interface CreatePgliteDrizzleClientOptions< TableSchemas extends AnySchemas, Relations extends AnyRelations, > extends DrizzleConfig { pgliteClient: PgliteClient } export interface PgliteDrizzleClient< TableSchemas extends AnySchemas, Relations extends AnyRelations, > extends PgliteNormalDatabase { $client: PgliteClient } export const createPgliteDrizzleClient = < TableSchemas extends AnySchemas, Relations extends AnyRelations, >( options: CreatePgliteDrizzleClientOptions, ): PgliteDrizzleClient => { const { pgliteClient, ...drizzleConfig } = options const drizzleClient = drizzle({ client: pgliteClient, ...drizzleConfig, }) return drizzleClient } export type GetCreatePgliteDrizzleClient< TableSchemas extends AnySchemas, Relations extends AnyRelations, > = ( options: CreatePgliteDrizzleClientOptions, ) => PgliteDrizzleClient export const getCreatePgliteDrizzleClient = < TableSchemas extends AnySchemas, Relations extends AnyRelations, >(): GetCreatePgliteDrizzleClient => { return createPgliteDrizzleClient } export type AnyPgliteDrizzleClient = PgliteDrizzleClient export const isPgliteDrizzleClient = < TableSchemas extends AnySchemas, Relations extends AnyRelations, >( target: unknown, ): target is PgliteDrizzleClient => { if (isPgliteNormalDatabase(target) === false) { return false } if ("$client" in target === false) { return false } return true }