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");
};