webserv
Version:
a quick, flexible, fully typed development server
73 lines • 3.14 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
(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", "../log"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const log_1 = require("../log");
function startServer(config) {
return __awaiter(this, void 0, void 0, function* () {
const server = yield config.createServer();
const handles = [];
const stop = () => __awaiter(this, void 0, void 0, function* () {
server.close();
for (let handle of handles) {
handle.remove();
}
});
const closed = new Promise((resolve) => {
server.on('close', () => {
resolve();
});
});
server.on('error', config.onError ||
((error) => {
log_1.log.error(`Server error: ${error}`);
}));
if (config.onUpgrade) {
server.on('upgrade', (request, socket, head) => {
config.onUpgrade(request, socket, head);
});
}
for (let signal of ['SIGINT', 'SIGTERM']) {
const handler = () => {
log_1.log.info(`received ${signal} signal. Stopping server on ${config.port}.`);
stop();
};
handles.push({
remove() {
process.removeListener(signal, handler);
}
});
process.on(signal, handler);
}
return new Promise((resolve) => {
server.listen(config.port, () => {
resolve({
closed,
addListener: (event, listener) => {
server.addListener(event, listener);
},
stop
});
});
});
});
}
exports.startServer = startServer;
});
//# sourceMappingURL=startServer.js.map