@framers/sql-storage-adapter 0.6.14 → 0.6.16

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 (54) hide show
  1. package/README.md +130 -35
  2. package/dist/adapters/baseStorageAdapter.d.ts.map +1 -1
  3. package/dist/adapters/baseStorageAdapter.js +4 -2
  4. package/dist/adapters/baseStorageAdapter.js.map +1 -1
  5. package/dist/adapters/betterSqliteAdapter.d.ts.map +1 -1
  6. package/dist/adapters/betterSqliteAdapter.js +10 -2
  7. package/dist/adapters/betterSqliteAdapter.js.map +1 -1
  8. package/dist/adapters/capacitorSqliteAdapter.d.ts.map +1 -1
  9. package/dist/adapters/capacitorSqliteAdapter.js +7 -0
  10. package/dist/adapters/capacitorSqliteAdapter.js.map +1 -1
  11. package/dist/adapters/indexedDbAdapter.d.ts +5 -1
  12. package/dist/adapters/indexedDbAdapter.d.ts.map +1 -1
  13. package/dist/adapters/indexedDbAdapter.js +22 -5
  14. package/dist/adapters/indexedDbAdapter.js.map +1 -1
  15. package/dist/adapters/postgresAdapter.d.ts +100 -5
  16. package/dist/adapters/postgresAdapter.d.ts.map +1 -1
  17. package/dist/adapters/postgresAdapter.js +335 -46
  18. package/dist/adapters/postgresAdapter.js.map +1 -1
  19. package/dist/adapters/sqlJsAdapter.d.ts +4 -0
  20. package/dist/adapters/sqlJsAdapter.d.ts.map +1 -1
  21. package/dist/adapters/sqlJsAdapter.js +14 -23
  22. package/dist/adapters/sqlJsAdapter.js.map +1 -1
  23. package/dist/core/contracts/index.d.ts +9 -0
  24. package/dist/core/contracts/index.d.ts.map +1 -1
  25. package/dist/core/contracts/index.js.map +1 -1
  26. package/dist/core/database.d.ts +40 -4
  27. package/dist/core/database.d.ts.map +1 -1
  28. package/dist/core/database.js +37 -3
  29. package/dist/core/database.js.map +1 -1
  30. package/dist/core/resolver.d.ts +25 -0
  31. package/dist/core/resolver.d.ts.map +1 -1
  32. package/dist/core/resolver.js +24 -8
  33. package/dist/core/resolver.js.map +1 -1
  34. package/dist/index.d.ts +2 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +2 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/shared/errors.d.ts +23 -0
  39. package/dist/shared/errors.d.ts.map +1 -0
  40. package/dist/shared/errors.js +44 -0
  41. package/dist/shared/errors.js.map +1 -0
  42. package/dist/shared/logger.d.ts +26 -0
  43. package/dist/shared/logger.d.ts.map +1 -0
  44. package/dist/shared/logger.js +26 -0
  45. package/dist/shared/logger.js.map +1 -0
  46. package/dist/shared/parameterUtils.d.ts +7 -0
  47. package/dist/shared/parameterUtils.d.ts.map +1 -1
  48. package/dist/shared/parameterUtils.js +25 -0
  49. package/dist/shared/parameterUtils.js.map +1 -1
  50. package/dist/shared/sqlPlaceholders.d.ts +40 -0
  51. package/dist/shared/sqlPlaceholders.d.ts.map +1 -0
  52. package/dist/shared/sqlPlaceholders.js +276 -0
  53. package/dist/shared/sqlPlaceholders.js.map +1 -0
  54. package/package.json +1 -1
@@ -2,39 +2,82 @@
2
2
  // this file without crashing. A runtime error will be thrown inside `open()` if
3
3
  // execution actually occurs in a browser.
4
4
  const __isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';
5
- import { normaliseParameters } from '../shared/parameterUtils.js';
5
+ import { toPostgresStatement } from '../shared/sqlPlaceholders.js';
6
6
  import { splitSqlStatements } from '../shared/splitSqlStatements.js';
