{"version":3,"file":"Application.cjs","sources":["../../../../../packages/cli-common/src/application/Application.ts"],"sourcesContent":["import { InvalidInputError } from './InputParser'\nimport { CommandManager } from './CommandManager'\nimport chalk from 'chalk'\nimport { Command } from './Command'\n\nexport class Application {\n\tconstructor(\n\t\tprivate readonly commandManager: CommandManager,\n\t\tprivate readonly applicationDescription: string,\n\t\tprivate readonly options: {\n\t\t\tbeforeRun?: (args: {command: Command<any, any>; name: string; args: string[]}) => void\n\t\t} = {},\n\t) {}\n\n\tasync run(args: string[]): Promise<void> {\n\t\tconst [name, ...rest] = args\n\t\tif (!name || name === '--help') {\n\t\t\tconsole.error(this.applicationDescription)\n\t\t\tconsole.error(`Usage: <command> <command args>`)\n\t\t\tconst commands = Object.entries(this.commandManager.commands)\n\t\t\t\t.filter(([name, factory], index, commands) => commands.findIndex(it => it[1] === factory) === index)\n\t\t\t\t.map(([name]) => name)\n\t\t\t\t.sort((a, b) => a.localeCompare(b))\n\n\t\t\tconst maxCommandNameLength = Math.max(...commands.map(it => it.length))\n\n\t\t\tfor (let commandName of commands) {\n\t\t\t\tconst [, command] = this.commandManager.createCommand(commandName)\n\t\t\t\tconst configuration = command.getConfiguration()\n\t\t\t\tconst indent = '    '\n\t\t\t\tconsole.error(\n\t\t\t\t\t`${indent}${chalk.greenBright(\n\t\t\t\t\t\tcommandName.padEnd(maxCommandNameLength),\n\t\t\t\t\t)}${indent}${configuration.getDescription()}`,\n\t\t\t\t)\n\t\t\t\tif (name === '--help') {\n\t\t\t\t\tconst helpIndent = `${indent}${' '.repeat(maxCommandNameLength)}${indent}`\n\t\t\t\t\tconst usage = configuration.getUsage({ format: 'multiline', indent: helpIndent })\n\t\t\t\t\tif (usage) {\n\t\t\t\t\t\tconsole.error(chalk.green(usage))\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.error(`${helpIndent}${chalk.gray('No options')}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn process.exit(0)\n\t\t}\n\t\treturn this.runCommandInternal(name, rest, true)\n\t}\n\n\tpublic async runCommand(name: string, args: string[]) {\n\t\treturn this.runCommandInternal(name, args, false)\n\t}\n\n\tpublic async runCommandInternal(name: string, args: string[], showCommandName: boolean) {\n\t\tconst [fullName, command] = this.commandManager.createCommand(name)\n\n\t\tif (args[0] === '--help' || args[0] === '-h') {\n\t\t\tif (showCommandName) {\n\t\t\t\tconsole.error(chalk.greenBright(fullName))\n\t\t\t}\n\t\t\tconst configuration = command.getConfiguration()\n\t\t\tconst commandDescription = configuration.getDescription()\n\t\t\tif (commandDescription) {\n\t\t\t\tconsole.error(commandDescription)\n\t\t\t}\n\t\t\tconst shortUsage = configuration.getUsage({ format: 'short' })\n\t\t\tif (shortUsage) {\n\t\t\t\tconsole.error('\\nUsage:')\n\t\t\t\tconsole.error(chalk.green(shortUsage))\n\t\t\t\tconsole.error('\\nArguments and options:')\n\t\t\t\tconsole.error(configuration.getUsage({ format: 'multiline' }))\n\t\t\t}\n\n\t\t\treturn process.exit(0)\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.options.beforeRun?.({ command, args, name: fullName })\n\n\t\t\tconst result = await command.run(args)\n\t\t\treturn process.exit(result)\n\t\t} catch (e) {\n\t\t\tif (e instanceof InvalidInputError) {\n\t\t\t\tconsole.error(chalk.bgRedBright.white(e.message))\n\t\t\t\tconst configuration = command.getConfiguration()\n\t\t\t\tconsole.error(`${showCommandName ? chalk.greenBright(fullName) + ' ' : ''}${chalk.green(configuration.getUsage({ format: 'line' }))}`)\n\n\t\t\t\treturn process.exit(1)\n\t\t\t} else {\n\t\t\t\tconsole.error(e)\n\t\t\t\treturn process.exit(2)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["name","commands","InvalidInputError"],"mappings":"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"}