bam-lambda
Version:
Serverless framework for AWS Lambda and API Gateway
69 lines (56 loc) • 1.85 kB
JavaScript
const {
getStyledText,
bamText,
indent,
indentFurther,
} = require('./logger');
const commandDescriptions = require('./commandDescriptions');
const lineLengthBeforeDescription = 30;
const getSpaces = num => ' '.repeat(num);
const formatCommands = (command) => {
const commandObj = commandDescriptions[command];
let formattedStr = `${indent}${bamText(command)}`;
const resourceStr = ' [resourceName]';
const formattedResourceStr = resourceStr.replace(
'resourceName',
getStyledText('resourceName', 'green'),
);
if (commandObj.hasResource) formattedStr += formattedResourceStr;
let numOfSpaces = lineLengthBeforeDescription - command.length;
if (commandObj.hasResource) numOfSpaces -= resourceStr.length;
const spaces = getSpaces(numOfSpaces);
formattedStr += `${spaces}${commandObj.description}`;
return formattedStr;
};
const formatOption = option => (
`${indentFurther}${getStyledText(option.name, 'green')}: ${option.description}`
);
const formatCommandOptions = (command) => {
const { options } = commandDescriptions[command];
return `${indent}${bamText(command)}: \n${options.map(formatOption).join('\n')}`;
};
const commands = Object.keys(commandDescriptions).sort();
const getOptions = (optionsArr) => {
const commandsWithOptions = commands.filter(command => (
commandDescriptions[command].options.length > 0
));
return optionsArr.includes('all')
? commandsWithOptions
: optionsArr.filter(option => (
commandsWithOptions.includes(option.toLowerCase())
));
};
const getOptionsCommands = (optionsObj) => {
const optionsArr = Object.keys(optionsObj);
let options;
if (optionsArr.length > 0) {
options = getOptions(optionsArr).sort();
}
return options;
};
module.exports = {
getOptionsCommands,
formatCommands,
formatCommandOptions,
commands,
};