{"version":3,"file":"session.cjs","names":["SQLiteAsyncSession","entityKind","NoopLogger","NoopCache","SQLiteAsyncPreparedQuery","SQLiteAsyncTransaction"],"sources":["../../../src/bun-sql/sqlite/session.ts"],"sourcesContent":["/// <reference types=\"bun-types\" />\n\nimport type { SavepointSQL, SQL as BunSQL, TransactionSQL } from 'bun';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { Query } from '~/sql/sql.ts';\nimport {\n\tSQLiteAsyncPreparedQuery,\n\ttype SQLiteAsyncPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteAsyncSession,\n\tSQLiteAsyncTransaction,\n\ttype SQLiteQueryExecutors,\n} from '~/sqlite-core/async/session.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport type { SQLiteExecuteMethod, SQLiteTransactionConfig } from '~/sqlite-core/session.ts';\n\nexport interface BunSQLiteSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport type BunSQLiteRunResult = Record<string, unknown>[] & Record<string, unknown>;\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class BunSQLiteSession<\n\tTSQL extends BunSQL,\n\tTRelations extends AnyRelations,\n> extends SQLiteAsyncSession<'async', BunSQLiteRunResult, TRelations> {\n\tstatic override readonly [entityKind]: string = 'BunSQLiteSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\treadonly client: TSQL,\n\t\tdialect: SQLiteDialect,\n\t\tprivate relations: TRelations,\n\t\treadonly options: BunSQLiteSessionOptions,\n\t) {\n\t\tsuper(dialect, 'async');\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t}\n\n\tprepareQuery<T extends Omit<PreparedQueryConfig, 'run'>>(\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): SQLiteAsyncPreparedQuery<T & { run: BunSQLiteRunResult }> {\n\t\tconst executors: SQLiteQueryExecutors<'async'> = {\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;\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().then((rows) => rows[0]);\n\t\t\t\treturn q.then((rows) => rows[0]);\n\t\t\t},\n\t\t\trun: (params) => {\n\t\t\t\treturn this.client.unsafe(query.sql, params);\n\t\t\t},\n\t\t\tvalues: (params) => {\n\t\t\t\treturn this.client.unsafe(query.sql, params).values();\n\t\t\t},\n\t\t};\n\t\treturn new SQLiteAsyncPreparedQuery(\n\t\t\t'async',\n\t\t\texecuteMethod,\n\t\t\texecutors,\n\t\t\tquery,\n\t\t\tmapper,\n\t\t\tmode,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (db: BunSQLiteTransaction<TRelations>) => T | Promise<T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Promise<T> {\n\t\tif (config?.behavior === 'concurrent') throw new Error('Concurrent transactions are not supported by driver');\n\n\t\treturn this.client.begin(config?.behavior ?? '', async (client) => {\n\t\t\tconst session = new BunSQLiteSession<SavepointSQL, TRelations>(\n\t\t\t\tclient,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.relations,\n\t\t\t\tthis.options,\n\t\t\t);\n\t\t\tconst tx = new BunSQLiteTransaction<TRelations>(\n\t\t\t\t'async',\n\t\t\t\tthis.dialect,\n\t\t\t\tsession,\n\t\t\t\tthis.relations,\n\t\t\t);\n\n\t\t\treturn await transaction(tx);\n\t\t}) as Promise<T>;\n\t}\n}\n\nexport class BunSQLiteTransaction<\n\tTRelations extends AnyRelations,\n> extends SQLiteAsyncTransaction<'async', BunSQLiteRunResult, TRelations> {\n\tstatic override readonly [entityKind]: string = 'BunSQLiteTransaction';\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: BunSQLiteTransaction<TRelations>) => Promise<T>,\n\t): Promise<T> {\n\t\treturn (<BunSQLiteSession<TransactionSQL, any>> <unknown> this.session).client.savepoint(\n\t\t\tasync (client) => {\n\t\t\t\tconst session = new BunSQLiteSession<SavepointSQL, TRelations>(\n\t\t\t\t\tclient,\n\t\t\t\t\tthis.session.dialect,\n\t\t\t\t\tthis._.relations,\n\t\t\t\t\t(<BunSQLiteSession<TransactionSQL, any>> <unknown> this.session).options,\n\t\t\t\t);\n\t\t\t\tconst tx = new BunSQLiteTransaction(\n\t\t\t\t\t'async',\n\t\t\t\t\tthis.dialect,\n\t\t\t\t\tsession,\n\t\t\t\t\tthis._.relations,\n\t\t\t\t\tthis.nestedIndex + 1,\n\t\t\t\t);\n\t\t\t\treturn await transaction(tx);\n\t\t\t},\n\t\t);\n\t}\n}\n"],"mappings":";;;;;;;;AA6BA,IAAa,mBAAb,MAAa,yBAGHA,kDAA4D;CACrE,QAA0BC,0BAAsB;CAEhD,AAAQ;CACR,AAAQ;CAER,YACC,AAAS,QACT,SACA,AAAQ,WACR,AAAS,SACR;AACD,QAAM,SAAS,QAAQ;EALd;EAED;EACC;AAGT,OAAK,SAAS,QAAQ,UAAU,IAAIC,wBAAY;AAChD,OAAK,QAAQ,QAAQ,SAAS,IAAIC,iCAAW;;CAG9C,aACC,OACA,MACA,UACA,eACA,QACA,eAIA,aAC4D;AAqB5D,SAAO,IAAIC,wDACV,SACA,eAtBgD;GAChD,MAAM,WAAW;IAChB,MAAM,IAAI,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO;AAE/C,QAAI,SAAS,SAAU,QAAO,EAAE,QAAQ;AACxC,WAAO;;GAER,MAAM,WAAW;IAChB,MAAM,IAAI,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO;AAE/C,QAAI,SAAS,SAAU,QAAO,EAAE,QAAQ,CAAC,MAAM,SAAS,KAAK,GAAG;AAChE,WAAO,EAAE,MAAM,SAAS,KAAK,GAAG;;GAEjC,MAAM,WAAW;AAChB,WAAO,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO;;GAE7C,SAAS,WAAW;AACnB,WAAO,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO,CAAC,QAAQ;;GAEtD,EAKA,OACA,QACA,MACA,KAAK,QACL,KAAK,OACL,eACA,YACA;;CAGF,MAAe,YACd,aACA,QACa;AACb,MAAI,QAAQ,aAAa,aAAc,OAAM,IAAI,MAAM,sDAAsD;AAE7G,SAAO,KAAK,OAAO,MAAM,QAAQ,YAAY,IAAI,OAAO,WAAW;GAClE,MAAM,UAAU,IAAI,iBACnB,QACA,KAAK,SACL,KAAK,WACL,KAAK,QACL;AAQD,UAAO,MAAM,YAPF,IAAI,qBACd,SACA,KAAK,SACL,SACA,KAAK,UACL,CAE2B;IAC3B;;;AAIJ,IAAa,uBAAb,MAAa,6BAEHC,sDAAgE;CACzE,QAA0BJ,0BAAsB;CAEhD,MAAe,YACd,aACa;AACb,SAA0D,KAAK,QAAS,OAAO,UAC9E,OAAO,WAAW;GACjB,MAAM,UAAU,IAAI,iBACnB,QACA,KAAK,QAAQ,SACb,KAAK,EAAE,WAC4C,KAAK,QAAS,QACjE;AAQD,UAAO,MAAM,YAPF,IAAI,qBACd,SACA,KAAK,SACL,SACA,KAAK,EAAE,WACP,KAAK,cAAc,EACnB,CAC2B;IAE7B"}