33 lines
745 B
JavaScript
33 lines
745 B
JavaScript
|
'use strict';
|
||
|
|
||
|
const debug = require('debug')('wait-port');
|
||
|
const detect = require('./detect-port');
|
||
|
|
||
|
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
|
||
|
|
||
|
async function waitPort(port, options = {}) {
|
||
|
const { retryInterval = 1000, retries = Infinity } = options;
|
||
|
let count = 1;
|
||
|
|
||
|
async function loop() {
|
||
|
debug('retries', retries, 'count', count);
|
||
|
if (count > retries) {
|
||
|
const err = new Error('retries exceeded');
|
||
|
err.retries = retries;
|
||
|
err.count = count;
|
||
|
throw err;
|
||
|
}
|
||
|
count++;
|
||
|
const freePort = await detect(port);
|
||
|
if (freePort === port) {
|
||
|
await sleep(retryInterval);
|
||
|
return loop();
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return await loop();
|
||
|
}
|
||
|
|
||
|
module.exports = waitPort;
|