UNPKG

@westacks/vortex

Version:

Server-based routing for SPAs

56 lines (55 loc) 2.32 kB
"use strict"; 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;