diff --git a/package.json b/package.json index 0c8a99c6..03c8faa7 100644 --- a/package.json +++ b/package.json @@ -35,5 +35,5 @@ "signale": "^1.4.0", "turbo": "^2.5.6" }, - "packageManager": "^bun@1.1.17" + "packageManager": "^bun@1.2.21" } diff --git a/packages/wasm/package.json b/packages/wasm/package.json index 5d6e1986..19262bc3 100644 --- a/packages/wasm/package.json +++ b/packages/wasm/package.json @@ -32,6 +32,10 @@ ".": { "import": "./dist/surrealdb-wasm.mjs", "types": "./dist/surrealdb-wasm.d.ts" + }, + "./worker": { + "import": "./dist/worker-agent.mjs", + "types": "./dist/worker-agent.d.ts" } }, "files": [ diff --git a/packages/wasm/src-ts/index.ts b/packages/wasm/src-ts/index.ts index 3724363b..0a55c5b8 100644 --- a/packages/wasm/src-ts/index.ts +++ b/packages/wasm/src-ts/index.ts @@ -2,7 +2,7 @@ import type { DriverContext, Engines } from "surrealdb"; import type { ConnectionOptions } from "../wasm/surrealdb"; import { WebAssemblyEngine } from "./engine"; import { LocalEngineBroker } from "./local/local-broker"; -import { WorkerEngineBroker } from "./worker/worker-broker"; +import { type WasmWorkerOptions, WorkerEngineBroker } from "./worker/worker-broker"; /** * Configure the `mem` and `indxdb` WebAssembly engines for the JavaScript SDK. @@ -21,7 +21,7 @@ import { WorkerEngineBroker } from "./worker/worker-broker"; * }); * ``` */ -export const createWasmEngines = (options?: ConnectionOptions): Engines => { +export const createWasmEngines = (options?: WasmWorkerOptions): Engines => { const createEngine = (ctx: DriverContext) => new WebAssemblyEngine(new LocalEngineBroker(), ctx, options); diff --git a/packages/wasm/src-ts/worker/worker-broker.ts b/packages/wasm/src-ts/worker/worker-broker.ts index d9aac360..6748100c 100644 --- a/packages/wasm/src-ts/worker/worker-broker.ts +++ b/packages/wasm/src-ts/worker/worker-broker.ts @@ -4,7 +4,9 @@ import type { ConnectionOptions } from "../../wasm/surrealdb"; import type { EngineBroker } from "../common"; import { RequestType, ResponseType, type WorkerMessage } from "./worker-contract"; -const WORKER_URL = new URL("./worker-agent.mjs", import.meta.url); +export interface WasmWorkerOptions extends ConnectionOptions { + createWorker?: () => Worker; +} type PromiseResolver = { resolve: (value: T) => void; @@ -24,11 +26,15 @@ export class WorkerEngineBroker implements EngineBroker { async connect( url: string, - options: ConnectionOptions | undefined, + options: WasmWorkerOptions | undefined, onNotification: (data: Uint8Array) => void, ) { this.#handleNotification = onNotification; - this.#worker = new Worker(WORKER_URL, { type: "module" }); + this.#worker = + options?.createWorker?.() ?? + new Worker(new URL(/* @vite-ignore */ "./worker-agent.mjs", import.meta.url), { + type: "module", + }); this.#ready = new Promise((resolve) => { this.#markReady = resolve; }); @@ -39,7 +45,13 @@ export class WorkerEngineBroker implements EngineBroker { await this.#send({ type: RequestType.CONNECT, - data: { url, options }, + data: { + url, + options: { + ...options, + createWorker: undefined, + }, + }, }); }