firebird-wasm 0.7.0 → 0.9.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.
Files changed (99) hide show
  1. package/CHANGELOG.md +266 -0
  2. package/README.md +31 -15
  3. package/dist/.tsbuildinfo.build +1 -1
  4. package/dist/browser/engine-transport.d.ts +2 -0
  5. package/dist/browser/engine-transport.d.ts.map +1 -1
  6. package/dist/browser/engine-transport.js +43 -11
  7. package/dist/browser/engine-transport.js.map +1 -1
  8. package/dist/browser/firebird-browser.d.ts.map +1 -1
  9. package/dist/browser/firebird-browser.js +59 -20
  10. package/dist/browser/firebird-browser.js.map +1 -1
  11. package/dist/browser/index.d.ts +3 -3
  12. package/dist/browser/index.d.ts.map +1 -1
  13. package/dist/browser/index.js +6 -3
  14. package/dist/browser/index.js.map +1 -1
  15. package/dist/browser/params.d.ts +8 -2
  16. package/dist/browser/params.d.ts.map +1 -1
  17. package/dist/browser/params.js +14 -5
  18. package/dist/browser/params.js.map +1 -1
  19. package/dist/browser/serve-engine.d.ts +30 -0
  20. package/dist/browser/serve-engine.d.ts.map +1 -0
  21. package/dist/browser/serve-engine.js +93 -0
  22. package/dist/browser/serve-engine.js.map +1 -0
  23. package/dist/browser/worker-entry.d.ts +8 -22
  24. package/dist/browser/worker-entry.d.ts.map +1 -1
  25. package/dist/browser/worker-entry.js +18 -79
  26. package/dist/browser/worker-entry.js.map +1 -1
  27. package/dist/electric/apply.d.ts +53 -0
  28. package/dist/electric/apply.d.ts.map +1 -0
  29. package/dist/electric/apply.js +88 -0
  30. package/dist/electric/apply.js.map +1 -0
  31. package/dist/electric/index.d.ts +133 -0
  32. package/dist/electric/index.d.ts.map +1 -0
  33. package/dist/electric/index.js +378 -0
  34. package/dist/electric/index.js.map +1 -0
  35. package/dist/electric/serial.d.ts +20 -0
  36. package/dist/electric/serial.d.ts.map +1 -0
  37. package/dist/electric/serial.js +29 -0
  38. package/dist/electric/serial.js.map +1 -0
  39. package/dist/electric/values.d.ts +65 -0
  40. package/dist/electric/values.d.ts.map +1 -0
  41. package/dist/electric/values.js +257 -0
  42. package/dist/electric/values.js.map +1 -0
  43. package/dist/electric/writes.d.ts +99 -0
  44. package/dist/electric/writes.d.ts.map +1 -0
  45. package/dist/electric/writes.js +282 -0
  46. package/dist/electric/writes.js.map +1 -0
  47. package/dist/electric-server/capture.d.ts +51 -0
  48. package/dist/electric-server/capture.d.ts.map +1 -0
  49. package/dist/electric-server/capture.js +224 -0
  50. package/dist/electric-server/capture.js.map +1 -0
  51. package/dist/electric-server/catalog.d.ts +61 -0
  52. package/dist/electric-server/catalog.d.ts.map +1 -0
  53. package/dist/electric-server/catalog.js +137 -0
  54. package/dist/electric-server/catalog.js.map +1 -0
  55. package/dist/electric-server/index.d.ts +85 -0
  56. package/dist/electric-server/index.d.ts.map +1 -0
  57. package/dist/electric-server/index.js +528 -0
  58. package/dist/electric-server/index.js.map +1 -0
  59. package/dist/electric-server/where.d.ts +30 -0
  60. package/dist/electric-server/where.d.ts.map +1 -0
  61. package/dist/electric-server/where.js +243 -0
  62. package/dist/electric-server/where.js.map +1 -0
  63. package/dist/firebird.d.ts +3 -1
  64. package/dist/firebird.d.ts.map +1 -1
  65. package/dist/firebird.js +259 -22
  66. package/dist/firebird.js.map +1 -1
  67. package/dist/frameworks/query-store.d.ts +99 -0
  68. package/dist/frameworks/query-store.d.ts.map +1 -0
  69. package/dist/frameworks/query-store.js +166 -0
  70. package/dist/frameworks/query-store.js.map +1 -0
  71. package/dist/index.d.ts +1 -1
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +2 -1
  74. package/dist/index.js.map +1 -1
  75. package/dist/react/index.d.ts +68 -0
  76. package/dist/react/index.d.ts.map +1 -0
  77. package/dist/react/index.js +92 -0
  78. package/dist/react/index.js.map +1 -0
  79. package/dist/repl/index.d.ts +76 -0
  80. package/dist/repl/index.d.ts.map +1 -0
  81. package/dist/repl/index.js +328 -0
  82. package/dist/repl/index.js.map +1 -0
  83. package/dist/types.d.ts +2 -1
  84. package/dist/types.d.ts.map +1 -1
  85. package/dist/version.d.ts +1 -1
  86. package/dist/version.js +1 -1
  87. package/dist/vue/index.d.ts +68 -0
  88. package/dist/vue/index.d.ts.map +1 -0
  89. package/dist/vue/index.js +107 -0
  90. package/dist/vue/index.js.map +1 -0
  91. package/dist/wasm/firebird-embedded-st.js +1 -1
  92. package/dist/wasm/firebird-embedded-st.wasm +0 -0
  93. package/dist/wasm/firebird-embedded.js +1 -1
  94. package/dist/wasm/firebird-embedded.wasm +0 -0
  95. package/dist/wasm-loader.d.ts +57 -7
  96. package/dist/wasm-loader.d.ts.map +1 -1
  97. package/dist/wasm-loader.js +106 -21
  98. package/dist/wasm-loader.js.map +1 -1
  99. package/package.json +50 -3
