UNPKG

1.64 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const get_port_1 = require("get-port");
4// We want to stop the server as fast possible and for that we need to have no connection opened
5// here we manually register incoming connections and close them when destroy is called
6async function startServer(port, app) {
7 return new Promise(async (resolve, reject) => {
8 const connections = {};
9 try {
10 const listenablePort = await get_port_1.default({ port });
11 if (listenablePort !== port) {
12 reject(new UnavailablePort(port));
13 }
14 else {
15 const server = app.listen(port, () => {
16 resolve(server);
17 });
18 server.on('connection', (conn) => {
19 const key = [conn.remoteAddress, conn.remotePort].join(':');
20 connections[key] = conn;
21 conn.on('close', () => {
22 delete connections[key];
23 });
24 });
25 server.destroy = cb => {
26 server.close(cb);
27 // force closing all connections
28 for (const key in connections) {
29 connections[key].destroy();
30 }
31 };
32 }
33 }
34 catch (e) {
35 reject(e);
36 }
37 });
38}
39exports.startServer = startServer;
40class UnavailablePort extends Error {
41 constructor(port) {
42 super(`Can not start server on port ${port}`);
43 }
44}
45exports.UnavailablePort = UnavailablePort;