Spaces:
Running
Running
File size: 2,287 Bytes
009fd18 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | 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<void>)
| 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<string, unknown>)
? (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 {};
|