esa-cli
Version:
A CLI for operating Alibaba Cloud ESA Functions and Pages.
105 lines (104 loc) • 4.54 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import chalk from 'chalk';
import inquirer from 'inquirer';
import portscanner from 'portscanner';
import t from '../i18n/index.js';
import logger from '../libs/logger.js';
export const checkPort = (port) => {
return new Promise((resolve) => {
portscanner.checkPortStatus(port, '127.0.0.1', (error, status) => {
if (error) {
resolve(false);
}
else if (status === 'open') {
resolve(false);
}
else {
resolve(true);
}
});
});
};
const findAvailablePort = (startPort) => __awaiter(void 0, void 0, void 0, function* () {
return yield portscanner.findAPortNotInUse(startPort, 65535);
});
const echoNewInspectTip = () => {
logger.point(t('dev_inspect_tip1').d('You just provided a new inspection port'));
logger.point(t('dev_inspect_tip2').d('You need to open chrome://inspect'));
logger.point(t('dev_inspect_tip3').d('Click Configure.. button behind the Discover network targets'));
logger.point(t('dev_inspect_tip4').d('Config your new IP address and port in Target discovery settings'));
logger.point(t('dev_inspect_tip5').d('Now you can use Chrome inspect with new port 😉'));
logger.block();
};
const checkAndInputPort = (port, inspectPort) => __awaiter(void 0, void 0, void 0, function* () {
let finalPort = port;
let finalInspectPort = inspectPort;
const isPortAvailable = yield checkPort(port);
const stringPort = port.toString();
if (!isPortAvailable) {
logger.error(t('dev_port_used', { stringPort }).d(`Port ${stringPort} already in use.`));
try {
const availablePort = yield findAvailablePort(port);
finalPort = (yield inquirer.prompt([
{
type: 'number',
name: 'port',
message: t('dev_port_ask_input').d('Input a new port:'),
default: availablePort
}
])).port;
const isNewPortAvailable = yield checkPort(finalPort);
if (!isNewPortAvailable) {
logger.error(t('dev_port_invalid').d('This port is invalid.'));
throw new Error('Specified port already in use.');
}
}
catch (_) {
const option = chalk.green('esa-cli dev --port <port>');
logger.log(t('dev_port_used_advice', { option }).d(`You can use ${option} to specify another port.`));
throw new Error('Specified port already in use.');
}
}
if (!inspectPort) {
return {
port: finalPort
};
}
const stringInspectPort = inspectPort.toString();
const isInspectPortAvailable = yield checkPort(inspectPort);
if (!isInspectPortAvailable) {
logger.error(t('dev_inspect_port_used', { stringInspectPort }).d(`Inspect port ${stringInspectPort} already in use.`));
try {
const availablePort = yield findAvailablePort(inspectPort);
finalInspectPort = (yield inquirer.prompt([
{
type: 'number',
name: 'port',
message: t('dev_inspect_port_ask_input').d('Input a new Chrome inspect port:'),
default: availablePort
}
])).port;
}
catch (_) {
const option = chalk.green('esa-cli dev --inspect-port <port>');
logger.log(t('dev_port_used_advice', { option }).d(`You can use ${option} to specify another port.`));
throw new Error('Inspect port already in use.');
}
}
if (finalInspectPort !== inspectPort) {
echoNewInspectTip();
}
return {
port: finalPort,
inspectPort: finalInspectPort
};
});
export default checkAndInputPort;