@pact-foundation/pact
Version:
Pact for all things Javascript
60 lines • 2.37 kB
JavaScript
;
/**
* 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