console.info("[PocketBootstrap] worker module starting"); self.addEventListener("error", (event) => { console.error("[PocketBootstrap] error event", { message: event.message, filename: event.filename, lineno: event.lineno, colno: event.colno, }); }); self.addEventListener("unhandledrejection", (event) => { console.error("[PocketBootstrap] unhandled rejection", event.reason); }); const postBootstrapError = (error: unknown) => { const message = error instanceof Error ? `${error.name}: ${error.message}` : String(error); self.postMessage({ type: "error", error: `Pocket bootstrap failed: ${message}`, }); }; const queuedMessages: unknown[] = []; let vendorMessageHandler: | ((event: MessageEvent) => void | Promise) | null = null; const forwardOrQueueMessage = (event: MessageEvent) => { if (vendorMessageHandler) { void vendorMessageHandler(event); return; } queuedMessages.push(event.data); console.info("[PocketBootstrap] queued message", { type: typeof event.data === "object" && event.data !== null && "type" in (event.data as Record) ? (event.data as { type?: unknown }).type : "unknown", }); }; self.addEventListener("message", forwardOrQueueMessage); void (async () => { try { const vendorWorkerUrl = new URL( "/pocket-tts/inference-worker.js", self.location.origin, ).toString(); console.info("[PocketBootstrap] importing vendor worker"); await import(/* @vite-ignore */ vendorWorkerUrl); console.info("[PocketBootstrap] vendor worker imported"); if (typeof self.onmessage !== "function") { throw new Error("Vendor worker did not install a message handler."); } vendorMessageHandler = self.onmessage.bind(self); console.info("[PocketBootstrap] vendor handler ready", { queuedMessages: queuedMessages.length, }); while (queuedMessages.length > 0) { const data = queuedMessages.shift(); await vendorMessageHandler( new MessageEvent("message", { data, }), ); } } catch (error) { console.error("[PocketBootstrap] vendor worker import failed", error); postBootstrapError(error); throw error; } })(); export {};