General source code refactoring
This commit is contained in:
38
scripts/preview.mjs
Normal file
38
scripts/preview.mjs
Normal file
@@ -0,0 +1,38 @@
|
||||
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}/`);
|
||||
});
|
||||
Reference in New Issue
Block a user