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;
|