@@ -45,6 +45,19 @@ export interface FirebirdWasmModule {
45
45
  * {@link FirebirdWasmModule._fb_last_error}.
46
46
  */
47
47
  _fb_init(): number;
48
+ /**
49
+ * End the engine for good: detach every database (rolling back what is
50
+ * open) and shut Firebird down. `_fb_init` fails afterwards. Call
51
+ * {@link disposeFirebirdWasm} rather than this: it also ends the threaded
52
+ * build's workers and lets the module go. Returns 0, or non-zero when a
53
+ * detach or the shutdown failed.
54
+ */
55
+ _fb_dispose(): number;
56
+ /**
57
+ * The threaded build only: terminate its worker pool (wasm/post-threads.js).
58
+ * Called by {@link disposeFirebirdWasm}.
59
+ */
60
+ fbTerminateThreads?: () => void;
48
61
  /**
49
62
  * Pointer to a NUL-terminated message describing the most recent failure,
50
63
  * or to an empty string when the last call succeeded.
@@ -108,6 +121,12 @@ export interface FirebirdWasmModule {
108
121
  * Any change empties every database's cache.
109
122
  */
110
123
  _fb_statement_cache(size: number): number;
124
+ /**
125
+ * How many metadata changes (committed DDL, from any statement, procedure
126
+ * or attachment) the engine has seen in this module. A database's kept
127
+ * statements are emptied when it moves; reads and writes never move it.
128
+ */
129
+ _fb_metadata_commits(): number;
111
130
  /**
112
131
  * 1 runs this database's autocommit SELECTs in a read-only transaction it
113
132
  * keeps open, 0 (the default) each in one of its own; returns the previous
@@ -204,8 +223,10 @@ export interface WasmLoadOptions {
204
223
  * Workers, whose heap is a `SharedArrayBuffer` and which a browser gives
205
224
  * only to a cross-origin isolated page. `false` is
206
225
  * `firebird-embedded-st.js`: no threads and a plain `ArrayBuffer` heap, at
207
- * the cost of statement and idle timeouts. `'auto'` (the default) is `true`
208
- * in Node.
226
+ * the cost of statement and idle timeouts. `'auto'` (the default) is
227
+ * `false` since 0.9.0: the build without threads runs everywhere, starts in
228
+ * about a third of the time and was not slower in anything measured. Pass
229
+ * `true` for the threaded build (Node, or a cross-origin isolated page).
209
230
  *
210
231
  * In Node this picks the file the loader requires. In a browser the page
211
232
  * loads the glue itself, so the choice is made there:
@@ -216,22 +237,28 @@ export interface WasmLoadOptions {
216
237
  /**
217
238
  * The glue script of the build `threads` selects.
218
239
  *
219
- * `'auto'` (the default) picks the threaded build where it can run: in Node,
220
- * and in a browser page or worker that is cross-origin isolated. Elsewhere,
221
- * GitHub Pages and other static hosts that cannot send COOP/COEP among them,
222
- * it picks the build without threads, which needs neither.
240
+ * `'auto'` (the default) is the build without threads, which runs anywhere:
241
+ * it needs no `SharedArrayBuffer`, so no cross-origin isolation, and no
242
+ * Worker. `true` is the threaded build, which a page can run only when it is
243
+ * cross-origin isolated; it adds statement and idle timeouts. Until 0.9.0
244
+ * `'auto'` picked the threaded build where it could run.
223
245
  *
224
246
  * @example
225
247
  * ```js
226
248
  * // in the engine's Worker, before the transport loads the module
227
249
  * importScripts(`/wasm/${wasmGlueFile()}`);
250
+ * // threads where the page allows them
251
+ * importScripts(`/wasm/${wasmGlueFile(self.crossOriginIsolated)}`);
228
252
  * ```
229
253
  */
230
254
  export declare function wasmGlueFile(threads?: boolean | 'auto'): string;
231
255
  /**
232
256
  * Load the Firebird Embedded WASM module.
233
257
  *
234
- * The result is cached – subsequent calls return the same module instance.
258
+ * The result is cached – subsequent calls return the same module instance –
259
+ * and kept until {@link disposeFirebirdWasm}: whoever calls this owns the
260
+ * module. `FirebirdBrowser` does not call it; its transport takes the module
261
+ * with {@link acquireFirebirdWasm}, and closing the last database disposes it.
235
262
  *
236
263
  * @param options - optional overrides for locating the WASM artefacts.
237
264
  * @returns The initialised Emscripten module with Firebird bindings.
@@ -241,9 +268,32 @@ export declare function wasmGlueFile(threads?: boolean | 'auto'): string;
241
268
  * const mod = await loadFirebirdWasm();
242
269
  * mod._fb_init();
243
270
  * const dbHandle = mod._fb_create_database(allocString(mod, '/data/test.fdb'));
271
+ * // …
272
+ * await disposeFirebirdWasm(mod);
244
273
  * ```
245
274
  */
246
275
  export declare function loadFirebirdWasm(options?: WasmLoadOptions): Promise<FirebirdWasmModule>;
276
+ /**
277
+ * The module for `options`, counted as used until {@link releaseFirebirdWasm}.
278
+ * For transports: the last release of a module nobody loaded with
279
+ * {@link loadFirebirdWasm} disposes it.
280
+ */
281
+ export declare function acquireFirebirdWasm(options?: WasmLoadOptions): Promise<FirebirdWasmModule>;
282
+ /** Done with a module from {@link acquireFirebirdWasm}. */
283
+ export declare function releaseFirebirdWasm(mod: FirebirdWasmModule): Promise<void>;
284
+ /**
285
+ * End a module and let it go: every database is detached (what is open is
286
+ * rolled back) and the engine shut down, the threaded build's workers are
287
+ * terminated, the process listeners its glue added are removed, and the
288
+ * module leaves the cache, so its memory can be collected. Until 0.9.0 a
289
+ * module stayed for the life of the process; the threaded build's worker pool
290
+ * alone held about 400 MB in Node.
291
+ *
292
+ * Anything still holding the module must not use it afterwards: the engine
293
+ * refuses (`_fb_init` fails). The next {@link loadFirebirdWasm} loads a new
294
+ * one. Idempotent.
295
+ */
296
+ export declare function disposeFirebirdWasm(mod: FirebirdWasmModule): Promise<void>;
247
297
  /** Options for {@link cdnArtifacts}. */
248
298
  export interface CdnOptions {
249
299
  /** Which build; as {@link wasmGlueFile}. Default `'auto'`. */
@@ -1 +1 @@
1
- {"version":3,"file":"wasm-loader.d.ts","sourceRoot":"","sources":["../src/wasm-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wasm-loader.d.ts","sourceRoot":"","sources":["../src/wasm-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAChF,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACvF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,UAAU,CAAC;IACjE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC;IAClD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAC/C,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;CACnE;AAED,mEAAmE;AACnE,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IAEjC;;;;OAIG;IACH,QAAQ,IAAI,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,WAAW,IAAI,MAAM,CAAC;IACtB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC;;;;;;OAMG;IACH,cAAc,IAAI,MAAM,CAAC;IACzB,mFAAmF;IACnF,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC/C,gEAAgE;IAChE,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC/C,4EAA4E;IAC5E,mBAAmB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC9C;;;;;;OAMG;IACH,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1E;;;;;;;OAOG;IACH,SAAS,CACP,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC;IACV;;;;;OAKG;IACH,kBAAkB,CAChB,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC;IACV;;;;OAIG;IACH,iBAAiB,CACf,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC;IACV;;;OAGG;IACH,gBAAgB,CACd,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC;IACV;;;;;;OAMG;IACH,sBAAsB,IAAI,MAAM,CAAC;IACjC;;;;OAIG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1C;;;;OAIG;IACH,oBAAoB,IAAI,MAAM,CAAC;IAC/B;;;;;OAKG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3D;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC;;;;;;OAMG;IACH,cAAc,IAAI,MAAM,CAAC;IACzB,kFAAkF;IAClF,mBAAmB,IAAI,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,YAAY,CACV,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,GACb,MAAM,CAAC;IACV;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IACnE;;;;;;;OAOG;IACH,eAAe,CAAC,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAAC;IACpD,gEAAgE;IAChE,iBAAiB,CAAC,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAAC;IACtD,iDAAiD;IACjD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,4EAA4E;IAC5E,qBAAqB,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAClD;;;;;;OAMG;IACH,wBAAwB,CACtB,MAAM,EAAE,QAAQ,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,QAAQ,CAAC;IACZ,0EAA0E;IAC1E,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC;IACvC,4EAA4E;IAC5E,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC;IAGzC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;;OAKG;IACH,MAAM,EAAE,UAAU,CAAC;IAGnB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtD,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACzE,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAGrC,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAClC;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC5B;AA8BD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,OAAO,GAAG,MAAe,GAAG,MAAM,CAEvE;AAWD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAI7B;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAS7B;AAED,2DAA2D;AAC3D,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhF;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhF;AAgFD,wCAAwC;AACxC,MAAM,WAAW,UAAU;IACzB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B;;;OAGG;IACH,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;IACpC,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,0FAA0F;AAC1F,MAAM,WAAW,YAAY;IAC3B,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACtC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,UAAe,GAAG,YAAY,CAanE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAE9D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKxE;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAGzD"}
@@ -13,42 +13,40 @@
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.wasmGlueFile = wasmGlueFile;
15
15
  exports.loadFirebirdWasm = loadFirebirdWasm;
16
+ exports.acquireFirebirdWasm = acquireFirebirdWasm;
17
+ exports.releaseFirebirdWasm = releaseFirebirdWasm;
18
+ exports.disposeFirebirdWasm = disposeFirebirdWasm;
16
19
  exports.cdnArtifacts = cdnArtifacts;
17
20
  exports.hasSharedHeap = hasSharedHeap;
18
21
  exports.allocString = allocString;
19
22
  exports.lastError = lastError;
20
23
  const version_1 = require("./version");
21
- // ---------------------------------------------------------------------------
22
- // Module state
23
- // ---------------------------------------------------------------------------
24
- /** One module per build: the two can live side by side in one process. */
25
24
  const cachedModules = new Map();
25
+ /** Loads one at a time, so each knows which process listeners are its own. */
26
+ let loading = Promise.resolve();
26
27
  /**
27
28
  * The glue script of the build `threads` selects.
28
29
  *
29
- * `'auto'` (the default) picks the threaded build where it can run: in Node,
30
- * and in a browser page or worker that is cross-origin isolated. Elsewhere,
31
- * GitHub Pages and other static hosts that cannot send COOP/COEP among them,
32
- * it picks the build without threads, which needs neither.
30
+ * `'auto'` (the default) is the build without threads, which runs anywhere:
31
+ * it needs no `SharedArrayBuffer`, so no cross-origin isolation, and no
32
+ * Worker. `true` is the threaded build, which a page can run only when it is
33
+ * cross-origin isolated; it adds statement and idle timeouts. Until 0.9.0
34
+ * `'auto'` picked the threaded build where it could run.
33
35
  *
34
36
  * @example
35
37
  * ```js
36
38
  * // in the engine's Worker, before the transport loads the module
37
39
  * importScripts(`/wasm/${wasmGlueFile()}`);
40
+ * // threads where the page allows them
41
+ * importScripts(`/wasm/${wasmGlueFile(self.crossOriginIsolated)}`);
38
42
  * ```
39
43
  */
40
44
  function wasmGlueFile(threads = 'auto') {
41
45
  return useThreads(threads) ? 'firebird-embedded.js' : 'firebird-embedded-st.js';
42
46
  }
43
47
  function useThreads(threads) {
44
- if (threads === true || threads === false)
45
- return threads;
46
- const g = globalThis;
47
- if (typeof g['process'] !== 'undefined' && typeof g['window'] === 'undefined'
48
- && typeof g['WorkerGlobalScope'] === 'undefined') {
49
- return true;
50
- }
51
- return g['crossOriginIsolated'] === true;
48
+ // 'auto' and undefined: the build without threads, everywhere.
49
+ return threads === true;
52
50
  }
53
51
  // ---------------------------------------------------------------------------
54
52
  // Public API
@@ -56,7 +54,10 @@ function useThreads(threads) {
56
54
  /**
57
55
  * Load the Firebird Embedded WASM module.
58
56
  *
59
- * The result is cached – subsequent calls return the same module instance.
57
+ * The result is cached – subsequent calls return the same module instance –
58
+ * and kept until {@link disposeFirebirdWasm}: whoever calls this owns the
59
+ * module. `FirebirdBrowser` does not call it; its transport takes the module
60
+ * with {@link acquireFirebirdWasm}, and closing the last database disposes it.
60
61
  *
61
62
  * @param options - optional overrides for locating the WASM artefacts.
62
63
  * @returns The initialised Emscripten module with Firebird bindings.
@@ -66,13 +67,86 @@ function useThreads(threads) {
66
67
  * const mod = await loadFirebirdWasm();
67
68
  * mod._fb_init();
68
69
  * const dbHandle = mod._fb_create_database(allocString(mod, '/data/test.fdb'));
70
+ * // …
71
+ * await disposeFirebirdWasm(mod);
69
72
  * ```
70
73
  */
71
74
  async function loadFirebirdWasm(options = {}) {
75
+ const entry = moduleEntry(options);
76
+ entry.pinned = true;
77
+ return entry.module;
78
+ }
79
+ /**
80
+ * The module for `options`, counted as used until {@link releaseFirebirdWasm}.
81
+ * For transports: the last release of a module nobody loaded with
82
+ * {@link loadFirebirdWasm} disposes it.
83
+ */
84
+ async function acquireFirebirdWasm(options = {}) {
85
+ const entry = moduleEntry(options);
86
+ entry.users++;
87
+ try {
88
+ return await entry.module;
89
+ }
90
+ catch (err) {
91
+ entry.users--;
92
+ throw err;
93
+ }
94
+ }
95
+ /** Done with a module from {@link acquireFirebirdWasm}. */
96
+ async function releaseFirebirdWasm(mod) {
97
+ const entry = [...cachedModules.values()].find((e) => e.loaded === mod);
98
+ if (!entry)
99
+ return; // disposed already
100
+ entry.users = Math.max(0, entry.users - 1);
101
+ if (entry.users === 0 && !entry.pinned)
102
+ await disposeFirebirdWasm(mod);
103
+ }
104
+ /**
105
+ * End a module and let it go: every database is detached (what is open is
106
+ * rolled back) and the engine shut down, the threaded build's workers are
107
+ * terminated, the process listeners its glue added are removed, and the
108
+ * module leaves the cache, so its memory can be collected. Until 0.9.0 a
109
+ * module stayed for the life of the process; the threaded build's worker pool
110
+ * alone held about 400 MB in Node.
111
+ *
112
+ * Anything still holding the module must not use it afterwards: the engine
113
+ * refuses (`_fb_init` fails). The next {@link loadFirebirdWasm} loads a new
114
+ * one. Idempotent.
115
+ */
116
+ async function disposeFirebirdWasm(mod) {
117
+ const entry = [...cachedModules.values()].find((e) => e.loaded === mod);
118
+ if (entry)
119
+ cachedModules.delete(entry.glueFile);
120
+ mod._fb_dispose?.();
121
+ mod.fbTerminateThreads?.();
122
+ const proc = nodeProcess();
123
+ for (const [event, listener] of entry?.listeners ?? [])
124
+ proc?.removeListener(event, listener);
125
+ }
126
+ function moduleEntry(options) {
72
127
  const glueFile = wasmGlueFile(options.threads);
73
- const cached = cachedModules.get(glueFile);
74
- if (cached)
75
- return cached;
128
+ let entry = cachedModules.get(glueFile);
129
+ if (!entry) {
130
+ const created = { glueFile, module: Promise.resolve(null), users: 0, pinned: false, listeners: [] };
131
+ const load = loading.catch(() => undefined).then(() => loadModule(glueFile, options, created));
132
+ loading = load;
133
+ created.module = load;
134
+ created.module.catch(() => {
135
+ // A failed load is not kept: the next call tries again.
136
+ if (cachedModules.get(glueFile) === created)
137
+ cachedModules.delete(glueFile);
138
+ });
139
+ cachedModules.set(glueFile, created);
140
+ entry = created;
141
+ }
142
+ return entry;
143
+ }
144
+ const LISTENED = ['uncaughtException', 'unhandledRejection', 'exit'];
145
+ function nodeProcess() {
146
+ const proc = globalThis['process'];
147
+ return typeof proc?.listeners === 'function' && typeof proc.removeListener === 'function' ? proc : undefined;
148
+ }
149
+ async function loadModule(glueFile, options, entry) {
76
150
  // The Emscripten glue script exports a factory function named
77
151
  // `createFirebirdModule` (configured via `-s EXPORT_NAME` in CMake).
78
152
  // In Node it can be `require()`-d; in browsers it is expected to be
@@ -99,8 +173,19 @@ async function loadFirebirdWasm(options = {}) {
99
173
  moduleOptions['wasmBinary'] = options.wasmBinary;
100
174
  }
101
175
  }
176
+ // The glue adds process listeners in Node (the threaded build an
177
+ // uncaughtException handler), which hold the whole module: note them so a
178
+ // dispose can take them off.
179
+ const proc = nodeProcess();
180
+ const before = new Map(LISTENED.map((event) => [event, new Set(proc?.listeners(event) ?? [])]));
102
181
  const mod = await factory(moduleOptions);
103
- cachedModules.set(glueFile, mod);
182
+ for (const event of LISTENED) {
183
+ for (const listener of proc?.listeners(event) ?? []) {
184
+ if (!before.get(event).has(listener))
185
+ entry.listeners.push([event, listener]);
186
+ }
187
+ }
188
+ entry.loaded = mod;
104
189
  return mod;
105
190
  }
106
191
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"wasm-loader.js","sourceRoot":"","sources":["../src/wasm-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wasm-loader.js","sourceRoot":"","sources":["../src/wasm-loader.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "firebird-wasm",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "Firebird embedded database in WebAssembly — runs in the browser and Node, like PGlite for PostgreSQL",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -13,7 +13,32 @@
13
13
  "./browser": {
14
14
  "types": "./dist/browser/index.d.ts",
15
15
  "default": "./dist/browser/index.js"
16
- }
16
+ },
17
+ "./browser/worker-entry": {
18
+ "types": "./dist/browser/worker-entry.d.ts",
19
+ "default": "./dist/browser/worker-entry.js"
20
+ },
21
+ "./react": {
22
+ "types": "./dist/react/index.d.ts",
23
+ "default": "./dist/react/index.js"
24
+ },
25
+ "./vue": {
26
+ "types": "./dist/vue/index.d.ts",
27
+ "default": "./dist/vue/index.js"
28
+ },
29
+ "./repl": {
30
+ "types": "./dist/repl/index.d.ts",
31
+ "default": "./dist/repl/index.js"
32
+ },
33
+ "./electric": {
34
+ "types": "./dist/electric/index.d.ts",
35
+ "default": "./dist/electric/index.js"
36
+ },
37
+ "./electric-server": {
38
+ "types": "./dist/electric-server/index.d.ts",
39
+ "default": "./dist/electric-server/index.js"
40
+ },
41
+ "./package.json": "./package.json"
17
42
  },
18
43
  "scripts": {
19
44
  "build": "tsc -p tsconfig.build.json",
@@ -40,15 +65,37 @@
40
65
  "dependencies": {
41
66
  "node-firebird-driver": "^3.5.0"
42
67
  },
68
+ "peerDependencies": {
69
+ "react": ">=18",
70
+ "vue": ">=3.3",
71
+ "@electric-sql/client": ">=1.5"
72
+ },
73
+ "peerDependenciesMeta": {
74
+ "react": {
75
+ "optional": true
76
+ },
77
+ "vue": {
78
+ "optional": true
79
+ },
80
+ "@electric-sql/client": {
81
+ "optional": true
82
+ }
83
+ },
43
84
  "devDependencies": {
85
+ "@electric-sql/client": "^1.5.28",
44
86
  "@types/jest": "^29.5.12",
45
87
  "@types/node": "^20.14.10",
88
+ "@types/react": "^19.2.2",
89
+ "@types/react-dom": "^19.2.2",
46
90
  "@typescript-eslint/eslint-plugin": "^7.17.0",
47
91
  "@typescript-eslint/parser": "^7.17.0",
48
92
  "eslint": "^8.57.0",
49
93
  "jest": "^29.7.0",
94
+ "react": "^19.2.0",
95
+ "react-dom": "^19.2.0",
50
96
  "ts-jest": "^29.2.2",
51
- "typescript": "^5.5.3"
97
+ "typescript": "^5.5.3",
98
+ "vue": "^3.5.22"
52
99
  },
53
100
  "jest": {
54
101
  "preset": "ts-jest",