cad-editor/web/ocs-parse-worker.js

36 lines
1.1 KiB
JavaScript
Raw Permalink Normal View History

import init, { parse_document, sha256_document } from "./worker_pkg/ocs_web_worker.js?v=4";
2026-07-25 18:49:18 +03:00
2026-08-03 12:47:48 +03:00
const ready = init(
new URL("./worker_pkg/ocs_web_worker_bg.wasm?v=4", import.meta.url),
2026-08-03 12:47:48 +03:00
);
2026-07-25 18:49:18 +03:00
self.onmessage = async ({ data }) => {
let stage = "initialize worker";
2026-07-25 18:49:18 +03:00
try {
await ready;
2026-08-03 12:47:48 +03:00
if (data.action === "hash") {
const digest = sha256_document(new Uint8Array(data.bytes));
self.postMessage({ ok: true, digest });
return;
}
const encoded = parse_document(
data.name,
new Uint8Array(data.bytes),
2026-08-03 12:47:48 +03:00
data.recoveryMode === true,
data.initialError || "",
(next) => {
stage = next;
},
);
2026-07-25 18:49:18 +03:00
// wasm-bindgen returns a view into WebAssembly.Memory. Copy to a standalone
// ArrayBuffer before transferring it, otherwise the worker's wasm memory
// itself would be detached.
const transferable = encoded.slice();
self.postMessage({ ok: true, data: transferable.buffer }, [transferable.buffer]);
} catch (error) {
self.postMessage({
ok: false,
2026-08-03 12:47:48 +03:00
error: `${stage}: ${error instanceof Error ? error.message : String(error)}`,
2026-07-25 18:49:18 +03:00
});
}
};