Files
newt/playground/src/worker.ts
2025-06-17 11:48:01 -07:00

39 lines
1.2 KiB
TypeScript

import { shim } from "./emul";
import { archive, preload } from "./preload";
import { CompileReq, CompileRes } from "./types";
console.log = (m) => {
shim.stdout += '\n' + m
}
const handleMessage = async function (ev: { data: CompileReq }) {
console.log("message", ev.data);
await preload;
shim.archive = archive;
let { id, src, fileName } = ev.data;
const outfile = "out.js";
shim.process.argv = ["browser", "newt", fileName, "-o", outfile, "--top"];
shim.files[fileName] = new TextEncoder().encode(src);
shim.files[outfile] = new TextEncoder().encode("No JS output");
shim.stdout = "";
const start = +new Date();
try {
Main_main();
} catch (e) {
// make it clickable in console
console.error(e);
// make it visable on page
shim.stdout += "\n" + String(e);
}
let duration = +new Date() - start;
console.log(`process ${fileName} in ${duration} ms`);
let javascript = new TextDecoder().decode(shim.files[outfile]);
let output = shim.stdout;
sendResponse({ id, type: 'compileResult', javascript, output, duration });
};
// hooks for worker.html to override
let sendResponse: (_: CompileRes) => void = postMessage;
onmessage = handleMessage;
importScripts("newt.js");