@wpk-cli/cli
Version:
an unofficial CLI for webpack
151 lines (114 loc) • 4.5 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = commandMaybe;
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _keypress = _interopRequireDefault(require("keypress"));
var _fastLevenshtein = _interopRequireDefault(require("fast-levenshtein"));
var _slice = _interopRequireDefault(require("lodash/slice"));
var _join = _interopRequireDefault(require("lodash/join"));
var _ansiEscapes = _interopRequireDefault(require("ansi-escapes"));
var _chalk = _interopRequireDefault(require("chalk"));
var _logUpdate = _interopRequireDefault(require("log-update"));
var _user = _interopRequireDefault(require("@wpk-cli/user"));
var _logger = _interopRequireDefault(require("@wpk-cli/logger"));
var _execa = _interopRequireDefault(require("execa"));
/**
* TODO lookup aliases
* @param command
* @param commands
* @returns {Promise<boolean>}
*/
function commandMaybe(_x) {
return _commandMaybe.apply(this, arguments);
}
function _commandMaybe() {
_commandMaybe = (0, _asyncToGenerator2.default)(function* ({
command,
commands
}) {
const maybe = [];
if (command) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = commands[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
const knownCommand = _step.value;
if (_fastLevenshtein.default.get(knownCommand.name, command) < 2) {
maybe.push(knownCommand.name);
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
}
if (!maybe.length) {
return false;
}
let countdown = parseInt(_user.default.get("global.autocorrect"));
if (isNaN(countdown)) {
_logger.default.debug('bad value for user option "global.autocorrect"');
countdown = _user.default.defaults.global.autocorrect;
}
if (maybe.length === 1 && countdown > 0) {
let listenKeys = true;
(0, _keypress.default)(process.stdin);
process.stdin.setRawMode(true);
process.stdin.on("keypress", (_, key) => {
if (listenKeys && key && key.ctrl && key.name === "c") {
// log-update appends a newline to its content
process.stdout.write(_ansiEscapes.default.cursorUp(1));
_logger.default.info("aborted");
global.wpk.exit(0);
}
});
const args = (0, _slice.default)(process.argv, 3);
const opts = [maybe[0], ...(0, _slice.default)(process.argv, 3)];
const cmd = `wpk ${(0, _join.default)(opts, " ")}`;
_logger.default.info(_chalk.default`unknown command "${command}"`);
_logger.default.info(_chalk.default`assuming you meant {grey ${maybe[0]}}`);
let runAt = Date.now() + countdown * 1000;
const message = secs => {
return _chalk.default`{blue info} running the command below in {bold ${secs} seconds}, press {green CTRL+C} to abort\n` + _chalk.default`{grey > ${cmd}}`;
};
(0, _logUpdate.default)(message(countdown));
const tick = () => {
const secs = Math.ceil((runAt - Date.now()) / 1000);
(0, _logUpdate.default)(message(secs));
if (secs > 0) {
setTimeout(tick, 100);
return;
}
listenKeys = false;
process.stdin.setRawMode(false);
(0, _logger.default)(_chalk.default.grey(`---`));
(0, _execa.default)("node", [require.main.filename, maybe[0], args], {
stdio: "inherit"
});
};
setTimeout(tick, 1000);
return true;
}
_logger.default.error(`did you mean${maybe.length > 1 ? " one of" : ""}:\n`);
for (var _i = 0; _i < maybe.length; _i++) {
const suggest = maybe[_i];
console.error(_chalk.default.grey(" ", _chalk.default.black.bgWhite(" " + suggest + " "), "wpk", suggest, ...(0, _slice.default)(process.argv, 3)));
}
return true;
});
return _commandMaybe.apply(this, arguments);
}