UNPKG

@pact-foundation/pact

Version:
54 lines 2.05 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; const node_net_1 = __importDefault(require("node:net")); exports.localAddresses = ['127.0.0.1', 'localhost', '0.0.0.0', '::1']; const portCheck = (port, host) => new Promise((resolve, reject) => { const server = node_net_1.default .createServer() .listen({ port, host, exclusive: true }) .on('error', (e) => { if (e.code === 'EADDRINUSE') { reject(new Error(`Port ${port} is unavailable on address ${host}`)); } else { reject(e); } }) .on('listening', () => { server.once('close', () => resolve()).close(); }); }); exports.portCheck = portCheck; const isPortAvailable = (port, host) => Promise.allSettled(exports.localAddresses.map((localHost) => (0, exports.portCheck)(port, localHost))).then((settledPortChecks) => { // if every port check failed, then fail the `isPortAvailable` check if (settledPortChecks.every((result) => result.status === 'rejected')) { throw new Error(`Cannot open port ${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; const freePort = () => new Promise((res) => { const s = node_net_1.default.createServer(); s.listen(0, () => { const addr = s.address(); if (addr !== null && typeof addr !== 'string') { const { port } = addr; s.close(() => res(port)); } else { throw Error('unable to find a free port'); } }); }); exports.freePort = freePort; //# sourceMappingURL=net.js.map