import type { PglightClient } from "../../pglight/index.ts" import type { AnySchemas, AnyRelations, DrizzleConfig } from "../orm/index.ts" import type { PglightNormalDatabase } from "./database.ts" import { isPglightNormalDatabase } from "./database.ts" import { drizzle } from "./pglight.ts" export interface CreatePglightDrizzleClientOptions< TableSchemas extends AnySchemas, Relations extends AnyRelations, > extends DrizzleConfig { pglightClient: PglightClient } export interface PglightDrizzleClient< TableSchemas extends AnySchemas, Relations extends AnyRelations, > extends PglightNormalDatabase { $client: PglightClient } export const createPglightDrizzleClient = < TableSchemas extends AnySchemas, Relations extends AnyRelations, >( options: CreatePglightDrizzleClientOptions, ): PglightDrizzleClient => { const { pglightClient, ...drizzleConfig } = options const drizzleClient = drizzle({ client: pglightClient, ...drizzleConfig, }) return drizzleClient } export type GetCreatePglightDrizzleClient< TableSchemas extends AnySchemas, Relations extends AnyRelations, > = ( options: CreatePglightDrizzleClientOptions, ) => PglightDrizzleClient export const getCreatePglightDrizzleClient = < TableSchemas extends AnySchemas, Relations extends AnyRelations, >(): GetCreatePglightDrizzleClient => { return createPglightDrizzleClient } export type AnyPglightDrizzleClient = PglightDrizzleClient export const isPglightDrizzleClient = < TableSchemas extends AnySchemas, Relations extends AnyRelations, >( target: unknown, ): target is PglightDrizzleClient => { if (isPglightNormalDatabase(target) === false) { return false } if ("$client" in target === false) { return false } return true }