@tsed/cli-core 4.0.0-rc.1 → 4.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -35,19 +35,16 @@ let CliCore = CliCore_1 = class CliCore {
35
35
  }
36
36
  return this;
37
37
  }
38
- static async bootstrap(settings, module = CliCore_1) {
38
+ static async create(settings, module = CliCore_1) {
39
39
  const injector = this.createInjector(settings);
40
40
  settings.plugins && (await (0, loadPlugins_1.loadPlugins)(injector));
41
41
  await this.loadInjector(injector, module);
42
42
  await injector.emit("$onReady");
43
- const cli = injector.get(CliCore_1);
44
- try {
45
- await cli.cliService.parseArgs(injector.settings.get("argv"));
46
- }
47
- catch (er) {
48
- throw new CliError_1.CliError({ origin: er, cli });
49
- }
50
- return cli;
43
+ return injector.get(CliCore_1);
44
+ }
45
+ static async bootstrap(settings, module = CliCore_1) {
46
+ const cli = await this.create(settings, module);
47
+ return cli.bootstrap();
51
48
  }
52
49
  static async loadInjector(injector, module = CliCore_1) {
53
50
  await injector.emit("$beforeInit");
@@ -84,6 +81,15 @@ let CliCore = CliCore_1 = class CliCore {
84
81
  }
85
82
  return process.cwd();
86
83
  }
84
+ async bootstrap() {
85
+ try {
86
+ await this.cliService.parseArgs(this.injector.settings.get("argv"));
87
+ }
88
+ catch (er) {
89
+ throw new CliError_1.CliError({ origin: er, cli: this });
90
+ }
91
+ return this;
92
+ }
87
93
  };
