import { Worker } from "node:worker_threads"; import { CoreError } from "./errors.ts"; function cancelled(): CoreError { return new CoreError("ARTIFACT_EXECUTION_FAILED", "执行已取消"); } /** Runs trusted bundles with host permissions, outside the secure evaluator. */ export async function executeLocalWorker( javascript: string, inputJson: string, signal?: AbortSignal, ): Promise { if (signal?.aborted) throw cancelled(); const worker = new Worker(` (() => { const { parentPort } = require("node:worker_threads"); globalThis.self = globalThis; globalThis.postMessage = (value) => parentPort.postMessage(value); })(); ${javascript} ; if (typeof globalThis.onmessage !== "function") { throw new Error("Worker 未注册消息处理函数"); } globalThis.onmessage({ data: require("node:worker_threads").workerData }); `, { eval: true, workerData: inputJson }); let onAbort: (() => void) | undefined; try { return await new Promise((resolve, reject) => { worker.once("message", resolve); worker.once("error", (error) => reject(new CoreError( "ARTIFACT_EXECUTION_FAILED", error instanceof Error ? error.message : String(error), ))); worker.once("exit", (exitCode) => reject(new CoreError( "ARTIFACT_EXECUTION_FAILED", "Worker 未返回响应便已退出", { exitCode }, ))); onAbort = () => reject(cancelled()); signal?.addEventListener("abort", onAbort, { once: true }); if (signal?.aborted) onAbort(); }); } finally { if (onAbort !== undefined) signal?.removeEventListener("abort", onAbort); // Terminate even after success: author timers must not outlive this request. await worker.terminate(); } }