{"version":3,"file":"session.cjs","names":["SQLiteEffectSession","entityKind","SQLiteEffectPreparedQuery","Effect","Exit","TransactionRollbackError","SQLiteEffectTransaction"],"sources":["../../src/effect-sqlite-do/session.ts"],"sourcesContent":["/// <reference types=\"@cloudflare/workers-types\" />\nimport type { SqliteClient } from '@effect/sql-sqlite-do/SqliteClient';\nimport type * as Cause from 'effect/Cause';\nimport * as Effect from 'effect/Effect';\nimport * as Exit from 'effect/Exit';\nimport type { SqlError } from 'effect/unstable/sql/SqlError';\nimport type { EffectCacheShape } from '~/cache/core/cache-effect.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport type { EffectDrizzleQueryError } from '~/effect-core/errors.ts';\nimport type { EffectLoggerShape } from '~/effect-core/logger.ts';\nimport type { QueryEffectHKTBase } from '~/effect-core/query-effect.ts';\nimport { entityKind } from '~/entity.ts';\nimport { TransactionRollbackError } from '~/errors.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { Query } from '~/sql/sql.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport {\n\tSQLiteEffectPreparedQuery,\n\ttype SQLiteEffectQueryExecutors,\n\tSQLiteEffectSession,\n\tSQLiteEffectTransaction,\n} from '~/sqlite-core/effect/session.ts';\nimport type { PreparedQueryConfig, SQLiteExecuteMethod } from '~/sqlite-core/session.ts';\n\nexport interface EffectSQLiteDoQueryEffectHKT extends QueryEffectHKTBase {\n\treadonly error: EffectDrizzleQueryError;\n\treadonly context: never;\n}\n\nexport type EffectSQLiteDoRunResult = unknown;\n\nexport interface EffectSQLiteDOSessionOptions {\n\tlogger: EffectLoggerShape;\n\tcache: EffectCacheShape;\n\tstorage: DurableObjectStorage;\n}\n\nexport class EffectSQLiteDOSession<TRelations extends AnyRelations>\n\textends SQLiteEffectSession<EffectSQLiteDoRunResult, EffectSQLiteDoQueryEffectHKT, TRelations>\n{\n\tstatic override readonly [entityKind]: string = 'EffectSQLiteDOSession';\n\n\tconstructor(\n\t\tprivate client: SqliteClient,\n\t\tdialect: SQLiteDialect,\n\t\tprotected relations: TRelations,\n\t\tprivate options: EffectSQLiteDOSessionOptions,\n\t) {\n\t\tsuper(dialect);\n\t}\n\n\toverride prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tmode: 'arrays' | 'objects' | 'raw',\n\t\t_prepare: boolean,\n\t\texecuteMethod?: SQLiteExecuteMethod,\n\t\tmapper?: (rows: any[]) => any,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): SQLiteEffectPreparedQuery<T, EffectSQLiteDoQueryEffectHKT> {\n\t\tconst executors: SQLiteEffectQueryExecutors = {\n\t\t\tall: (params) => {\n\t\t\t\tconst q = this.client.unsafe(query.sql, params);\n\n\t\t\t\tif (mode === 'arrays') return q.values;\n\t\t\t\treturn q.withoutTransform;\n\t\t\t},\n\t\t\tget: (params) => {\n\t\t\t\tconst q = this.client.unsafe(query.sql, params);\n\n\t\t\t\tif (mode === 'arrays') return q.values.pipe(Effect.map((e) => e[0]));\n\t\t\t\treturn q.withoutTransform.pipe(Effect.map((e) => e[0]));\n\t\t\t},\n\t\t\tvalues: (params) => this.client.unsafe(query.sql, params).values,\n\t\t\trun: (params) => this.client.unsafe(query.sql, params).raw,\n\t\t};\n\n\t\treturn new SQLiteEffectPreparedQuery<T, EffectSQLiteDoQueryEffectHKT>(\n\t\t\texecuteMethod,\n\t\t\texecutors,\n\t\t\tquery,\n\t\t\tmapper,\n\t\t\tmode,\n\t\t\tthis.options.logger,\n\t\t\tthis.options.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t);\n\t}\n\n\toverride transaction<A, E, R>(\n\t\ttransaction: (\n\t\t\ttx: EffectSQLiteDOTransaction<TRelations>,\n\t\t) => Effect.Effect<A, E, R>,\n\t): Effect.Effect<A, E | SqlError, R> {\n\t\tconst { dialect, relations, options: { storage } } = this;\n\n\t\t// Bypass effect wrapper's transaction bug by using driver directly\n\t\treturn Effect.gen({ self: this }, function*() {\n\t\t\tconst context = yield* Effect.context<R>();\n\t\t\tlet cause: Cause.Cause<E> | undefined;\n\n\t\t\ttry {\n\t\t\t\treturn storage.transactionSync(() => {\n\t\t\t\t\tconst tx = new EffectSQLiteDOTransaction<TRelations>(dialect, this, relations);\n\t\t\t\t\tconst exit = Effect.runSyncExit(Effect.provideContext(transaction(tx), context));\n\n\t\t\t\t\tif (Exit.isFailure(exit)) {\n\t\t\t\t\t\tcause = exit.cause;\n\t\t\t\t\t\tthrow new TransactionRollbackError();\n\t\t\t\t\t}\n\n\t\t\t\t\treturn exit.value;\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tif (cause) return yield* Effect.failCause(cause);\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t});\n\n\t\t// return this.client.withTransaction(Effect.gen({ self: this }, function*() {\n\t\t// \tconst tx = new EffectSQLiteDOTransaction<TRelations>(\n\t\t// \t\tdialect,\n\t\t// \t\tthis,\n\t\t// \t\trelations,\n\t\t// \t);\n\n\t\t// \treturn yield* transaction(tx);\n\t\t// }));\n\t}\n}\n\nexport class EffectSQLiteDOTransaction<TRelations extends AnyRelations>\n\textends SQLiteEffectTransaction<EffectSQLiteDoQueryEffectHKT, EffectSQLiteDoRunResult, TRelations>\n{\n\tstatic override readonly [entityKind]: string = 'EffectSQLiteDOTransaction';\n\n\toverride transaction<A, E, R>(\n\t\ttransaction: (\n\t\t\ttx: SQLiteEffectTransaction<EffectSQLiteDoQueryEffectHKT, EffectSQLiteDoRunResult, TRelations>,\n\t\t) => Effect.Effect<A, E, R>,\n\t): Effect.Effect<A, E | SqlError, R> {\n\t\treturn this.session.transaction(transaction);\n\t}\n}\n"],"mappings":";;;;;;;;;;;AAqCA,IAAa,wBAAb,cACSA,oDACT;CACC,QAA0BC,0BAAsB;CAEhD,YACC,AAAQ,QACR,SACA,AAAU,WACV,AAAQ,SACP;AACD,QAAM,QAAQ;EALN;EAEE;EACF;;CAKT,AAAS,aACR,OACA,MACA,UACA,eACA,QACA,eAIA,aAC6D;AAkB7D,SAAO,IAAIC,0DACV,eAlB6C;GAC7C,MAAM,WAAW;IAChB,MAAM,IAAI,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO;AAE/C,QAAI,SAAS,SAAU,QAAO,EAAE;AAChC,WAAO,EAAE;;GAEV,MAAM,WAAW;IAChB,MAAM,IAAI,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO;AAE/C,QAAI,SAAS,SAAU,QAAO,EAAE,OAAO,KAAKC,cAAO,KAAK,MAAM,EAAE,GAAG,CAAC;AACpE,WAAO,EAAE,iBAAiB,KAAKA,cAAO,KAAK,MAAM,EAAE,GAAG,CAAC;;GAExD,SAAS,WAAW,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO,CAAC;GAC1D,MAAM,WAAW,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO,CAAC;GACvD,EAKA,OACA,QACA,MACA,KAAK,QAAQ,QACb,KAAK,QAAQ,OACb,eACA,YACA;;CAGF,AAAS,YACR,aAGoC;EACpC,MAAM,EAAE,SAAS,WAAW,SAAS,EAAE,cAAc;AAGrD,SAAOA,cAAO,IAAI,EAAE,MAAM,MAAM,EAAE,aAAY;GAC7C,MAAM,UAAU,OAAOA,cAAO,SAAY;GAC1C,IAAI;AAEJ,OAAI;AACH,WAAO,QAAQ,sBAAsB;KACpC,MAAM,KAAK,IAAI,0BAAsC,SAAS,MAAM,UAAU;KAC9E,MAAM,OAAOA,cAAO,YAAYA,cAAO,eAAe,YAAY,GAAG,EAAE,QAAQ,CAAC;AAEhF,SAAIC,YAAK,UAAU,KAAK,EAAE;AACzB,cAAQ,KAAK;AACb,YAAM,IAAIC,sCAA0B;;AAGrC,YAAO,KAAK;MACX;YACM,GAAG;AACX,QAAI,MAAO,QAAO,OAAOF,cAAO,UAAU,MAAM;AAChD,UAAM;;IAEN;;;AAcJ,IAAa,4BAAb,cACSG,wDACT;CACC,QAA0BL,0BAAsB;CAEhD,AAAS,YACR,aAGoC;AACpC,SAAO,KAAK,QAAQ,YAAY,YAAY"}