UNPKG

@bengo.co/typescript-web-starter

Version:

A simple website project written in TypeScript. Use this as a starting point for your project.

83 lines (74 loc) 2.18 kB
/** * Script to run web server */ import { createServer, Server } from "http"; import killable = require("killable") // tslint:disable-line:no-require-imports import { TypescriptWebStarterApp } from '../client/components/apps/TypescriptWebStarterApp'; import { log } from "../log"; import { AppsWebServer } from "../server"; const serverUrl = (server: Server): string => { const address = server.address(); if (typeof address === "string") { return address; } const host: string = address.address === "::" ? "localhost" : address.address; // tslint:disable-next-line:no-http-string return `http://${host}:${address.port}`; }; // const waitForServerClose = async (server: Server) => { // await new Promise((resolve, reject) => { // try { // server.once("close", () => { // log("debug", "server closed"); // resolve(); // }); // } catch (error) { // reject(error) // } // }); // }; const processSignal = async (signal: NodeJS.Signals) => { await new Promise((resolve, reject) => { try { process.once(signal, resolve) } catch (error) { reject(error) } }) } const killServerOnProcessInterupt = async (process: NodeJS.Process, killableServer: killable.KillableServer): Promise<void> => { await processSignal("SIGINT") log("warn", "SIGINT"); log("debug", "killing web server") await new Promise((resolve, reject) => { try { killableServer.kill(resolve) } catch (error) { reject(error) } }) }; const listen = async (server: Server, port:string|number) => { return new Promise((resolve, reject) => { server.listen(port, (err: Error) => { if (err) { reject(err) return } resolve() }) }); } const main = async () => { const appsServer = AppsWebServer(TypescriptWebStarterApp, { dev: process.env.NODE_ENV === "development", }); const httpServer: killable.KillableServer = killable(createServer(appsServer.createRequestListener())) await listen(httpServer, process.env.PORT || 8000); log("info", `Listening at ${serverUrl(httpServer)}`); await killServerOnProcessInterupt(process, httpServer) process.exit() }; if (require.main === module) { main().catch((e: Error) => { throw e; }); }