UNPKG

testcafe

Version:

Automated browser testing for the modern web development stack.

78 lines 8.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getIPAddress = exports.isMyHostname = exports.getFreePort = exports.isFreePort = void 0; const net_1 = require("net"); const address_1 = require("address"); function createServerOnFreePort() { return new Promise(resolve => { const server = (0, net_1.createServer)(); server.once('listening', () => { resolve(server); }); server.listen(0); }); } function closeServers(servers) { return Promise.all(servers.map((server) => { return new Promise(resolve => { server.once('close', resolve); server.close(); }); })); } function checkAvailability(port, hostname) { return new Promise(resolve => { const server = (0, net_1.createServer)(); server.once('error', () => { resolve(false); }); server.once('listening', () => { server.once('close', () => { resolve(true); }); server.close(); }); server.listen(port, hostname); }); } function isFreePort(port) { return checkAvailability(port); } exports.isFreePort = isFreePort; function getFreePort() { return getFreePorts(1).then(ports => { return ports[0]; }); } exports.getFreePort = getFreePort; function getFreePorts(count) { const serverPromises = []; let ports = []; // NOTE: Sequentially collect listening // servers to avoid interference. for (let i = 0; i < count; i++) serverPromises.push(createServerOnFreePort()); return Promise.all(serverPromises) .then(servers => { ports = servers.map((server) => { return server.address().port; }); return servers; }) .then(closeServers) .then(() => { return ports; }); } function isMyHostname(hostname) { return getFreePort() .then(port => { return checkAvailability(port, hostname); }); } exports.isMyHostname = isMyHostname; function getIPAddress() { return (0, address_1.ip)() || (0, address_1.ipv6)(); } exports.getIPAddress = getIPAddress; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZW5kcG9pbnQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBSWE7QUFDYixxQ0FBbUM7QUFFbkMsU0FBUyxzQkFBc0I7SUFDM0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFZLEdBQUUsQ0FBQztRQUU5QixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7WUFDMUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBRSxPQUFpQjtJQUNwQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQWMsRUFBRSxFQUFFO1FBQzlDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFFLElBQVksRUFBRSxRQUFpQjtJQUN2RCxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUEsa0JBQVksR0FBRSxDQUFDO1FBRTlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7WUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO2dCQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxTQUFnQixVQUFVLENBQUUsSUFBWTtJQUNwQyxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFGRCxnQ0FFQztBQUVELFNBQWdCLFdBQVc7SUFDdkIsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2hDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUpELGtDQUlDO0FBRUQsU0FBUyxZQUFZLENBQUUsS0FBYTtJQUNoQyxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDMUIsSUFBSSxLQUFLLEdBQWMsRUFBRSxDQUFDO0lBRTFCLHVDQUF1QztJQUN2QyxpQ0FBaUM7SUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUU7UUFDMUIsY0FBYyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7SUFFbEQsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQztTQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDWixLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQWMsRUFBRSxFQUFFO1lBQ25DLE9BQVEsTUFBTSxDQUFDLE9BQU8sRUFBa0IsQ0FBQyxJQUFJLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQ2xCLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRCxTQUFnQixZQUFZLENBQUUsUUFBZ0I7SUFDMUMsT0FBTyxXQUFXLEVBQUU7U0FDZixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDVCxPQUFPLGlCQUFpQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDLENBQUMsQ0FBQztBQUNYLENBQUM7QUFMRCxvQ0FLQztBQUVELFNBQWdCLFlBQVk7SUFDeEIsT0FBTyxJQUFBLFlBQUUsR0FBRSxJQUFJLElBQUEsY0FBSSxHQUFFLENBQUM7QUFDMUIsQ0FBQztBQUZELG9DQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZGRyZXNzSW5mbyxcbiAgICBjcmVhdGVTZXJ2ZXIsXG4gICAgU2VydmVyLFxufSBmcm9tICduZXQnO1xuaW1wb3J0IHsgaXAsIGlwdjYgfSBmcm9tICdhZGRyZXNzJztcblxuZnVuY3Rpb24gY3JlYXRlU2VydmVyT25GcmVlUG9ydCAoKTogUHJvbWlzZTxTZXJ2ZXI+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIGNvbnN0IHNlcnZlciA9IGNyZWF0ZVNlcnZlcigpO1xuXG4gICAgICAgIHNlcnZlci5vbmNlKCdsaXN0ZW5pbmcnLCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHNlcnZlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNlcnZlci5saXN0ZW4oMCk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlU2VydmVycyAoc2VydmVyczogU2VydmVyW10pOiBQcm9taXNlPHVua25vd25bXT4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChzZXJ2ZXJzLm1hcCgoc2VydmVyOiBTZXJ2ZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgc2VydmVyLm9uY2UoJ2Nsb3NlJywgcmVzb2x2ZSk7XG4gICAgICAgICAgICBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfSkpO1xufVxuXG5mdW5jdGlvbiBjaGVja0F2YWlsYWJpbGl0eSAocG9ydDogbnVtYmVyLCBob3N0bmFtZT86IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgY29uc3Qgc2VydmVyID0gY3JlYXRlU2VydmVyKCk7XG5cbiAgICAgICAgc2VydmVyLm9uY2UoJ2Vycm9yJywgKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNlcnZlci5vbmNlKCdsaXN0ZW5pbmcnLCAoKSA9PiB7XG4gICAgICAgICAgICBzZXJ2ZXIub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2VydmVyLmxpc3Rlbihwb3J0LCBob3N0bmFtZSk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZyZWVQb3J0IChwb3J0OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gY2hlY2tBdmFpbGFiaWxpdHkocG9ydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGcmVlUG9ydCAoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gZ2V0RnJlZVBvcnRzKDEpLnRoZW4ocG9ydHMgPT4ge1xuICAgICAgICByZXR1cm4gcG9ydHNbMF07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEZyZWVQb3J0cyAoY291bnQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICBjb25zdCBzZXJ2ZXJQcm9taXNlcyA9IFtdO1xuICAgIGxldCBwb3J0czogbnVtYmVyW10gID0gW107XG5cbiAgICAvLyBOT1RFOiBTZXF1ZW50aWFsbHkgY29sbGVjdCBsaXN0ZW5pbmdcbiAgICAvLyBzZXJ2ZXJzIHRvIGF2b2lkIGludGVyZmVyZW5jZS5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspXG4gICAgICAgIHNlcnZlclByb21pc2VzLnB1c2goY3JlYXRlU2VydmVyT25GcmVlUG9ydCgpKTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChzZXJ2ZXJQcm9taXNlcylcbiAgICAgICAgLnRoZW4oc2VydmVycyA9PiB7XG4gICAgICAgICAgICBwb3J0cyA9IHNlcnZlcnMubWFwKChzZXJ2ZXI6IFNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoc2VydmVyLmFkZHJlc3MoKSBhcyBBZGRyZXNzSW5mbykucG9ydDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gc2VydmVycztcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oY2xvc2VTZXJ2ZXJzKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcG9ydHM7XG4gICAgICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNeUhvc3RuYW1lIChob3N0bmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGdldEZyZWVQb3J0KClcbiAgICAgICAgLnRoZW4ocG9ydCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2tBdmFpbGFiaWxpdHkocG9ydCwgaG9zdG5hbWUpO1xuICAgICAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldElQQWRkcmVzcyAoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gaXAoKSB8fCBpcHY2KCk7XG59XG4iXX0=