'use strict';constpRetry=require('p-retry');constportfinder=require('portfinder');constdefaultPort=require('./defaultPort');constdefaultTo=require('./defaultTo');consttryParseInt=require('./tryParseInt');functionrunPortFinder(){returnnewPromise((resolve,reject)=>{portfinder.basePort=defaultPort;portfinder.getPort((error,port)=>{if(error){returnreject(error);}returnresolve(port);});});}functionfindPort(port){if(port){returnPromise.resolve(port);}// Try to find unused port and listen on it for 3 times,// if port is not specified in options.// Because NaN == null is false, defaultTo fails if parseInt returns NaN// so the tryParseInt function is introduced to handle NaNconstdefaultPortRetry=defaultTo(tryParseInt(process.env.DEFAULT_PORT_RETRY),3);returnpRetry(runPortFinder,{retries:defaultPortRetry});}module.exports=findPort;