import program from "commander"; import { AuthCli, ProjectsCli, ModelsCli, CollectionCli } from '../cli'; import Config from '../config'; import { ICli } from '../types'; class ProgramService { public async start() { program.version(Config.VERSION) program.description(Config.DESCRIPTION) this.addCli(AuthCli); this.addCli(ProjectsCli); this.addCli(ModelsCli); this.addCli(CollectionCli); } private addCli(cli: ICli) { cli.routes.forEach(async element => { const mainCommand = program.command(element.command).description(element.description); if (element.subCommands && element.subCommands.length) { element.subCommands.forEach(sub => { const subCommand = mainCommand .command(sub.command) .description(sub.description) .action((options) => sub.handler(options)); if (sub.options && sub.options.length) { sub.options.forEach(subOption => { subCommand.option(subOption.flags, subOption.description, subOption.defaultValue); }); } }); } else { mainCommand.action((option) => element.handler(option)); if (element.options && element.options.length) { element.options.forEach(opt => { mainCommand.option(opt.flags, opt.description, opt.defaultValue); }); } } }); } } export default new ProgramService();