@tsed/cli-core 4.4.6 → 4.5.1

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.
Files changed (75) hide show
  1. package/lib/cjs/CliCore.js +2 -0
  2. package/lib/cjs/CliCore.js.map +1 -1
  3. package/lib/cjs/interfaces/CommandMetadata.js.map +1 -1
  4. package/lib/cjs/interfaces/CommandParameters.js.map +1 -1
  5. package/lib/cjs/services/CliFs.js +11 -0
  6. package/lib/cjs/services/CliFs.js.map +1 -1
  7. package/lib/cjs/services/CliPlugins.js +3 -1
  8. package/lib/cjs/services/CliPlugins.js.map +1 -1
  9. package/lib/cjs/services/CliService.js +44 -28
  10. package/lib/cjs/services/CliService.js.map +1 -1
  11. package/lib/cjs/services/ProjectPackageJson.js +155 -179
  12. package/lib/cjs/services/ProjectPackageJson.js.map +1 -1
  13. package/lib/cjs/services/packageManagers/BaseManager.js +36 -0
  14. package/lib/cjs/services/packageManagers/BaseManager.js.map +1 -0
  15. package/lib/cjs/services/packageManagers/NpmManager.js +26 -0
  16. package/lib/cjs/services/packageManagers/NpmManager.js.map +1 -0
  17. package/lib/cjs/services/packageManagers/PNpmManager.js +26 -0
  18. package/lib/cjs/services/packageManagers/PNpmManager.js.map +1 -0
  19. package/lib/cjs/services/packageManagers/YarnBerryManager.js +43 -0
  20. package/lib/cjs/services/packageManagers/YarnBerryManager.js.map +1 -0
  21. package/lib/cjs/services/packageManagers/YarnManager.js +26 -0
  22. package/lib/cjs/services/packageManagers/YarnManager.js.map +1 -0
  23. package/lib/cjs/utils/getCommandMetadata.js +5 -2
  24. package/lib/cjs/utils/getCommandMetadata.js.map +1 -1
  25. package/lib/cjs/utils/index.js +1 -1
  26. package/lib/cjs/utils/index.js.map +1 -1
  27. package/lib/cjs/utils/resolveConfiguration.js +23 -0
  28. package/lib/cjs/utils/resolveConfiguration.js.map +1 -0
  29. package/lib/esm/CliCore.js +2 -0
  30. package/lib/esm/CliCore.js.map +1 -1
  31. package/lib/esm/interfaces/CommandMetadata.js.map +1 -1
  32. package/lib/esm/interfaces/CommandParameters.js.map +1 -1
  33. package/lib/esm/services/CliFs.js +11 -0
  34. package/lib/esm/services/CliFs.js.map +1 -1
  35. package/lib/esm/services/CliPlugins.js +3 -1
  36. package/lib/esm/services/CliPlugins.js.map +1 -1
  37. package/lib/esm/services/CliService.js +45 -29
  38. package/lib/esm/services/CliService.js.map +1 -1
  39. package/lib/esm/services/ProjectPackageJson.js +156 -180
  40. package/lib/esm/services/ProjectPackageJson.js.map +1 -1
  41. package/lib/esm/services/packageManagers/BaseManager.js +32 -0
  42. package/lib/esm/services/packageManagers/BaseManager.js.map +1 -0
  43. package/lib/esm/services/packageManagers/NpmManager.js +23 -0
  44. package/lib/esm/services/packageManagers/NpmManager.js.map +1 -0
  45. package/lib/esm/services/packageManagers/PNpmManager.js +23 -0
  46. package/lib/esm/services/packageManagers/PNpmManager.js.map +1 -0
  47. package/lib/esm/services/packageManagers/YarnBerryManager.js +40 -0
  48. package/lib/esm/services/packageManagers/YarnBerryManager.js.map +1 -0
  49. package/lib/esm/services/packageManagers/YarnManager.js +23 -0
  50. package/lib/esm/services/packageManagers/YarnManager.js.map +1 -0
  51. package/lib/esm/utils/getCommandMetadata.js +5 -2
  52. package/lib/esm/utils/getCommandMetadata.js.map +1 -1
  53. package/lib/esm/utils/index.js +1 -1
  54. package/lib/esm/utils/index.js.map +1 -1
  55. package/lib/esm/utils/resolveConfiguration.js +19 -0
  56. package/lib/esm/utils/resolveConfiguration.js.map +1 -0
  57. package/lib/types/interfaces/CommandMetadata.d.ts +5 -12
  58. package/lib/types/interfaces/CommandParameters.d.ts +3 -0
  59. package/lib/types/services/CliFs.d.ts +3 -0
  60. package/lib/types/services/CliService.d.ts +10 -9
  61. package/lib/types/services/ProjectPackageJson.d.ts +27 -29
  62. package/lib/types/services/packageManagers/BaseManager.d.ts +25 -0
  63. package/lib/types/services/packageManagers/NpmManager.d.ts +9 -0
  64. package/lib/types/services/packageManagers/PNpmManager.d.ts +9 -0
  65. package/lib/types/services/packageManagers/YarnBerryManager.d.ts +15 -0
  66. package/lib/types/services/packageManagers/YarnManager.d.ts +12 -0
  67. package/lib/types/utils/getCommandMetadata.d.ts +2 -12
  68. package/lib/types/utils/index.d.ts +1 -1
  69. package/lib/types/utils/resolveConfiguration.d.ts +1 -0
  70. package/package.json +5 -3
  71. package/lib/cjs/utils/getPackageJson.js +0 -36
  72. package/lib/cjs/utils/getPackageJson.js.map +0 -1
  73. package/lib/esm/utils/getPackageJson.js +0 -31
  74. package/lib/esm/utils/getPackageJson.js.map +0 -1
  75. package/lib/types/utils/getPackageJson.d.ts +0 -2
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PNpmManager = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const di_1 = require("@tsed/di");
6
+ const BaseManager_1 = require("./BaseManager");
7
+ let PNpmManager = class PNpmManager extends BaseManager_1.BaseManager {
8
+ name = "pnpm";
9
+ cmd = "pnpm";
10
+ add(deps, options) {
11
+ return this.run("add", ["--save-prod", ...deps], options);
12
+ }
13
+ addDev(deps, options) {
14
+ return this.run("add", ["--save-dev", ...deps], options);
15
+ }
16
+ install(options) {
17
+ return this.run("install", ["--dev"].filter(Boolean), options);
18
+ }
19
+ };
20
+ PNpmManager = tslib_1.__decorate([
21
+ (0, di_1.Injectable)({
22
+ type: "package:manager"
23
+ })
24
+ ], PNpmManager);
25
+ exports.PNpmManager = PNpmManager;
26
+ //# sourceMappingURL=PNpmManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PNpmManager.js","sourceRoot":"","sources":["../../../../src/services/packageManagers/PNpmManager.ts"],"names":[],"mappings":";;;;AAAA,iCAAoC;AAEpC,+CAA0D;AAKnD,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,yBAAW;IACjC,IAAI,GAAG,MAAM,CAAC;IACd,GAAG,GAAG,MAAM,CAAC;IAEtB,GAAG,CAAC,IAAc,EAAE,OAAuB;QACzC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,IAAc,EAAE,OAAuB;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,OAAuB;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;CACF,CAAA;AAfY,WAAW;IAHvB,IAAA,eAAU,EAAC;QACV,IAAI,EAAE,iBAAiB;KACxB,CAAC;GACW,WAAW,CAevB;AAfY,kCAAW","sourcesContent":["import {Injectable} from \"@tsed/di\";\nimport {Observable} from \"rxjs\";\nimport {BaseManager, ManagerCmdOpts} from \"./BaseManager\";\n\n@Injectable({\n type: \"package:manager\"\n})\nexport class PNpmManager extends BaseManager {\n readonly name = \"pnpm\";\n readonly cmd = \"pnpm\";\n\n add(deps: string[], options: ManagerCmdOpts): Observable<any> {\n return this.run(\"add\", [\"--save-prod\", ...deps], options);\n }\n\n addDev(deps: string[], options: ManagerCmdOpts): Observable<any> {\n return this.run(\"add\", [\"--save-dev\", ...deps], options);\n }\n\n install(options: ManagerCmdOpts): Observable<any> {\n return this.run(\"install\", [\"--dev\"].filter(Boolean), options);\n }\n}\n"]}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.YarnBerryManager = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const di_1 = require("@tsed/di");
6
+ const BaseManager_1 = require("./BaseManager");
7
+ const path_1 = require("path");
8
+ const CliYaml_1 = require("../CliYaml");
9
+ let YarnBerryManager = class YarnBerryManager extends BaseManager_1.BaseManager {
10
+ name = "yarn_berry";
11
+ cmd = "yarn";
12
+ cliYaml;
13
+ async init(options) {
14
+ // init yarn v1
15
+ this.install(options);
16
+ // then switch write file
17
+ await this.cliYaml.write((0, path_1.join)(options.cwd, ".yarnrc.yml"), {
18
+ nodeLinker: "node-modules"
19
+ });
20
+ // then switch to berry
21
+ this.cliExeca.runSync(this.cmd, ["set", "version", "berry"]);
22
+ }
23
+ add(deps, options) {
24
+ return this.run("add", ["--ignore-engines", ...deps], options);
25
+ }
26
+ addDev(deps, options) {
27
+ return this.run("add", ["-D", "--ignore-engines", ...deps], options);
28
+ }
29
+ install(options) {
30
+ return this.run("install", [options.verbose && "--verbose"], options);
31
+ }
32
+ };
33
+ tslib_1.__decorate([
34
+ (0, di_1.Inject)(),
35
+ tslib_1.__metadata("design:type", CliYaml_1.CliYaml)
36
+ ], YarnBerryManager.prototype, "cliYaml", void 0);
37
+ YarnBerryManager = tslib_1.__decorate([
38
+ (0, di_1.Injectable)({
39
+ type: "package:manager"
40
+ })
41
+ ], YarnBerryManager);
42
+ exports.YarnBerryManager = YarnBerryManager;
43
+ //# sourceMappingURL=YarnBerryManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"YarnBerryManager.js","sourceRoot":"","sources":["../../../../src/services/packageManagers/YarnBerryManager.ts"],"names":[],"mappings":";;;;AAAA,iCAA4C;AAG5C,+CAA8E;AAC9E,+BAA0B;AAC1B,wCAAmC;AAK5B,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,yBAAW;IACtC,IAAI,GAAG,YAAY,CAAC;IACpB,GAAG,GAAG,MAAM,CAAC;IAGZ,OAAO,CAAU;IAE3B,KAAK,CAAC,IAAI,CAAC,OAA2B;QACpC,eAAe;QACf,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEtB,yBAAyB;QACzB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAI,EAAE,aAAa,CAAC,EAAE;YAC1D,UAAU,EAAE,cAAc;SAC3B,CAAC,CAAC;QAEH,uBAAuB;QACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,GAAG,CAAC,IAAc,EAAE,OAAuB;QACzC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,IAAc,EAAE,OAAuB;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,CAAC,OAA4C;QAClD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;CACF,CAAA;AA3BC;IAAC,IAAA,WAAM,GAAE;sCACU,iBAAO;iDAAC;AALhB,gBAAgB;IAH5B,IAAA,eAAU,EAAC;QACV,IAAI,EAAE,iBAAiB;KACxB,CAAC;GACW,gBAAgB,CA+B5B;AA/BY,4CAAgB","sourcesContent":["import {Inject, Injectable} from \"@tsed/di\";\nimport execa from \"execa\";\nimport {Observable} from \"rxjs\";\nimport {BaseManager, ManagerCmdOpts, ManagerCmdSyncOpts} from \"./BaseManager\";\nimport {join} from \"path\";\nimport {CliYaml} from \"../CliYaml\";\n\n@Injectable({\n type: \"package:manager\"\n})\nexport class YarnBerryManager extends BaseManager {\n readonly name = \"yarn_berry\";\n readonly cmd = \"yarn\";\n\n @Inject()\n protected cliYaml: CliYaml;\n\n async init(options: ManagerCmdSyncOpts) {\n // init yarn v1\n this.install(options);\n\n // then switch write file\n await this.cliYaml.write(join(options.cwd!, \".yarnrc.yml\"), {\n nodeLinker: \"node-modules\"\n });\n\n // then switch to berry\n this.cliExeca.runSync(this.cmd, [\"set\", \"version\", \"berry\"]);\n }\n\n add(deps: string[], options: ManagerCmdOpts) {\n return this.run(\"add\", [\"--ignore-engines\", ...deps], options);\n }\n\n addDev(deps: string[], options: ManagerCmdOpts) {\n return this.run(\"add\", [\"-D\", \"--ignore-engines\", ...deps], options);\n }\n\n install(options: {verbose?: boolean} & execa.Options): Observable<any> {\n return this.run(\"install\", [options.verbose && \"--verbose\"], options);\n }\n}\n"]}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.YarnManager = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const di_1 = require("@tsed/di");
6
+ const BaseManager_1 = require("./BaseManager");
7
+ let YarnManager = class YarnManager extends BaseManager_1.BaseManager {
8
+ name = "yarn";
9
+ cmd = "yarn";
10
+ add(deps, options) {
11
+ return this.run("add", ["--ignore-engines", ...deps], options);
12
+ }
13
+ addDev(deps, options) {
14
+ return this.run("add", ["-D", "--ignore-engines", ...deps], options);
15
+ }
16
+ install(options) {
17
+ return this.run("install", [options.verbose && "--verbose"], options);
18
+ }
19
+ };
20
+ YarnManager = tslib_1.__decorate([
21
+ (0, di_1.Injectable)({
22
+ type: "package:manager"
23
+ })
24
+ ], YarnManager);
25
+ exports.YarnManager = YarnManager;
26
+ //# sourceMappingURL=YarnManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"YarnManager.js","sourceRoot":"","sources":["../../../../src/services/packageManagers/YarnManager.ts"],"names":[],"mappings":";;;;AAAA,iCAAoC;AAGpC,+CAA0D;AAKnD,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,yBAAW;IACjC,IAAI,GAAG,MAAM,CAAC;IACd,GAAG,GAAG,MAAM,CAAC;IAEtB,GAAG,CAAC,IAAc,EAAE,OAAuB;QACzC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,IAAc,EAAE,OAAuB;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,CAAC,OAA4C;QAClD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;CACF,CAAA;AAfY,WAAW;IAHvB,IAAA,eAAU,EAAC;QACV,IAAI,EAAE,iBAAiB;KACxB,CAAC;GACW,WAAW,CAevB;AAfY,kCAAW","sourcesContent":["import {Injectable} from \"@tsed/di\";\nimport execa from \"execa\";\nimport {Observable} from \"rxjs\";\nimport {BaseManager, ManagerCmdOpts} from \"./BaseManager\";\n\n@Injectable({\n type: \"package:manager\"\n})\nexport class YarnManager extends BaseManager {\n readonly name = \"yarn\";\n readonly cmd = \"yarn\";\n\n add(deps: string[], options: ManagerCmdOpts) {\n return this.run(\"add\", [\"--ignore-engines\", ...deps], options);\n }\n\n addDev(deps: string[], options: ManagerCmdOpts) {\n return this.run(\"add\", [\"-D\", \"--ignore-engines\", ...deps], options);\n }\n\n install(options: {verbose?: boolean} & execa.Options): Observable<any> {\n return this.run(\"install\", [options.verbose && \"--verbose\"], options);\n }\n}\n"]}
@@ -4,14 +4,17 @@ exports.getCommandMetadata = void 0;
4
4
  const core_1 = require("@tsed/core");
