|
|
- 'use strict';
-
- const pRetry = require('p-retry');
- const portfinder = require('portfinder');
- const defaultPort = require('./defaultPort');
- const defaultTo = require('./defaultTo');
- const tryParseInt = require('./tryParseInt');
-
- function runPortFinder() {
- return new Promise((resolve, reject) => {
- portfinder.basePort = defaultPort;
- portfinder.getPort((error, port) => {
- if (error) {
- return reject(error);
- }
-
- return resolve(port);
- });
- });
- }
-
- function findPort(port) {
- if (port) {
- return Promise.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 NaN
- const defaultPortRetry = defaultTo(
- tryParseInt(process.env.DEFAULT_PORT_RETRY),
- 3
- );
-
- return pRetry(runPortFinder, { retries: defaultPortRetry });
- }
-
- module.exports = findPort;
|