import { readFileSync } from "node:fs"; import * as Fs from "node:fs/promises"; import * as Http from "node:http"; import * as Path from "node:path"; import * as Process from "node:process"; const cwd = Process.cwd(); const root = Path.join(cwd, "build/dev/javascript"); const toml = readFileSync(Path.join(cwd, "gleam.toml"), "utf-8"); const name = toml.match(/name *= *"(.+)"/)[1]; const html = ` Lustre preview server
`; const server = Http.createServer((req, res) => { switch (true) { case req.url === "/": { res.setHeader("Content-Type", "text/html"); res.statusCode = 200; res.end(html); break; } case req.url.endsWith(".js"): case req.url.endsWith(".mjs"): { Fs.readFile(Path.join(root, req.url), "utf-8") .then((src) => { res.setHeader("Content-Type", "application/javascript"); res.statusCode = 200; res.end(src); }) .catch((err) => { res.statusCode = 404; res.end(err); }); break; } case req.url.endsWith(".css"): { Fs.readFile(Path.join(root, req.url), "utf-8") .then((src) => { res.setHeader("Content-Type", "text/css"); res.statusCode = 200; res.end(src); }) .catch((err) => { res.statusCode = 404; res.end(err); }); break; } default: { Fs.readFile(Path.join(root, req.url), "utf-8") .then((src) => { res.setHeader("Content-Type", "text/plain"); res.statusCode = 200; res.end(src); }) .catch((err) => { res.statusCode = 404; res.end(err); }); } } }); export const serve = (port) => { server.listen(port, "localhost"); };