'use strict'; const portfinder = require('portfinder'); function runPortFinder(defaultPort, cb) { portfinder.basePort = defaultPort; portfinder.getPort((err, port) => { cb(err, port); }); } function findPort(server, defaultPort, defaultPortRetry, fn) { let tryCount = 0; const portFinderRunCb = (err, port) => { tryCount += 1; fn(err, port); }; server.listeningApp.on('error', (err) => { if (err && err.code !== 'EADDRINUSE') { throw err; } if (tryCount >= defaultPortRetry) { fn(err); return; } runPortFinder(defaultPort, portFinderRunCb); }); runPortFinder(defaultPort, portFinderRunCb); } module.exports = findPort;