{"version":3,"file":"session.cjs","names":["SQLiteAsyncSession","entityKind","NoopLogger","NoopCache","SQLiteAsyncPreparedQuery","sql","SQLiteAsyncTransaction"],"sources":["../../../src/expo-sqlite/async/session.ts"],"sourcesContent":["import type { SQLiteDatabase, SQLiteRunResult } from 'expo-sqlite';\nimport { type Cache, NoopCache } from '~/cache/core/cache.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, sql } 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 ExpoSQLiteAsyncSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport type ExpoSQLiteAsyncRunResult = SQLiteRunResult;\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class ExpoSQLiteAsyncSession<TRelations extends AnyRelations>\n\textends SQLiteAsyncSession<'async', ExpoSQLiteAsyncRunResult, TRelations>\n{\n\tstatic override readonly [entityKind]: string = 'ExpoSQLiteAsyncSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: SQLiteDatabase,\n\t\tdialect: SQLiteDialect,\n\t\tprivate relations: TRelations,\n\t\tprivate options: ExpoSQLiteAsyncSessionOptions = {},\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: ExpoSQLiteAsyncRunResult }> {\n\t\tconst executors: SQLiteQueryExecutors<'async'> = {\n\t\t\tall: (params) =>\n\t\t\t\tthis.client.prepareAsync(query.sql).then((stmt) => {\n\t\t\t\t\tconst q = mode === 'arrays'\n\t\t\t\t\t\t? stmt.executeForRawResultAsync(params as any[])\n\t\t\t\t\t\t: stmt.executeAsync(params as any[]);\n\n\t\t\t\t\treturn q.then((r) => r.getAllAsync()).finally(() => stmt.finalizeAsync());\n\t\t\t\t}),\n\t\t\tget: (params) =>\n\t\t\t\tthis.client.prepareAsync(query.sql).then((stmt) => {\n\t\t\t\t\tconst q = mode === 'arrays'\n\t\t\t\t\t\t? stmt.executeForRawResultAsync(params as any[])\n\t\t\t\t\t\t: stmt.executeAsync(params as any[]);\n\n\t\t\t\t\treturn q.then((r) => r.getFirstAsync()).finally(() => stmt.finalizeAsync());\n\t\t\t\t}),\n\t\t\trun: (params) =>\n\t\t\t\tthis.client.prepareAsync(query.sql).then((stmt) =>\n\t\t\t\t\tstmt.executeAsync(params as any[]).then(({ changes, lastInsertRowId }) => ({\n\t\t\t\t\t\tchanges,\n\t\t\t\t\t\tlastInsertRowId,\n\t\t\t\t\t})).finally(() => stmt.finalizeAsync())\n\t\t\t\t),\n\t\t\tvalues: (params) =>\n\t\t\t\tthis.client.prepareAsync(query.sql).then((stmt) =>\n\t\t\t\t\tstmt.executeForRawResultAsync(params as any[]).then((r) => r.getAllAsync()).finally(() =>\n\t\t\t\t\t\tstmt.finalizeAsync()\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t};\n\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: (tx: ExpoSQLiteAsyncTransaction<TRelations>) => 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\tconst tx = new ExpoSQLiteAsyncTransaction('async', this.dialect, this, this.relations);\n\t\tawait this.run(sql.raw(`begin${config?.behavior ? ' ' + config.behavior : ''}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class ExpoSQLiteAsyncTransaction<\n\tTRelations extends AnyRelations,\n> extends SQLiteAsyncTransaction<'async', ExpoSQLiteAsyncRunResult, TRelations> {\n\tstatic override readonly [entityKind]: string = 'ExpoSQLiteAsyncTransaction';\n\n\toverride async transaction<T>(transaction: (tx: ExpoSQLiteAsyncTransaction<TRelations>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new ExpoSQLiteAsyncTransaction(\n\t\t\t'async',\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tthis._.relations,\n\t\t\tthis.nestedIndex + 1,\n\t\t);\n\t\tawait this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result as T;\n\t\t} catch (err) {\n\t\t\tawait this.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;AA2BA,IAAa,yBAAb,cACSA,kDACT;CACC,QAA0BC,0BAAsB;CAEhD,AAAQ;CACR,AAAQ;CAER,YACC,AAAQ,QACR,SACA,AAAQ,WACR,AAAQ,UAAyC,EAAE,EAClD;AACD,QAAM,SAAS,QAAQ;EALf;EAEA;EACA;AAGR,OAAK,SAAS,QAAQ,UAAU,IAAIC,wBAAY;AAChD,OAAK,QAAQ,QAAQ,SAAS,IAAIC,iCAAW;;CAG9C,aACC,OACA,MACA,UACA,eACA,QACA,eAIA,aACkE;AAiClE,SAAO,IAAIC,wDACV,SACA,eAlCgD;GAChD,MAAM,WACL,KAAK,OAAO,aAAa,MAAM,IAAI,CAAC,MAAM,SAAS;AAKlD,YAJU,SAAS,WAChB,KAAK,yBAAyB,OAAgB,GAC9C,KAAK,aAAa,OAAgB,EAE5B,MAAM,MAAM,EAAE,aAAa,CAAC,CAAC,cAAc,KAAK,eAAe,CAAC;KACxE;GACH,MAAM,WACL,KAAK,OAAO,aAAa,MAAM,IAAI,CAAC,MAAM,SAAS;AAKlD,YAJU,SAAS,WAChB,KAAK,yBAAyB,OAAgB,GAC9C,KAAK,aAAa,OAAgB,EAE5B,MAAM,MAAM,EAAE,eAAe,CAAC,CAAC,cAAc,KAAK,eAAe,CAAC;KAC1E;GACH,MAAM,WACL,KAAK,OAAO,aAAa,MAAM,IAAI,CAAC,MAAM,SACzC,KAAK,aAAa,OAAgB,CAAC,MAAM,EAAE,SAAS,uBAAuB;IAC1E;IACA;IACA,EAAE,CAAC,cAAc,KAAK,eAAe,CAAC,CACvC;GACF,SAAS,WACR,KAAK,OAAO,aAAa,MAAM,IAAI,CAAC,MAAM,SACzC,KAAK,yBAAyB,OAAgB,CAAC,MAAM,MAAM,EAAE,aAAa,CAAC,CAAC,cAC3E,KAAK,eAAe,CACpB,CACD;GACF,EAMA,OACA,QACA,MACA,KAAK,QACL,KAAK,OACL,eACA,YACA;;CAGF,MAAe,YACd,aACA,SAAkC,EAAE,EACvB;AACb,MAAI,QAAQ,aAAa,aAAc,OAAM,IAAI,MAAM,sDAAsD;EAE7G,MAAM,KAAK,IAAI,2BAA2B,SAAS,KAAK,SAAS,MAAM,KAAK,UAAU;AACtF,QAAM,KAAK,IAAIC,iBAAI,IAAI,QAAQ,QAAQ,WAAW,MAAM,OAAO,WAAW,KAAK,CAAC;AAChF,MAAI;GACH,MAAM,SAAS,MAAM,YAAY,GAAG;AACpC,SAAM,KAAK,IAAI,gBAAG,SAAS;AAC3B,UAAO;WACC,KAAK;AACb,SAAM,KAAK,IAAI,gBAAG,WAAW;AAC7B,SAAM;;;;AAKT,IAAa,6BAAb,MAAa,mCAEHC,sDAAsE;CAC/E,QAA0BL,0BAAsB;CAEhD,MAAe,YAAe,aAAqF;EAClH,MAAM,gBAAgB,KAAK,KAAK;EAChC,MAAM,KAAK,IAAI,2BACd,SACA,KAAK,SACL,KAAK,SACL,KAAK,EAAE,WACP,KAAK,cAAc,EACnB;AACD,QAAM,KAAK,QAAQ,IAAII,iBAAI,IAAI,aAAa,gBAAgB,CAAC;AAC7D,MAAI;GACH,MAAM,SAAS,MAAM,YAAY,GAAG;AACpC,SAAM,KAAK,QAAQ,IAAIA,iBAAI,IAAI,qBAAqB,gBAAgB,CAAC;AACrE,UAAO;WACC,KAAK;AACb,SAAM,KAAK,QAAQ,IAAIA,iBAAI,IAAI,yBAAyB,gBAAgB,CAAC;AACzE,SAAM"}