hyperdb-wasm 0.0.26281-dev.wasm.g39d82636

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.
@@ -0,0 +1,67 @@
1
+ export type RequestId = number;
2
+ export type EngineRequest = {
3
+ id: RequestId;
4
+ type: 'connect';
5
+ } | {
6
+ id: RequestId;
7
+ type: 'disconnect';
8
+ connection: number;
9
+ } | {
10
+ id: RequestId;
11
+ type: 'startQuery';
12
+ connection: number;
13
+ sql: string;
14
+ } | {
15
+ id: RequestId;
16
+ type: 'pollQuery';
17
+ query: number;
18
+ } | {
19
+ id: RequestId;
20
+ type: 'cancelQuery';
21
+ query: number;
22
+ } | {
23
+ id: RequestId;
24
+ type: 'releaseQuery';
25
+ query: number;
26
+ };
27
+ export type WasmResult = {
28
+ state: 'ok';
29
+ payload: Uint8Array;
30
+ } | {
31
+ state: 'pending';
32
+ } | {
33
+ state: 'chunk';
34
+ payload: Uint8Array;
35
+ } | {
36
+ state: 'done';
37
+ } | {
38
+ state: 'error';
39
+ error: string;
40
+ } | {
41
+ state: 'busy';
42
+ error: string;
43
+ };
44
+ export type WasmResponse = {
45
+ id: RequestId;
46
+ type: 'response';
47
+ result: WasmResult;
48
+ };
49
+ export type WorkerEvent = {
50
+ type: 'ready';
51
+ } | {
52
+ type: 'fatal';
53
+ error: string;
54
+ } | {
55
+ type: 'log';
56
+ text: string;
57
+ } | WasmResponse;
58
+ export interface WorkerTransport {
59
+ postMessage(message: EngineRequest, transfer?: readonly ArrayBuffer[]): void;
60
+ onMessage(listener: (message: unknown) => void): () => void;
61
+ onError(listener: (error: Error) => void): () => void;
62
+ onClose(listener: (error: Error) => void): () => void;
63
+ terminate(): void | Promise<unknown>;
64
+ }
65
+ export declare function isWasmResult(value: unknown): value is WasmResult;
66
+ export declare function isEngineRequest(value: unknown): value is EngineRequest;
67
+ export declare function isWorkerEvent(message: unknown): message is WorkerEvent;
@@ -0,0 +1,3 @@
1
+ export * from './raw.js';
2
+ export { BrowserWorker, createBrowserClient } from './browser.js';
3
+ export type { BrowserWorkerLike } from './browser.js';
@@ -0,0 +1,252 @@
1
+ // protocol.ts
2
+ function isRecord(value) {
3
+ return typeof value === "object" && value !== null;
4
+ }
5
+ function hasKeys(value, keys) {
6
+ const actual = Object.keys(value).sort();
7
+ const expected = [...keys].sort();
8
+ return actual.length === expected.length && actual.every((key, index) => key === expected[index]);
9
+ }
10
+ function isWasmResult(value) {
11
+ if (!isRecord(value) || typeof value.state !== "string") return false;
12
+ switch (value.state) {
13
+ case "ok":
14
+ case "chunk":
15
+ return hasKeys(value, ["state", "payload"]) && value.payload instanceof Uint8Array;
16
+ case "pending":
17
+ case "done":
18
+ return hasKeys(value, ["state"]);
19
+ case "error":
20
+ case "busy":
21
+ return hasKeys(value, ["state", "error"]) && typeof value.error === "string";
22
+ default:
23
+ return false;
24
+ }
25
+ }
26
+ function isWorkerEvent(message) {
27
+ if (!isRecord(message) || typeof message.type !== "string") return false;
28
+ switch (message.type) {
29
+ case "ready":
30
+ return hasKeys(message, ["type"]);
31
+ case "fatal":
32
+ return hasKeys(message, ["type", "error"]) && typeof message.error === "string";
33
+ case "log":
34
+ return hasKeys(message, ["type", "text"]) && typeof message.text === "string";
35
+ case "response":
36
+ return hasKeys(message, ["id", "type", "result"]) && Number.isSafeInteger(message.id) && isWasmResult(message.result);
37
+ default:
38
+ return false;
39
+ }
40
+ }
41
+
42
+ // client.ts
43
+ var HyperDBEngineClient = class {
44
+ transport;
45
+ pending = /* @__PURE__ */ new Map();
46
+ readyPromise;
47
+ resolveReady;
48
+ rejectReady;
49
+ nextId = 1;
50
+ failed;
51
+ unsubscribe;
52
+ constructor(transport) {
53
+ this.transport = transport;
54
+ this.readyPromise = new Promise((resolve, reject) => {
55
+ this.resolveReady = resolve;
56
+ this.rejectReady = reject;
57
+ });
58
+ this.unsubscribe = [
59
+ transport.onMessage((message) => this.onMessage(message)),
60
+ transport.onError((error) => this.fail(error)),
61
+ transport.onClose((error) => this.fail(error))
62
+ ];
63
+ }
64
+ ready() {
65
+ return this.readyPromise;
66
+ }
67
+ connect() {
68
+ return this.request({ id: this.nextId++, type: "connect" });
69
+ }
70
+ disconnect(connection) {
71
+ return this.request({ id: this.nextId++, type: "disconnect", connection });
72
+ }
73
+ startQuery(connection, sql) {
74
+ return this.request({ id: this.nextId++, type: "startQuery", connection, sql });
75
+ }
76
+ pollQuery(query) {
77
+ return this.request({ id: this.nextId++, type: "pollQuery", query });
78
+ }
79
+ cancelQuery(query) {
80
+ return this.request({ id: this.nextId++, type: "cancelQuery", query });
81
+ }
82
+ releaseQuery(query) {
83
+ return this.request({ id: this.nextId++, type: "releaseQuery", query });
84
+ }
85
+ async terminate() {
86
+ this.fail(new Error("engine worker terminated"));
87
+ await this.transport.terminate();
88
+ }
89
+ request(request) {
90
+ if (this.failed) return Promise.reject(this.failed);
91
+ return new Promise((resolve, reject) => {
92
+ this.pending.set(request.id, { resolve, reject });
93
+ try {
94
+ this.transport.postMessage(request);
95
+ } catch (error) {
96
+ this.pending.delete(request.id);
97
+ reject(error instanceof Error ? error : new Error(String(error)));
98
+ }
99
+ });
100
+ }
101
+ onMessage(message) {
102
+ if (!isWorkerEvent(message)) return;
103
+ if (message.type === "ready") {
104
+ this.resolveReady();
105
+ return;
106
+ }
107
+ if (message.type === "fatal") {
108
+ this.fail(new Error(message.error || "engine aborted"));
109
+ return;
110
+ }
111
+ if (message.type !== "response") return;
112
+ const pending = this.pending.get(message.id);
113
+ if (!pending) return;
114
+ this.pending.delete(message.id);
115
+ pending.resolve(message.result);
116
+ }
117
+ fail(error) {
118
+ if (this.failed) return;
119
+ this.failed = error;
120
+ for (const unsubscribe of this.unsubscribe.splice(0)) unsubscribe();
121
+ this.rejectReady(error);
122
+ for (const pending of this.pending.values()) pending.reject(error);
123
+ this.pending.clear();
124
+ }
125
+ };
126
+
127
+ // wasm_bindings.ts
128
+ var resultStates = ["ok", "pending", "chunk", "done", "error", "busy"];
129
+ function safeInteger(value, name) {
130
+ const number = typeof value === "bigint" && value <= BigInt(Number.MAX_SAFE_INTEGER) ? Number(value) : value;
131
+ if (typeof number !== "number" || !Number.isSafeInteger(number) || number < 0) throw new Error(`${name} must be a nonnegative safe integer`);
132
+ return number;
133
+ }
134
+ var HyperDBBindings = class {
135
+ module;
136
+ connect;
137
+ disconnect;
138
+ startQuery;
139
+ pollQuery;
140
+ cancelQuery;
141
+ releaseQuery;
142
+ resultState;
143
+ resultPayloadLength;
144
+ free;
145
+ constructor(module) {
146
+ this.module = module;
147
+ this.connect = module.cwrap("hyperdb_wasm_connect", "pointer", []);
148
+ this.disconnect = module.cwrap("hyperdb_wasm_disconnect", "pointer", ["number"]);
149
+ this.startQuery = module.cwrap("hyperdb_wasm_query_start", "pointer", ["number", "string"]);
150
+ this.pollQuery = module.cwrap("hyperdb_wasm_query_poll", "pointer", ["number"]);
151
+ this.cancelQuery = module.cwrap("hyperdb_wasm_query_cancel", "pointer", ["number"]);
152
+ this.releaseQuery = module.cwrap("hyperdb_wasm_query_release", "pointer", ["number"]);
153
+ this.resultState = module.cwrap("hyperdb_wasm_result_state", "number", ["number"]);
154
+ this.resultPayloadLength = module.cwrap("hyperdb_wasm_result_payload_len", "number", ["number"]);
155
+ this.free = module.cwrap("hyperdb_wasm_free", null, ["pointer"]);
156
+ }
157
+ handle(request) {
158
+ const pointer = safeInteger(this.invoke(request), "result pointer");
159
+ const result = this.decodeResult(pointer);
160
+ const response = { id: request.id, type: "response", result };
161
+ return { response, transfer: result.state === "chunk" ? [result.payload.buffer] : [] };
162
+ }
163
+ invoke(request) {
164
+ switch (request.type) {
165
+ case "connect":
166
+ return this.connect();
167
+ case "disconnect":
168
+ return this.disconnect(request.connection);
169
+ case "startQuery":
170
+ return this.startQuery(request.connection, request.sql);
171
+ case "pollQuery":
172
+ return this.pollQuery(request.query);
173
+ case "cancelQuery":
174
+ return this.cancelQuery(request.query);
175
+ case "releaseQuery":
176
+ return this.releaseQuery(request.query);
177
+ }
178
+ }
179
+ decodeResult(pointer) {
180
+ if (pointer === 0) return { state: "error", error: "out of memory" };
181
+ try {
182
+ const rawState = safeInteger(this.resultState(pointer), "result state");
183
+ const state = resultStates[rawState];
184
+ if (!state) return { state: "error", error: `invalid result state ${rawState}` };
185
+ const payloadLength = safeInteger(this.resultPayloadLength(pointer), "result payload length");
186
+ const payloadStart = safeInteger(pointer + 8, "result payload start");
187
+ const payloadEnd = safeInteger(payloadStart + payloadLength, "result payload end");
188
+ if (payloadEnd > this.module.HEAPU8.byteLength) throw new Error("result payload exceeds the wasm heap");
189
+ const payload = new Uint8Array(payloadLength);
190
+ payload.set(this.module.HEAPU8.subarray(payloadStart, payloadEnd));
191
+ switch (state) {
192
+ case "ok":
193
+ return { state, payload };
194
+ case "pending":
195
+ return { state };
196
+ case "chunk":
197
+ return { state, payload };
198
+ case "done":
199
+ return { state };
200
+ case "error":
201
+ return { state, error: new TextDecoder().decode(payload) };
202
+ case "busy":
203
+ return { state, error: new TextDecoder().decode(payload) };
204
+ }
205
+ } finally {
206
+ this.free(pointer);
207
+ }
208
+ }
209
+ };
210
+
211
+ // browser.ts
212
+ var BrowserWorker = class {
213
+ constructor(worker) {
214
+ this.worker = worker;
215
+ }
216
+ worker;
217
+ postMessage(message, transfer = []) {
218
+ this.worker.postMessage(message, [...transfer]);
219
+ }
220
+ onMessage(listener) {
221
+ const wrapped = (event) => listener(event.data);
222
+ this.worker.addEventListener("message", wrapped);
223
+ return () => this.worker.removeEventListener("message", wrapped);
224
+ }
225
+ onError(listener) {
226
+ const wrapped = (event) => listener(new Error(event.message || "engine worker error"));
227
+ this.worker.addEventListener("error", wrapped);
228
+ return () => this.worker.removeEventListener("error", wrapped);
229
+ }
230
+ onClose() {
231
+ return () => void 0;
232
+ }
233
+ terminate() {
234
+ this.worker.terminate();
235
+ }
236
+ };
237
+ function resolveBrowserWorkerUrl(workerUrl, engineUrl) {
238
+ const resolved = new URL(workerUrl);
239
+ resolved.searchParams.set("engineUrl", new URL(engineUrl).href);
240
+ return resolved;
241
+ }
242
+ function createBrowserClient(options = {}) {
243
+ const workerUrl = options.workerUrl ?? new URL("./browser_worker.js", import.meta.url);
244
+ const engineUrl = options.engineUrl ?? new URL("./hyperdb-wasm.js", import.meta.url);
245
+ return new HyperDBEngineClient(new BrowserWorker(new Worker(resolveBrowserWorkerUrl(workerUrl, engineUrl), { type: "classic" })));
246
+ }
247
+ export {
248
+ BrowserWorker,
249
+ HyperDBBindings,
250
+ HyperDBEngineClient,
251
+ createBrowserClient
252
+ };
package/dist/raw.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export { HyperDBEngineClient } from './client.js';
2
+ export { HyperDBBindings } from './wasm_bindings.js';
3
+ export type { EngineRequest, WasmResponse, WasmResult, WorkerEvent, WorkerTransport } from './protocol.js';
@@ -0,0 +1,3 @@
1
+ export * from './raw.js';
2
+ export { NodeWorker, createNodeClient } from './node.js';
3
+ export type { NodeClientOptions, NodeWorkerLike } from './node.js';
@@ -0,0 +1,254 @@
1
+ // protocol.ts
2
+ function isRecord(value) {
3
+ return typeof value === "object" && value !== null;
4
+ }
5
+ function hasKeys(value, keys) {
6
+ const actual = Object.keys(value).sort();
7
+ const expected = [...keys].sort();
8
+ return actual.length === expected.length && actual.every((key, index) => key === expected[index]);
9
+ }
10
+ function isWasmResult(value) {
11
+ if (!isRecord(value) || typeof value.state !== "string") return false;
12
+ switch (value.state) {
13
+ case "ok":
14
+ case "chunk":
15
+ return hasKeys(value, ["state", "payload"]) && value.payload instanceof Uint8Array;
16
+ case "pending":
17
+ case "done":
18
+ return hasKeys(value, ["state"]);
19
+ case "error":
20
+ case "busy":
21
+ return hasKeys(value, ["state", "error"]) && typeof value.error === "string";
22
+ default:
23
+ return false;
24
+ }
25
+ }
26
+ function isWorkerEvent(message) {
27
+ if (!isRecord(message) || typeof message.type !== "string") return false;
28
+ switch (message.type) {
29
+ case "ready":
30
+ return hasKeys(message, ["type"]);
31
+ case "fatal":
32
+ return hasKeys(message, ["type", "error"]) && typeof message.error === "string";
33
+ case "log":
34
+ return hasKeys(message, ["type", "text"]) && typeof message.text === "string";
35
+ case "response":
36
+ return hasKeys(message, ["id", "type", "result"]) && Number.isSafeInteger(message.id) && isWasmResult(message.result);
37
+ default:
38
+ return false;
39
+ }
40
+ }
41
+
42
+ // client.ts
43
+ var HyperDBEngineClient = class {
44
+ transport;
45
+ pending = /* @__PURE__ */ new Map();
46
+ readyPromise;
47
+ resolveReady;
48
+ rejectReady;
49
+ nextId = 1;
50
+ failed;
51
+ unsubscribe;
52
+ constructor(transport) {
53
+ this.transport = transport;
54
+ this.readyPromise = new Promise((resolve, reject) => {
55
+ this.resolveReady = resolve;
56
+ this.rejectReady = reject;
57
+ });
58
+ this.unsubscribe = [
59
+ transport.onMessage((message) => this.onMessage(message)),
60
+ transport.onError((error) => this.fail(error)),
61
+ transport.onClose((error) => this.fail(error))
62
+ ];
63
+ }
64
+ ready() {
65
+ return this.readyPromise;
66
+ }
67
+ connect() {
68
+ return this.request({ id: this.nextId++, type: "connect" });
69
+ }
70
+ disconnect(connection) {
71
+ return this.request({ id: this.nextId++, type: "disconnect", connection });
72
+ }
73
+ startQuery(connection, sql) {
74
+ return this.request({ id: this.nextId++, type: "startQuery", connection, sql });
75
+ }
76
+ pollQuery(query) {
77
+ return this.request({ id: this.nextId++, type: "pollQuery", query });
78
+ }
79
+ cancelQuery(query) {
80
+ return this.request({ id: this.nextId++, type: "cancelQuery", query });
81
+ }
82
+ releaseQuery(query) {
83
+ return this.request({ id: this.nextId++, type: "releaseQuery", query });
84
+ }
85
+ async terminate() {
86
+ this.fail(new Error("engine worker terminated"));
87
+ await this.transport.terminate();
88
+ }
89
+ request(request) {
90
+ if (this.failed) return Promise.reject(this.failed);
91
+ return new Promise((resolve, reject) => {
92
+ this.pending.set(request.id, { resolve, reject });
93
+ try {
94
+ this.transport.postMessage(request);
95
+ } catch (error) {
96
+ this.pending.delete(request.id);
97
+ reject(error instanceof Error ? error : new Error(String(error)));
98
+ }
99
+ });
100
+ }
101
+ onMessage(message) {
102
+ if (!isWorkerEvent(message)) return;
103
+ if (message.type === "ready") {
104
+ this.resolveReady();
105
+ return;
106
+ }
107
+ if (message.type === "fatal") {
108
+ this.fail(new Error(message.error || "engine aborted"));
109
+ return;
110
+ }
111
+ if (message.type !== "response") return;
112
+ const pending = this.pending.get(message.id);
113
+ if (!pending) return;
114
+ this.pending.delete(message.id);
115
+ pending.resolve(message.result);
116
+ }
117
+ fail(error) {
118
+ if (this.failed) return;
119
+ this.failed = error;
120
+ for (const unsubscribe of this.unsubscribe.splice(0)) unsubscribe();
121
+ this.rejectReady(error);
122
+ for (const pending of this.pending.values()) pending.reject(error);
123
+ this.pending.clear();
124
+ }
125
+ };
126
+
127
+ // wasm_bindings.ts
128
+ var resultStates = ["ok", "pending", "chunk", "done", "error", "busy"];
129
+ function safeInteger(value, name) {
130
+ const number = typeof value === "bigint" && value <= BigInt(Number.MAX_SAFE_INTEGER) ? Number(value) : value;
131
+ if (typeof number !== "number" || !Number.isSafeInteger(number) || number < 0) throw new Error(`${name} must be a nonnegative safe integer`);
132
+ return number;
133
+ }
134
+ var HyperDBBindings = class {
135
+ module;
136
+ connect;
137
+ disconnect;
138
+ startQuery;
139
+ pollQuery;
140
+ cancelQuery;
141
+ releaseQuery;
142
+ resultState;
143
+ resultPayloadLength;
144
+ free;
145
+ constructor(module) {
146
+ this.module = module;
147
+ this.connect = module.cwrap("hyperdb_wasm_connect", "pointer", []);
148
+ this.disconnect = module.cwrap("hyperdb_wasm_disconnect", "pointer", ["number"]);
149
+ this.startQuery = module.cwrap("hyperdb_wasm_query_start", "pointer", ["number", "string"]);
150
+ this.pollQuery = module.cwrap("hyperdb_wasm_query_poll", "pointer", ["number"]);
151
+ this.cancelQuery = module.cwrap("hyperdb_wasm_query_cancel", "pointer", ["number"]);
152
+ this.releaseQuery = module.cwrap("hyperdb_wasm_query_release", "pointer", ["number"]);
153
+ this.resultState = module.cwrap("hyperdb_wasm_result_state", "number", ["number"]);
154
+ this.resultPayloadLength = module.cwrap("hyperdb_wasm_result_payload_len", "number", ["number"]);
155
+ this.free = module.cwrap("hyperdb_wasm_free", null, ["pointer"]);
156
+ }
157
+ handle(request) {
158
+ const pointer = safeInteger(this.invoke(request), "result pointer");
159
+ const result = this.decodeResult(pointer);
160
+ const response = { id: request.id, type: "response", result };
161
+ return { response, transfer: result.state === "chunk" ? [result.payload.buffer] : [] };
162
+ }
163
+ invoke(request) {
164
+ switch (request.type) {
165
+ case "connect":
166
+ return this.connect();
167
+ case "disconnect":
168
+ return this.disconnect(request.connection);
169
+ case "startQuery":
170
+ return this.startQuery(request.connection, request.sql);
171
+ case "pollQuery":
172
+ return this.pollQuery(request.query);
173
+ case "cancelQuery":
174
+ return this.cancelQuery(request.query);
175
+ case "releaseQuery":
176
+ return this.releaseQuery(request.query);
177
+ }
178
+ }
179
+ decodeResult(pointer) {
180
+ if (pointer === 0) return { state: "error", error: "out of memory" };
181
+ try {
182
+ const rawState = safeInteger(this.resultState(pointer), "result state");
183
+ const state = resultStates[rawState];
184
+ if (!state) return { state: "error", error: `invalid result state ${rawState}` };
185
+ const payloadLength = safeInteger(this.resultPayloadLength(pointer), "result payload length");
186
+ const payloadStart = safeInteger(pointer + 8, "result payload start");
187
+ const payloadEnd = safeInteger(payloadStart + payloadLength, "result payload end");
188
+ if (payloadEnd > this.module.HEAPU8.byteLength) throw new Error("result payload exceeds the wasm heap");
189
+ const payload = new Uint8Array(payloadLength);
190
+ payload.set(this.module.HEAPU8.subarray(payloadStart, payloadEnd));
191
+ switch (state) {
192
+ case "ok":
193
+ return { state, payload };
194
+ case "pending":
195
+ return { state };
196
+ case "chunk":
197
+ return { state, payload };
198
+ case "done":
199
+ return { state };
200
+ case "error":
201
+ return { state, error: new TextDecoder().decode(payload) };
202
+ case "busy":
203
+ return { state, error: new TextDecoder().decode(payload) };
204
+ }
205
+ } finally {
206
+ this.free(pointer);
207
+ }
208
+ }
209
+ };
210
+
211
+ // node.ts
212
+ import { Worker as NativeWorker } from "node:worker_threads";
213
+ import { fileURLToPath } from "node:url";
214
+ var NodeWorker = class {
215
+ constructor(worker) {
216
+ this.worker = worker;
217
+ }
218
+ worker;
219
+ postMessage(message, transfer = []) {
220
+ this.worker.postMessage(message, transfer);
221
+ }
222
+ onMessage(listener) {
223
+ const wrapped = (message) => listener(message);
224
+ this.worker.on("message", wrapped);
225
+ return () => this.worker.off("message", wrapped);
226
+ }
227
+ onError(listener) {
228
+ const wrapped = (error) => listener(error instanceof Error ? error : new Error(String(error)));
229
+ this.worker.on("error", wrapped);
230
+ return () => this.worker.off("error", wrapped);
231
+ }
232
+ onClose(listener) {
233
+ const wrapped = (code) => listener(new Error(`engine worker exited with code ${String(code)}`));
234
+ this.worker.on("exit", wrapped);
235
+ return () => this.worker.off("exit", wrapped);
236
+ }
237
+ terminate() {
238
+ return this.worker.terminate();
239
+ }
240
+ };
241
+ function resolveNodeEnginePath(engineUrl) {
242
+ return fileURLToPath(engineUrl);
243
+ }
244
+ function createNodeClient(options = {}) {
245
+ const workerUrl = options.workerUrl ?? new URL("./node_worker.js", import.meta.url);
246
+ const engineUrl = options.engineUrl ?? resolveNodeEnginePath(new URL("./hyperdb-wasm.cjs", import.meta.url));
247
+ return new HyperDBEngineClient(new NodeWorker(new NativeWorker(workerUrl, { workerData: { engineUrl } })));
248
+ }
249
+ export {
250
+ HyperDBBindings,
251
+ HyperDBEngineClient,
252
+ NodeWorker,
253
+ createNodeClient
254
+ };
@@ -0,0 +1,27 @@
1
+ import type { EngineRequest, WasmResponse } from './protocol.js';
2
+ type CFunction = (...args: readonly unknown[]) => unknown;
3
+ export interface HyperDBWasmModule {
4
+ readonly HEAPU8: Uint8Array;
5
+ cwrap(name: string, returnType?: string | null, argumentTypes?: readonly string[]): CFunction;
6
+ }
7
+ export type BindingResponse = {
8
+ response: WasmResponse;
9
+ transfer: readonly ArrayBuffer[];
10
+ };
11
+ export declare class HyperDBBindings {
12
+ private readonly module;
13
+ private readonly connect;
14
+ private readonly disconnect;
15
+ private readonly startQuery;
16
+ private readonly pollQuery;
17
+ private readonly cancelQuery;
18
+ private readonly releaseQuery;
19
+ private readonly resultState;
20
+ private readonly resultPayloadLength;
21
+ private readonly free;
22
+ constructor(module: HyperDBWasmModule);
23
+ handle(request: EngineRequest): BindingResponse;
24
+ private invoke;
25
+ private decodeResult;
26
+ }
27
+ export {};
@@ -0,0 +1,22 @@
1
+ import type { HyperDBWasmModule } from './wasm_bindings.js';
2
+ import type { WorkerEvent } from './protocol.js';
3
+ export interface WorkerHostTransport {
4
+ postMessage(message: WorkerEvent, transfer?: readonly ArrayBuffer[]): void;
5
+ onMessage(listener: (message: unknown) => void): void;
6
+ }
7
+ export interface HyperDBWasmRuntimeModule extends HyperDBWasmModule {
8
+ HEAPU8: Uint8Array;
9
+ _malloc(size: number): number | bigint;
10
+ _hyperdb_wasm_fetch_complete(id: number, pointer: number, length: number): void;
11
+ _hyperdb_wasm_http_complete(id: number, status: number, headersPointer: number, bodyPointer: number, bodyLength: number): void;
12
+ stringToNewUTF8(value: string): number | bigint;
13
+ arguments?: string[];
14
+ print?: (text: string) => void;
15
+ printErr?: (text: string) => void;
16
+ onRuntimeInitialized?: () => void;
17
+ onAbort?: (reason: unknown) => void;
18
+ locateFile?: (path: string, prefix: string) => string;
19
+ hyperdbWasmFetchStart?: (id: number, url: string, offset: number, length: number) => void;
20
+ hyperdbWasmHttpStart?: (id: number, method: string, url: string, headers: string, bodyPointer: number | bigint, bodyLength: number) => void;
21
+ }
22
+ export declare function configureWorker(module: HyperDBWasmRuntimeModule, transport: WorkerHostTransport): void;