@framers/sql-storage-adapter 0.6.10 → 0.6.12
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/adapters/betterSqliteAdapter.d.ts +17 -0
- package/dist/adapters/betterSqliteAdapter.d.ts.map +1 -1
- package/dist/adapters/betterSqliteAdapter.js +95 -33
- package/dist/adapters/betterSqliteAdapter.js.map +1 -1
- package/dist/shared/connectionGate.d.ts +71 -0
- package/dist/shared/connectionGate.d.ts.map +1 -0
- package/dist/shared/connectionGate.js +77 -0
- package/dist/shared/connectionGate.js.map +1 -0
- package/package.json +1 -1
|
@@ -43,6 +43,12 @@ export declare class BetterSqliteAdapter implements StorageAdapter {
|
|
|
43
43
|
private db;
|
|
44
44
|
private preparedStatements;
|
|
45
45
|
private readonly runSerializedTransaction;
|
|
46
|
+
/**
|
|
47
|
+
* Holds statements from outside an open transaction until it ends, so they
|
|
48
|
+
* neither join it nor read what it has not committed. open() gives it Node's
|
|
49
|
+
* AsyncLocalStorage, which tells the transaction's own statements apart.
|
|
50
|
+
*/
|
|
51
|
+
private gate;
|
|
46
52
|
/**
|
|
47
53
|
* Creates a new better-sqlite3 adapter instance.
|
|
48
54
|
*
|
|
@@ -60,6 +66,16 @@ export declare class BetterSqliteAdapter implements StorageAdapter {
|
|
|
60
66
|
get<T = unknown>(statement: string, parameters?: StorageParameters): Promise<T | null>;
|
|
61
67
|
all<T>(statement: string, parameters?: StorageParameters): Promise<T[]>;
|
|
62
68
|
exec(script: string): Promise<void>;
|
|
69
|
+
private runNow;
|
|
70
|
+
private getNow;
|
|
71
|
+
private allNow;
|
|
72
|
+
private execNow;
|
|
73
|
+
/**
|
|
74
|
+
* The statements of one transaction's handle: they carry the transaction's
|
|
75
|
+
* token, so the gate admits them whatever async context runs them (a callback
|
|
76
|
+
* may reach its handle through an AsyncResource made before the transaction).
|
|
77
|
+
*/
|
|
78
|
+
private handleStatements;
|
|
63
79
|
transaction<T>(fn: (trx: StorageAdapter) => Promise<T>): Promise<T>;
|
|
64
80
|
close(): Promise<void>;
|
|
65
81
|
/**
|
|
@@ -72,6 +88,7 @@ export declare class BetterSqliteAdapter implements StorageAdapter {
|
|
|
72
88
|
* @returns Results of the batch operation
|
|
73
89
|
*/
|
|
74
90
|
batch(operations: BatchOperation[]): Promise<BatchResult>;
|
|
91
|
+
private batchNow;
|
|
75
92
|
private prepareInternal;
|
|
76
93
|
private ensureOpen;
|
|
77
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"betterSqliteAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/betterSqliteAdapter.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"betterSqliteAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/betterSqliteAdapter.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAwHjK;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;;;;;;;;;;;GAWG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IA6B5C,OAAO,CAAC,QAAQ,CAAC,eAAe;IA5B5C,SAAgB,IAAI,oBAAoB;IACxC,SAAgB,YAAY,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAQzD;IAEH,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,EAAE,CAAqC;IAC/C,OAAO,CAAC,kBAAkB,CAA4C;IACtE,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAuC;IAChF;;;;OAIG;IACH,OAAO,CAAC,IAAI,CAA8C;IAE1D;;;;;OAKG;gBAC0B,eAAe,EAAE,MAAM;IAEpD;;;;OAIG;IACU,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCjD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIjF,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAItF,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAIvE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,OAAO;IAKf;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAkBX,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA8BnE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWnC;;;;;;;;OAQG;IACU,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAItE,OAAO,CAAC,QAAQ;IA+ChB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,UAAU;CAKnB;AAED;;GAEG;AACH;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,aAAc,MAAM,KAAG,cAQ5D,CAAC"}
|
|
@@ -9,6 +9,17 @@ import path from 'path';
|
|
|
9
9
|
const isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';
|
|
10
10
|
import { normaliseParameters } from '../shared/parameterUtils.js';
|
|
11
11
|
import { createSerializedTransactionRunner, createSharedConnectionTransactionAdapter, } from '../shared/serializedTransaction.js';
|
|
12
|
+
import { createConnectionGate, whenAdmitted, } from '../shared/connectionGate.js';
|
|
13
|
+
/** The version of the better-sqlite3 that `require` resolves; undefined when it cannot be read. */
|
|
14
|
+
const versionOf = (require) => {
|
|
15
|
+
try {
|
|
16
|
+
const pkg = require('better-sqlite3/package.json');
|
|
17
|
+
return typeof pkg.version === 'string' ? pkg.version : undefined;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
12
23
|
/**
|
|
13
24
|
* Lazy loader for better-sqlite3 to keep the dependency optional.
|
|
14
25
|
*
|
|
@@ -27,17 +38,20 @@ import { createSerializedTransactionRunner, createSharedConnectionTransactionAda
|
|
|
27
38
|
* different adapter (e.g., sql.js) instead of crashing.
|
|
28
39
|
*/
|
|
29
40
|
const loadBetterSqlite = async () => {
|
|
41
|
+
const { createRequire } = await import('module');
|
|
30
42
|
try {
|
|
31
|
-
// Attempt ESM import first (pnpm hoists as ESM-compatible).
|
|
32
|
-
|
|
43
|
+
// Attempt ESM import first (pnpm hoists as ESM-compatible). Its version is
|
|
44
|
+
// read from the same place, this module's directory.
|
|
45
|
+
const imported = (await import('better-sqlite3'));
|
|
46
|
+
return { module: imported, version: versionOf(createRequire(import.meta.url)) };
|
|
33
47
|
}
|
|
34
48
|
catch {
|
|
35
49
|
try {
|
|
36
50
|
// Fallback to CJS require. Use createRequire relative to process.cwd()
|
|
37
|
-
// to avoid depending on url.fileURLToPath in browser bundles
|
|
38
|
-
|
|
51
|
+
// to avoid depending on url.fileURLToPath in browser bundles; the
|
|
52
|
+
// version comes from the package this require loaded.
|
|
39
53
|
const require = createRequire(path.join(process.cwd(), 'noop.js'));
|
|
40
|
-
return require('better-sqlite3');
|
|
54
|
+
return { module: require('better-sqlite3'), version: versionOf(require) };
|
|
41
55
|
}
|
|
42
56
|
catch (error) {
|
|
43
57
|
// Intentionally silent — the resolver handles fallback logging.
|
|
@@ -70,24 +84,19 @@ const betterSqliteRuntimeRefusal = (version, nodeApi) => {
|
|
|
70
84
|
'Install better-sqlite3 12 for this runtime, or choose another adapter.');
|
|
71
85
|
};
|
|
72
86
|
/**
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
87
|
+
* Node's AsyncLocalStorage for the connection gate, or null where it cannot be
|
|
88
|
+
* loaded (the gate then admits every statement at once). Loaded when the
|
|
89
|
+
* adapter opens, like the native module, so that browser bundles never import
|
|
90
|
+
* a Node built-in.
|
|
76
91
|
*/
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
// Not resolvable from this base; try the next.
|
|
88
|
-
}
|
|
92
|
+
const loadTransactionContext = async () => {
|
|
93
|
+
try {
|
|
94
|
+
const { AsyncLocalStorage } = await import('async_hooks');
|
|
95
|
+
return new AsyncLocalStorage();
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return null;
|
|
89
99
|
}
|
|
90
|
-
return undefined;
|
|
91
100
|
};
|
|
92
101
|
const normaliseRowId = (rowId) => {
|
|
93
102
|
if (rowId === null || rowId === undefined) {
|
|
@@ -154,6 +163,12 @@ export class BetterSqliteAdapter {
|
|
|
154
163
|
this.db = null;
|
|
155
164
|
this.preparedStatements = new Map();
|
|
156
165
|
this.runSerializedTransaction = createSerializedTransactionRunner();
|
|
166
|
+
/**
|
|
167
|
+
* Holds statements from outside an open transaction until it ends, so they
|
|
168
|
+
* neither join it nor read what it has not committed. open() gives it Node's
|
|
169
|
+
* AsyncLocalStorage, which tells the transaction's own statements apart.
|
|
170
|
+
*/
|
|
171
|
+
this.gate = createConnectionGate(null);
|
|
157
172
|
}
|
|
158
173
|
/**
|
|
159
174
|
* Open (or no-op if already open) the underlying native database.
|
|
@@ -167,15 +182,15 @@ export class BetterSqliteAdapter {
|
|
|
167
182
|
if (isBrowser) {
|
|
168
183
|
throw new Error('[StorageAdapter] better-sqlite3 adapter cannot be opened in a browser environment.');
|
|
169
184
|
}
|
|
170
|
-
|
|
171
|
-
if (!
|
|
185
|
+
const loaded = await loadBetterSqlite();
|
|
186
|
+
if (!loaded) {
|
|
172
187
|
throw new Error('better-sqlite3 module is not available. Install it or choose another adapter.');
|
|
173
188
|
}
|
|
174
|
-
const refusal = betterSqliteRuntimeRefusal(
|
|
189
|
+
const refusal = betterSqliteRuntimeRefusal(loaded.version, process.versions?.napi);
|
|
175
190
|
if (refusal) {
|
|
176
|
-
this.module = null;
|
|
177
191
|
throw new Error(refusal);
|
|
178
192
|
}
|
|
193
|
+
this.module = loaded.module;
|
|
179
194
|
// Handle ESM/CJS interop for better-sqlite3 constructor
|
|
180
195
|
const moduleReference = this.module;
|
|
181
196
|
const DatabaseCtor = moduleReference.default ?? moduleReference;
|
|
@@ -189,38 +204,80 @@ export class BetterSqliteAdapter {
|
|
|
189
204
|
}
|
|
190
205
|
}
|
|
191
206
|
const databaseOptions = options?.readOnly ? { readonly: true } : undefined;
|
|
207
|
+
this.gate = createConnectionGate(await loadTransactionContext());
|
|
192
208
|
this.db = new DatabaseCtor(resolvedPath, databaseOptions);
|
|
193
209
|
}
|
|
194
210
|
async run(statement, parameters) {
|
|
211
|
+
return whenAdmitted(this.gate, () => this.runNow(statement, parameters));
|
|
212
|
+
}
|
|
213
|
+
async get(statement, parameters) {
|
|
214
|
+
return whenAdmitted(this.gate, () => this.getNow(statement, parameters));
|
|
215
|
+
}
|
|
216
|
+
async all(statement, parameters) {
|
|
217
|
+
return whenAdmitted(this.gate, () => this.allNow(statement, parameters));
|
|
218
|
+
}
|
|
219
|
+
async exec(script) {
|
|
220
|
+
return whenAdmitted(this.gate, () => this.execNow(script));
|
|
221
|
+
}
|
|
222
|
+
runNow(statement, parameters) {
|
|
195
223
|
const stmt = this.prepareInternal(statement);
|
|
196
224
|
const { named, positional } = normaliseParameters(parameters);
|
|
197
225
|
const result = named ? stmt.run(named) : stmt.run(positional ?? []);
|
|
198
226
|
return { changes: result.changes, lastInsertRowid: normaliseRowId(result.lastInsertRowid) };
|
|
199
227
|
}
|
|
200
|
-
|
|
228
|
+
getNow(statement, parameters) {
|
|
201
229
|
const stmt = this.prepareInternal(statement);
|
|
202
230
|
const { named, positional } = normaliseParameters(parameters);
|
|
203
231
|
const row = named ? stmt.get(named) : stmt.get(positional ?? []);
|
|
204
232
|
return row ?? null;
|
|
205
233
|
}
|
|
206
|
-
|
|
234
|
+
allNow(statement, parameters) {
|
|
207
235
|
const stmt = this.prepareInternal(statement);
|
|
208
236
|
const { named, positional } = normaliseParameters(parameters);
|
|
209
237
|
const rows = named ? stmt.all(named) : stmt.all(positional ?? []);
|
|
210
238
|
return rows;
|
|
211
239
|
}
|
|
212
|
-
|
|
240
|
+
execNow(script) {
|
|
213
241
|
this.ensureOpen();
|
|
214
242
|
this.db.exec(script);
|
|
215
243
|
}
|
|
244
|
+
/**
|
|
245
|
+
* The statements of one transaction's handle: they carry the transaction's
|
|
246
|
+
* token, so the gate admits them whatever async context runs them (a callback
|
|
247
|
+
* may reach its handle through an AsyncResource made before the transaction).
|
|
248
|
+
*/
|
|
249
|
+
handleStatements(token) {
|
|
250
|
+
return {
|
|
251
|
+
kind: this.kind,
|
|
252
|
+
capabilities: this.capabilities,
|
|
253
|
+
open: async () => { },
|
|
254
|
+
close: async () => { },
|
|
255
|
+
run: (statement, parameters) => whenAdmitted(this.gate, () => this.runNow(statement, parameters), token),
|
|
256
|
+
get: (statement, parameters) => whenAdmitted(this.gate, () => this.getNow(statement, parameters), token),
|
|
257
|
+
all: (statement, parameters) => whenAdmitted(this.gate, () => this.allNow(statement, parameters), token),
|
|
258
|
+
exec: (script) => whenAdmitted(this.gate, () => this.execNow(script), token),
|
|
259
|
+
batch: (operations) => whenAdmitted(this.gate, () => this.batchNow(operations), token),
|
|
260
|
+
// The handle answers a nested transaction() itself and never calls this.
|
|
261
|
+
transaction: (fn) => fn(this),
|
|
262
|
+
};
|
|
263
|
+
}
|
|
216
264
|
async transaction(fn) {
|
|
217
265
|
this.ensureOpen();
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
//
|
|
266
|
+
const openToken = this.gate.inside() ? this.gate.openToken() : null;
|
|
267
|
+
if (openToken) {
|
|
268
|
+
// Code the open transaction runs called the adapter itself: the callback
|
|
269
|
+
// joins the open transaction, as one given to the handle's transaction()
|
|
270
|
+
// does, instead of queueing behind the transaction it belongs to. Its
|
|
271
|
+
// handle carries the open transaction's token, as the outer one does.
|
|
272
|
+
return fn(createSharedConnectionTransactionAdapter(this.handleStatements(openToken)));
|
|
273
|
+
}
|
|
274
|
+
// The adapter has one physical connection. Queue top-level callbacks so
|
|
275
|
+
// overlapping callers cannot issue a second BEGIN inside the first tx, and
|
|
276
|
+
// hold the gate so other callers' statements wait for its end.
|
|
277
|
+
return this.runSerializedTransaction(() => this.gate.hold(async (token) => {
|
|
221
278
|
this.ensureOpen();
|
|
222
279
|
this.db.exec('BEGIN');
|
|
223
|
-
const transactionAdapter = createSharedConnectionTransactionAdapter(this);
|
|
280
|
+
const transactionAdapter = createSharedConnectionTransactionAdapter(this.handleStatements(token));
|
|
224
281
|
try {
|
|
225
282
|
const result = await fn(transactionAdapter);
|
|
226
283
|
this.db.exec('COMMIT');
|
|
@@ -233,9 +290,11 @@ export class BetterSqliteAdapter {
|
|
|
233
290
|
catch { /* ignore rollback errors */ }
|
|
234
291
|
throw error;
|
|
235
292
|
}
|
|
236
|
-
});
|
|
293
|
+
}));
|
|
237
294
|
}
|
|
238
295
|
async close() {
|
|
296
|
+
this.gate.dispose();
|
|
297
|
+
this.gate = createConnectionGate(null);
|
|
239
298
|
if (this.db) {
|
|
240
299
|
// Finalize all prepared statements
|
|
241
300
|
this.preparedStatements.clear();
|
|
@@ -253,6 +312,9 @@ export class BetterSqliteAdapter {
|
|
|
253
312
|
* @returns Results of the batch operation
|
|
254
313
|
*/
|
|
255
314
|
async batch(operations) {
|
|
315
|
+
return whenAdmitted(this.gate, () => this.batchNow(operations));
|
|
316
|
+
}
|
|
317
|
+
batchNow(operations) {
|
|
256
318
|
this.ensureOpen();
|
|
257
319
|
const results = [];
|
|
258
320
|
const errors = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"betterSqliteAdapter.js","sourceRoot":"","sources":["../../src/adapters/betterSqliteAdapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"betterSqliteAdapter.js","sourceRoot":"","sources":["../../src/adapters/betterSqliteAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keeps statements from outside an open transaction out of it.
|
|
3
|
+
*
|
|
4
|
+
* An adapter whose transactions share one connection runs BEGIN, the
|
|
5
|
+
* callback's statements and COMMIT on that connection. While the callback
|
|
6
|
+
* awaits, a statement another caller issues would otherwise run on the same
|
|
7
|
+
* connection inside the open transaction: a write would be undone if the
|
|
8
|
+
* transaction rolled back, and a read would see rows the transaction has not
|
|
9
|
+
* committed. The gate makes such a statement wait until the transaction ends.
|
|
10
|
+
*
|
|
11
|
+
* A statement issued from inside the transaction runs in it. Through the
|
|
12
|
+
* callback's handle it carries the transaction's token, so it is admitted
|
|
13
|
+
* whatever async context runs it. Through the adapter itself, from code the
|
|
14
|
+
* callback runs, the callback's async context tells it apart, so the gate needs
|
|
15
|
+
* a context store (Node's AsyncLocalStorage); without one it admits every
|
|
16
|
+
* statement that carries no token at once, which is how the adapters behaved
|
|
17
|
+
* before the gate.
|
|
18
|
+
*
|
|
19
|
+
* This module imports nothing from Node, so browser bundles can include it;
|
|
20
|
+
* the adapter that runs on Node passes the store in.
|
|
21
|
+
*/
|
|
22
|
+
/** The part of Node's `AsyncLocalStorage` the gate uses. */
|
|
23
|
+
export interface TransactionContextStore {
|
|
24
|
+
run<R>(store: symbol, callback: () => R): R;
|
|
25
|
+
getStore(): symbol | undefined;
|
|
26
|
+
/** Releases the store; Node collects an enabled store only after this. */
|
|
27
|
+
disable(): void;
|
|
28
|
+
}
|
|
29
|
+
/** The gate of one shared connection. */
|
|
30
|
+
export interface ConnectionGate {
|
|
31
|
+
/**
|
|
32
|
+
* True when a statement must wait: a transaction is open and the statement
|
|
33
|
+
* is not its own. A transaction handle passes its token; any other caller is
|
|
34
|
+
* judged by its async context.
|
|
35
|
+
*/
|
|
36
|
+
blocks(token?: symbol): boolean;
|
|
37
|
+
/** True when a transaction is open and the caller runs inside it. */
|
|
38
|
+
inside(): boolean;
|
|
39
|
+
/** The open transaction's token, for a handle made inside it; null when none is open. */
|
|
40
|
+
openToken(): symbol | null;
|
|
41
|
+
/** Settles when the open transaction ends; at once when none is open. */
|
|
42
|
+
ended(): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Runs one transaction's body with the gate closed to callers outside it.
|
|
45
|
+
* The body receives the transaction's token for its handle, and runs in its
|
|
46
|
+
* own async context, so code it runs is admitted too. The caller runs one
|
|
47
|
+
* body at a time (the adapter's transaction queue).
|
|
48
|
+
*/
|
|
49
|
+
hold<T>(body: (token: symbol) => Promise<T>): Promise<T>;
|
|
50
|
+
/** Releases the context store when the connection closes. */
|
|
51
|
+
dispose(): void;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Creates the gate of one shared connection.
|
|
55
|
+
*
|
|
56
|
+
* @param context - Node's AsyncLocalStorage, or null where there is none (the
|
|
57
|
+
* gate then admits every statement at once).
|
|
58
|
+
*/
|
|
59
|
+
export declare const createConnectionGate: (context: TransactionContextStore | null) => ConnectionGate;
|
|
60
|
+
/**
|
|
61
|
+
* Runs `work`, a synchronous statement, once the gate admits it. The last check
|
|
62
|
+
* and the work happen in the same turn, so no transaction can open between
|
|
63
|
+
* them; a caller woken when a transaction ends checks again, since the next
|
|
64
|
+
* transaction may already be open.
|
|
65
|
+
*
|
|
66
|
+
* @param token - The transaction's token when the statement comes through a
|
|
67
|
+
* transaction handle; a handle whose transaction has ended waits like any
|
|
68
|
+
* outside caller.
|
|
69
|
+
*/
|
|
70
|
+
export declare const whenAdmitted: <T>(gate: ConnectionGate, work: () => T, token?: symbol) => Promise<T>;
|
|
71
|
+
//# sourceMappingURL=connectionGate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectionGate.d.ts","sourceRoot":"","sources":["../../src/shared/connectionGate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,4DAA4D;AAC5D,MAAM,WAAW,uBAAuB;IACtC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5C,QAAQ,IAAI,MAAM,GAAG,SAAS,CAAC;IAC/B,0EAA0E;IAC1E,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,yCAAyC;AACzC,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,qEAAqE;IACrE,MAAM,IAAI,OAAO,CAAC;IAClB,yFAAyF;IACzF,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC;IAC3B,yEAAyE;IACzE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB;;;;;OAKG;IACH,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACzD,6DAA6D;IAC7D,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,YAAa,uBAAuB,GAAG,IAAI,KAAG,cA8B9E,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,GAAU,CAAC,QAAQ,cAAc,QAAQ,MAAM,CAAC,UAAU,MAAM,KAAG,OAAO,CAAC,CAAC,CAKpG,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keeps statements from outside an open transaction out of it.
|
|
3
|
+
*
|
|
4
|
+
* An adapter whose transactions share one connection runs BEGIN, the
|
|
5
|
+
* callback's statements and COMMIT on that connection. While the callback
|
|
6
|
+
* awaits, a statement another caller issues would otherwise run on the same
|
|
7
|
+
* connection inside the open transaction: a write would be undone if the
|
|
8
|
+
* transaction rolled back, and a read would see rows the transaction has not
|
|
9
|
+
* committed. The gate makes such a statement wait until the transaction ends.
|
|
10
|
+
*
|
|
11
|
+
* A statement issued from inside the transaction runs in it. Through the
|
|
12
|
+
* callback's handle it carries the transaction's token, so it is admitted
|
|
13
|
+
* whatever async context runs it. Through the adapter itself, from code the
|
|
14
|
+
* callback runs, the callback's async context tells it apart, so the gate needs
|
|
15
|
+
* a context store (Node's AsyncLocalStorage); without one it admits every
|
|
16
|
+
* statement that carries no token at once, which is how the adapters behaved
|
|
17
|
+
* before the gate.
|
|
18
|
+
*
|
|
19
|
+
* This module imports nothing from Node, so browser bundles can include it;
|
|
20
|
+
* the adapter that runs on Node passes the store in.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Creates the gate of one shared connection.
|
|
24
|
+
*
|
|
25
|
+
* @param context - Node's AsyncLocalStorage, or null where there is none (the
|
|
26
|
+
* gate then admits every statement at once).
|
|
27
|
+
*/
|
|
28
|
+
export const createConnectionGate = (context) => {
|
|
29
|
+
let open = null;
|
|
30
|
+
return {
|
|
31
|
+
blocks: (token) => {
|
|
32
|
+
if (open === null)
|
|
33
|
+
return false;
|
|
34
|
+
if (token !== undefined)
|
|
35
|
+
return token !== open.id;
|
|
36
|
+
return context !== null && context.getStore() !== open.id;
|
|
37
|
+
},
|
|
38
|
+
inside: () => open !== null && context !== null && context.getStore() === open.id,
|
|
39
|
+
openToken: () => open?.id ?? null,
|
|
40
|
+
ended: () => open?.done ?? Promise.resolve(),
|
|
41
|
+
async hold(body) {
|
|
42
|
+
const id = Symbol('transaction');
|
|
43
|
+
let release;
|
|
44
|
+
const done = new Promise((resolve) => {
|
|
45
|
+
release = resolve;
|
|
46
|
+
});
|
|
47
|
+
open = { id, done };
|
|
48
|
+
try {
|
|
49
|
+
return await (context ? context.run(id, () => body(id)) : body(id));
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
open = null;
|
|
53
|
+
release();
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
dispose: () => {
|
|
57
|
+
context?.disable();
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Runs `work`, a synchronous statement, once the gate admits it. The last check
|
|
63
|
+
* and the work happen in the same turn, so no transaction can open between
|
|
64
|
+
* them; a caller woken when a transaction ends checks again, since the next
|
|
65
|
+
* transaction may already be open.
|
|
66
|
+
*
|
|
67
|
+
* @param token - The transaction's token when the statement comes through a
|
|
68
|
+
* transaction handle; a handle whose transaction has ended waits like any
|
|
69
|
+
* outside caller.
|
|
70
|
+
*/
|
|
71
|
+
export const whenAdmitted = async (gate, work, token) => {
|
|
72
|
+
while (gate.blocks(token)) {
|
|
73
|
+
await gate.ended();
|
|
74
|
+
}
|
|
75
|
+
return work();
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=connectionGate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectionGate.js","sourceRoot":"","sources":["../../src/shared/connectionGate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAmCH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAuC,EAAkB,EAAE;IAC9F,IAAI,IAAI,GAA+C,IAAI,CAAC;IAE5D,OAAO;QACL,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChB,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;YAClD,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC5D,CAAC;QACD,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,EAAE;QACjF,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,IAAI;QACjC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE;QAC5C,KAAK,CAAC,IAAI,CAAI,IAAmC;YAC/C,MAAM,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;YACjC,IAAI,OAAoB,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBACzC,OAAO,GAAG,OAAO,CAAC;YACpB,CAAC,CAAC,CAAC;YACH,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACtE,CAAC;oBAAS,CAAC;gBACT,IAAI,GAAG,IAAI,CAAC;gBACZ,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,EAAE,GAAG,EAAE;YACZ,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAK,IAAoB,EAAE,IAAa,EAAE,KAAc,EAAc,EAAE;IACvG,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,EAAE,CAAC;AAChB,CAAC,CAAC"}
|
package/package.json
CHANGED