UNPKG

@dojo/cli

Version:

Dojo CLI utility

220 lines (208 loc) 8.74 kB
"use strict"; 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