You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					40 lines
				
				990 B
			
		
		
			
		
	
	
					40 lines
				
				990 B
			| 
								 
											4 years ago
										 
									 | 
							
								'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;
							 |