hyperdb-wasm 0.0.26311-dev.wasm.gbee0ee3d → 0.0.26312-dev.wasm.g57edd738

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/browser.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { HyperDBEngineClient } from './client.js';
2
- import type { EngineRequest, WorkerTransport } from './protocol.js';
2
+ import type { EngineRequest, InstantiationProgress, WorkerTransport } from './protocol.js';
3
3
  type BrowserListener = (event: unknown) => void;
4
4
  export interface BrowserWorkerLike {
5
5
  postMessage(message: unknown, transfer: ArrayBuffer[]): void;
@@ -10,6 +10,8 @@ export interface BrowserWorkerLike {
10
10
  export interface BrowserClientOptions {
11
11
  readonly workerUrl?: string | URL;
12
12
  readonly engineUrl?: string | URL;
13
+ readonly wasmUrl?: string | URL;
14
+ readonly onInitialisationProgress?: (progress: InstantiationProgress) => void;
13
15
  }
14
16
  export declare class BrowserWorker implements WorkerTransport {
15
17
  private readonly worker;
@@ -20,6 +22,6 @@ export declare class BrowserWorker implements WorkerTransport {
20
22
  onClose(): () => void;
21
23
  terminate(): void;
22
24
  }
23
- export declare function resolveBrowserWorkerUrl(workerUrl: string | URL, engineUrl: string | URL): URL;
25
+ export declare function resolveBrowserWorkerUrl(workerUrl: string | URL, engineUrl: string | URL, wasmUrl?: string | URL): URL;
24
26
  export declare function createBrowserClient(options?: BrowserClientOptions): HyperDBEngineClient;
25
27
  export {};
package/dist/browser.js CHANGED
@@ -43,6 +43,8 @@ function isWorkerEvent(message) {
43
43
  switch (message.type) {
44
44
  case "ready":
45
45
  return hasKeys(message, ["type"]);
46
+ case "progress":
47
+ return hasKeys(message, ["type", "bytesLoaded", "bytesTotal"]) && typeof message.bytesLoaded === "number" && Number.isSafeInteger(message.bytesLoaded) && message.bytesLoaded >= 0 && typeof message.bytesTotal === "number" && Number.isSafeInteger(message.bytesTotal) && message.bytesTotal >= 0;
46
48
  case "fatal":
47
49
  return hasKeys(message, ["type", "error"]) && typeof message.error === "string";
48
50
  case "log":
@@ -66,15 +68,8 @@ var init_client = __esm({
66
68
  "use strict";
67
69
  init_protocol();
68
70
  HyperDBEngineClient = class {
69
- transport;
70
- pending = /* @__PURE__ */ new Map();
71
- readyPromise;
72
- resolveReady;
73
- rejectReady;
74
- nextId = 1;
75
- failed;
76
- unsubscribe;
77
- constructor(transport) {
71
+ constructor(transport, onInitialisationProgress) {
72
+ this.onInitialisationProgress = onInitialisationProgress;
78
73
  this.transport = transport;
79
74
  this.readyPromise = new Promise((resolve, reject) => {
80
75
  this.resolveReady = resolve;
@@ -86,6 +81,15 @@ var init_client = __esm({
86
81
  transport.onClose((error) => this.fail(error))
87
82
  ];
88
83
  }
84
+ onInitialisationProgress;
85
+ transport;
86
+ pending = /* @__PURE__ */ new Map();
87
+ readyPromise;
88
+ resolveReady;
89
+ rejectReady;
90
+ nextId = 1;
91
+ failed;
92
+ unsubscribe;
89
93
  ready() {
90
94
  return this.readyPromise;
91
95
  }
@@ -166,6 +170,10 @@ var init_client = __esm({
166
170
  this.resolveReady();
167
171
  return;
168
172
  }
173
+ if (message.type === "progress") {
174
+ this.onInitialisationProgress?.({ bytesLoaded: message.bytesLoaded, bytesTotal: message.bytesTotal });
175
+ return;
176
+ }
169
177
  if (message.type === "fatal") {
170
178
  this.fail(new Error(message.error || "engine aborted"));
171
179
  return;
@@ -195,15 +203,19 @@ __export(browser_exports, {
195
203
  createBrowserClient: () => createBrowserClient,
196
204
  resolveBrowserWorkerUrl: () => resolveBrowserWorkerUrl
197
205
  });
198
- function resolveBrowserWorkerUrl(workerUrl, engineUrl) {
206
+ function resolveBrowserWorkerUrl(workerUrl, engineUrl, wasmUrl) {
199
207
  const resolved = new URL(workerUrl);
200
208
  resolved.searchParams.set("engineUrl", new URL(engineUrl).href);
209
+ if (wasmUrl != null) resolved.searchParams.set("wasmUrl", new URL(wasmUrl).href);
201
210
  return resolved;
202
211
  }
203
212
  function createBrowserClient(options = {}) {
204
213
  const workerUrl = options.workerUrl ?? new URL("./browser_worker.js", import.meta.url);
205
214
  const engineUrl = options.engineUrl ?? new URL("./hyperdb-wasm.js", import.meta.url);
206
- return new HyperDBEngineClient(new BrowserWorker(new Worker(resolveBrowserWorkerUrl(workerUrl, engineUrl), { type: "classic" })));
215
+ return new HyperDBEngineClient(
216
+ new BrowserWorker(new Worker(resolveBrowserWorkerUrl(workerUrl, engineUrl, options.wasmUrl), { type: "classic" })),
217
+ options.onInitialisationProgress
218
+ );
207
219
  }
208
220
  var BrowserWorker;
209
221
  var init_browser = __esm({
@@ -296,6 +296,8 @@
296
296
  var configuredEngineUrl = new URL(self.location.href).searchParams.get("engineUrl");
297
297
  var engineUrl = self.HYPERDB_WASM_ENGINE_URL ?? configuredEngineUrl ?? "hyperdb-wasm.js";
298
298
  var resolvedEngineUrl = new URL(engineUrl, self.location.href);
299
+ var configuredWasmUrl = new URL(self.location.href).searchParams.get("wasmUrl");
300
+ var resolvedWasmUrl = configuredWasmUrl == null ? new URL("hyperdb-wasm.wasm.br", resolvedEngineUrl) : new URL(configuredWasmUrl);
299
301
  function isPthreadWorker() {
300
302
  const location = self.location;
301
303
  return self.name === "em-pthread" || location.search?.includes("pthread") === true;
@@ -303,14 +305,38 @@
303
305
  if (isPthreadWorker()) {
304
306
  self.importScripts(resolvedEngineUrl.href);
305
307
  } else {
306
- const module = {
307
- locateFile: (path, prefix) => path === "hyperdb-wasm.wasm" ? new URL("hyperdb-wasm.wasm.br", resolvedEngineUrl).href : `${prefix}${path}`
308
- };
309
- self.Module = module;
310
308
  const transport = {
311
309
  postMessage: (message, transfer = []) => self.postMessage(message, [...transfer]),
312
310
  onMessage: (listener) => self.addEventListener("message", (event) => listener(event.data))
313
311
  };
312
+ const module = {
313
+ locateFile: (path, prefix) => path === "hyperdb-wasm.wasm" ? resolvedWasmUrl.href : `${prefix}${path}`,
314
+ instantiateWasm: (imports, receiveInstance) => {
315
+ void (async () => {
316
+ const response = await fetch(resolvedWasmUrl, { credentials: "same-origin" });
317
+ if (!response.ok) throw new Error(`failed to fetch HyperDB Wasm: ${response.status} ${response.statusText}`);
318
+ const bytesTotal = response.headers.has("content-encoding") ? 0 : Number(response.headers.get("content-length")) || 0;
319
+ let bytesLoaded = 0;
320
+ transport.postMessage({ type: "progress", bytesLoaded, bytesTotal });
321
+ const body = response.body?.pipeThrough(new TransformStream({
322
+ transform(chunk, controller) {
323
+ bytesLoaded += chunk.byteLength;
324
+ transport.postMessage({ type: "progress", bytesLoaded, bytesTotal });
325
+ controller.enqueue(chunk);
326
+ }
327
+ }));
328
+ const result = body == null ? await WebAssembly.instantiate(await response.arrayBuffer(), imports) : await WebAssembly.instantiateStreaming(new Response(body, response), imports);
329
+ receiveInstance(result.instance, result.module);
330
+ })().catch((error) => {
331
+ transport.postMessage({
332
+ type: "fatal",
333
+ error: `engine instantiation failed: ${error instanceof Error ? error.message : String(error)}`
334
+ });
335
+ });
336
+ return {};
337
+ }
338
+ };
339
+ self.Module = module;
314
340
  configureWorker(module, transport, (runtime) => {
315
341
  if (!runtime.OPFS) throw new Error("OPFS backend is unavailable");
316
342
  runtime.FS.mkdirTree("/opfs");
package/dist/client.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import type { WasmResult, WorkerTransport } from './protocol.js';
1
+ import type { InstantiationProgress, WasmResult, WorkerTransport } from './protocol.js';
2
2
  export declare class HyperDBEngineClient {
3
+ private readonly onInitialisationProgress?;
3
4
  private readonly transport;
4
5
  private readonly pending;
5
6
  private readonly readyPromise;
@@ -8,7 +9,7 @@ export declare class HyperDBEngineClient {
8
9
  private nextId;
9
10
  private failed;
10
11
  private readonly unsubscribe;
11
- constructor(transport: WorkerTransport);
12
+ constructor(transport: WorkerTransport, onInitialisationProgress?: ((progress: InstantiationProgress) => void) | undefined);
12
13
  ready(): Promise<void>;
13
14
  initialize(settings: string): Promise<WasmResult>;
14
15
  connect(): Promise<WasmResult>;
package/dist/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export { HyperDB, HyperDBConnection } from './api.js';
2
2
  export type { ArrowInsertOptions, BrowserCreateOptions, DatabaseCreateOptions, DatabaseMetadata, HyperDBSettingValue, HyperDBSettings } from './api.js';
3
+ export type { InstantiationProgress } from './protocol.js';
package/dist/node.js CHANGED
@@ -43,6 +43,8 @@ function isWorkerEvent(message) {
43
43
  switch (message.type) {
44
44
  case "ready":
45
45
  return hasKeys(message, ["type"]);
46
+ case "progress":
47
+ return hasKeys(message, ["type", "bytesLoaded", "bytesTotal"]) && typeof message.bytesLoaded === "number" && Number.isSafeInteger(message.bytesLoaded) && message.bytesLoaded >= 0 && typeof message.bytesTotal === "number" && Number.isSafeInteger(message.bytesTotal) && message.bytesTotal >= 0;
46
48
  case "fatal":
47
49
  return hasKeys(message, ["type", "error"]) && typeof message.error === "string";
48
50
  case "log":
@@ -66,15 +68,8 @@ var init_client = __esm({
66
68
  "use strict";
67
69
  init_protocol();
68
70
  HyperDBEngineClient = class {
69
- transport;
70
- pending = /* @__PURE__ */ new Map();
71
- readyPromise;
72
- resolveReady;
73
- rejectReady;
74
- nextId = 1;
75
- failed;
76
- unsubscribe;
77
- constructor(transport) {
71
+ constructor(transport, onInitialisationProgress) {
72
+ this.onInitialisationProgress = onInitialisationProgress;
78
73
  this.transport = transport;
79
74
  this.readyPromise = new Promise((resolve, reject) => {
80
75
  this.resolveReady = resolve;
@@ -86,6 +81,15 @@ var init_client = __esm({
86
81
  transport.onClose((error) => this.fail(error))
87
82
  ];
88
83
  }
84
+ onInitialisationProgress;
85
+ transport;
86
+ pending = /* @__PURE__ */ new Map();
87
+ readyPromise;
88
+ resolveReady;
89
+ rejectReady;
90
+ nextId = 1;
91
+ failed;
92
+ unsubscribe;
89
93
  ready() {
90
94
  return this.readyPromise;
91
95
  }
@@ -166,6 +170,10 @@ var init_client = __esm({
166
170
  this.resolveReady();
167
171
  return;
168
172
  }
173
+ if (message.type === "progress") {
174
+ this.onInitialisationProgress?.({ bytesLoaded: message.bytesLoaded, bytesTotal: message.bytesTotal });
175
+ return;
176
+ }
169
177
  if (message.type === "fatal") {
170
178
  this.fail(new Error(message.error || "engine aborted"));
171
179
  return;
@@ -195,15 +203,19 @@ __export(browser_exports, {
195
203
  createBrowserClient: () => createBrowserClient,
196
204
  resolveBrowserWorkerUrl: () => resolveBrowserWorkerUrl
197
205
  });
198
- function resolveBrowserWorkerUrl(workerUrl, engineUrl) {
206
+ function resolveBrowserWorkerUrl(workerUrl, engineUrl, wasmUrl) {
199
207
  const resolved = new URL(workerUrl);
200
208
  resolved.searchParams.set("engineUrl", new URL(engineUrl).href);
209
+ if (wasmUrl != null) resolved.searchParams.set("wasmUrl", new URL(wasmUrl).href);
201
210
  return resolved;
202
211
  }
203
212
  function createBrowserClient(options = {}) {
204
213
  const workerUrl = options.workerUrl ?? new URL("./browser_worker.js", import.meta.url);
205
214
  const engineUrl = options.engineUrl ?? new URL("./hyperdb-wasm.js", import.meta.url);
206
- return new HyperDBEngineClient(new BrowserWorker(new Worker(resolveBrowserWorkerUrl(workerUrl, engineUrl), { type: "classic" })));
215
+ return new HyperDBEngineClient(
216
+ new BrowserWorker(new Worker(resolveBrowserWorkerUrl(workerUrl, engineUrl, options.wasmUrl), { type: "classic" })),
217
+ options.onInitialisationProgress
218
+ );
207
219
  }
208
220
  var BrowserWorker;
209
221
  var init_browser = __esm({
@@ -101,9 +101,15 @@ export type WasmResponse = {
101
101
  type: 'response';
102
102
  result: WasmResult;
103
103
  };
104
+ export interface InstantiationProgress {
105
+ readonly bytesLoaded: number;
106
+ readonly bytesTotal: number;
107
+ }
104
108
  export type WorkerEvent = {
105
109
  type: 'ready';
106
- } | {
110
+ } | ({
111
+ type: 'progress';
112
+ } & InstantiationProgress) | {
107
113
  type: 'fatal';
108
114
  error: string;
109
115
  } | {
@@ -1,3 +1,3 @@
1
1
  export * from './raw.js';
2
2
  export { BrowserWorker, createBrowserClient } from './browser.js';
3
- export type { BrowserWorkerLike } from './browser.js';
3
+ export type { BrowserClientOptions, BrowserWorkerLike } from './browser.js';
@@ -28,6 +28,8 @@ function isWorkerEvent(message) {
28
28
  switch (message.type) {
29
29
  case "ready":
30
30
  return hasKeys(message, ["type"]);
31
+ case "progress":
32
+ return hasKeys(message, ["type", "bytesLoaded", "bytesTotal"]) && typeof message.bytesLoaded === "number" && Number.isSafeInteger(message.bytesLoaded) && message.bytesLoaded >= 0 && typeof message.bytesTotal === "number" && Number.isSafeInteger(message.bytesTotal) && message.bytesTotal >= 0;
31
33
  case "fatal":
32
34
  return hasKeys(message, ["type", "error"]) && typeof message.error === "string";
33
35
  case "log":
@@ -41,15 +43,8 @@ function isWorkerEvent(message) {
41
43
 
42
44
  // src/client.ts
43
45
  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) {
46
+ constructor(transport, onInitialisationProgress) {
47
+ this.onInitialisationProgress = onInitialisationProgress;
53
48
  this.transport = transport;
54
49
  this.readyPromise = new Promise((resolve, reject) => {
55
50
  this.resolveReady = resolve;
@@ -61,6 +56,15 @@ var HyperDBEngineClient = class {
61
56
  transport.onClose((error) => this.fail(error))
62
57
  ];
63
58
  }
59
+ onInitialisationProgress;
60
+ transport;
61
+ pending = /* @__PURE__ */ new Map();
62
+ readyPromise;
63
+ resolveReady;
64
+ rejectReady;
65
+ nextId = 1;
66
+ failed;
67
+ unsubscribe;
64
68
  ready() {
65
69
  return this.readyPromise;
66
70
  }
@@ -141,6 +145,10 @@ var HyperDBEngineClient = class {
141
145
  this.resolveReady();
142
146
  return;
143
147
  }
148
+ if (message.type === "progress") {
149
+ this.onInitialisationProgress?.({ bytesLoaded: message.bytesLoaded, bytesTotal: message.bytesTotal });
150
+ return;
151
+ }
144
152
  if (message.type === "fatal") {
145
153
  this.fail(new Error(message.error || "engine aborted"));
146
154
  return;
@@ -336,15 +344,19 @@ var BrowserWorker = class {
336
344
  this.worker.terminate();
337
345
  }
338
346
  };
339
- function resolveBrowserWorkerUrl(workerUrl, engineUrl) {
347
+ function resolveBrowserWorkerUrl(workerUrl, engineUrl, wasmUrl) {
340
348
  const resolved = new URL(workerUrl);
341
349
  resolved.searchParams.set("engineUrl", new URL(engineUrl).href);
350
+ if (wasmUrl != null) resolved.searchParams.set("wasmUrl", new URL(wasmUrl).href);
342
351
  return resolved;
343
352
  }
344
353
  function createBrowserClient(options = {}) {
345
354
  const workerUrl = options.workerUrl ?? new URL("./browser_worker.js", import.meta.url);
346
355
  const engineUrl = options.engineUrl ?? new URL("./hyperdb-wasm.js", import.meta.url);
347
- return new HyperDBEngineClient(new BrowserWorker(new Worker(resolveBrowserWorkerUrl(workerUrl, engineUrl), { type: "classic" })));
356
+ return new HyperDBEngineClient(
357
+ new BrowserWorker(new Worker(resolveBrowserWorkerUrl(workerUrl, engineUrl, options.wasmUrl), { type: "classic" })),
358
+ options.onInitialisationProgress
359
+ );
348
360
  }
349
361
  export {
350
362
  BrowserWorker,
package/dist/raw.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export { HyperDBEngineClient } from './client.js';
2
2
  export { HyperDBBindings } from './wasm_bindings.js';
3
- export type { EngineRequest, WasmResponse, WasmResult, WorkerEvent, WorkerTransport } from './protocol.js';
3
+ export type { EngineRequest, InstantiationProgress, WasmResponse, WasmResult, WorkerEvent, WorkerTransport } from './protocol.js';
package/dist/raw.node.js CHANGED
@@ -28,6 +28,8 @@ function isWorkerEvent(message) {
28
28
  switch (message.type) {
29
29
  case "ready":
30
30
  return hasKeys(message, ["type"]);
31
+ case "progress":
32
+ return hasKeys(message, ["type", "bytesLoaded", "bytesTotal"]) && typeof message.bytesLoaded === "number" && Number.isSafeInteger(message.bytesLoaded) && message.bytesLoaded >= 0 && typeof message.bytesTotal === "number" && Number.isSafeInteger(message.bytesTotal) && message.bytesTotal >= 0;
31
33
  case "fatal":
32
34
  return hasKeys(message, ["type", "error"]) && typeof message.error === "string";
33
35
  case "log":
@@ -41,15 +43,8 @@ function isWorkerEvent(message) {
41
43
 
42
44
  // src/client.ts
43
45
  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) {
46
+ constructor(transport, onInitialisationProgress) {
47
+ this.onInitialisationProgress = onInitialisationProgress;
53
48
  this.transport = transport;
54
49
  this.readyPromise = new Promise((resolve, reject) => {
55
50
  this.resolveReady = resolve;
@@ -61,6 +56,15 @@ var HyperDBEngineClient = class {
61
56
  transport.onClose((error) => this.fail(error))
62
57
  ];
63
58
  }
59
+ onInitialisationProgress;
60
+ transport;
61
+ pending = /* @__PURE__ */ new Map();
62
+ readyPromise;
63
+ resolveReady;
64
+ rejectReady;
65
+ nextId = 1;
66
+ failed;
67
+ unsubscribe;
64
68
  ready() {
65
69
  return this.readyPromise;
66
70
  }
@@ -141,6 +145,10 @@ var HyperDBEngineClient = class {
141
145
  this.resolveReady();
142
146
  return;
143
147
  }
148
+ if (message.type === "progress") {
149
+ this.onInitialisationProgress?.({ bytesLoaded: message.bytesLoaded, bytesTotal: message.bytesTotal });
150
+ return;
151
+ }
144
152
  if (message.type === "fatal") {
145
153
  this.fail(new Error(message.error || "engine aborted"));
146
154
  return;
@@ -22,6 +22,7 @@ export interface HyperDBWasmRuntimeModule extends HyperDBWasmModule {
22
22
  onRuntimeInitialized?: () => void;
23
23
  onAbort?: (reason: unknown) => void;
24
24
  locateFile?: (path: string, prefix: string) => string;
25
+ instantiateWasm?: (imports: WebAssembly.Imports, receiveInstance: (instance: WebAssembly.Instance, module: WebAssembly.Module) => void) => Record<string, never>;
25
26
  hyperdbWasmFetchStart?: (id: number, url: string, offset: number, length: number) => void;
26
27
  hyperdbWasmHttpStart?: (id: number, method: string, url: string, headers: string, bodyPointer: number | bigint, bodyLength: number) => void;
27
28
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hyperdb-wasm",
3
- "version": "0.0.26311-dev.wasm.gbee0ee3d",
3
+ "version": "0.0.26312-dev.wasm.g57edd738",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=24"