This commit is contained in:
40
store/src/routes/node/worker/node.worker.ts
Normal file
40
store/src/routes/node/worker/node.worker.ts
Normal file
@ -0,0 +1,40 @@
|
||||
/// <reference lib="webworker" />
|
||||
|
||||
import { NodeDefinitionSchema } from "../schemas/types.ts";
|
||||
import { WorkerMessage } from "./types.ts";
|
||||
import { createWasmWrapper } from "./utils.ts";
|
||||
|
||||
const workerSelf = self as DedicatedWorkerGlobalScope & {
|
||||
postMessage: (message: WorkerMessage) => void;
|
||||
};
|
||||
|
||||
function extractDefinition(wasmCode: ArrayBuffer) {
|
||||
try {
|
||||
const wasm = createWasmWrapper(wasmCode);
|
||||
|
||||
const definition = wasm.get_definition();
|
||||
|
||||
const p = NodeDefinitionSchema.safeParse(definition);
|
||||
|
||||
if (!p.success) {
|
||||
workerSelf.postMessage({ action: "error", error: p.error });
|
||||
return;
|
||||
}
|
||||
|
||||
workerSelf.postMessage({ action: "result", result: p.data });
|
||||
} catch (e) {
|
||||
console.log("HEEERE", e);
|
||||
workerSelf.postMessage({ action: "error", error: e });
|
||||
}
|
||||
}
|
||||
|
||||
self.onmessage = (e: MessageEvent<WorkerMessage>) => {
|
||||
switch (e.data.action) {
|
||||
case "extract-definition":
|
||||
extractDefinition(e.data.content);
|
||||
self.close();
|
||||
break;
|
||||
default:
|
||||
throw new Error("Unknown action: " + e.data.action);
|
||||
}
|
||||
};
|
Reference in New Issue
Block a user