25 lines
1.9 KiB
JavaScript
25 lines
1.9 KiB
JavaScript
import fs from "node:fs";
|
|
import path from "node:path";
|
|
import { createRequire } from "node:module";
|
|
import { parentPort, workerData } from "node:worker_threads";
|
|
import { pathToFileURL } from "node:url";
|
|
import { stagePthreadWorker } from "./wasm-probe-runtime.mjs";
|
|
|
|
const facade = await import(workerData.facadePath);
|
|
const envelope = await import(workerData.envelopePath);
|
|
const build = workerData.buildDirectory;
|
|
const workerCjs = stagePthreadWorker(build, "FreeCADWebImportRuntimeProbe");
|
|
globalThis.__dirname = `${build}${path.sep}`;
|
|
globalThis.require = createRequire(import.meta.url);
|
|
const loader = await import(pathToFileURL(path.join(build, "FreeCADWebImportRuntimeProbe.js")));
|
|
const kernel = await loader.default({ wasmBinary: fs.readFileSync(path.join(build, "FreeCADWebImportRuntimeProbe.wasm")), locateFile: file => workerCjs && file.endsWith(".worker.js") ? workerCjs : path.join(build, file), print: () => {}, printErr: () => {} });
|
|
let queue = new envelope.FacadeSerialQueue();
|
|
parentPort.postMessage({ kind: "ready", action: facade.IMPORT_PYTHON_FAMILY_COMMAND });
|
|
parentPort.on("message", async message => {
|
|
if (message.kind === "reset") { queue = new envelope.FacadeSerialQueue(); parentPort.postMessage({ kind: "reset", requestId: message.requestId }); return; }
|
|
if (envelope.isFacadeCancel(message)) { if (!queue.cancel(message)) parentPort.postMessage(envelope.createFailure(message.requestId, "cancel_rejected", "request is not active")); return; }
|
|
if (!facade.isImportPythonFamilyRequest(message)) { parentPort.postMessage(envelope.createFailure(message.requestId || "invalid", "invalid_request", "Import Python family envelope is invalid")); return; }
|
|
const source = message.requestId.includes("cancel") ? new Promise(resolve => setTimeout(() => resolve(kernel), 25)) : kernel;
|
|
parentPort.postMessage(await facade.dispatchImportPythonFamily(queue, message, source));
|
|
});
|