testcafe
Version:
Automated browser testing for the modern web development stack.
78 lines • 8.32 kB
JavaScript
;
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=