import http from "node:http"; import { readFile } from "node:fs/promises"; import composition from "./compose.cjs"; // Development-only routes. Never expose the workspace or forward API requests. const routes = new Map([ ["/", ["../tests/fixtures/extension.html", "text/html"]], ["/extension.js", ["../tests/fixtures/extension.js", "text/javascript"]], ["/consumption-trend.html", ["../tests/fixtures/consumption-trend.html", "text/html"]] ]); const server = http.createServer(async (request, response) => { const pathname = new URL(request.url, "http://127.0.0.1").pathname; response.setHeader("Cache-Control", "no-store"); response.setHeader("X-Content-Type-Options", "nosniff"); if (request.method !== "GET") { response.writeHead(405).end(); return; } try { if (pathname === "/fixture-runtime.js") { response.setHeader("Content-Type", "text/javascript"); response.end(`window.createFixtureApplication = ${composition.composeScript("content", { bootstrap: false })}`); return; } const route = routes.get(pathname); if (!route) { response.writeHead(404).end(); return; } response.setHeader("Content-Type", `${route[1]}; charset=utf-8`); response.end(await readFile(new URL(route[0], import.meta.url))); } catch { response.writeHead(500).end("Fixture could not be loaded."); } }); server.listen(Number(process.env.PORT) || 0, "127.0.0.1", () => { console.log(`Synthetic extension preview: http://127.0.0.1:${server.address().port}/`); });