{"version":3,"file":"runtime.mjs","names":["SqlContractSerializer","ormBuilder","sql","sqlBuilder"],"sources":["../src/runtime/binding.ts","../src/runtime/sqlite-runtime.ts","../src/runtime/sqlite.ts"],"sourcesContent":["import type { SqliteBinding } from '@prisma-next/driver-sqlite/runtime';\n\nexport type SqliteBindingInput = { readonly path: string };\n\nexport function resolveSqliteBinding(input: SqliteBindingInput): SqliteBinding {\n  return { kind: 'path', path: input.path };\n}\n\nexport function resolveOptionalSqliteBinding(options: {\n  readonly path?: string;\n}): SqliteBinding | undefined {\n  if (options.path === undefined) {\n    return undefined;\n  }\n  return { kind: 'path', path: options.path };\n}\n","import type { Contract } from '@prisma-next/contract/types';\nimport type { SqlStorage } from '@prisma-next/sql-contract/types';\nimport { type Runtime, SqlRuntimeBase } from '@prisma-next/sql-runtime';\n\n/**\n * The SQLite runtime interface. App code depends on this — `sqlite()` returns it\n * and `Runtime` (the common interface) is the everyday parameter type.\n *\n * `SqliteRuntimeImpl` is the implementing class. It is exported so that other\n * extensions can subclass it; app code never references it directly.\n */\nexport interface SqliteRuntime extends Runtime {}\n\nexport class SqliteRuntimeImpl<\n  TContract extends Contract<SqlStorage> = Contract<SqlStorage>,\n> extends SqlRuntimeBase<TContract> {}\n","import sqliteAdapter from '@prisma-next/adapter-sqlite/runtime';\nimport type { Contract } from '@prisma-next/contract/types';\nimport type { SqliteBinding } from '@prisma-next/driver-sqlite/runtime';\nimport sqliteDriver from '@prisma-next/driver-sqlite/runtime';\nimport { instantiateExecutionStack } from '@prisma-next/framework-components/execution';\nimport { UNBOUND_NAMESPACE_ID } from '@prisma-next/framework-components/ir';\nimport { sql as sqlBuilder } from '@prisma-next/sql-builder/runtime';\nimport type { Db } from '@prisma-next/sql-builder/types';\nimport type { ExtractCodecTypes, SqlStorage } from '@prisma-next/sql-contract/types';\nimport { orm as ormBuilder } from '@prisma-next/sql-orm-client';\nimport type { CodecTypesBase, RawSqlTag } from '@prisma-next/sql-relational-core/expression';\nimport type { SqlQueryPlan } from '@prisma-next/sql-relational-core/plan';\nimport type {\n  BindSiteParams,\n  Declaration,\n  ExecutionContext,\n  ParamsFromDeclaration,\n  PreparedStatement,\n  Runtime,\n  SqlExecutionStackWithDriver,\n  SqlMiddleware,\n  SqlRuntimeExtensionDescriptor,\n  TransactionContext,\n  VerifyMarkerOption,\n} from '@prisma-next/sql-runtime';\nimport {\n  createExecutionContext,\n  createSqlExecutionStack,\n  withTransaction,\n} from '@prisma-next/sql-runtime';\nimport sqliteTarget, {\n  SqliteContractSerializer as SqlContractSerializer,\n} from '@prisma-next/target-sqlite/runtime';\nimport { assertDefined } from '@prisma-next/utils/assertions';\nimport { blindCast, castAs } from '@prisma-next/utils/casts';\nimport { ifDefined } from '@prisma-next/utils/defined';\nimport { buildSqliteStaticContext, type SqliteStaticContext } from '../static/sqlite-static';\nimport { resolveOptionalSqliteBinding, resolveSqliteBinding } from './binding';\nimport { SqliteRuntimeImpl } from './sqlite-runtime';\n\nexport type SqliteTargetId = 'sqlite';\ntype OrmClient<TContract extends Contract<SqlStorage>> = ReturnType<typeof ormBuilder<TContract>>;\n\ntype UnboundSql<TContract extends Contract<SqlStorage>> =\n  Db<TContract>[typeof UNBOUND_NAMESPACE_ID];\ntype UnboundOrm<TContract extends Contract<SqlStorage>> =\n  OrmClient<TContract>[typeof UNBOUND_NAMESPACE_ID];\n\nfunction unboundOrm<TContract extends Contract<SqlStorage>>(\n  orm: OrmClient<TContract>,\n): UnboundOrm<TContract> {\n  const value = orm[UNBOUND_NAMESPACE_ID];\n  assertDefined(value, 'the unbound namespace always exists on a sqlite builder output');\n  return blindCast<\n    UnboundOrm<TContract>,\n    'OrmClient<TContract> indexed by a literal key widens NsId to string; Collection is invariant in NsId via row/mutation-input types, so the indexed-access type cannot be proven to match the literal-keyed OrmNamespace without this cast'\n  >(value);\n}\n\nexport interface SqliteTransactionContext<TContract extends Contract<SqlStorage>>\n  extends TransactionContext {\n  readonly sql: UnboundSql<TContract>;\n  readonly orm: UnboundOrm<TContract>;\n  readonly enums: SqliteStaticContext<TContract>['enums'];\n}\n\nexport interface SqliteClient<TContract extends Contract<SqlStorage>> {\n  readonly sql: UnboundSql<TContract>;\n  readonly orm: UnboundOrm<TContract>;\n  readonly enums: SqliteStaticContext<TContract>['enums'];\n  readonly raw: RawSqlTag;\n  readonly context: ExecutionContext<TContract>;\n  readonly contract: TContract;\n  readonly stack: SqlExecutionStackWithDriver<SqliteTargetId>;\n  connect(bindingInput?: { readonly path: string }): Promise<Runtime>;\n  runtime(): Runtime;\n  prepare<\n    D extends Declaration<CT>,\n    Row,\n    CT extends CodecTypesBase = ExtractCodecTypes<TContract> & CodecTypesBase,\n  >(\n    declaration: D,\n    callback: (sql: UnboundSql<TContract>, params: BindSiteParams<D>) => SqlQueryPlan<Row>,\n  ): Promise<PreparedStatement<ParamsFromDeclaration<D, CT>, Row>>;\n  transaction<R>(fn: (tx: SqliteTransactionContext<TContract>) => PromiseLike<R>): Promise<R>;\n  close(): Promise<void>;\n  [Symbol.asyncDispose](): Promise<void>;\n}\n\nexport interface SqliteOptionsBase {\n  readonly extensions?: readonly SqlRuntimeExtensionDescriptor<SqliteTargetId>[];\n  readonly middleware?: readonly SqlMiddleware[];\n  readonly verifyMarker?: VerifyMarkerOption;\n}\n\nexport type SqliteOptionsWithContract<TContract extends Contract<SqlStorage>> = {\n  readonly path?: string;\n} & SqliteOptionsBase & {\n    readonly contract: TContract;\n    readonly contractJson?: never;\n  };\n\nexport type SqliteOptionsWithContractJson<TContract extends Contract<SqlStorage>> = {\n  readonly path?: string;\n  readonly _contract?: TContract;\n} & SqliteOptionsBase & {\n    readonly contractJson: unknown;\n    readonly contract?: never;\n  };\n\nexport type SqliteOptions<TContract extends Contract<SqlStorage>> =\n  | SqliteOptionsWithContract<TContract>\n  | SqliteOptionsWithContractJson<TContract>;\n\nfunction resolveContract<TContract extends Contract<SqlStorage>>(\n  options: SqliteOptions<TContract>,\n): TContract {\n  const serializer = new SqlContractSerializer();\n  if ('contractJson' in options && options.contractJson !== undefined) {\n    return serializer.deserializeContract(options.contractJson) as TContract;\n  }\n  const contract = (options as SqliteOptionsWithContract<TContract>).contract;\n  return serializer.deserializeContract(serializer.serializeContract(contract)) as TContract;\n}\n\nexport default function sqlite<TContract extends Contract<SqlStorage>>(\n  options: SqliteOptionsWithContract<TContract>,\n): SqliteClient<TContract>;\nexport default function sqlite<TContract extends Contract<SqlStorage>>(\n  options: SqliteOptionsWithContractJson<TContract>,\n): SqliteClient<TContract>;\nexport default function sqlite<TContract extends Contract<SqlStorage>>(\n  options: SqliteOptions<TContract>,\n): SqliteClient<TContract> {\n  const contract = resolveContract(options);\n  let binding = resolveOptionalSqliteBinding(options);\n\n  const stack = createSqlExecutionStack({\n    target: sqliteTarget,\n    adapter: sqliteAdapter,\n    driver: sqliteDriver,\n    extensionPacks: options.extensions ?? [],\n  });\n\n  const context = createExecutionContext<TContract, SqliteTargetId>({\n    contract,\n    stack,\n    driver: sqliteDriver,\n  });\n  const {\n    sql,\n    raw: rawSqlTag,\n    enums,\n  }: SqliteStaticContext<TContract> = buildSqliteStaticContext<TContract>(\n    context,\n    stack.adapter.rawCodecInferer,\n  );\n\n  let runtimeInstance: Runtime | undefined;\n  let runtimeDriver: { connect(binding: unknown): Promise<void> } | undefined;\n  let driverConnected = false;\n  let connectPromise: Promise<void> | undefined;\n  let closePromise: Promise<void> | undefined;\n  let backgroundConnectError: unknown;\n  let closed = false;\n  let ownedDispose: (() => Promise<void>) | undefined;\n\n  const connectDriver = async (resolvedBinding: SqliteBinding): Promise<void> => {\n    if (driverConnected) return;\n    if (!runtimeDriver) throw new Error('SQLite runtime driver missing');\n    if (connectPromise) return connectPromise;\n    connectPromise = runtimeDriver\n      .connect(resolvedBinding)\n      .then(() => {\n        driverConnected = true;\n      })\n      .catch((err) => {\n        backgroundConnectError = err;\n        connectPromise = undefined;\n        throw err;\n      });\n    return connectPromise;\n  };\n\n  const getRuntime = (): Runtime => {\n    if (closed) {\n      throw new Error('SQLite client is closed');\n    }\n\n    if (backgroundConnectError !== undefined) {\n      throw backgroundConnectError;\n    }\n\n    if (runtimeInstance) {\n      return runtimeInstance;\n    }\n\n    const stackInstance = instantiateExecutionStack(stack);\n    const driverDescriptor = stack.driver;\n    if (!driverDescriptor) {\n      throw new Error('Driver descriptor missing from execution stack');\n    }\n\n    const driver = driverDescriptor.create();\n    ownedDispose = () => driver.close();\n    runtimeDriver = driver;\n    if (binding !== undefined) {\n      void connectDriver(binding).catch(() => undefined);\n    }\n\n    runtimeInstance = new SqliteRuntimeImpl({\n      context,\n      adapter: stackInstance.adapter,\n      driver,\n      ...ifDefined('verifyMarker', options.verifyMarker),\n      ...ifDefined('middleware', options.middleware),\n    });\n\n    return runtimeInstance;\n  };\n\n  const orm: UnboundOrm<TContract> = unboundOrm(\n    ormBuilder({\n      context,\n      runtime: {\n        execute(plan) {\n          return getRuntime().execute(plan);\n        },\n        connection() {\n          return getRuntime().connection();\n        },\n      },\n    }),\n  );\n\n  return {\n    sql,\n    orm,\n    enums,\n    raw: rawSqlTag,\n    context,\n    contract,\n    stack,\n    async connect(bindingInput) {\n      if (closed) {\n        throw new Error('SQLite client is closed');\n      }\n\n      if (driverConnected || connectPromise) {\n        throw new Error('SQLite client already connected');\n      }\n\n      backgroundConnectError = undefined;\n\n      if (bindingInput !== undefined) {\n        binding = resolveSqliteBinding(bindingInput);\n      }\n\n      if (binding === undefined) {\n        throw new Error(\n          'SQLite binding not configured. Pass path to sqlite(...) or call db.connect({ path }).',\n        );\n      }\n\n      const runtime = getRuntime();\n      if (driverConnected) {\n        return runtime;\n      }\n\n      await connectDriver(binding);\n      return runtime;\n    },\n    runtime() {\n      return getRuntime();\n    },\n    prepare<\n      D extends Declaration<CT>,\n      Row,\n      CT extends CodecTypesBase = ExtractCodecTypes<TContract> & CodecTypesBase,\n    >(\n      declaration: D,\n      callback: (sql: UnboundSql<TContract>, params: BindSiteParams<D>) => SqlQueryPlan<Row>,\n    ): Promise<PreparedStatement<ParamsFromDeclaration<D, CT>, Row>> {\n      return getRuntime().prepare<D, Row, CT>(declaration, (params) => callback(sql, params));\n    },\n\n    transaction<R>(fn: (tx: SqliteTransactionContext<TContract>) => PromiseLike<R>): Promise<R> {\n      let runtime: ReturnType<typeof getRuntime>;\n      try {\n        runtime = getRuntime();\n      } catch (err) {\n        return Promise.reject(err);\n      }\n      return withTransaction(runtime, (txCtx) => {\n        const rawCodecInferer = stack.adapter.rawCodecInferer;\n        const txSqlNamespace = sqlBuilder<TContract>({ context, rawCodecInferer })[\n          UNBOUND_NAMESPACE_ID\n        ];\n        assertDefined(\n          txSqlNamespace,\n          'the unbound namespace always exists on a sqlite builder output',\n        );\n        const txSql: UnboundSql<TContract> = blindCast<\n          UnboundSql<TContract>,\n          'Db<TContract> indexed by a literal key widens NsId to string; TableProxy is invariant in NsId via insert()/update() parameter positions, so the indexed-access type cannot be proven to match the literal-keyed Namespace without this cast'\n        >(txSqlNamespace);\n\n        const txOrm: UnboundOrm<TContract> = unboundOrm(\n          ormBuilder({\n            runtime: {\n              execute(plan) {\n                return txCtx.execute(plan);\n              },\n            },\n            context,\n          }),\n        );\n\n        // Use `txCtx` as the prototype instead of spreading it so that live\n        // accessors (notably the `invalidated` getter, which reads a closure\n        // variable in `withTransaction`) remain wired to the original object.\n        // Spreading would evaluate the getter once and freeze its value.\n        const tx: SqliteTransactionContext<TContract> = Object.assign(\n          castAs<TransactionContext>(Object.create(txCtx)),\n          { sql: txSql, orm: txOrm, enums },\n        );\n\n        return fn(tx);\n      });\n    },\n\n    close(): Promise<void> {\n      if (closePromise) return closePromise;\n      closed = true;\n      closePromise = (async () => {\n        await connectPromise?.catch(() => undefined);\n        await ownedDispose?.();\n      })();\n      return closePromise;\n    },\n\n    [Symbol.asyncDispose](): Promise<void> {\n      return this.close();\n    },\n  };\n}\n"],"mappings":"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"}