// Demo page logic for the ESM milestone: guest ESM executes through the browser's // native module linker, fed by the Service Worker virtual origin (/~/ URLs backed // by the kernel). Runs on the page (host side). import { boot } from "@nibling/kernel"; const out = document.getElementById("out"); const errEl = document.getElementById("err"); const exitEl = document.getElementById("exit"); const dec = new TextDecoder(); try { const runtime = await boot(); const read = async (p) => await (await fetch(p)).text(); runtime.writeTree({ "/app/main.mjs": await read("/demo/app/main.mjs"), "/app/greet.mjs": await read("/demo/app/greet.mjs"), "/app/legacy.cjs": await read("/demo/app/legacy.cjs"), "/app/name.txt": await read("/demo/app/name.txt"), "/app/node_modules/leftpad/package.json": await read("/demo/app/node_modules/leftpad/package.json"), "/app/node_modules/leftpad/index.js": await read("/demo/app/node_modules/leftpad/index.js"), }); const proc = runtime.exec("/app/main.mjs"); proc.stdout.pipeTo(new WritableStream({ write: (c) => { out.textContent += dec.decode(c); } })); proc.stderr.pipeTo(new WritableStream({ write: (c) => { errEl.textContent += dec.decode(c); } })); exitEl.textContent = String(await proc.exited); } catch (e) { errEl.textContent = "BOOT FAILED: " + (e?.message ?? String(e)); exitEl.textContent = "?"; }