firebird-wasm 0.6.1 → 0.8.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 (94) hide show
  1. package/CHANGELOG.md +224 -0
  2. package/README.md +5 -4
  3. package/dist/.tsbuildinfo.build +1 -1
  4. package/dist/browser/db-lock.d.ts +11 -4
  5. package/dist/browser/db-lock.d.ts.map +1 -1
  6. package/dist/browser/db-lock.js +60 -10
  7. package/dist/browser/db-lock.js.map +1 -1
  8. package/dist/browser/engine-transport.d.ts +20 -2
  9. package/dist/browser/engine-transport.d.ts.map +1 -1
  10. package/dist/browser/engine-transport.js +111 -24
  11. package/dist/browser/engine-transport.js.map +1 -1
  12. package/dist/browser/firebird-browser.d.ts +14 -6
  13. package/dist/browser/firebird-browser.d.ts.map +1 -1
  14. package/dist/browser/firebird-browser.js +82 -33
  15. package/dist/browser/firebird-browser.js.map +1 -1
  16. package/dist/browser/index.d.ts +5 -2
  17. package/dist/browser/index.d.ts.map +1 -1
  18. package/dist/browser/index.js +14 -6
  19. package/dist/browser/index.js.map +1 -1
  20. package/dist/browser/serve-engine.d.ts +30 -0
  21. package/dist/browser/serve-engine.d.ts.map +1 -0
  22. package/dist/browser/serve-engine.js +93 -0
  23. package/dist/browser/serve-engine.js.map +1 -0
  24. package/dist/browser/worker-entry.d.ts +8 -22
  25. package/dist/browser/worker-entry.d.ts.map +1 -1
  26. package/dist/browser/worker-entry.js +18 -79
  27. package/dist/browser/worker-entry.js.map +1 -1
  28. package/dist/electric/apply.d.ts +53 -0
  29. package/dist/electric/apply.d.ts.map +1 -0
  30. package/dist/electric/apply.js +88 -0
  31. package/dist/electric/apply.js.map +1 -0
  32. package/dist/electric/index.d.ts +83 -0
  33. package/dist/electric/index.d.ts.map +1 -0
  34. package/dist/electric/index.js +210 -0
  35. package/dist/electric/index.js.map +1 -0
  36. package/dist/electric/values.d.ts +65 -0
  37. package/dist/electric/values.d.ts.map +1 -0
  38. package/dist/electric/values.js +243 -0
  39. package/dist/electric/values.js.map +1 -0
  40. package/dist/electric-server/capture.d.ts +36 -0
  41. package/dist/electric-server/capture.d.ts.map +1 -0
  42. package/dist/electric-server/capture.js +148 -0
  43. package/dist/electric-server/capture.js.map +1 -0
  44. package/dist/electric-server/catalog.d.ts +59 -0
  45. package/dist/electric-server/catalog.d.ts.map +1 -0
  46. package/dist/electric-server/catalog.js +122 -0
  47. package/dist/electric-server/catalog.js.map +1 -0
  48. package/dist/electric-server/index.d.ts +58 -0
  49. package/dist/electric-server/index.d.ts.map +1 -0
  50. package/dist/electric-server/index.js +348 -0
  51. package/dist/electric-server/index.js.map +1 -0
  52. package/dist/firebird.d.ts +3 -1
  53. package/dist/firebird.d.ts.map +1 -1
  54. package/dist/firebird.js +250 -22
  55. package/dist/firebird.js.map +1 -1
  56. package/dist/frameworks/query-store.d.ts +99 -0
  57. package/dist/frameworks/query-store.d.ts.map +1 -0
  58. package/dist/frameworks/query-store.js +166 -0
  59. package/dist/frameworks/query-store.js.map +1 -0
  60. package/dist/index.d.ts +3 -1
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +6 -1
  63. package/dist/index.js.map +1 -1
  64. package/dist/react/index.d.ts +68 -0
  65. package/dist/react/index.d.ts.map +1 -0
  66. package/dist/react/index.js +92 -0
  67. package/dist/react/index.js.map +1 -0
  68. package/dist/repl/index.d.ts +76 -0
  69. package/dist/repl/index.d.ts.map +1 -0
  70. package/dist/repl/index.js +328 -0
  71. package/dist/repl/index.js.map +1 -0
  72. package/dist/types.d.ts +2 -1
  73. package/dist/types.d.ts.map +1 -1
  74. package/dist/version.d.ts +7 -0
  75. package/dist/version.d.ts.map +1 -0
  76. package/dist/version.js +10 -0
  77. package/dist/version.js.map +1 -0
  78. package/dist/vue/index.d.ts +68 -0
  79. package/dist/vue/index.d.ts.map +1 -0
  80. package/dist/vue/index.js +107 -0
  81. package/dist/vue/index.js.map +1 -0
  82. package/dist/wasm/firebird-embedded-st.js +5 -0
  83. package/dist/wasm/firebird-embedded-st.wasm +0 -0
  84. package/dist/wasm/firebird-embedded.js +4 -1
  85. package/dist/wasm/firebird-embedded.wasm +0 -0
  86. package/dist/wasm-loader.d.ts +82 -0
  87. package/dist/wasm-loader.d.ts.map +1 -1
  88. package/dist/wasm-loader.js +101 -9
  89. package/dist/wasm-loader.js.map +1 -1
  90. package/package.json +51 -3
  91. package/dist/browser/statement-types.d.ts +0 -18
  92. package/dist/browser/statement-types.d.ts.map +0 -1
  93. package/dist/browser/statement-types.js +0 -39
  94. package/dist/browser/statement-types.js.map +0 -1
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ /**
3
+ * query-store.ts – a query's rows as a value a UI framework can watch.
4
+ *
5
+ * The React and Vue bindings are thin: each wraps a {@link QueryStore}, which
6
+ * runs a statement once (`query()`) or keeps it running (`live()`), and holds
7
+ * the latest `{ rows, error, loading }` for whoever subscribed. What both
8
+ * frameworks get wrong in the same way without it lives here once: a result
9
+ * that arrives after the component moved on to another query, a live query
10
+ * that resolves after it was stopped, and a stop and restart of the same store
11
+ * (React's StrictMode does exactly that on every mount).
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.QueryStore = void 0;
15
+ exports.resolveStatement = resolveStatement;
16
+ exports.queryKey = queryKey;
17
+ const sql_tag_1 = require("../sql-tag");
18
+ /**
19
+ * One statement with its parameters, run against one database.
20
+ *
21
+ * Immutable in what it runs: other SQL or parameters make a new store, which
22
+ * is how a stale result can never land in the wrong one.
23
+ */
24
+ class QueryStore {
25
+ constructor(db, sql, params, options = {}, placeholder) {
26
+ this.db = db;
27
+ this.sql = sql;
28
+ this.params = params;
29
+ this.options = options;
30
+ this.listeners = new Set();
31
+ /** Bumped by every start() and stop(); a result from an older run is dropped. */
32
+ this.generation = 0;
33
+ this.running = false;
34
+ /** The one-off run in flight, settled once its result or error is applied. */
35
+ this.pending = Promise.resolve();
36
+ /** For `useSyncExternalStore`: register a listener, get its removal. */
37
+ this.subscribe = (listener) => {
38
+ this.listeners.add(listener);
39
+ return () => {
40
+ this.listeners.delete(listener);
41
+ };
42
+ };
43
+ /** The current state; the same object until something changes. */
44
+ this.getSnapshot = () => this.state;
45
+ /** Run the statement again now, without waiting for an event. */
46
+ this.refresh = async () => {
47
+ if (!this.running)
48
+ return;
49
+ if (this.live === undefined) {
50
+ // A one-off query: run it again, and settle when its result is in.
51
+ this.stop();
52
+ this.start();
53
+ await this.pending;
54
+ return;
55
+ }
56
+ const live = await this.live;
57
+ if (live && this.running) {
58
+ await live.refresh();
59
+ }
60
+ else if (this.running) {
61
+ // The live query failed to start: try again.
62
+ this.stop();
63
+ this.start();
64
+ }
65
+ };
66
+ this.state = { rows: placeholder, error: undefined, loading: true };
67
+ }
68
+ /** Run the statement, and with events keep running it. Idempotent. */
69
+ start() {
70
+ if (this.running)
71
+ return;
72
+ this.running = true;
73
+ const generation = ++this.generation;
74
+ const current = () => generation === this.generation;
75
+ const events = this.options.events ?? [];
76
+ if (events.length === 0) {
77
+ this.pending = this.db.query(this.sql, this.params).then((result) => {
78
+ if (current())
79
+ this.set({ rows: result.rows, error: undefined, loading: false });
80
+ }, (error) => {
81
+ if (current())
82
+ this.fail(error);
83
+ });
84
+ return;
85
+ }
86
+ this.live = this.db
87
+ .live(this.sql, {
88
+ events: [...events],
89
+ params: this.params,
90
+ pollIntervalMs: this.options.pollIntervalMs,
91
+ onError: (error) => {
92
+ if (current())
93
+ this.fail(error);
94
+ },
95
+ }, (rows) => {
96
+ if (current())
97
+ this.set({ rows, error: undefined, loading: false });
98
+ })
99
+ .then((live) => {
100
+ // Stopped while it was starting: nobody else will release it.
101
+ if (!current()) {
102
+ void live.unsubscribe();
103
+ return undefined;
104
+ }
105
+ return live;
106
+ }, (error) => {
107
+ if (current())
108
+ this.fail(error);
109
+ return undefined;
110
+ });
111
+ }
112
+ /** Stop watching; results still in flight are dropped. start() may follow. */
113
+ stop() {
114
+ if (!this.running)
115
+ return;
116
+ this.running = false;
117
+ this.generation++;
118
+ const live = this.live;
119
+ this.live = undefined;
120
+ void live?.then((running) => running?.unsubscribe());
121
+ }
122
+ fail(error) {
123
+ this.set({
124
+ rows: this.state.rows,
125
+ error: error instanceof Error ? error : new Error(String(error)),
126
+ loading: false,
127
+ });
128
+ }
129
+ set(next) {
130
+ this.state = next;
131
+ for (const listener of [...this.listeners])
132
+ listener();
133
+ }
134
+ }
135
+ exports.QueryStore = QueryStore;
136
+ /**
137
+ * The statement a hook was given, resolved: SQL text and parameters from a
138
+ * string with parameters, or from an `sql` tagged template.
139
+ */
140
+ function resolveStatement(query, params) {
141
+ const statement = (0, sql_tag_1.toStatement)(query, params ?? []);
142
+ return { sql: statement.sql, params: statement.params };
143
+ }
144
+ /**
145
+ * A string that is equal exactly when two calls would run the same thing.
146
+ *
147
+ * Components pass a fresh parameter array on every render; comparing by
148
+ * identity would restart the query each time. Types JSON would merge are
149
+ * kept apart: a Date and its ISO string, a bigint and a number, bytes and an
150
+ * array of numbers.
151
+ */
152
+ function queryKey(sql, params, options = {}) {
153
+ return JSON.stringify([sql, params, options.events ?? [], options.pollIntervalMs ?? null], function (key, value) {
154
+ const raw = this[key];
155
+ if (typeof raw === 'bigint')
156
+ return { $bigint: raw.toString() };
157
+ if (raw instanceof Date)
158
+ return { $date: raw.getTime() };
159
+ if (raw instanceof Uint8Array)
160
+ return { $bytes: Array.from(raw) };
161
+ if (raw === undefined && Array.isArray(this))
162
+ return { $undefined: true };
163
+ return value;
164
+ });
165
+ }
166
+ //# sourceMappingURL=query-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-store.js","sourceRoot":"","sources":["../../src/frameworks/query-store.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAwLH,4CAMC;AAUD,4BAYC;AAlND,wCAAyC;AA8CzC;;;;;GAKG;AACH,MAAa,UAAU;IAUrB,YACmB,EAAqB,EAC7B,GAAW,EACX,MAAmB,EACX,UAA6B,EAAE,EAChD,WAAiB;QAJA,OAAE,GAAF,EAAE,CAAmB;QAC7B,QAAG,GAAH,GAAG,CAAQ;QACX,WAAM,GAAN,MAAM,CAAa;QACX,YAAO,GAAP,OAAO,CAAwB;QAZjC,cAAS,GAAG,IAAI,GAAG,EAAc,CAAC;QACnD,iFAAiF;QACzE,eAAU,GAAG,CAAC,CAAC;QACf,YAAO,GAAG,KAAK,CAAC;QAExB,8EAA8E;QACtE,YAAO,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;QAYnD,wEAAwE;QAC/D,cAAS,GAAG,CAAC,QAAoB,EAAgB,EAAE;YAC1D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC7B,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,kEAAkE;QACzD,gBAAW,GAAG,GAAkB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;QA+DvD,iEAAiE;QACxD,YAAO,GAAG,KAAK,IAAmB,EAAE;YAC3C,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,mEAAmE;gBACnE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,MAAM,IAAI,CAAC,OAAO,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;YAC7B,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACzB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;iBAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACxB,6CAA6C;gBAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC;QACH,CAAC,CAAC;QA7FA,IAAI,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACtE,CAAC;IAaD,uEAAuE;IACvE,KAAK;QACH,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,MAAM,UAAU,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC;QACrC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QAEzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAI,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CACzD,CAAC,MAAM,EAAE,EAAE;gBACT,IAAI,OAAO,EAAE;oBAAE,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACnF,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;gBACjB,IAAI,OAAO,EAAE;oBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC,CACF,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE;aAChB,IAAI,CACH,IAAI,CAAC,GAAG,EACR;YACE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;YAC3C,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,IAAI,OAAO,EAAE;oBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;SACF,EACD,CAAC,IAAI,EAAE,EAAE;YACP,IAAI,OAAO,EAAE;gBAAE,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,CAAC,CACF;aACA,IAAI,CACH,CAAC,IAAI,EAAE,EAAE;YACP,8DAA8D;YAC9D,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;gBACf,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;gBACxB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;YACjB,IAAI,OAAO,EAAE;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO,SAAS,CAAC;QACnB,CAAC,CACF,CAAC;IACN,CAAC;IAED,+EAA+E;IAC/E,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACtB,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IACvD,CAAC;IAsBO,IAAI,CAAC,KAAc;QACzB,IAAI,CAAC,GAAG,CAAC;YACP,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YACrB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChE,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IAEO,GAAG,CAAC,IAAmB;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YAAE,QAAQ,EAAE,CAAC;IACzD,CAAC;CACF;AA5HD,gCA4HC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAC9B,KAA2B,EAC3B,MAA+B;IAE/B,MAAM,SAAS,GAAG,IAAA,qBAAW,EAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;IACnD,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,QAAQ,CAAC,GAAW,EAAE,MAAmB,EAAE,UAA6B,EAAE;IACxF,OAAO,IAAI,CAAC,SAAS,CACnB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,EACnE,UAAyC,GAAW,EAAE,KAAc;QAClE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QAChE,IAAI,GAAG,YAAY,IAAI;YAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;QACzD,IAAI,GAAG,YAAY,UAAU;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC,CACF,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -20,6 +20,8 @@ export { sql, SqlFragment, RawSql, isSqlFragment, toStatement } from './sql-tag'
20
20
  export { statementKind } from './statement-types';
