@event-driven-io/dumbo 0.13.0-alpha.5 → 0.13.0-beta.1

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.
Files changed (139) hide show
  1. package/dist/chunk-3BQOVKJW.js +515 -0
  2. package/dist/chunk-3BQOVKJW.js.map +1 -0
  3. package/dist/chunk-IW4T2VXT.cjs +1849 -0
  4. package/dist/chunk-IW4T2VXT.cjs.map +1 -0
  5. package/dist/chunk-MTXDN72D.cjs +515 -0
  6. package/dist/chunk-MTXDN72D.cjs.map +1 -0
  7. package/dist/chunk-ROEYA6V2.js +54 -0
  8. package/dist/chunk-ROEYA6V2.js.map +1 -0
  9. package/dist/chunk-S4U5T4ST.js +1849 -0
  10. package/dist/chunk-S4U5T4ST.js.map +1 -0
  11. package/dist/chunk-T67D5YF2.cjs +54 -0
  12. package/dist/chunk-T67D5YF2.cjs.map +1 -0
  13. package/dist/{chunk-O5ZG43PV.js → chunk-XAQMA4NT.js} +408 -197
  14. package/dist/chunk-XAQMA4NT.js.map +1 -0
  15. package/dist/{chunk-7ZZO3IAD.cjs → chunk-XRFKAL7J.cjs} +397 -186
  16. package/dist/chunk-XRFKAL7J.cjs.map +1 -0
  17. package/dist/columnProcessors-B62dbdIQ.d.ts +8 -0
  18. package/dist/columnProcessors-Dw-xZeku.d.cts +8 -0
  19. package/dist/index-C_ugrs0F.d.cts +1203 -0
  20. package/dist/index-C_ugrs0F.d.ts +1203 -0
  21. package/dist/index.cjs +120 -3
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +67 -9
  24. package/dist/index.d.ts +67 -9
  25. package/dist/index.js +159 -42
  26. package/dist/{pg-IWI4MRUT.js → pg-J3627PVI.js} +12 -10
  27. package/dist/pg-MDJJNB7H.cjs +59 -0
  28. package/dist/pg-MDJJNB7H.cjs.map +1 -0
  29. package/dist/pg.cjs +8 -4
  30. package/dist/pg.cjs.map +1 -1
  31. package/dist/pg.d.cts +30 -38
  32. package/dist/pg.d.ts +30 -38
  33. package/dist/pg.js +19 -15
  34. package/dist/sqlite3-AFB37G5H.cjs +23 -0
  35. package/dist/sqlite3-AFB37G5H.cjs.map +1 -0
  36. package/dist/sqlite3-LC4MJCWZ.js +23 -0
  37. package/dist/sqlite3.cjs +14 -11
  38. package/dist/sqlite3.cjs.map +1 -1
  39. package/dist/sqlite3.d.cts +212 -56
  40. package/dist/sqlite3.d.ts +212 -56
  41. package/dist/sqlite3.js +35 -32
  42. package/package.json +18 -11
  43. package/dist/chunk-2FKOO7MT.js +0 -1
  44. package/dist/chunk-3AZXA4Q4.cjs +0 -1
  45. package/dist/chunk-3AZXA4Q4.cjs.map +0 -1
  46. package/dist/chunk-3RMN54I3.cjs +0 -190
  47. package/dist/chunk-3RMN54I3.cjs.map +0 -1
  48. package/dist/chunk-7ZZO3IAD.cjs.map +0 -1
  49. package/dist/chunk-A2FKRF4E.js +0 -14
  50. package/dist/chunk-A2FKRF4E.js.map +0 -1
  51. package/dist/chunk-ATRFFM57.cjs +0 -34
  52. package/dist/chunk-ATRFFM57.cjs.map +0 -1
  53. package/dist/chunk-G3C26PYZ.js +0 -34
  54. package/dist/chunk-G3C26PYZ.js.map +0 -1
  55. package/dist/chunk-GEX6FQFW.js +0 -190
  56. package/dist/chunk-GEX6FQFW.js.map +0 -1
  57. package/dist/chunk-IYTH6I5I.js +0 -40
  58. package/dist/chunk-IYTH6I5I.js.map +0 -1
  59. package/dist/chunk-J27XZGSP.cjs +0 -13
  60. package/dist/chunk-J27XZGSP.cjs.map +0 -1
  61. package/dist/chunk-K2G3BMTG.cjs +0 -1184
  62. package/dist/chunk-K2G3BMTG.cjs.map +0 -1
  63. package/dist/chunk-LKLJL6B2.cjs +0 -1
  64. package/dist/chunk-LKLJL6B2.cjs.map +0 -1
  65. package/dist/chunk-LRWUOLA2.js +0 -1184
  66. package/dist/chunk-LRWUOLA2.js.map +0 -1
  67. package/dist/chunk-NL57Z6IH.js +0 -13
  68. package/dist/chunk-NL57Z6IH.js.map +0 -1
  69. package/dist/chunk-O5ZG43PV.js.map +0 -1
  70. package/dist/chunk-QJWA33P7.cjs +0 -111
  71. package/dist/chunk-QJWA33P7.cjs.map +0 -1
  72. package/dist/chunk-QKQ47GQZ.js +0 -10
  73. package/dist/chunk-RPZBEB6F.cjs +0 -14
  74. package/dist/chunk-RPZBEB6F.cjs.map +0 -1
  75. package/dist/chunk-RRB27MT3.cjs +0 -40
  76. package/dist/chunk-RRB27MT3.cjs.map +0 -1
  77. package/dist/chunk-SYFQT5SJ.js +0 -1
  78. package/dist/chunk-SYFQT5SJ.js.map +0 -1
  79. package/dist/chunk-V4GGCPLT.js +0 -111
  80. package/dist/chunk-V4GGCPLT.js.map +0 -1
  81. package/dist/chunk-WMF2ZDRE.cjs +0 -10
  82. package/dist/chunk-WMF2ZDRE.cjs.map +0 -1
  83. package/dist/connection-AI7GCHZJ.js +0 -18
  84. package/dist/connection-AI7GCHZJ.js.map +0 -1
  85. package/dist/connection-M2UAYTUI.cjs +0 -18
  86. package/dist/connection-M2UAYTUI.cjs.map +0 -1
  87. package/dist/connection.int.generic.spec-KHUCYS4W.cjs +0 -277
  88. package/dist/connection.int.generic.spec-KHUCYS4W.cjs.map +0 -1
  89. package/dist/connection.int.generic.spec-KYM4ACJJ.js +0 -277
  90. package/dist/connection.int.generic.spec-KYM4ACJJ.js.map +0 -1
  91. package/dist/connection.int.spec-JEL6QHB2.cjs +0 -285
  92. package/dist/connection.int.spec-JEL6QHB2.cjs.map +0 -1
  93. package/dist/connection.int.spec-VUKHMTJB.js +0 -285
  94. package/dist/connection.int.spec-VUKHMTJB.js.map +0 -1
  95. package/dist/connectionString-IS6F7U5M.js +0 -8
  96. package/dist/connectionString-IS6F7U5M.js.map +0 -1
  97. package/dist/connectionString-JCL4QM7Z.cjs +0 -8
  98. package/dist/connectionString-JCL4QM7Z.cjs.map +0 -1
  99. package/dist/connections-HGTY552D.js +0 -19
  100. package/dist/connections-HGTY552D.js.map +0 -1
  101. package/dist/connections-KK3M7FA5.js +0 -24
  102. package/dist/connections-KK3M7FA5.js.map +0 -1
  103. package/dist/connections-M7LEQW4O.cjs +0 -24
  104. package/dist/connections-M7LEQW4O.cjs.map +0 -1
  105. package/dist/connections-Q7EHYJLS.cjs +0 -19
  106. package/dist/connections-Q7EHYJLS.cjs.map +0 -1
  107. package/dist/core-67PTN6PC.cjs +0 -46
  108. package/dist/core-67PTN6PC.cjs.map +0 -1
  109. package/dist/core-L2XNAMGY.js +0 -46
  110. package/dist/core-L2XNAMGY.js.map +0 -1
  111. package/dist/execute-ABZ77QEM.js +0 -12
  112. package/dist/execute-ABZ77QEM.js.map +0 -1
  113. package/dist/execute-GXX7XH4T.cjs +0 -12
  114. package/dist/execute-GXX7XH4T.cjs.map +0 -1
  115. package/dist/execute-KGIVHKMH.js +0 -11
  116. package/dist/execute-KGIVHKMH.js.map +0 -1
  117. package/dist/execute-RNSO52W4.cjs +0 -11
  118. package/dist/execute-RNSO52W4.cjs.map +0 -1
  119. package/dist/index-CV3Dn2nD.d.cts +0 -231
  120. package/dist/index-CV3Dn2nD.d.ts +0 -231
  121. package/dist/pg-IWI4MRUT.js.map +0 -1
  122. package/dist/pg-XZWOWYQM.cjs +0 -57
  123. package/dist/pg-XZWOWYQM.cjs.map +0 -1
  124. package/dist/pool-KWU7CG73.cjs +0 -21
  125. package/dist/pool-KWU7CG73.cjs.map +0 -1
  126. package/dist/pool-SZAACP5O.js +0 -21
  127. package/dist/pool-SZAACP5O.js.map +0 -1
  128. package/dist/schemaComponent-Bw5hapU8.d.ts +0 -64
  129. package/dist/schemaComponent-Dpy1MXfU.d.cts +0 -64
  130. package/dist/sqlite3-4KGF2EIJ.js +0 -26
  131. package/dist/sqlite3-4KGF2EIJ.js.map +0 -1
  132. package/dist/sqlite3-C73GFIPY.cjs +0 -26
  133. package/dist/sqlite3-C73GFIPY.cjs.map +0 -1
  134. package/dist/transactions-5EVW45HM.js +0 -11
  135. package/dist/transactions-5EVW45HM.js.map +0 -1
  136. package/dist/transactions-NZDA3VGX.cjs +0 -11
  137. package/dist/transactions-NZDA3VGX.cjs.map +0 -1
  138. /package/dist/{chunk-2FKOO7MT.js.map → pg-J3627PVI.js.map} +0 -0
  139. /package/dist/{chunk-QKQ47GQZ.js.map → sqlite3-LC4MJCWZ.js.map} +0 -0
