UNPKG

webserv

Version:

a quick, flexible, fully typed development server

112 lines 4.39 kB
(function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "./HttpError", "./log", "./processors/after/notFound.processor", "./route", "./servers/createHttpServer", "./servers/createHttpsServer", "./upgrade"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const HttpError_1 = require("./HttpError"); const log_1 = require("./log"); const notFound_processor_1 = require("./processors/after/notFound.processor"); const route_1 = require("./route"); const createHttpServer_1 = require("./servers/createHttpServer"); const createHttpsServer_1 = require("./servers/createHttpsServer"); const upgrade_1 = require("./upgrade"); exports.globalErrorHandler = (e, response) => { let statusCode = 500 /* InternalServerError */; if (HttpError_1.isHttpError(e)) { log_1.log.info(`HTTPError: ${e.statusCode}${e.message ? `. Reason "${e.message}"` : ''}`); statusCode = e.statusCode; } else { log_1.log.info('General error. ' + e.message); } if (!response.finished) { response.statusCode = statusCode; response.end(); } }; class App { constructor() { this.globalRoute = { before: [], guards: [], middleware: [], transforms: [], after: [] }; this.upgrades = []; } add(services) { if (Array.isArray(services)) { for (let service of services) { this.addService(service); } } else { this.addService(services); } } addService({ route, upgrade, global }) { if (route) { this.globalRoute.middleware.push(route_1.route(route)); } if (upgrade) { this.upgrades.push(upgrade_1.upgrade(upgrade)); } if (global) { if (global.after) { this.globalRoute.after.push(...global.after); } if (global.before) { this.globalRoute.before.push(...global.before); } if (global.guards) { this.globalRoute.guards.push(...global.guards); } if (global.transforms) { this.globalRoute.transforms.push(...global.transforms); } } } start(type, config) { if (this.controls) { throw new Error('server already started'); } const onRequest = route_1.multiroute([ { middleware: [this.globalRoute], after: [notFound_processor_1.notFound], errorHandler: exports.globalErrorHandler } ]); const onUpgrade = upgrade_1.multiupgrade(this.upgrades); if (type === 'http') { this.controls = createHttpServer_1.startHttpServer(Object.assign(Object.assign({}, config), { onRequest, onUpgrade })); } else if (type === 'https') { this.controls = createHttpsServer_1.startHttpsServer(Object.assign(Object.assign({}, config), { onRequest, onUpgrade })); } else { log_1.log.error(`Unknown server type: ${type}`); } if (this.controls) { this.controls.then((controls) => { log_1.log.info(`Server started on ${config.port}`); controls.closed.then(() => { log_1.log.debug('Server stopped'); }); }); } return this.controls; } } exports.App = App; }); //# sourceMappingURL=app.js.map