pqb 0.62.0 → 0.63.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.
- package/dist/index.d.ts +6790 -6281
- package/dist/index.js +11206 -10334
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10830 -10081
- package/dist/index.mjs.map +1 -1
- package/dist/internal.d.ts +1 -10759
- package/dist/internal.js +652 -16358
- package/dist/internal.js.map +1 -1
- package/dist/internal.mjs +1 -16196
- package/dist/internal.mjs.map +1 -1
- package/dist/node-postgres.d.ts +9730 -19
- package/dist/node-postgres.js +255 -32
- package/dist/node-postgres.js.map +1 -1
- package/dist/node-postgres.mjs +255 -32
- package/dist/node-postgres.mjs.map +1 -1
- package/dist/postgres-js.d.ts +9733 -22
- package/dist/postgres-js.js +229 -19
- package/dist/postgres-js.js.map +1 -1
- package/dist/postgres-js.mjs +230 -20
- package/dist/postgres-js.mjs.map +1 -1
- package/dist/public.d.ts +1 -0
- package/dist/public.js +43 -0
- package/dist/public.js.map +1 -0
- package/dist/public.mjs +2 -0
- package/dist/public.mjs.map +1 -0
- package/package.json +23 -19
package/dist/postgres-js.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import postgres from 'postgres';
|
|
2
|
-
import { emptyObject, setConnectRetryConfig, wrapAdapterFnWithConnectRetry
|
|
2
|
+
import { returnArg, emptyObject, setConnectRetryConfig, wrapAdapterFnWithConnectRetry } from 'pqb/internal';
|
|
3
3
|
import { createDbWithAdapter } from 'pqb';
|
|
4
4
|
|
|
5
5
|
const transactionArgs = {
|
|
@@ -30,6 +30,109 @@ const getResetLocalsSql = (parentLocals, options) => {
|
|
|
30
30
|
}, []).join("; ");
|
|
31
31
|
};
|
|
32
32
|
|
|
33
|
+
const quoteRoleIdentifier = (role) => {
|
|
34
|
+
return `"${role.replace(/"/g, '""')}"`;
|
|
35
|
+
};
|
|
36
|
+
const buildConfigRestoreExpression = (key, value) => {
|
|
37
|
+
const escapedKey = key.replace(/'/g, "''");
|
|
38
|
+
if (value === null || value === void 0) {
|
|
39
|
+
value = "";
|
|
40
|
+
}
|
|
41
|
+
return `set_config('${escapedKey}', '${value.replace(/'/g, "''")}', false) as "${key}"`;
|
|
42
|
+
};
|
|
43
|
+
const sqlSessionContextComputeSetup = (desired) => {
|
|
44
|
+
if (!desired) return void 0;
|
|
45
|
+
const role = desired.role;
|
|
46
|
+
const hasRole = role !== void 0;
|
|
47
|
+
const { setConfig } = desired;
|
|
48
|
+
const configKeys = setConfig && Object.keys(setConfig);
|
|
49
|
+
const hasConfig = configKeys && configKeys.length > 0;
|
|
50
|
+
if (!hasRole && !hasConfig) return void 0;
|
|
51
|
+
const result = {};
|
|
52
|
+
if (hasRole) {
|
|
53
|
+
result.roleSetupSql = `SET ROLE ${quoteRoleIdentifier(role)}`;
|
|
54
|
+
result.captureRoleSql = "SELECT current_user";
|
|
55
|
+
}
|
|
56
|
+
if (hasConfig && setConfig) {
|
|
57
|
+
result.captureConfigValues = configKeys;
|
|
58
|
+
const captureColumns = configKeys.map((key, i) => `current_setting($${i + 1}, true) as "${key}"`).join(", ");
|
|
59
|
+
result.captureConfigSql = `SELECT ${captureColumns}`;
|
|
60
|
+
const setColumns = configKeys.map((key) => {
|
|
61
|
+
const value = setConfig[key];
|
|
62
|
+
return `set_config('${key.replace(/'/g, "''")}', '${typeof value === "string" ? value.replace(/'/g, "''") : value}', false) as "${key}"`;
|
|
63
|
+
}).join(", ");
|
|
64
|
+
result.configSetupSql = `SELECT ${setColumns}`;
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
};
|
|
68
|
+
const sqlSessionContextBuildConfigRestoreBatchSql = (configs) => {
|
|
69
|
+
const keys = Object.keys(configs);
|
|
70
|
+
if (keys.length === 0) return void 0;
|
|
71
|
+
const expressions = keys.map((key) => buildConfigRestoreExpression(key, configs[key])).join(", ");
|
|
72
|
+
return `SELECT ${expressions}`;
|
|
73
|
+
};
|
|
74
|
+
const sqlSessionContextExecute = async (query, setup, mainQuery, release) => {
|
|
75
|
+
if (!setup) {
|
|
76
|
+
return mainQuery();
|
|
77
|
+
}
|
|
78
|
+
const captured = {};
|
|
79
|
+
const {
|
|
80
|
+
captureRoleSql,
|
|
81
|
+
roleSetupSql,
|
|
82
|
+
captureConfigSql,
|
|
83
|
+
captureConfigValues,
|
|
84
|
+
configSetupSql
|
|
85
|
+
} = setup;
|
|
86
|
+
const setupPromises = [];
|
|
87
|
+
if (captureRoleSql) {
|
|
88
|
+
setupPromises.push(
|
|
89
|
+
query(captureRoleSql).then((res) => {
|
|
90
|
+
captured.previousRole = res.rows[0]?.[0];
|
|
91
|
+
})
|
|
92
|
+
);
|
|
93
|
+
setupPromises.push(query(roleSetupSql));
|
|
94
|
+
}
|
|
95
|
+
if (captureConfigSql && captureConfigValues && configSetupSql) {
|
|
96
|
+
captured.previousConfigs = {};
|
|
97
|
+
const previousConfigs = captured.previousConfigs;
|
|
98
|
+
setupPromises.push(
|
|
99
|
+
query(captureConfigSql, captureConfigValues).then((res) => {
|
|
100
|
+
const row = res.rows[0];
|
|
101
|
+
captureConfigValues.forEach((key, i) => {
|
|
102
|
+
previousConfigs[key] = row[i];
|
|
103
|
+
});
|
|
104
|
+
})
|
|
105
|
+
);
|
|
106
|
+
setupPromises.push(query(configSetupSql));
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
await Promise.all(setupPromises);
|
|
110
|
+
return await mainQuery();
|
|
111
|
+
} finally {
|
|
112
|
+
try {
|
|
113
|
+
const cleanupPromises = [];
|
|
114
|
+
if (roleSetupSql && captured.previousRole !== void 0) {
|
|
115
|
+
cleanupPromises.push(
|
|
116
|
+
query(`SET ROLE ${quoteRoleIdentifier(captured.previousRole)}`)
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
if (captured.previousConfigs) {
|
|
120
|
+
const restoreSql = sqlSessionContextBuildConfigRestoreBatchSql(
|
|
121
|
+
captured.previousConfigs
|
|
122
|
+
);
|
|
123
|
+
if (restoreSql) {
|
|
124
|
+
cleanupPromises.push(query(restoreSql));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
await Promise.all(cleanupPromises);
|
|
128
|
+
} finally {
|
|
129
|
+
if (release) {
|
|
130
|
+
await release();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
|
|
33
136
|
const createDb = (options) => {
|
|
34
137
|
return createDbWithAdapter({
|
|
35
138
|
...options,
|
|
@@ -196,18 +299,48 @@ class PostgresJsAdapter {
|
|
|
196
299
|
getSchema() {
|
|
197
300
|
return this.config.schema;
|
|
198
301
|
}
|
|
199
|
-
query(text, values) {
|
|
200
|
-
return
|
|
302
|
+
query(text, values, startingSavepoint, releasingSavepoint, sqlSessionState) {
|
|
303
|
+
return queryWithSqlSession(
|
|
304
|
+
this.sql,
|
|
305
|
+
text,
|
|
306
|
+
values,
|
|
307
|
+
sqlSessionState,
|
|
308
|
+
startingSavepoint,
|
|
309
|
+
releasingSavepoint,
|
|
310
|
+
false,
|
|
311
|
+
true
|
|
312
|
+
);
|
|
201
313
|
}
|
|
202
314
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
203
|
-
arrays(text, values) {
|
|
204
|
-
return
|
|
315
|
+
arrays(text, values, startingSavepoint, releasingSavepoint, sqlSessionState) {
|
|
316
|
+
return queryWithSqlSession(
|
|
317
|
+
this.sql,
|
|
318
|
+
text,
|
|
319
|
+
values,
|
|
320
|
+
sqlSessionState,
|
|
321
|
+
startingSavepoint,
|
|
322
|
+
releasingSavepoint,
|
|
323
|
+
true,
|
|
324
|
+
true
|
|
325
|
+
);
|
|
205
326
|
}
|
|
206
327
|
async transaction(...args) {
|
|
207
328
|
let ok;
|
|
208
329
|
let result;
|
|
209
330
|
const { cb, options } = getTransactionArgs(args);
|
|
210
331
|
const fn = (sql) => {
|
|
332
|
+
if (options?.sqlSessionState) {
|
|
333
|
+
const { role, setConfig } = options.sqlSessionState;
|
|
334
|
+
if (role) {
|
|
335
|
+
sql.unsafe(`SET ROLE ${role}`).execute();
|
|
336
|
+
}
|
|
337
|
+
if (setConfig && Object.keys(setConfig).length > 0) {
|
|
338
|
+
const setExpressions = Object.entries(setConfig).map(
|
|
339
|
+
([key, value]) => `set_config('${key.replace(/'/g, "''")}', '${typeof value === "string" ? value.replace(/'/g, "''") : value}', true)`
|
|
340
|
+
).join(", ");
|
|
341
|
+
sql.unsafe(`SELECT ${setExpressions}`).execute();
|
|
342
|
+
}
|
|
343
|
+
}
|
|
211
344
|
const localsSql = getSetLocalsSql(options);
|
|
212
345
|
if (localsSql) {
|
|
213
346
|
sql.unsafe(localsSql).execute();
|
|
@@ -245,9 +378,9 @@ class PostgresJsAdapter {
|
|
|
245
378
|
to.routine = from.routine;
|
|
246
379
|
}
|
|
247
380
|
}
|
|
248
|
-
const query = (sql, text, values, startingSavepoint, releasingSavepoint,
|
|
381
|
+
const query = (sql, text, values, startingSavepoint, releasingSavepoint, arrays) => {
|
|
249
382
|
let query2 = sql.unsafe(text, values);
|
|
250
|
-
if (
|
|
383
|
+
if (arrays) query2 = query2.values();
|
|
251
384
|
if (!startingSavepoint && !releasingSavepoint) {
|
|
252
385
|
return query2.then(wrapResult);
|
|
253
386
|
}
|
|
@@ -269,8 +402,39 @@ const query = (sql, text, values, startingSavepoint, releasingSavepoint, arrays2
|
|
|
269
402
|
}
|
|
270
403
|
);
|
|
271
404
|
};
|
|
272
|
-
const
|
|
273
|
-
|
|
405
|
+
const queryWithSqlSession = async (sql, text, values, sessionState, startingSavepoint, releasingSavepoint, arraysMode, borrowConnection = false) => {
|
|
406
|
+
const setup = sqlSessionContextComputeSetup(sessionState);
|
|
407
|
+
if (!setup) {
|
|
408
|
+
return query(
|
|
409
|
+
sql,
|
|
410
|
+
text,
|
|
411
|
+
values,
|
|
412
|
+
startingSavepoint,
|
|
413
|
+
releasingSavepoint,
|
|
414
|
+
arraysMode
|
|
415
|
+
);
|
|
416
|
+
}
|
|
417
|
+
const connection = borrowConnection ? await sql.reserve() : sql;
|
|
418
|
+
const queryFn = async (sqlStr, vals) => {
|
|
419
|
+
const result = await connection.unsafe(sqlStr, vals).values();
|
|
420
|
+
return {
|
|
421
|
+
rows: result,
|
|
422
|
+
rowCount: result.length,
|
|
423
|
+
fields: []
|
|
424
|
+
};
|
|
425
|
+
};
|
|
426
|
+
const releaseFn = borrowConnection ? async () => {
|
|
427
|
+
await connection.release();
|
|
428
|
+
} : void 0;
|
|
429
|
+
const mainQuery = () => query(
|
|
430
|
+
connection,
|
|
431
|
+
text,
|
|
432
|
+
values,
|
|
433
|
+
startingSavepoint,
|
|
434
|
+
releasingSavepoint,
|
|
435
|
+
arraysMode
|
|
436
|
+
);
|
|
437
|
+
return sqlSessionContextExecute(queryFn, setup, mainQuery, releaseFn);
|
|
274
438
|
};
|
|
275
439
|
class PostgresJsTransactionAdapter {
|
|
276
440
|
constructor(adapter, sql, parent, locals) {
|
|
@@ -304,32 +468,78 @@ class PostgresJsTransactionAdapter {
|
|
|
304
468
|
getSchema() {
|
|
305
469
|
return this.adapter.getSchema();
|
|
306
470
|
}
|
|
307
|
-
query(text, values, startingSavepoint, releasingSavepoint) {
|
|
308
|
-
return
|
|
471
|
+
query(text, values, startingSavepoint, releasingSavepoint, sqlSessionState) {
|
|
472
|
+
return queryWithSqlSession(
|
|
473
|
+
this.sql,
|
|
474
|
+
text,
|
|
475
|
+
values,
|
|
476
|
+
sqlSessionState,
|
|
477
|
+
startingSavepoint,
|
|
478
|
+
releasingSavepoint,
|
|
479
|
+
false,
|
|
480
|
+
false
|
|
481
|
+
);
|
|
309
482
|
}
|
|
310
483
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
311
|
-
arrays(text, values, startingSavepoint, releasingSavepoint) {
|
|
312
|
-
return
|
|
484
|
+
arrays(text, values, startingSavepoint, releasingSavepoint, sqlSessionState) {
|
|
485
|
+
return queryWithSqlSession(
|
|
313
486
|
this.sql,
|
|
314
487
|
text,
|
|
315
488
|
values,
|
|
489
|
+
sqlSessionState,
|
|
316
490
|
startingSavepoint,
|
|
317
|
-
releasingSavepoint
|
|
491
|
+
releasingSavepoint,
|
|
492
|
+
true,
|
|
493
|
+
false
|
|
318
494
|
);
|
|
319
495
|
}
|
|
320
496
|
async transaction(...args) {
|
|
321
497
|
const { cb, options } = getTransactionArgs(args);
|
|
498
|
+
let capturedRole;
|
|
499
|
+
const capturedConfigs = {};
|
|
500
|
+
const sqlSession = options?.sqlSessionState;
|
|
501
|
+
if (sqlSession) {
|
|
502
|
+
if (sqlSession.role) {
|
|
503
|
+
const roleResult = await this.query(
|
|
504
|
+
"SELECT current_role as role"
|
|
505
|
+
);
|
|
506
|
+
capturedRole = roleResult.rows[0].role;
|
|
507
|
+
}
|
|
508
|
+
if (sqlSession.setConfig && Object.keys(sqlSession.setConfig).length > 0) {
|
|
509
|
+
for (const key of Object.keys(sqlSession.setConfig)) {
|
|
510
|
+
const configResult = await this.query(
|
|
511
|
+
`SELECT current_setting('${key.replace(/'/g, "''")}', true) as val`
|
|
512
|
+
);
|
|
513
|
+
capturedConfigs[key] = configResult.rows[0].val;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
}
|
|
322
517
|
const localsSql = getSetLocalsSql(options);
|
|
323
518
|
if (localsSql) {
|
|
324
519
|
this.sql.unsafe(localsSql).execute();
|
|
325
520
|
}
|
|
326
521
|
const locals = mergeLocals(this.locals, options);
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
522
|
+
let res;
|
|
523
|
+
try {
|
|
524
|
+
res = await cb(
|
|
525
|
+
new PostgresJsTransactionAdapter(this.adapter, this.sql, this, locals)
|
|
526
|
+
);
|
|
527
|
+
} finally {
|
|
528
|
+
if (sqlSession) {
|
|
529
|
+
if (capturedRole !== void 0) {
|
|
530
|
+
await this.query(`SET ROLE ${capturedRole}`);
|
|
531
|
+
}
|
|
532
|
+
for (const [key, value] of Object.entries(capturedConfigs)) {
|
|
533
|
+
const restoreValue = value === null ? "" : value;
|
|
534
|
+
await this.query(
|
|
535
|
+
`SELECT set_config('${key.replace(/'/g, "''")}', '${restoreValue.replace(/'/g, "''")}', true)`
|
|
536
|
+
);
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
const resetLocalsSql = getResetLocalsSql(this.locals, options);
|
|
540
|
+
if (resetLocalsSql) {
|
|
541
|
+
await this.sql.unsafe(resetLocalsSql);
|
|
542
|
+
}
|
|
333
543
|
}
|
|
334
544
|
return res;
|
|
335
545
|
}
|
package/dist/postgres-js.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-js.mjs","sources":["../src/adapters/adapter.utils.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 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 QuerySchema,\n TransactionArgs,\n RecordStringOrNumber,\n} from 'pqb/internal';\nimport { QueryError, createDbWithAdapter } from 'pqb';\nimport {\n getResetLocalsSql,\n getSetLocalsSql,\n getTransactionArgs,\n mergeLocals,\n} from './adapter.utils';\n\nexport interface CreatePostgresJsDbOptions<\n SchemaConfig extends ColumnSchemaConfig,\n ColumnTypes,\n> extends PostgresJsAdapterOptions,\n 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>,\n 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 ): Promise<QueryResult<T>> {\n return query(this.sql, text, values);\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 ): Promise<QueryArraysResult<R>> {\n return arrays(this.sql, text, values);\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 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// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst arrays = <R extends any[] = any[]>(\n sql: postgres.Sql,\n text: string,\n values?: unknown[],\n startingSavepoint?: string,\n releasingSavepoint?: string,\n): Promise<QueryArraysResult<R>> => {\n return query(sql, text, values, startingSavepoint, releasingSavepoint, true);\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 ): Promise<QueryResult<T>> {\n return query(this.sql, text, values, startingSavepoint, releasingSavepoint);\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 ): Promise<QueryArraysResult<R>> {\n return arrays(\n this.sql,\n text,\n values,\n startingSavepoint,\n releasingSavepoint,\n );\n }\n\n async transaction<Result>(...args: TransactionArgs<Result>): Promise<Result> {\n const { cb, options } = getTransactionArgs(args);\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 const res = (await cb(\n new PostgresJsTransactionAdapter(this.adapter, this.sql, this, locals),\n )) as Result;\n\n const resetLocalsSql = getResetLocalsSql(this.locals, options);\n if (resetLocalsSql) {\n await this.sql.unsafe(resetLocalsSql);\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":["arrays","query"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"postgres-js.mjs","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":["query"],"mappings":"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"}
|
package/dist/public.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Db, NotFoundError, OrchidOrmInternalError, QueryError, QueryHelperResult, QuerySchema, copyTableData, createDbWithAdapter, getColumnInfo, testTransaction } from './index';
|
package/dist/public.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./index');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "Db", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () { return index.Db; }
|
|
10
|
+
});
|
|
11
|
+
Object.defineProperty(exports, "NotFoundError", {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: function () { return index.NotFoundError; }
|
|
14
|
+
});
|
|
15
|
+
Object.defineProperty(exports, "OrchidOrmInternalError", {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () { return index.OrchidOrmInternalError; }
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports, "QueryError", {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () { return index.QueryError; }
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports, "QueryHelperResult", {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
get: function () { return index.QueryHelperResult; }
|
|
26
|
+
});
|
|
27
|
+
Object.defineProperty(exports, "copyTableData", {
|
|
28
|
+
enumerable: true,
|
|
29
|
+
get: function () { return index.copyTableData; }
|
|
30
|
+
});
|
|
31
|
+
Object.defineProperty(exports, "createDbWithAdapter", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
get: function () { return index.createDbWithAdapter; }
|
|
34
|
+
});
|
|
35
|
+
Object.defineProperty(exports, "getColumnInfo", {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
get: function () { return index.getColumnInfo; }
|
|
38
|
+
});
|
|
39
|
+
Object.defineProperty(exports, "testTransaction", {
|
|
40
|
+
enumerable: true,
|
|
41
|
+
get: function () { return index.testTransaction; }
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=public.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/public.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,21 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pqb",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.63.0",
|
|
4
4
|
"description": "Postgres query builder",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"pg",
|
|
7
|
+
"postgres",
|
|
8
|
+
"query-builder"
|
|
9
|
+
],
|
|
5
10
|
"homepage": "https://orchid-orm.netlify.app/guide/orm-and-query-builder.html",
|
|
11
|
+
"license": "ISC",
|
|
12
|
+
"author": "Roman Kushyn",
|
|
6
13
|
"repository": {
|
|
7
14
|
"type": "git",
|
|
8
15
|
"url": "https://github.com/romeerez/orchid-orm.git",
|
|
9
16
|
"directory": "packages/pqb"
|
|
10
17
|
},
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
|
|
18
|
+
"files": [
|
|
19
|
+
"dist"
|
|
20
|
+
],
|
|
21
|
+
"main": "dist/public.js",
|
|
22
|
+
"module": "dist/public.mjs",
|
|
23
|
+
"typings": "dist/public.d.ts",
|
|
14
24
|
"exports": {
|
|
15
25
|
".": {
|
|
16
|
-
"require": "./dist/
|
|
17
|
-
"import": "./dist/
|
|
18
|
-
"types": "./dist/
|
|
26
|
+
"require": "./dist/public.js",
|
|
27
|
+
"import": "./dist/public.mjs",
|
|
28
|
+
"types": "./dist/public.d.ts"
|
|
19
29
|
},
|
|
20
30
|
"./internal": {
|
|
21
31
|
"require": "./dist/internal.js",
|
|
@@ -33,22 +43,12 @@
|
|
|
33
43
|
"types": "./dist/postgres-js.d.ts"
|
|
34
44
|
}
|
|
35
45
|
},
|
|
36
|
-
"files": [
|
|
37
|
-
"dist"
|
|
38
|
-
],
|
|
39
|
-
"keywords": [
|
|
40
|
-
"pg",
|
|
41
|
-
"postgres",
|
|
42
|
-
"query-builder"
|
|
43
|
-
],
|
|
44
|
-
"author": "Roman Kushyn",
|
|
45
|
-
"license": "ISC",
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"@types/pg": ">=8"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"zod": "^4.3.6",
|
|
51
|
-
"test-utils": "0.3.
|
|
51
|
+
"test-utils": "0.3.6"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
54
|
"pg": ">=8",
|
|
@@ -67,6 +67,10 @@
|
|
|
67
67
|
"check": "jest",
|
|
68
68
|
"types": "tsc",
|
|
69
69
|
"test:ci": "jest --coverage --coverageReporters json-summary",
|
|
70
|
-
"build": "rimraf ./dist/ && rollup -c ./rollup.config.mjs"
|
|
70
|
+
"build": "rimraf ./dist/ && rollup -c ./rollup.config.mjs",
|
|
71
|
+
"lint": "oxlint --fix",
|
|
72
|
+
"lint:check": "oxlint",
|
|
73
|
+
"fmt": "oxfmt",
|
|
74
|
+
"fmt:check": "oxfmt --check"
|
|
71
75
|
}
|
|
72
76
|
}
|