@@ -0,0 +1,515 @@
1
+ import {
2
+ SQL,
3
+ SQLFormatter,
4
+ SQLProcessorsRegistry,
5
+ createConnection,
6
+ createConnectionPool,
7
+ defaultProcessorsRegistry,
8
+ dumboDatabaseDriverRegistry,
9
+ exists,
10
+ mapDefaultSQLColumnProcessors,
11
+ mapSQLQueryResult,
12
+ registerDefaultMigratorOptions,
13
+ registerFormatter,
14
+ sqlExecutor,
15
+ tracer
16
+ } from "./chunk-S4U5T4ST.js";
17
+
18
+ // src/storage/sqlite/sqlite3/connections/connection.ts
19
+ import sqlite3 from "sqlite3";
20
+
21
+ // src/storage/sqlite/core/sql/processors/columProcessors.ts
22
+ var mapColumnType = (token, { builder }) => {
23
+ let columnSQL;
24
+ const { sqlTokenType } = token;
25
+ switch (sqlTokenType) {
26
+ case "SQL_COLUMN_AUTO_INCREMENT":
27
+ columnSQL = `INTEGER ${token.primaryKey ? "PRIMARY KEY" : ""} AUTOINCREMENT`;
28
+ break;
29
+ case "SQL_COLUMN_BIGINT":
30
+ columnSQL = "INTEGER";
31
+ break;
32
+ case "SQL_COLUMN_SERIAL":
33
+ columnSQL = "INTEGER";
34
+ break;
35
+ case "SQL_COLUMN_INTEGER":
36
+ columnSQL = "INTEGER";
37
+ break;
38
+ case "SQL_COLUMN_JSONB":
39
+ columnSQL = "BLOB";
40
+ break;
41
+ case "SQL_COLUMN_BIGSERIAL":
42
+ columnSQL = "INTEGER";
43
+ break;
44
+ case "SQL_COLUMN_TIMESTAMP":
45
+ columnSQL = "DATETIME";
46
+ break;
47
+ case "SQL_COLUMN_TIMESTAMPTZ":
48
+ columnSQL = "DATETIME";
49
+ break;
50
+ case "SQL_COLUMN_VARCHAR":
51
+ columnSQL = `VARCHAR ${Number.isNaN(token.length) ? "" : `(${token.length})`}`;
52
+ break;
53
+ default: {
54
+ const exhaustiveCheck = sqlTokenType;
55
+ throw new Error(`Unknown column type: ${exhaustiveCheck}`);
56
+ }
57
+ }
58
+ builder.addSQL(columnSQL);
59
+ };
60
+ var sqliteColumnProcessors = mapDefaultSQLColumnProcessors(mapColumnType);
61
+
62
+ // src/storage/sqlite/core/sql/formatter/index.ts
63
+ var sqliteSQLProcessorsRegistry = SQLProcessorsRegistry({
64
+ from: defaultProcessorsRegistry
65
+ }).register(sqliteColumnProcessors);
66
+ var sqliteFormatter = SQLFormatter({
67
+ processorsRegistry: sqliteSQLProcessorsRegistry
68
+ });
69
+ registerFormatter("SQLite", sqliteFormatter);
70
+
71
+ // src/storage/sqlite/core/execute/execute.ts
72
+ var sqliteExecute = async (database, handle) => {
73
+ try {
74
+ return await handle(database);
75
+ } finally {
76
+ await database.close();
77
+ }
78
+ };
79
+ var sqliteSQLExecutor = (driverType, formatter) => ({
80
+ driverType,
81
+ query: batch,
82
+ batchQuery: batch,
83
+ command: batch,
84
+ batchCommand: batch,
85
+ formatter: formatter ?? sqliteFormatter
86
+ });
87
+ async function batch(client, sqlOrSqls, options) {
88
+ const sqls = Array.isArray(sqlOrSqls) ? sqlOrSqls : [sqlOrSqls];
89
+ const results = Array(
90
+ sqls.length
91
+ );
92
+ if (options?.timeoutMs) {
93
+ await client.query(`PRAGMA busy_timeout = ${options?.timeoutMs}`);
94
+ }
95
+ for (let i = 0; i < sqls.length; i++) {
96
+ const { query, params } = sqliteFormatter.format(sqls[i]);
97
+ tracer.info("db:sql:query", {
98
+ query,
99
+ params,
100
+ debugSQL: sqliteFormatter.describe(sqls[i])
101
+ });
102
+ let result = await client.query(query, params);
103
+ if (options?.mapping) {
104
+ result = result.map((row) => mapSQLQueryResult(row, options.mapping));
105
+ }
106
+ results[i] = { rowCount: result.length, rows: result };
107
+ }
108
+ return Array.isArray(sqlOrSqls) ? results : results[0];
109
+ }
110
+
111
+ // src/storage/sqlite/core/pool/pool.ts
112
+ var sqliteAmbientConnectionPool = (options) => {
113
+ const { connection, driverType } = options;
114
+ return createConnectionPool({
115
+ driverType,
116
+ getConnection: () => connection,
117
+ execute: connection.execute,
118
+ transaction: () => connection.transaction(),
119
+ withTransaction: (handle) => connection.withTransaction(handle)
120
+ });
121
+ };
122
+ var sqliteSingletonClientPool = (options) => {
123
+ const { driverType, sqliteClient } = options;
124
+ let connection = void 0;
125
+ const getConnection = () => {
126
+ if (connection) return connection;
127
+ const connect = async () => {
128
+ const client = sqliteClient(options);
129
+ await client.connect();
130
+ return client;
131
+ };
132
+ return connection = sqliteConnection({
133
+ driverType,
134
+ type: "Client",
135
+ connect,
136
+ allowNestedTransactions: options.allowNestedTransactions ?? false,
137
+ close: () => Promise.resolve()
138
+ });
139
+ };
140
+ const open = () => Promise.resolve(getConnection());
141
+ const close = async () => {
142
+ if (connection !== void 0) await connection.close();
143
+ };
144
+ return createConnectionPool({
145
+ driverType,
146
+ connection: open,
147
+ close,
148
+ getConnection
149
+ });
150
+ };
151
+ var sqliteAlwaysNewClientPool = (options) => {
152
+ const { driverType, allowNestedTransactions, sqliteClient } = options;
153
+ return createConnectionPool({
154
+ driverType,
155
+ getConnection: () => {
156
+ const connect = async () => {
157
+ const client = sqliteClient(options);
158
+ await client.connect();
159
+ return client;
160
+ };
161
+ return sqliteConnection({
162
+ driverType,
163
+ type: "Client",
164
+ connect,
165
+ allowNestedTransactions: allowNestedTransactions ?? false,
166
+ close: (client) => client.close()
167
+ });
168
+ }
169
+ });
170
+ };
171
+ var sqliteAmbientClientPool = (options) => {
172
+ const { client, driverType, allowNestedTransactions } = options;
173
+ const getConnection = () => {
174
+ const connect = () => Promise.resolve(client);
175
+ return sqliteConnection({
176
+ driverType,
177
+ type: "Client",
178
+ connect,
179
+ allowNestedTransactions,
180
+ close: () => Promise.resolve()
181
+ });
182
+ };
183
+ const open = () => Promise.resolve(getConnection());
184
+ const close = () => Promise.resolve();
185
+ return createConnectionPool({
186
+ driverType,
187
+ connection: open,
188
+ close,
189
+ getConnection
190
+ });
191
+ };
192
+ function sqlitePool(options) {
193
+ const { driverType } = options;
194
+ if ("client" in options && options.client)
195
+ return sqliteAmbientClientPool({
196
+ driverType,
197
+ client: options.client,
198
+ allowNestedTransactions: options.allowNestedTransactions ?? false
199
+ });
200
+ if ("connection" in options && options.connection)
201
+ return sqliteAmbientConnectionPool({
202
+ driverType,
203
+ connection: options.connection
204
+ });
205
+ if (options.singleton === true || options.fileName === InMemorySQLiteDatabase || options.connectionString === InMemorySQLiteDatabase)
206
+ return sqliteSingletonClientPool(options);
207
+ return sqliteAlwaysNewClientPool(options);
208
+ }
209
+
210
+ // src/storage/sqlite/core/schema/migrations.ts
211
+ var DefaultSQLiteMigratorOptions = {};
212
+ registerDefaultMigratorOptions("SQLite", DefaultSQLiteMigratorOptions);
213
+
214
+ // src/storage/sqlite/core/schema/schema.ts
215
+ var defaultPostgreSqlDatabase = "postgres";
216
+ var tableExistsSQL = (tableName) => SQL`
217
+ SELECT EXISTS (
218
+ SELECT 1
219
+ FROM sqlite_master
220
+ WHERE type = 'table' AND name = ${tableName}
221
+ ) AS "exists"
222
+ `;
223
+ var tableExists = async (pool, tableName) => exists(pool.execute.query(tableExistsSQL(tableName)));
224
+
225
+ // src/storage/sqlite/core/transactions/index.ts
226
+ var sqliteTransaction = (driverType, connection, allowNestedTransactions) => (getClient, options) => {
227
+ const transactionCounter = transactionNestingCounter();
228
+ return {
229
+ connection: connection(),
230
+ driverType,
231
+ begin: async function() {
232
+ const client = await getClient;
233
+ if (allowNestedTransactions) {
234
+ if (transactionCounter.level >= 1) {
235
+ transactionCounter.increment();
236
+ await client.query(
237
+ `SAVEPOINT transaction${transactionCounter.level}`
238
+ );
239
+ return;
240
+ }
241
+ transactionCounter.increment();
242
+ }
243
+ await client.query("BEGIN TRANSACTION");
244
+ },
245
+ commit: async function() {
246
+ const client = await getClient;
247
+ try {
248
+ if (allowNestedTransactions) {
249
+ if (transactionCounter.level > 1) {
250
+ await client.query(
251
+ `RELEASE transaction${transactionCounter.level}`
252
+ );
253
+ transactionCounter.decrement();
254
+ return;
255
+ }
256
+ transactionCounter.reset();
257
+ }
258
+ await client.query("COMMIT");
259
+ } finally {
260
+ if (options?.close) await options?.close(client);
261
+ }
262
+ },
263
+ rollback: async function(error) {
264
+ const client = await getClient;
265
+ try {
266
+ if (allowNestedTransactions) {
267
+ if (transactionCounter.level > 1) {
268
+ transactionCounter.decrement();
269
+ return;
270
+ }
271
+ }
272
+ await client.query("ROLLBACK");
273
+ } finally {
274
+ if (options?.close) await options?.close(client, error);
275
+ }
276
+ },
277
+ execute: sqlExecutor(sqliteSQLExecutor(driverType), {
278
+ connect: () => getClient
279
+ })
280
+ };
281
+ };
282
+
283
+ // src/storage/sqlite/core/index.ts
284
+ var SQLiteDatabaseName = "SQLite";
285
+
286
+ // src/storage/sqlite/core/connections/connectionString.ts
287
+ var SQLiteConnectionString2 = (connectionString) => {
288
+ if (!connectionString.startsWith("file:") && connectionString !== ":memory:" && !connectionString.startsWith("/") && !connectionString.startsWith("./")) {
289
+ throw new Error(
290
+ `Invalid SQLite connection string: ${connectionString}. It should start with "file:", ":memory:", "/", or "./".`
291
+ );
292
+ }
293
+ return connectionString;
294
+ };
295
+
296
+ // src/storage/sqlite/core/connections/index.ts
297
+ var isSQLiteError = (error) => {
298
+ if (error instanceof Error && "code" in error) {
299
+ return true;
300
+ }
301
+ return false;
302
+ };
303
+ var sqliteClientConnection = (options) => {
304
+ const { connect, close, allowNestedTransactions } = options;
305
+ return createConnection({
306
+ driverType: options.driverType,
307
+ connect,
308
+ close,
309
+ initTransaction: (connection) => sqliteTransaction(
310
+ options.driverType,
311
+ connection,
312
+ allowNestedTransactions
313
+ ),
314
+ executor: () => sqliteSQLExecutor(options.driverType)
315
+ });
316
+ };
317
+ var transactionNestingCounter = () => {
318
+ let transactionLevel = 0;
319
+ return {
320
+ reset: () => {
321
+ transactionLevel = 0;
322
+ },
323
+ increment: () => {
324
+ transactionLevel++;
325
+ },
326
+ decrement: () => {
327
+ transactionLevel--;
328
+ if (transactionLevel < 0) {
329
+ throw new Error("Transaction level is out of bounds");
330
+ }
331
+ },
332
+ get level() {
333
+ return transactionLevel;
334
+ }
335
+ };
336
+ };
337
+ var sqlitePoolClientConnection = (options) => {
338
+ const { connect, close, allowNestedTransactions } = options;
339
+ return createConnection({
340
+ driverType: options.driverType,
341
+ connect,
342
+ close,
343
+ initTransaction: (connection) => sqliteTransaction(
344
+ options.driverType,
345
+ connection,
346
+ allowNestedTransactions ?? false
347
+ ),
348
+ executor: () => sqliteSQLExecutor(options.driverType)
349
+ });
350
+ };
351
+ function sqliteConnection(options) {
352
+ return options.type === "Client" ? sqliteClientConnection(options) : sqlitePoolClientConnection(options);
353
+ }
354
+ var InMemorySQLiteDatabase = SQLiteConnectionString2(":memory:");
355
+
356
+ // src/storage/sqlite/sqlite3/connections/connection.ts
357
+ var SQLite3DriverType = "SQLite:sqlite3";
358
+ var sqlite3Client = (options) => {
359
+ let db;
360
+ let isClosed = false;
361
+ const connect = () => db ? Promise.resolve() : new Promise((resolve, reject) => {
362
+ try {
363
+ db = new sqlite3.Database(
364
+ options.fileName ?? options.connectionString ?? InMemorySQLiteDatabase,
365
+ sqlite3.OPEN_URI | sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE,
366
+ (err) => {
367
+ if (err) {
368
+ reject(err);
369
+ return;
370
+ }
371
+ }
372
+ );
373
+ db.run("PRAGMA journal_mode = WAL;", (err) => {
374
+ if (err) {
375
+ reject(err);
376
+ return;
377
+ }
378
+ resolve();
379
+ });
380
+ } catch (error) {
381
+ reject(error);
382
+ }
383
+ });
384
+ return {
385
+ connect,
386
+ close: () => {
387
+ if (isClosed) {
388
+ return Promise.resolve();
389
+ }
390
+ isClosed = true;
391
+ if (db)
392
+ return new Promise((resolve, reject) => {
393
+ db.close((err) => {
394
+ if (err) {
395
+ reject(err);
396
+ return;
397
+ }
398
+ resolve();
399
+ });
400
+ });
401
+ return Promise.resolve();
402
+ },
403
+ command: (sql, params) => new Promise((resolve, reject) => {
404
+ db.run(sql, params ?? [], (err) => {
405
+ if (err) {
406
+ reject(err);
407
+ return;
408
+ }
409
+ resolve();
410
+ });
411
+ }),
412
+ query: (sql, params) => new Promise((resolve, reject) => {
413
+ try {
414
+ db.all(sql, params ?? [], (err, result) => {
415
+ if (err) {
416
+ reject(err);
417
+ return;
418
+ }
419
+ resolve(result);
420
+ });
421
+ } catch (error) {
422
+ reject(error);
423
+ }
424
+ }),
425
+ querySingle: (sql, params) => new Promise((resolve, reject) => {
426
+ db.get(sql, params ?? [], (err, result) => {
427
+ if (err) {
428
+ reject(err);
429
+ return;
430
+ }
431
+ resolve(result);
432
+ });
433
+ })
434
+ };
435
+ };
436
+ var checkConnection = async (fileName) => {
437
+ const client = sqlite3Client({
438
+ fileName
439
+ });
440
+ try {
441
+ await client.querySingle("SELECT 1");
442
+ return { successful: true };
443
+ } catch (error) {
444
+ const code = error instanceof Error && "code" in error && typeof error.code === "string" ? error.code : void 0;
445
+ return {
446
+ successful: false,
447
+ errorType: code === "SQLITE_CANTOPEN" ? "ConnectionRefused" : code === "SQLITE_AUTH" ? "Authentication" : "Unknown",
448
+ code,
449
+ error
450
+ };
451
+ } finally {
452
+ await client.close();
453
+ }
454
+ };
455
+
456
+ // src/storage/sqlite/sqlite3/index.ts
457
+ var sqlite3Pool = (options) => sqlitePool({
458
+ ...options,
459
+ sqliteClient: sqlite3Client
460
+ });
461
+ var sqlite3DatabaseDriver = {
462
+ driverType: "SQLite:sqlite3",
463
+ createPool: (options) => sqlite3Pool(options),
464
+ sqlFormatter: sqliteFormatter,
465
+ defaultMigratorOptions: DefaultSQLiteMigratorOptions,
466
+ getDatabaseNameOrDefault: () => InMemorySQLiteDatabase,
467
+ defaultConnectionString: InMemorySQLiteDatabase,
468
+ tryParseConnectionString: (connectionString) => {
469
+ try {
470
+ return SQLiteConnectionString2(connectionString);
471
+ } catch {
472
+ return null;
473
+ }
474
+ }
475
+ };
476
+ var useSqlite3DatabaseDriver = () => {
477
+ dumboDatabaseDriverRegistry.register(
478
+ SQLite3DriverType,
479
+ sqlite3DatabaseDriver
480
+ );
481
+ };
482
+ useSqlite3DatabaseDriver();
483
+ var connectionPool = sqlitePool;
484
+
485
+ export {
486
+ sqliteFormatter,
487
+ sqliteExecute,
488
+ sqliteSQLExecutor,
489
+ sqliteAmbientConnectionPool,
490
+ sqliteSingletonClientPool,
491
+ sqliteAlwaysNewClientPool,
492
+ sqliteAmbientClientPool,
493
+ sqlitePool,
494
+ DefaultSQLiteMigratorOptions,
495
+ defaultPostgreSqlDatabase,
496
+ tableExistsSQL,
497
+ tableExists,
498
+ sqliteTransaction,
499
+ SQLiteDatabaseName,
500
+ SQLiteConnectionString2 as SQLiteConnectionString,
501
+ isSQLiteError,
502
+ sqliteClientConnection,
503
+ transactionNestingCounter,
504
+ sqlitePoolClientConnection,
505
+ sqliteConnection,
506
+ InMemorySQLiteDatabase,
507
+ SQLite3DriverType,
508
+ sqlite3Client,
509
+ checkConnection,
510
+ sqlite3Pool,
511
+ sqlite3DatabaseDriver,
512
+ useSqlite3DatabaseDriver,
513
+ connectionPool
514
+ };
515
+ //# sourceMappingURL=chunk-3BQOVKJW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/storage/sqlite/sqlite3/connections/connection.ts","../src/storage/sqlite/core/sql/processors/columProcessors.ts","../src/storage/sqlite/core/sql/formatter/index.ts","../src/storage/sqlite/core/execute/execute.ts","../src/storage/sqlite/core/pool/pool.ts","../src/storage/sqlite/core/schema/migrations.ts","../src/storage/sqlite/core/schema/schema.ts","../src/storage/sqlite/core/transactions/index.ts","../src/storage/sqlite/core/index.ts","../src/storage/sqlite/core/connections/connectionString.ts","../src/storage/sqlite/core/connections/index.ts","../src/storage/sqlite/sqlite3/index.ts"],"sourcesContent":["import sqlite3 from 'sqlite3';\nimport type { SQLiteDriverType } from '../../core';\nimport {\n InMemorySQLiteDatabase,\n type Parameters,\n type SQLiteClient,\n type SQLiteClientOptions,\n} from '../../core/connections';\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 const sqlite3Client = (options: SQLiteClientOptions): 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 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 command: (sql: string, params?: Parameters[]) =>\n new Promise((resolve, reject) => {\n db.run(sql, params ?? [], (err: Error | null) => {\n if (err) {\n reject(err);\n return;\n }\n\n resolve();\n });\n }),\n query: <T>(sql: string, params?: Parameters[]): 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 querySingle: <T>(sql: string, params?: Parameters[]): Promise<T | null> =>\n new Promise((resolve, reject) => {\n db.get(sql, params ?? [], (err: Error | null, result: T | null) => {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(result);\n });\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.querySingle('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","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 = `INTEGER ${token.primaryKey ? 'PRIMARY KEY' : ''} AUTOINCREMENT`;\n break;\n case 'SQL_COLUMN_BIGINT':\n columnSQL = 'INTEGER';\n break;\n case 'SQL_COLUMN_SERIAL':\n columnSQL = 'INTEGER';\n break;\n case 'SQL_COLUMN_INTEGER':\n columnSQL = 'INTEGER';\n break;\n case 'SQL_COLUMN_JSONB':\n columnSQL = 'BLOB';\n break;\n case 'SQL_COLUMN_BIGSERIAL':\n columnSQL = 'INTEGER';\n break;\n case 'SQL_COLUMN_TIMESTAMP':\n columnSQL = 'DATETIME';\n break;\n case 'SQL_COLUMN_TIMESTAMPTZ':\n columnSQL = 'DATETIME';\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 sqliteColumnProcessors: DefaultSQLColumnProcessors =\n mapDefaultSQLColumnProcessors(mapColumnType);\n","import {\n defaultProcessorsRegistry,\n registerFormatter,\n SQLFormatter,\n SQLProcessorsRegistry,\n} from '../../../../../core/sql';\nimport { sqliteColumnProcessors } from '../processors';\n\nconst sqliteSQLProcessorsRegistry = SQLProcessorsRegistry({\n from: defaultProcessorsRegistry,\n}).register(sqliteColumnProcessors);\n\nconst sqliteFormatter: SQLFormatter = SQLFormatter({\n processorsRegistry: sqliteSQLProcessorsRegistry,\n});\n\nregisterFormatter('SQLite', sqliteFormatter);\n\nexport { sqliteFormatter };\n","import type { SQLiteDriverType } from '..';\nimport {\n mapSQLQueryResult,\n SQL,\n SQLFormatter,\n tracer,\n type DbSQLExecutor,\n type QueryResult,\n type QueryResultRow,\n type SQLCommandOptions,\n type SQLQueryOptions,\n} from '../../../../core';\nimport type { Parameters, SQLiteClient } from '../connections';\nimport { sqliteFormatter } from '../sql/formatter';\n\nexport const sqliteExecute = async <Result = void>(\n database: SQLiteClient,\n handle: (client: SQLiteClient) => Promise<Result>,\n) => {\n try {\n return await handle(database);\n } finally {\n await database.close();\n }\n};\n\nexport type SQLiteSQLExecutor<\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n> = DbSQLExecutor<DriverType, SQLiteClient>;\n\nexport const sqliteSQLExecutor = <\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n>(\n driverType: DriverType,\n formatter?: SQLFormatter,\n): SQLiteSQLExecutor<DriverType> => ({\n driverType,\n query: batch,\n batchQuery: batch,\n command: batch,\n batchCommand: batch,\n formatter: formatter ?? sqliteFormatter,\n});\n\nfunction batch<Result extends QueryResultRow = QueryResultRow>(\n client: SQLiteClient,\n sqlOrSqls: SQL,\n options?: SQLQueryOptions | SQLCommandOptions,\n): Promise<QueryResult<Result>>;\nfunction batch<Result extends QueryResultRow = QueryResultRow>(\n client: SQLiteClient,\n sqlOrSqls: SQL[],\n options?: SQLQueryOptions | SQLCommandOptions,\n): Promise<QueryResult<Result>[]>;\nasync function batch<Result extends QueryResultRow = QueryResultRow>(\n client: SQLiteClient,\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 // TODO: This is not precisely timeout\n // SQLite's busy_timeout determines how long SQLite will wait\n // when the database is locked before returning\n // a \"database is locked\" error\n await client.query(`PRAGMA busy_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 } = sqliteFormatter.format(sqls[i]!);\n tracer.info('db:sql:query', {\n query,\n params,\n debugSQL: sqliteFormatter.describe(sqls[i]!),\n });\n\n let result = await client.query<Result>(query, params as Parameters[]);\n\n if (options?.mapping) {\n result = result.map((row) => mapSQLQueryResult(row, options.mapping!));\n }\n\n results[i] = { rowCount: result.length, rows: result };\n }\n return Array.isArray(sqlOrSqls) ? results : results[0]!;\n}\n","import {\n InMemorySQLiteDatabase,\n sqliteConnection,\n SQLiteConnectionString,\n type SQLiteClient,\n type SQLiteClientConnection,\n type SQLiteClientFactory,\n type SQLiteDriverType,\n type SQLitePoolClientConnection,\n} from '..';\nimport {\n createConnectionPool,\n JSONSerializer,\n type ConnectionPool,\n} from '../../../../core';\n\nexport type SQLiteAmbientClientPool<\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n> = ConnectionPool<SQLiteClientConnection<DriverType>>;\n\nexport type SQLiteAmbientConnectionPool<\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n> = ConnectionPool<\n SQLitePoolClientConnection<DriverType> | SQLiteClientConnection<DriverType>\n>;\n\nexport type SQLitePool<DriverType extends SQLiteDriverType = SQLiteDriverType> =\n SQLiteAmbientClientPool<DriverType> | SQLiteAmbientConnectionPool<DriverType>;\n\n// TODO: Add connection pool handling\n\nexport const sqliteAmbientConnectionPool = <\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n>(options: {\n driverType: DriverType;\n connection:\n | SQLitePoolClientConnection<DriverType>\n | SQLiteClientConnection<DriverType>;\n}): SQLiteAmbientConnectionPool<DriverType> => {\n const { connection, driverType } = options;\n\n return createConnectionPool({\n driverType,\n getConnection: () => connection,\n execute: connection.execute,\n transaction: () => connection.transaction(),\n withTransaction: (handle) => connection.withTransaction(handle),\n });\n};\n\nexport const sqliteSingletonClientPool = <\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n>(\n options: {\n driverType: DriverType;\n database?: string | undefined;\n allowNestedTransactions?: boolean;\n } & SQLiteFileNameOrConnectionString &\n SQLitePoolConfig,\n): SQLiteAmbientClientPool<DriverType> => {\n const { driverType, sqliteClient } = options;\n let connection: SQLiteClientConnection | undefined = undefined;\n\n const getConnection = () => {\n if (connection) return connection;\n\n const connect = async () => {\n const client = sqliteClient(options);\n\n await client.connect();\n\n return client;\n };\n\n return (connection = sqliteConnection({\n driverType,\n type: 'Client',\n connect,\n allowNestedTransactions: options.allowNestedTransactions ?? false,\n close: () => Promise.resolve(),\n }));\n };\n\n const open = () => Promise.resolve(getConnection());\n const close = async () => {\n if (connection !== undefined) await connection.close();\n };\n\n return createConnectionPool({\n driverType,\n connection: open,\n close,\n getConnection,\n });\n};\n\nexport const sqliteAlwaysNewClientPool = <\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n>(\n options: {\n driverType: DriverType;\n database?: string | undefined;\n allowNestedTransactions?: boolean;\n } & SQLiteFileNameOrConnectionString &\n SQLitePoolConfig,\n): SQLiteAmbientClientPool<DriverType> => {\n const { driverType, allowNestedTransactions, sqliteClient } = options;\n\n return createConnectionPool({\n driverType,\n getConnection: () => {\n const connect = async () => {\n const client = sqliteClient(options);\n\n await client.connect();\n\n return client;\n };\n\n return sqliteConnection({\n driverType,\n type: 'Client',\n connect,\n allowNestedTransactions: allowNestedTransactions ?? false,\n close: (client) => client.close(),\n });\n },\n });\n};\n\nexport const sqliteAmbientClientPool = <\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n>(options: {\n driverType: DriverType;\n client: SQLiteClient;\n allowNestedTransactions: boolean;\n}): SQLiteAmbientClientPool<DriverType> => {\n const { client, driverType, allowNestedTransactions } = options;\n\n const getConnection = () => {\n const connect = () => Promise.resolve(client);\n\n return sqliteConnection({\n driverType,\n type: 'Client',\n connect,\n allowNestedTransactions,\n close: () => Promise.resolve(),\n });\n };\n\n const open = () => Promise.resolve(getConnection());\n const close = () => Promise.resolve();\n\n return createConnectionPool({\n driverType,\n connection: open,\n close,\n getConnection,\n });\n};\n\nexport type SQLiteFileNameOrConnectionString =\n | {\n fileName: string | SQLiteConnectionString;\n connectionString?: never;\n }\n | {\n connectionString: string | SQLiteConnectionString;\n fileName?: never;\n };\n\nexport type SQLitePoolPooledOptions<\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n> = {\n driverType: DriverType;\n pooled?: true;\n singleton?: boolean;\n allowNestedTransactions?: boolean;\n};\n\nexport type SQLitePoolNotPooledOptions<\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n> =\n | {\n driverType: DriverType;\n connection?: never;\n client: SQLiteClient;\n pooled?: false;\n singleton?: true;\n allowNestedTransactions?: boolean;\n }\n | {\n driverType: DriverType;\n connection?: never;\n client?: never;\n pooled?: boolean;\n singleton?: boolean;\n allowNestedTransactions?: boolean;\n }\n | {\n driverType: DriverType;\n connection:\n | SQLitePoolClientConnection<DriverType>\n | SQLiteClientConnection<DriverType>;\n client?: never;\n pooled?: false;\n singleton?: true;\n allowNestedTransactions?: boolean;\n };\n\nexport type SQLiteDumboConnectionOptions<\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n> = (\n | SQLitePoolPooledOptions<DriverType>\n | SQLitePoolNotPooledOptions<DriverType>\n) & {\n serializer?: JSONSerializer;\n} & SQLiteFileNameOrConnectionString;\n\nexport type SQLitePoolConfig = { sqliteClient: SQLiteClientFactory };\n\nexport function sqlitePool<\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n>(\n options: SQLitePoolNotPooledOptions<DriverType> &\n SQLiteFileNameOrConnectionString &\n SQLitePoolConfig,\n): SQLiteAmbientClientPool<DriverType>;\n\nexport function sqlitePool<\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n>(\n options: SQLiteDumboConnectionOptions<DriverType> & SQLitePoolConfig,\n):\n | SQLiteAmbientClientPool<DriverType>\n | SQLiteAmbientConnectionPool<DriverType> {\n const { driverType } = options;\n\n // TODO: Handle dates and bigints\n // setSQLiteTypeParser(serializer ?? JSONSerializer);\n\n if ('client' in options && options.client)\n return sqliteAmbientClientPool({\n driverType,\n client: options.client,\n allowNestedTransactions: options.allowNestedTransactions ?? false,\n });\n\n if ('connection' in options && options.connection)\n return sqliteAmbientConnectionPool({\n driverType,\n connection: options.connection,\n });\n\n if (\n options.singleton === true ||\n options.fileName === InMemorySQLiteDatabase ||\n options.connectionString === InMemorySQLiteDatabase\n )\n return sqliteSingletonClientPool(options);\n\n return sqliteAlwaysNewClientPool(options);\n}\n","import {\n registerDefaultMigratorOptions,\n type MigratorOptions,\n} from '../../../../core';\n\nexport const DefaultSQLiteMigratorOptions: MigratorOptions = {};\n\nregisterDefaultMigratorOptions('SQLite', DefaultSQLiteMigratorOptions);\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 1\n FROM sqlite_master\n WHERE type = 'table' AND name = ${tableName}\n ) AS \"exists\"\n `;\n\nexport const tableExists = async (\n pool: ConnectionPool,\n tableName: string,\n): Promise<boolean> => exists(pool.execute.query(tableExistsSQL(tableName)));\n","import type { SQLiteDriverType } from '..';\nimport {\n sqlExecutor,\n type Connection,\n type DatabaseTransaction,\n} from '../../../../core';\nimport { sqliteSQLExecutor } from '../../core/execute';\nimport {\n transactionNestingCounter,\n type SQLiteClientOrPoolClient,\n} from '../connections';\n\nexport type SQLiteTransaction<\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n> = DatabaseTransaction<DriverType>;\n\nexport const sqliteTransaction =\n <\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n DbClient extends SQLiteClientOrPoolClient = SQLiteClientOrPoolClient,\n >(\n driverType: DriverType,\n connection: () => Connection<DriverType, DbClient>,\n allowNestedTransactions: boolean,\n ) =>\n (\n getClient: Promise<DbClient>,\n options?: { close: (client: DbClient, error?: unknown) => Promise<void> },\n ): DatabaseTransaction<DriverType, DbClient> => {\n const transactionCounter = transactionNestingCounter();\n return {\n connection: connection(),\n driverType,\n begin: async function () {\n const client = await getClient;\n\n if (allowNestedTransactions) {\n if (transactionCounter.level >= 1) {\n transactionCounter.increment();\n await client.query(\n `SAVEPOINT transaction${transactionCounter.level}`,\n );\n return;\n }\n\n transactionCounter.increment();\n }\n\n await client.query('BEGIN TRANSACTION');\n },\n commit: async function () {\n const client = await getClient;\n\n try {\n if (allowNestedTransactions) {\n if (transactionCounter.level > 1) {\n await client.query(\n `RELEASE transaction${transactionCounter.level}`,\n );\n transactionCounter.decrement();\n\n return;\n }\n\n transactionCounter.reset();\n }\n await client.query('COMMIT');\n } finally {\n if (options?.close) await options?.close(client);\n }\n },\n rollback: async function (error?: unknown) {\n const client = await getClient;\n try {\n if (allowNestedTransactions) {\n if (transactionCounter.level > 1) {\n transactionCounter.decrement();\n return;\n }\n }\n\n await client.query('ROLLBACK');\n } finally {\n if (options?.close) await options?.close(client, error);\n }\n },\n execute: sqlExecutor(sqliteSQLExecutor(driverType), {\n connect: () => getClient,\n }),\n };\n };\n","import { type DatabaseDriverType } from '../../..';\n\nexport * from './connections';\nexport * from './execute';\nexport * from './pool';\nexport * from './schema';\nexport * from './sql';\nexport * from './transactions';\n\nexport type SQLiteDatabaseName = 'SQLite';\nexport const SQLiteDatabaseName = 'SQLite';\n\nexport type SQLiteDriverType<DriverName extends string = string> =\n DatabaseDriverType<SQLiteDatabaseName, DriverName>;\n\nexport type SQLiteDatabaseType = 'SQLite';\n","import type { DatabaseConnectionString } from '../../../all';\n\nexport type SQLiteConnectionString = DatabaseConnectionString<\n 'SQLite',\n `file:${string}` | `:memory:` | `/${string}` | `./${string}`\n>;\n\nexport const SQLiteConnectionString = (\n connectionString: string,\n): SQLiteConnectionString => {\n if (\n !connectionString.startsWith('file:') &&\n connectionString !== ':memory:' &&\n !connectionString.startsWith('/') &&\n !connectionString.startsWith('./')\n ) {\n throw new Error(\n `Invalid SQLite connection string: ${connectionString}. It should start with \"file:\", \":memory:\", \"/\", or \"./\".`,\n );\n }\n return connectionString as SQLiteConnectionString;\n};\n","import {\n SQLiteConnectionString,\n sqliteSQLExecutor,\n type SQLiteDriverType,\n type SQLiteFileNameOrConnectionString,\n} from '..';\nimport { createConnection, type Connection } from '../../../../core';\nimport { sqliteTransaction } from '../transactions';\n\nexport type Parameters = object | string | bigint | number | boolean | null;\n\nexport type SQLiteClient = {\n connect: () => Promise<void>;\n close: () => Promise<void>;\n command: (sql: string, values?: Parameters[]) => Promise<void>;\n query: <T>(sql: string, values?: Parameters[]) => Promise<T[]>;\n querySingle: <T>(sql: string, values?: Parameters[]) => Promise<T | null>;\n};\n\nexport type SQLitePoolClient = {\n release: () => void;\n command: (sql: string, values?: Parameters[]) => Promise<void>;\n query: <T>(sql: string, values?: Parameters[]) => Promise<T[]>;\n querySingle: <T>(sql: string, values?: Parameters[]) => Promise<T | null>;\n};\n\nexport type SQLiteClientFactory = (\n options: SQLiteClientOptions,\n) => SQLiteClient;\n\nexport type SQLiteClientOrPoolClient = SQLitePoolClient | SQLiteClient;\n\nexport interface SQLiteError extends Error {\n errno: number;\n}\n\nexport const isSQLiteError = (error: unknown): error is SQLiteError => {\n if (error instanceof Error && 'code' in error) {\n return true;\n }\n\n return false;\n};\n\nexport type SQLitePoolConnectionOptions<\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n> = {\n driverType: DriverType;\n type: 'PoolClient';\n connect: () => Promise<SQLitePoolClient>;\n close: (client: SQLitePoolClient) => Promise<void>;\n allowNestedTransactions: boolean;\n};\n\nexport type SQLiteClientConnectionOptions<\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n> = {\n driverType: DriverType;\n type: 'Client';\n connect: () => Promise<SQLiteClient>;\n close: (client: SQLiteClient) => Promise<void>;\n allowNestedTransactions: boolean;\n};\n\nexport type SQLiteClientConnection<\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n> = Connection<DriverType, SQLiteClient>;\n\nexport type SQLitePoolClientConnection<\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n> = Connection<DriverType, SQLitePoolClient>;\n\nexport type SQLiteConnection<\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n> = SQLiteClientConnection<DriverType> | SQLitePoolClientConnection<DriverType>;\n\nexport const sqliteClientConnection = <\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n>(\n options: SQLiteClientConnectionOptions<DriverType>,\n): SQLiteClientConnection<DriverType> => {\n const { connect, close, allowNestedTransactions } = options;\n\n return createConnection({\n driverType: options.driverType,\n connect,\n close,\n initTransaction: (connection) =>\n sqliteTransaction(\n options.driverType,\n connection,\n allowNestedTransactions,\n ),\n executor: () => sqliteSQLExecutor(options.driverType),\n });\n};\n\nexport type TransactionNestingCounter = {\n increment: () => void;\n decrement: () => void;\n reset: () => void;\n level: number;\n};\n\nexport const transactionNestingCounter = (): TransactionNestingCounter => {\n let transactionLevel = 0;\n\n return {\n reset: () => {\n transactionLevel = 0;\n },\n increment: () => {\n transactionLevel++;\n },\n decrement: () => {\n transactionLevel--;\n\n if (transactionLevel < 0) {\n throw new Error('Transaction level is out of bounds');\n }\n },\n get level() {\n return transactionLevel;\n },\n };\n};\n\nexport const sqlitePoolClientConnection = <\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n>(\n options: SQLitePoolConnectionOptions<DriverType>,\n): SQLitePoolClientConnection<DriverType> => {\n const { connect, close, allowNestedTransactions } = options;\n\n return createConnection({\n driverType: options.driverType,\n connect,\n close,\n initTransaction: (connection) =>\n sqliteTransaction(\n options.driverType,\n connection,\n allowNestedTransactions ?? false,\n ),\n executor: () => sqliteSQLExecutor(options.driverType),\n });\n};\n\nexport function sqliteConnection<\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n>(options: SQLitePoolConnectionOptions<DriverType>): SQLitePoolClientConnection;\n\nexport function sqliteConnection<\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n>(options: SQLiteClientConnectionOptions<DriverType>): SQLiteClientConnection;\n\nexport function sqliteConnection<\n DriverType extends SQLiteDriverType = SQLiteDriverType,\n>(\n options:\n | SQLitePoolConnectionOptions<DriverType>\n | SQLiteClientConnectionOptions<DriverType>,\n): SQLitePoolClientConnection<DriverType> | SQLiteClientConnection<DriverType> {\n return options.type === 'Client'\n ? sqliteClientConnection<DriverType>(options)\n : sqlitePoolClientConnection<DriverType>(options);\n}\n\nexport type InMemorySQLiteDatabase = ':memory:';\nexport const InMemorySQLiteDatabase = SQLiteConnectionString(':memory:');\n\nexport type SQLiteClientOptions = SQLiteFileNameOrConnectionString;\n\nexport * from './connectionString';\n","export * from './connections';\nimport {\n dumboDatabaseDriverRegistry,\n type DumboConnectionOptions,\n type DumboDatabaseDriver,\n} from '../../../core';\nimport {\n DefaultSQLiteMigratorOptions,\n InMemorySQLiteDatabase,\n SQLiteConnectionString,\n sqliteFormatter,\n sqlitePool,\n type SQLiteConnection,\n type SQLiteDumboConnectionOptions,\n type SQLitePoolConfig,\n} from '../core';\nimport { sqlite3Client, SQLite3DriverType } from './connections';\n\nexport const sqlite3Pool = (\n options: SQLiteDumboConnectionOptions<SQLite3DriverType>,\n) =>\n sqlitePool({\n ...options,\n sqliteClient: sqlite3Client,\n } as SQLiteDumboConnectionOptions<SQLite3DriverType> & SQLitePoolConfig);\n\nexport const sqlite3DatabaseDriver = {\n driverType: 'SQLite:sqlite3' as const,\n createPool: (options) =>\n sqlite3Pool(options as SQLiteDumboConnectionOptions<SQLite3DriverType>),\n sqlFormatter: sqliteFormatter,\n defaultMigratorOptions: DefaultSQLiteMigratorOptions,\n getDatabaseNameOrDefault: () => InMemorySQLiteDatabase,\n defaultConnectionString: InMemorySQLiteDatabase,\n tryParseConnectionString: (connectionString) => {\n try {\n return SQLiteConnectionString(connectionString);\n } catch {\n return null;\n }\n },\n} satisfies DumboDatabaseDriver<\n SQLiteConnection<SQLite3DriverType>,\n SQLiteDumboConnectionOptions<SQLite3DriverType>,\n SQLiteConnectionString\n>;\n\nexport const useSqlite3DatabaseDriver = () => {\n dumboDatabaseDriverRegistry.register(\n SQLite3DriverType,\n sqlite3DatabaseDriver,\n );\n};\n\nexport type SQLite3DumboConnectionOptions = DumboConnectionOptions<\n typeof sqlite3DatabaseDriver\n>;\n\nuseSqlite3DatabaseDriver();\n\nexport {\n sqlite3DatabaseDriver as databaseDriver,\n sqlite3Client as sqliteClient,\n};\n\nexport const connectionPool = sqlitePool;\n"],"mappings":"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","names":["SQLiteConnectionString","SQLiteConnectionString","SQLiteConnectionString"]}