'a'
mh-two-thousand-and-two
2024-04-12 44d2c92345cd156a59fc327b3060292a282d2893
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
const toArr = require('./toArr');
 
const net = require('net');
 
exports = function(ports, host) {
    ports = toArr(ports);
    ports.push(0);
 
    return ports.reduce((seq, port) => {
        return seq.catch(() => isAvailable(port, host));
    }, Promise.reject());
};
 
function isAvailable(port, host) {
    return new Promise((resolve, reject) => {
        const server = net.createServer();
 
        server.unref();
        server.on('error', reject);
        const options = {};
        options.port = port;
        if (host) options.host = host;
        server.listen(options, () => {
            const { port } = server.address();
            server.close(() => {
                resolve(port);
            });
        });
    });
}
 
module.exports = exports;