@event-driven-io/dumbo 0.13.0-beta.1 → 0.13.0-beta.2
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/{chunk-T67D5YF2.cjs → chunk-A7TC7IOP.cjs} +16 -15
- package/dist/chunk-A7TC7IOP.cjs.map +1 -0
- package/dist/chunk-F7JQ7BX7.js +240 -0
- package/dist/chunk-F7JQ7BX7.js.map +1 -0
- package/dist/{chunk-XAQMA4NT.js → chunk-I34X53VL.js} +17 -15
- package/dist/chunk-I34X53VL.js.map +1 -0
- package/dist/{chunk-XRFKAL7J.cjs → chunk-ISNF6USX.cjs} +45 -43
- package/dist/chunk-ISNF6USX.cjs.map +1 -0
- package/dist/chunk-IYEHOE4S.cjs +405 -0
- package/dist/chunk-IYEHOE4S.cjs.map +1 -0
- package/dist/chunk-L2YZQAG3.cjs +240 -0
- package/dist/chunk-L2YZQAG3.cjs.map +1 -0
- package/dist/{chunk-S4U5T4ST.js → chunk-N7RWT46K.js} +175 -13
- package/dist/chunk-N7RWT46K.js.map +1 -0
- package/dist/{chunk-IW4T2VXT.cjs → chunk-OJ34O3Q2.cjs} +176 -14
- package/dist/chunk-OJ34O3Q2.cjs.map +1 -0
- package/dist/{chunk-ROEYA6V2.js → chunk-TXSETOGH.js} +13 -12
- package/dist/chunk-TXSETOGH.js.map +1 -0
- package/dist/chunk-XVV3OOQX.js +405 -0
- package/dist/chunk-XVV3OOQX.js.map +1 -0
- package/dist/{columnProcessors-Dw-xZeku.d.cts → columnProcessors-BX-sH7ah.d.cts} +1 -1
- package/dist/{columnProcessors-B62dbdIQ.d.ts → columnProcessors-DMPpTPqM.d.ts} +1 -1
- package/dist/{index-C_ugrs0F.d.cts → connectionString-B1wm0TFc.d.cts} +117 -49
- package/dist/{index-C_ugrs0F.d.ts → connectionString-B1wm0TFc.d.ts} +117 -49
- package/dist/d1.cjs +277 -0
- package/dist/d1.cjs.map +1 -0
- package/dist/d1.d.cts +72 -0
- package/dist/d1.d.ts +72 -0
- package/dist/d1.js +277 -0
- package/dist/d1.js.map +1 -0
- package/dist/index-C0h0c380.d.cts +139 -0
- package/dist/index-C2z_XBn6.d.ts +139 -0
- package/dist/index.cjs +25 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -5
- package/dist/index.d.ts +10 -5
- package/dist/index.js +24 -2
- package/dist/pg-3ACXFMU4.cjs +59 -0
- package/dist/{pg-MDJJNB7H.cjs.map → pg-3ACXFMU4.cjs.map} +1 -1
- package/dist/{pg-J3627PVI.js → pg-GHOW3XSG.js} +3 -3
- package/dist/pg.cjs +3 -3
- package/dist/pg.d.cts +8 -8
- package/dist/pg.d.ts +8 -8
- package/dist/pg.js +2 -2
- package/dist/{sqlite3-LC4MJCWZ.js → sqlite3-EEIKQCJR.js} +8 -6
- package/dist/sqlite3-SE4DDYZE.cjs +25 -0
- package/dist/sqlite3-SE4DDYZE.cjs.map +1 -0
- package/dist/sqlite3.cjs +11 -4
- package/dist/sqlite3.cjs.map +1 -1
- package/dist/sqlite3.d.cts +49 -252
- package/dist/sqlite3.d.ts +49 -252
- package/dist/sqlite3.js +25 -18
- package/package.json +15 -1
- package/dist/chunk-3BQOVKJW.js +0 -515
- package/dist/chunk-3BQOVKJW.js.map +0 -1
- package/dist/chunk-IW4T2VXT.cjs.map +0 -1
- package/dist/chunk-MTXDN72D.cjs +0 -515
- package/dist/chunk-MTXDN72D.cjs.map +0 -1
- package/dist/chunk-ROEYA6V2.js.map +0 -1
- package/dist/chunk-S4U5T4ST.js.map +0 -1
- package/dist/chunk-T67D5YF2.cjs.map +0 -1
- package/dist/chunk-XAQMA4NT.js.map +0 -1
- package/dist/chunk-XRFKAL7J.cjs.map +0 -1
- package/dist/pg-MDJJNB7H.cjs +0 -59
- package/dist/sqlite3-AFB37G5H.cjs +0 -23
- package/dist/sqlite3-AFB37G5H.cjs.map +0 -1
- /package/dist/{pg-J3627PVI.js.map → pg-GHOW3XSG.js.map} +0 -0
- /package/dist/{sqlite3-LC4MJCWZ.js.map → sqlite3-EEIKQCJR.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkOJ34O3Q2cjs = require('./chunk-OJ34O3Q2.cjs');
|
|
4
4
|
|
|
5
5
|
// src/storage/all/connections/connectionString.ts
|
|
6
6
|
var parseConnectionString = (connectionString) => {
|
|
@@ -16,30 +16,31 @@ var parseConnectionString = (connectionString) => {
|
|
|
16
16
|
driverName: "sqlite3"
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
|
+
if (connectionString.startsWith("d1:")) {
|
|
20
|
+
return {
|
|
21
|
+
databaseType: "SQLite",
|
|
22
|
+
driverName: "d1"
|
|
23
|
+
};
|
|
24
|
+
}
|
|
19
25
|
throw new Error(
|
|
20
26
|
`Unsupported database connection string: ${connectionString}`
|
|
21
27
|
);
|
|
22
28
|
};
|
|
23
29
|
|
|
24
30
|
// src/storage/all/index.ts
|
|
25
|
-
|
|
31
|
+
_chunkOJ34O3Q2cjs.dumboDatabaseDriverRegistry.register(
|
|
26
32
|
"PostgreSQL:pg",
|
|
27
|
-
() => Promise.resolve().then(() => _interopRequireWildcard(require("./pg-
|
|
33
|
+
() => Promise.resolve().then(() => _interopRequireWildcard(require("./pg-3ACXFMU4.cjs"))).then((m) => m.databaseDriver)
|
|
28
34
|
);
|
|
29
|
-
|
|
35
|
+
_chunkOJ34O3Q2cjs.dumboDatabaseDriverRegistry.register(
|
|
30
36
|
"SQLite:sqlite3",
|
|
31
|
-
() => Promise.resolve().then(() => _interopRequireWildcard(require("./sqlite3-
|
|
37
|
+
() => Promise.resolve().then(() => _interopRequireWildcard(require("./sqlite3-SE4DDYZE.cjs"))).then((m) => m.databaseDriver)
|
|
32
38
|
);
|
|
33
39
|
function dumbo(options) {
|
|
34
|
-
const {
|
|
35
|
-
const driver =
|
|
36
|
-
driverType,
|
|
37
|
-
connectionString
|
|
38
|
-
});
|
|
40
|
+
const { driverType } = options;
|
|
41
|
+
const driver = _nullishCoalesce(options.driver, () => ( _chunkOJ34O3Q2cjs.dumboDatabaseDriverRegistry.tryGet(options)));
|
|
39
42
|
if (driver === null) {
|
|
40
|
-
throw new Error(
|
|
41
|
-
`No plugin found for connection string: ${connectionString} and driver type: ${driverType}`
|
|
42
|
-
);
|
|
43
|
+
throw new Error(`No plugin found for driver type: ${driverType}`);
|
|
43
44
|
}
|
|
44
45
|
return driver.createPool({
|
|
45
46
|
...options,
|
|
@@ -51,4 +52,4 @@ function dumbo(options) {
|
|
|
51
52
|
|
|
52
53
|
|
|
53
54
|
exports.parseConnectionString = parseConnectionString; exports.dumbo = dumbo;
|
|
54
|
-
//# sourceMappingURL=chunk-
|
|
55
|
+
//# sourceMappingURL=chunk-A7TC7IOP.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/Pongo/Pongo/src/packages/dumbo/dist/chunk-A7TC7IOP.cjs","../src/storage/all/connections/connectionString.ts","../src/storage/all/index.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACKO,IAAM,sBAAA,EAAwB,CACnC,gBAAA,EAAA,GAC4B;AAC5B,EAAA,GAAA,CACE,gBAAA,CAAiB,UAAA,CAAW,eAAe,EAAA,GAC3C,gBAAA,CAAiB,UAAA,CAAW,aAAa,CAAA,EACzC;AACA,IAAA,OAAO;AAAA,MACL,YAAA,EAAc,YAAA;AAAA,MACd,UAAA,EAAY;AAAA,IACd,CAAA;AAAA,EACF;AAEA,EAAA,GAAA,CACE,gBAAA,CAAiB,UAAA,CAAW,OAAO,EAAA,GACnC,iBAAA,IAAqB,WAAA,GACrB,gBAAA,CAAiB,UAAA,CAAW,GAAG,EAAA,GAC/B,gBAAA,CAAiB,UAAA,CAAW,IAAI,CAAA,EAChC;AACA,IAAA,OAAO;AAAA,MACL,YAAA,EAAc,QAAA;AAAA,MACd,UAAA,EAAY;AAAA,IACd,CAAA;AAAA,EACF;AAEA,EAAA,GAAA,CAAI,gBAAA,CAAiB,UAAA,CAAW,KAAK,CAAA,EAAG;AACtC,IAAA,OAAO;AAAA,MACL,YAAA,EAAc,QAAA;AAAA,MACd,UAAA,EAAY;AAAA,IACd,CAAA;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,CAAA,wCAAA,EAA2C,gBAAgB,CAAA;AAAA,EAAA;AAE/D;ADhBA;AACA;AEpBA;AAA4B,EAAA;AAAS,EAAA;AAErC;AAEA;AAA4B,EAAA;AAAS,EAAA;AAErC;AAEO;AAKL,EAAA;AAEA,EAAA;AAIA,EAAA;AACE,IAAA;AAAgE,EAAA;AAGlE,EAAA;AAAyB,IAAA;AACpB,IAAA;AACgB,EAAA;AAEvB;AFaA;AACA;AACA;AACA;AACA","file":"/home/runner/work/Pongo/Pongo/src/packages/dumbo/dist/chunk-A7TC7IOP.cjs","sourcesContent":[null,"import type { DatabaseDriverTypeParts, DatabaseType } from '../../../core';\n\nexport type DatabaseConnectionString<\n DatabaseTypeName extends DatabaseType = DatabaseType,\n Format extends string = string,\n> = Format & {\n _databaseType: DatabaseTypeName;\n};\n\nexport const parseConnectionString = (\n connectionString: DatabaseConnectionString | string,\n): DatabaseDriverTypeParts => {\n if (\n connectionString.startsWith('postgresql://') ||\n connectionString.startsWith('postgres://')\n ) {\n return {\n databaseType: 'PostgreSQL',\n driverName: 'pg',\n };\n }\n\n if (\n connectionString.startsWith('file:') ||\n connectionString === ':memory:' ||\n connectionString.startsWith('/') ||\n connectionString.startsWith('./')\n ) {\n return {\n databaseType: 'SQLite',\n driverName: 'sqlite3',\n };\n }\n\n if (connectionString.startsWith('d1:')) {\n return {\n databaseType: 'SQLite',\n driverName: 'd1',\n };\n }\n\n throw new Error(\n `Unsupported database connection string: ${connectionString}`,\n );\n};\n","import {\n dumboDatabaseDriverRegistry,\n type AnyDumboDatabaseDriver,\n type DumboConnectionOptions,\n type ExtractDumboTypeFromDriver,\n} from '../../core';\n\nexport * from './connections';\n\ndumboDatabaseDriverRegistry.register('PostgreSQL:pg', () =>\n import('../postgresql/pg').then((m) => m.databaseDriver),\n);\n\ndumboDatabaseDriverRegistry.register('SQLite:sqlite3', () =>\n import('../sqlite/sqlite3').then((m) => m.databaseDriver),\n);\n\nexport function dumbo<\n DatabaseDriver extends AnyDumboDatabaseDriver = AnyDumboDatabaseDriver,\n ConnectionOptions extends\n DumboConnectionOptions<DatabaseDriver> = DumboConnectionOptions<DatabaseDriver>,\n>(options: ConnectionOptions): ExtractDumboTypeFromDriver<DatabaseDriver> {\n const { driverType } = options;\n\n const driver =\n options.driver ??\n dumboDatabaseDriverRegistry.tryGet<DatabaseDriver>(options);\n\n if (driver === null) {\n throw new Error(`No plugin found for driver type: ${driverType}`);\n }\n\n return driver.createPool({\n ...options,\n driverType: driver.driverType,\n }) as ExtractDumboTypeFromDriver<DatabaseDriver>;\n}\n"]}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DefaultSQLiteMigratorOptions,
|
|
3
|
+
InMemorySQLiteDatabase,
|
|
4
|
+
SQLiteConnectionString,
|
|
5
|
+
sqliteConnection,
|
|
6
|
+
sqliteFormatter,
|
|
7
|
+
sqlitePool,
|
|
8
|
+
toSqlitePoolOptions
|
|
9
|
+
} from "./chunk-XVV3OOQX.js";
|
|
10
|
+
import {
|
|
11
|
+
SQL,
|
|
12
|
+
canHandleDriverWithConnectionString,
|
|
13
|
+
dumboDatabaseDriverRegistry
|
|
14
|
+
} from "./chunk-N7RWT46K.js";
|
|
15
|
+
|
|
16
|
+
// src/storage/sqlite/sqlite3/connections/connection.ts
|
|
17
|
+
import sqlite3 from "sqlite3";
|
|
18
|
+
var SQLite3DriverType = "SQLite:sqlite3";
|
|
19
|
+
var sqlite3Client = (options) => {
|
|
20
|
+
let db;
|
|
21
|
+
let isClosed = false;
|
|
22
|
+
const connect = () => db ? Promise.resolve() : new Promise((resolve, reject) => {
|
|
23
|
+
try {
|
|
24
|
+
db = new sqlite3.Database(
|
|
25
|
+
options.fileName ?? options.connectionString ?? InMemorySQLiteDatabase,
|
|
26
|
+
sqlite3.OPEN_URI | sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE,
|
|
27
|
+
(err) => {
|
|
28
|
+
if (err) {
|
|
29
|
+
reject(err);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
db.run("PRAGMA journal_mode = WAL;", (err) => {
|
|
35
|
+
if (err) {
|
|
36
|
+
reject(err);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
resolve();
|
|
40
|
+
});
|
|
41
|
+
} catch (error) {
|
|
42
|
+
reject(error);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
const executeQuery = (sql, params) => new Promise((resolve, reject) => {
|
|
46
|
+
try {
|
|
47
|
+
db.all(sql, params ?? [], (err, result) => {
|
|
48
|
+
if (err) {
|
|
49
|
+
reject(err);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
resolve(result);
|
|
53
|
+
});
|
|
54
|
+
} catch (error) {
|
|
55
|
+
reject(error);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
const executeCommand = (sql, params, options2) => new Promise((resolve, reject) => {
|
|
59
|
+
try {
|
|
60
|
+
if (options2?.ignoreChangesCount === true) {
|
|
61
|
+
db.run(
|
|
62
|
+
sql,
|
|
63
|
+
params ?? [],
|
|
64
|
+
function(err, rows) {
|
|
65
|
+
if (err) {
|
|
66
|
+
reject(err);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
resolve({
|
|
70
|
+
rowCount: 0,
|
|
71
|
+
rows: rows ?? []
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
db.serialize(() => {
|
|
77
|
+
db.all(sql, params ?? [], (err, rows) => {
|
|
78
|
+
if (err) {
|
|
79
|
+
reject(err);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
db.get(
|
|
83
|
+
"SELECT changes() as changes",
|
|
84
|
+
(changesErr, row) => {
|
|
85
|
+
if (changesErr) {
|
|
86
|
+
reject(changesErr);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
resolve({
|
|
90
|
+
rowCount: row?.changes ?? 0,
|
|
91
|
+
rows: rows ?? []
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
} catch (error) {
|
|
98
|
+
reject(error);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
return {
|
|
102
|
+
connect,
|
|
103
|
+
close: () => {
|
|
104
|
+
if (isClosed) {
|
|
105
|
+
return Promise.resolve();
|
|
106
|
+
}
|
|
107
|
+
isClosed = true;
|
|
108
|
+
if (db)
|
|
109
|
+
return new Promise((resolve, reject) => {
|
|
110
|
+
db.close((err) => {
|
|
111
|
+
if (err) {
|
|
112
|
+
reject(err);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
resolve();
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
return Promise.resolve();
|
|
119
|
+
},
|
|
120
|
+
query: async (sql, _options) => {
|
|
121
|
+
const { query, params } = sqliteFormatter.format(sql);
|
|
122
|
+
const result = await executeQuery(
|
|
123
|
+
query,
|
|
124
|
+
params
|
|
125
|
+
);
|
|
126
|
+
return { rowCount: result.length, rows: result };
|
|
127
|
+
},
|
|
128
|
+
batchQuery: async (sqls, _options) => {
|
|
129
|
+
const results = [];
|
|
130
|
+
for (const sql of sqls) {
|
|
131
|
+
const { query, params } = sqliteFormatter.format(sql);
|
|
132
|
+
const result = await executeQuery(
|
|
133
|
+
query,
|
|
134
|
+
params
|
|
135
|
+
);
|
|
136
|
+
results.push({ rowCount: result.length, rows: result });
|
|
137
|
+
}
|
|
138
|
+
return results;
|
|
139
|
+
},
|
|
140
|
+
command: async (sql, options2) => {
|
|
141
|
+
const { query, params } = sqliteFormatter.format(sql);
|
|
142
|
+
return executeCommand(
|
|
143
|
+
query,
|
|
144
|
+
params,
|
|
145
|
+
options2
|
|
146
|
+
);
|
|
147
|
+
},
|
|
148
|
+
batchCommand: async (sqls, options2) => {
|
|
149
|
+
const results = [];
|
|
150
|
+
for (const sql of sqls) {
|
|
151
|
+
const { query, params } = sqliteFormatter.format(sql);
|
|
152
|
+
const result = await executeCommand(
|
|
153
|
+
query,
|
|
154
|
+
params,
|
|
155
|
+
options2
|
|
156
|
+
);
|
|
157
|
+
results.push(result);
|
|
158
|
+
}
|
|
159
|
+
return results;
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
};
|
|
163
|
+
var checkConnection = async (fileName) => {
|
|
164
|
+
const client = sqlite3Client({
|
|
165
|
+
fileName
|
|
166
|
+
});
|
|
167
|
+
try {
|
|
168
|
+
await client.query(SQL`SELECT 1`);
|
|
169
|
+
return { successful: true };
|
|
170
|
+
} catch (error) {
|
|
171
|
+
const code = error instanceof Error && "code" in error && typeof error.code === "string" ? error.code : void 0;
|
|
172
|
+
return {
|
|
173
|
+
successful: false,
|
|
174
|
+
errorType: code === "SQLITE_CANTOPEN" ? "ConnectionRefused" : code === "SQLITE_AUTH" ? "Authentication" : "Unknown",
|
|
175
|
+
code,
|
|
176
|
+
error
|
|
177
|
+
};
|
|
178
|
+
} finally {
|
|
179
|
+
await client.close();
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
var sqlite3Connection = (options) => sqliteConnection({
|
|
183
|
+
type: "Client",
|
|
184
|
+
driverType: SQLite3DriverType,
|
|
185
|
+
sqliteClientFactory: (connectionOptions) => {
|
|
186
|
+
if ("client" in connectionOptions && connectionOptions.client) {
|
|
187
|
+
return connectionOptions.client;
|
|
188
|
+
}
|
|
189
|
+
return sqlite3Client(connectionOptions);
|
|
190
|
+
},
|
|
191
|
+
connectionOptions: options
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
// src/storage/sqlite/sqlite3/index.ts
|
|
195
|
+
var sqlite3Pool = (options) => sqlitePool(
|
|
196
|
+
toSqlitePoolOptions({
|
|
197
|
+
...options,
|
|
198
|
+
driverType: SQLite3DriverType,
|
|
199
|
+
..."connection" in options ? {} : {
|
|
200
|
+
connectionOptions: options,
|
|
201
|
+
sqliteConnectionFactory: (opts) => sqlite3Connection(opts)
|
|
202
|
+
}
|
|
203
|
+
})
|
|
204
|
+
);
|
|
205
|
+
var tryParseConnectionString = (connectionString) => {
|
|
206
|
+
try {
|
|
207
|
+
return SQLiteConnectionString(connectionString);
|
|
208
|
+
} catch {
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
var sqlite3DatabaseDriver = {
|
|
213
|
+
driverType: SQLite3DriverType,
|
|
214
|
+
createPool: (options) => sqlite3Pool(options),
|
|
215
|
+
sqlFormatter: sqliteFormatter,
|
|
216
|
+
defaultMigratorOptions: DefaultSQLiteMigratorOptions,
|
|
217
|
+
getDatabaseNameOrDefault: () => InMemorySQLiteDatabase,
|
|
218
|
+
canHandle: canHandleDriverWithConnectionString(
|
|
219
|
+
SQLite3DriverType,
|
|
220
|
+
tryParseConnectionString
|
|
221
|
+
)
|
|
222
|
+
};
|
|
223
|
+
var useSqlite3DatabaseDriver = () => {
|
|
224
|
+
dumboDatabaseDriverRegistry.register(
|
|
225
|
+
SQLite3DriverType,
|
|
226
|
+
sqlite3DatabaseDriver
|
|
227
|
+
);
|
|
228
|
+
};
|
|
229
|
+
useSqlite3DatabaseDriver();
|
|
230
|
+
|
|
231
|
+
export {
|
|
232
|
+
SQLite3DriverType,
|
|
233
|
+
sqlite3Client,
|
|
234
|
+
checkConnection,
|
|
235
|
+
sqlite3Connection,
|
|
236
|
+
sqlite3Pool,
|
|
237
|
+
sqlite3DatabaseDriver,
|
|
238
|
+
useSqlite3DatabaseDriver
|
|
239
|
+
};
|
|
240
|
+
//# sourceMappingURL=chunk-F7JQ7BX7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/storage/sqlite/sqlite3/connections/connection.ts","../src/storage/sqlite/sqlite3/index.ts"],"sourcesContent":["import sqlite3 from 'sqlite3';\nimport {\n SQL,\n type Connection,\n type DatabaseTransactionOptions,\n type QueryResult,\n type QueryResultRow,\n type SQLQueryOptions,\n} from '../../../../core';\nimport type {\n SQLiteClient,\n SQLiteClientOrPoolClient,\n SQLiteConnectionOptions,\n SQLiteDriverType,\n SQLiteFileNameOrConnectionString,\n SQLiteTransaction,\n} from '../../core';\nimport {\n InMemorySQLiteDatabase,\n sqliteConnection,\n type SQLiteClientOptions,\n type SQLiteCommandOptions,\n type SQLiteParameters,\n} from '../../core/connections';\nimport { sqliteFormatter } from '../../core/sql/formatter';\n\nexport type SQLite3DriverType = SQLiteDriverType<'sqlite3'>;\nexport const SQLite3DriverType: SQLite3DriverType = 'SQLite:sqlite3';\n\nexport type ConnectionCheckResult =\n | { successful: true }\n | {\n successful: false;\n code: string | undefined;\n errorType: 'ConnectionRefused' | 'Authentication' | 'Unknown';\n error: unknown;\n };\n\nexport type SQLite3ClientOptions = SQLiteClientOptions &\n SQLiteFileNameOrConnectionString;\n\nexport type SQLite3Client = SQLiteClientOrPoolClient;\n\nexport type SQLite3ConnectionOptions = SQLiteConnectionOptions &\n ((SQLite3ClientOptions & { client?: never }) | { client: SQLite3Client });\n\nexport type SQLite3Connection<\n ClientType extends SQLiteClientOrPoolClient = SQLiteClientOrPoolClient,\n> = Connection<\n SQLite3Connection,\n SQLite3DriverType,\n ClientType,\n SQLiteTransaction<SQLite3Connection>,\n DatabaseTransactionOptions\n>;\n\nexport const sqlite3Client = (options: SQLite3ClientOptions): SQLiteClient => {\n let db: sqlite3.Database;\n\n let isClosed = false;\n\n const connect: () => Promise<void> = () =>\n db\n ? Promise.resolve() // If db is already initialized, resolve immediately\n : new Promise((resolve, reject) => {\n try {\n db = new sqlite3.Database(\n options.fileName ??\n options.connectionString ??\n InMemorySQLiteDatabase,\n sqlite3.OPEN_URI | sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE,\n (err) => {\n if (err) {\n reject(err);\n return;\n }\n },\n );\n db.run('PRAGMA journal_mode = WAL;', (err) => {\n if (err) {\n reject(err);\n return;\n }\n\n resolve();\n });\n } catch (error) {\n reject(error as Error);\n }\n });\n\n const executeQuery = <T>(\n sql: string,\n params?: SQLiteParameters[],\n ): Promise<T[]> =>\n new Promise((resolve, reject) => {\n try {\n db.all(sql, params ?? [], (err: Error | null, result: T[]) => {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(result);\n });\n } catch (error) {\n reject(error as Error);\n }\n });\n\n const executeCommand = <Result extends QueryResultRow = QueryResultRow>(\n sql: string,\n params?: SQLiteParameters[],\n options?: SQLiteCommandOptions,\n ): Promise<QueryResult<Result>> =>\n new Promise((resolve, reject) => {\n try {\n if (options?.ignoreChangesCount === true) {\n db.run(\n sql,\n params ?? [],\n function (err: Error | null, rows: Result[]) {\n if (err) {\n reject(err);\n return;\n }\n resolve({\n rowCount: 0,\n rows: rows ?? [],\n });\n },\n );\n }\n // OD: 2026-01-21\n // This is needed as SQLite does not return changes count properly\n // We need to query it separately with SELECT changes()\n // This may be fixed eventually in sqlite3 library as Node.js team did here:\n // https://github.com/nodejs/node/issues/57344\n // But for now, we do it manually, as a workaround\n // We also serialize it to avoid race conditions\n db.serialize(() => {\n db.all(sql, params ?? [], (err: Error | null, rows: Result[]) => {\n if (err) {\n reject(err);\n return;\n }\n db.get(\n 'SELECT changes() as changes',\n (changesErr: Error | null, row: { changes: number } | null) => {\n if (changesErr) {\n reject(changesErr);\n return;\n }\n resolve({\n rowCount: row?.changes ?? 0,\n rows: rows ?? [],\n });\n },\n );\n });\n });\n } catch (error) {\n reject(error as Error);\n }\n });\n\n return {\n connect,\n close: (): Promise<void> => {\n if (isClosed) {\n return Promise.resolve();\n }\n isClosed = true;\n if (db)\n return new Promise((resolve, reject) => {\n db.close((err: Error | null) => {\n if (err) {\n reject(err);\n return;\n }\n\n resolve();\n });\n });\n return Promise.resolve();\n },\n query: async <Result extends QueryResultRow = QueryResultRow>(\n sql: SQL,\n _options?: SQLQueryOptions,\n ): Promise<QueryResult<Result>> => {\n const { query, params } = sqliteFormatter.format(sql);\n const result = await executeQuery<Result>(\n query,\n params as SQLiteParameters[],\n );\n return { rowCount: result.length, rows: result };\n },\n batchQuery: async <Result extends QueryResultRow = QueryResultRow>(\n sqls: SQL[],\n _options?: SQLQueryOptions,\n ): Promise<QueryResult<Result>[]> => {\n const results: QueryResult<Result>[] = [];\n for (const sql of sqls) {\n const { query, params } = sqliteFormatter.format(sql);\n const result = await executeQuery<Result>(\n query,\n params as SQLiteParameters[],\n );\n results.push({ rowCount: result.length, rows: result });\n }\n return results;\n },\n command: async <Result extends QueryResultRow = QueryResultRow>(\n sql: SQL,\n options?: SQLiteCommandOptions,\n ): Promise<QueryResult<Result>> => {\n const { query, params } = sqliteFormatter.format(sql);\n\n return executeCommand<Result>(\n query,\n params as SQLiteParameters[],\n options,\n );\n },\n batchCommand: async <Result extends QueryResultRow = QueryResultRow>(\n sqls: SQL[],\n options?: SQLiteCommandOptions,\n ): Promise<QueryResult<Result>[]> => {\n const results: QueryResult<Result>[] = [];\n\n for (const sql of sqls) {\n const { query, params } = sqliteFormatter.format(sql);\n const result = await executeCommand<Result>(\n query,\n params as SQLiteParameters[],\n options,\n );\n results.push(result);\n }\n return results;\n },\n };\n};\n\nexport const checkConnection = async (\n fileName: string,\n): Promise<ConnectionCheckResult> => {\n const client = sqlite3Client({\n fileName,\n });\n\n try {\n await client.query(SQL`SELECT 1`);\n return { successful: true };\n } catch (error) {\n const code =\n error instanceof Error &&\n 'code' in error &&\n typeof error.code === 'string'\n ? error.code\n : undefined;\n\n return {\n successful: false,\n errorType:\n code === 'SQLITE_CANTOPEN'\n ? 'ConnectionRefused'\n : code === 'SQLITE_AUTH'\n ? 'Authentication'\n : 'Unknown',\n code,\n error,\n };\n } finally {\n await client.close();\n }\n};\n\nexport const sqlite3Connection = (options: SQLite3ConnectionOptions) =>\n sqliteConnection<SQLite3Connection, SQLite3ConnectionOptions>({\n type: 'Client',\n driverType: SQLite3DriverType,\n sqliteClientFactory: (connectionOptions) => {\n if ('client' in connectionOptions && connectionOptions.client) {\n return connectionOptions.client;\n }\n return sqlite3Client(connectionOptions);\n },\n connectionOptions: options,\n });\n","export * from './connections';\nimport {\n canHandleDriverWithConnectionString,\n dumboDatabaseDriverRegistry,\n type DumboConnectionOptions,\n type DumboDatabaseDriver,\n} from '../../../core';\nimport {\n DefaultSQLiteMigratorOptions,\n InMemorySQLiteDatabase,\n SQLiteConnectionString,\n sqliteFormatter,\n sqlitePool,\n toSqlitePoolOptions,\n type SQLitePoolOptions,\n} from '../core';\nimport {\n sqlite3Client,\n sqlite3Connection,\n SQLite3DriverType,\n type SQLite3Connection,\n type SQLite3ConnectionOptions,\n} from './connections';\n\nexport type SQLite3DumboOptions = Omit<\n SQLitePoolOptions<SQLite3Connection, SQLite3ConnectionOptions>,\n 'driverType'\n> &\n SQLite3ConnectionOptions;\n\nexport const sqlite3Pool = (options: SQLite3DumboOptions) =>\n sqlitePool(\n toSqlitePoolOptions({\n ...options,\n driverType: SQLite3DriverType,\n ...('connection' in options\n ? {}\n : {\n connectionOptions: options as SQLite3ConnectionOptions,\n sqliteConnectionFactory: (opts: SQLite3ConnectionOptions) =>\n sqlite3Connection(opts),\n }),\n }),\n );\n\nconst tryParseConnectionString = (connectionString: string) => {\n try {\n return SQLiteConnectionString(connectionString);\n } catch {\n return null;\n }\n};\n\nexport const sqlite3DatabaseDriver = {\n driverType: SQLite3DriverType,\n createPool: (options) => sqlite3Pool(options as SQLite3DumboOptions),\n sqlFormatter: sqliteFormatter,\n defaultMigratorOptions: DefaultSQLiteMigratorOptions,\n getDatabaseNameOrDefault: () => InMemorySQLiteDatabase,\n canHandle: canHandleDriverWithConnectionString(\n SQLite3DriverType,\n tryParseConnectionString,\n ),\n} satisfies DumboDatabaseDriver<SQLite3Connection, SQLite3DumboOptions>;\n\nexport const useSqlite3DatabaseDriver = () => {\n dumboDatabaseDriverRegistry.register(\n SQLite3DriverType,\n sqlite3DatabaseDriver,\n );\n};\n\nexport type SQLite3DumboConnectionOptions = DumboConnectionOptions<\n typeof sqlite3DatabaseDriver\n> & { connectionString: string | SQLiteConnectionString };\n\nuseSqlite3DatabaseDriver();\n\nexport {\n sqlite3Pool as connectionPool,\n sqlite3DatabaseDriver as databaseDriver,\n sqlite3Client as sqliteClient,\n};\n\nexport * from './connections';\nexport * from './formatter';\nexport * from './transactions';\n"],"mappings":"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","names":["options"]}
|
|
@@ -3,6 +3,8 @@ import {
|
|
|
3
3
|
SQL,
|
|
4
4
|
SQLFormatter,
|
|
5
5
|
SQLProcessorsRegistry,
|
|
6
|
+
canHandleDriverWithConnectionString,
|
|
7
|
+
createAmbientConnectionPool,
|
|
6
8
|
createConnection,
|
|
7
9
|
createConnectionPool,
|
|
8
10
|
defaultDatabaseLockOptions,
|
|
@@ -16,7 +18,7 @@ import {
|
|
|
16
18
|
single,
|
|
17
19
|
sqlExecutor,
|
|
18
20
|
tracer
|
|
19
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-N7RWT46K.js";
|
|
20
22
|
|
|
21
23
|
// src/storage/postgresql/core/connections/connectionString.ts
|
|
22
24
|
import pgcs from "pg-connection-string";
|
|
@@ -508,12 +510,9 @@ var nodePostgresAmbientNativePool = (options) => {
|
|
|
508
510
|
};
|
|
509
511
|
var nodePostgresAmbientConnectionPool = (options) => {
|
|
510
512
|
const { connection } = options;
|
|
511
|
-
return
|
|
513
|
+
return createAmbientConnectionPool({
|
|
512
514
|
driverType: NodePostgresDriverType,
|
|
513
|
-
|
|
514
|
-
execute: connection.execute,
|
|
515
|
-
transaction: () => connection.transaction(),
|
|
516
|
-
withTransaction: (handle) => connection.withTransaction(handle)
|
|
515
|
+
connection
|
|
517
516
|
});
|
|
518
517
|
};
|
|
519
518
|
var nodePostgresClientPool = (options) => {
|
|
@@ -613,20 +612,23 @@ var updatePoolUsageCounter = (lookupKey, by) => {
|
|
|
613
612
|
};
|
|
614
613
|
|
|
615
614
|
// src/storage/postgresql/pg/index.ts
|
|
615
|
+
var tryParseConnectionString = (connectionString) => {
|
|
616
|
+
try {
|
|
617
|
+
return PostgreSQLConnectionString(connectionString);
|
|
618
|
+
} catch {
|
|
619
|
+
return null;
|
|
620
|
+
}
|
|
621
|
+
};
|
|
616
622
|
var pgDatabaseDriver = {
|
|
617
623
|
driverType: NodePostgresDriverType,
|
|
618
624
|
createPool: (options) => nodePostgresPool(options),
|
|
619
625
|
sqlFormatter: pgFormatter,
|
|
620
626
|
defaultMigratorOptions: DefaultPostgreSQLMigratorOptions,
|
|
621
|
-
defaultConnectionString: defaultPostgreSQLConnectionString,
|
|
622
627
|
getDatabaseNameOrDefault,
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
return null;
|
|
628
|
-
}
|
|
629
|
-
}
|
|
628
|
+
canHandle: canHandleDriverWithConnectionString(
|
|
629
|
+
NodePostgresDriverType,
|
|
630
|
+
tryParseConnectionString
|
|
631
|
+
)
|
|
630
632
|
};
|
|
631
633
|
var usePgDatabaseDriver = () => {
|
|
632
634
|
dumboDatabaseDriverRegistry.register(
|
|
@@ -683,4 +685,4 @@ export {
|
|
|
683
685
|
postgresPool,
|
|
684
686
|
connectionPool
|
|
685
687
|
};
|
|
686
|
-
//# sourceMappingURL=chunk-
|
|
688
|
+
//# sourceMappingURL=chunk-I34X53VL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/storage/postgresql/core/connections/connectionString.ts","../src/storage/postgresql/core/locks/advisoryLocks.ts","../src/storage/postgresql/core/schema/migrations.ts","../src/storage/postgresql/core/schema/schema.ts","../src/storage/postgresql/core/sql/processors/columProcessors.ts","../src/storage/postgresql/core/sql/formatter/reserved.ts","../src/storage/postgresql/core/sql/formatter/index.ts","../src/storage/postgresql/core/index.ts","../src/storage/postgresql/pg/connections/connection.ts","../src/storage/postgresql/pg/execute/execute.ts","../src/storage/postgresql/pg/connections/transaction.ts","../src/storage/postgresql/pg/connections/pool.ts","../src/storage/postgresql/pg/serialization/index.ts","../src/storage/postgresql/pg/index.ts"],"sourcesContent":["import pgcs from 'pg-connection-string';\nimport type { DatabaseConnectionString } from '../../../all';\nimport { defaultPostgreSqlDatabase } from '../schema';\n\nexport const defaultPostgreSQLConnectionString: PostgreSQLConnectionString =\n 'postgresql://postgres@localhost:5432/postgres' as PostgreSQLConnectionString;\n\nexport const getDatabaseNameOrDefault = (connectionString: string) =>\n pgcs.parse(connectionString).database ?? defaultPostgreSqlDatabase;\n\nexport type PostgreSQLConnectionString = DatabaseConnectionString<\n 'PostgreSQL',\n `postgresql://${string}` | `postgres://${string}`\n>;\n\nexport const PostgreSQLConnectionString = (\n connectionString: string,\n): PostgreSQLConnectionString => {\n if (\n !connectionString.startsWith('postgresql://') &&\n !connectionString.startsWith('postgres://')\n ) {\n throw new Error(\n `Invalid PostgreSQL connection string: ${connectionString}. It should start with \"postgresql://\".`,\n );\n }\n return connectionString as PostgreSQLConnectionString;\n};\n","import {\n defaultDatabaseLockOptions,\n single,\n SQL,\n type AcquireDatabaseLockMode,\n type AcquireDatabaseLockOptions,\n type DatabaseLock,\n type DatabaseLockOptions,\n type ReleaseDatabaseLockOptions,\n type SQLExecutor,\n} from '../../../../core';\n\nexport const tryAcquireAdvisoryLock = async (\n execute: SQLExecutor,\n options: AcquireDatabaseLockOptions,\n): Promise<boolean> => {\n const timeoutMs = options.timeoutMs ?? defaultDatabaseLockOptions.timeoutMs;\n\n const advisoryLock =\n options.mode === 'Permanent' ? 'pg_advisory_lock' : 'pg_advisory_xact_lock';\n\n try {\n await single(\n execute.query<{ locked: boolean }>(\n SQL`SELECT ${SQL.plain(advisoryLock)}(${options.lockId}) AS locked`,\n { timeoutMs },\n ),\n );\n return true;\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === '57014')\n return false;\n\n throw error;\n }\n};\n\nexport const releaseAdvisoryLock = async (\n execute: SQLExecutor,\n options: ReleaseDatabaseLockOptions,\n): Promise<boolean> => {\n const timeoutMs = options.timeoutMs ?? defaultDatabaseLockOptions.timeoutMs;\n\n try {\n await single(\n execute.query<{ locked: boolean }>(\n SQL`SELECT pg_advisory_unlock(${options.lockId}) AS locked`,\n { timeoutMs },\n ),\n );\n return true;\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === '57014')\n return false;\n\n throw error;\n }\n};\n\nexport const acquireAdvisoryLock = async (\n execute: SQLExecutor,\n options: AcquireDatabaseLockOptions,\n) => {\n const lockAcquired = await tryAcquireAdvisoryLock(execute, options);\n if (!lockAcquired) {\n throw new Error(\n 'Failed to acquire advisory lock within the specified timeout. Migration aborted.',\n );\n }\n};\n\nexport const AdvisoryLock: DatabaseLock = {\n acquire: acquireAdvisoryLock,\n tryAcquire: tryAcquireAdvisoryLock,\n release: releaseAdvisoryLock,\n withAcquire: async <Result>(\n execute: SQLExecutor,\n handle: () => Promise<Result>,\n options: AcquireDatabaseLockOptions,\n ) => {\n await acquireAdvisoryLock(execute, options);\n try {\n return await handle();\n } finally {\n if (options.mode === 'Permanent')\n await releaseAdvisoryLock(execute, options);\n }\n },\n};\n\nexport const advisoryLock = (\n execute: SQLExecutor,\n options: DatabaseLockOptions,\n) => ({\n acquire: (acquireOptions?: { mode: AcquireDatabaseLockMode }) =>\n acquireAdvisoryLock(execute, {\n ...options,\n ...(acquireOptions ?? {}),\n }),\n tryAcquire: (acquireOptions?: { mode: AcquireDatabaseLockMode }) =>\n tryAcquireAdvisoryLock(execute, {\n ...options,\n ...(acquireOptions ?? {}),\n }),\n release: () => releaseAdvisoryLock(execute, options),\n withAcquire: async <Result>(\n handle: () => Promise<Result>,\n acquireOptions?: { mode: AcquireDatabaseLockMode },\n ) => {\n await acquireAdvisoryLock(execute, {\n ...options,\n ...(acquireOptions ?? {}),\n });\n try {\n return await handle();\n } finally {\n await releaseAdvisoryLock(execute, options);\n }\n },\n});\n","import {\n type MigratorOptions,\n registerDefaultMigratorOptions,\n} from '../../../../core';\nimport { AdvisoryLock } from '../locks';\n\nexport const DefaultPostgreSQLMigratorOptions: MigratorOptions = {\n lock: {\n databaseLock: AdvisoryLock,\n },\n};\n\nregisterDefaultMigratorOptions('PostgreSQL', DefaultPostgreSQLMigratorOptions);\n","import { exists, SQL, type ConnectionPool } from '../../../../core';\nexport * from './schema';\n\nexport const defaultPostgreSqlDatabase = 'postgres';\n\nexport const tableExistsSQL = (tableName: string): SQL =>\n SQL`\n SELECT EXISTS (\n SELECT FROM pg_tables\n WHERE tablename = ${tableName}\n ) AS exists;`;\n\nexport const tableExists = async (\n pool: ConnectionPool,\n tableName: string,\n): Promise<boolean> => exists(pool.execute.query(tableExistsSQL(tableName)));\n\nexport const functionExistsSQL = (functionName: string): SQL =>\n SQL`\n SELECT EXISTS (\n SELECT FROM pg_proc\n WHERE\n proname = ${functionName}\n ) AS exists;`;\n\nexport const functionExists = async (\n pool: ConnectionPool,\n tableName: string,\n): Promise<boolean> => exists(pool.execute.query(functionExistsSQL(tableName)));\n","import {\n mapDefaultSQLColumnProcessors,\n type DefaultSQLColumnProcessors,\n type DefaultSQLColumnToken,\n type SQLProcessorContext,\n} from '../../../../../core';\n\nconst mapColumnType = (\n token: DefaultSQLColumnToken,\n { builder }: SQLProcessorContext,\n): void => {\n let columnSQL: string;\n const { sqlTokenType } = token;\n switch (sqlTokenType) {\n case 'SQL_COLUMN_AUTO_INCREMENT':\n columnSQL = `${token.bigint ? 'BIGSERIAL' : 'SERIAL'} ${token.primaryKey ? 'PRIMARY KEY' : ''}`;\n break;\n case 'SQL_COLUMN_BIGINT':\n columnSQL = 'BIGINT';\n break;\n case 'SQL_COLUMN_SERIAL':\n columnSQL = 'SERIAL';\n break;\n case 'SQL_COLUMN_INTEGER':\n columnSQL = 'INTEGER';\n break;\n case 'SQL_COLUMN_JSONB':\n columnSQL = 'JSONB';\n break;\n case 'SQL_COLUMN_BIGSERIAL':\n columnSQL = 'BIGSERIAL';\n break;\n case 'SQL_COLUMN_TIMESTAMP':\n columnSQL = 'TIMESTAMP';\n break;\n case 'SQL_COLUMN_TIMESTAMPTZ':\n columnSQL = 'TIMESTAMPTZ';\n break;\n case 'SQL_COLUMN_VARCHAR':\n columnSQL = `VARCHAR ${Number.isNaN(token.length) ? '' : `(${token.length})`}`;\n break;\n default: {\n const exhaustiveCheck: never = sqlTokenType;\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`Unknown column type: ${exhaustiveCheck}`);\n }\n }\n builder.addSQL(columnSQL);\n};\n\nexport const postgreSQLColumnProcessors: DefaultSQLColumnProcessors =\n mapDefaultSQLColumnProcessors(mapColumnType);\n","// Ported from: https://github.com/datalanche/node-pg-format/blob/master/lib/reserved.js\n//\n// PostgreSQL reserved words\n//\nconst reservedMap: { [key: string]: boolean } = {\n AES128: true,\n AES256: true,\n ALL: true,\n ALLOWOVERWRITE: true,\n ANALYSE: true,\n ANALYZE: true,\n AND: true,\n ANY: true,\n ARRAY: true,\n AS: true,\n ASC: true,\n AUTHORIZATION: true,\n BACKUP: true,\n BETWEEN: true,\n BINARY: true,\n BLANKSASNULL: true,\n BOTH: true,\n BYTEDICT: true,\n CASE: true,\n CAST: true,\n CHECK: true,\n COLLATE: true,\n COLUMN: true,\n CONSTRAINT: true,\n CREATE: true,\n CREDENTIALS: true,\n CROSS: true,\n CURRENT_DATE: true,\n CURRENT_TIME: true,\n CURRENT_TIMESTAMP: true,\n CURRENT_USER: true,\n CURRENT_USER_ID: true,\n DEFAULT: true,\n DEFERRABLE: true,\n DEFLATE: true,\n DEFRAG: true,\n DELTA: true,\n DELTA32K: true,\n DESC: true,\n DISABLE: true,\n DISTINCT: true,\n DO: true,\n ELSE: true,\n EMPTYASNULL: true,\n ENABLE: true,\n ENCODE: true,\n ENCRYPT: true,\n ENCRYPTION: true,\n END: true,\n EXCEPT: true,\n EXPLICIT: true,\n FALSE: true,\n FOR: true,\n FOREIGN: true,\n FREEZE: true,\n FROM: true,\n FULL: true,\n GLOBALDICT256: true,\n GLOBALDICT64K: true,\n GRANT: true,\n GROUP: true,\n GZIP: true,\n HAVING: true,\n IDENTITY: true,\n IGNORE: true,\n ILIKE: true,\n IN: true,\n INITIALLY: true,\n INNER: true,\n INTERSECT: true,\n INTO: true,\n IS: true,\n ISNULL: true,\n JOIN: true,\n LEADING: true,\n LEFT: true,\n LIKE: true,\n LIMIT: true,\n LOCALTIME: true,\n LOCALTIMESTAMP: true,\n LUN: true,\n LUNS: true,\n LZO: true,\n LZOP: true,\n MINUS: true,\n MOSTLY13: true,\n MOSTLY32: true,\n MOSTLY8: true,\n NATURAL: true,\n NEW: true,\n NOT: true,\n NOTNULL: true,\n NULL: true,\n NULLS: true,\n OFF: true,\n OFFLINE: true,\n OFFSET: true,\n OLD: true,\n ON: true,\n ONLY: true,\n OPEN: true,\n OR: true,\n ORDER: true,\n OUTER: true,\n OVERLAPS: true,\n PARALLEL: true,\n PARTITION: true,\n PERCENT: true,\n PLACING: true,\n PRIMARY: true,\n RAW: true,\n READRATIO: true,\n RECOVER: true,\n REFERENCES: true,\n REJECTLOG: true,\n RESORT: true,\n RESTORE: true,\n RIGHT: true,\n SELECT: true,\n SESSION_USER: true,\n SIMILAR: true,\n SOME: true,\n SYSDATE: true,\n SYSTEM: true,\n TABLE: true,\n TAG: true,\n TDES: true,\n TEXT255: true,\n TEXT32K: true,\n THEN: true,\n TO: true,\n TOP: true,\n TRAILING: true,\n TRUE: true,\n TRUNCATECOLUMNS: true,\n UNION: true,\n UNIQUE: true,\n USER: true,\n USING: true,\n VERBOSE: true,\n WALLET: true,\n WHEN: true,\n WHERE: true,\n WITH: true,\n WITHOUT: true,\n};\n\nexport default reservedMap;\n","import {\n SQLFormatter,\n SQLProcessorsRegistry,\n defaultProcessorsRegistry,\n mapSQLIdentifier,\n registerFormatter,\n} from '../../../../../core';\nimport { postgreSQLColumnProcessors } from '../processors';\nimport reservedMap from './reserved';\n\nconst postgreSQLProcessorsRegistry = SQLProcessorsRegistry({\n from: defaultProcessorsRegistry,\n}).register(postgreSQLColumnProcessors);\n\nconst pgFormatter: SQLFormatter = SQLFormatter({\n processorsRegistry: postgreSQLProcessorsRegistry,\n valueMapper: {\n mapDate: (value: Date): unknown =>\n value.toISOString().replace('T', ' ').replace('Z', '+00'),\n mapPlaceholder: (index: number): string => `$${index + 1}`,\n mapIdentifier: (value: string): string =>\n mapSQLIdentifier(value, { reservedWords: reservedMap }),\n },\n});\n\nregisterFormatter('PostgreSQL', pgFormatter);\n\n// Export the original functions if needed\nexport { pgFormatter };\n","import type { DatabaseDriverType } from '../../../core';\n\nexport * from './connections';\nexport * from './locks';\nexport * from './schema';\nexport * from './sql';\n\nexport type PostgreSQLDatabaseName = 'PostgreSQL';\nexport const PostgreSQLDatabaseName = 'PostgreSQL';\n\nexport type PostgreSQLDriverType<DriverName extends string = string> =\n DatabaseDriverType<PostgreSQLDatabaseName, DriverName>;\n","import pg from 'pg';\nimport { createConnection, type Connection } from '../../../../core';\nimport type { PostgreSQLDriverType } from '../../core';\nimport { nodePostgresSQLExecutor } from '../execute';\nimport { nodePostgresTransaction } from './transaction';\n\nexport type NodePostgresDriverType = PostgreSQLDriverType<'pg'>;\nexport const NodePostgresDriverType: NodePostgresDriverType = 'PostgreSQL:pg';\n\nexport type NodePostgresPoolClient = pg.PoolClient;\nexport type NodePostgresClient = pg.Client;\n\nexport type NodePostgresClientOrPoolClient =\n | NodePostgresPoolClient\n | NodePostgresClient;\n\nexport type NodePostgresPoolOrClient =\n | pg.Pool\n | NodePostgresPoolClient\n | NodePostgresClient;\n\nexport type NodePostgresClientConnection = Connection<\n NodePostgresClientConnection,\n NodePostgresDriverType,\n NodePostgresClient\n>;\n\nexport type NodePostgresPoolClientConnection = Connection<\n NodePostgresPoolClientConnection,\n NodePostgresDriverType,\n NodePostgresPoolClient\n>;\n\nexport type NodePostgresConnection =\n | NodePostgresPoolClientConnection\n | NodePostgresClientConnection;\n\nexport type NodePostgresPoolClientOptions = {\n type: 'PoolClient';\n connect: () => Promise<NodePostgresPoolClient>;\n close: (client: NodePostgresPoolClient) => Promise<void>;\n};\n\nexport type NodePostgresClientOptions = {\n type: 'Client';\n connect: () => Promise<NodePostgresClient>;\n close: (client: NodePostgresClient) => Promise<void>;\n};\n\nexport const nodePostgresClientConnection = (\n options: NodePostgresClientOptions,\n): NodePostgresClientConnection => {\n const { connect, close } = options;\n\n return createConnection({\n driverType: NodePostgresDriverType,\n connect,\n close,\n initTransaction: (connection) => nodePostgresTransaction(connection),\n executor: nodePostgresSQLExecutor,\n });\n};\n\nexport const nodePostgresPoolClientConnection = (\n options: NodePostgresPoolClientOptions,\n): NodePostgresPoolClientConnection => {\n const { connect, close } = options;\n\n return createConnection({\n driverType: NodePostgresDriverType,\n connect,\n close,\n initTransaction: (connection) => nodePostgresTransaction(connection),\n executor: nodePostgresSQLExecutor,\n });\n};\n\nexport function nodePostgresConnection(\n options: NodePostgresPoolClientOptions,\n): NodePostgresPoolClientConnection;\nexport function nodePostgresConnection(\n options: NodePostgresClientOptions,\n): NodePostgresClientConnection;\nexport function nodePostgresConnection(\n options: NodePostgresPoolClientOptions | NodePostgresClientOptions,\n): NodePostgresPoolClientConnection | NodePostgresClientConnection {\n return options.type === 'Client'\n ? nodePostgresClientConnection(options)\n : nodePostgresPoolClientConnection(options);\n}\n\nexport type ConnectionCheckResult =\n | { successful: true }\n | {\n successful: false;\n code: string | undefined;\n errorType: 'ConnectionRefused' | 'Authentication' | 'Unknown';\n error: unknown;\n };\n\nexport const checkConnection = async (\n connectionString: string,\n): Promise<ConnectionCheckResult> => {\n const client = new pg.Client({\n connectionString,\n });\n\n try {\n await client.connect();\n return { successful: true };\n } catch (error) {\n const code =\n error instanceof Error &&\n 'code' in error &&\n typeof error.code === 'string'\n ? error.code\n : undefined;\n\n return {\n successful: false,\n errorType:\n code === 'ECONNREFUSED'\n ? 'ConnectionRefused'\n : code === '28P01'\n ? 'Authentication'\n : 'Unknown',\n code,\n error,\n };\n } finally {\n // Ensure the client is closed properly if connected\n await client.end();\n }\n};\n","import pg from 'pg';\nimport {\n tracer,\n type DbSQLExecutor,\n type QueryResult,\n type QueryResultRow,\n type SQL,\n type SQLCommandOptions,\n type SQLQueryOptions,\n} from '../../../../core';\nimport { pgFormatter } from '../../core';\nimport {\n NodePostgresDriverType,\n type NodePostgresClientOrPoolClient,\n} from '../connections';\n\nexport const isNodePostgresNativePool = (\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n): poolOrClient is pg.Pool => {\n return poolOrClient instanceof pg.Pool;\n};\n\nexport const isNodePostgresClient = (\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n): poolOrClient is pg.Client => poolOrClient instanceof pg.Client;\n\nexport const isNodePostgresPoolClient = (\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n): poolOrClient is pg.PoolClient =>\n 'release' in poolOrClient && typeof poolOrClient.release === 'function';\n\nexport const nodePostgresExecute = async <Result = void>(\n poolOrClient: pg.Pool | pg.PoolClient | pg.Client,\n handle: (client: pg.PoolClient | pg.Client) => Promise<Result>,\n) => {\n const client = isNodePostgresNativePool(poolOrClient)\n ? await poolOrClient.connect()\n : poolOrClient;\n\n try {\n return await handle(client);\n } finally {\n // release only if client wasn't injected externally\n if (\n isNodePostgresNativePool(poolOrClient) &&\n isNodePostgresPoolClient(client)\n )\n client.release();\n }\n};\n\nexport type NodePostgresSQLExecutor = DbSQLExecutor<\n NodePostgresDriverType,\n NodePostgresClientOrPoolClient\n>;\n\nexport const nodePostgresSQLExecutor = (): NodePostgresSQLExecutor => ({\n driverType: NodePostgresDriverType,\n query: batch,\n batchQuery: batch,\n command: batch,\n batchCommand: batch,\n formatter: pgFormatter,\n});\n\nfunction batch<Result extends QueryResultRow = QueryResultRow>(\n client: NodePostgresClientOrPoolClient,\n sqlOrSqls: SQL,\n options?: SQLQueryOptions | SQLCommandOptions,\n): Promise<QueryResult<Result>>;\nfunction batch<Result extends QueryResultRow = QueryResultRow>(\n client: NodePostgresClientOrPoolClient,\n sqlOrSqls: SQL[],\n options?: SQLQueryOptions | SQLCommandOptions,\n): Promise<QueryResult<Result>[]>;\nasync function batch<Result extends QueryResultRow = QueryResultRow>(\n client: NodePostgresClientOrPoolClient,\n sqlOrSqls: SQL | SQL[],\n options?: SQLQueryOptions | SQLCommandOptions,\n): Promise<QueryResult<Result> | QueryResult<Result>[]> {\n const sqls = Array.isArray(sqlOrSqls) ? sqlOrSqls : [sqlOrSqls];\n const results: QueryResult<Result>[] = Array<QueryResult<Result>>(\n sqls.length,\n );\n\n if (options?.timeoutMs) {\n await client.query(`SET statement_timeout = ${options?.timeoutMs}`);\n }\n\n //TODO: make it smarter at some point\n for (let i = 0; i < sqls.length; i++) {\n const { query, params } = pgFormatter.format(sqls[i]!);\n tracer.info('db:sql:query', {\n query,\n params,\n debugSQL: pgFormatter.describe(sqls[i]!),\n });\n const result = await client.query<Result>(query, params);\n results[i] = { rowCount: result.rowCount, rows: result.rows };\n }\n return Array.isArray(sqlOrSqls) ? results : results[0]!;\n}\n","import {\n sqlExecutor,\n type AnyConnection,\n type DatabaseTransaction,\n type DatabaseTransactionOptions,\n} from '../../../../core';\nimport { nodePostgresSQLExecutor } from '../execute';\nimport {\n NodePostgresDriverType,\n type NodePostgresConnection,\n type NodePostgresPoolOrClient,\n} from './connection';\n\nexport type NodePostgresTransaction =\n DatabaseTransaction<NodePostgresConnection>;\n\nexport const nodePostgresTransaction =\n <ConnectionType extends AnyConnection = AnyConnection>(\n connection: () => ConnectionType,\n ) =>\n <DbClient extends NodePostgresPoolOrClient = NodePostgresPoolOrClient>(\n getClient: Promise<DbClient>,\n options?: {\n close: (client: DbClient, error?: unknown) => Promise<void>;\n } & DatabaseTransactionOptions,\n ): DatabaseTransaction<ConnectionType> => ({\n connection: connection(),\n driverType: NodePostgresDriverType,\n begin: async () => {\n const client = await getClient;\n await client.query('BEGIN');\n },\n commit: async () => {\n const client = await getClient;\n\n try {\n await client.query('COMMIT');\n } finally {\n if (options?.close) await options?.close(client);\n }\n },\n rollback: async (error?: unknown) => {\n const client = await getClient;\n try {\n await client.query('ROLLBACK');\n } finally {\n if (options?.close) await options?.close(client, error);\n }\n },\n execute: sqlExecutor(nodePostgresSQLExecutor(), {\n connect: () => getClient,\n }),\n });\n","import pg from 'pg';\nimport {\n createAmbientConnectionPool,\n createConnectionPool,\n JSONSerializer,\n tracer,\n type ConnectionPool,\n} from '../../../../core';\nimport {\n defaultPostgreSqlDatabase,\n getDatabaseNameOrDefault,\n} from '../../core';\nimport { setNodePostgresTypeParser } from '../serialization';\nimport {\n nodePostgresConnection,\n NodePostgresDriverType,\n type NodePostgresClientConnection,\n type NodePostgresPoolClientConnection,\n} from './connection';\n\nexport type NodePostgresNativePool =\n ConnectionPool<NodePostgresPoolClientConnection>;\n\nexport type NodePostgresAmbientClientPool =\n ConnectionPool<NodePostgresClientConnection>;\n\nexport type NodePostgresAmbientConnectionPool = ConnectionPool<\n NodePostgresPoolClientConnection | NodePostgresClientConnection\n>;\n\nexport type NodePostgresPool =\n | NodePostgresNativePool\n | NodePostgresAmbientClientPool\n | NodePostgresAmbientConnectionPool;\n\nexport const nodePostgresNativePool = (options: {\n connectionString: string;\n database?: string | undefined;\n}): NodePostgresNativePool => {\n const { connectionString, database } = options;\n const pool = getPool({ connectionString, database });\n\n const getConnection = () =>\n nodePostgresConnection({\n type: 'PoolClient',\n connect: () => pool.connect(),\n close: (client) => Promise.resolve(client.release()),\n });\n\n const open = () => Promise.resolve(getConnection());\n const close = () => endPool({ connectionString, database });\n\n return createConnectionPool({\n driverType: NodePostgresDriverType,\n connection: open,\n close,\n getConnection,\n });\n};\n\nexport const nodePostgresAmbientNativePool = (options: {\n pool: pg.Pool;\n}): NodePostgresNativePool => {\n const { pool } = options;\n\n return createConnectionPool({\n driverType: NodePostgresDriverType,\n getConnection: () =>\n nodePostgresConnection({\n type: 'PoolClient',\n connect: () => pool.connect(),\n close: (client) => Promise.resolve(client.release()),\n }),\n });\n};\n\nexport const nodePostgresAmbientConnectionPool = (options: {\n connection: NodePostgresPoolClientConnection | NodePostgresClientConnection;\n}): NodePostgresAmbientConnectionPool => {\n const { connection } = options;\n\n return createAmbientConnectionPool({\n driverType: NodePostgresDriverType,\n connection,\n });\n};\n\nexport const nodePostgresClientPool = (options: {\n connectionString: string;\n database?: string | undefined;\n}): NodePostgresAmbientClientPool => {\n const { connectionString, database } = options;\n\n return createConnectionPool({\n driverType: NodePostgresDriverType,\n getConnection: () => {\n const connect = async () => {\n const client = new pg.Client({ connectionString, database });\n await client.connect();\n return client;\n };\n\n return nodePostgresConnection({\n type: 'Client',\n connect,\n close: (client) => client.end(),\n });\n },\n });\n};\n\nexport const nodePostgresAmbientClientPool = (options: {\n client: pg.Client;\n}): NodePostgresAmbientClientPool => {\n const { client } = options;\n\n const getConnection = () => {\n const connect = () => Promise.resolve(client);\n\n return nodePostgresConnection({\n type: 'Client',\n connect,\n close: () => Promise.resolve(),\n });\n };\n\n const open = () => Promise.resolve(getConnection());\n const close = () => Promise.resolve();\n\n return createConnectionPool({\n driverType: NodePostgresDriverType,\n connection: open,\n close,\n getConnection,\n });\n};\n\nexport type NodePostgresPoolPooledOptions =\n | {\n connectionString: string;\n database?: string;\n pooled: true;\n pool: pg.Pool;\n }\n | {\n connectionString: string;\n database?: string;\n pool: pg.Pool;\n }\n | {\n connectionString: string;\n database?: string;\n pooled: true;\n }\n | {\n connectionString: string;\n database?: string;\n };\n\nexport type NodePostgresPoolNotPooledOptions =\n | {\n connectionString: string;\n database?: string;\n pooled: false;\n client: pg.Client;\n }\n | {\n connectionString: string;\n database?: string;\n client: pg.Client;\n }\n | {\n connectionString: string;\n database?: string;\n pooled: false;\n }\n | {\n connectionString: string;\n database?: string;\n connection:\n | NodePostgresPoolClientConnection\n | NodePostgresClientConnection;\n pooled?: false;\n };\n\nexport type NodePostgresPoolOptions = (\n | NodePostgresPoolPooledOptions\n | NodePostgresPoolNotPooledOptions\n) & {\n serializer?: JSONSerializer;\n};\n\nexport function nodePostgresPool(\n options: NodePostgresPoolPooledOptions,\n): NodePostgresNativePool;\nexport function nodePostgresPool(\n options: NodePostgresPoolNotPooledOptions,\n): NodePostgresAmbientClientPool;\nexport function nodePostgresPool(\n options: NodePostgresPoolOptions,\n):\n | NodePostgresNativePool\n | NodePostgresAmbientClientPool\n | NodePostgresAmbientConnectionPool {\n const { connectionString, database, serializer } = options;\n\n setNodePostgresTypeParser(serializer ?? JSONSerializer);\n\n if ('client' in options && options.client)\n return nodePostgresAmbientClientPool({ client: options.client });\n\n if ('connection' in options && options.connection)\n return nodePostgresAmbientConnectionPool({\n connection: options.connection,\n });\n\n if ('pooled' in options && options.pooled === false)\n return nodePostgresClientPool({ connectionString, database });\n\n if ('pool' in options && options.pool)\n return nodePostgresAmbientNativePool({ pool: options.pool });\n\n return nodePostgresNativePool({\n connectionString,\n database,\n });\n}\n\nconst pools: Map<string, pg.Pool> = new Map();\nconst usageCounter: Map<string, number> = new Map();\n\nexport const getPool = (\n connectionStringOrOptions: string | pg.PoolConfig,\n): pg.Pool => {\n const connectionString =\n typeof connectionStringOrOptions === 'string'\n ? connectionStringOrOptions\n : connectionStringOrOptions.connectionString!;\n\n const poolOptions =\n typeof connectionStringOrOptions === 'string'\n ? { connectionString }\n : connectionStringOrOptions;\n\n const database =\n poolOptions.database ??\n (poolOptions.connectionString\n ? getDatabaseNameOrDefault(poolOptions.connectionString)\n : undefined);\n\n const lookupKey = key(connectionString, database);\n\n updatePoolUsageCounter(lookupKey, 1);\n\n return (\n pools.get(lookupKey) ??\n pools.set(lookupKey, new pg.Pool(poolOptions)).get(lookupKey)!\n );\n};\n\nexport const endPool = async ({\n connectionString,\n database,\n force,\n}: {\n connectionString: string;\n database?: string | undefined;\n force?: boolean;\n}): Promise<void> => {\n database = database ?? getDatabaseNameOrDefault(connectionString);\n const lookupKey = key(connectionString, database);\n\n const pool = pools.get(lookupKey);\n if (pool && (updatePoolUsageCounter(lookupKey, -1) <= 0 || force === true)) {\n await onEndPool(lookupKey, pool);\n }\n};\n\nexport const onEndPool = async (lookupKey: string, pool: pg.Pool) => {\n try {\n await pool.end();\n } catch (error) {\n tracer.error('connection-closing-error', { lookupKey, error });\n }\n pools.delete(lookupKey);\n};\n\nexport const endAllPools = () =>\n Promise.all(\n [...pools.entries()].map(([lookupKey, pool]) => onEndPool(lookupKey, pool)),\n );\n\nconst key = (connectionString: string, database: string | undefined) =>\n `${connectionString}|${database ?? defaultPostgreSqlDatabase}`;\n\nconst updatePoolUsageCounter = (lookupKey: string, by: 1 | -1): number => {\n const currentCounter = usageCounter.get(lookupKey) ?? 0;\n const newCounter = currentCounter + by;\n\n usageCounter.set(lookupKey, currentCounter + by);\n\n return newCounter;\n};\n","import pg from 'pg';\nimport { JSONSerializer } from '../../../../core/serializer';\n\nexport const setNodePostgresTypeParser = (jsonSerializer: JSONSerializer) => {\n // BigInt\n pg.types.setTypeParser(20, (val) => BigInt(val));\n\n // JSONB\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n pg.types.setTypeParser(3802, (val) => jsonSerializer.deserialize(val));\n\n // JSON\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n pg.types.setTypeParser(114, (val) => jsonSerializer.deserialize(val));\n};\n","import {\n canHandleDriverWithConnectionString,\n type DumboDatabaseDriver,\n dumboDatabaseDriverRegistry,\n} from '../../../core';\nimport {\n DefaultPostgreSQLMigratorOptions,\n getDatabaseNameOrDefault,\n pgFormatter,\n PostgreSQLConnectionString,\n} from '../core';\nimport {\n type NodePostgresConnection,\n NodePostgresDriverType,\n type NodePostgresPool,\n nodePostgresPool,\n type NodePostgresPoolOptions,\n} from './connections';\n\nconst tryParseConnectionString = (connectionString: string) => {\n try {\n return PostgreSQLConnectionString(connectionString);\n } catch {\n return null;\n }\n};\n\nexport const pgDatabaseDriver: DumboDatabaseDriver<\n NodePostgresConnection,\n NodePostgresPoolOptions\n> = {\n driverType: NodePostgresDriverType,\n createPool: (options) => nodePostgresPool(options as NodePostgresPoolOptions),\n sqlFormatter: pgFormatter,\n defaultMigratorOptions: DefaultPostgreSQLMigratorOptions,\n getDatabaseNameOrDefault,\n canHandle: canHandleDriverWithConnectionString(\n NodePostgresDriverType,\n tryParseConnectionString,\n ),\n};\n\nexport const usePgDatabaseDriver = () => {\n dumboDatabaseDriverRegistry.register(\n NodePostgresDriverType,\n pgDatabaseDriver,\n );\n};\n\nusePgDatabaseDriver();\n\nexport * from './connections';\nexport * from './execute';\nexport * from './serialization';\n\nexport { pgDatabaseDriver as databaseDriver };\n\n// TODO: Remove stuff below\n\nexport type PostgresDriverType = NodePostgresDriverType;\nexport type PostgresPool = NodePostgresPool;\nexport type PostgresConnection = NodePostgresConnection;\n\nexport type PostgresPoolOptions = NodePostgresPoolOptions;\nexport const postgresPool = nodePostgresPool;\n\nexport const connectionPool = postgresPool;\n"],"mappings":"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","names":["advisoryLock","pg","pg","pg","pg","pg","pg"]}
|