UNPKG

@wpk-cli/cli

Version:

an unofficial CLI for webpack

151 lines (114 loc) 4.5 kB
"use strict"; 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); }