{"version":3,"file":"session.cjs","names":["PgAsyncSession","entityKind","NoopLogger","NoopCache","PgAsyncPreparedQuery","PgAsyncTransaction"],"sources":["../../src/postgres-js/session.ts"],"sourcesContent":["import type { Row, RowList, Sql, TransactionSql } from 'postgres';\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 { PgAsyncPreparedQuery, PgAsyncSession, PgAsyncTransaction } from '~/pg-core/async/session.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig } from '~/pg-core/session.ts';\nimport type { PreparedQueryConfig } from '~/pg-core/session.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { Query } from '~/sql/sql.ts';\nimport type { Assume } from '~/utils.ts';\n\nexport interface PostgresJsSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class PostgresJsSession<TSQL extends Sql, TRelations extends AnyRelations>\n\textends PgAsyncSession<PostgresJsQueryResultHKT, TRelations>\n{\n\tstatic override readonly [entityKind]: string = 'PostgresJsSession';\n\n\tlogger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tpublic client: TSQL,\n\t\tdialect: PgDialect,\n\t\tprivate relations: TRelations,\n\t\t/** @internal */\n\t\treadonly options: PostgresJsSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tmode: 'arrays' | 'objects' | 'raw',\n\t\tname: string | boolean,\n\t\tmapper: ((rows: any[]) => any) | undefined,\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) {\n\t\tconst executor = async (params?: unknown[]) => {\n\t\t\tif (mode === 'objects') {\n\t\t\t\treturn this.client.unsafe(query.sql, params ?? [] as any[], {\n\t\t\t\t\tprepare: name !== false,\n\t\t\t\t}).then((rows) => Object.values(rows));\n\t\t\t}\n\t\t\tif (mode === 'raw') {\n\t\t\t\treturn this.client.unsafe(query.sql, params ?? [] as any[], {\n\t\t\t\t\tprepare: name !== false,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this.client.unsafe(query.sql, params ?? [] as any[], {\n\t\t\t\tprepare: name !== false,\n\t\t\t}).values().then((rows) => Object.values(rows));\n\t\t};\n\n\t\treturn new PgAsyncPreparedQuery<T>(\n\t\t\texecutor,\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\toverride transaction<T>(\n\t\ttransaction: (tx: PostgresJsTransaction<TRelations>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig,\n\t): Promise<T> {\n\t\treturn this.client.begin(async (client) => {\n\t\t\tconst session = new PostgresJsSession<TransactionSql, 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 PostgresJsTransaction(this.dialect, session, this.relations);\n\t\t\tif (config) {\n\t\t\t\tawait tx.setTransaction(config);\n\t\t\t}\n\t\t\treturn transaction(tx);\n\t\t}) as Promise<T>;\n\t}\n}\n\nexport class PostgresJsTransaction<\n\tTRelations extends AnyRelations,\n> extends PgAsyncTransaction<PostgresJsQueryResultHKT, TRelations> {\n\tstatic override readonly [entityKind]: string = 'PostgresJsTransaction';\n\n\tconstructor(\n\t\tdialect: PgDialect,\n\t\t/** @internal */\n\t\toverride readonly session: PostgresJsSession<TransactionSql, TRelations>,\n\t\trelations: TRelations,\n\t\tnestedIndex = 0,\n\t) {\n\t\tsuper(dialect, session, relations, nestedIndex, false);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: PostgresJsTransaction<TRelations>) => Promise<T>,\n\t): Promise<T> {\n\t\treturn this.session.client.savepoint((client) => {\n\t\t\tconst session = new PostgresJsSession<TransactionSql, TRelations>(\n\t\t\t\tclient,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis._.relations,\n\t\t\t\tthis.session.options,\n\t\t\t);\n\t\t\tconst tx = new PostgresJsTransaction<TRelations>(\n\t\t\t\tthis.dialect,\n\t\t\t\tsession,\n\t\t\t\tthis._.relations,\n\t\t\t);\n\t\t\treturn transaction(tx);\n\t\t}) as Promise<T>;\n\t}\n}\n\nexport interface PostgresJsQueryResultHKT extends PgQueryResultHKT {\n\ttype: RowList<Assume<this['row'], Row>[]>;\n}\n"],"mappings":";;;;;;;;AAmBA,IAAa,oBAAb,MAAa,0BACJA,0CACT;CACC,QAA0BC,0BAAsB;CAEhD;CACA,AAAQ;CAER,YACC,AAAO,QACP,SACA,AAAQ,WAER,AAAS,UAAoC,EAAE,EAC9C;AACD,QAAM,QAAQ;EANP;EAEC;EAEC;AAGT,OAAK,SAAS,QAAQ,UAAU,IAAIC,wBAAY;AAChD,OAAK,QAAQ,QAAQ,SAAS,IAAIC,iCAAW;;CAG9C,aACC,OACA,MACA,MACA,QACA,eAIA,aACC;EACD,MAAM,WAAW,OAAO,WAAuB;AAC9C,OAAI,SAAS,UACZ,QAAO,KAAK,OAAO,OAAO,MAAM,KAAK,UAAU,EAAE,EAAW,EAC3D,SAAS,SAAS,OAClB,CAAC,CAAC,MAAM,SAAS,OAAO,OAAO,KAAK,CAAC;AAEvC,OAAI,SAAS,MACZ,QAAO,KAAK,OAAO,OAAO,MAAM,KAAK,UAAU,EAAE,EAAW,EAC3D,SAAS,SAAS,OAClB,CAAC;AAEH,UAAO,KAAK,OAAO,OAAO,MAAM,KAAK,UAAU,EAAE,EAAW,EAC3D,SAAS,SAAS,OAClB,CAAC,CAAC,QAAQ,CAAC,MAAM,SAAS,OAAO,OAAO,KAAK,CAAC;;AAGhD,SAAO,IAAIC,gDACV,UACA,OACA,QACA,MACA,KAAK,QACL,KAAK,OACL,eACA,YACA;;CAEF,AAAS,YACR,aACA,QACa;AACb,SAAO,KAAK,OAAO,MAAM,OAAO,WAAW;GAC1C,MAAM,UAAU,IAAI,kBACnB,QACA,KAAK,SACL,KAAK,WACL,KAAK,QACL;GACD,MAAM,KAAK,IAAI,sBAAsB,KAAK,SAAS,SAAS,KAAK,UAAU;AAC3E,OAAI,OACH,OAAM,GAAG,eAAe,OAAO;AAEhC,UAAO,YAAY,GAAG;IACrB;;;AAIJ,IAAa,wBAAb,MAAa,8BAEHC,8CAAyD;CAClE,QAA0BJ,0BAAsB;CAEhD,YACC,SAEA,AAAkB,SAClB,WACA,cAAc,GACb;AACD,QAAM,SAAS,SAAS,WAAW,aAAa,MAAM;EAJpC;;CAOnB,AAAS,YACR,aACa;AACb,SAAO,KAAK,QAAQ,OAAO,WAAW,WAAW;GAChD,MAAM,UAAU,IAAI,kBACnB,QACA,KAAK,SACL,KAAK,EAAE,WACP,KAAK,QAAQ,QACb;AAMD,UAAO,YALI,IAAI,sBACd,KAAK,SACL,SACA,KAAK,EAAE,UACP,CACqB;IACrB"}