5
5
  const CommandStoreKeys_1 = require("../domains/CommandStoreKeys");
6
6
  function getCommandMetadata(token) {
7
- const { name, alias, args = {}, allowUnknownOption, description, options = {} } = core_1.Store.from(token)?.get(CommandStoreKeys_1.CommandStoreKeys.COMMAND);
7
+ const { name, alias, args = {}, allowUnknownOption, description, options = {}, enableFeatures, disableReadUpPkg, ...opts } = core_1.Store.from(token)?.get(CommandStoreKeys_1.CommandStoreKeys.COMMAND);
8
8
  return {
9
9
  name,
10
10
  alias,
11
11
  args,
12
12
  description,
13
13
  options,
14
- allowUnknownOption: !!allowUnknownOption
14
+ allowUnknownOption: !!allowUnknownOption,
15
+ enableFeatures: enableFeatures || [],
16
+ disableReadUpPkg: !!disableReadUpPkg,
17
+ ...opts
15
18
  };
16
19
  }
17
20
  exports.getCommandMetadata = getCommandMetadata;
@@ -1 +1 @@
1
- {"version":3,"file":"getCommandMetadata.js","sourceRoot":"","sources":["../../../src/utils/getCommandMetadata.ts"],"names":[],"mappings":";;;AAAA,qCAAuC;AACvC,kEAA6D;AAG7D,SAAgB,kBAAkB,CAAC,KAAgB;IACjD,MAAM,EACJ,IAAI,EACJ,KAAK,EACL,IAAI,GAAG,EAAE,EACT,kBAAkB,EAClB,WAAW,EACX,OAAO,GAAG,EAAE,EACb,GAAG,YAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,mCAAgB,CAAC,OAAO,CAAsB,CAAC;IAE1E,OAAO;QACL,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,WAAW;QACX,OAAO;QACP,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;KACzC,CAAC;AACJ,CAAC;AAlBD,gDAkBC","sourcesContent":["import {Store, Type} from \"@tsed/core\";\nimport {CommandStoreKeys} from \"../domains/CommandStoreKeys\";\nimport {CommandParameters} from \"../interfaces/CommandParameters\";\n\nexport function getCommandMetadata(token: Type<any>) {\n const {\n name,\n alias,\n args = {},\n allowUnknownOption,\n description,\n options = {}\n } = Store.from(token)?.get(CommandStoreKeys.COMMAND) as CommandParameters;\n\n return {\n name,\n alias,\n args,\n description,\n options,\n allowUnknownOption: !!allowUnknownOption\n };\n}\n"]}
1
+ {"version":3,"file":"getCommandMetadata.js","sourceRoot":"","sources":["../../../src/utils/getCommandMetadata.ts"],"names":[],"mappings":";;;AAAA,qCAAuC;AACvC,kEAA6D;AAI7D,SAAgB,kBAAkB,CAAC,KAAgB;IACjD,MAAM,EACJ,IAAI,EACJ,KAAK,EACL,IAAI,GAAG,EAAE,EACT,kBAAkB,EAClB,WAAW,EACX,OAAO,GAAG,EAAE,EACZ,cAAc,EACd,gBAAgB,EAChB,GAAG,IAAI,EACR,GAAG,YAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,mCAAgB,CAAC,OAAO,CAAsB,CAAC;IAE1E,OAAO;QACL,IAAI;QACJ,KAAK;QACL,IAAI;QACJ,WAAW;QACX,OAAO;QACP,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;QACxC,cAAc,EAAE,cAAc,IAAI,EAAE;QACpC,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;QACpC,GAAG,IAAI;KACR,CAAC;AACJ,CAAC;AAxBD,gDAwBC","sourcesContent":["import {Store, Type} from \"@tsed/core\";\nimport {CommandStoreKeys} from \"../domains/CommandStoreKeys\";\nimport {CommandParameters} from \"../interfaces/CommandParameters\";\nimport {CommandMetadata} from \"../interfaces/CommandMetadata\";\n\nexport function getCommandMetadata(token: Type<any>): CommandMetadata {\n const {\n name,\n alias,\n args = {},\n allowUnknownOption,\n description,\n options = {},\n enableFeatures,\n disableReadUpPkg,\n ...opts\n } = Store.from(token)?.get(CommandStoreKeys.COMMAND) as CommandParameters;\n\n return {\n name,\n alias,\n args,\n description,\n options,\n allowUnknownOption: !!allowUnknownOption,\n enableFeatures: enableFeatures || [],\n disableReadUpPkg: !!disableReadUpPkg,\n ...opts\n };\n}\n"]}
@@ -10,7 +10,7 @@ tslib_1.__exportStar(require("./mapCommanderArgs"), exports);
10
10
  tslib_1.__exportStar(require("./mapCommanderOptions"), exports);
