UNPKG

@westacks/vortex

Version:

Server-based routing for SPAs

4 lines (3 loc) 1.44 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("node:http"),s=require("node:process"),i=require("./page-CvrPUcPo.cjs");function u(t,e=13714){return s.argv.length>=3?g(t):d(t,e)}const p=t=>new Promise((e,o)=>{let n="";t.on("data",r=>n+=r),t.on("end",()=>e(n+` `)),t.on("error",o)});async function g(t){try{const e=JSON.parse(s.argv[2]??"null");e&&i.page.set(e),s.stdout.write(JSON.stringify(await t(i.page.get()))+` `)}catch(e){const o=new Error("Unable to parse page data",{cause:e});console.error(o),s.exit(1)}}async function d(t,e=13714){const o={"/up":()=>({status:"OK",timestamp:Date.now()}),"/down":()=>s.exit(),"/render":async n=>{const r=performance.now(),c=JSON.parse(await p(n)??"null");i.page.set(c);const a=await t(i.page.get());return console.log(`[VORTEX] Rendered page '${c?.url}' in ${performance.now()-r} ms`),a},"*":()=>({status:"NOT_FOUND",timestamp:Date.now()})};return console.log(`[VORTEX] Starting server on port ${e}...`),l.createServer(async(n,r)=>{const c=o[n.url??""]||o["*"];try{const a=await c(n);r.writeHead(200,{"Content-Type":"application/json",Server:"Vortex"}),r.write(JSON.stringify(a))}catch(a){r.writeHead(500,{"Content-Type":"application/json",Server:"Vortex"}),r.end(JSON.stringify({status:"ERROR",timestamp:Date.now(),error:a})),console.error(a)}r.end()}).listen(e,()=>console.log(`[VORTEX] Listening on port ${e}`))}exports.createVortexServer=u;