{"version":3,"file":"sqlite-do-database.mjs","names":[],"sources":["../../src/drizzle/sqlite-do-database.ts"],"sourcesContent":["import type * as SqliteClient from \"@effect/sql-sqlite-do/SqliteClient\";\nimport { PersistenceConfigurationError } from \"@yielded/auth-persistence/Adapter\";\nimport type { AnyRelations } from \"drizzle-orm\";\nimport { EffectTransactionRollbackError } from \"drizzle-orm/effect-core\";\nimport type { EffectSQLiteDoDatabase } from \"drizzle-orm/effect-sqlite-do\";\nimport * as Effect from \"effect/Effect\";\nimport type * as SqlError from \"effect/sql/SqlError\";\n\ntype NativeDatabase<T extends AnyRelations> = EffectSQLiteDoDatabase<T> & {\n  readonly $client: SqliteClient.SqliteClient;\n};\n\ntype Queries<T extends AnyRelations> = Pick<\n  NativeDatabase<T>,\n  | \"query\"\n  | \"$cache\"\n  | \"$with\"\n  | \"$count\"\n  | \"with\"\n  | \"select\"\n  | \"selectDistinct\"\n  | \"insert\"\n  | \"update\"\n  | \"delete\"\n  | \"run\"\n  | \"all\"\n  | \"get\"\n  | \"values\"\n>;\n\n/** Drizzle queries with transactions owned by the captured Effect SQL client. */\nexport type DatabaseValue<T extends AnyRelations = AnyRelations> = Queries<T> & {\n  readonly $client: SqliteClient.SqliteClient;\n  readonly transaction: <A, E, R>(\n    body: (transaction: Transaction<T>) => Effect.Effect<A, E, R>,\n  ) => Effect.Effect<A, E | SqlError.SqlError, R>;\n};\n\n/** An asynchronous Durable Object transaction, including nested rollback. */\nexport type Transaction<T extends AnyRelations = AnyRelations> = DatabaseValue<T> & {\n  readonly rollback: () => EffectTransactionRollbackError;\n};\n\n/** Construct a query handle inside an existing asynchronous SQL owner. */\nexport const makeTransactionHandle = <T extends AnyRelations>(\n  database: DatabaseValue<T>,\n): Transaction<T> => ({\n  ...database,\n  rollback: () => EffectTransactionRollbackError.make({}),\n});\n\n/**\n * Keep the application's Drizzle query configuration and capture its SQL client.\n * Effect SQL owns storage.transaction, so cryptography may suspend before commit.\n * Raw Drizzle transactionSync callbacks are not supported outer owners.\n */\nexport const makeDatabase = Effect.fnUntraced(function* <T extends AnyRelations>(\n  database: NativeDatabase<T>,\n): Effect.fn.Return<DatabaseValue<T>, PersistenceConfigurationError> {\n  const client = database.$client;\n\n  if (client.config.storage === undefined)\n    return yield* PersistenceConfigurationError.make({\n      reason: \"SqliteDo requires a SQL client configured with Durable Object storage\",\n    });\n\n  const queries: Queries<T> = {\n    query: database.query,\n    $cache: database.$cache,\n    $with: database.$with.bind(database),\n    $count: database.$count.bind(database),\n    with: database.with.bind(database),\n    select: database.select.bind(database),\n    selectDistinct: database.selectDistinct.bind(database),\n    insert: database.insert.bind(database),\n    update: database.update.bind(database),\n    delete: database.delete.bind(database),\n    run: database.run.bind(database),\n    all: database.all.bind(database),\n    get: database.get.bind(database),\n    values: database.values.bind(database),\n  };\n\n  const transaction: DatabaseValue<T>[\"transaction\"] = (body) =>\n    client.withTransaction(Effect.suspend(() => body(makeTransaction())));\n\n  const makeTransaction = (): Transaction<T> => ({\n    ...queries,\n    $client: client,\n    transaction,\n    rollback: () => EffectTransactionRollbackError.make({}),\n  });\n\n  return { ...queries, $client: client, transaction };\n});\n"],"mappings":";;;;;AA4CA,MAAa,yBACX,cACoB;CACpB,GAAG;CACH,gBAAgB,+BAA+B,KAAK,CAAC,CAAC;AACxD;;;;;;AAOA,MAAa,eAAe,OAAO,WAAW,WAC5C,UACmE;CACnE,MAAM,SAAS,SAAS;CAExB,IAAI,OAAO,OAAO,YAAY,KAAA,GAC5B,OAAO,OAAO,8BAA8B,KAAK,EAC/C,QAAQ,wEACV,CAAC;CAEH,MAAM,UAAsB;EAC1B,OAAO,SAAS;EAChB,QAAQ,SAAS;EACjB,OAAO,SAAS,MAAM,KAAK,QAAQ;EACnC,QAAQ,SAAS,OAAO,KAAK,QAAQ;EACrC,MAAM,SAAS,KAAK,KAAK,QAAQ;EACjC,QAAQ,SAAS,OAAO,KAAK,QAAQ;EACrC,gBAAgB,SAAS,eAAe,KAAK,QAAQ;EACrD,QAAQ,SAAS,OAAO,KAAK,QAAQ;EACrC,QAAQ,SAAS,OAAO,KAAK,QAAQ;EACrC,QAAQ,SAAS,OAAO,KAAK,QAAQ;EACrC,KAAK,SAAS,IAAI,KAAK,QAAQ;EAC/B,KAAK,SAAS,IAAI,KAAK,QAAQ;EAC/B,KAAK,SAAS,IAAI,KAAK,QAAQ;EAC/B,QAAQ,SAAS,OAAO,KAAK,QAAQ;CACvC;CAEA,MAAM,eAAgD,SACpD,OAAO,gBAAgB,OAAO,cAAc,KAAK,gBAAgB,CAAC,CAAC,CAAC;CAEtE,MAAM,yBAAyC;EAC7C,GAAG;EACH,SAAS;EACT;EACA,gBAAgB,+BAA+B,KAAK,CAAC,CAAC;CACxD;CAEA,OAAO;EAAE,GAAG;EAAS,SAAS;EAAQ;CAAY;AACpD,CAAC"}