11
11
  tslib_1.__exportStar(require("./parseOption"), exports);
12
12
  tslib_1.__exportStar(require("./createTasksRunner"), exports);
13
- tslib_1.__exportStar(require("./getPackageJson"), exports);
13
+ tslib_1.__exportStar(require("./resolveConfiguration"), exports);
14
14
  tslib_1.__exportStar(require("./getTemplateDirectory"), exports);
15
15
  var filedirname_1 = require("filedirname");
16
16
  Object.defineProperty(exports, "filedirname", { enumerable: true, get: function () { return tslib_1.__importDefault(filedirname_1).default; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;;AAAA,2DAAiC;AACjC,+DAAqC;AACrC,wDAA8B;AAC9B,sDAA4B;AAC5B,6DAAmC;AACnC,gEAAsC;AACtC,wDAA8B;AAC9B,8DAAoC;AACpC,2DAAiC;AACjC,iEAAuC;AACvC,2CAAmD;AAA3C,mIAAA,OAAO,OAAe","sourcesContent":["export * from \"./createInjector\";\nexport * from \"./getCommandMetadata\";\nexport * from \"./loadPlugins\";\nexport * from \"./logToCurl\";\nexport * from \"./mapCommanderArgs\";\nexport * from \"./mapCommanderOptions\";\nexport * from \"./parseOption\";\nexport * from \"./createTasksRunner\";\nexport * from \"./getPackageJson\";\nexport * from \"./getTemplateDirectory\";\nexport {default as filedirname} from \"filedirname\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;;AAAA,2DAAiC;AACjC,+DAAqC;AACrC,wDAA8B;AAC9B,sDAA4B;AAC5B,6DAAmC;AACnC,gEAAsC;AACtC,wDAA8B;AAC9B,8DAAoC;AACpC,iEAAuC;AACvC,iEAAuC;AACvC,2CAAmD;AAA3C,mIAAA,OAAO,OAAe","sourcesContent":["export * from \"./createInjector\";\nexport * from \"./getCommandMetadata\";\nexport * from \"./loadPlugins\";\nexport * from \"./logToCurl\";\nexport * from \"./mapCommanderArgs\";\nexport * from \"./mapCommanderOptions\";\nexport * from \"./parseOption\";\nexport * from \"./createTasksRunner\";\nexport * from \"./resolveConfiguration\";\nexport * from \"./getTemplateDirectory\";\nexport {default as filedirname} from \"filedirname\";\n"]}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveConfiguration = void 0;
4
+ const core_1 = require("@tsed/core");
5
+ const getCommandMetadata_1 = require("./getCommandMetadata");
6
+ function resolveConfiguration(settings) {
7
+ const argv = (0, core_1.getValue)(settings, "argv", process.argv);
8
+ const configResolvers = (0, core_1.getValue)(settings, "configResolvers", []);
9
+ const commands = (0, core_1.getValue)(settings, "commands", []);
10
+ const commandOpts = commands
11
+ .map((token) => (0, getCommandMetadata_1.getCommandMetadata)(token))
12
+ .find((commandOpts) => argv.includes(commandOpts.name));
13
+ settings = {
14
+ ...settings,
15
+ commands,
16
+ command: commandOpts || {},
17
+ argv
18
+ };
19
+ configResolvers.map((resolver) => resolver(settings));
20
+ return settings;
21
+ }
22
+ exports.resolveConfiguration = resolveConfiguration;
23
+ //# sourceMappingURL=resolveConfiguration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveConfiguration.js","sourceRoot":"","sources":["../../../src/utils/resolveConfiguration.ts"],"names":[],"mappings":";;;AACA,qCAAoC;AACpC,6DAAwD;AAExD,SAAgB,oBAAoB,CAAC,QAAa;IAChD,MAAM,IAAI,GAAG,IAAA,eAAQ,EAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,eAAe,GAAG,IAAA,eAAQ,EAAC,QAAQ,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,IAAA,eAAQ,EAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IAEpD,MAAM,WAAW,GAAG,QAAQ;SACzB,GAAG,CAAC,CAAC,KAAoB,EAAE,EAAE,CAAC,IAAA,uCAAkB,EAAC,KAAK,CAAC,CAAC;SACxD,IAAI,CAAC,CAAC,WAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/D,QAAQ,GAAG;QACT,GAAG,QAAQ;QACX,QAAQ;QACR,OAAO,EAAE,WAAW,IAAI,EAAE;QAC1B,IAAI;KACL,CAAC;IAEF,eAAe,CAAC,GAAG,CAAC,CAAC,QAAiC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE/E,OAAO,QAAQ,CAAC;AAClB,CAAC;AAnBD,oDAmBC","sourcesContent":["import {TokenProvider} from \"@tsed/di\";\nimport {getValue} from \"@tsed/core\";\nimport {getCommandMetadata} from \"./getCommandMetadata\";\n\nexport function resolveConfiguration(settings: any) {\n const argv = getValue(settings, \"argv\", process.argv);\n const configResolvers = getValue(settings, \"configResolvers\", []);\n const commands = getValue(settings, \"commands\", []);\n\n const commandOpts = commands\n .map((token: TokenProvider) => getCommandMetadata(token))\n .find((commandOpts: any) => argv.includes(commandOpts.name));\n\n settings = {\n ...settings,\n commands,\n command: commandOpts || {},\n argv\n };\n\n configResolvers.map((resolver: (settings: any) => void) => resolver(settings));\n\n return settings;\n}\n"]}
@@ -13,6 +13,7 @@ import { createInjector } from "./utils/createInjector.js";
13
13
  import { loadPlugins } from "./utils/loadPlugins.js";
14
14
  import { CliError } from "./domains/CliError.js";
15
15
  import semver from "semver";
16
+ import { resolveConfiguration } from "./utils/resolveConfiguration.js";
16
17
  function isHelpManual(argv) {
17
18
  return argv.includes("-h") || argv.includes("--help");
18
19
  }
@@ -33,6 +34,7 @@ let CliCore = CliCore_1 = class CliCore {
33
34
  return this;
34
35
  }
35
36
  static async create(settings, module = CliCore_1) {
37
+ settings = resolveConfiguration(settings);
36
38
  const injector = this.createInjector(settings);
37
39
  settings.plugins && (await loadPlugins(injector));
38
40
  await this.loadInjector(injector, module);
@@ -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 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"]}
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\";\nimport {resolveConfiguration} from \"./utils/resolveConfiguration\";\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 settings = resolveConfiguration(settings);\n\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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CommandMetadata.js","sourceRoot":"","sources":["../../../src/interfaces/CommandMetadata.ts"],"names":[],"mappings":"","sourcesContent":["import {CommandArg, CommandOptions} from \"./CommandParameters\";\n\nexport interface CommandMetadata {\n /**\n * name commands\n */\n name: string;\n\n alias?: string;\n /**\n * CommandProvider description\n */\n description: string;\n /**\n * CommandProvider arguments\n */\n args: {\n [key: string]: CommandArg;\n };\n /**\n * CommandProvider options\n */\n options: {\n [key: string]: CommandOptions;\n };\n\n allowUnknownOption?: boolean;\n}\n"]}
1
+ {"version":3,"file":"CommandMetadata.js","sourceRoot":"","sources":["../../../src/interfaces/CommandMetadata.ts"],"names":[],"mappings":"","sourcesContent":["import {CommandArg, CommandOptions, CommandParameters} from \"./CommandParameters\";\n\nexport interface CommandMetadata extends CommandParameters {\n /**\n * CommandProvider arguments\n */\n args: {\n [key: string]: CommandArg;\n };\n /**\n * CommandProvider options\n */\n options: {\n [key: string]: CommandOptions;\n };\n\n allowUnknownOption: boolean;\n\n enableFeatures: string[];\n\n disableReadUpPkg: boolean;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CommandParameters.js","sourceRoot":"","sources":["../../../src/interfaces/CommandParameters.ts"],"names":[],"mappings":"","sourcesContent":["import {Type} from \"@tsed/core\";\n\nexport interface CommandArg {\n /**\n * Description of the argument\n */\n description: string;\n /**\n * Use type to parse the option (String, Number, Boolean, Array)\n */\n type?: Type<any>;\n /**\n * Use item type to parse items\n */\n itemType?: Type<any>;\n /**\n * Default value\n */\n defaultValue?: string | number | boolean | any;\n /**\n * Define a require option\n */\n required?: boolean;\n}\n\nexport interface CommandOptions {\n /**\n * Description of the commander.option()\n */\n description: string;\n /**\n * Use type to parse the option (String, Number, Boolean, Array)\n */\n type?: Type<any>;\n /**\n * Use item type to parse items\n */\n itemType?: Type<any>;\n /**\n * Default value\n */\n defaultValue?: string | number | boolean | any;\n /**\n * Define a require option\n */\n required?: boolean;\n /**\n * Use a custom Parser\n * @param value\n */\n customParser?: (value: any) => any;\n}\n\nexport interface CommandParameters {\n /**\n * name commands\n */\n name: string;\n /**\n * CommandProvider description\n */\n description: string;\n /**\n * CommandProvider arguments\n */\n args?: {\n [key: string]: CommandArg;\n };\n /**\n * CommandProvider options\n */\n options?: {\n [key: string]: CommandOptions;\n };\n\n allowUnknownOption?: boolean;\n\n [key: string]: any;\n}\n"]}
1
+ {"version":3,"file":"CommandParameters.js","sourceRoot":"","sources":["../../../src/interfaces/CommandParameters.ts"],"names":[],"mappings":"","sourcesContent":["import {Type} from \"@tsed/core\";\n\nexport interface CommandArg {\n /**\n * Description of the argument\n */\n description: string;\n /**\n * Use type to parse the option (String, Number, Boolean, Array)\n */\n type?: Type<any>;\n /**\n * Use item type to parse items\n */\n itemType?: Type<any>;\n /**\n * Default value\n */\n defaultValue?: string | number | boolean | any;\n /**\n * Define a require option\n */\n required?: boolean;\n}\n\nexport interface CommandOptions {\n /**\n * Description of the commander.option()\n */\n description: string;\n /**\n * Use type to parse the option (String, Number, Boolean, Array)\n */\n type?: Type<any>;\n /**\n * Use item type to parse items\n */\n itemType?: Type<any>;\n /**\n * Default value\n */\n defaultValue?: string | number | boolean | any;\n /**\n * Define a require option\n */\n required?: boolean;\n /**\n * Use a custom Parser\n * @param value\n */\n customParser?: (value: any) => any;\n}\n\nexport interface CommandParameters {\n /**\n * name commands\n */\n name: string;\n\n alias?: string;\n /**\n * CommandProvider description\n */\n description: string;\n /**\n * CommandProvider arguments\n */\n args?: {\n [key: string]: CommandArg;\n };\n /**\n * CommandProvider options\n */\n options?: {\n [key: string]: CommandOptions;\n };\n\n allowUnknownOption?: boolean;\n\n enableFeatures?: string[];\n\n disableReadUpPkg?: boolean;\n\n [key: string]: any;\n}\n"]}
@@ -14,6 +14,17 @@ let CliFs = class CliFs {
14
14
  async readFile(file, encoding) {
15
15
  return this.raw.readFile(file, encoding);
16
16
  }
17
+ readFileSync(file, encoding) {
18
+ return this.raw.readFileSync(file, encoding);
19
+ }
20
+ async readJson(file, encoding) {
21
+ const content = await this.readFile(file, encoding);
22
+ return JSON.parse(content);
23
+ }
24
+ readJsonSync(file, encoding) {
25
+ const content = this.readFileSync(file, encoding);
26
+ return JSON.parse(content);
27
+ }
17
28
  async writeJson(file, data, options) {
18
29
  await this.raw.writeFile(file, JSON.stringify(data, null, 2), options || { encoding: "utf8" });
19
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CliFs.js","sourceRoot":"","sources":["../../../src/services/CliFs.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,OAAO,EAAC,IAAI,EAAC,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AAG5C,IAAM,KAAK,GAAX,MAAM,KAAK;IAChB,GAAG,GAAG,EAAE,CAAC;IAET,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,CAAC,GAAG,IAAc;QACpB,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAA8B,EAAE,QAAc;QAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAQ,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAA8B,EAAE,IAAS,EAAE,OAAmC;QAC5F,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,IAAK,EAAC,QAAQ,EAAE,MAAM,EAAS,CAAC,CAAC;IACxG,CAAC;IAED,aAAa,CAAC,IAAuB,EAAE,IAAS,EAAE,OAA0B;QAC1E,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,SAAS,CAAC,IAA8B,EAAE,IAAS,EAAE,OAAmC;QACtF,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAc,CAAC,CAAC;IACxD,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,OAAgC;QACtD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,aAAa,CAAC,IAAY,EAAE,OAAgC;QAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,UAAU,CAAC,IAAY,EAAE,IAAY;QACnC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAChI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAClB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW,EAAE,OAAe,OAAO,CAAC,GAAG,EAAE;QAC1D,IAAI;YACF,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE;gBAC1C,OAAO,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;aAC1B;SACF;QAAC,OAAO,EAAE,EAAE,GAAE;QAEf,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;QAE9D,IAAI,IAAI,EAAE;YACR,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;SACrB;QAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;CACF,CAAA;AAxDY,KAAK;IADjB,UAAU,EAAE;GACA,KAAK,CAwDjB;SAxDY,KAAK","sourcesContent":["import {Injectable} from \"@tsed/di\";\nimport {PathLike, WriteFileOptions} from \"fs\";\nimport Fs from \"fs-extra\";\nimport {EnsureOptions} from \"fs-extra\";\nimport {join} from \"path\";\nimport {normalizePath} from \"@tsed/normalize-path\";\n\n@Injectable()\nexport class CliFs {\n raw = Fs;\n\n exists(path: string) {\n return this.raw.existsSync(path);\n }\n\n join(...args: string[]) {\n return normalizePath(join(...args));\n }\n\n async readFile(file: string | Buffer | number, encoding?: any): Promise<string> {\n return this.raw.readFile(file, encoding) as any;\n }\n\n async writeJson(file: string | Buffer | number, data: any, options?: WriteFileOptions | string): Promise<any> {\n await this.raw.writeFile(file, JSON.stringify(data, null, 2), options || ({encoding: \"utf8\"} as any));\n }\n\n writeFileSync(path: PathLike | number, data: any, options?: WriteFileOptions) {\n return this.raw.writeFileSync(path, data, options);\n }\n\n writeFile(file: string | Buffer | number, data: any, options?: WriteFileOptions | string) {\n return this.raw.writeFile(file, data, options as any);\n }\n\n ensureDir(path: string, options?: EnsureOptions | number) {\n return this.raw.ensureDir(path, options);\n }\n\n ensureDirSync(path: string, options?: EnsureOptions | number): void {\n return this.raw.ensureDirSync(path, options);\n }\n\n findUpFile(root: string, file: string) {\n return [join(root, file), join(root, \"..\", file), join(root, \"..\", \"..\", file), join(root, \"..\", \"..\", \"..\", file)].find((path) =>\n this.exists(path)\n );\n }\n\n async importModule(mod: string, root: string = process.cwd()) {\n try {\n if (process.env.NODE_ENV === \"development\") {\n return await import(mod);\n }\n } catch (er) {}\n\n const path = this.findUpFile(root, join(\"node_modules\", mod));\n\n if (path) {\n return import(path);\n }\n\n return import(mod);\n }\n}\n"]}
1
+ {"version":3,"file":"CliFs.js","sourceRoot":"","sources":["../../../src/services/CliFs.ts"],"names":[],"mappings":"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","sourcesContent":["import {Injectable} from \"@tsed/di\";\nimport {PathLike, WriteFileOptions} from \"fs\";\nimport Fs from \"fs-extra\";\nimport {EnsureOptions} from \"fs-extra\";\nimport {join} from \"path\";\nimport {normalizePath} from \"@tsed/normalize-path\";\n\n@Injectable()\nexport class CliFs {\n raw = Fs;\n\n exists(path: string) {\n return this.raw.existsSync(path);\n }\n\n join(...args: string[]) {\n return normalizePath(join(...args));\n }\n\n async readFile(file: string | Buffer | number, encoding?: any): Promise<string> {\n return this.raw.readFile(file, encoding) as any;\n }\n\n readFileSync(file: string | Buffer | number, encoding?: any) {\n return this.raw.readFileSync(file, encoding) as any;\n }\n\n async readJson(file: string, encoding?: any) {\n const content = await this.readFile(file, encoding);\n\n return JSON.parse(content);\n }\n\n readJsonSync(file: string, encoding?: any) {\n const content = this.readFileSync(file, encoding) as any;\n\n return JSON.parse(content);\n }\n\n async writeJson(file: string | Buffer | number, data: any, options?: WriteFileOptions | string): Promise<any> {\n await this.raw.writeFile(file, JSON.stringify(data, null, 2), options || ({encoding: \"utf8\"} as any));\n }\n\n writeFileSync(path: PathLike | number, data: any, options?: WriteFileOptions) {\n return this.raw.writeFileSync(path, data, options);\n }\n\n writeFile(file: string | Buffer | number, data: any, options?: WriteFileOptions | string) {\n return this.raw.writeFile(file, data, options as any);\n }\n\n ensureDir(path: string, options?: EnsureOptions | number) {\n return this.raw.ensureDir(path, options);\n }\n\n ensureDirSync(path: string, options?: EnsureOptions | number): void {\n return this.raw.ensureDirSync(path, options);\n }\n\n findUpFile(root: string, file: string) {\n return [join(root, file), join(root, \"..\", file), join(root, \"..\", \"..\", file), join(root, \"..\", \"..\", \"..\", file)].find((path) =>\n this.exists(path)\n );\n }\n\n async importModule(mod: string, root: string = process.cwd()) {\n try {\n if (process.env.NODE_ENV === \"development\") {\n return await import(mod);\n }\n } catch (er) {}\n\n const path = this.findUpFile(root, join(\"node_modules\", mod));\n\n if (path) {\n return import(path);\n }\n\n return import(mod);\n }\n}\n"]}
@@ -39,7 +39,9 @@ let CliPlugins = class CliPlugins {
39
39
  ...tasks,
40
40
  {
41
41
  title: "Install",
42
- task: createSubTasks(() => this.packageJson.install(ctx), { ...ctx, concurrent: false })
42
+ task: createSubTasks(() => {
43
+ return this.packageJson.install(ctx);
44
+ }, { ...ctx, concurrent: false })
43
45
  }
44
46
  ];
45
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CliPlugins.js","sourceRoot":"","sources":["../../../src/services/CliPlugins.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,4BAA4B,CAAC;AAC1D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAC,MAAM,UAAU,CAAC;AACvE,OAAO,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAC,WAAW,EAAC,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAExD,SAAS,UAAU,CAAC,EAAC,OAAO,EAAE,EAAC,IAAI,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,UAAU,EAAC,EAAM;IACzE,OAAO;QACL,IAAI,EAAE,GAAG,IAAI,IAAI,WAAW,EAAE,CAAC,IAAI,EAAE;QACrC,KAAK,EAAE,IAAI;QACX,GAAG,UAAU;KACd,CAAC;AACJ,CAAC;AAGM,IAAM,UAAU,GAAhB,MAAM,UAAU;IAErB,IAAI,CAAS;IAGL,iBAAiB,CAAoB;IAGrC,QAAQ,CAAkB;IAG1B,QAAQ,CAAW;IAGnB,WAAW,CAAqB;IAExC,KAAK,CAAC,aAAa,CAAC,OAAO,GAAG,EAAE,EAAE,UAAe,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QAEtF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAC,OAAO,EAAE,EAAC,IAAI,EAAC,EAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxF,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,sBAAsB,CAAC,GAAQ;QAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpG,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACnC,OAAO;gBACL,KAAK,EAAE,eAAe,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;gBAC3C,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC;aAClE,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,GAAG,KAAK;YACR;gBACE,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAC,GAAG,GAAG,EAAE,UAAU,EAAE,KAAK,EAAC,CAAC;aACvF;SACF,CAAC;IACJ,CAAC;IAES,UAAU,CAAC,OAAe;QAClC,OAAO,IAAI,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;IAClE,CAAC;IAES,YAAY,CAAC,OAAe;QACpC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACrG,CAAC;IAEO,QAAQ,CAAC,IAAS;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC;IACjG,CAAC;CACF,CAAA;AAvDC;IAAC,QAAQ,CAAC,MAAM,CAAC;;wCACJ;AAEb;IAAC,MAAM,EAAE;8BACkB,iBAAiB;qDAAC;AAE7C;IAAC,MAAM,EAAE;8BACS,eAAe;4CAAC;AAElC;IAAC,MAAM,EAAE;8BACS,QAAQ;4CAAC;AAE3B;IAAC,MAAM,EAAE;8BACY,kBAAkB;+CAAC;AAd7B,UAAU;IADtB,UAAU,EAAE;GACA,UAAU,CAwDtB;SAxDY,UAAU","sourcesContent":["import {createSubTasks} from \"../utils/createTasksRunner\";\nimport chalk from \"chalk\";\nimport {Constant, Inject, Injectable, InjectorService} from \"@tsed/di\";\nimport {CommandStoreKeys} from \"../domains/CommandStoreKeys\";\nimport {loadPlugins} from \"../utils/loadPlugins\";\nimport {CliHooks} from \"./CliHooks\";\nimport {NpmRegistryClient} from \"./NpmRegistryClient\";\nimport {ProjectPackageJson} from \"./ProjectPackageJson\";\n\nfunction mapPlugins({package: {name, description = \"\", ...otherProps}}: any) {\n return {\n name: `${name} ${description}`.trim(),\n value: name,\n ...otherProps\n };\n}\n\n@Injectable()\nexport class CliPlugins {\n @Constant(\"name\")\n name: string;\n\n @Inject()\n private npmRegistryClient: NpmRegistryClient;\n\n @Inject()\n private injector: InjectorService;\n\n @Inject()\n private cliHooks: CliHooks;\n\n @Inject()\n private packageJson: ProjectPackageJson;\n\n async searchPlugins(keyword = \"\", options: any = {}) {\n const result = await this.npmRegistryClient.search(this.getKeyword(keyword), options);\n\n return result.filter(({package: {name}}: any) => this.isPlugin(name)).map(mapPlugins);\n }\n\n async loadPlugins() {\n return loadPlugins(this.injector);\n }\n\n addPluginsDependencies(ctx: any) {\n const plugins = Object.keys(this.packageJson.devDependencies).filter((name) => this.isPlugin(name));\n\n const tasks = plugins.map((plugin) => {\n return {\n title: `Run plugin '${chalk.cyan(plugin)}'`,\n task: () => this.cliHooks.emit(CommandStoreKeys.ADD, plugin, ctx)\n };\n });\n\n return [\n ...tasks,\n {\n title: \"Install\",\n task: createSubTasks(() => this.packageJson.install(ctx), {...ctx, concurrent: false})\n }\n ];\n }\n\n protected getKeyword(keyword: string) {\n return `@${this.name}/cli-plugin-${this.cleanKeyword(keyword)}`;\n }\n\n protected cleanKeyword(keyword: string) {\n return keyword.replace(this.name, \"\").replace(\"@\", \"\").replace(\"/\", \"\").replace(\"cli-plugin-\", \"\");\n }\n\n private isPlugin(name: any) {\n return name.startsWith(`@${this.name}/cli-plugin`) || name.includes(`${this.name}-cli-plugin`);\n }\n}\n"]}
1
+ {"version":3,"file":"CliPlugins.js","sourceRoot":"","sources":["../../../src/services/CliPlugins.ts"],"names":[],"mappings":"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","sourcesContent":["import {createSubTasks} from \"../utils/createTasksRunner\";\nimport chalk from \"chalk\";\nimport {Constant, Inject, Injectable, InjectorService} from \"@tsed/di\";\nimport {CommandStoreKeys} from \"../domains/CommandStoreKeys\";\nimport {loadPlugins} from \"../utils/loadPlugins\";\nimport {CliHooks} from \"./CliHooks\";\nimport {NpmRegistryClient} from \"./NpmRegistryClient\";\nimport {ProjectPackageJson} from \"./ProjectPackageJson\";\n\nfunction mapPlugins({package: {name, description = \"\", ...otherProps}}: any) {\n return {\n name: `${name} ${description}`.trim(),\n value: name,\n ...otherProps\n };\n}\n\n@Injectable()\nexport class CliPlugins {\n @Constant(\"name\")\n name: string;\n\n @Inject()\n private npmRegistryClient: NpmRegistryClient;\n\n @Inject()\n private injector: InjectorService;\n\n @Inject()\n private cliHooks: CliHooks;\n\n @Inject()\n private packageJson: ProjectPackageJson;\n\n async searchPlugins(keyword = \"\", options: any = {}) {\n const result = await this.npmRegistryClient.search(this.getKeyword(keyword), options);\n\n return result.filter(({package: {name}}: any) => this.isPlugin(name)).map(mapPlugins);\n }\n\n async loadPlugins() {\n return loadPlugins(this.injector);\n }\n\n addPluginsDependencies(ctx: any) {\n const plugins = Object.keys(this.packageJson.devDependencies).filter((name) => this.isPlugin(name));\n\n const tasks = plugins.map((plugin) => {\n return {\n title: `Run plugin '${chalk.cyan(plugin)}'`,\n task: () => this.cliHooks.emit(CommandStoreKeys.ADD, plugin, ctx)\n };\n });\n\n return [\n ...tasks,\n {\n title: \"Install\",\n task: createSubTasks(\n () => {\n return this.packageJson.install(ctx);\n },\n {...ctx, concurrent: false}\n )\n }\n ];\n }\n\n protected getKeyword(keyword: string) {\n return `@${this.name}/cli-plugin-${this.cleanKeyword(keyword)}`;\n }\n\n protected cleanKeyword(keyword: string) {\n return keyword.replace(this.name, \"\").replace(\"@\", \"\").replace(\"/\", \"\").replace(\"cli-plugin-\", \"\");\n }\n\n private isPlugin(name: any) {\n return name.startsWith(`@${this.name}/cli-plugin`) || name.includes(`${this.name}-cli-plugin`);\n }\n}\n"]}
@@ -1,8 +1,9 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { classOf } from "@tsed/core";
3
- import { Constant, Inject, Injectable, InjectorService } from "@tsed/di";
3
+ import { Constant, DIContext, getContext, Inject, Injectable, InjectorService, runInContext } from "@tsed/di";
4
4
  import { Argument, Command } from "commander";
5
5
  import Inquirer from "inquirer";
6
+ import { v4 } from "uuid";
6
7
  import { CommandStoreKeys } from "../domains/CommandStoreKeys.js";
7
8
  import { PROVIDER_TYPE_COMMAND } from "../registries/CommandRegistry.js";
8
9
  import { createSubTasks, createTasksRunner } from "../utils/createTasksRunner.js";
@@ -38,15 +39,21 @@ let CliService = class CliService {
38
39
  * Run lifecycle
39
40
  * @param cmdName
40
41
  * @param data
42
+ * @param $ctx
41
43
  */
42
- async runLifecycle(cmdName, data = {}) {
43
- data = await this.beforePrompt(cmdName, data);
44
- data = await this.prompt(cmdName, data);
45
- await this.dispatch(cmdName, data);
44
+ async runLifecycle(cmdName, data = {}, $ctx) {
45
+ return runInContext($ctx, async () => {
46
+ data = await this.beforePrompt(cmdName, data);
47
+ $ctx.set("data", data);
48
+ data = await this.prompt(cmdName, data);
49
+ await this.dispatch(cmdName, data, $ctx);
50
+ });
46
51
  }
47
- async dispatch(cmdName, data) {
52
+ async dispatch(cmdName, data, $ctx) {
48
53
  try {
49
- await this.exec(cmdName, data);
54
+ $ctx.set("dispatchCmd", cmdName);
55
+ $ctx.set("data", data);
56
+ await this.exec(cmdName, data, $ctx);
50
57
  }
51
58
  catch (er) {
52
59
  await this.injector.emit("$onFinish", er);
@@ -56,19 +63,19 @@ let CliService = class CliService {
56
63
  await this.injector.emit("$onFinish");
57
64
  await this.injector.destroy();
58
65
  }
59
- async exec(cmdName, ctx) {
60
- const initialTasks = await this.getTasks(cmdName, ctx);
66
+ async exec(cmdName, data, $ctx) {
67
+ const initialTasks = await this.getTasks(cmdName, data);
61
68
  if (initialTasks.length) {
62
69
  const tasks = [
63
70
  ...initialTasks,
64
71
  {
65
72
  title: "Install dependencies",
66
73
  enabled: () => this.reinstallAfterRun && (this.projectPkg.rewrite || this.projectPkg.reinstall),
67
- task: createSubTasks(() => this.projectPkg.install(ctx), { ...ctx, concurrent: false })
74
+ task: createSubTasks(() => this.projectPkg.install(data), { ...data, concurrent: false })
68
75
  },
69
- ...(await this.getPostInstallTasks(cmdName, ctx))
76
+ ...(await this.getPostInstallTasks(cmdName, data))
70
77
  ];
71
- return createTasksRunner(tasks, this.mapContext(cmdName, ctx));
78
+ return createTasksRunner(tasks, this.mapData(cmdName, data, $ctx));
72
79
  }
73
80
  }
74
81
  /**
@@ -111,25 +118,26 @@ let CliService = class CliService {
111
118
  /**
112
119
  * Run lifecycle
113
120
  * @param cmdName
114
- * @param ctx
121
+ * @param data
115
122
  */
116
- async getTasks(cmdName, ctx) {
123
+ async getTasks(cmdName, data) {
124
+ const $ctx = getContext();
117
125
  const provider = this.commands.get(cmdName);
118
126
  const instance = this.injector.get(provider.token);
119
- ctx = this.mapContext(cmdName, ctx);
127
+ data = this.mapData(cmdName, data, $ctx);
120
128
  if (instance.$beforeExec) {
121
- await instance.$beforeExec(ctx);
129
+ await instance.$beforeExec(data);
122
130
  }
123
- return [...(await instance.$exec(ctx)), ...(await this.hooks.emit(CommandStoreKeys.EXEC_HOOKS, cmdName, ctx))];
131
+ return [...(await instance.$exec(data)), ...(await this.hooks.emit(CommandStoreKeys.EXEC_HOOKS, cmdName, data))];
124
132
  }
125
- async getPostInstallTasks(cmdName, ctx) {
133
+ async getPostInstallTasks(cmdName, data) {
126
134
  const provider = this.commands.get(cmdName);
127
135
  const instance = this.injector.get(provider.useClass);
128
- ctx = this.mapContext(cmdName, ctx);
136
+ data = this.mapData(cmdName, data, getContext());
129
137
  return [
130
- ...(instance.$postInstall ? await instance.$postInstall(ctx) : []),
131
- ...(await this.hooks.emit(CommandStoreKeys.POST_INSTALL_HOOKS, cmdName, ctx)),
132
- ...(instance.$afterPostInstall ? await instance.$afterPostInstall(ctx) : [])
138
+ ...(instance.$postInstall ? await instance.$postInstall(data) : []),
139
+ ...(await this.hooks.emit(CommandStoreKeys.POST_INSTALL_HOOKS, cmdName, data)),
140
+ ...(instance.$afterPostInstall ? await instance.$afterPostInstall(data) : [])
133
141
  ];
134
142
  }
135
143
  createCommand(metadata) {
@@ -149,7 +157,14 @@ let CliService = class CliService {
149
157
  ...cmd.opts(),
150
158
  rawArgs
151
159
  };
152
- return this.runLifecycle(name, data);
160
+ const $ctx = new DIContext({
161
+ id: v4(),
162
+ injector: this.injector,
163
+ logger: this.injector.logger
164
+ });
165
+ $ctx.set("data", data);
166
+ $ctx.set("command", metadata);
167
+ return this.runLifecycle(name, data, $ctx);
153
168
  };
154
169
  if (alias) {
155
170
  cmd = cmd.alias(alias);
@@ -165,21 +180,22 @@ let CliService = class CliService {
165
180
  load() {
166
181
  this.injector.getProviders(PROVIDER_TYPE_COMMAND).forEach((provider) => this.build(provider));
167
182
  }
168
- mapContext(cmdName, ctx) {
183
+ mapData(cmdName, data, $ctx) {
169
184
  const provider = this.commands.get(cmdName);
170
185
  const instance = this.injector.get(provider.useClass);
171
- const verbose = ctx.verbose;
186
+ const verbose = data.verbose;
172
187
  if (instance.$mapContext) {
173
- ctx = instance.$mapContext(JSON.parse(JSON.stringify(ctx)));
174
- ctx.verbose = verbose;
188
+ data = instance.$mapContext(JSON.parse(JSON.stringify(data)));
189
+ data.verbose = verbose;
175
190
  }
176
- if (ctx.verbose) {
191
+ if (data.verbose) {
177
192
  this.injector.logger.level = "debug";
178
193
  }
179
194
  else {
180
195
  this.injector.logger.level = "info";
181
196
  }
182
- return ctx;
197
+ $ctx.set("data", data);
198
+ return data;
183
199
  }
184
200
  /**
185
201
  * Build command and sub-commands
@@ -1 +1 @@
1
- {"version":3,"file":"CliService.js","sourceRoot":"","sources":["../../../src/services/CliService.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,YAAY,CAAC;AACnC,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAW,MAAM,UAAU,CAAC;AACjF,OAAO,EAAC,QAAQ,EAAE,OAAO,EAAC,MAAM,WAAW,CAAC;AAC5C,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAI7D,OAAO,EAAC,qBAAqB,EAAC,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAC,cAAc,EAAE,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAC,kBAAkB,EAAC,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAC,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAC,WAAW,EAAC,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AACxD,6DAA6D;AAC7D,aAAa;AACb,OAAO,4BAA4B,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAC,mBAAmB,EAAC,MAAM,8BAA8B,CAAC;AAEjE,QAAQ,CAAC,cAAc,CAAC,cAAc,EAAE,4BAA4B,CAAC,CAAC;AAG/D,IAAM,UAAU,GAAhB,MAAM,UAAU;IACZ,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAGjC,iBAAiB,GAAG,KAAK,CAAC;IAGhB,GAAG,CAAM;IAGT,QAAQ,CAAkB;IAG1B,KAAK,CAAW;IAGhB,UAAU,CAAqB;IAEjC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;IAE7B;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,IAAc;QAC5B,MAAM,EAAC,OAAO,EAAC,GAAG,IAAI,CAAC;QAEvB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAElC,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,OAAY,EAAE;QACvD,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAExC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,OAAe,EAAE,IAAS;QAC9C,IAAI;YACF,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SAChC;QAAC,OAAO,EAAE,EAAE;YACX,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YAC1C,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC9B,MAAM,EAAE,CAAC;SACV;QAED,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,GAAQ;QACzC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAEvD,IAAI,YAAY,CAAC,MAAM,EAAE;YACvB,MAAM,KAAK,GAAG;gBACZ,GAAG,YAAY;gBACf;oBACE,KAAK,EAAE,sBAAsB;oBAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;oBAC/F,IAAI,EAAE,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAC,GAAG,GAAG,EAAE,UAAU,EAAE,KAAK,EAAC,CAAC;iBACtF;gBACD,GAAG,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;aAClD,CAAC;YAEF,OAAO,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;SAChE;IACH,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,MAAW,EAAE;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAkB,QAAQ,CAAC,QAAQ,CAAE,CAAC;QACxE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAE5B,IAAI,QAAQ,CAAC,aAAa,EAAE;YAC1B,GAAG,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpE,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;SACvB;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,MAAW,EAAE;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAkB,QAAQ,CAAC,QAAQ,CAAE,CAAC;QAExE,IAAI,QAAQ,CAAC,OAAO,EAAE;YACpB,MAAM,SAAS,GAAG;gBAChB,GAAI,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAW;gBAC3C,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;aACxE,CAAC;YAEF,IAAI,SAAS,CAAC,MAAM,EAAE;gBACpB,GAAG,GAAG;oBACJ,GAAG,GAAG;oBACN,GAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAS;iBAC/C,CAAC;aACH;SACF;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,QAAQ,CAAC,OAAe,EAAE,GAAQ;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAkB,QAAQ,CAAC,KAAK,CAAE,CAAC;QAErE,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAEpC,IAAI,QAAQ,CAAC,WAAW,EAAE;YACxB,MAAM,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;SACjC;QAED,OAAO,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACjH,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,GAAQ;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAkB,QAAQ,CAAC,QAAQ,CAAE,CAAC;QAExE,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAEpC,OAAO;YACL,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;YAC7E,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7E,CAAC;IACJ,CAAC;IAEM,aAAa,CAAC,QAAyB;QAC5C,MAAM,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAC,GAAG,QAAQ,CAAC;QAE/E,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;SACxC;QAED,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAErC,MAAM,QAAQ,GAAG,CAAC,GAAG,aAAoB,EAAE,EAAE;YAC3C,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;YAChC,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YACzD,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAE3D,MAAM,IAAI,GAAG;gBACX,GAAG,OAAO;gBACV,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO;gBACtC,GAAG,UAAU;gBACb,GAAG,GAAG,CAAC,IAAI,EAAE;gBACb,OAAO;aACR,CAAC;YAEF,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC;QAEF,IAAI,KAAK,EAAE;YACT,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACxB;QAED,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACnC,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAErC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE3B,IAAI,OAAO,EAAE;YACX,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC;SAC5D;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChG,CAAC;IAEO,UAAU,CAAC,OAAe,EAAE,GAAQ;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAkB,QAAQ,CAAC,QAAQ,CAAE,CAAC;QACxE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAE5B,IAAI,QAAQ,CAAC,WAAW,EAAE;YACxB,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5D,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;SACvB;QAED,IAAI,GAAG,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;SACtC;aAAM;YACL,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC;SACrC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,QAAuB;QACnC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEvD,IAAI,QAAQ,CAAC,IAAI,EAAE;YACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACpC,MAAM,KAAK,CACT,OAAO,QAAQ,CAAC,IAAI,8EAA8E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAC/H,CAAC;aACH;YAED,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAEhD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;SAC5C;IACH,CAAC;IAED;;;;;OAKG;IACK,WAAW,CAAC,UAAmB,EAAE,OAAwC,EAAE,mBAA4B;QAC7G,6DAA6D;QAC7D,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,OAAO,EAAC,CAAC,EAAE,EAAE;YACtH,MAAM,EAAE,GAAG,CAAC,CAAM,EAAE,EAAE;gBACpB,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACjC,CAAC,CAAC;YAEF,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;gBAC5B,YAAY,GAAG,KAAK,CAAC;aACtB;YAED,OAAO,QAAQ;gBACb,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,CAAC;gBACjE,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;QAC9D,CAAC,EAAE,UAAU,CAAC,CAAC;QAEf,UAAU,CAAC,MAAM,CAAC,uBAAuB,EAAE,wBAAwB,CAAC,CAAC;QACrE,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAE3D,IAAI,mBAAmB,EAAE;YACvB,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;SACrC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,cAAc,CAAC,GAAY,EAAE,IAAgC;QACnE,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAC,CAAC,EAAE,EAAE;YACvF,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,EAAE,WAAW,CAAC,CAAC;YAE/E,IAAI,YAAY,KAAK,SAAS,EAAE;gBAC9B,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;aAChC;YAED,OAAO,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;CACF,CAAA;AAnRC;IAAC,QAAQ,CAAC,2BAA2B,EAAE,KAAK,CAAC;;qDACnB;AAE1B;IAAC,QAAQ,CAAC,KAAK,EAAE,EAAC,OAAO,EAAE,OAAO,EAAC,CAAC;;uCACjB;AAEnB;IAAC,MAAM,EAAE;8BACW,eAAe;4CAAC;AAEpC;IAAC,MAAM,EAAE;8BACQ,QAAQ;yCAAC;AAE1B;IAAC,MAAM,EAAE;8BACa,kBAAkB;8CAAC;AAhB9B,UAAU;IADtB,UAAU,EAAE;GACA,UAAU,CAsRtB;SAtRY,UAAU","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 {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\";\nimport {mapCommanderOptions} from \"../utils/mapCommanderOptions\";\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 mappedArgs = mapCommanderArgs(args, commanderArgs);\n const allOpts = mapCommanderOptions(this.program.commands);\n\n const data = {\n ...allOpts,\n verbose: !!this.program.opts().verbose,\n ...mappedArgs,\n ...cmd.opts(),\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) => {\n return parseOption(v, options);\n };\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, DIContext, getContext, Inject, Injectable, InjectorService, Provider, runInContext} from \"@tsed/di\";\nimport {Argument, Command} from \"commander\";\nimport Inquirer from \"inquirer\";\nimport {v4} from \"uuid\";\nimport {CommandStoreKeys} from \"../domains/CommandStoreKeys\";\nimport {CommandProvider} from \"../interfaces/CommandProvider\";\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 {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\";\nimport {mapCommanderOptions} from \"../utils/mapCommanderOptions\";\nimport {CommandMetadata} from \"../interfaces/CommandMetadata\";\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 * @param $ctx\n */\n public async runLifecycle(cmdName: string, data: any = {}, $ctx: DIContext) {\n return runInContext($ctx, async () => {\n data = await this.beforePrompt(cmdName, data);\n\n $ctx.set(\"data\", data);\n\n data = await this.prompt(cmdName, data);\n await this.dispatch(cmdName, data, $ctx);\n });\n }\n\n public async dispatch(cmdName: string, data: any, $ctx: DIContext) {\n try {\n $ctx.set(\"dispatchCmd\", cmdName);\n $ctx.set(\"data\", data);\n\n await this.exec(cmdName, data, $ctx);\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, data: any, $ctx: DIContext) {\n const initialTasks = await this.getTasks(cmdName, data);\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(data), {...data, concurrent: false})\n },\n ...(await this.getPostInstallTasks(cmdName, data))\n ];\n\n return createTasksRunner(tasks, this.mapData(cmdName, data, $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 data\n */\n public async getTasks(cmdName: string, data: any) {\n const $ctx = getContext()!;\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.token)!;\n\n data = this.mapData(cmdName, data, $ctx);\n\n if (instance.$beforeExec) {\n await instance.$beforeExec(data);\n }\n\n return [...(await instance.$exec(data)), ...(await this.hooks.emit(CommandStoreKeys.EXEC_HOOKS, cmdName, data))];\n }\n\n public async getPostInstallTasks(cmdName: string, data: any) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n\n data = this.mapData(cmdName, data, getContext()!);\n\n return [\n ...(instance.$postInstall ? await instance.$postInstall(data) : []),\n ...(await this.hooks.emit(CommandStoreKeys.POST_INSTALL_HOOKS, cmdName, data)),\n ...(instance.$afterPostInstall ? await instance.$afterPostInstall(data) : [])\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 mappedArgs = mapCommanderArgs(args, commanderArgs);\n const allOpts = mapCommanderOptions(this.program.commands);\n\n const data = {\n ...allOpts,\n verbose: !!this.program.opts().verbose,\n ...mappedArgs,\n ...cmd.opts(),\n rawArgs\n };\n\n const $ctx = new DIContext({\n id: v4(),\n injector: this.injector,\n logger: this.injector.logger\n });\n\n $ctx.set(\"data\", data);\n $ctx.set(\"command\", metadata);\n\n return this.runLifecycle(name, data, $ctx);\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 mapData(cmdName: string, data: any, $ctx: DIContext) {\n const provider = this.commands.get(cmdName);\n const instance = this.injector.get<CommandProvider>(provider.useClass)!;\n const verbose = data.verbose;\n\n if (instance.$mapContext) {\n data = instance.$mapContext(JSON.parse(JSON.stringify(data)));\n data.verbose = verbose;\n }\n\n if (data.verbose) {\n this.injector.logger.level = \"debug\";\n } else {\n this.injector.logger.level = \"info\";\n }\n\n $ctx.set(\"data\", data);\n\n return data;\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) => {\n return parseOption(v, options);\n };\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"]}