firebird-wasm 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +113 -0
- package/README.md +77 -7
- package/dist/.tsbuildinfo.build +1 -1
- package/dist/browser/engine-transport.d.ts +10 -3
- package/dist/browser/engine-transport.d.ts.map +1 -1
- package/dist/browser/engine-transport.js +3 -2
- package/dist/browser/engine-transport.js.map +1 -1
- package/dist/browser/firebird-browser.d.ts +56 -4
- package/dist/browser/firebird-browser.d.ts.map +1 -1
- package/dist/browser/firebird-browser.js +125 -21
- package/dist/browser/firebird-browser.js.map +1 -1
- package/dist/browser/index.d.ts +5 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +8 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/isolation.d.ts +21 -0
- package/dist/browser/isolation.d.ts.map +1 -0
- package/dist/browser/isolation.js +37 -0
- package/dist/browser/isolation.js.map +1 -0
- package/dist/browser/leader-election.d.ts +55 -0
- package/dist/browser/leader-election.d.ts.map +1 -0
- package/dist/browser/leader-election.js +64 -0
- package/dist/browser/leader-election.js.map +1 -0
- package/dist/browser/shared-transport.d.ts +128 -0
- package/dist/browser/shared-transport.d.ts.map +1 -0
- package/dist/browser/shared-transport.js +339 -0
- package/dist/browser/shared-transport.js.map +1 -0
- package/dist/browser/worker-transport.d.ts +2 -2
- package/dist/browser/worker-transport.d.ts.map +1 -1
- package/dist/browser/worker-transport.js +3 -2
- package/dist/browser/worker-transport.js.map +1 -1
- package/dist/wasm/firebird-embedded.js +1 -1
- package/dist/wasm/firebird-embedded.wasm +0 -0
- package/dist/wasm-loader.d.ts +8 -0
- package/dist/wasm-loader.d.ts.map +1 -1
- package/dist/wasm-loader.js.map +1 -1
- package/package.json +2 -1
|
@@ -53,8 +53,12 @@ export interface FirebirdBrowserOptions {
|
|
|
53
53
|
*
|
|
54
54
|
* Omit it only where blocking the calling thread is acceptable, such as
|
|
55
55
|
* Node or a test harness driving a stub engine.
|
|
56
|
+
*
|
|
57
|
+
* With `multiTab: 'shared'` this must be a **factory**. It is called only
|
|
58
|
+
* if this tab wins the election, so a follower never downloads and
|
|
59
|
+
* instantiates a 9 MB engine to sit idle beside the one already running.
|
|
56
60
|
*/
|
|
57
|
-
worker?: Worker;
|
|
61
|
+
worker?: Worker | (() => Worker);
|
|
58
62
|
/**
|
|
59
63
|
* Use a transport of your own. Takes precedence over `worker`; mainly a
|
|
60
64
|
* seam for tests.
|
|
@@ -97,12 +101,16 @@ export interface FirebirdBrowserOptions {
|
|
|
97
101
|
*
|
|
98
102
|
* - `'exclusive'` (default) takes a cross-tab lock and fails with
|
|
99
103
|
* {@link DatabaseLockedError} if another tab will not release it in time.
|
|
104
|
+
* - `'shared'` elects one tab to run the engine and serves the others from
|
|
105
|
+
* it, so every tab sees the same live database. Needs `worker` to be a
|
|
106
|
+
* factory rather than an instance — a follower must not build an engine it
|
|
107
|
+
* will never use.
|
|
100
108
|
* - `'allow-unsafe'` skips the lock. Only sound when at most one of the
|
|
101
109
|
* tabs writes.
|
|
102
110
|
*
|
|
103
111
|
* @default 'exclusive'
|
|
104
112
|
*/
|
|
105
|
-
multiTab?: 'exclusive' | 'allow-unsafe';
|
|
113
|
+
multiTab?: 'exclusive' | 'shared' | 'allow-unsafe';
|
|
106
114
|
/**
|
|
107
115
|
* How long to wait for another tab to release the database, in
|
|
108
116
|
* milliseconds. `Infinity` waits indefinitely.
|
|
@@ -138,12 +146,26 @@ export declare class FirebirdBrowser {
|
|
|
138
146
|
private readonly lockTimeoutMs;
|
|
139
147
|
/** Held for the connection's lifetime; released by close(). */
|
|
140
148
|
private lock;
|
|
149
|
+
/** Set only in shared mode; owns the election and the channel. */
|
|
150
|
+
private shared;
|
|
141
151
|
/**
|
|
142
152
|
* @param dbName Logical database name. Used as the IndexedDB store name
|
|
143
153
|
* and the filename inside Emscripten's virtual FS.
|
|
144
154
|
* @param options Optional configuration.
|
|
145
155
|
*/
|
|
146
156
|
constructor(dbName: string, options?: FirebirdBrowserOptions);
|
|
157
|
+
/** Build the real engine for this tab: a Worker if given one, else direct. */
|
|
158
|
+
private createLocalEngine;
|
|
159
|
+
private createEngine;
|
|
160
|
+
/**
|
|
161
|
+
* Whether this tab is the one actually running the engine.
|
|
162
|
+
*
|
|
163
|
+
* Always true unless `multiTab: 'shared'`, where exactly one tab owns the
|
|
164
|
+
* engine and the rest are served by it. Useful for deciding which tab should
|
|
165
|
+
* do work that must happen once — an import, a migration, a scheduled
|
|
166
|
+
* cleanup — rather than once per open tab.
|
|
167
|
+
*/
|
|
168
|
+
get isLeader(): boolean;
|
|
147
169
|
/** Path of the database inside Emscripten's filesystem. */
|
|
148
170
|
private get dbPath();
|
|
149
171
|
/**
|
|
@@ -172,11 +194,11 @@ export declare class FirebirdBrowser {
|
|
|
172
194
|
* await db.query('SELECT * FROM items WHERE id = ?', [1]);
|
|
173
195
|
* ```
|
|
174
196
|
*/
|
|
175
|
-
query<T extends Row = Row>(sql: string, params?: QueryParams,
|
|
197
|
+
query<T extends Row = Row>(sql: string, params?: QueryParams, options?: TransactionOptions): Promise<QueryResult<T>>;
|
|
176
198
|
/**
|
|
177
199
|
* Run a function inside an explicit transaction.
|
|
178
200
|
*/
|
|
179
|
-
transaction<T>(fn: (tx: FirebirdBrowserTransaction) => Promise<T>,
|
|
201
|
+
transaction<T>(fn: (tx: FirebirdBrowserTransaction) => Promise<T>, options?: TransactionOptions): Promise<T>;
|
|
180
202
|
/**
|
|
181
203
|
* Persist the in-memory database pages to IndexedDB.
|
|
182
204
|
* Call this periodically or before the page unloads to avoid data loss.
|
|
@@ -188,6 +210,15 @@ export declare class FirebirdBrowser {
|
|
|
188
210
|
close(): Promise<void>;
|
|
189
211
|
/** Release the cross-tab lock, if this instance holds one. */
|
|
190
212
|
private releaseLock;
|
|
213
|
+
/**
|
|
214
|
+
* Whether this tab may write the database image to IndexedDB.
|
|
215
|
+
*
|
|
216
|
+
* In shared mode only the leader may: a follower has no engine, and its
|
|
217
|
+
* `readFile` would fetch the image across the channel only to race the
|
|
218
|
+
* leader writing the same store — reintroducing the whole-image overwrite
|
|
219
|
+
* that multi-tab safety exists to prevent.
|
|
220
|
+
*/
|
|
221
|
+
private get mayPersist();
|
|
191
222
|
/** Note that the database has changed and schedule a persist. */
|
|
192
223
|
private markDirty;
|
|
193
224
|
private cancelScheduledPersist;
|
|
@@ -213,6 +244,27 @@ export declare class FirebirdBrowser {
|
|
|
213
244
|
private readonly onPageHide;
|
|
214
245
|
private ensureReady;
|
|
215
246
|
private init;
|
|
247
|
+
/**
|
|
248
|
+
* Restore the stored image if this tab owns the engine, then attach.
|
|
249
|
+
*
|
|
250
|
+
* Separate from init() because it has to run again whenever the engine
|
|
251
|
+
* changes underneath us — in shared mode a leadership change replaces the
|
|
252
|
+
* engine, and every handle it issued dies with it.
|
|
253
|
+
*
|
|
254
|
+
* The restore is guarded by {@link mayPersist} for the same reason
|
|
255
|
+
* persistence is: a follower writing its IndexedDB snapshot into the
|
|
256
|
+
* filesystem would be overwriting the leader's *live* database with a
|
|
257
|
+
* possibly older image.
|
|
258
|
+
*/
|
|
259
|
+
private openDatabase;
|
|
260
|
+
/**
|
|
261
|
+
* The engine behind this connection was replaced; attach to the new one.
|
|
262
|
+
*
|
|
263
|
+
* Called on every tab after a leadership change, promoted or not. Silence
|
|
264
|
+
* here would leave the caller holding a handle from an engine that no longer
|
|
265
|
+
* exists, and writes through it would go nowhere — visibly succeeding.
|
|
266
|
+
*/
|
|
267
|
+
private reopenAfterEngineChange;
|
|
216
268
|
}
|
|
217
269
|
/**
|
|
218
270
|
* A handle to an active transaction in the browser WASM engine.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firebird-browser.d.ts","sourceRoot":"","sources":["../../src/browser/firebird-browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"firebird-browser.d.ts","sourceRoot":"","sources":["../../src/browser/firebird-browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,9 @@ const indexeddb_vfs_1 = require("./indexeddb-vfs");
|
|
|
28
28
|
const engine_transport_1 = require("./engine-transport");
|
|
29
29
|
const worker_transport_1 = require("./worker-transport");
|
|
30
30
|
const sql_script_1 = require("./sql-script");
|
|
31
|
+
const isolation_1 = require("./isolation");
|
|
31
32
|
const db_lock_1 = require("./db-lock");
|
|
33
|
+
const shared_transport_1 = require("./shared-transport");
|
|
32
34
|
// ---------------------------------------------------------------------------
|
|
33
35
|
// Shared helpers
|
|
34
36
|
// ---------------------------------------------------------------------------
|
|
@@ -59,6 +61,8 @@ class FirebirdBrowser {
|
|
|
59
61
|
this.lifecycleAttached = false;
|
|
60
62
|
/** Held for the connection's lifetime; released by close(). */
|
|
61
63
|
this.lock = null;
|
|
64
|
+
/** Set only in shared mode; owns the election and the channel. */
|
|
65
|
+
this.shared = null;
|
|
62
66
|
this.onVisibilityChange = () => {
|
|
63
67
|
if (document.visibilityState === 'hidden') {
|
|
64
68
|
this.cancelScheduledPersist();
|
|
@@ -79,14 +83,48 @@ class FirebirdBrowser {
|
|
|
79
83
|
this.onPersistError =
|
|
80
84
|
options.onPersistError ??
|
|
81
85
|
((error) => console.error('[firebird-wasm] background persist failed', error));
|
|
82
|
-
this.engine =
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
86
|
+
this.engine = options.transport ?? this.createEngine();
|
|
87
|
+
}
|
|
88
|
+
/** Build the real engine for this tab: a Worker if given one, else direct. */
|
|
89
|
+
createLocalEngine() {
|
|
90
|
+
const worker = this.options.worker;
|
|
91
|
+
if (worker) {
|
|
92
|
+
return new worker_transport_1.WorkerTransport(typeof worker === 'function' ? worker() : worker);
|
|
93
|
+
}
|
|
94
|
+
return new engine_transport_1.DirectTransport({
|
|
95
|
+
wasmBinary: this.options.wasmBinary,
|
|
96
|
+
locateFile: this.options.locateFile,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
createEngine() {
|
|
100
|
+
if (this.multiTab !== 'shared') {
|
|
101
|
+
return this.createLocalEngine();
|
|
102
|
+
}
|
|
103
|
+
if (typeof BroadcastChannel === 'undefined') {
|
|
104
|
+
throw new Error("multiTab: 'shared' needs BroadcastChannel, which this environment " +
|
|
105
|
+
"does not have. Use 'exclusive' instead.");
|
|
106
|
+
}
|
|
107
|
+
const shared = new shared_transport_1.SharedEngineTransport({
|
|
108
|
+
dbName: this.dbName,
|
|
109
|
+
createEngine: () => this.createLocalEngine(),
|
|
110
|
+
// A follower's writes run on the leader's engine, so the leader is the
|
|
111
|
+
// only one that can know its image went stale.
|
|
112
|
+
onServedMutation: () => this.markDirty(),
|
|
113
|
+
onEngineReplaced: () => this.reopenAfterEngineChange(),
|
|
114
|
+
});
|
|
115
|
+
this.shared = shared;
|
|
116
|
+
return shared;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Whether this tab is the one actually running the engine.
|
|
120
|
+
*
|
|
121
|
+
* Always true unless `multiTab: 'shared'`, where exactly one tab owns the
|
|
122
|
+
* engine and the rest are served by it. Useful for deciding which tab should
|
|
123
|
+
* do work that must happen once — an import, a migration, a scheduled
|
|
124
|
+
* cleanup — rather than once per open tab.
|
|
125
|
+
*/
|
|
126
|
+
get isLeader() {
|
|
127
|
+
return this.shared === null || this.shared.isLeader;
|
|
90
128
|
}
|
|
91
129
|
/** Path of the database inside Emscripten's filesystem. */
|
|
92
130
|
get dbPath() {
|
|
@@ -135,16 +173,34 @@ class FirebirdBrowser {
|
|
|
135
173
|
* await db.query('SELECT * FROM items WHERE id = ?', [1]);
|
|
136
174
|
* ```
|
|
137
175
|
*/
|
|
138
|
-
async query(sql, params = [],
|
|
176
|
+
async query(sql, params = [], options = {}) {
|
|
139
177
|
await this.ensureReady();
|
|
140
|
-
|
|
178
|
+
// Without options the engine's own auto-commit transaction is used, which
|
|
179
|
+
// is one fewer round trip to the Worker. With them, the statement has to
|
|
180
|
+
// run inside a transaction that carries them — matching the Node backend,
|
|
181
|
+
// which starts one for every query.
|
|
182
|
+
if (!(0, isolation_1.hasTransactionOptions)(options)) {
|
|
183
|
+
return this.engine.query(this.dbHandle, 0, sql, params);
|
|
184
|
+
}
|
|
185
|
+
const txHandle = await this.engine.startTransaction(this.dbHandle, options);
|
|
186
|
+
try {
|
|
187
|
+
const result = await this.engine.query(this.dbHandle, txHandle, sql, params);
|
|
188
|
+
await this.engine.commit(txHandle);
|
|
189
|
+
return result;
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
// A failed commit finishes the transaction itself, so only a failure
|
|
193
|
+
// from the query leaves anything to roll back.
|
|
194
|
+
await this.engine.rollback(txHandle).catch(() => undefined);
|
|
195
|
+
throw err;
|
|
196
|
+
}
|
|
141
197
|
}
|
|
142
198
|
/**
|
|
143
199
|
* Run a function inside an explicit transaction.
|
|
144
200
|
*/
|
|
145
|
-
async transaction(fn,
|
|
201
|
+
async transaction(fn, options = {}) {
|
|
146
202
|
await this.ensureReady();
|
|
147
|
-
const txHandle = await this.engine.startTransaction(this.dbHandle);
|
|
203
|
+
const txHandle = await this.engine.startTransaction(this.dbHandle, options);
|
|
148
204
|
const tx = new FirebirdBrowserTransaction(this.engine, this.dbHandle, txHandle);
|
|
149
205
|
let result;
|
|
150
206
|
try {
|
|
@@ -173,7 +229,7 @@ class FirebirdBrowser {
|
|
|
173
229
|
* Call this periodically or before the page unloads to avoid data loss.
|
|
174
230
|
*/
|
|
175
231
|
async persist() {
|
|
176
|
-
if (!this.dbHandle)
|
|
232
|
+
if (!this.dbHandle || !this.mayPersist)
|
|
177
233
|
return;
|
|
178
234
|
// Two persists must not interleave: both read the image and write the
|
|
179
235
|
// same store, and the later one could finish first and roll the database
|
|
@@ -245,9 +301,20 @@ class FirebirdBrowser {
|
|
|
245
301
|
await lock?.release();
|
|
246
302
|
}
|
|
247
303
|
// ── Automatic persistence ─────────────────────────────────────────────
|
|
304
|
+
/**
|
|
305
|
+
* Whether this tab may write the database image to IndexedDB.
|
|
306
|
+
*
|
|
307
|
+
* In shared mode only the leader may: a follower has no engine, and its
|
|
308
|
+
* `readFile` would fetch the image across the channel only to race the
|
|
309
|
+
* leader writing the same store — reintroducing the whole-image overwrite
|
|
310
|
+
* that multi-tab safety exists to prevent.
|
|
311
|
+
*/
|
|
312
|
+
get mayPersist() {
|
|
313
|
+
return this.shared === null || this.shared.isLeader;
|
|
314
|
+
}
|
|
248
315
|
/** Note that the database has changed and schedule a persist. */
|
|
249
316
|
markDirty() {
|
|
250
|
-
if (!this.autoPersist || this.closed)
|
|
317
|
+
if (!this.autoPersist || this.closed || !this.mayPersist)
|
|
251
318
|
return;
|
|
252
319
|
if (this.persistTimer !== null) {
|
|
253
320
|
clearTimeout(this.persistTimer);
|
|
@@ -327,19 +394,56 @@ class FirebirdBrowser {
|
|
|
327
394
|
timeoutMs: this.lockTimeoutMs,
|
|
328
395
|
});
|
|
329
396
|
}
|
|
397
|
+
// 'shared' deliberately takes no lock here: the transport's election holds
|
|
398
|
+
// it, and a second request from the same tab would queue behind itself.
|
|
330
399
|
await this.engine.init();
|
|
331
|
-
await this.engine.mkdir('/data');
|
|
332
|
-
// Restore any previously persisted image into the engine's filesystem
|
|
333
|
-
// before attaching, so a reload reopens the same database.
|
|
334
400
|
await this.vfs.open(this.dbName);
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
401
|
+
await this.openDatabase();
|
|
402
|
+
this.attachLifecycleListeners();
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Restore the stored image if this tab owns the engine, then attach.
|
|
406
|
+
*
|
|
407
|
+
* Separate from init() because it has to run again whenever the engine
|
|
408
|
+
* changes underneath us — in shared mode a leadership change replaces the
|
|
409
|
+
* engine, and every handle it issued dies with it.
|
|
410
|
+
*
|
|
411
|
+
* The restore is guarded by {@link mayPersist} for the same reason
|
|
412
|
+
* persistence is: a follower writing its IndexedDB snapshot into the
|
|
413
|
+
* filesystem would be overwriting the leader's *live* database with a
|
|
414
|
+
* possibly older image.
|
|
415
|
+
*/
|
|
416
|
+
async openDatabase() {
|
|
417
|
+
await this.engine.mkdir('/data');
|
|
418
|
+
if (this.mayPersist) {
|
|
419
|
+
const stored = await this.vfs.exportDatabase();
|
|
420
|
+
if (stored.byteLength > 0) {
|
|
421
|
+
await this.engine.writeFile(this.dbPath, stored);
|
|
422
|
+
}
|
|
338
423
|
}
|
|
339
424
|
this.dbHandle = (await this.engine.exists(this.dbPath))
|
|
340
425
|
? await this.engine.attachDatabase(this.dbPath)
|
|
341
426
|
: await this.engine.createDatabase(this.dbPath);
|
|
342
|
-
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* The engine behind this connection was replaced; attach to the new one.
|
|
430
|
+
*
|
|
431
|
+
* Called on every tab after a leadership change, promoted or not. Silence
|
|
432
|
+
* here would leave the caller holding a handle from an engine that no longer
|
|
433
|
+
* exists, and writes through it would go nowhere — visibly succeeding.
|
|
434
|
+
*/
|
|
435
|
+
async reopenAfterEngineChange() {
|
|
436
|
+
if (this.closed)
|
|
437
|
+
return;
|
|
438
|
+
this.dbHandle = 0;
|
|
439
|
+
try {
|
|
440
|
+
await this.openDatabase();
|
|
441
|
+
}
|
|
442
|
+
catch (err) {
|
|
443
|
+
this.onPersistError(err instanceof Error
|
|
444
|
+
? err
|
|
445
|
+
: new Error(`could not reopen after a leadership change: ${String(err)}`));
|
|
446
|
+
}
|
|
343
447
|
}
|
|
344
448
|
}
|
|
345
449
|
exports.FirebirdBrowser = FirebirdBrowser;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firebird-browser.js","sourceRoot":"","sources":["../../src/browser/firebird-browser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"firebird-browser.js","sourceRoot":"","sources":["../../src/browser/firebird-browser.ts"],"names":[],"mappings":"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"}
|
package/dist/browser/index.d.ts
CHANGED
|
@@ -12,12 +12,17 @@ export { FirebirdBrowser, FirebirdBrowserTransaction } from './firebird-browser'
|
|
|
12
12
|
export type { FirebirdBrowserOptions, ExecResult } from './firebird-browser';
|
|
13
13
|
export { encodeParams, encodeParamValue } from './params';
|
|
14
14
|
export { firebirdTypeName } from './field-types';
|
|
15
|
+
export { isolationCode, hasTransactionOptions } from './isolation';
|
|
15
16
|
export { acquireDatabaseLock, databaseLockName, DatabaseLockedError, } from './db-lock';
|
|
16
17
|
export type { DatabaseLock, DatabaseLockOptions } from './db-lock';
|
|
17
18
|
export { splitStatements } from './sql-script';
|
|
18
19
|
export type { ScriptStatement } from './sql-script';
|
|
19
20
|
export { DirectTransport } from './engine-transport';
|
|
20
21
|
export type { EngineTransport, EngineHandle, DirectTransportOptions, } from './engine-transport';
|
|
22
|
+
export { SharedEngineTransport } from './shared-transport';
|
|
23
|
+
export type { SharedEngineTransportOptions } from './shared-transport';
|
|
24
|
+
export { electLeader } from './leader-election';
|
|
25
|
+
export type { LeaderElection, LeaderElectionOptions } from './leader-election';
|
|
21
26
|
export { WorkerTransport } from './worker-transport';
|
|
22
27
|
export type { WorkerTransportOptions } from './worker-transport';
|
|
23
28
|
export { serveEngine } from './worker-entry';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACjF,YAAY,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE7E,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EACV,eAAe,EACf,YAAY,EACZ,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EACV,QAAQ,EACR,aAAa,EACb,cAAc,GACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC/D,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,QAAQ,GACT,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EACV,WAAW,EACX,WAAW,EACX,GAAG,EACH,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACf,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACjF,YAAY,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE7E,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EACV,eAAe,EACf,YAAY,EACZ,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EACV,QAAQ,EACR,aAAa,EACb,cAAc,GACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC/D,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,QAAQ,GACT,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EACV,WAAW,EACX,WAAW,EACX,GAAG,EACH,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACf,MAAM,UAAU,CAAC"}
|
package/dist/browser/index.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* ```
|
|
11
11
|
*/
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.allocString = exports.loadFirebirdWasm = exports.IndexedDBVFS = exports.serveEngine = exports.WorkerTransport = exports.DirectTransport = exports.splitStatements = exports.DatabaseLockedError = exports.databaseLockName = exports.acquireDatabaseLock = exports.firebirdTypeName = exports.encodeParamValue = exports.encodeParams = exports.FirebirdBrowserTransaction = exports.FirebirdBrowser = void 0;
|
|
13
|
+
exports.allocString = exports.loadFirebirdWasm = exports.IndexedDBVFS = exports.serveEngine = exports.WorkerTransport = exports.electLeader = exports.SharedEngineTransport = exports.DirectTransport = exports.splitStatements = exports.DatabaseLockedError = exports.databaseLockName = exports.acquireDatabaseLock = exports.hasTransactionOptions = exports.isolationCode = exports.firebirdTypeName = exports.encodeParamValue = exports.encodeParams = exports.FirebirdBrowserTransaction = exports.FirebirdBrowser = void 0;
|
|
14
14
|
var firebird_browser_1 = require("./firebird-browser");
|
|
15
15
|
Object.defineProperty(exports, "FirebirdBrowser", { enumerable: true, get: function () { return firebird_browser_1.FirebirdBrowser; } });
|
|
16
16
|
Object.defineProperty(exports, "FirebirdBrowserTransaction", { enumerable: true, get: function () { return firebird_browser_1.FirebirdBrowserTransaction; } });
|
|
@@ -19,6 +19,9 @@ Object.defineProperty(exports, "encodeParams", { enumerable: true, get: function
|
|
|
19
19
|
Object.defineProperty(exports, "encodeParamValue", { enumerable: true, get: function () { return params_1.encodeParamValue; } });
|
|
20
20
|
var field_types_1 = require("./field-types");
|
|
21
21
|
Object.defineProperty(exports, "firebirdTypeName", { enumerable: true, get: function () { return field_types_1.firebirdTypeName; } });
|
|
22
|
+
var isolation_1 = require("./isolation");
|
|
23
|
+
Object.defineProperty(exports, "isolationCode", { enumerable: true, get: function () { return isolation_1.isolationCode; } });
|
|
24
|
+
Object.defineProperty(exports, "hasTransactionOptions", { enumerable: true, get: function () { return isolation_1.hasTransactionOptions; } });
|
|
22
25
|
var db_lock_1 = require("./db-lock");
|
|
23
26
|
Object.defineProperty(exports, "acquireDatabaseLock", { enumerable: true, get: function () { return db_lock_1.acquireDatabaseLock; } });
|
|
24
27
|
Object.defineProperty(exports, "databaseLockName", { enumerable: true, get: function () { return db_lock_1.databaseLockName; } });
|
|
@@ -27,6 +30,10 @@ var sql_script_1 = require("./sql-script");
|
|
|
27
30
|
Object.defineProperty(exports, "splitStatements", { enumerable: true, get: function () { return sql_script_1.splitStatements; } });
|
|
28
31
|
var engine_transport_1 = require("./engine-transport");
|
|
29
32
|
Object.defineProperty(exports, "DirectTransport", { enumerable: true, get: function () { return engine_transport_1.DirectTransport; } });
|
|
33
|
+
var shared_transport_1 = require("./shared-transport");
|
|
34
|
+
Object.defineProperty(exports, "SharedEngineTransport", { enumerable: true, get: function () { return shared_transport_1.SharedEngineTransport; } });
|
|
35
|
+
var leader_election_1 = require("./leader-election");
|
|
36
|
+
Object.defineProperty(exports, "electLeader", { enumerable: true, get: function () { return leader_election_1.electLeader; } });
|
|
30
37
|
var worker_transport_1 = require("./worker-transport");
|
|
31
38
|
Object.defineProperty(exports, "WorkerTransport", { enumerable: true, get: function () { return worker_transport_1.WorkerTransport; } });
|
|
32
39
|
var worker_entry_1 = require("./worker-entry");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,uDAAiF;AAAxE,mHAAA,eAAe,OAAA;AAAE,8HAAA,0BAA0B,OAAA;AAGpD,mCAA0D;AAAjD,sGAAA,YAAY,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAEvC,6CAAiD;AAAxC,+GAAA,gBAAgB,OAAA;AAEzB,qCAImB;AAHjB,8GAAA,mBAAmB,OAAA;AACnB,2GAAA,gBAAgB,OAAA;AAChB,8GAAA,mBAAmB,OAAA;AAIrB,2CAA+C;AAAtC,6GAAA,eAAe,OAAA;AAGxB,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AAOxB,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AAGxB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AAQpB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AAGrB,8CAA+D;AAAtD,+GAAA,gBAAgB,OAAA;AAAE,0GAAA,WAAW,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,uDAAiF;AAAxE,mHAAA,eAAe,OAAA;AAAE,8HAAA,0BAA0B,OAAA;AAGpD,mCAA0D;AAAjD,sGAAA,YAAY,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAEvC,6CAAiD;AAAxC,+GAAA,gBAAgB,OAAA;AAEzB,yCAAmE;AAA1D,0GAAA,aAAa,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAE7C,qCAImB;AAHjB,8GAAA,mBAAmB,OAAA;AACnB,2GAAA,gBAAgB,OAAA;AAChB,8GAAA,mBAAmB,OAAA;AAIrB,2CAA+C;AAAtC,6GAAA,eAAe,OAAA;AAGxB,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AAOxB,uDAA2D;AAAlD,yHAAA,qBAAqB,OAAA;AAG9B,qDAAgD;AAAvC,8GAAA,WAAW,OAAA;AAGpB,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AAGxB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AAQpB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AAGrB,8CAA+D;AAAtD,+GAAA,gBAAgB,OAAA;AAAE,0GAAA,WAAW,OAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* isolation.ts – mapping TransactionOptions onto the engine's TPB codes.
|
|
3
|
+
*
|
|
4
|
+
* These numbers are the contract with `fb_start_transaction_ex` in
|
|
5
|
+
* `wasm/fb_wasm_api.cpp` and must not be reordered. They are not Firebird's
|
|
6
|
+
* own `isc_tpb_*` values — the C side translates — because those are an
|
|
7
|
+
* engine-internal detail that has no business crossing into JavaScript.
|
|
8
|
+
*/
|
|
9
|
+
import type { TransactionOptions } from '../types';
|
|
10
|
+
/** Wire values for {@link IsolationLevel}, plus 0 for "engine default". */
|
|
11
|
+
export declare const enum IsolationCode {
|
|
12
|
+
Default = 0,
|
|
13
|
+
ReadCommitted = 1,
|
|
14
|
+
Snapshot = 2,
|
|
15
|
+
SnapshotTableStability = 3
|
|
16
|
+
}
|
|
17
|
+
/** The isolation code for `options`, or Default when none was asked for. */
|
|
18
|
+
export declare function isolationCode(options: TransactionOptions): IsolationCode;
|
|
19
|
+
/** Whether `options` asks for anything the engine default would not give. */
|
|
20
|
+
export declare function hasTransactionOptions(options: TransactionOptions): boolean;
|
|
21
|
+
//# sourceMappingURL=isolation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolation.d.ts","sourceRoot":"","sources":["../../src/browser/isolation.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnE,2EAA2E;AAC3E,0BAAkB,aAAa;IAC7B,OAAO,IAAI;IACX,aAAa,IAAI;IACjB,QAAQ,IAAI;IACZ,sBAAsB,IAAI;CAC3B;AAUD,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,OAAO,EAAE,kBAAkB,GAAG,aAAa,CAaxE;AAED,6EAA6E;AAC7E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAE1E"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* isolation.ts – mapping TransactionOptions onto the engine's TPB codes.
|
|
4
|
+
*
|
|
5
|
+
* These numbers are the contract with `fb_start_transaction_ex` in
|
|
6
|
+
* `wasm/fb_wasm_api.cpp` and must not be reordered. They are not Firebird's
|
|
7
|
+
* own `isc_tpb_*` values — the C side translates — because those are an
|
|
8
|
+
* engine-internal detail that has no business crossing into JavaScript.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.isolationCode = isolationCode;
|
|
12
|
+
exports.hasTransactionOptions = hasTransactionOptions;
|
|
13
|
+
const CODES = {
|
|
14
|
+
READ_COMMITTED: 1 /* IsolationCode.ReadCommitted */,
|
|
15
|
+
SNAPSHOT: 2 /* IsolationCode.Snapshot */,
|
|
16
|
+
// Firebird calls this CONSISTENCY; the name here matches the Node backend,
|
|
17
|
+
// which has always exposed SNAPSHOT_TABLE_STABILITY for the same thing.
|
|
18
|
+
SNAPSHOT_TABLE_STABILITY: 3 /* IsolationCode.SnapshotTableStability */,
|
|
19
|
+
};
|
|
20
|
+
/** The isolation code for `options`, or Default when none was asked for. */
|
|
21
|
+
function isolationCode(options) {
|
|
22
|
+
const level = options.isolationLevel;
|
|
23
|
+
if (level === undefined)
|
|
24
|
+
return 0 /* IsolationCode.Default */;
|
|
25
|
+
const code = CODES[level];
|
|
26
|
+
if (code === undefined) {
|
|
27
|
+
// Reachable from JavaScript callers, who have no compiler to stop them.
|
|
28
|
+
throw new Error(`Unknown isolation level "${String(level)}"; expected one of ` +
|
|
29
|
+
Object.keys(CODES).join(', '));
|
|
30
|
+
}
|
|
31
|
+
return code;
|
|
32
|
+
}
|
|
33
|
+
/** Whether `options` asks for anything the engine default would not give. */
|
|
34
|
+
function hasTransactionOptions(options) {
|
|
35
|
+
return options.isolationLevel !== undefined || options.readOnly === true;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=isolation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolation.js","sourceRoot":"","sources":["../../src/browser/isolation.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAqBH,sCAaC;AAGD,sDAEC;AA3BD,MAAM,KAAK,GAA0C;IACnD,cAAc,qCAA6B;IAC3C,QAAQ,gCAAwB;IAChC,2EAA2E;IAC3E,wEAAwE;IACxE,wBAAwB,8CAAsC;CAC/D,CAAC;AAEF,4EAA4E;AAC5E,SAAgB,aAAa,CAAC,OAA2B;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC;IACrC,IAAI,KAAK,KAAK,SAAS;QAAE,qCAA6B;IAEtD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,wEAAwE;QACxE,MAAM,IAAI,KAAK,CACb,4BAA4B,MAAM,CAAC,KAAK,CAAC,qBAAqB;YAC5D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAChC,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6EAA6E;AAC7E,SAAgB,qBAAqB,CAAC,OAA2B;IAC/D,OAAO,OAAO,CAAC,cAAc,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* leader-election.ts – exactly one tab owns the engine; the rest wait.
|
|
3
|
+
*
|
|
4
|
+
* Built on the same Web Lock that {@link acquireDatabaseLock} already uses for
|
|
5
|
+
* multi-tab *safety*, because election is the same problem viewed from the
|
|
6
|
+
* other side. Refusing the second tab and serving it from the first differ
|
|
7
|
+
* only in what the loser does after losing.
|
|
8
|
+
*
|
|
9
|
+
* Every participant requests the lock and never gives it back voluntarily.
|
|
10
|
+
* Whoever holds it is the leader; everyone else is queued behind it. When the
|
|
11
|
+
* leader's context dies — closed, crashed, killed while backgrounded — the
|
|
12
|
+
* browser releases the lock and the next waiter is granted it and promoted.
|
|
13
|
+
* There is no heartbeat, no lease to expire, and no way to observe two leaders
|
|
14
|
+
* at once, because the browser will not grant an exclusive lock twice.
|
|
15
|
+
*/
|
|
16
|
+
/** A participant in the election for one database. */
|
|
17
|
+
export interface LeaderElection {
|
|
18
|
+
/** Whether this context currently holds the lock. */
|
|
19
|
+
readonly isLeader: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Resolves the moment this context becomes leader.
|
|
22
|
+
*
|
|
23
|
+
* Already-resolved if it is the leader; otherwise pending until the current
|
|
24
|
+
* leader goes away. Never rejects on losing — losing is the normal case.
|
|
25
|
+
*/
|
|
26
|
+
readonly promoted: Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Whether exclusion is actually enforced.
|
|
29
|
+
*
|
|
30
|
+
* `false` where the Web Locks API is missing, in which case every
|
|
31
|
+
* participant believes it is the leader. See {@link acquireDatabaseLock}.
|
|
32
|
+
*/
|
|
33
|
+
readonly enforced: boolean;
|
|
34
|
+
/** Stop participating, releasing the lock if this context holds it. */
|
|
35
|
+
resign(): Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
/** Options for {@link electLeader}. */
|
|
38
|
+
export interface LeaderElectionOptions {
|
|
39
|
+
/**
|
|
40
|
+
* Called once when this context is promoted.
|
|
41
|
+
*
|
|
42
|
+
* Runs before {@link LeaderElection.promoted} resolves, so a leader can
|
|
43
|
+
* finish standing up its engine before anyone is told it exists.
|
|
44
|
+
*/
|
|
45
|
+
onPromoted?: () => void | Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Join the election for `dbName`.
|
|
49
|
+
*
|
|
50
|
+
* Returns as soon as participation has *started*, not when it is won — a
|
|
51
|
+
* follower must be usable immediately, and the first thing it does is proxy
|
|
52
|
+
* to whoever is already leading.
|
|
53
|
+
*/
|
|
54
|
+
export declare function electLeader(dbName: string, options?: LeaderElectionOptions): LeaderElection;
|
|
55
|
+
//# sourceMappingURL=leader-election.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leader-election.d.ts","sourceRoot":"","sources":["../../src/browser/leader-election.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,uEAAuE;IACvE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,uCAAuC;AACvC,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,qBAA0B,GAClC,cAAc,CAyChB"}
|