21
21
  export type { SqlTag, Statement } from './sql-tag';
22
22
  export type { FirebirdLiteOptions, QueryResult, QueryParams, Row, FieldInfo, QueryOptions, QueryDescription, StatementKind, RowMode, ArrayRow, TransactionOptions, IsolationLevel, } from './types';
23
- export { loadFirebirdWasm, allocString } from './wasm-loader';
23
+ export { loadFirebirdWasm, allocString, wasmGlueFile, hasSharedHeap, cdnArtifacts } from './wasm-loader';
24
+ export type { CdnOptions, CdnArtifacts } from './wasm-loader';
25
+ export { VERSION } from './version';
24
26
  export type { FirebirdWasmModule, WasmLoadOptions, EmscriptenFS, FbHandle, } from './wasm-loader';
25
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEnD,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,GAAG,EACH,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,OAAO,EACP,QAAQ,EACR,kBAAkB,EAClB,cAAc,GACf,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9D,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,QAAQ,GACT,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEnD,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,GAAG,EACH,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,OAAO,EACP,QAAQ,EACR,kBAAkB,EAClB,cAAc,GACf,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACzG,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,QAAQ,GACT,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -17,7 +17,7 @@
17
17
  * ```
18
18
  */
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.allocString = exports.loadFirebirdWasm = exports.statementKind = exports.toStatement = exports.isSqlFragment = exports.RawSql = exports.SqlFragment = exports.sql = exports.FirebirdTransaction = exports.FirebirdLite = void 0;
20
+ exports.VERSION = exports.cdnArtifacts = exports.hasSharedHeap = exports.wasmGlueFile = exports.allocString = exports.loadFirebirdWasm = exports.statementKind = exports.toStatement = exports.isSqlFragment = exports.RawSql = exports.SqlFragment = exports.sql = exports.FirebirdTransaction = exports.FirebirdLite = void 0;
21
21
  var firebird_1 = require("./firebird");
22
22
  Object.defineProperty(exports, "FirebirdLite", { enumerable: true, get: function () { return firebird_1.FirebirdLite; } });
23
23
  Object.defineProperty(exports, "FirebirdTransaction", { enumerable: true, get: function () { return firebird_1.FirebirdTransaction; } });
@@ -33,4 +33,9 @@ Object.defineProperty(exports, "statementKind", { enumerable: true, get: functio
33
33
  var wasm_loader_1 = require("./wasm-loader");
34
34
  Object.defineProperty(exports, "loadFirebirdWasm", { enumerable: true, get: function () { return wasm_loader_1.loadFirebirdWasm; } });
35
35
  Object.defineProperty(exports, "allocString", { enumerable: true, get: function () { return wasm_loader_1.allocString; } });
36
+ Object.defineProperty(exports, "wasmGlueFile", { enumerable: true, get: function () { return wasm_loader_1.wasmGlueFile; } });
37
+ Object.defineProperty(exports, "hasSharedHeap", { enumerable: true, get: function () { return wasm_loader_1.hasSharedHeap; } });
38
+ Object.defineProperty(exports, "cdnArtifacts", { enumerable: true, get: function () { return wasm_loader_1.cdnArtifacts; } });
39
+ var version_1 = require("./version");
40
+ Object.defineProperty(exports, "VERSION", { enumerable: true, get: function () { return version_1.VERSION; } });
36
41
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;AAEH,uCAA+D;AAAtD,wGAAA,YAAY,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AAE1C,qCAAiF;AAAxE,8FAAA,GAAG,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,iGAAA,MAAM,OAAA;AAAE,wGAAA,aAAa,OAAA;AAAE,sGAAA,WAAW,OAAA;AAC7D,qDAAkD;AAAzC,gHAAA,aAAa,OAAA;AAkBtB,2CAA2C;AAC3C,6CAA8D;AAArD,+GAAA,gBAAgB,OAAA;AAAE,0GAAA,WAAW,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;AAEH,uCAA+D;AAAtD,wGAAA,YAAY,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AAE1C,qCAAiF;AAAxE,8FAAA,GAAG,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,iGAAA,MAAM,OAAA;AAAE,wGAAA,aAAa,OAAA;AAAE,sGAAA,WAAW,OAAA;AAC7D,qDAAkD;AAAzC,gHAAA,aAAa,OAAA;AAkBtB,2CAA2C;AAC3C,6CAAyG;AAAhG,+GAAA,gBAAgB,OAAA;AAAE,0GAAA,WAAW,OAAA;AAAE,2GAAA,YAAY,OAAA;AAAE,4GAAA,aAAa,OAAA;AAAE,2GAAA,YAAY,OAAA;AAEjF,qCAAoC;AAA3B,kGAAA,OAAO,OAAA"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * firebird-wasm/react – hooks that keep a component in step with a query.
3
+ *
4
+ * ```tsx
5
+ * import { FirebirdProvider, useLiveQuery } from 'firebird-wasm/react';
6
+ *
7
+ * <FirebirdProvider db={db}><Todos /></FirebirdProvider>
8
+ *
9
+ * function Todos() {
10
+ * const { rows, error } = useLiveQuery<{ ID: number; TITLE: string }>(
11
+ * 'SELECT id, title FROM todos ORDER BY id', { events: ['todos'] });
12
+ * if (error) return <p>{error.message}</p>;
13
+ * return <ul>{rows?.map((r) => <li key={r.ID}>{r.TITLE}</li>)}</ul>;
14
+ * }
15
+ * ```
16
+ *
17
+ * React 18 or later (`useSyncExternalStore`), a peer dependency the package
18
+ * does not install for you.
19
+ */
20
+ import type { ReactNode } from 'react';
21
+ import type { QueryableDatabase, QueryState } from '../frameworks/query-store';
22
+ import type { SqlFragment } from '../sql-tag';
23
+ import type { QueryParams, Row } from '../types';
24
+ export type { QueryableDatabase, QueryState } from '../frameworks/query-store';
25
+ /** Makes `db` the database of every hook below it. */
26
+ export declare function FirebirdProvider(props: {
27
+ db: QueryableDatabase;
28
+ children?: ReactNode;
29
+ }): import("react").FunctionComponentElement<import("react").ProviderProps<QueryableDatabase | null>>;
30
+ /** The database a `FirebirdProvider` above this component provides. */
31
+ export declare function useFirebird<D extends QueryableDatabase = QueryableDatabase>(): D;
32
+ /** What `useQuery` and `useLiveQuery` return. */
33
+ export interface QueryHookResult<T> extends QueryState<T> {
34
+ /** Run the statement again now. */
35
+ refresh(): Promise<void>;
36
+ }
37
+ /** Options of {@link useQuery}. */
38
+ export interface UseQueryOptions {
39
+ /** A database other than the provider's. */
40
+ db?: QueryableDatabase;
41
+ }
42
+ /** Options of {@link useLiveQuery}. */
43
+ export interface UseLiveQueryOptions extends UseQueryOptions {
44
+ /** Event names whose firing re-runs the statement (`POST_EVENT`). */
45
+ events: readonly string[];
46
+ /** Parameters, when the statement is a string with `?` placeholders. */
47
+ params?: QueryParams;
48
+ /** How often to poll for events, in milliseconds. @default 250 */
49
+ pollIntervalMs?: number;
50
+ }
51
+ /**
52
+ * Run a statement and render its rows. It runs again when the SQL or the
53
+ * parameters change (by value: a new array with the same values does not).
54
+ *
55
+ * ```tsx
56
+ * const { rows, loading } = useQuery('SELECT * FROM todos WHERE done = ?', [false]);
57
+ * const { rows } = useQuery(sql`SELECT * FROM todos WHERE id = ${id}`);
58
+ * ```
59
+ */
60
+ export declare function useQuery<T extends Row = Row>(query: string | SqlFragment, params?: QueryParams, options?: UseQueryOptions): QueryHookResult<T>;
61
+ /**
62
+ * Like {@link useQuery}, and the statement runs again each time one of
63
+ * `events` fires: `FirebirdBrowser.live()` under a hook. A trigger posts
64
+ * the events (`POST_EVENT 'todos'` after insert, update and delete), or the
65
+ * code that wrote calls `db.notify()`.
66
+ */
67
+ export declare function useLiveQuery<T extends Row = Row>(query: string | SqlFragment, options: UseLiveQueryOptions): QueryHookResult<T>;
68
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAWH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAqB,MAAM,2BAA2B,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEjD,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI/E,sDAAsD;AACtD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IAAE,EAAE,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,qGAEtF;AAED,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,KAAK,CAAC,CAShF;AAED,iDAAiD;AACjD,MAAM,WAAW,eAAe,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACvD,mCAAmC;IACnC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,mCAAmC;AACnC,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,EAAE,CAAC,EAAE,iBAAiB,CAAC;CACxB;AAED,uCAAuC;AACvC,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,qEAAqE;IACrE,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,wEAAwE;IACxE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,EAC1C,KAAK,EAAE,MAAM,GAAG,WAAW,EAC3B,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,GAAE,eAAoB,GAC5B,eAAe,CAAC,CAAC,CAAC,CAEpB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,EAC9C,KAAK,EAAE,MAAM,GAAG,WAAW,EAC3B,OAAO,EAAE,mBAAmB,GAC3B,eAAe,CAAC,CAAC,CAAC,CAQpB"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ /**
3
+ * firebird-wasm/react – hooks that keep a component in step with a query.
4
+ *
5
+ * ```tsx
6
+ * import { FirebirdProvider, useLiveQuery } from 'firebird-wasm/react';
7
+ *
8
+ * <FirebirdProvider db={db}><Todos /></FirebirdProvider>
9
+ *
10
+ * function Todos() {
11
+ * const { rows, error } = useLiveQuery<{ ID: number; TITLE: string }>(
12
+ * 'SELECT id, title FROM todos ORDER BY id', { events: ['todos'] });
13
+ * if (error) return <p>{error.message}</p>;
14
+ * return <ul>{rows?.map((r) => <li key={r.ID}>{r.TITLE}</li>)}</ul>;
15
+ * }
16
+ * ```
17
+ *
18
+ * React 18 or later (`useSyncExternalStore`), a peer dependency the package
19
+ * does not install for you.
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.FirebirdProvider = FirebirdProvider;
23
+ exports.useFirebird = useFirebird;
24
+ exports.useQuery = useQuery;
25
+ exports.useLiveQuery = useLiveQuery;
26
+ const react_1 = require("react");
27
+ const query_store_1 = require("../frameworks/query-store");
28
+ const FirebirdContext = (0, react_1.createContext)(null);
29
+ /** Makes `db` the database of every hook below it. */
30
+ function FirebirdProvider(props) {
31
+ return (0, react_1.createElement)(FirebirdContext.Provider, { value: props.db }, props.children);
32
+ }
33
+ /** The database a `FirebirdProvider` above this component provides. */
34
+ function useFirebird() {
35
+ const db = (0, react_1.useContext)(FirebirdContext);
36
+ if (db === null) {
37
+ throw new Error('useFirebird() found no database: wrap the component in <FirebirdProvider db={…}>, ' +
38
+ 'or pass { db } to the hook');
39
+ }
40
+ return db;
41
+ }
42
+ /**
43
+ * Run a statement and render its rows. It runs again when the SQL or the
44
+ * parameters change (by value: a new array with the same values does not).
45
+ *
46
+ * ```tsx
47
+ * const { rows, loading } = useQuery('SELECT * FROM todos WHERE done = ?', [false]);
48
+ * const { rows } = useQuery(sql`SELECT * FROM todos WHERE id = ${id}`);
49
+ * ```
50
+ */
51
+ function useQuery(query, params, options = {}) {
52
+ return useStore(options.db, query, params, {});
53
+ }
54
+ /**
55
+ * Like {@link useQuery}, and the statement runs again each time one of
56
+ * `events` fires: `FirebirdBrowser.live()` under a hook. A trigger posts
57
+ * the events (`POST_EVENT 'todos'` after insert, update and delete), or the
58
+ * code that wrote calls `db.notify()`.
59
+ */
60
+ function useLiveQuery(query, options) {
61
+ if (options.events.length === 0) {
62
+ throw new RangeError('useLiveQuery() needs at least one event name; useQuery() runs a statement once');
63
+ }
64
+ return useStore(options.db, query, options.params, {
65
+ events: options.events,
66
+ pollIntervalMs: options.pollIntervalMs,
67
+ });
68
+ }
69
+ function useStore(explicitDb, query, params, storeOptions) {
70
+ const provided = (0, react_1.useContext)(FirebirdContext);
71
+ const db = explicitDb ?? provided;
72
+ if (db === null) {
73
+ throw new Error('No database for this query: wrap the component in <FirebirdProvider db={…}>, ' +
74
+ 'or pass { db } to the hook');
75
+ }
76
+ const statement = (0, query_store_1.resolveStatement)(query, params);
77
+ const key = (0, query_store_1.queryKey)(statement.sql, statement.params, storeOptions);
78
+ // The last store this component ran, for its rows while the next one loads.
79
+ const previous = (0, react_1.useRef)(null);
80
+ const store = (0, react_1.useMemo)(() => new query_store_1.QueryStore(db, statement.sql, statement.params, storeOptions, previous.current?.getSnapshot().rows),
81
+ // `key` stands for the statement, its parameters and the options, which
82
+ // are new objects on every render.
83
+ [db, key]);
84
+ (0, react_1.useEffect)(() => {
85
+ previous.current = store;
86
+ store.start();
87
+ return () => store.stop();
88
+ }, [store]);
89
+ const state = (0, react_1.useSyncExternalStore)(store.subscribe, store.getSnapshot, store.getSnapshot);
90
+ return (0, react_1.useMemo)(() => ({ ...state, refresh: store.refresh }), [state, store]);
91
+ }
92
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * firebird-wasm/repl – an interactive SQL console as a custom element.
3
+ *
4
+ * ```js
5
+ * import { defineFirebirdRepl } from 'firebird-wasm/repl';
6
+ *
7
+ * defineFirebirdRepl(); // registers <firebird-repl>
8
+ * document.querySelector('firebird-repl').db = db;
9
+ * ```
10
+ *
11
+ * A custom element, so it works the same in plain pages, React and Vue: give
12
+ * it a database through its `db` property. Type SQL, run it with
13
+ * Ctrl+Enter (⌘+Enter on a Mac) or the Run button; a script runs statement by
14
+ * statement (`SET TERM` included) and stops at the first error. ArrowUp on
15
+ * the first line and ArrowDown on the last walk the history.
16
+ *
17
+ * Every value is written as text, never as HTML, so a row cannot inject
18
+ * markup into the page. The element draws in its own shadow root; colours
19
+ * follow `color-scheme` and can be set with `--firebird-repl-*` properties.
20
+ *
21
+ * Nothing runs on import: the class is made by {@link defineFirebirdRepl},
22
+ * so importing this module where there is no DOM (Node, server rendering) is
23
+ * harmless.
24
+ */
25
+ import type { ArrayRow, FieldInfo, QueryResult } from '../types';
26
+ /** What the console needs of a database: `FirebirdBrowser` has it. */
27
+ export interface ReplDatabase {
28
+ query(sql: string, params: unknown[], options: {
29
+ rowMode: 'array';
30
+ }): Promise<QueryResult<ArrayRow>>;
31
+ /** Whether a statement yields rows, before running it. */
32
+ describeQuery(sql: string): Promise<{
33
+ hasResultSet: boolean;
34
+ }>;
35
+ /**
36
+ * For a statement without rows: a transaction's `exec()` runs exactly one
37
+ * statement and reports what it changed. (`FirebirdBrowser.exec()` would
38
+ * split the statement again, cutting a PSQL body at its semicolons.)
39
+ */
40
+ transaction<T>(fn: (tx: {
41
+ exec(sql: string): Promise<{
42
+ affectedRows: number;
43
+ }>;
44
+ }) => Promise<T>): Promise<T>;
45
+ }
46
+ /** One statement the console ran, as it reports it in `firebird-repl-run`. */
47
+ export interface ReplEntry {
48
+ sql: string;
49
+ /** 1-based line of the statement in what was run. */
50
+ line: number;
51
+ /** Milliseconds the statement took. */
52
+ ms: number;
53
+ fields?: FieldInfo[];
54
+ rows?: ArrayRow[];
55
+ affectedRows?: number;
56
+ error?: Error;
57
+ }
58
+ /** The element's own API, beyond HTMLElement's. */
59
+ export interface FirebirdReplElement extends HTMLElement {
60
+ /** The database statements run against. */
61
+ db: ReplDatabase | null;
62
+ /** The editor's text. */
63
+ value: string;
64
+ /** Run `script` (default: the editor's text); resolves with what each statement did. */
65
+ run(script?: string): Promise<ReplEntry[]>;
66
+ /** Empty the output. */
67
+ clear(): void;
68
+ }
69
+ /**
70
+ * Register the element under `tag` (default `firebird-repl`) and return its
71
+ * class. Calling it again returns the class already registered.
72
+ */
73
+ export declare function defineFirebirdRepl(tag?: string): {
74
+ new (): FirebirdReplElement;
75
+ };
76
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repl/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEjE,sEAAsE;AACtE,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrG,0DAA0D;IAC1D,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC/D;;;;OAIG;IACH,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;YAAE,YAAY,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC9G;AAED,8EAA8E;AAC9E,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,mDAAmD;AACnD,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,2CAA2C;IAC3C,EAAE,EAAE,YAAY,GAAG,IAAI,CAAC;IACxB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,wFAAwF;IACxF,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3C,wBAAwB;IACxB,KAAK,IAAI,IAAI,CAAC;CACf;AAiDD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,SAAkB,GAAG;IAAE,QAAQ,mBAAmB,CAAA;CAAE,CAsLzF"}