1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const get_port_1 = require("get-port");
|
4 |
|
5 |
|
6 | async 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 |
|
28 | for (const key in connections) {
|
29 | connections[key].destroy();
|
30 | }
|
31 | };
|
32 | }
|
33 | }
|
34 | catch (e) {
|
35 | reject(e);
|
36 | }
|
37 | });
|
38 | }
|
39 | exports.startServer = startServer;
|
40 | class UnavailablePort extends Error {
|
41 | constructor(port) {
|
42 | super(`Can not start server on port ${port}`);
|
43 | }
|
44 | }
|
45 | exports.UnavailablePort = UnavailablePort;
|