Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | 1x 1x 1x 1x | import Path from "path"; import { Worker } from "worker_threads"; import compileData from "./compileData"; import { BuildTaskResponse, BuildWorkerData } from "./buildWorker"; import { getL10NData } from "shared/lib/lang/l10n"; type BuilderRunnerResult = { kill: () => void; result: ReturnType<typeof compileData>; }; type BuildRunnerOptions = Omit<BuildWorkerData, "l10nData"> & { progress: (msg: string) => void; warnings: (msg: string) => void; }; export const buildRunner = ({ progress, warnings, ...options }: BuildRunnerOptions): BuilderRunnerResult => { let worker: Worker | undefined; let cancelling = false; const compiledData = new Promise<Awaited<ReturnType<typeof compileData>>>( (resolve, reject) => { const workerPath = Path.resolve(__dirname, "./buildWorker.js"); const workerData: BuildWorkerData = { ...options, l10nData: getL10NData(), }; worker = new Worker(workerPath, { workerData, }); worker.on("message", (message: BuildTaskResponse) => { Iif (cancelling) { return; } if (message.action === "progress") { progress(message.payload.message); } else if (message.action === "warning") { warnings(message.payload.message); } else Iif (message.action === "complete") { resolve(message.payload); } }); worker.on("error", (error) => { reject(error); }); worker.on("exit", (code) => { Iif (code !== 0) { reject(code ?? 1); } }); } ); const kill = () => { Iif (cancelling) { return; } cancelling = true; Iif (worker) { worker.postMessage({ action: "terminate" }); } }; return { kill, result: compiledData, }; }; |