pqb 0.64.0 → 0.65.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"postgres-js.js","sources":["../src/adapters/adapter.utils.ts","../src/adapters/features/sql-session-context.ts","../src/adapters/postgres-js.ts"],"sourcesContent":["import {\n AdapterTransactionOptions,\n TransactionAdapterBase,\n TransactionArgs,\n} from './adapter';\nimport { RecordStringOrNumber } from 'pqb/internal';\n\ninterface SolvedTransactionArgs {\n options: AdapterTransactionOptions | undefined;\n cb: (adapter: TransactionAdapterBase) => Promise<unknown>;\n}\n\nconst transactionArgs: SolvedTransactionArgs = {\n cb: undefined,\n options: undefined,\n} as never;\n\nexport const getTransactionArgs = (args: TransactionArgs<unknown>) => {\n if (args[1]) {\n transactionArgs.options = args[0] as AdapterTransactionOptions;\n transactionArgs.cb = args[1];\n } else {\n transactionArgs.cb = args[0] as never;\n }\n return transactionArgs;\n};\n\nexport const mergeLocals = (\n locals: RecordStringOrNumber,\n options?: AdapterTransactionOptions,\n): RecordStringOrNumber =>\n options?.locals ? { ...locals, ...options.locals } : locals;\n\nexport const getSetLocalsSql = (\n options?: AdapterTransactionOptions,\n): string | undefined => {\n if (!options?.locals) return;\n\n return Object.entries(options.locals)\n .map(([key, value]) => `SET LOCAL ${key}=${value}`)\n .join('; ');\n};\n\nexport const getResetLocalsSql = (\n parentLocals: RecordStringOrNumber,\n options?: AdapterTransactionOptions,\n): string | undefined => {\n if (!options?.locals) return;\n\n return Object.entries(options.locals)\n .reduce<string[]>((acc, [key, value]) => {\n if (parentLocals[key] !== value) {\n acc.push(`SET LOCAL ${key}=${parentLocals[key]}`);\n }\n return acc;\n }, [])\n .join('; ');\n};\n","import { type IsQuery } from '../../query';\nimport { NestedSqlSessionError } from '../../query/errors';\nimport { type PickQueryQ } from '../../query/pick-query-types';\nimport { type QueryResult, type QueryResultRow } from '../adapter';\n\nexport interface SqlSessionState {\n // Query-scoped: Postgres role to set for this callback scope (from withOptions)\n role?: string;\n // Query-scoped: Postgres custom settings to set for this callback scope (from withOptions)\n setConfig?: Record<string, string | number | boolean>;\n}\n\nexport interface SqlSessionContextSetupResult {\n roleSetupSql?: string;\n configSetupSql?: string;\n captureRoleSql?: string;\n captureConfigSql?: string;\n captureConfigValues?: string[];\n}\n\nexport interface SqlSessionContextQueryFn {\n (sql: string, values?: unknown[]): Promise<QueryResult<QueryResultRow>>;\n}\n\ninterface CapturedSessionState {\n previousRole?: string;\n previousConfigs?: Record<string, string | null>;\n}\n\nconst quoteRoleIdentifier = (role: string): string => {\n return `\"${role.replace(/\"/g, '\"\"')}\"`;\n};\n\nconst hasSqlSessionContextOptions = (options: SqlSessionState): boolean => {\n return options.role !== undefined || options.setConfig !== undefined;\n};\n\nconst hasActiveSqlSessionContext = (\n state: SqlSessionState | undefined,\n): boolean => {\n if (!state) return false;\n return state.role !== undefined || state.setConfig !== undefined;\n};\n\nconst sqlSessionContextNormalizeSetConfig = (\n setConfig: Record<string, string | number | boolean>,\n): Record<string, string> => {\n return Object.fromEntries(\n Object.entries(setConfig).map(([key, value]) => [key, String(value)]),\n );\n};\n\nconst buildConfigRestoreExpression = (\n key: string,\n value: string | null | undefined,\n): string => {\n const escapedKey = key.replace(/'/g, \"''\");\n if (value === null || value === undefined) {\n value = '';\n }\n return `set_config('${escapedKey}', '${value.replace(/'/g, \"''\")}', false) as \"${key}\"`;\n};\n\nexport const sqlSessionContextSetStorageOptions = (\n query: PickQueryQ,\n state: SqlSessionState | undefined,\n options: SqlSessionState,\n result: SqlSessionState,\n): void => {\n if (\n hasSqlSessionContextOptions(options) &&\n hasActiveSqlSessionContext(state)\n ) {\n throw new NestedSqlSessionError(query as unknown as IsQuery);\n }\n\n if (options.role !== undefined) {\n result.role = options.role;\n }\n\n if (options.setConfig) {\n result.setConfig = sqlSessionContextNormalizeSetConfig(options.setConfig);\n }\n};\n\nexport const sqlSessionContextMergeStorageState = (\n state: SqlSessionState | undefined,\n options: SqlSessionState | undefined,\n): SqlSessionState | undefined => {\n if (!options) return state;\n\n return {\n role: options.role ?? state?.role,\n setConfig: options.setConfig ?? state?.setConfig,\n };\n};\n\nexport const sqlSessionContextGetStateFromAsyncState = (\n state: SqlSessionState | undefined,\n): SqlSessionState | undefined => {\n return state?.role || state?.setConfig ? state : undefined;\n};\n\nexport const sqlSessionContextComputeSetup = (\n desired: SqlSessionState | undefined,\n): SqlSessionContextSetupResult | undefined => {\n if (!desired) return undefined;\n\n const role = desired.role;\n const hasRole = role !== undefined;\n const { setConfig } = desired;\n const configKeys = setConfig && Object.keys(setConfig);\n const hasConfig = configKeys && configKeys.length > 0;\n\n if (!hasRole && !hasConfig) return undefined;\n\n const result: SqlSessionContextSetupResult = {};\n\n if (hasRole) {\n result.roleSetupSql = `SET ROLE ${quoteRoleIdentifier(role)}`;\n result.captureRoleSql = 'SELECT current_user';\n }\n\n if (hasConfig && setConfig) {\n result.captureConfigValues = configKeys;\n const captureColumns = configKeys\n .map((key, i) => `current_setting($${i + 1}, true) as \"${key}\"`)\n .join(', ');\n result.captureConfigSql = `SELECT ${captureColumns}`;\n\n const setColumns = configKeys\n .map((key) => {\n const value = setConfig[key];\n return `set_config('${key.replace(/'/g, \"''\")}', '${typeof value === 'string' ? value.replace(/'/g, \"''\") : value}', false) as \"${key}\"`;\n })\n .join(', ');\n result.configSetupSql = `SELECT ${setColumns}`;\n }\n\n return result;\n};\n\nexport const sqlSessionContextBuildConfigRestoreBatchSql = (\n configs: Record<string, string | null | undefined>,\n): string | undefined => {\n const keys = Object.keys(configs);\n if (keys.length === 0) return undefined;\n\n const expressions = keys\n .map((key) => buildConfigRestoreExpression(key, configs[key]))\n .join(', ');\n return `SELECT ${expressions}`;\n};\n\nexport const sqlSessionContextHasState = (\n state: SqlSessionState | undefined,\n): boolean => {\n if (!state) return false;\n return (\n state.role !== undefined ||\n (state.setConfig !== undefined && Object.keys(state.setConfig).length > 0)\n );\n};\n\nexport const sqlSessionContextExecute = async <T extends QueryResultRow>(\n query: SqlSessionContextQueryFn,\n setup: SqlSessionContextSetupResult | undefined,\n mainQuery: () => Promise<QueryResult<T>>,\n release?: () => Promise<void>,\n): Promise<QueryResult<T>> => {\n if (!setup) {\n return mainQuery();\n }\n\n const captured: CapturedSessionState = {};\n const {\n captureRoleSql,\n roleSetupSql,\n captureConfigSql,\n captureConfigValues,\n configSetupSql,\n } = setup;\n\n const setupPromises: Promise<unknown>[] = [];\n\n if (captureRoleSql) {\n setupPromises.push(\n query(captureRoleSql).then((res) => {\n captured.previousRole = (res.rows[0] as unknown[])?.[0] as string;\n }),\n );\n setupPromises.push(query(roleSetupSql!));\n }\n\n if (captureConfigSql && captureConfigValues && configSetupSql) {\n captured.previousConfigs = {};\n const previousConfigs = captured.previousConfigs;\n setupPromises.push(\n query(captureConfigSql, captureConfigValues).then((res) => {\n const row = res.rows[0] as unknown[];\n captureConfigValues.forEach((key, i) => {\n previousConfigs[key] = row[i] as string | null;\n });\n }),\n );\n setupPromises.push(query(configSetupSql));\n }\n\n try {\n await Promise.all(setupPromises);\n return await mainQuery();\n } finally {\n try {\n const cleanupPromises: Promise<unknown>[] = [];\n\n if (roleSetupSql && captured.previousRole !== undefined) {\n cleanupPromises.push(\n query(`SET ROLE ${quoteRoleIdentifier(captured.previousRole)}`),\n );\n }\n\n if (captured.previousConfigs) {\n const restoreSql = sqlSessionContextBuildConfigRestoreBatchSql(\n captured.previousConfigs,\n );\n if (restoreSql) {\n cleanupPromises.push(query(restoreSql));\n }\n }\n\n await Promise.all(cleanupPromises);\n } finally {\n if (release) {\n await release();\n }\n }\n }\n};\n","import postgres, { Error, Row, RowList, TransactionSql } from 'postgres';\nimport {\n AdapterBase,\n AdapterConfigBase,\n emptyObject,\n MaybeArray,\n QueryArraysResult,\n QueryResult,\n QueryResultRow,\n returnArg,\n setConnectRetryConfig,\n wrapAdapterFnWithConnectRetry,\n DbOptions,\n DefaultColumnTypes,\n DefaultSchemaConfig,\n DbResult,\n ColumnSchemaConfig,\n TransactionAdapterBase,\n TransactionArgs,\n RecordStringOrNumber,\n} from 'pqb/internal';\nimport { QueryError, createDbWithAdapter, QuerySchema } from 'pqb';\nimport {\n getResetLocalsSql,\n getSetLocalsSql,\n getTransactionArgs,\n mergeLocals,\n} from './adapter.utils';\nimport { SqlSessionState } from './adapter';\nimport {\n sqlSessionContextComputeSetup,\n sqlSessionContextExecute,\n} from './features/sql-session-context';\n\nexport interface CreatePostgresJsDbOptions<\n SchemaConfig extends ColumnSchemaConfig,\n ColumnTypes,\n>\n extends PostgresJsAdapterOptions, DbOptions<SchemaConfig, ColumnTypes> {}\n\nexport const createDb = <\n SchemaConfig extends ColumnSchemaConfig = DefaultSchemaConfig,\n ColumnTypes = DefaultColumnTypes<SchemaConfig>,\n>(\n options: CreatePostgresJsDbOptions<SchemaConfig, ColumnTypes>,\n): DbResult<ColumnTypes> => {\n return createDbWithAdapter({\n ...options,\n adapter: new PostgresJsAdapter(options as never),\n });\n};\n\nexport interface PostgresJsAdapterOptions\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n extends postgres.Options<any>, AdapterConfigBase {\n databaseURL?: string;\n searchPath?: string;\n schema?: QuerySchema;\n}\n\ntype RawResult = RowList<(Row & Iterable<Row>)[]>;\n\nclass PostgresJsResult<T extends QueryResultRow> implements QueryResult<T> {\n rowCount: number;\n rows: T[];\n fields: QueryResult<T>['fields'];\n\n constructor(result: RawResult) {\n this.rowCount = result.count;\n this.rows = result as never;\n this.fields = result.statement.columns;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst wrapResult = (result: MaybeArray<RawResult>): QueryArraysResult<any> => {\n if (result.constructor === Array) {\n return (result as RawResult[]).map(\n (res) => new PostgresJsResult(res),\n ) as never;\n } else {\n return new PostgresJsResult(result as RawResult);\n }\n};\n\nconst types: Record<string, Partial<postgres.PostgresType>> = {\n bytea: {\n to: 17,\n from: 17 as never,\n serialize: (x) => '\\\\x' + Buffer.from(x).toString('hex'),\n // omit parse, let bytea return a string, so it remains consistent with when it's selected via JSON\n },\n dateAndTimestampAsStrings: {\n to: 25,\n from: [1082, 1114, 1184],\n parse: returnArg,\n },\n interval: {\n from: [1186],\n serialize: returnArg,\n parse(str: string) {\n const [years, , months, , days, , time] = str.split(' ');\n const [hours, minutes, seconds] = time.split(':');\n\n return {\n years: years ? Number(years) : 0,\n months: months ? Number(months) : 0,\n days: days ? Number(days) : 0,\n hours: hours ? Number(hours) : 0,\n minutes: minutes ? Number(minutes) : 0,\n seconds: seconds ? Number(seconds) : 0,\n };\n },\n },\n // overrides the built-in json type to not serialize it, because it incorrectly serializes\n json: {\n to: 114,\n from: [114, 3802],\n serialize: returnArg,\n parse: (x) => {\n return JSON.parse(x);\n },\n },\n};\n\nexport class PostgresJsAdapter implements AdapterBase {\n sql: postgres.Sql;\n searchPath?: string;\n config: PostgresJsAdapterOptions;\n errorClass = postgres.PostgresError;\n locals: RecordStringOrNumber;\n private wrappedWithConnectRetry?: boolean;\n\n constructor(config: PostgresJsAdapterOptions) {\n this.config = { ...config, types };\n this.sql = this.configure(config);\n this.locals = config.searchPath\n ? {\n search_path: config.searchPath,\n }\n : emptyObject;\n }\n\n isInTransaction(): boolean {\n return false;\n }\n\n private configure(config: PostgresJsAdapterOptions): postgres.Sql {\n this.searchPath = config.searchPath;\n if (this.searchPath) {\n this.config.connection = {\n ...config.connection,\n search_path: this.searchPath,\n };\n }\n\n let sql;\n if (this.config.databaseURL) {\n const urlString = this.config.databaseURL;\n const url = new URL(urlString);\n\n const ssl = url.searchParams.get('ssl');\n if (ssl === 'false' || ssl === 'true') {\n this.config.ssl = ssl === 'true';\n }\n\n const searchPath = url.searchParams.get('searchPath');\n if (searchPath) {\n this.searchPath = searchPath;\n url.searchParams.delete('searchPath');\n this.config.connection = {\n ...config.connection,\n search_path: searchPath,\n };\n }\n\n sql = postgres(url.toString(), this.config);\n } else {\n sql = postgres(this.config);\n }\n\n if (config.connectRetry) {\n setConnectRetryConfig(\n this,\n config.connectRetry === true ? emptyObject : config.connectRetry,\n );\n\n if (!this.wrappedWithConnectRetry) {\n this.query = wrapAdapterFnWithConnectRetry(this, this.query);\n this.arrays = wrapAdapterFnWithConnectRetry(this, this.arrays);\n this.wrappedWithConnectRetry = true;\n }\n }\n\n return sql;\n }\n\n private getURL(): URL | undefined {\n return this.config.databaseURL\n ? new URL(this.config.databaseURL)\n : undefined;\n }\n\n private replaceSql(config: PostgresJsAdapterOptions): Promise<void> {\n const { sql } = this;\n // Swap the client before ending the old one so the adapter remains reusable\n this.sql = this.configure(config);\n return sql.end();\n }\n\n async updateConfig(config: PostgresJsAdapterOptions): Promise<void> {\n await this.replaceSql({ ...this.config, ...config });\n }\n\n reconfigure(params: {\n database?: string;\n user?: string;\n password?: string;\n searchPath?: string;\n }): AdapterBase {\n const url = this.getURL();\n if (url) {\n if ('database' in params) {\n url.pathname = `/${params.database}`;\n }\n\n if (params.user !== undefined) {\n url.username = params.user;\n }\n\n if (params.password !== undefined) {\n url.password = params.password;\n }\n\n if (params.searchPath !== undefined) {\n url.searchParams.set('searchPath', params.searchPath);\n }\n\n return new PostgresJsAdapter({\n ...this.config,\n databaseURL: url.toString(),\n });\n } else {\n return new PostgresJsAdapter({ ...this.config, ...params });\n }\n }\n\n getDatabase(): string {\n const url = this.getURL();\n return url ? url.pathname.slice(1) : (this.config.database as string);\n }\n\n getUser(): string {\n const url = this.getURL();\n return url ? url.username : (this.config.user as string);\n }\n\n getSearchPath(): string | undefined {\n return this.searchPath;\n }\n\n getHost(): string {\n const url = this.getURL();\n return url ? url.hostname : (this.config.host as string);\n }\n\n getSchema(): QuerySchema | undefined {\n return this.config.schema;\n }\n\n query<T extends QueryResultRow = QueryResultRow>(\n text: string,\n values?: unknown[],\n startingSavepoint?: string,\n releasingSavepoint?: string,\n sqlSessionState?: SqlSessionState,\n ): Promise<QueryResult<T>> {\n return queryWithSqlSession(\n this.sql,\n text,\n values,\n sqlSessionState,\n startingSavepoint,\n releasingSavepoint,\n false,\n true,\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n arrays<R extends any[] = any[]>(\n text: string,\n values?: unknown[],\n startingSavepoint?: string,\n releasingSavepoint?: string,\n sqlSessionState?: SqlSessionState,\n ): Promise<QueryArraysResult<R>> {\n return queryWithSqlSession(\n this.sql,\n text,\n values,\n sqlSessionState,\n startingSavepoint,\n releasingSavepoint,\n true,\n true,\n ) as Promise<QueryArraysResult<R>>;\n }\n\n async transaction<Result>(...args: TransactionArgs<Result>): Promise<Result> {\n let ok: boolean | undefined;\n let result: unknown;\n\n const { cb, options } = getTransactionArgs(args);\n\n const fn = (sql: TransactionSql) => {\n // Apply transaction-scoped SQL session state (role and setConfig) once at transaction start\n if (options?.sqlSessionState) {\n const { role, setConfig } = options.sqlSessionState;\n if (role) {\n sql.unsafe(`SET ROLE ${role}`).execute();\n }\n if (setConfig && Object.keys(setConfig).length > 0) {\n const setExpressions = Object.entries(setConfig)\n .map(\n ([key, value]) =>\n `set_config('${key.replace(/'/g, \"''\")}', '${typeof value === 'string' ? value.replace(/'/g, \"''\") : value}', true)`,\n )\n .join(', ');\n sql.unsafe(`SELECT ${setExpressions}`).execute();\n }\n }\n\n const localsSql = getSetLocalsSql(options);\n if (localsSql) {\n sql.unsafe(localsSql).execute();\n }\n\n const locals = mergeLocals(this.locals, options);\n\n return cb(\n new PostgresJsTransactionAdapter(this, sql as never, this, locals),\n ).then((res) => {\n ok = true;\n return (result = res);\n });\n };\n\n return (\n options?.options\n ? this.sql.begin(options.options, fn)\n : this.sql.begin(fn)\n ).catch((err) => {\n if (ok) return result;\n\n throw err;\n }) as never;\n }\n\n close(): Promise<void> {\n return this.replaceSql(this.config);\n }\n\n assignError(to: QueryError, dbError: Error) {\n const from = dbError as postgres.PostgresError;\n to.message = from.message;\n to.severity = from.severity;\n to.code = from.code;\n to.detail = from.detail;\n to.schema = from.schema_name;\n to.table = from.table_name;\n to.constraint = from.constraint_name;\n to.hint = from.hint;\n to.position = from.position;\n to.where = from.where;\n to.file = from.file;\n to.line = from.line;\n to.routine = from.routine;\n }\n}\n\nconst query = <T extends QueryResultRow = QueryResultRow>(\n sql: postgres.Sql,\n text: string,\n values?: unknown[],\n startingSavepoint?: string,\n releasingSavepoint?: string,\n arrays?: boolean,\n): Promise<QueryResult<T>> => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let query = sql.unsafe(text, values as never) as any;\n\n if (arrays) query = query.values();\n\n if (!startingSavepoint && !releasingSavepoint) {\n return query.then(wrapResult);\n }\n\n return Promise.all([\n startingSavepoint && sql.unsafe(`SAVEPOINT \"${startingSavepoint}\"`),\n query,\n releasingSavepoint &&\n sql.unsafe(`RELEASE SAVEPOINT \"${releasingSavepoint}\"`),\n ]).then(\n (results: RawResult[]) => {\n return wrapResult(results[1]);\n },\n (err) => {\n if (!releasingSavepoint) {\n throw err;\n }\n\n return sql\n .unsafe(`ROLLBACK TO SAVEPOINT \"${releasingSavepoint}\"`)\n .then(() => {\n throw err;\n });\n },\n );\n};\n\n// Execute query with SQL session state setup/cleanup\n// For non-transactional queries: reserves a connection (borrowConnection=true)\n// For transactional queries: uses existing connection (borrowConnection=false)\nconst queryWithSqlSession = async <T extends QueryResultRow = QueryResultRow>(\n sql: postgres.Sql,\n text: string,\n values: unknown[] | undefined,\n sessionState: SqlSessionState | undefined,\n startingSavepoint: string | undefined,\n releasingSavepoint: string | undefined,\n arraysMode: boolean,\n borrowConnection = false,\n): Promise<QueryResult<T>> => {\n const setup = sqlSessionContextComputeSetup(sessionState);\n\n if (!setup) {\n return query(\n sql,\n text,\n values,\n startingSavepoint,\n releasingSavepoint,\n arraysMode,\n );\n }\n\n const connection = borrowConnection ? await sql.reserve() : sql;\n\n const queryFn = async (sqlStr: string, vals?: unknown[]) => {\n const result = await connection.unsafe(sqlStr, vals as never).values();\n return {\n rows: result,\n rowCount: result.length,\n fields: [],\n } as QueryResult<QueryResultRow>;\n };\n\n const releaseFn = borrowConnection\n ? async () => {\n await (connection as postgres.ReservedSql).release();\n }\n : undefined;\n\n const mainQuery = () =>\n query<T>(\n connection,\n text,\n values,\n startingSavepoint,\n releasingSavepoint,\n arraysMode,\n );\n\n return sqlSessionContextExecute<T>(queryFn, setup, mainQuery, releaseFn);\n};\n\nexport class PostgresJsTransactionAdapter implements TransactionAdapterBase {\n errorClass = postgres.PostgresError;\n\n constructor(\n public adapter: PostgresJsAdapter,\n public sql: postgres.Sql,\n public parent: AdapterBase,\n public locals: RecordStringOrNumber,\n ) {}\n\n isInTransaction(): true {\n return true;\n }\n\n updateConfig(config: PostgresJsAdapterOptions): Promise<void> {\n return this.adapter.updateConfig(config);\n }\n\n reconfigure(params: {\n database?: string;\n user?: string;\n password?: string;\n searchPath?: string;\n }): AdapterBase {\n return this.adapter.reconfigure(params);\n }\n\n getDatabase(): string {\n return this.adapter.getDatabase();\n }\n\n getUser(): string {\n return this.adapter.getUser();\n }\n\n getSearchPath(): string | undefined {\n return this.adapter.searchPath;\n }\n\n getHost(): string {\n return this.adapter.getHost();\n }\n\n getSchema(): QuerySchema | undefined {\n return this.adapter.getSchema();\n }\n\n query<T extends QueryResultRow = QueryResultRow>(\n text: string,\n values?: unknown[],\n startingSavepoint?: string,\n releasingSavepoint?: string,\n sqlSessionState?: SqlSessionState,\n ): Promise<QueryResult<T>> {\n return queryWithSqlSession(\n this.sql,\n text,\n values,\n sqlSessionState,\n startingSavepoint,\n releasingSavepoint,\n false,\n false,\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n arrays<R extends any[] = any[]>(\n text: string,\n values: unknown[] | undefined,\n startingSavepoint?: string | undefined,\n releasingSavepoint?: string | undefined,\n sqlSessionState?: SqlSessionState,\n ): Promise<QueryArraysResult<R>> {\n return queryWithSqlSession(\n this.sql,\n text,\n values,\n sqlSessionState,\n startingSavepoint,\n releasingSavepoint,\n true,\n false,\n ) as Promise<QueryArraysResult<R>>;\n }\n\n async transaction<Result>(...args: TransactionArgs<Result>): Promise<Result> {\n const { cb, options } = getTransactionArgs(args);\n\n // For nested transactions with SQL session state, capture outer transaction-local values\n let capturedRole: string | undefined;\n const capturedConfigs: Record<string, string | null> = {};\n const sqlSession = options?.sqlSessionState;\n\n if (sqlSession) {\n // Capture current role if we're going to override it\n if (sqlSession.role) {\n const roleResult = await this.query<{ role: string }>(\n 'SELECT current_role as role',\n );\n capturedRole = roleResult.rows[0].role;\n }\n\n // Capture current config values for keys we're going to override\n if (\n sqlSession.setConfig &&\n Object.keys(sqlSession.setConfig).length > 0\n ) {\n for (const key of Object.keys(sqlSession.setConfig)) {\n const configResult = await this.query<{ val: string | null }>(\n `SELECT current_setting('${key.replace(/'/g, \"''\")}', true) as val`,\n );\n capturedConfigs[key] = configResult.rows[0].val;\n }\n }\n }\n\n const localsSql = getSetLocalsSql(options);\n if (localsSql) {\n this.sql.unsafe(localsSql).execute();\n }\n\n const locals = mergeLocals(this.locals, options);\n\n let res: Result;\n try {\n res = (await cb(\n new PostgresJsTransactionAdapter(this.adapter, this.sql, this, locals),\n )) as Result;\n } finally {\n // Restore outer transaction-local values after nested transaction completes\n if (sqlSession) {\n if (capturedRole !== undefined) {\n await this.query(`SET ROLE ${capturedRole}`);\n }\n\n for (const [key, value] of Object.entries(capturedConfigs)) {\n // Reset to empty string if previously unset (null), otherwise restore previous value\n const restoreValue = value === null ? '' : value;\n await this.query(\n `SELECT set_config('${key.replace(/'/g, \"''\")}', '${restoreValue.replace(/'/g, \"''\")}', true)`,\n );\n }\n }\n\n const resetLocalsSql = getResetLocalsSql(this.locals, options);\n if (resetLocalsSql) {\n await this.sql.unsafe(resetLocalsSql);\n }\n }\n\n return res;\n }\n\n close(): Promise<void> {\n return this.sql.end();\n }\n\n assignError(to: QueryError, from: Error) {\n return this.adapter.assignError(to, from);\n }\n}\n"],"names":["createDbWithAdapter","returnArg","emptyObject","setConnectRetryConfig","wrapAdapterFnWithConnectRetry","query"],"mappings":"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"}
1
+ {"version":3,"file":"postgres-js.js","names":["AdapterClass","returnArg"],"sources":["../src/adapters/postgres-js.ts"],"sourcesContent":["import postgres, { Row, RowList, TransactionSql } from 'postgres';\nimport {\n AdapterConfigBase,\n MaybeArray,\n QueryArraysResult,\n QueryResult,\n QueryResultRow,\n returnArg,\n DbOptions,\n DefaultColumnTypes,\n DefaultSchemaConfig,\n DbResult,\n ColumnSchemaConfig,\n AdapterClass,\n DriverAdapter,\n QuerySchema,\n} from 'pqb/internal';\nimport { createDbWithAdapter } from 'pqb';\n\nexport interface CreatePostgresJsDbOptions<\n SchemaConfig extends ColumnSchemaConfig,\n ColumnTypes,\n>\n extends PostgresJsAdapterOptions, DbOptions<SchemaConfig, ColumnTypes> {}\n\nexport const createDb = <\n SchemaConfig extends ColumnSchemaConfig = DefaultSchemaConfig,\n ColumnTypes = DefaultColumnTypes<SchemaConfig>,\n>(\n options: CreatePostgresJsDbOptions<SchemaConfig, ColumnTypes>,\n): DbResult<ColumnTypes> => {\n return createDbWithAdapter({\n ...options,\n adapter: new AdapterClass({\n driverAdapter: PostgresJsAdapter,\n config: options,\n }),\n });\n};\n\nexport interface PostgresJsAdapterOptions\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n extends postgres.Options<any>, Omit<AdapterConfigBase, 'searchPath' | 'ssl'> {\n databaseURL?: string;\n schema?: QuerySchema;\n}\n\ntype RawResult = RowList<(Row & Iterable<Row>)[]>;\n\nclass PostgresJsResult<T extends QueryResultRow> implements QueryResult<T> {\n rowCount: number;\n rows: T[];\n fields: QueryResult<T>['fields'];\n\n constructor(result: RawResult) {\n this.rowCount = result.count;\n this.rows = result as never;\n this.fields = result.statement.columns;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst wrapResult = (result: MaybeArray<RawResult>): QueryArraysResult<any> => {\n if (result.constructor === Array) {\n return (result as RawResult[]).map(\n (res) => new PostgresJsResult(res),\n ) as never;\n } else {\n return new PostgresJsResult(result as RawResult);\n }\n};\n\nconst types: Record<string, Partial<postgres.PostgresType>> = {\n bytea: {\n to: 17,\n from: 17 as never,\n serialize: (x) => '\\\\x' + Buffer.from(x).toString('hex'),\n // omit parse, let bytea return a string, so it remains consistent with when it's selected via JSON\n },\n dateAndTimestampAsStrings: {\n to: 25,\n from: [1082, 1114, 1184],\n parse: returnArg,\n },\n interval: {\n from: [1186],\n serialize: returnArg,\n parse(str: string) {\n const [years, , months, , days, , time] = str.split(' ');\n const [hours, minutes, seconds] = time.split(':');\n\n return {\n years: years ? Number(years) : 0,\n months: months ? Number(months) : 0,\n days: days ? Number(days) : 0,\n hours: hours ? Number(hours) : 0,\n minutes: minutes ? Number(minutes) : 0,\n seconds: seconds ? Number(seconds) : 0,\n };\n },\n },\n // overrides the built-in json type to not serialize it, because it incorrectly serializes\n json: {\n to: 114,\n from: [114, 3802],\n serialize: returnArg,\n parse: (x) => {\n return JSON.parse(x);\n },\n },\n};\n\nexport const PostgresJsAdapter: DriverAdapter = {\n manualPool: false,\n\n errorClass: postgres.PostgresError,\n errorFields: {\n message: 'message',\n severity: 'severity',\n code: 'code',\n detail: 'detail',\n schema: 'schema_name',\n table: 'table_name',\n constraint: 'constraint_name',\n hint: 'hint',\n position: 'position',\n where: 'where',\n file: 'file',\n line: 'line',\n routine: 'routine',\n },\n\n configure(params: PostgresJsAdapterOptions): postgres.Sql {\n const config: PostgresJsAdapterOptions = { ...params, types };\n\n if (config.locals?.search_path) {\n config.connection = {\n ...config.connection,\n search_path: config.locals.search_path,\n };\n }\n\n let sql;\n if (config.databaseURL) {\n sql = postgres(config.databaseURL, config);\n } else {\n sql = postgres(config);\n }\n\n return sql;\n },\n\n queryClient<T extends QueryResultRow = QueryResultRow>(\n client: TransactionSql,\n text: string,\n values?: unknown[],\n // only has effect in a transaction\n startingSavepoint?: string,\n releasingSavepoint?: string,\n // SQL session state (role and setConfig) from async storage\n arraysMode?: boolean,\n ): Promise<QueryResult<T>> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let query = client.unsafe(text, values as never) as any;\n\n if (arraysMode) query = query.values();\n\n if (!startingSavepoint && !releasingSavepoint) {\n return query.then(wrapResult);\n }\n\n return Promise.all([\n startingSavepoint && client.unsafe(`SAVEPOINT \"${startingSavepoint}\"`),\n query,\n releasingSavepoint &&\n client.unsafe(`RELEASE SAVEPOINT \"${releasingSavepoint}\"`),\n ]).then(\n (results: RawResult[]) => {\n return wrapResult(results[1]);\n },\n (err) => {\n if (!releasingSavepoint) {\n throw err;\n }\n\n return client\n .unsafe(`ROLLBACK TO SAVEPOINT \"${releasingSavepoint}\"`)\n .then(() => {\n throw err;\n });\n },\n );\n },\n\n borrow(client: postgres.Sql): Promise<postgres.ReservedSql> {\n return client.reserve();\n },\n\n release(client: postgres.ReservedSql): void {\n client.release();\n },\n\n begin<DriverClient, Result>(\n client: postgres.Sql,\n cb: (adapter: DriverClient) => Promise<Result>,\n options?: string,\n ): Promise<Result> {\n let ok: boolean | undefined;\n let result: unknown;\n\n const fn = (sql: TransactionSql): Promise<Result> =>\n cb(sql as DriverClient).then((res) => {\n ok = true;\n return (result = res);\n });\n\n return (options ? client.begin(options, fn) : client.begin(fn)).catch(\n (err) => {\n if (ok) return result;\n\n throw err;\n },\n ) as never;\n },\n\n close(client: postgres.Sql): Promise<void> {\n return client.end();\n },\n};\n"],"mappings":"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"}