UNPKG

@pact-foundation/pact

Version:
60 lines 2.37 kB
"use strict"; /** * Network module. * @module net * @private */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.freePort = exports.isPortAvailable = exports.portCheck = exports.localAddresses = void 0; var net_1 = __importDefault(require("net")); exports.localAddresses = ['127.0.0.1', 'localhost', '0.0.0.0', '::1']; var portCheck = function (port, host) { return new Promise(function (resolve, reject) { var server = net_1.default .createServer() .listen({ port: port, host: host, exclusive: true }) .on('error', function (e) { if (e.code === 'EADDRINUSE') { reject(new Error("Port ".concat(port, " is unavailable on address ").concat(host))); } else { reject(e); } }) .on('listening', function () { server.once('close', function () { return resolve(); }).close(); }); }); }; exports.portCheck = portCheck; var isPortAvailable = function (port, host) { return Promise.allSettled(exports.localAddresses.map(function (localHost) { return (0, exports.portCheck)(port, localHost); })).then(function (settledPortChecks) { // if every port check failed, then fail the `isPortAvailable` check if (settledPortChecks.every(function (result) { return result.status === 'rejected'; })) { throw new Error("Cannot open port ".concat(port, " on ipv4 or ipv6 interfaces")); } // the local addresses passed - now check the host that the user has specified return (0, exports.portCheck)(port, host); }); }; exports.isPortAvailable = isPortAvailable; var freePort = function () { return new Promise(function (res) { var s = net_1.default.createServer(); s.listen(0, function () { var addr = s.address(); if (addr !== null && typeof addr !== 'string') { var port_1 = addr.port; s.close(function () { return res(port_1); }); } else { throw Error('unable to find a free port'); } }); }); }; exports.freePort = freePort; //# sourceMappingURL=net.js.map