@westacks/vortex
Version:
Server-based routing for SPAs
56 lines (55 loc) • 2.32 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const node_http = require("node:http");
const node_process = require("node:process");
const page = require("./page-DiCE-s9S.cjs");
function createVortexServer(renderer, port = 13714) {
return node_process.argv.length >= 3 ? createCli(renderer) : createSrv(renderer, port);
}
const read = (message) => new Promise((resolve, reject) => {
let data = "";
message.on("data", (chunk) => data += chunk);
message.on("end", () => resolve(data + "\n"));
message.on("error", reject);
});
async function createCli(renderer) {
try {
const page$1 = JSON.parse(node_process.argv[2] ?? "null");
if (page$1) page.setPage(page$1);
node_process.stdout.write(JSON.stringify(await renderer(page.getPage())) + "\n");
} catch (error) {
const res = new Error("Unable to parse page data", { cause: error });
console.error(res);
node_process.exit(1);
}
}
async function createSrv(renderer, port = 13714) {
const routes = {
"/up": () => ({ status: "OK", timestamp: Date.now() }),
"/down": () => node_process.exit(),
"/render": async (request) => {
const timer = performance.now();
const page$1 = JSON.parse(await read(request) ?? "null");
page.setPage(page$1);
const result = await renderer(page.getPage());
console.log(`[VORTEX] Rendered page '${page$1 == null ? void 0 : page$1.url}' in ${performance.now() - timer} ms`);
return result;
},
"*": () => ({ status: "NOT_FOUND", timestamp: Date.now() })
};
console.log(`[VORTEX] Starting server on port ${port}...`);
return node_http.createServer(async (request, response) => {
const route = routes[request.url ?? ""] || routes["*"];
try {
const result = await route(request);
response.writeHead(200, { "Content-Type": "application/json", "Server": "Vortex" });
response.write(JSON.stringify(result));
} catch (error) {
response.writeHead(500, { "Content-Type": "application/json", "Server": "Vortex" });
response.end(JSON.stringify({ status: "ERROR", timestamp: Date.now(), error }));
console.error(error);
}
response.end();
}).listen(port, () => console.log(`[VORTEX] Listening on port ${port}`));
}
exports.createVortexServer = createVortexServer;