Files
FreeCADWasmDev/tools/reverseengineering-python-family-facade-smoke-worker.mjs
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

28 lines
1.8 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";
const facade = await import(workerData.facadePath);
const envelope = await import(workerData.envelopePath);
globalThis.__dirname = `${workerData.buildDirectory}${path.sep}`;
globalThis.require = createRequire(import.meta.url);
const loader = await import(pathToFileURL(path.join(workerData.buildDirectory, "FreeCADWebReverseEngineeringRuntimeProbe.js")));
const kernel = await loader.default({ wasmBinary: fs.readFileSync(path.join(workerData.buildDirectory, "FreeCADWebReverseEngineeringRuntimeProbe.wasm")), locateFile: (file) => path.join(workerData.buildDirectory, file) });
const queue = new envelope.FacadeSerialQueue();
const record = { apiId: "py:ReverseEngineering:class:ReverseEngineeringWorkbench", name: "ReverseEngineeringWorkbench", family: "generic-object" };
parentPort.postMessage({ kind: "ready", action: facade.REVERSEENGINEERING_PYTHON_FAMILY_COMMAND });
parentPort.on("message", async (message) => {
if (envelope.isFacadeCancel(message)) {
if (!queue.cancel(message)) parentPort.postMessage(envelope.createFailure(message.requestId, "cancel_rejected", "request is not active"));
return;
}
if (facade.isReverseEngineeringPythonFamilyRequest(message)) {
const source = message.requestId === "rev-family-cancel-1" ? new Promise((resolve) => setTimeout(() => resolve(kernel), 25)) : kernel;
parentPort.postMessage(await facade.dispatchReverseEngineeringPythonFamily(queue, message, source));
return;
}
parentPort.postMessage(envelope.createFailure("invalid", "invalid_request", "ReverseEngineering Python family envelope is invalid"));
});