import { parserErrorHandler } from './error'; import { internalOptions } from './internalOptions'; import { Parser } from './Parser'; import { CliPromptHandler, promptHandler } from './prompt'; import { createRunHandler } from './runHandler'; import { CliOptions, CliProgramDefinition, CliRunResult, ParsedCliCommand } from './types'; export class Cli { public static start = async ( programDefinition: CliProgramDefinition, version?: string, cliOptions: CliOptions = {}, argv = process.argv ): Promise => { const cli = new Cli(programDefinition, version, cliOptions); return cli.start(argv); }; public static parse = ( programDefinition: CliProgramDefinition, version?: string, cliOptions: CliOptions = {}, argv = process.argv ): ParsedCliCommand => { const cli = new Cli(programDefinition, version, cliOptions); return cli.parse(argv); }; constructor( private programDefinition: CliProgramDefinition, private version?: string, private cliOptions: CliOptions = {} ) {} public parse = (argv: string[] = process.argv): ParsedCliCommand => { const parser = new Parser( argv, this.programDefinition, createRunHandler(this.cliOptions), parserErrorHandler, promptHandler, this.version, internalOptions, this.cliOptions.showPrompts ); return parser.parsedCommand; }; public start = async (argv: string[] = process.argv): Promise => { const parsedCommand = this.parse(argv); return parsedCommand.run(); }; }