import { FacadeSerialQueue, createFailure, isFacadeCancel } from "./facade-envelope.js"; import { dispatchDockOverlay, isDockOverlayRequest, DOCK_OVERLAY_COMMAND, type DockOverlayKernel } from "./web-dock-overlay-facade.js"; async function load(): Promise { const response = await fetch("/kernel/FreeCADWebWebRuntimeProbe.js"); if (!response.ok) throw new Error(`Web runtime load failed: HTTP ${response.status}`); const url = URL.createObjectURL(new Blob([await response.text()], { type: "text/javascript" })); try { const factory = (await import(/* @vite-ignore */ url)).default; return await factory({ locateFile: (file: string) => `/kernel/${file}` }); } finally { URL.revokeObjectURL(url); } } let queue = new FacadeSerialQueue(); let kernel = load(); void kernel.catch(() => {}); self.postMessage({ kind: "ready", action: DOCK_OVERLAY_COMMAND }); self.onmessage = async event => { const message = event.data; if (message?.kind === "reset") { queue = new FacadeSerialQueue(); kernel = load(); void kernel.catch(() => {}); self.postMessage({ kind: "reset", requestId: message.requestId }); return; } if (isFacadeCancel(message)) { if (!queue.cancel(message)) self.postMessage(createFailure(message.requestId, "cancel_rejected", "Request is not active")); return; } if (isDockOverlayRequest(message)) { self.postMessage(await dispatchDockOverlay(queue, message, kernel)); return; } self.postMessage(createFailure(message?.requestId ?? "invalid", "invalid_request", "Invalid dock overlay envelope")); };