7
- const isPositional = (statement) => statement.includes('?');
8
- const buildNamedStatement = (statement, named) => {
9
- const order = [];
10
- const text = statement.replace(/@([A-Za-z0-9_]+)/g, (_, name) => {
11
- order.push(name);
12
- return `$${order.length}`;
13
- });
14
- const values = order.map((key) => named[key]);
15
- return { text, values };
16
- };
17
- const buildPositionalStatement = (statement, positional) => {
18
- let index = 0;
19
- const text = statement.replace(/\?/g, () => {
20
- index += 1;
21
- return `$${index}`;
22
- });
23
- return { text, values: positional };
24
- };
25
- const prepareStatement = (statement, parameters) => {
26
- const { named, positional } = normaliseParameters(parameters);
27
- if (named) {
28
- return buildNamedStatement(statement, named);
7
+ import { getStorageLogger } from '../shared/logger.js';
8
+ /** The type-parser overrides `parsers` asks for, by OID, after checking each value. */
9
+ const typeParserOverrides = (parsers) => {
10
+ const overrides = new Map();
11
+ if (!parsers)
12
+ return overrides;
13
+ const choice = (field, allowed) => {
14
+ const value = parsers[field];
15
+ if (value === undefined)
16
+ return undefined;
17
+ if (!allowed.includes(value)) {
18
+ throw new Error(`typeParsers.${field} must be ${allowed.map((option) => `'${option}'`).join(' or ')}; got ${JSON.stringify(value)}.`);
19
+ }
20
+ return value;
21
+ };
22
+ const int8 = choice('int8', ['string', 'number', 'bigint']);
23
+ if (int8 === 'string')
24
+ overrides.set(20, (text) => text);
25
+ if (int8 === 'bigint')
26
+ overrides.set(20, (text) => BigInt(text));
27
+ if (int8 === 'number') {
28
+ overrides.set(20, (text) => {
29
+ const value = Number(text);
30
+ if (!Number.isSafeInteger(value)) {
31
+ throw new RangeError(`int8 value ${text} is outside Number's safe integer range; read it with typeParsers.int8 'bigint' or 'string'.`);
32
+ }
33
+ return value;
34
+ });
29
35
  }
30
- if (positional) {
31
- return buildPositionalStatement(statement, positional);
36
+ const numeric = choice('numeric', ['string', 'number']);
37
+ if (numeric === 'string')
38
+ overrides.set(1700, (text) => text);
39
+ if (numeric === 'number')
40
+ overrides.set(1700, (text) => Number(text));
41
+ if (choice('date', ['date', 'string']) === 'string')
42
+ overrides.set(1082, (text) => text);
43
+ if (choice('json', ['parse', 'string']) === 'string') {
44
+ overrides.set(114, (text) => text);
45
+ overrides.set(3802, (text) => text);
32
46
  }
33
- if (isPositional(statement)) {
34
- return buildPositionalStatement(statement, []);
47
+ return overrides;
48
+ };
49
+ const ISOLATION_LEVELS = new Map([
50
+ ['read uncommitted', 'READ UNCOMMITTED'],
51
+ ['read committed', 'READ COMMITTED'],
52
+ ['repeatable read', 'REPEATABLE READ'],
53
+ ['serializable', 'SERIALIZABLE'],
54
+ ]);
55
+ /** The BEGIN statement for `options`. Refuses an isolation level it does not know, before any SQL is sent. */
56
+ const beginStatement = (options) => {
57
+ const modes = [];
58
+ if (options?.isolationLevel !== undefined) {
59
+ const level = ISOLATION_LEVELS.get(options.isolationLevel);
60
+ if (!level) {
61
+ throw new Error(`Unknown isolation level "${String(options.isolationLevel)}". Use 'read uncommitted', 'read committed', 'repeatable read' or 'serializable'.`);
62
+ }
63
+ modes.push(`ISOLATION LEVEL ${level}`);
35
64
  }
36
- return { text: statement, values: [] };
65
+ if (options?.readOnly !== undefined)
66
+ modes.push(options.readOnly ? 'READ ONLY' : 'READ WRITE');
67
+ if (options?.deferrable !== undefined)
68
+ modes.push(options.deferrable ? 'DEFERRABLE' : 'NOT DEFERRABLE');
69
+ return modes.length > 0 ? `BEGIN ${modes.join(', ')}` : 'BEGIN';
37
70
  };
71
+ /**
72
+ * A connection's transaction status: 'I' idle, 'T' in a transaction, 'E' in
73
+ * a failed one. pg reports it from 8.21; null on an older pg.
74
+ */
75
+ const transactionStatus = (client) => {
76
+ const read = client.getTransactionStatus;
77
+ return typeof read === 'function' ? read.call(client) : null;
78
+ };
79
+ /** The statement and values node-postgres receives: see toPostgresStatement. */
80
+ const prepareStatement = toPostgresStatement;
38
81
  /** Execute a mutation through a specific pool or transaction client. */
39
82
  const runWithExecutor = async (executor, statement, parameters) => {
40
83
  const { text, values } = prepareStatement(statement, parameters);
@@ -65,32 +108,48 @@ const execWithExecutor = async (executor, script) => {
65
108
  }
66
109
  };
67
110
  /**
68
- * Adapter view permanently bound to one checked-out transaction client.
69
- * Each concurrent transaction receives its own instance, so callback queries
70
- * cannot leak onto another callback's client through shared mutable state.
111
+ * Adapter view bound to one checked-out transaction client while its
112
+ * transaction runs. Each concurrent transaction receives its own instance, so
113
+ * callback queries cannot leak onto another callback's client through shared
114
+ * mutable state. Once its transaction has ended, the client may be another
115
+ * caller's, so the view sends its statements to `afterEnd` instead: the
116
+ * adapter's pool, or the held connection the transaction ran on.
71
117
  */
72
118
  class PostgresTransactionAdapter {
73
- constructor(client, capabilities) {
119
+ constructor(client, capabilities, afterEnd) {
74
120
  this.client = client;
75
121
  this.capabilities = capabilities;
122
+ this.afterEnd = afterEnd;
76
123
  this.kind = 'postgres';
124
+ this.ended = false;
77
125
  }
78
126
  async open() {
79
127
  // The owning PostgresAdapter opens the pool before creating this view.
80
128
  }
81
129
  async run(statement, parameters) {
130
+ if (this.ended)
131
+ return this.afterEnd.run(statement, parameters);
82
132
  return runWithExecutor(this.client, statement, parameters);
83
133
  }
84
134
  async get(statement, parameters) {
135
+ if (this.ended)
136
+ return this.afterEnd.get(statement, parameters);
85
137
  return getWithExecutor(this.client, statement, parameters);
86
138
  }
87
139
  async all(statement, parameters) {
140
+ if (this.ended)
141
+ return this.afterEnd.all(statement, parameters);
88
142
  return allWithExecutor(this.client, statement, parameters);
89
143
  }
90
144
  async exec(script) {
145
+ if (this.ended)
146
+ return this.afterEnd.exec(script);
91
147
  await execWithExecutor(this.client, script);
92
148
  }
93
149
  async transaction(fn) {
150
+ // After the transaction has ended, a new one begins where afterEnd runs it.
151
+ if (this.ended)
152
+ return this.afterEnd.transaction(fn);
94
153
  // Nested callbacks share the outer transaction. Errors still reach the
95
154
  // owning adapter, which rolls the entire transaction back.
96
155
  return fn(this);
@@ -98,6 +157,152 @@ class PostgresTransactionAdapter {
98
157
  async close() {
99
158
  // The owning transaction releases the checked-out client after completion.
100
159
  }
160
+ /** @internal runTransaction() calls this when the transaction has ended. */
161
+ end() {
162
+ this.ended = true;
163
+ }
164
+ }
165
+ /** An unknown thrown value as an Error. */
166
+ const asError = (value) => (value instanceof Error ? value : new Error(String(value)));
167
+ /**
168
+ * Puts a failed ROLLBACK's error on the transaction's error, as a
169
+ * non-enumerable `rollbackError` property, when that error can take one.
170
+ */
171
+ const keepRollbackError = (error, rollbackError) => {
172
+ if (typeof error !== 'object' || error === null || !Object.isExtensible(error))
173
+ return;
174
+ try {
175
+ Object.defineProperty(error, 'rollbackError', {
176
+ value: rollbackError,
177
+ enumerable: false,
178
+ configurable: true,
179
+ writable: true,
180
+ });
181
+ }
182
+ catch {
183
+ // A non-configurable rollbackError is already there: keep it.
184
+ }
185
+ };
186
+ /**
187
+ * Listens for a connection error on a checked-out client until `stop()`. pg
188
+ * emits a client's connection error (the server ending the session, a broken
189
+ * socket) on the client when no query is running, and pg-pool listens only on
190
+ * idle clients, so without this an unheard error event would end the process.
191
+ */
192
+ const watchClient = (client) => {
193
+ let failure;
194
+ // A pg-compatible pool whose clients are not event emitters emits nothing to hear.
195
+ if (typeof client.on !== 'function' || typeof client.removeListener !== 'function') {
196
+ return { failure: () => undefined, stop: () => undefined };
197
+ }
198
+ const onError = (error) => {
199
+ if (!failure)
200
+ failure = error;
201
+ };
202
+ client.on('error', onError);
203
+ return {
204
+ failure: () => failure,
205
+ stop: () => {
206
+ client.removeListener('error', onError);
207
+ },
208
+ };
209
+ };
210
+ /**
211
+ * Runs `fn` in a transaction that `begin` opens on `client`: COMMIT when `fn`
212
+ * resolves, ROLLBACK when `fn` or COMMIT throws, and that error is rethrown.
213
+ * `onBroken` hears when the connection cannot be trusted any more (BEGIN or
214
+ * ROLLBACK failed), so the caller closes it instead of returning it to the
215
+ * pool. When ROLLBACK fails, the original error is still the one thrown, with
216
+ * the ROLLBACK error on it as `rollbackError`.
217
+ */
218
+ const runTransaction = async (client, begin, fn, capabilities, afterEnd, onBroken) => {
219
+ try {
220
+ await client.query(begin);
221
+ }
222
+ catch (error) {
223
+ onBroken(asError(error));
224
+ throw error;
225
+ }
226
+ const handle = new PostgresTransactionAdapter(client, capabilities, afterEnd);
227
+ try {
228
+ const result = await fn(handle);
229
+ await client.query('COMMIT');
230
+ return result;
231
+ }
232
+ catch (error) {
233
+ try {
234
+ await client.query('ROLLBACK');
235
+ }
236
+ catch (rollbackError) {
237
+ const failure = asError(rollbackError);
238
+ onBroken(failure);
239
+ keepRollbackError(error, failure);
240
+ getStorageLogger().warn({ adapter: 'postgres', error: failure.message }, `PostgreSQL ROLLBACK failed after a transaction error, so the connection was closed; the transaction's own error is rethrown. ${failure.message}`);
241
+ }
242
+ throw error;
243
+ }
244
+ finally {
245
+ handle.end();
246
+ }
247
+ };
248
+ /**
249
+ * The connection a `withConnection()` callback holds. It refuses statements
250
+ * once the callback has ended, when the connection is back in the pool or
251
+ * closed.
252
+ */
253
+ class PostgresConnectionAdapter {
254
+ constructor(client, capabilities) {
255
+ this.client = client;
256
+ this.capabilities = capabilities;
257
+ this.kind = 'postgres';
258
+ this.ended = false;
259
+ this.transactionOpen = false;
260
+ }
261
+ async open() {
262
+ // withConnection() checks the connection out before the callback runs.
263
+ }
264
+ async run(statement, parameters) {
265
+ return runWithExecutor(this.live(), statement, parameters);
266
+ }
267
+ async get(statement, parameters) {
268
+ return getWithExecutor(this.live(), statement, parameters);
269
+ }
270
+ async all(statement, parameters) {
271
+ return allWithExecutor(this.live(), statement, parameters);
272
+ }
273
+ async exec(script) {
274
+ await execWithExecutor(this.live(), script);
275
+ }
276
+ async transaction(fn, options) {
277
+ const begin = beginStatement(options);
278
+ const client = this.live();
279
+ if (this.transactionOpen) {
280
+ throw new Error('A transaction is already open on this connection. Run its statements through the handle its callback receives.');
281
+ }
282
+ this.transactionOpen = true;
283
+ try {
284
+ return await runTransaction(client, begin, fn, this.capabilities, this, (error) => {
285
+ if (!this.brokenBy)
286
+ this.brokenBy = error;
287
+ });
288
+ }
289
+ finally {
290
+ this.transactionOpen = false;
291
+ }
292
+ }
293
+ async close() {
294
+ // withConnection() returns the connection to the pool, or closes it, when the callback ends.
295
+ }
296
+ /** @internal withConnection() calls this when the callback ends. */
297
+ end() {
298
+ this.ended = true;
299
+ }
300
+ live() {
301
+ if (this.ended) {
302
+ throw new Error('This connection was handed back when its withConnection() callback ended.');
303
+ }
304
+ return this.client;
305
+ }
101
306
  }
102
307
  /**
103
308
  * PostgreSQL adapter for production-grade SQL operations.
@@ -193,10 +398,20 @@ class PostgresTransactionAdapter {
193
398
  * });
194
399
  * ```
195
400
  *
196
- * ## Graceful Degradation
197
- * - Automatic reconnection on connection loss
198
- * - Connection pool handles transient failures
199
- * - Falls back to SQLite if PostgreSQL unavailable
401
+ * ## Connection failures
402
+ * - The pool drops a connection that fails, and the next query opens a new one.
403
+ * - The adapter never falls back to SQLite. `resolveStorageAdapter()` without
404
+ * `strict` tries its next candidate when Postgres fails to open; with
405
+ * `strict`, and in `createDatabase()` given a Postgres URL, it throws.
406
+ *
407
+ * ## Pool control
408
+ * - `withConnection(fn)` holds one connection for `fn`: session settings,
409
+ * session advisory locks, and statements that must run outside a
410
+ * transaction.
411
+ * - `getPoolStats()` counts the pool's connections and waiting callers.
412
+ * - `transaction(fn, { isolationLevel, readOnly, deferrable })` sets how the
413
+ * transaction begins.
414
+ * - `allowExitOnIdle` lets Node exit while the pool is idle.
200
415
  */
201
416
  /**
202
417
  * Production-grade PostgreSQL adapter backed by pg.Pool.
@@ -289,6 +504,18 @@ export class PostgresAdapter {
289
504
  if (this.options.query_timeout !== undefined) {
290
505
  poolConfig.query_timeout = this.options.query_timeout;
291
506
  }
507
+ if (this.options.allowExitOnIdle !== undefined) {
508
+ poolConfig.allowExitOnIdle = this.options.allowExitOnIdle;
509
+ }
510
+ const overrides = typeParserOverrides(this.options.typeParsers);
511
+ if (overrides.size > 0) {
512
+ const defaults = pg.types;
513
+ poolConfig.types = {
514
+ getTypeParser: (oid, format) => (format === undefined || format === 'text') && overrides.has(oid)
515
+ ? overrides.get(oid)
516
+ : defaults.getTypeParser(oid, format),
517
+ };
518
+ }
292
519
  // SSL configuration
293
520
  if (this.options.ssl !== undefined) {
294
521
  poolConfig.ssl = this.options.ssl;
@@ -314,26 +541,85 @@ export class PostgresAdapter {
314
541
  const executor = await this.getExecutor();
315
542
  await execWithExecutor(executor, script);
316
543
  }
317
- async transaction(fn) {
318
- if (!this.pool) {
319
- throw new Error('Postgres adapter not opened.');
544
+ /**
545
+ * Runs `fn` in a transaction on one pooled connection: COMMIT when it
546
+ * resolves, ROLLBACK when it or COMMIT throws, and that error is rethrown.
547
+ * `options` sets the isolation level and the read-only and deferrable modes;
548
+ * an unknown isolation level is refused before a connection is checked out.
549
+ *
550
+ * When ROLLBACK fails too (the connection broke), the error thrown is still
551
+ * the transaction's own, with the ROLLBACK error on it as `rollbackError`,
552
+ * and the connection is closed instead of returned to the pool. The handle
553
+ * `fn` receives runs on the pool once the transaction has ended.
554
+ */
555
+ async transaction(fn, options) {
556
+ const begin = beginStatement(options);
557
+ const client = await this.requirePool().connect();
558
+ const watch = watchClient(client);
559
+ let brokenBy;
560
+ try {
561
+ return await runTransaction(client, begin, fn, this.capabilities, this, (error) => {
562
+ if (!brokenBy)
563
+ brokenBy = error;
564
+ });
320
565
  }
321
- const client = await this.pool.connect();
566
+ finally {
567
+ watch.stop();
568
+ client.release(brokenBy ?? watch.failure());
569
+ }
570
+ }
571
+ /**
572
+ * Holds one pooled connection for `fn`, for work that needs one session:
573
+ * `SET` and other session settings, session advisory locks
574
+ * (`pg_advisory_lock`), temporary tables, or statements that must not run
575
+ * inside a transaction. Its statements run outside a transaction unless
576
+ * `fn` opens one with `connection.transaction()` or `BEGIN`.
577
+ *
578
+ * When `fn` resolves, the connection goes back to the pool with its session
579
+ * state, so undo what `fn` set (or use `SET LOCAL` inside a transaction).
580
+ * When `fn` throws, the connection is closed instead, which ends its session
581
+ * state and any transaction it left open, and `fn`'s error is rethrown.
582
+ * When `fn` resolves inside a transaction it began and did not end, the
583
+ * connection is closed, which rolls the transaction back, and the call
584
+ * rejects (pg 8.21 and later report the transaction status). The connection
585
+ * refuses statements once `fn` has ended. A connection that broke while `fn`
586
+ * held it (the server ended the session) is closed, not returned.
587
+ */
588
+ async withConnection(fn) {
589
+ const client = await this.requirePool().connect();
590
+ const watch = watchClient(client);
591
+ const connection = new PostgresConnectionAdapter(client, this.capabilities);
592
+ let releaseError;
322
593
  try {
323
- await client.query('BEGIN');
324
- const transactionAdapter = new PostgresTransactionAdapter(client, this.capabilities);
325
- const result = await fn(transactionAdapter);
326
- await client.query('COMMIT');
594
+ const result = await fn(connection);
595
+ const status = transactionStatus(client);
596
+ if (status === 'T' || status === 'E') {
597
+ releaseError = new Error('withConnection(): the callback returned inside an open transaction. The connection was closed, which rolled the transaction back. End each transaction the callback begins, or run it through connection.transaction().');
598
+ throw releaseError;
599
+ }
327
600
  return result;
328
601
  }
329
602
  catch (error) {
330
- await client.query('ROLLBACK');
603
+ // The connection may hold session state or an open transaction that
604
+ // fn did not undo: close it rather than hand it to the next caller.
605
+ if (!releaseError) {
606
+ releaseError = error instanceof Error ? error : new Error(String(error));
607
+ }
331
608
  throw error;
332
609
  }
333
610
  finally {
334
- client.release();
611
+ connection.end();
612
+ watch.stop();
613
+ client.release(releaseError ?? connection.brokenBy ?? watch.failure());
335
614
  }
336
615
  }
616
+ /** The pool's counts, or null when the adapter is not open. */
617
+ getPoolStats() {
618
+ if (!this.pool) {
619
+ return null;
620
+ }
621
+ return { total: this.pool.totalCount, idle: this.pool.idleCount, waiting: this.pool.waitingCount };
622
+ }
337
623
  async close() {
338
624
  if (this.pool) {
339
625
  await this.pool.end();
@@ -341,6 +627,9 @@ export class PostgresAdapter {
341
627
  }
342
628
  }
343
629
  async getExecutor() {
630
+ return this.requirePool();
631
+ }
632
+ requirePool() {
344
633
  if (!this.pool) {
345
634
  throw new Error('Postgres adapter not opened.');
346
635
  }
@@ -1 +1 @@
1
- {"version":3,"file":"postgresAdapter.js","sourceRoot":"","sources":["../../src/adapters/postgresAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"postgresAdapter.js","sourceRoot":"","sources":["../../src/adapters/postgresAdapter.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,8 @@ export declare class SqlJsAdapter implements StorageAdapter {
11
11
  private SQL;
12
12
  private db;
13
13
  private filePath?;
14
+ /** Foreign-key enforcement as open() was asked for it (undefined: the engine default); sql.js forgets the PRAGMA when export() reopens the connection. */
15
+ private foreignKeys;
14
16
  private readonly runSerializedTransaction;
15
17
  /**
16
18
  * Open transaction depth. > 0 means a SQLite-level transaction is in
@@ -39,6 +41,8 @@ export declare class SqlJsAdapter implements StorageAdapter {
39
41
  close(): Promise<void>;
40
42
  private prepareInternal;
41
43
  private ensureOpen;
44
+ /** Applies the connection settings open() was asked for: sql.js loses them whenever export() reopens the connection. */
45
+ private applyConnectionSettings;
42
46
  private persistIfNeeded;
43
47
  }
44
48
  export declare const createSqlJsAdapter: (options?: SqlJsAdapterOptions) => StorageAdapter;
@@ -1 +1 @@
1
- {"version":3,"file":"sqlJsAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/sqlJsAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,WAAW,EAA6B,MAAM,QAAQ,CAAC;AAGlF,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAOpI,KAAK,mBAAmB,GAAG,WAAW,CAAC;AAqCvC;;GAEG;AACH,qBAAa,YAAa,YAAW,cAAc;IA0BrC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAzB3C,SAAgB,IAAI,WAAW;IAC/B,SAAgB,YAAY,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAE7D,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,EAAE,CAA8B;IACxC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAuC;IAChF;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,gBAAgB,CAAK;gBAEA,cAAc,GAAE,mBAAwB;IAQxD,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBjD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAkDjF,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAK5E,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAwBvE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCnC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA2CnE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQnC,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,UAAU;YAMJ,eAAe;CAW9B;AAED,eAAO,MAAM,kBAAkB,aAAc,mBAAmB,KAAG,cAA2C,CAAC"}
1
+ {"version":3,"file":"sqlJsAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/sqlJsAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,WAAW,EAA6B,MAAM,QAAQ,CAAC;AAGlF,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAQpI,KAAK,mBAAmB,GAAG,WAAW,CAAC;AAoBvC;;GAEG;AACH,qBAAa,YAAa,YAAW,cAAc;IA4BrC,OAAO,CAAC,QAAQ,CAAC,cAAc;IA3B3C,SAAgB,IAAI,WAAW;IAC/B,SAAgB,YAAY,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAE7D,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,EAAE,CAA8B;IACxC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,0JAA0J;IAC1J,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAuC;IAChF;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,gBAAgB,CAAK;gBAEA,cAAc,GAAE,mBAAwB;IAQxD,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBjD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmDjF,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAK5E,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAyBvE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCnC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA2CnE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQnC,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,UAAU;IAMlB,wHAAwH;IACxH,OAAO,CAAC,uBAAuB;YAMjB,eAAe;CAa9B;AAED,eAAO,MAAM,kBAAkB,aAAc,mBAAmB,KAAG,cAA2C,CAAC"}
@@ -1,30 +1,9 @@
1
1
  import initSqlJs from 'sql.js';
2
2
  import fs from 'fs';
3
3
  import path from 'path';
4
- import { normaliseParameters } from '../shared/parameterUtils.js';
4
+ import { expandNamedParameters, normaliseParameters } from '../shared/parameterUtils.js';
5
+ import { toSqliteStatement } from '../shared/sqlPlaceholders.js';
5
6
  import { createSerializedTransactionRunner, createSharedConnectionTransactionAdapter, } from '../shared/serializedTransaction.js';
6
- const expandNamedParameters = (named) => {
7
- const expanded = { ...named };
8
- for (const [rawKey, value] of Object.entries(named)) {
9
- if (!rawKey)
10
- continue;
11
- const key = rawKey.replace(/^[:@$]/, '');
12
- if (!key)
13
- continue;
14
- // sql.js expects keys to match the placeholder format (":id", "@id", "$id").
15
- // Other adapters (better-sqlite3) accept bare keys ("id") for "@id" placeholders.
16
- // Expand all variants so the same query payload works across adapters.
17
- if (!(key in expanded))
18
- expanded[key] = value;
19
- if (!(`:${key}` in expanded))
20
- expanded[`:${key}`] = value;
21
- if (!(`@${key}` in expanded))
22
- expanded[`@${key}`] = value;
23
- if (!(`$${key}` in expanded))
24
- expanded[`$${key}`] = value;
25
- }
26
- return expanded;
27
- };
28
7
  const normaliseRowId = (value) => {
29
8
  if (typeof value === 'number' || typeof value === 'string') {
30
9
  return value;
@@ -81,6 +60,7 @@ export class SqlJsAdapter {
81
60
  }
82
61
  this.SQL = await initSqlJs(this.adapterOptions);
83
62
  this.filePath = options?.filePath;
63
+ this.foreignKeys = options?.foreignKeys;
84
64
  if (this.filePath && hasFsAccess() && fs.existsSync(this.filePath)) {
85
65
  const buffer = fs.readFileSync(this.filePath);
86
66
  this.db = new this.SQL.Database(buffer);
@@ -88,8 +68,10 @@ export class SqlJsAdapter {
88
68
  else {
89
69
  this.db = new this.SQL.Database();
90
70
  }
71
+ this.applyConnectionSettings();
91
72
  }
92
73
  async run(statement, parameters) {
74
+ ({ statement, parameters } = toSqliteStatement(statement, parameters));
93
75
  // Detect caller-managed transaction control (BEGIN / SAVEPOINT /
94
76
  // COMMIT / ROLLBACK / RELEASE) so we can keep the tx depth in
95
77
  // sync regardless of whether the caller uses {@link transaction}
@@ -146,6 +128,7 @@ export class SqlJsAdapter {
146
128
  return rows.length > 0 ? rows[0] : null;
147
129
  }
148
130
  async all(statement, parameters) {
131
+ ({ statement, parameters } = toSqliteStatement(statement, parameters));
149
132
  const stmt = this.prepareInternal(statement);
150
133
  try {
151
134
  const { named, positional } = normaliseParameters(parameters);
@@ -264,6 +247,12 @@ export class SqlJsAdapter {
264
247
  throw new Error('Storage adapter not opened. Call open() first.');
265
248
  }
266
249
  }
250
+ /** Applies the connection settings open() was asked for: sql.js loses them whenever export() reopens the connection. */
251
+ applyConnectionSettings() {
252
+ if (this.foreignKeys !== undefined) {
253
+ this.db.run(`PRAGMA foreign_keys = ${this.foreignKeys ? 'ON' : 'OFF'};`);
254
+ }
255
+ }
267
256
  async persistIfNeeded() {
268
257
  if (!this.filePath || !hasFsAccess()) {
269
258
  return;
@@ -273,6 +262,8 @@ export class SqlJsAdapter {
273
262
  fs.mkdirSync(dir, { recursive: true });
274
263
  }
275
264
  const data = this.db.export();
265
+ // export() closed and reopened the connection, which reset its PRAGMAs.
266
+ this.applyConnectionSettings();
276
267
  fs.writeFileSync(this.filePath, Buffer.from(data));
277
268
  }
278
269
  }