88
94
  tslib_1.__decorate([
89
95
  (0, di_1.Inject)(),
@@ -1 +1 @@
1
- {"version":3,"file":"CliCore.js","sourceRoot":"","sources":["../../src/CliCore.ts"],"names":[],"mappings":"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","sourcesContent":["import {Inject, InjectorService, Module} from \"@tsed/di\";\nimport {Type} from \"@tsed/core\";\nimport chalk from \"chalk\";\nimport {Command} from \"commander\";\nimport {join, resolve} from \"path\";\nimport updateNotifier from \"update-notifier\";\nimport {CliConfiguration} from \"./services/CliConfiguration\";\nimport {CliPackageJson} from \"./services/CliPackageJson\";\nimport {CliService} from \"./services/CliService\";\nimport {ProjectPackageJson} from \"./services/ProjectPackageJson\";\nimport {createInjector} from \"./utils/createInjector\";\nimport {loadPlugins} from \"./utils/loadPlugins\";\nimport {CliError} from \"./domains/CliError\";\nimport semver from \"semver\";\n\nfunction isHelpManual(argv: string[]) {\n return argv.includes(\"-h\") || argv.includes(\"--help\");\n}\n\n@Module({\n imports: [CliPackageJson, ProjectPackageJson, CliService, CliConfiguration]\n})\nexport class CliCore {\n @Inject()\n injector: InjectorService;\n\n @Inject()\n cliService: CliService;\n\n static checkNodeVersion(wanted: string, id: string) {\n if (!semver.satisfies(process.version, wanted)) {\n console.log(\n chalk.red(\n \"You are using Node \" +\n process.version +\n \", but this version of \" +\n id +\n \" requires Node \" +\n wanted +\n \".\\nPlease upgrade your Node version.\"\n )\n );\n process.exit(1);\n }\n\n return this;\n }\n\n static async bootstrap(settings: Partial<TsED.Configuration>, module: Type = CliCore): Promise<CliCore> {\n const injector = this.createInjector(settings);\n\n settings.plugins && (await loadPlugins(injector));\n\n await this.loadInjector(injector, module);\n\n await injector.emit(\"$onReady\");\n\n const cli = injector.get<CliCore>(CliCore)!;\n\n try {\n await cli.cliService.parseArgs(injector.settings.get(\"argv\")!);\n } catch (er) {\n throw new CliError({origin: er, cli});\n }\n\n return cli;\n }\n\n static async loadInjector(injector: InjectorService, module: Type = CliCore) {\n await injector.emit(\"$beforeInit\");\n\n injector.addProvider(CliCore, {\n useClass: module\n });\n\n await injector.load();\n await injector.invoke(module);\n await injector.emit(\"$afterInit\");\n\n injector.settings.set(\"loaded\", true);\n }\n\n static updateNotifier(pkg: any) {\n updateNotifier({pkg, updateCheckInterval: 0}).notify();\n return this;\n }\n\n protected static createInjector(settings: Partial<TsED.Configuration>) {\n const argv = settings.argv || process.argv;\n\n return createInjector({\n ...settings,\n name: settings.name || \"tsed\",\n argv,\n project: {\n rootDir: this.getProjectRoot(argv),\n srcDir: \"src\",\n scriptsDir: \"scripts\",\n ...(settings.project || {})\n }\n });\n }\n\n protected static getProjectRoot(argv: string[]) {\n if (!isHelpManual(argv)) {\n const projectRoot =\n new Command().option(\"-r, --root-dir <path>\", \"Project root directory\").allowUnknownOption(true).parse(argv).opts().rootDir || \"\";\n\n return resolve(join(process.cwd(), projectRoot));\n }\n\n return process.cwd();\n }\n}\n"]}
1
+ {"version":3,"file":"CliCore.js","sourceRoot":"","sources":["../../src/CliCore.ts"],"names":[],"mappings":"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","sourcesContent":["import {Inject, InjectorService, Module} from \"@tsed/di\";\nimport {Type} from \"@tsed/core\";\nimport chalk from \"chalk\";\nimport {Command} from \"commander\";\nimport {join, resolve} from \"path\";\nimport updateNotifier from \"update-notifier\";\nimport {CliConfiguration} from \"./services/CliConfiguration\";\nimport {CliPackageJson} from \"./services/CliPackageJson\";\nimport {CliService} from \"./services/CliService\";\nimport {ProjectPackageJson} from \"./services/ProjectPackageJson\";\nimport {createInjector} from \"./utils/createInjector\";\nimport {loadPlugins} from \"./utils/loadPlugins\";\nimport {CliError} from \"./domains/CliError\";\nimport semver from \"semver\";\n\nfunction isHelpManual(argv: string[]) {\n return argv.includes(\"-h\") || argv.includes(\"--help\");\n}\n\n@Module({\n imports: [CliPackageJson, ProjectPackageJson, CliService, CliConfiguration]\n})\nexport class CliCore {\n @Inject()\n readonly injector: InjectorService;\n\n @Inject()\n readonly cliService: CliService;\n\n static checkNodeVersion(wanted: string, id: string) {\n if (!semver.satisfies(process.version, wanted)) {\n console.log(\n chalk.red(\n \"You are using Node \" +\n process.version +\n \", but this version of \" +\n id +\n \" requires Node \" +\n wanted +\n \".\\nPlease upgrade your Node version.\"\n )\n );\n process.exit(1);\n }\n\n return this;\n }\n\n static async create<Cli extends CliCore = CliCore>(settings: Partial<TsED.Configuration>, module: Type = CliCore): Promise<Cli> {\n const injector = this.createInjector(settings);\n\n settings.plugins && (await loadPlugins(injector));\n\n await this.loadInjector(injector, module);\n\n await injector.emit(\"$onReady\");\n\n return injector.get<Cli>(CliCore)!;\n }\n\n static async bootstrap(settings: Partial<TsED.Configuration>, module: Type = CliCore) {\n const cli = await this.create(settings, module);\n\n return cli.bootstrap();\n }\n\n static async loadInjector(injector: InjectorService, module: Type = CliCore) {\n await injector.emit(\"$beforeInit\");\n\n injector.addProvider(CliCore, {\n useClass: module\n });\n\n await injector.load();\n await injector.invoke(module);\n await injector.emit(\"$afterInit\");\n\n injector.settings.set(\"loaded\", true);\n }\n\n static updateNotifier(pkg: any) {\n updateNotifier({pkg, updateCheckInterval: 0}).notify();\n return this;\n }\n\n protected static createInjector(settings: Partial<TsED.Configuration>) {\n const argv = settings.argv || process.argv;\n\n return createInjector({\n ...settings,\n name: settings.name || \"tsed\",\n argv,\n project: {\n rootDir: this.getProjectRoot(argv),\n srcDir: \"src\",\n scriptsDir: \"scripts\",\n ...(settings.project || {})\n }\n });\n }\n\n protected static getProjectRoot(argv: string[]) {\n if (!isHelpManual(argv)) {\n const projectRoot =\n new Command().option(\"-r, --root-dir <path>\", \"Project root directory\").allowUnknownOption(true).parse(argv).opts().rootDir || \"\";\n\n return resolve(join(process.cwd(), projectRoot));\n }\n\n return process.cwd();\n }\n\n async bootstrap() {\n try {\n await this.cliService.parseArgs(this.injector.settings.get(\"argv\")!);\n } catch (er) {\n throw new CliError({origin: er, cli: this});\n }\n\n return this;\n }\n}\n"]}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CliLoadFile = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const di_1 = require("@tsed/di");
6
+ const path_1 = require("path");
7
+ const ajv_1 = tslib_1.__importDefault(require("ajv"));
8
+ const CliYaml_1 = require("./CliYaml");
9
+ const CliFs_1 = require("./CliFs");
10
+ let CliLoadFile = class CliLoadFile {
11
+ cliYaml;
12
+ cliFs;
13
+ #ajv;
14
+ constructor() {
15
+ const options = {
16
+ verbose: false,
17
+ coerceTypes: true,
18
+ strict: false
19
+ };
20
+ this.#ajv = new ajv_1.default(options);
21
+ }
22
+ /**
23
+ * Load a configuration file from yaml, json
24
+ */
25
+ async loadFile(path, schema) {
26
+ let config;
27
+ const ext = (0, path_1.extname)(path);
28
+ if ([".yml", ".yaml"].includes(ext)) {
29
+ config = await this.cliYaml.read(path);
30
+ }
31
+ else if ([".json"].includes(ext)) {
32
+ config = await JSON.parse(await this.cliFs.readFile(path, "utf8"));
33
+ }
34
+ else if (!config) {
35
+ throw new Error("Unsupported format file");
36
+ }
37
+ if (schema) {
38
+ const validate = this.#ajv.compile(schema);
39
+ const isValid = validate(config);
40
+ if (!isValid) {
41
+ const [error] = validate.errors;
42
+ throw new Error([
43
+ `${error.instancePath.replace(/\//gi, ".")} `,
44
+ error.message,
45
+ error.params?.allowedValues && `. Allowed values: ${error.params?.allowedValues}`
46
+ ]
47
+ .filter(Boolean)
48
+ .join(""));
49
+ }
50
+ }
51
+ return config;
52
+ }
53
+ };
54
+ tslib_1.__decorate([
55
+ (0, di_1.Inject)(),
56
+ tslib_1.__metadata("design:type", CliYaml_1.CliYaml)
57
+ ], CliLoadFile.prototype, "cliYaml", void 0);
58
+ tslib_1.__decorate([
59
+ (0, di_1.Inject)(),
60
+ tslib_1.__metadata("design:type", CliFs_1.CliFs)
61
+ ], CliLoadFile.prototype, "cliFs", void 0);
62
+ CliLoadFile = tslib_1.__decorate([
63
+ (0, di_1.Injectable)(),
64
+ tslib_1.__metadata("design:paramtypes", [])
65
+ ], CliLoadFile);
66
+ exports.CliLoadFile = CliLoadFile;
67
+ //# sourceMappingURL=CliLoadFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CliLoadFile.js","sourceRoot":"","sources":["../../../src/services/CliLoadFile.ts"],"names":[],"mappings":";;;;AAAA,iCAA4C;AAC5C,+BAA6B;AAC7B,sDAAgC;AAChC,uCAAkC;AAClC,mCAA8B;AAG9B,IAAa,WAAW,GAAxB,MAAa,WAAW;IAEZ,OAAO,CAAU;IAGjB,KAAK,CAAQ;IAEvB,IAAI,CAAM;IAEV;QACE,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,KAAK;SACd,CAAC;QAEF,IAAI,CAAC,IAAI,GAAG,IAAI,aAAG,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAc,IAAY,EAAE,MAAe;QACvD,IAAI,MAAW,CAAC;QAChB,MAAM,GAAG,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACnC,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACxC;aAAM,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAClC,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;SACpE;aAAM,IAAI,CAAC,MAAM,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC5C;QAED,IAAI,MAAM,EAAE;YACV,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAE3C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAEjC,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,MAAO,CAAC;gBAEjC,MAAM,IAAI,KAAK,CACb;oBACE,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;oBAC7C,KAAK,CAAC,OAAO;oBACb,KAAK,CAAC,MAAM,EAAE,aAAa,IAAI,qBAAqB,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE;iBAClF;qBACE,MAAM,CAAC,OAAO,CAAC;qBACf,IAAI,CAAC,EAAE,CAAC,CACZ,CAAC;aACH;SACF;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAA;AAtDC;IADC,IAAA,WAAM,GAAE;sCACU,iBAAO;4CAAC;AAG3B;IADC,IAAA,WAAM,GAAE;sCACQ,aAAK;0CAAC;AALZ,WAAW;IADvB,IAAA,eAAU,GAAE;;GACA,WAAW,CAwDvB;AAxDY,kCAAW","sourcesContent":["import {Inject, Injectable} from \"@tsed/di\";\nimport {extname} from \"path\";\nimport Ajv, {Schema} from \"ajv\";\nimport {CliYaml} from \"./CliYaml\";\nimport {CliFs} from \"./CliFs\";\n\n@Injectable()\nexport class CliLoadFile {\n @Inject()\n protected cliYaml: CliYaml;\n\n @Inject()\n protected cliFs: CliFs;\n\n #ajv: Ajv;\n\n constructor() {\n const options = {\n verbose: false,\n coerceTypes: true,\n strict: false\n };\n\n this.#ajv = new Ajv(options);\n }\n\n /**\n * Load a configuration file from yaml, json\n */\n async loadFile<Model = any>(path: string, schema?: Schema): Promise<Model> {\n let config: any;\n const ext = extname(path);\n\n if ([\".yml\", \".yaml\"].includes(ext)) {\n config = await this.cliYaml.read(path);\n } else if ([\".json\"].includes(ext)) {\n config = await JSON.parse(await this.cliFs.readFile(path, \"utf8\"));\n } else if (!config) {\n throw new Error(\"Unsupported format file\");\n }\n\n if (schema) {\n const validate = this.#ajv.compile(schema);\n\n const isValid = validate(config);\n\n if (!isValid) {\n const [error] = validate.errors!;\n\n throw new Error(\n [\n `${error.instancePath.replace(/\\//gi, \".\")} `,\n error.message,\n error.params?.allowedValues && `. Allowed values: ${error.params?.allowedValues}`\n ]\n .filter(Boolean)\n .join(\"\")\n );\n }\n }\n\n return config;\n }\n}\n"]}
@@ -45,6 +45,9 @@ let CliService = class CliService {
45
45
  async runLifecycle(cmdName, data = {}) {
46
46
  data = await this.beforePrompt(cmdName, data);
47
47
  data = await this.prompt(cmdName, data);
48
+ await this.dispatch(cmdName, data);
49
+ }
50
+ async dispatch(cmdName, data) {
48
51
  try {
49
52
  await this.exec(cmdName, data);
50
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CliService.js","sourceRoot":"","sources":["../../../src/services/CliService.ts"],"names":[],"mappings":"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","sourcesContent":["import {classOf} from \"@tsed/core\";\nimport {Constant, Inject, Injectable, InjectorService, Provider} from \"@tsed/di\";\nimport {Argument, Command} from \"commander\";\nimport Inquirer from \"inquirer\";\nimport {CommandStoreKeys} from \"../domains/CommandStoreKeys\";\nimport {CommandProvider} from \"../interfaces/CommandProvider\";\nimport {CommandMetadata} from \"../interfaces/CommandMetadata\";\nimport {CommandArg, CommandOptions} from \"../interfaces/CommandParameters\";\nimport {PROVIDER_TYPE_COMMAND} from \"../registries/CommandRegistry\";\nimport {createSubTasks, createTasksRunner} from \"../utils/createTasksRunner\";\nimport {getCommandMetadata} from \"../utils/getCommandMetadata\";\nimport {mapCommanderArgs} from \"../utils/mapCommanderArgs\";\nimport {mapCommanderOptions} from \"../utils/mapCommanderOptions\";\nimport {parseOption} from \"../utils/parseOption\";\nimport {CliHooks} from \"./CliHooks\";\nimport {ProjectPackageJson} from \"./ProjectPackageJson\";\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport inquirer_autocomplete_prompt from \"inquirer-autocomplete-prompt\";\n\nInquirer.registerPrompt(\"autocomplete\", inquirer_autocomplete_prompt);\n\n@Injectable()\nexport class CliService {\n readonly program = new Command();\n\n @Constant(\"project.reinstallAfterRun\", false)\n reinstallAfterRun = false;\n\n @Constant(\"pkg\", {version: \"1.0.0\"})\n protected pkg: any;\n\n @Inject()\n protected injector: InjectorService;\n\n @Inject()\n protected hooks: CliHooks;\n\n @Inject()\n protected projectPkg: ProjectPackageJson;\n\n private commands = new Map();\n\n /**\n * Parse process.argv and runLifecycle action\n * @param argv\n */\n async parseArgs(argv: string[]): Promise<void> {\n const {program} = this;\n\n program.version(this.pkg.version);\n\n this.load();\n\n await program.parseAsync(argv);\n }\n\n /**\n * Run lifecycle\n * @param cmdName\n * @param data\n */\n public async runLifecycle(cmdName: string, data: any = {}) {\n data = await this.beforePrompt(cmdName, data);\n data = await this.prompt(cmdName, data);\n\n try {\n await this.exec(cmdName, data);\n } catch (er) {\n await this.injector.emit(\"$onFinish\", er);\n await this.injector.destroy();\n throw er;\n }\n\n await this.injector.emit(\"$onFinish\");\n await this.injector.destroy();\n }\n\n public async exec(cmdName: string, ctx: any) {\n const initialTasks = await this.getTasks(cmdName, ctx);\n\n if (initialTasks.length) {\n const tasks = [\n ...initialTasks,\n {\n title: \"Install dependencies\",\n enabled: () => this.reinstallAfterRun && (this.projectPkg.rewrite || this.projectPkg.reinstall),\n task: createSubTasks(() => this.projectPkg.install(ctx), {...ctx, concurrent: false})\n },\n ...(await this.getPostInstallTasks(cmdName, ctx))\n ];\n\n return createTasksRunner(tasks, this.mapContext(cmdName, ctx));\n }\n }\n\n /**\n * Run prompt for a given command\n * @param cmdName\n * @param ctx Initial data\n */\n public async beforePrompt(cmdName: string, ctx: any = {}) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n const verbose = ctx.verbose;\n\n if (instance.$beforePrompt) {\n ctx = await instance.$beforePrompt(JSON.parse(JSON.stringify(ctx)));\n ctx.verbose = verbose;\n }\n return ctx;\n }\n\n /**\n * Run prompt for a given command\n * @param cmdName\n * @param ctx Initial data\n */\n public async prompt(cmdName: string, ctx: any = {}) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n\n if (instance.$prompt) {\n const questions = [\n ...((await instance.$prompt(ctx)) as any[]),\n ...(await this.hooks.emit(CommandStoreKeys.PROMPT_HOOKS, cmdName, ctx))\n ];\n\n if (questions.length) {\n ctx = {\n ...ctx,\n ...((await Inquirer.prompt(questions)) as any)\n };\n }\n }\n\n return ctx;\n }\n\n /**\n * Run lifecycle\n * @param cmdName\n * @param ctx\n */\n public async getTasks(cmdName: string, ctx: any) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.token)!;\n\n ctx = this.mapContext(cmdName, ctx);\n\n if (instance.$beforeExec) {\n await instance.$beforeExec(ctx);\n }\n\n return [...(await instance.$exec(ctx)), ...(await this.hooks.emit(CommandStoreKeys.EXEC_HOOKS, cmdName, ctx))];\n }\n\n public async getPostInstallTasks(cmdName: string, ctx: any) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n\n ctx = this.mapContext(cmdName, ctx);\n\n return [\n ...(instance.$postInstall ? await instance.$postInstall(ctx) : []),\n ...(await this.hooks.emit(CommandStoreKeys.POST_INSTALL_HOOKS, cmdName, ctx)),\n ...(instance.$afterPostInstall ? await instance.$afterPostInstall(ctx) : [])\n ];\n }\n\n public createCommand(metadata: CommandMetadata) {\n const {args, name, options, description, alias, allowUnknownOption} = metadata;\n\n if (this.commands.has(name)) {\n return this.commands.get(name).command;\n }\n\n let cmd = this.program.command(name);\n\n const onAction = (...commanderArgs: any[]) => {\n const [, ...rawArgs] = cmd.args;\n const data = {\n verbose: !!this.program.opts().verbose,\n ...mapCommanderArgs(args, commanderArgs),\n ...mapCommanderOptions(this.program.commands),\n rawArgs\n };\n\n return this.runLifecycle(name, data);\n };\n\n if (alias) {\n cmd = cmd.alias(alias);\n }\n\n cmd = cmd.description(description);\n cmd = this.buildArguments(cmd, args);\n\n cmd = cmd.action(onAction);\n\n if (options) {\n cmd = this.buildOption(cmd, options, !!allowUnknownOption);\n }\n\n return cmd;\n }\n\n private load() {\n this.injector.getProviders(PROVIDER_TYPE_COMMAND).forEach((provider) => this.build(provider));\n }\n\n private mapContext(cmdName: string, ctx: any) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n const verbose = ctx.verbose;\n\n if (instance.$mapContext) {\n ctx = instance.$mapContext(JSON.parse(JSON.stringify(ctx)));\n ctx.verbose = verbose;\n }\n\n if (ctx.verbose) {\n this.injector.logger.level = \"debug\";\n } else {\n this.injector.logger.level = \"info\";\n }\n\n return ctx;\n }\n\n /**\n * Build command and sub-commands\n * @param provider\n */\n private build(provider: Provider<any>) {\n const metadata = getCommandMetadata(provider.useClass);\n\n if (metadata.name) {\n if (this.commands.has(metadata.name)) {\n throw Error(\n `The ${metadata.name} command is already registered. Change your command name used by the class ${classOf(provider.useClass)}`\n );\n }\n\n provider.command = this.createCommand(metadata);\n\n this.commands.set(metadata.name, provider);\n }\n }\n\n /**\n * Build sub-command options\n * @param subCommand\n * @param options\n * @param allowUnknownOptions\n */\n private buildOption(subCommand: Command, options: {[key: string]: CommandOptions}, allowUnknownOptions: boolean) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(options).reduce((subCommand, [flags, {description, required, customParser, defaultValue, ...options}]) => {\n const fn = (v: any) => parseOption(v, options);\n\n if (options.type === Boolean) {\n defaultValue = false;\n }\n\n return required\n ? subCommand.requiredOption(flags, description, fn, defaultValue)\n : subCommand.option(flags, description, fn, defaultValue);\n }, subCommand);\n\n subCommand.option(\"-r, --root-dir <path>\", \"Project root directory\");\n subCommand.option(\"--verbose\", \"Verbose mode\", () => true);\n\n if (allowUnknownOptions) {\n subCommand.allowUnknownOption(true);\n }\n\n return subCommand;\n }\n\n private buildArguments(cmd: Command, args: Record<string, CommandArg>) {\n return Object.entries(args).reduce((cmd, [key, {description, required, defaultValue}]) => {\n const argument = new Argument(required ? `<${key}>` : `[${key}]`, description);\n\n if (defaultValue !== undefined) {\n argument.default(defaultValue);\n }\n\n return cmd.addArgument(argument);\n }, cmd);\n }\n}\n"]}
1
+ {"version":3,"file":"CliService.js","sourceRoot":"","sources":["../../../src/services/CliService.ts"],"names":[],"mappings":"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","sourcesContent":["import {classOf} from \"@tsed/core\";\nimport {Constant, Inject, Injectable, InjectorService, Provider} from \"@tsed/di\";\nimport {Argument, Command} from \"commander\";\nimport Inquirer from \"inquirer\";\nimport {CommandStoreKeys} from \"../domains/CommandStoreKeys\";\nimport {CommandProvider} from \"../interfaces/CommandProvider\";\nimport {CommandMetadata} from \"../interfaces/CommandMetadata\";\nimport {CommandArg, CommandOptions} from \"../interfaces/CommandParameters\";\nimport {PROVIDER_TYPE_COMMAND} from \"../registries/CommandRegistry\";\nimport {createSubTasks, createTasksRunner} from \"../utils/createTasksRunner\";\nimport {getCommandMetadata} from \"../utils/getCommandMetadata\";\nimport {mapCommanderArgs} from \"../utils/mapCommanderArgs\";\nimport {mapCommanderOptions} from \"../utils/mapCommanderOptions\";\nimport {parseOption} from \"../utils/parseOption\";\nimport {CliHooks} from \"./CliHooks\";\nimport {ProjectPackageJson} from \"./ProjectPackageJson\";\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport inquirer_autocomplete_prompt from \"inquirer-autocomplete-prompt\";\n\nInquirer.registerPrompt(\"autocomplete\", inquirer_autocomplete_prompt);\n\n@Injectable()\nexport class CliService {\n readonly program = new Command();\n\n @Constant(\"project.reinstallAfterRun\", false)\n reinstallAfterRun = false;\n\n @Constant(\"pkg\", {version: \"1.0.0\"})\n protected pkg: any;\n\n @Inject()\n protected injector: InjectorService;\n\n @Inject()\n protected hooks: CliHooks;\n\n @Inject()\n protected projectPkg: ProjectPackageJson;\n\n private commands = new Map();\n\n /**\n * Parse process.argv and runLifecycle action\n * @param argv\n */\n async parseArgs(argv: string[]): Promise<void> {\n const {program} = this;\n\n program.version(this.pkg.version);\n\n this.load();\n\n await program.parseAsync(argv);\n }\n\n /**\n * Run lifecycle\n * @param cmdName\n * @param data\n */\n public async runLifecycle(cmdName: string, data: any = {}) {\n data = await this.beforePrompt(cmdName, data);\n data = await this.prompt(cmdName, data);\n\n await this.dispatch(cmdName, data);\n }\n\n public async dispatch(cmdName: string, data: any) {\n try {\n await this.exec(cmdName, data);\n } catch (er) {\n await this.injector.emit(\"$onFinish\", er);\n await this.injector.destroy();\n throw er;\n }\n\n await this.injector.emit(\"$onFinish\");\n await this.injector.destroy();\n }\n\n public async exec(cmdName: string, ctx: any) {\n const initialTasks = await this.getTasks(cmdName, ctx);\n\n if (initialTasks.length) {\n const tasks = [\n ...initialTasks,\n {\n title: \"Install dependencies\",\n enabled: () => this.reinstallAfterRun && (this.projectPkg.rewrite || this.projectPkg.reinstall),\n task: createSubTasks(() => this.projectPkg.install(ctx), {...ctx, concurrent: false})\n },\n ...(await this.getPostInstallTasks(cmdName, ctx))\n ];\n\n return createTasksRunner(tasks, this.mapContext(cmdName, ctx));\n }\n }\n\n /**\n * Run prompt for a given command\n * @param cmdName\n * @param ctx Initial data\n */\n public async beforePrompt(cmdName: string, ctx: any = {}) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n const verbose = ctx.verbose;\n\n if (instance.$beforePrompt) {\n ctx = await instance.$beforePrompt(JSON.parse(JSON.stringify(ctx)));\n ctx.verbose = verbose;\n }\n return ctx;\n }\n\n /**\n * Run prompt for a given command\n * @param cmdName\n * @param ctx Initial data\n */\n public async prompt(cmdName: string, ctx: any = {}) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n\n if (instance.$prompt) {\n const questions = [\n ...((await instance.$prompt(ctx)) as any[]),\n ...(await this.hooks.emit(CommandStoreKeys.PROMPT_HOOKS, cmdName, ctx))\n ];\n\n if (questions.length) {\n ctx = {\n ...ctx,\n ...((await Inquirer.prompt(questions)) as any)\n };\n }\n }\n\n return ctx;\n }\n\n /**\n * Run lifecycle\n * @param cmdName\n * @param ctx\n */\n public async getTasks(cmdName: string, ctx: any) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.token)!;\n\n ctx = this.mapContext(cmdName, ctx);\n\n if (instance.$beforeExec) {\n await instance.$beforeExec(ctx);\n }\n\n return [...(await instance.$exec(ctx)), ...(await this.hooks.emit(CommandStoreKeys.EXEC_HOOKS, cmdName, ctx))];\n }\n\n public async getPostInstallTasks(cmdName: string, ctx: any) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n\n ctx = this.mapContext(cmdName, ctx);\n\n return [\n ...(instance.$postInstall ? await instance.$postInstall(ctx) : []),\n ...(await this.hooks.emit(CommandStoreKeys.POST_INSTALL_HOOKS, cmdName, ctx)),\n ...(instance.$afterPostInstall ? await instance.$afterPostInstall(ctx) : [])\n ];\n }\n\n public createCommand(metadata: CommandMetadata) {\n const {args, name, options, description, alias, allowUnknownOption} = metadata;\n\n if (this.commands.has(name)) {\n return this.commands.get(name).command;\n }\n\n let cmd = this.program.command(name);\n\n const onAction = (...commanderArgs: any[]) => {\n const [, ...rawArgs] = cmd.args;\n const data = {\n verbose: !!this.program.opts().verbose,\n ...mapCommanderArgs(args, commanderArgs),\n ...mapCommanderOptions(this.program.commands),\n rawArgs\n };\n\n return this.runLifecycle(name, data);\n };\n\n if (alias) {\n cmd = cmd.alias(alias);\n }\n\n cmd = cmd.description(description);\n cmd = this.buildArguments(cmd, args);\n\n cmd = cmd.action(onAction);\n\n if (options) {\n cmd = this.buildOption(cmd, options, !!allowUnknownOption);\n }\n\n return cmd;\n }\n\n private load() {\n this.injector.getProviders(PROVIDER_TYPE_COMMAND).forEach((provider) => this.build(provider));\n }\n\n private mapContext(cmdName: string, ctx: any) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n const verbose = ctx.verbose;\n\n if (instance.$mapContext) {\n ctx = instance.$mapContext(JSON.parse(JSON.stringify(ctx)));\n ctx.verbose = verbose;\n }\n\n if (ctx.verbose) {\n this.injector.logger.level = \"debug\";\n } else {\n this.injector.logger.level = \"info\";\n }\n\n return ctx;\n }\n\n /**\n * Build command and sub-commands\n * @param provider\n */\n private build(provider: Provider<any>) {\n const metadata = getCommandMetadata(provider.useClass);\n\n if (metadata.name) {\n if (this.commands.has(metadata.name)) {\n throw Error(\n `The ${metadata.name} command is already registered. Change your command name used by the class ${classOf(provider.useClass)}`\n );\n }\n\n provider.command = this.createCommand(metadata);\n\n this.commands.set(metadata.name, provider);\n }\n }\n\n /**\n * Build sub-command options\n * @param subCommand\n * @param options\n * @param allowUnknownOptions\n */\n private buildOption(subCommand: Command, options: {[key: string]: CommandOptions}, allowUnknownOptions: boolean) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(options).reduce((subCommand, [flags, {description, required, customParser, defaultValue, ...options}]) => {\n const fn = (v: any) => parseOption(v, options);\n\n if (options.type === Boolean) {\n defaultValue = false;\n }\n\n return required\n ? subCommand.requiredOption(flags, description, fn, defaultValue)\n : subCommand.option(flags, description, fn, defaultValue);\n }, subCommand);\n\n subCommand.option(\"-r, --root-dir <path>\", \"Project root directory\");\n subCommand.option(\"--verbose\", \"Verbose mode\", () => true);\n\n if (allowUnknownOptions) {\n subCommand.allowUnknownOption(true);\n }\n\n return subCommand;\n }\n\n private buildArguments(cmd: Command, args: Record<string, CommandArg>) {\n return Object.entries(args).reduce((cmd, [key, {description, required, defaultValue}]) => {\n const argument = new Argument(required ? `<${key}>` : `[${key}]`, description);\n\n if (defaultValue !== undefined) {\n argument.default(defaultValue);\n }\n\n return cmd.addArgument(argument);\n }, cmd);\n }\n}\n"]}
@@ -11,6 +11,7 @@ tslib_1.__exportStar(require("./CliFs"), exports);
11
11
  tslib_1.__exportStar(require("./ProjectPackageJson"), exports);
12
12
  tslib_1.__exportStar(require("./Renderer"), exports);
13
13
  tslib_1.__exportStar(require("./CliExeca"), exports);
14
+ tslib_1.__exportStar(require("./CliLoadFile"), exports);
14
15
  tslib_1.__exportStar(require("./CliYaml"), exports);
15
16
  tslib_1.__exportStar(require("./CliDockerComposeYaml"), exports);
16
17
  tslib_1.__exportStar(require("./NpmRegistryClient"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":";;;AAAA,6DAAmC;AACnC,uDAA6B;AAC7B,2DAAiC;AACjC,0DAAgC;AAChC,uDAA6B;AAC7B,yDAA+B;AAC/B,kDAAwB;AACxB,+DAAqC;AACrC,qDAA2B;AAC3B,qDAA2B;AAC3B,oDAA0B;AAC1B,iEAAuC;AACvC,8DAAoC","sourcesContent":["export * from \"./CliConfiguration\";\nexport * from \"./CliService\";\nexport * from \"./CliPackageJson\";\nexport * from \"./CliHttpClient\";\nexport * from \"./CliPlugins\";\nexport * from \"./CliRunScript\";\nexport * from \"./CliFs\";\nexport * from \"./ProjectPackageJson\";\nexport * from \"./Renderer\";\nexport * from \"./CliExeca\";\nexport * from \"./CliYaml\";\nexport * from \"./CliDockerComposeYaml\";\nexport * from \"./NpmRegistryClient\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":";;;AAAA,6DAAmC;AACnC,uDAA6B;AAC7B,2DAAiC;AACjC,0DAAgC;AAChC,uDAA6B;AAC7B,yDAA+B;AAC/B,kDAAwB;AACxB,+DAAqC;AACrC,qDAA2B;AAC3B,qDAA2B;AAC3B,wDAA8B;AAC9B,oDAA0B;AAC1B,iEAAuC;AACvC,8DAAoC","sourcesContent":["export * from \"./CliConfiguration\";\nexport * from \"./CliService\";\nexport * from \"./CliPackageJson\";\nexport * from \"./CliHttpClient\";\nexport * from \"./CliPlugins\";\nexport * from \"./CliRunScript\";\nexport * from \"./CliFs\";\nexport * from \"./ProjectPackageJson\";\nexport * from \"./Renderer\";\nexport * from \"./CliExeca\";\nexport * from \"./CliLoadFile\";\nexport * from \"./CliYaml\";\nexport * from \"./CliDockerComposeYaml\";\nexport * from \"./NpmRegistryClient\";\n"]}
@@ -32,19 +32,16 @@ let CliCore = CliCore_1 = class CliCore {
32
32
  }
33
33
  return this;
34
34
  }
35
- static async bootstrap(settings, module = CliCore_1) {
35
+ static async create(settings, module = CliCore_1) {
36
36
  const injector = this.createInjector(settings);
37
37
  settings.plugins && (await loadPlugins(injector));
38
38
  await this.loadInjector(injector, module);
39
39
  await injector.emit("$onReady");
40
- const cli = injector.get(CliCore_1);
41
- try {
42
- await cli.cliService.parseArgs(injector.settings.get("argv"));
43
- }
44
- catch (er) {
45
- throw new CliError({ origin: er, cli });
46
- }
47
- return cli;
40
+ return injector.get(CliCore_1);
41
+ }
42
+ static async bootstrap(settings, module = CliCore_1) {
43
+ const cli = await this.create(settings, module);
44
+ return cli.bootstrap();
48
45
  }
49
46
  static async loadInjector(injector, module = CliCore_1) {
50
47
  await injector.emit("$beforeInit");
@@ -81,6 +78,15 @@ let CliCore = CliCore_1 = class CliCore {
81
78
  }
82
79
  return process.cwd();
83
80
  }
81
+ async bootstrap() {
82
+ try {
83
+ await this.cliService.parseArgs(this.injector.settings.get("argv"));
84
+ }
85
+ catch (er) {
86
+ throw new CliError({ origin: er, cli: this });
87
+ }
88
+ return this;
89
+ }
84
90
  };
85
91
  __decorate([
86
92
  Inject(),
@@ -1 +1 @@
1
- {"version":3,"file":"CliCore.js","sourceRoot":"","sources":["../../src/CliCore.ts"],"names":[],"mappings":"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","sourcesContent":["import {Inject, InjectorService, Module} from \"@tsed/di\";\nimport {Type} from \"@tsed/core\";\nimport chalk from \"chalk\";\nimport {Command} from \"commander\";\nimport {join, resolve} from \"path\";\nimport updateNotifier from \"update-notifier\";\nimport {CliConfiguration} from \"./services/CliConfiguration\";\nimport {CliPackageJson} from \"./services/CliPackageJson\";\nimport {CliService} from \"./services/CliService\";\nimport {ProjectPackageJson} from \"./services/ProjectPackageJson\";\nimport {createInjector} from \"./utils/createInjector\";\nimport {loadPlugins} from \"./utils/loadPlugins\";\nimport {CliError} from \"./domains/CliError\";\nimport semver from \"semver\";\n\nfunction isHelpManual(argv: string[]) {\n return argv.includes(\"-h\") || argv.includes(\"--help\");\n}\n\n@Module({\n imports: [CliPackageJson, ProjectPackageJson, CliService, CliConfiguration]\n})\nexport class CliCore {\n @Inject()\n injector: InjectorService;\n\n @Inject()\n cliService: CliService;\n\n static checkNodeVersion(wanted: string, id: string) {\n if (!semver.satisfies(process.version, wanted)) {\n console.log(\n chalk.red(\n \"You are using Node \" +\n process.version +\n \", but this version of \" +\n id +\n \" requires Node \" +\n wanted +\n \".\\nPlease upgrade your Node version.\"\n )\n );\n process.exit(1);\n }\n\n return this;\n }\n\n static async bootstrap(settings: Partial<TsED.Configuration>, module: Type = CliCore): Promise<CliCore> {\n const injector = this.createInjector(settings);\n\n settings.plugins && (await loadPlugins(injector));\n\n await this.loadInjector(injector, module);\n\n await injector.emit(\"$onReady\");\n\n const cli = injector.get<CliCore>(CliCore)!;\n\n try {\n await cli.cliService.parseArgs(injector.settings.get(\"argv\")!);\n } catch (er) {\n throw new CliError({origin: er, cli});\n }\n\n return cli;\n }\n\n static async loadInjector(injector: InjectorService, module: Type = CliCore) {\n await injector.emit(\"$beforeInit\");\n\n injector.addProvider(CliCore, {\n useClass: module\n });\n\n await injector.load();\n await injector.invoke(module);\n await injector.emit(\"$afterInit\");\n\n injector.settings.set(\"loaded\", true);\n }\n\n static updateNotifier(pkg: any) {\n updateNotifier({pkg, updateCheckInterval: 0}).notify();\n return this;\n }\n\n protected static createInjector(settings: Partial<TsED.Configuration>) {\n const argv = settings.argv || process.argv;\n\n return createInjector({\n ...settings,\n name: settings.name || \"tsed\",\n argv,\n project: {\n rootDir: this.getProjectRoot(argv),\n srcDir: \"src\",\n scriptsDir: \"scripts\",\n ...(settings.project || {})\n }\n });\n }\n\n protected static getProjectRoot(argv: string[]) {\n if (!isHelpManual(argv)) {\n const projectRoot =\n new Command().option(\"-r, --root-dir <path>\", \"Project root directory\").allowUnknownOption(true).parse(argv).opts().rootDir || \"\";\n\n return resolve(join(process.cwd(), projectRoot));\n }\n\n return process.cwd();\n }\n}\n"]}
1
+ {"version":3,"file":"CliCore.js","sourceRoot":"","sources":["../../src/CliCore.ts"],"names":[],"mappings":"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","sourcesContent":["import {Inject, InjectorService, Module} from \"@tsed/di\";\nimport {Type} from \"@tsed/core\";\nimport chalk from \"chalk\";\nimport {Command} from \"commander\";\nimport {join, resolve} from \"path\";\nimport updateNotifier from \"update-notifier\";\nimport {CliConfiguration} from \"./services/CliConfiguration\";\nimport {CliPackageJson} from \"./services/CliPackageJson\";\nimport {CliService} from \"./services/CliService\";\nimport {ProjectPackageJson} from \"./services/ProjectPackageJson\";\nimport {createInjector} from \"./utils/createInjector\";\nimport {loadPlugins} from \"./utils/loadPlugins\";\nimport {CliError} from \"./domains/CliError\";\nimport semver from \"semver\";\n\nfunction isHelpManual(argv: string[]) {\n return argv.includes(\"-h\") || argv.includes(\"--help\");\n}\n\n@Module({\n imports: [CliPackageJson, ProjectPackageJson, CliService, CliConfiguration]\n})\nexport class CliCore {\n @Inject()\n readonly injector: InjectorService;\n\n @Inject()\n readonly cliService: CliService;\n\n static checkNodeVersion(wanted: string, id: string) {\n if (!semver.satisfies(process.version, wanted)) {\n console.log(\n chalk.red(\n \"You are using Node \" +\n process.version +\n \", but this version of \" +\n id +\n \" requires Node \" +\n wanted +\n \".\\nPlease upgrade your Node version.\"\n )\n );\n process.exit(1);\n }\n\n return this;\n }\n\n static async create<Cli extends CliCore = CliCore>(settings: Partial<TsED.Configuration>, module: Type = CliCore): Promise<Cli> {\n const injector = this.createInjector(settings);\n\n settings.plugins && (await loadPlugins(injector));\n\n await this.loadInjector(injector, module);\n\n await injector.emit(\"$onReady\");\n\n return injector.get<Cli>(CliCore)!;\n }\n\n static async bootstrap(settings: Partial<TsED.Configuration>, module: Type = CliCore) {\n const cli = await this.create(settings, module);\n\n return cli.bootstrap();\n }\n\n static async loadInjector(injector: InjectorService, module: Type = CliCore) {\n await injector.emit(\"$beforeInit\");\n\n injector.addProvider(CliCore, {\n useClass: module\n });\n\n await injector.load();\n await injector.invoke(module);\n await injector.emit(\"$afterInit\");\n\n injector.settings.set(\"loaded\", true);\n }\n\n static updateNotifier(pkg: any) {\n updateNotifier({pkg, updateCheckInterval: 0}).notify();\n return this;\n }\n\n protected static createInjector(settings: Partial<TsED.Configuration>) {\n const argv = settings.argv || process.argv;\n\n return createInjector({\n ...settings,\n name: settings.name || \"tsed\",\n argv,\n project: {\n rootDir: this.getProjectRoot(argv),\n srcDir: \"src\",\n scriptsDir: \"scripts\",\n ...(settings.project || {})\n }\n });\n }\n\n protected static getProjectRoot(argv: string[]) {\n if (!isHelpManual(argv)) {\n const projectRoot =\n new Command().option(\"-r, --root-dir <path>\", \"Project root directory\").allowUnknownOption(true).parse(argv).opts().rootDir || \"\";\n\n return resolve(join(process.cwd(), projectRoot));\n }\n\n return process.cwd();\n }\n\n async bootstrap() {\n try {\n await this.cliService.parseArgs(this.injector.settings.get(\"argv\")!);\n } catch (er) {\n throw new CliError({origin: er, cli: this});\n }\n\n return this;\n }\n}\n"]}
@@ -0,0 +1,64 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { Inject, Injectable } from "@tsed/di";
3
+ import { extname } from "path";
4
+ import Ajv from "ajv";
5
+ import { CliYaml } from "./CliYaml.js";
6
+ import { CliFs } from "./CliFs.js";
7
+ let CliLoadFile = class CliLoadFile {
8
+ cliYaml;
9
+ cliFs;
10
+ #ajv;
11
+ constructor() {
12
+ const options = {
13
+ verbose: false,
14
+ coerceTypes: true,
15
+ strict: false
16
+ };
17
+ this.#ajv = new Ajv(options);
18
+ }
19
+ /**
20
+ * Load a configuration file from yaml, json
21
+ */
22
+ async loadFile(path, schema) {
23
+ let config;
24
+ const ext = extname(path);
25
+ if ([".yml", ".yaml"].includes(ext)) {
26
+ config = await this.cliYaml.read(path);
27
+ }
28
+ else if ([".json"].includes(ext)) {
29
+ config = await JSON.parse(await this.cliFs.readFile(path, "utf8"));
30
+ }
31
+ else if (!config) {
32
+ throw new Error("Unsupported format file");
33
+ }
34
+ if (schema) {
35
+ const validate = this.#ajv.compile(schema);
36
+ const isValid = validate(config);
37
+ if (!isValid) {
38
+ const [error] = validate.errors;
39
+ throw new Error([
40
+ `${error.instancePath.replace(/\//gi, ".")} `,
41
+ error.message,
42
+ error.params?.allowedValues && `. Allowed values: ${error.params?.allowedValues}`
43
+ ]
44
+ .filter(Boolean)
45
+ .join(""));
46
+ }
47
+ }
48
+ return config;
49
+ }
50
+ };
51
+ __decorate([
52
+ Inject(),
53
+ __metadata("design:type", CliYaml)
54
+ ], CliLoadFile.prototype, "cliYaml", void 0);
55
+ __decorate([
56
+ Inject(),
57
+ __metadata("design:type", CliFs)
58
+ ], CliLoadFile.prototype, "cliFs", void 0);
59
+ CliLoadFile = __decorate([
60
+ Injectable(),
61
+ __metadata("design:paramtypes", [])
62
+ ], CliLoadFile);
63
+ export { CliLoadFile };
64
+ //# sourceMappingURL=CliLoadFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CliLoadFile.js","sourceRoot":"","sources":["../../../src/services/CliLoadFile.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAC7B,OAAO,GAAa,MAAM,KAAK,CAAC;AAChC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAG9B,IAAa,WAAW,GAAxB,MAAa,WAAW;IAEZ,OAAO,CAAU;IAGjB,KAAK,CAAQ;IAEvB,IAAI,CAAM;IAEV;QACE,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,KAAK;SACd,CAAC;QAEF,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAc,IAAY,EAAE,MAAe;QACvD,IAAI,MAAW,CAAC;QAChB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACnC,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACxC;aAAM,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAClC,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;SACpE;aAAM,IAAI,CAAC,MAAM,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC5C;QAED,IAAI,MAAM,EAAE;YACV,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAE3C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAEjC,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,MAAO,CAAC;gBAEjC,MAAM,IAAI,KAAK,CACb;oBACE,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;oBAC7C,KAAK,CAAC,OAAO;oBACb,KAAK,CAAC,MAAM,EAAE,aAAa,IAAI,qBAAqB,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE;iBAClF;qBACE,MAAM,CAAC,OAAO,CAAC;qBACf,IAAI,CAAC,EAAE,CAAC,CACZ,CAAC;aACH;SACF;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAA;AAtDC;IADC,MAAM,EAAE;8BACU,OAAO;4CAAC;AAG3B;IADC,MAAM,EAAE;8BACQ,KAAK;0CAAC;AALZ,WAAW;IADvB,UAAU,EAAE;;GACA,WAAW,CAwDvB;SAxDY,WAAW","sourcesContent":["import {Inject, Injectable} from \"@tsed/di\";\nimport {extname} from \"path\";\nimport Ajv, {Schema} from \"ajv\";\nimport {CliYaml} from \"./CliYaml\";\nimport {CliFs} from \"./CliFs\";\n\n@Injectable()\nexport class CliLoadFile {\n @Inject()\n protected cliYaml: CliYaml;\n\n @Inject()\n protected cliFs: CliFs;\n\n #ajv: Ajv;\n\n constructor() {\n const options = {\n verbose: false,\n coerceTypes: true,\n strict: false\n };\n\n this.#ajv = new Ajv(options);\n }\n\n /**\n * Load a configuration file from yaml, json\n */\n async loadFile<Model = any>(path: string, schema?: Schema): Promise<Model> {\n let config: any;\n const ext = extname(path);\n\n if ([\".yml\", \".yaml\"].includes(ext)) {\n config = await this.cliYaml.read(path);\n } else if ([\".json\"].includes(ext)) {\n config = await JSON.parse(await this.cliFs.readFile(path, \"utf8\"));\n } else if (!config) {\n throw new Error(\"Unsupported format file\");\n }\n\n if (schema) {\n const validate = this.#ajv.compile(schema);\n\n const isValid = validate(config);\n\n if (!isValid) {\n const [error] = validate.errors!;\n\n throw new Error(\n [\n `${error.instancePath.replace(/\\//gi, \".\")} `,\n error.message,\n error.params?.allowedValues && `. Allowed values: ${error.params?.allowedValues}`\n ]\n .filter(Boolean)\n .join(\"\")\n );\n }\n }\n\n return config;\n }\n}\n"]}
@@ -42,6 +42,9 @@ let CliService = class CliService {
42
42
  async runLifecycle(cmdName, data = {}) {
43
43
  data = await this.beforePrompt(cmdName, data);
44
44
  data = await this.prompt(cmdName, data);
45
+ await this.dispatch(cmdName, data);
46
+ }
47
+ async dispatch(cmdName, data) {
45
48
  try {
46
49
  await this.exec(cmdName, data);
47
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CliService.js","sourceRoot":"","sources":["../../../src/services/CliService.ts"],"names":[],"mappings":"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","sourcesContent":["import {classOf} from \"@tsed/core\";\nimport {Constant, Inject, Injectable, InjectorService, Provider} from \"@tsed/di\";\nimport {Argument, Command} from \"commander\";\nimport Inquirer from \"inquirer\";\nimport {CommandStoreKeys} from \"../domains/CommandStoreKeys\";\nimport {CommandProvider} from \"../interfaces/CommandProvider\";\nimport {CommandMetadata} from \"../interfaces/CommandMetadata\";\nimport {CommandArg, CommandOptions} from \"../interfaces/CommandParameters\";\nimport {PROVIDER_TYPE_COMMAND} from \"../registries/CommandRegistry\";\nimport {createSubTasks, createTasksRunner} from \"../utils/createTasksRunner\";\nimport {getCommandMetadata} from \"../utils/getCommandMetadata\";\nimport {mapCommanderArgs} from \"../utils/mapCommanderArgs\";\nimport {mapCommanderOptions} from \"../utils/mapCommanderOptions\";\nimport {parseOption} from \"../utils/parseOption\";\nimport {CliHooks} from \"./CliHooks\";\nimport {ProjectPackageJson} from \"./ProjectPackageJson\";\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport inquirer_autocomplete_prompt from \"inquirer-autocomplete-prompt\";\n\nInquirer.registerPrompt(\"autocomplete\", inquirer_autocomplete_prompt);\n\n@Injectable()\nexport class CliService {\n readonly program = new Command();\n\n @Constant(\"project.reinstallAfterRun\", false)\n reinstallAfterRun = false;\n\n @Constant(\"pkg\", {version: \"1.0.0\"})\n protected pkg: any;\n\n @Inject()\n protected injector: InjectorService;\n\n @Inject()\n protected hooks: CliHooks;\n\n @Inject()\n protected projectPkg: ProjectPackageJson;\n\n private commands = new Map();\n\n /**\n * Parse process.argv and runLifecycle action\n * @param argv\n */\n async parseArgs(argv: string[]): Promise<void> {\n const {program} = this;\n\n program.version(this.pkg.version);\n\n this.load();\n\n await program.parseAsync(argv);\n }\n\n /**\n * Run lifecycle\n * @param cmdName\n * @param data\n */\n public async runLifecycle(cmdName: string, data: any = {}) {\n data = await this.beforePrompt(cmdName, data);\n data = await this.prompt(cmdName, data);\n\n try {\n await this.exec(cmdName, data);\n } catch (er) {\n await this.injector.emit(\"$onFinish\", er);\n await this.injector.destroy();\n throw er;\n }\n\n await this.injector.emit(\"$onFinish\");\n await this.injector.destroy();\n }\n\n public async exec(cmdName: string, ctx: any) {\n const initialTasks = await this.getTasks(cmdName, ctx);\n\n if (initialTasks.length) {\n const tasks = [\n ...initialTasks,\n {\n title: \"Install dependencies\",\n enabled: () => this.reinstallAfterRun && (this.projectPkg.rewrite || this.projectPkg.reinstall),\n task: createSubTasks(() => this.projectPkg.install(ctx), {...ctx, concurrent: false})\n },\n ...(await this.getPostInstallTasks(cmdName, ctx))\n ];\n\n return createTasksRunner(tasks, this.mapContext(cmdName, ctx));\n }\n }\n\n /**\n * Run prompt for a given command\n * @param cmdName\n * @param ctx Initial data\n */\n public async beforePrompt(cmdName: string, ctx: any = {}) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n const verbose = ctx.verbose;\n\n if (instance.$beforePrompt) {\n ctx = await instance.$beforePrompt(JSON.parse(JSON.stringify(ctx)));\n ctx.verbose = verbose;\n }\n return ctx;\n }\n\n /**\n * Run prompt for a given command\n * @param cmdName\n * @param ctx Initial data\n */\n public async prompt(cmdName: string, ctx: any = {}) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n\n if (instance.$prompt) {\n const questions = [\n ...((await instance.$prompt(ctx)) as any[]),\n ...(await this.hooks.emit(CommandStoreKeys.PROMPT_HOOKS, cmdName, ctx))\n ];\n\n if (questions.length) {\n ctx = {\n ...ctx,\n ...((await Inquirer.prompt(questions)) as any)\n };\n }\n }\n\n return ctx;\n }\n\n /**\n * Run lifecycle\n * @param cmdName\n * @param ctx\n */\n public async getTasks(cmdName: string, ctx: any) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.token)!;\n\n ctx = this.mapContext(cmdName, ctx);\n\n if (instance.$beforeExec) {\n await instance.$beforeExec(ctx);\n }\n\n return [...(await instance.$exec(ctx)), ...(await this.hooks.emit(CommandStoreKeys.EXEC_HOOKS, cmdName, ctx))];\n }\n\n public async getPostInstallTasks(cmdName: string, ctx: any) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n\n ctx = this.mapContext(cmdName, ctx);\n\n return [\n ...(instance.$postInstall ? await instance.$postInstall(ctx) : []),\n ...(await this.hooks.emit(CommandStoreKeys.POST_INSTALL_HOOKS, cmdName, ctx)),\n ...(instance.$afterPostInstall ? await instance.$afterPostInstall(ctx) : [])\n ];\n }\n\n public createCommand(metadata: CommandMetadata) {\n const {args, name, options, description, alias, allowUnknownOption} = metadata;\n\n if (this.commands.has(name)) {\n return this.commands.get(name).command;\n }\n\n let cmd = this.program.command(name);\n\n const onAction = (...commanderArgs: any[]) => {\n const [, ...rawArgs] = cmd.args;\n const data = {\n verbose: !!this.program.opts().verbose,\n ...mapCommanderArgs(args, commanderArgs),\n ...mapCommanderOptions(this.program.commands),\n rawArgs\n };\n\n return this.runLifecycle(name, data);\n };\n\n if (alias) {\n cmd = cmd.alias(alias);\n }\n\n cmd = cmd.description(description);\n cmd = this.buildArguments(cmd, args);\n\n cmd = cmd.action(onAction);\n\n if (options) {\n cmd = this.buildOption(cmd, options, !!allowUnknownOption);\n }\n\n return cmd;\n }\n\n private load() {\n this.injector.getProviders(PROVIDER_TYPE_COMMAND).forEach((provider) => this.build(provider));\n }\n\n private mapContext(cmdName: string, ctx: any) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n const verbose = ctx.verbose;\n\n if (instance.$mapContext) {\n ctx = instance.$mapContext(JSON.parse(JSON.stringify(ctx)));\n ctx.verbose = verbose;\n }\n\n if (ctx.verbose) {\n this.injector.logger.level = \"debug\";\n } else {\n this.injector.logger.level = \"info\";\n }\n\n return ctx;\n }\n\n /**\n * Build command and sub-commands\n * @param provider\n */\n private build(provider: Provider<any>) {\n const metadata = getCommandMetadata(provider.useClass);\n\n if (metadata.name) {\n if (this.commands.has(metadata.name)) {\n throw Error(\n `The ${metadata.name} command is already registered. Change your command name used by the class ${classOf(provider.useClass)}`\n );\n }\n\n provider.command = this.createCommand(metadata);\n\n this.commands.set(metadata.name, provider);\n }\n }\n\n /**\n * Build sub-command options\n * @param subCommand\n * @param options\n * @param allowUnknownOptions\n */\n private buildOption(subCommand: Command, options: {[key: string]: CommandOptions}, allowUnknownOptions: boolean) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(options).reduce((subCommand, [flags, {description, required, customParser, defaultValue, ...options}]) => {\n const fn = (v: any) => parseOption(v, options);\n\n if (options.type === Boolean) {\n defaultValue = false;\n }\n\n return required\n ? subCommand.requiredOption(flags, description, fn, defaultValue)\n : subCommand.option(flags, description, fn, defaultValue);\n }, subCommand);\n\n subCommand.option(\"-r, --root-dir <path>\", \"Project root directory\");\n subCommand.option(\"--verbose\", \"Verbose mode\", () => true);\n\n if (allowUnknownOptions) {\n subCommand.allowUnknownOption(true);\n }\n\n return subCommand;\n }\n\n private buildArguments(cmd: Command, args: Record<string, CommandArg>) {\n return Object.entries(args).reduce((cmd, [key, {description, required, defaultValue}]) => {\n const argument = new Argument(required ? `<${key}>` : `[${key}]`, description);\n\n if (defaultValue !== undefined) {\n argument.default(defaultValue);\n }\n\n return cmd.addArgument(argument);\n }, cmd);\n }\n}\n"]}
1
+ {"version":3,"file":"CliService.js","sourceRoot":"","sources":["../../../src/services/CliService.ts"],"names":[],"mappings":"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","sourcesContent":["import {classOf} from \"@tsed/core\";\nimport {Constant, Inject, Injectable, InjectorService, Provider} from \"@tsed/di\";\nimport {Argument, Command} from \"commander\";\nimport Inquirer from \"inquirer\";\nimport {CommandStoreKeys} from \"../domains/CommandStoreKeys\";\nimport {CommandProvider} from \"../interfaces/CommandProvider\";\nimport {CommandMetadata} from \"../interfaces/CommandMetadata\";\nimport {CommandArg, CommandOptions} from \"../interfaces/CommandParameters\";\nimport {PROVIDER_TYPE_COMMAND} from \"../registries/CommandRegistry\";\nimport {createSubTasks, createTasksRunner} from \"../utils/createTasksRunner\";\nimport {getCommandMetadata} from \"../utils/getCommandMetadata\";\nimport {mapCommanderArgs} from \"../utils/mapCommanderArgs\";\nimport {mapCommanderOptions} from \"../utils/mapCommanderOptions\";\nimport {parseOption} from \"../utils/parseOption\";\nimport {CliHooks} from \"./CliHooks\";\nimport {ProjectPackageJson} from \"./ProjectPackageJson\";\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport inquirer_autocomplete_prompt from \"inquirer-autocomplete-prompt\";\n\nInquirer.registerPrompt(\"autocomplete\", inquirer_autocomplete_prompt);\n\n@Injectable()\nexport class CliService {\n readonly program = new Command();\n\n @Constant(\"project.reinstallAfterRun\", false)\n reinstallAfterRun = false;\n\n @Constant(\"pkg\", {version: \"1.0.0\"})\n protected pkg: any;\n\n @Inject()\n protected injector: InjectorService;\n\n @Inject()\n protected hooks: CliHooks;\n\n @Inject()\n protected projectPkg: ProjectPackageJson;\n\n private commands = new Map();\n\n /**\n * Parse process.argv and runLifecycle action\n * @param argv\n */\n async parseArgs(argv: string[]): Promise<void> {\n const {program} = this;\n\n program.version(this.pkg.version);\n\n this.load();\n\n await program.parseAsync(argv);\n }\n\n /**\n * Run lifecycle\n * @param cmdName\n * @param data\n */\n public async runLifecycle(cmdName: string, data: any = {}) {\n data = await this.beforePrompt(cmdName, data);\n data = await this.prompt(cmdName, data);\n\n await this.dispatch(cmdName, data);\n }\n\n public async dispatch(cmdName: string, data: any) {\n try {\n await this.exec(cmdName, data);\n } catch (er) {\n await this.injector.emit(\"$onFinish\", er);\n await this.injector.destroy();\n throw er;\n }\n\n await this.injector.emit(\"$onFinish\");\n await this.injector.destroy();\n }\n\n public async exec(cmdName: string, ctx: any) {\n const initialTasks = await this.getTasks(cmdName, ctx);\n\n if (initialTasks.length) {\n const tasks = [\n ...initialTasks,\n {\n title: \"Install dependencies\",\n enabled: () => this.reinstallAfterRun && (this.projectPkg.rewrite || this.projectPkg.reinstall),\n task: createSubTasks(() => this.projectPkg.install(ctx), {...ctx, concurrent: false})\n },\n ...(await this.getPostInstallTasks(cmdName, ctx))\n ];\n\n return createTasksRunner(tasks, this.mapContext(cmdName, ctx));\n }\n }\n\n /**\n * Run prompt for a given command\n * @param cmdName\n * @param ctx Initial data\n */\n public async beforePrompt(cmdName: string, ctx: any = {}) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n const verbose = ctx.verbose;\n\n if (instance.$beforePrompt) {\n ctx = await instance.$beforePrompt(JSON.parse(JSON.stringify(ctx)));\n ctx.verbose = verbose;\n }\n return ctx;\n }\n\n /**\n * Run prompt for a given command\n * @param cmdName\n * @param ctx Initial data\n */\n public async prompt(cmdName: string, ctx: any = {}) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n\n if (instance.$prompt) {\n const questions = [\n ...((await instance.$prompt(ctx)) as any[]),\n ...(await this.hooks.emit(CommandStoreKeys.PROMPT_HOOKS, cmdName, ctx))\n ];\n\n if (questions.length) {\n ctx = {\n ...ctx,\n ...((await Inquirer.prompt(questions)) as any)\n };\n }\n }\n\n return ctx;\n }\n\n /**\n * Run lifecycle\n * @param cmdName\n * @param ctx\n */\n public async getTasks(cmdName: string, ctx: any) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.token)!;\n\n ctx = this.mapContext(cmdName, ctx);\n\n if (instance.$beforeExec) {\n await instance.$beforeExec(ctx);\n }\n\n return [...(await instance.$exec(ctx)), ...(await this.hooks.emit(CommandStoreKeys.EXEC_HOOKS, cmdName, ctx))];\n }\n\n public async getPostInstallTasks(cmdName: string, ctx: any) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n\n ctx = this.mapContext(cmdName, ctx);\n\n return [\n ...(instance.$postInstall ? await instance.$postInstall(ctx) : []),\n ...(await this.hooks.emit(CommandStoreKeys.POST_INSTALL_HOOKS, cmdName, ctx)),\n ...(instance.$afterPostInstall ? await instance.$afterPostInstall(ctx) : [])\n ];\n }\n\n public createCommand(metadata: CommandMetadata) {\n const {args, name, options, description, alias, allowUnknownOption} = metadata;\n\n if (this.commands.has(name)) {\n return this.commands.get(name).command;\n }\n\n let cmd = this.program.command(name);\n\n const onAction = (...commanderArgs: any[]) => {\n const [, ...rawArgs] = cmd.args;\n const data = {\n verbose: !!this.program.opts().verbose,\n ...mapCommanderArgs(args, commanderArgs),\n ...mapCommanderOptions(this.program.commands),\n rawArgs\n };\n\n return this.runLifecycle(name, data);\n };\n\n if (alias) {\n cmd = cmd.alias(alias);\n }\n\n cmd = cmd.description(description);\n cmd = this.buildArguments(cmd, args);\n\n cmd = cmd.action(onAction);\n\n if (options) {\n cmd = this.buildOption(cmd, options, !!allowUnknownOption);\n }\n\n return cmd;\n }\n\n private load() {\n this.injector.getProviders(PROVIDER_TYPE_COMMAND).forEach((provider) => this.build(provider));\n }\n\n private mapContext(cmdName: string, ctx: any) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n const verbose = ctx.verbose;\n\n if (instance.$mapContext) {\n ctx = instance.$mapContext(JSON.parse(JSON.stringify(ctx)));\n ctx.verbose = verbose;\n }\n\n if (ctx.verbose) {\n this.injector.logger.level = \"debug\";\n } else {\n this.injector.logger.level = \"info\";\n }\n\n return ctx;\n }\n\n /**\n * Build command and sub-commands\n * @param provider\n */\n private build(provider: Provider<any>) {\n const metadata = getCommandMetadata(provider.useClass);\n\n if (metadata.name) {\n if (this.commands.has(metadata.name)) {\n throw Error(\n `The ${metadata.name} command is already registered. Change your command name used by the class ${classOf(provider.useClass)}`\n );\n }\n\n provider.command = this.createCommand(metadata);\n\n this.commands.set(metadata.name, provider);\n }\n }\n\n /**\n * Build sub-command options\n * @param subCommand\n * @param options\n * @param allowUnknownOptions\n */\n private buildOption(subCommand: Command, options: {[key: string]: CommandOptions}, allowUnknownOptions: boolean) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(options).reduce((subCommand, [flags, {description, required, customParser, defaultValue, ...options}]) => {\n const fn = (v: any) => parseOption(v, options);\n\n if (options.type === Boolean) {\n defaultValue = false;\n }\n\n return required\n ? subCommand.requiredOption(flags, description, fn, defaultValue)\n : subCommand.option(flags, description, fn, defaultValue);\n }, subCommand);\n\n subCommand.option(\"-r, --root-dir <path>\", \"Project root directory\");\n subCommand.option(\"--verbose\", \"Verbose mode\", () => true);\n\n if (allowUnknownOptions) {\n subCommand.allowUnknownOption(true);\n }\n\n return subCommand;\n }\n\n private buildArguments(cmd: Command, args: Record<string, CommandArg>) {\n return Object.entries(args).reduce((cmd, [key, {description, required, defaultValue}]) => {\n const argument = new Argument(required ? `<${key}>` : `[${key}]`, description);\n\n if (defaultValue !== undefined) {\n argument.default(defaultValue);\n }\n\n return cmd.addArgument(argument);\n }, cmd);\n }\n}\n"]}
@@ -8,6 +8,7 @@ export * from "./CliFs.js";
8
8
  export * from "./ProjectPackageJson.js";
9
9
  export * from "./Renderer.js";
10
10
  export * from "./CliExeca.js";
11
+ export * from "./CliLoadFile.js";
11
12
  export * from "./CliYaml.js";
12
13
  export * from "./CliDockerComposeYaml.js";
13
14
  export * from "./NpmRegistryClient.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC","sourcesContent":["export * from \"./CliConfiguration\";\nexport * from \"./CliService\";\nexport * from \"./CliPackageJson\";\nexport * from \"./CliHttpClient\";\nexport * from \"./CliPlugins\";\nexport * from \"./CliRunScript\";\nexport * from \"./CliFs\";\nexport * from \"./ProjectPackageJson\";\nexport * from \"./Renderer\";\nexport * from \"./CliExeca\";\nexport * from \"./CliYaml\";\nexport * from \"./CliDockerComposeYaml\";\nexport * from \"./NpmRegistryClient\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC","sourcesContent":["export * from \"./CliConfiguration\";\nexport * from \"./CliService\";\nexport * from \"./CliPackageJson\";\nexport * from \"./CliHttpClient\";\nexport * from \"./CliPlugins\";\nexport * from \"./CliRunScript\";\nexport * from \"./CliFs\";\nexport * from \"./ProjectPackageJson\";\nexport * from \"./Renderer\";\nexport * from \"./CliExeca\";\nexport * from \"./CliLoadFile\";\nexport * from \"./CliYaml\";\nexport * from \"./CliDockerComposeYaml\";\nexport * from \"./NpmRegistryClient\";\n"]}
@@ -2,12 +2,14 @@ import { InjectorService } from "@tsed/di";
2
2
  import { Type } from "@tsed/core";
3
3
  import { CliService } from "./services/CliService";
4
4
  export declare class CliCore {
5
- injector: InjectorService;
6
- cliService: CliService;
5
+ readonly injector: InjectorService;
6
+ readonly cliService: CliService;
7
7
  static checkNodeVersion(wanted: string, id: string): typeof CliCore;
8
+ static create<Cli extends CliCore = CliCore>(settings: Partial<TsED.Configuration>, module?: Type): Promise<Cli>;
8
9
  static bootstrap(settings: Partial<TsED.Configuration>, module?: Type): Promise<CliCore>;
9
10
  static loadInjector(injector: InjectorService, module?: Type): Promise<void>;
10
11
  static updateNotifier(pkg: any): typeof CliCore;
11
12
  protected static createInjector(settings: Partial<TsED.Configuration>): InjectorService;
12
13
  protected static getProjectRoot(argv: string[]): string;
14
+ bootstrap(): Promise<this>;
13
15
  }
@@ -0,0 +1,13 @@
1
+ import { Schema } from "ajv";
2
+ import { CliYaml } from "./CliYaml";
3
+ import { CliFs } from "./CliFs";
4
+ export declare class CliLoadFile {
5
+ #private;
6
+ protected cliYaml: CliYaml;
7
+ protected cliFs: CliFs;
8
+ constructor();
9
+ /**
10
+ * Load a configuration file from yaml, json
11
+ */
12
+ loadFile<Model = any>(path: string, schema?: Schema): Promise<Model>;
13
+ }
@@ -22,6 +22,7 @@ export declare class CliService {
22
22
  * @param data
23
23
  */
24
24
  runLifecycle(cmdName: string, data?: any): Promise<void>;
25
+ dispatch(cmdName: string, data: any): Promise<void>;
25
26
  exec(cmdName: string, ctx: any): Promise<any>;
26
27
  /**
27
28
  * Run prompt for a given command
@@ -8,6 +8,7 @@ export * from "./CliFs";
8
8
  export * from "./ProjectPackageJson";
9
9
  export * from "./Renderer";
10
10
  export * from "./CliExeca";
11
+ export * from "./CliLoadFile";
11
12
  export * from "./CliYaml";
12
13
  export * from "./CliDockerComposeYaml";
13
14
  export * from "./NpmRegistryClient";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tsed/cli-core",
3
- "version": "4.0.0-rc.1",
3
+ "version": "4.0.0-rc.2",
4
4
  "description": "Build your CLI with TypeScript and Decorators",
5
5
  "source": "./src/index.ts",
6
6
  "main": "./lib/cjs/index.js",
@@ -30,6 +30,7 @@
30
30
  "dependencies": {
31
31
  "@npmcli/run-script": "3.0.1",
32
32
  "@tsed/logger": ">=6.1.1",
33
+ "ajv": "8.11.0",
33
34
  "axios": "0.26.1",
34
35
  "chalk": "4.1.2",
35
36
  "change-case": "^4.1.2",
@@ -77,8 +78,8 @@
77
78
  "@types/url-parse": "^1.4.3"
78
79
  },
79
80
  "peerDependencies": {
80
- "@tsed/core": ">=7.0.0-rc.1",
81
- "@tsed/di": ">=7.0.0-rc.1"
81
+ "@tsed/core": ">=7.0.0-rc.5",
82
+ "@tsed/di": ">=7.0.0-rc.5"
82
83
  },
83
84
  "repository": "https://github.com/tsedio/tsed-cli",
84
85
  "bugs": {
@@ -8,5 +8,7 @@
8
8
  "declaration": true,
9
9
  "declarationDir": "./lib/types"
10
10
  },
11
- "exclude": ["node_modules", "test", "lib", "coverage", ".nyc_output", "**/*.spec.ts", "jest.config.js"]
11
+ "exclude": ["node_modules", "test", "lib", "coverage", ".nyc_output", "**/*.spec.ts",
12
+ "jest.config.js"
13
+ ]
12
14
  }