{"version":3,"file":"native-database.mjs","names":[],"sources":["../../src/drizzle/native-database.ts"],"sourcesContent":["import type { SQL } from \"drizzle-orm\";\nimport type { EffectDrizzleQueryError } from \"drizzle-orm/effect-core\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport type * as SqlClient from \"effect/sql/SqlClient\";\nimport type * as SqlError from \"effect/sql/SqlError\";\nimport type * as Statement from \"effect/sql/Statement\";\n\n/** Only installed driver handles are erased; domain values keep their schemas. */\nexport interface NativePhysicalDatabase {\n  readonly $client: SqlClient.SqlClient & {\n    readonly batch: (\n      statements: ReadonlyArray<Statement.Statement<unknown>>,\n    ) => Effect.Effect<unknown, SqlError.SqlError>;\n  };\n  readonly transaction: <A, E, R>(\n    body: (transaction: NativeDatabaseHandle) => Effect.Effect<A, E, R>,\n  ) => Effect.Effect<A, E | SqlError.SqlError, R>;\n}\n\n/** The captured native Drizzle owner; never a shared/raw SQL resource. */\nexport class NativeDatabase extends Context.Service<NativeDatabase, NativePhysicalDatabase>()(\n  \"effect-auth/persistence/NativeDatabase\",\n) {}\n\nexport type NativeDatabaseHandle = NativeSqlDatabase & NativePhysicalDatabase;\n\n/* oxlint-disable no-explicit-any -- only native query-builder handles are erased; domain values use mapped codecs. */\nexport interface NativeSqlQuery<A = ReadonlyArray<any>> extends Effect.Effect<\n  A,\n  EffectDrizzleQueryError | SqlError.SqlError\n> {\n  readonly getSQL: () => SQL;\n  readonly toSQL: () => { readonly sql: string; readonly params: ReadonlyArray<unknown> };\n  readonly from: (...args: ReadonlyArray<any>) => NativeSqlQuery<A>;\n  readonly where: (...args: ReadonlyArray<any>) => NativeSqlQuery<A>;\n  readonly limit: (...args: ReadonlyArray<any>) => NativeSqlQuery<A>;\n  readonly orderBy: (...args: ReadonlyArray<any>) => NativeSqlQuery<A>;\n  readonly for: (...args: ReadonlyArray<any>) => NativeSqlQuery<A>;\n  readonly set: (...args: ReadonlyArray<any>) => NativeSqlQuery<A>;\n  readonly values: (...args: ReadonlyArray<any>) => NativeSqlQuery<A>;\n  readonly returning: (...args: ReadonlyArray<any>) => NativeSqlQuery<A>;\n  readonly $returningId: (...args: ReadonlyArray<any>) => NativeSqlQuery<A>;\n  readonly innerJoin: (...args: ReadonlyArray<any>) => NativeSqlQuery<A>;\n  readonly onConflictDoNothing: (...args: ReadonlyArray<any>) => NativeSqlQuery<A>;\n  readonly onDuplicateKeyUpdate: (...args: ReadonlyArray<any>) => NativeSqlQuery<A>;\n}\n\nexport interface NativeSqlDatabase {\n  readonly select: (...args: ReadonlyArray<any>) => NativeSqlQuery;\n  readonly insert: (...args: ReadonlyArray<any>) => NativeSqlQuery;\n  readonly update: (...args: ReadonlyArray<any>) => NativeSqlQuery;\n  readonly delete: (...args: ReadonlyArray<any>) => NativeSqlQuery;\n  readonly transaction: <A, E, R>(\n    body: (transaction: NativeSqlDatabase) => Effect.Effect<A, E, R>,\n  ) => Effect.Effect<A, E | SqlError.SqlError, R>;\n}\n\n/** Driver makers supply actual query objects and their captured native client.\n * Drizzle class declarations omit that client and D1's batch method. */\nexport const nativeDatabase = <Database, E, R>(acquire: Effect.Effect<Database, E, R>) =>\n  Effect.map(\n    acquire,\n    (database) => database as unknown as Database & NativePhysicalDatabase & NativeSqlDatabase,\n  );\n"],"mappings":";;;;AAqBA,IAAa,iBAAb,cAAoC,QAAQ,QAAgD,CAAC,CAC3F,wCACF,CAAC,CAAC,CAAC;;;AAqCH,MAAa,kBAAkC,YAC7C,OAAO,IACL,UACC,aAAa,QAChB"}