Something went wrong. Try again.
Monorepo for the nibling.run platform
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556<!doctype html><html lang="en"><head> <meta charset="utf-8"> <title>@nibling/kernel — composed Service Worker fixture</title></head><body> <pre id="result">pending</pre> <script type="importmap">{ "imports": { "@nibling/kernel": "/dist/runtime/host.js" } }</script> <script type="module"> import { boot } from "@nibling/kernel"; const result = document.getElementById("result"); // The site registers its own worker at "/" before the runtime boots. // The spec unregisters it afterwards; it stays registered here so the spec can // restart it and watch the runtime's rebridge reach this page through it. await navigator.serviceWorker.register("/tests/fixtures/compose/sw.js", { scope: "/" }); await navigator.serviceWorker.ready; try { const runtime = await boot(); runtime.writeTree({ "/app/main.mjs": 'import { greet } from "./greet.mjs";\nconsole.log(greet(import.meta.url));\n', "/app/greet.mjs": 'export const greet = (url) => `esm ok from ${url}`;\n', "/app/server.cjs": 'require("node:http").createServer((req, res) => res.end(`http ok ${req.url}`)).listen(3000);\n', }); const esm = runtime.exec("main.mjs"); const out = await new Response(esm.stdout).text(); const esmExit = await esm.exited; runtime.exec("server.cjs"); const base = await runtime.waitForPort(3000); const http = await (await fetch(base + "ping")).text(); navigator.serviceWorker.controller.postMessage({ t: "site-hello" }); // Message events are ordered per worker: the marker fetch can race the message, // so wait for the site's listener to have seen it. let marker; for (let i = 0; i < 50; i++) { marker = await (await fetch("/tests/fixtures/compose/marker")).json(); if (marker.seen.includes("message")) break; await new Promise((r) => setTimeout(r, 50)); } const regNow = await navigator.serviceWorker.getRegistration("/"); result.textContent = JSON.stringify({ controller: new URL(navigator.serviceWorker.controller.scriptURL).pathname, registration: new URL((regNow.active ?? regNow.waiting ?? regNow.installing).scriptURL).pathname, esm: out.trim(), esmExit, http, marker, base, }); } catch (e) { result.textContent = `${e.name}: ${e.message}`; } </script></body></html>