@dojo/cli
Version:
220 lines (208 loc) • 8.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const chalk_1 = require("chalk");
const validation_1 = require("./validation");
const stringWidth = require('string-width');
const sliceAnsi = require('slice-ansi');
const dojoArt = `
..
';,,'..
.colllc,. .''''''... .,,,. .. .,,,.
...',:loooc. ...''''''.. ;x' ;;' ':;,'.'',:;. :o. .:;,'..',;:.
.'''. .... .',;'.. ..'. 'l' .c: :c. ,l' ,l. ,l' 'l;
.,,,. ..;::,'.. ';. 'l' .l, ,l. :c. ,l. .l, 'l.
.'..;;,. .,:cc;'... ,:' 'l' .l; :l. ,l. ,l. 'l. .l,
...;;;. .':clc;. .;:. 'l' ,l. 'l' c: ,l. .l; ;l.
.:c:,..',:coooc,. .';;' 'l' .;c' 'c,. .c:. ,l. .c:. .;c.
.:okOOkkxo:,.. ........',,,'. ,o:,,,,,,;'. ;;,,,,;; ,l. ';;,,,,;;'
.''',;;,.. .... ........ ,l.
', .''. .c:
.'.. .;c;. ..
.. .`;
function addOptionPrefix(optionKey) {
return stringWidth(optionKey) === 1 ? `-${optionKey}` : `--${optionKey}`;
}
function getOptionDescription(options) {
if (options.describe) {
return options.describe;
}
if (options.description) {
return options.description;
}
if (options.desc) {
return options.desc;
}
if (options.defaultDescription) {
return options.defaultDescription;
}
return undefined;
}
function createPadding(text, paddingLength, paddingChar = ' ') {
return sliceAnsi(paddingChar.repeat(paddingLength), 0, paddingLength - stringWidth(text));
}
exports.createPadding = createPadding;
function formatHeader(group = '<group>', command = '[<command>]') {
return `${chalk_1.default.blueBright(dojoArt)}
${chalk_1.default.bold('Usage:')}
$ ${chalk_1.default.greenBright('dojo')} ${chalk_1.default.greenBright(group)} ${chalk_1.default.green(command)} [<options>] [--help]`;
}
function capitalize(value) {
return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;
}
function isGlobalCommand(commandWrapper) {
return commandWrapper.installed && commandWrapper.global;
}
function isProjectCommand(commandWrapper) {
return commandWrapper.installed && !commandWrapper.global;
}
function isCommandForGroup(group) {
return (commandWrapper) => {
return commandWrapper.group === group;
};
}
function isNpmCommand(commandWrapper) {
return !commandWrapper.installed;
}
function formatHelpOutput(groupMap, commandPredicate, showDefault = false) {
let output = '';
let hasGroup = false;
let commandOptionHelp = '';
groupMap.forEach((commandMap, group) => {
let groupOutput = ` ${chalk_1.default.greenBright(group)} ${createPadding(group, 8)}`;
if (hasGroup) {
groupOutput = `\n${groupOutput}`;
}
let hasCommand = false;
const filteredCommandMap = [...commandMap.values()].filter(commandPredicate);
filteredCommandMap.forEach((commandWrapper) => {
const { name, description, default: isDefault } = commandWrapper;
if (hasCommand) {
groupOutput = `${groupOutput}\n${' '.repeat(11)}`;
}
groupOutput = `${groupOutput} ${chalk_1.default.green(name)}`;
groupOutput = `${groupOutput}${createPadding(name, 10)}`;
groupOutput = `${groupOutput} ${capitalize(description)}`;
if (isDefault && showDefault && filteredCommandMap.length > 1) {
groupOutput = `${groupOutput} (Default)`;
}
hasCommand = true;
if (isDefault && showDefault) {
commandOptionHelp = `\n${formatCommandOptions(commandWrapper)}`;
}
});
if (hasCommand) {
output = `${output}${groupOutput}`;
hasGroup = true;
}
});
if (commandOptionHelp) {
output = `${output}\n${commandOptionHelp}`;
}
return output;
}
function formatCommandOptions(commandWrapper, isDefaultCommand = true) {
const { register } = commandWrapper;
let commandOptionHelp = `${chalk_1.default.bold(`Command Options:`)}\n`;
if (isDefaultCommand) {
commandOptionHelp = `${chalk_1.default.bold('Default Command Options')}\n`;
}
if (!commandWrapper.installed) {
return `${commandOptionHelp}\n To install this command run ${chalk_1.default.green(`${commandWrapper.path}`)}`;
}
function formatOption(key, options) {
let optionKeys = `${addOptionPrefix(chalk_1.default.greenBright(key))}`;
if (options.alias) {
const aliases = Array.isArray(options.alias) ? options.alias : [options.alias];
optionKeys = aliases.reduce((result, alias) => {
if (alias.length === 1) {
return `${addOptionPrefix(chalk_1.default.greenBright(alias))}, ${result}`;
}
return `${result}, ${addOptionPrefix(chalk_1.default.greenBright(alias))}`;
}, optionKeys);
}
commandOptionHelp = `${commandOptionHelp}\n ${optionKeys}`;
commandOptionHelp = `${commandOptionHelp} ${createPadding(optionKeys, 20)}`;
const description = getOptionDescription(options);
if (description) {
commandOptionHelp = `${commandOptionHelp}${capitalize(description)}`;
}
if (options.choices) {
commandOptionHelp = `${commandOptionHelp} [choices: "${options.choices
.map((choice) => chalk_1.default.yellow(choice))
.join('", "')}"]`;
}
if (options.default) {
commandOptionHelp = `${commandOptionHelp} [default: "${chalk_1.default.yellow(options.default)}"]`;
}
if (options.type) {
commandOptionHelp = `${commandOptionHelp} [type: "${chalk_1.default.yellow(options.type)}"]`;
}
if (validation_1.isRequiredOption(options)) {
commandOptionHelp = `${commandOptionHelp} [${chalk_1.default.yellow('required')}]`;
}
}
register(formatOption, null);
formatOption('force', { type: 'boolean', description: 'Continue running commands even if validation fails' });
formatOption('dojorc', { default: '.dojorc', type: 'string', description: 'The dojorc config file' });
return commandOptionHelp;
}
function formatMainHelp(groupMap) {
return `${formatHeader()}
${mainHelp(groupMap)}
`;
}
function mainHelp(groupMap) {
return `
${chalk_1.default.bold('Global Commands:')}
${formatHelpOutput(groupMap, isGlobalCommand)}
${chalk_1.default.bold('Project Commands:')}
${formatHelpOutput(groupMap, isProjectCommand)}
${chalk_1.default.bold('Installable Commands:')}
${formatHelpOutput(groupMap, isNpmCommand)}
`;
}
function formatMissingCommandHelp(groupMap, fullCommand) {
const nonexistant = chalk_1.default.bold(chalk_1.default.red(`Specified command '`) +
chalk_1.default.redBright(fullCommand) +
chalk_1.default.red(`' does not exist, please see available commands below.`));
return `${formatHeader()}
${nonexistant}
${mainHelp(groupMap)}
`;
}
function formatGroupHelp(groupMap, group) {
return `${formatHeader(group)}
${chalk_1.default.bold('Commands:')}
${formatHelpOutput(groupMap, isCommandForGroup(group), true)}
`;
}
function formatCommandHelp(groupMap, group, command) {
const commandWrapper = groupMap.get(group).get(command);
return `${formatHeader(group, command)}
${chalk_1.default.bold('Description:')}
${' '}${capitalize(commandWrapper.description)}
${formatCommandOptions(commandWrapper, false)}
`;
}
function formatHelp(argv, groupMap) {
const commands = argv._ && argv._.length > 0;
if (!commands) {
return formatMainHelp(groupMap);
}
const isGroup = argv._.length === 1;
const [group, command] = argv._;
const hasGroup = groupMap.get(group);
const hasCommand = hasGroup && hasGroup.get(command);
if (isGroup) {
if (hasGroup) {
return formatGroupHelp(groupMap, group);
}
return formatMissingCommandHelp(groupMap, group);
}
if (hasGroup && hasCommand) {
return formatCommandHelp(groupMap, group, command);
}
return formatMissingCommandHelp(groupMap, `${group} ${command}`);
}
exports.formatHelp = formatHelp;
//# sourceMappingURL=help.js.map