@tamara027/lerna-terminal
Version:
Powerful cli ui for monorepos
90 lines (76 loc) • 2.35 kB
JavaScript
/* eslint complexity: 0*/
;
var render = require('../render');
var getFocused = require('../getFocused');
var cmdStart = require('../cmdStart');
var cmdStop = require('../cmdStop');
var cmdClear = require('../cmdClear');
var cmdFocus = require('../cmdFocus');
var cmdHelp = require('../cmdHelp');
var cmdExit = require('../cmdExit');
var cmdNative = require('../cmdNative');
var cmdInvalid = require('../cmdInvalid');
var isValidPackageName = require('../isValidPackageName');
var COMMANDS = {
CLEAR: 'clear',
FOCUS: 'focus',
EXIT: 'exit',
HELP: 'help',
START: 'start',
STOP: 'stop'
};
var isValidCmd = function isValidCmd(cmd) {
return Boolean(Object.keys(COMMANDS).indexOf(cmd.toUpperCase()) >= 0);
};
/**
* @param {string} cmd - the user entered command
* @returns {boolean} returns true if packageName is a part of packagePath
**/
function executeCmd(cmd) {
if (typeof cmd !== 'string' || cmd === '') {
return;
}
var cmdSpl = cmd.trim().replace(/\n|\t/g, '').split(' ');
var focusedPackageName = getFocused();
var _isValidCmd = isValidCmd(cmdSpl[0]);
// focus shortcut
if (!_isValidCmd && cmdSpl.length === 1 && isValidPackageName(cmdSpl[0])) {
cmdFocus(cmdSpl[0], render);
return;
}
var COMMAND_EXCECUTE_MAP = {
CLEAR: cmdClear,
FOCUS: cmdFocus,
EXIT: cmdExit,
HELP: cmdHelp,
START: cmdStart,
STOP: cmdStop
};
if (focusedPackageName) {
// run native cmd on child_process for example 'npm run test' in case of a child_process is focused
if (!_isValidCmd) {
cmdNative(cmd, focusedPackageName, render);
return;
}
// run cmd on child_process in case of a child_process is focused
// lerna-terminal/utils~$ start
COMMAND_EXCECUTE_MAP[cmdSpl[0].toUpperCase()](focusedPackageName, render);
return;
}
if (_isValidCmd) {
// run cmd on all child_processes in case of not focused and without packageName in cmd
// lerna-terminal~$ start
if (cmdSpl.length === 1) {
COMMAND_EXCECUTE_MAP[cmdSpl[0].toUpperCase()](undefined, render);
return;
}
// run cmd on given child_process (described with second argument)
// lerna-terminal~$ start utils
COMMAND_EXCECUTE_MAP[cmdSpl[0].toUpperCase()](cmdSpl[1], render);
return;
}
// invalid command will be ignored
cmdInvalid(render, cmd);
}
module.exports = executeCmd;
module.exports.COMMANDS = COMMANDS;