@mondaycom/apps-cli
Version:
A cli tool to manage apps (and monday-code projects) in monday.com
52 lines (51 loc) • 2.02 kB
JavaScript
import { wrapInBox } from './cli-utils.js';
import logger from './logger.js';
let printCommandEnabled = false;
export const enablePrintCommand = () => {
printCommandEnabled = true;
};
const getFlagsAndArgsFromCommand = (command) => {
const commandClass = command.constructor;
const commandFlags = commandClass.flags;
const commandArgs = commandClass.args;
return {
flags: commandFlags,
args: commandArgs,
};
};
const addFlagsToCommandString = (commandString, commandFlagsMetadata, flags) => {
for (const [flagName, flag] of Object.entries(commandFlagsMetadata)) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const flagValue = flags?.[flagName];
if (flagValue) {
const flagChar = flag?.char;
commandString += ` -${flagChar ? flagChar : `-${flagName}`}=${flagValue}`;
}
}
return commandString;
};
const addArgsToCommandString = (commandString, commandArgsMetadata, args) => {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
for (const [argName, _arg] of Object.entries(commandArgsMetadata)) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
const argValue = args?.[argName];
if (argValue) {
commandString += ` ${argValue}`;
}
}
return commandString;
};
export const printGeneratedCommand = (command, flags, args) => {
if (!printCommandEnabled) {
return;
}
const cliAlias = command.config.pjson.oclif.bin;
const commandId = command.id;
const { flags: commandFlagsMetadata, args: commandArgsMetadata } = getFlagsAndArgsFromCommand(command);
let commandString = `$ ${cliAlias} ${commandId}`;
commandString = addFlagsToCommandString(commandString, commandFlagsMetadata, flags);
commandString = addArgsToCommandString(commandString, commandArgsMetadata, args);
logger.info(`
Use the following command for the same results:
${wrapInBox(commandString)}`);
};