frontity
Version:
Frontity cli and entry point to other packages
54 lines (53 loc) • 2.33 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const chalk_1 = __importDefault(require("chalk"));
const detect_port_alt_1 = __importDefault(require("detect-port-alt"));
const is_root_1 = __importDefault(require("is-root"));
const inquirer_1 = __importDefault(require("inquirer"));
const getProcessForPort_1 = __importDefault(require("./getProcessForPort"));
const isInteractive = process.stdout.isTTY;
function clearConsole() {
process.stdout.write(process.platform === "win32" ? "\x1B[2J\x1B[0f" : "\x1B[2J\x1B[3J\x1B[H");
}
function choosePort(host, defaultPort) {
return (0, detect_port_alt_1.default)(defaultPort, host).then((port) => new Promise((resolve) => {
if (port === defaultPort) {
return resolve(port);
}
const message = process.platform !== "win32" && defaultPort < 1024 && !(0, is_root_1.default)()
? `Admin permissions are required to run a server on a port below 1024.`
: `Something is already running on port ${defaultPort}.`;
if (isInteractive) {
clearConsole();
const existingProcess = (0, getProcessForPort_1.default)(defaultPort);
const question = {
type: "confirm",
name: "shouldChangePort",
message: chalk_1.default.yellow(message +
`${existingProcess ? ` Probably:\n ${existingProcess}` : ""}`) + "\n\nWould you like to run the app on another port instead?",
default: true,
};
inquirer_1.default.prompt(question).then((answer) => {
if (answer.shouldChangePort) {
resolve(port);
}
else {
resolve(null);
}
});
}
else {
console.log(chalk_1.default.red(message));
resolve(null);
}
}), (err) => {
throw new Error(chalk_1.default.red(`Could not find an open port at ${chalk_1.default.bold(host)}.`) +
"\n" +
("Network error message: " + err.message || err) +
"\n");
});
}
exports.default = choosePort;