@pristine-ts/cli 2.0.16 → 2.0.18

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 (142) hide show
  1. package/dist/lib/cjs/bin.js +0 -0
  2. package/dist/lib/cjs/cli.configuration-keys.js +6 -0
  3. package/dist/lib/cjs/cli.configuration-keys.js.map +1 -1
  4. package/dist/lib/cjs/cli.module.js +13 -0
  5. package/dist/lib/cjs/cli.module.js.map +1 -1
  6. package/dist/lib/cjs/errors/cli-error-code.enum.js +10 -0
  7. package/dist/lib/cjs/errors/cli-error-code.enum.js.map +1 -1
  8. package/dist/lib/cjs/interfaces/command-parameter-choice.interface.js +3 -0
  9. package/dist/lib/cjs/interfaces/command-parameter-choice.interface.js.map +1 -0
  10. package/dist/lib/cjs/interfaces/command-parameter-choices-context.interface.js +3 -0
  11. package/dist/lib/cjs/interfaces/command-parameter-choices-context.interface.js.map +1 -0
  12. package/dist/lib/cjs/interfaces/command-parameter-choices-provider.interface.js +3 -0
  13. package/dist/lib/cjs/interfaces/command-parameter-choices-provider.interface.js.map +1 -0
  14. package/dist/lib/cjs/interfaces/interfaces.js +3 -0
  15. package/dist/lib/cjs/interfaces/interfaces.js.map +1 -1
  16. package/dist/lib/cjs/reporters/cli-error.reporter.js +11 -3
  17. package/dist/lib/cjs/reporters/cli-error.reporter.js.map +1 -1
  18. package/dist/lib/cjs/services/command-argument-error-formatter.js +146 -0
  19. package/dist/lib/cjs/services/command-argument-error-formatter.js.map +1 -0
  20. package/dist/lib/cjs/services/command-argument-resolver.js +1 -1
  21. package/dist/lib/cjs/services/command-argument-resolver.js.map +1 -1
  22. package/dist/lib/cjs/services/command-options-resolver.js +30 -37
  23. package/dist/lib/cjs/services/command-options-resolver.js.map +1 -1
  24. package/dist/lib/cjs/services/command-parameter-prompter.js +118 -38
  25. package/dist/lib/cjs/services/command-parameter-prompter.js.map +1 -1
  26. package/dist/lib/cjs/services/command-usage-renderer.js +81 -0
  27. package/dist/lib/cjs/services/command-usage-renderer.js.map +1 -0
  28. package/dist/lib/cjs/services/program-name-resolver.js +98 -0
  29. package/dist/lib/cjs/services/program-name-resolver.js.map +1 -0
  30. package/dist/lib/cjs/services/services.js +3 -0
  31. package/dist/lib/cjs/services/services.js.map +1 -1
  32. package/dist/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  33. package/dist/lib/cjs/types/command-parameter-choices-list.type.js +3 -0
  34. package/dist/lib/cjs/types/command-parameter-choices-list.type.js.map +1 -0
  35. package/dist/lib/cjs/types/command-parameter-choices-resolver.type.js +3 -0
  36. package/dist/lib/cjs/types/command-parameter-choices-resolver.type.js.map +1 -0
  37. package/dist/lib/cjs/types/command-parameter-choices.type.js +3 -0
  38. package/dist/lib/cjs/types/command-parameter-choices.type.js.map +1 -0
  39. package/dist/lib/cjs/types/types.js +3 -0
  40. package/dist/lib/cjs/types/types.js.map +1 -1
  41. package/dist/lib/esm/cli.configuration-keys.js +6 -0
  42. package/dist/lib/esm/cli.configuration-keys.js.map +1 -1
  43. package/dist/lib/esm/cli.module.js +13 -0
  44. package/dist/lib/esm/cli.module.js.map +1 -1
  45. package/dist/lib/esm/errors/cli-error-code.enum.js +10 -0
  46. package/dist/lib/esm/errors/cli-error-code.enum.js.map +1 -1
  47. package/dist/lib/esm/interfaces/command-parameter-choice.interface.js +2 -0
  48. package/dist/lib/esm/interfaces/command-parameter-choice.interface.js.map +1 -0
  49. package/dist/lib/esm/interfaces/command-parameter-choices-context.interface.js +2 -0
  50. package/dist/lib/esm/interfaces/command-parameter-choices-context.interface.js.map +1 -0
  51. package/dist/lib/esm/interfaces/command-parameter-choices-provider.interface.js +2 -0
  52. package/dist/lib/esm/interfaces/command-parameter-choices-provider.interface.js.map +1 -0
  53. package/dist/lib/esm/interfaces/interfaces.js +3 -0
  54. package/dist/lib/esm/interfaces/interfaces.js.map +1 -1
  55. package/dist/lib/esm/reporters/cli-error.reporter.js +11 -3
  56. package/dist/lib/esm/reporters/cli-error.reporter.js.map +1 -1
  57. package/dist/lib/esm/services/command-argument-error-formatter.js +143 -0
  58. package/dist/lib/esm/services/command-argument-error-formatter.js.map +1 -0
  59. package/dist/lib/esm/services/command-argument-resolver.js +1 -1
  60. package/dist/lib/esm/services/command-argument-resolver.js.map +1 -1
  61. package/dist/lib/esm/services/command-options-resolver.js +31 -38
  62. package/dist/lib/esm/services/command-options-resolver.js.map +1 -1
  63. package/dist/lib/esm/services/command-parameter-prompter.js +120 -40
  64. package/dist/lib/esm/services/command-parameter-prompter.js.map +1 -1
  65. package/dist/lib/esm/services/command-usage-renderer.js +78 -0
  66. package/dist/lib/esm/services/command-usage-renderer.js.map +1 -0
  67. package/dist/lib/esm/services/program-name-resolver.js +62 -0
  68. package/dist/lib/esm/services/program-name-resolver.js.map +1 -0
  69. package/dist/lib/esm/services/services.js +3 -0
  70. package/dist/lib/esm/services/services.js.map +1 -1
  71. package/dist/lib/esm/tsconfig.tsbuildinfo +1 -1
  72. package/dist/lib/esm/types/command-parameter-choices-list.type.js +2 -0
  73. package/dist/lib/esm/types/command-parameter-choices-list.type.js.map +1 -0
  74. package/dist/lib/esm/types/command-parameter-choices-resolver.type.js +2 -0
  75. package/dist/lib/esm/types/command-parameter-choices-resolver.type.js.map +1 -0
  76. package/dist/lib/esm/types/command-parameter-choices.type.js +2 -0
  77. package/dist/lib/esm/types/command-parameter-choices.type.js.map +1 -0
  78. package/dist/lib/esm/types/types.js +3 -0
  79. package/dist/lib/esm/types/types.js.map +1 -1
  80. package/dist/types/cli.configuration-keys.d.ts +7 -0
  81. package/dist/types/errors/cli-error-code.enum.d.ts +10 -0
  82. package/dist/types/interfaces/command-parameter-choice.interface.d.ts +14 -0
  83. package/dist/types/interfaces/command-parameter-choices-context.interface.d.ts +17 -0
  84. package/dist/types/interfaces/command-parameter-choices-provider.interface.d.ts +20 -0
  85. package/dist/types/interfaces/interfaces.d.ts +3 -0
  86. package/dist/types/options/command-parameter.options.d.ts +30 -0
  87. package/dist/types/services/command-argument-error-formatter.d.ts +64 -0
  88. package/dist/types/services/command-options-resolver.d.ts +23 -13
  89. package/dist/types/services/command-parameter-prompter.d.ts +60 -31
  90. package/dist/types/services/command-usage-renderer.d.ts +35 -0
  91. package/dist/types/services/program-name-resolver.d.ts +21 -0
  92. package/dist/types/services/services.d.ts +3 -0
  93. package/dist/types/types/command-parameter-choices-list.type.d.ts +6 -0
  94. package/dist/types/types/command-parameter-choices-resolver.type.d.ts +9 -0
  95. package/dist/types/types/command-parameter-choices.type.d.ts +19 -0
  96. package/dist/types/types/types.d.ts +3 -0
  97. package/package.json +12 -12
  98. package/dist/lib/cjs/bootstrap/app-module-cache.js +0 -71
  99. package/dist/lib/cjs/bootstrap/app-module-cache.js.map +0 -1
  100. package/dist/lib/cjs/bootstrap/app-module-discoverer.js +0 -119
  101. package/dist/lib/cjs/bootstrap/app-module-discoverer.js.map +0 -1
  102. package/dist/lib/cjs/bootstrap/app-module-discovery-candidate.js +0 -21
  103. package/dist/lib/cjs/bootstrap/app-module-discovery-candidate.js.map +0 -1
  104. package/dist/lib/cjs/bootstrap/app-module-discovery-reason.enum.js +0 -15
  105. package/dist/lib/cjs/bootstrap/app-module-discovery-reason.enum.js.map +0 -1
  106. package/dist/lib/cjs/bootstrap/app-module-prompt.js +0 -78
  107. package/dist/lib/cjs/bootstrap/app-module-prompt.js.map +0 -1
  108. package/dist/lib/cjs/commands/config-init.command.js +0 -133
  109. package/dist/lib/cjs/commands/config-init.command.js.map +0 -1
  110. package/dist/lib/cjs/enums/exit-code.enum.js +0 -9
  111. package/dist/lib/cjs/enums/exit-code.enum.js.map +0 -1
  112. package/dist/lib/cjs/managers/console.manager.js +0 -277
  113. package/dist/lib/cjs/managers/console.manager.js.map +0 -1
  114. package/dist/lib/cjs/managers/repl-session.js +0 -251
  115. package/dist/lib/cjs/managers/repl-session.js.map +0 -1
  116. package/dist/lib/esm/bootstrap/app-module-cache.js +0 -65
  117. package/dist/lib/esm/bootstrap/app-module-cache.js.map +0 -1
  118. package/dist/lib/esm/bootstrap/app-module-discoverer.js +0 -113
  119. package/dist/lib/esm/bootstrap/app-module-discoverer.js.map +0 -1
  120. package/dist/lib/esm/bootstrap/app-module-discovery-candidate.js +0 -17
  121. package/dist/lib/esm/bootstrap/app-module-discovery-candidate.js.map +0 -1
  122. package/dist/lib/esm/bootstrap/app-module-discovery-reason.enum.js +0 -12
  123. package/dist/lib/esm/bootstrap/app-module-discovery-reason.enum.js.map +0 -1
  124. package/dist/lib/esm/bootstrap/app-module-prompt.js +0 -75
  125. package/dist/lib/esm/bootstrap/app-module-prompt.js.map +0 -1
  126. package/dist/lib/esm/commands/config-init.command.js +0 -127
  127. package/dist/lib/esm/commands/config-init.command.js.map +0 -1
  128. package/dist/lib/esm/enums/exit-code.enum.js +0 -6
  129. package/dist/lib/esm/enums/exit-code.enum.js.map +0 -1
  130. package/dist/lib/esm/managers/console.manager.js +0 -241
  131. package/dist/lib/esm/managers/console.manager.js.map +0 -1
  132. package/dist/lib/esm/managers/repl-session.js +0 -215
  133. package/dist/lib/esm/managers/repl-session.js.map +0 -1
  134. package/dist/types/bootstrap/app-module-cache.d.ts +0 -15
  135. package/dist/types/bootstrap/app-module-discoverer.d.ts +0 -30
  136. package/dist/types/bootstrap/app-module-discovery-candidate.d.ts +0 -18
  137. package/dist/types/bootstrap/app-module-discovery-reason.enum.d.ts +0 -10
  138. package/dist/types/bootstrap/app-module-prompt.d.ts +0 -20
  139. package/dist/types/commands/config-init.command.d.ts +0 -18
  140. package/dist/types/enums/exit-code.enum.d.ts +0 -4
  141. package/dist/types/managers/console.manager.d.ts +0 -93
  142. package/dist/types/managers/repl-session.d.ts +0 -62
File without changes
@@ -20,5 +20,11 @@ exports.CliConfigurationKeys = {
20
20
  * input is not an interactive terminal, regardless of this value.
21
21
  */
22
22
  InteractiveParameters: "pristine.cli.interactiveParameters",
23
+ /**
24
+ * Explicit program name shown in generated `Usage:` lines (e.g. `myapp`). Optional: when unset,
25
+ * the CLI derives the name from `argv[1]`, falling back to `pristine`. Set it for launch shapes
26
+ * where `argv[1]` isn't the friendly name (e.g. `node dist/bin/cli.cjs`).
27
+ */
28
+ BinName: "pristine.cli.binName",
23
29
  };
24
30
  //# sourceMappingURL=cli.configuration-keys.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.configuration-keys.js","sourceRoot":"","sources":["../../../src/cli.configuration-keys.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;GAUG;AACU,QAAA,oBAAoB,GAAG;IAClC;;;;;OAKG;IACH,qBAAqB,EAAE,oCAAoC;CACnD,CAAC"}
1
+ {"version":3,"file":"cli.configuration-keys.js","sourceRoot":"","sources":["../../../src/cli.configuration-keys.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;GAUG;AACU,QAAA,oBAAoB,GAAG;IAClC;;;;;OAKG;IACH,qBAAqB,EAAE,oCAAoC;IAE3D;;;;OAIG;IACH,OAAO,EAAE,sBAAsB;CACvB,CAAC"}
@@ -62,6 +62,19 @@ exports.CliModule = {
62
62
  new configuration_1.BooleanResolver(new configuration_1.EnvironmentVariableResolver("PRISTINE_CLI_INTERACTIVE_PARAMETERS")),
63
63
  ],
64
64
  },
65
+ /**
66
+ * Program name shown in generated `Usage:` lines. Defaults to empty so `ProgramNameResolver`
67
+ * falls back to `basename(argv[1])` (then `pristine`); set it (here, in `pristine.config.ts`,
68
+ * or via the env var) to force a name.
69
+ */
70
+ {
71
+ parameterName: cli_configuration_keys_1.CliConfigurationKeys.BinName,
72
+ isRequired: false,
73
+ defaultValue: "",
74
+ defaultResolvers: [
75
+ new configuration_1.EnvironmentVariableResolver("PRISTINE_CLI_BIN_NAME"),
76
+ ],
77
+ },
65
78
  ],
66
79
  importModules: [
67
80
  core_1.CoreModule,
@@ -1 +1 @@
1
- {"version":3,"file":"cli.module.js","sourceRoot":"","sources":["../../../src/cli.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,6DAAsD;AACtD,4CAA6C;AAC7C,wDAAyD;AACzD,kDAAuG;AACvG,4DAA2D;AAC3D,8DAA+D;AAC/D,8DAAwF;AACxF,qEAA8D;AAE9D,wDAAsC;AACtC,2DAAyC;AACzC,sDAAoC;AACpC,kDAAgC;AAChC,0DAAwC;AACxC,gDAA8B;AAC9B,kDAAgC;AAChC,kEAAgD;AAChD,kEAAgD;AAChD,0DAAwC;AACxC,sDAAoC;AACpC,oDAAkC;AAClC,oDAAkC;AAClC,iEAA+C;AAC/C,sDAAoC;AACpC,gDAA8B;AAE9B,yFAAyF;AACzF,yFAAyF;AACzF,mFAAmF;AACnF,oFAAoF;AACpF,6BAA0B;AAAlB,0FAAA,GAAG,OAAA;AAEE,QAAA,SAAS,GAAoB;IACxC,OAAO,EAAE,qCAAgB;IACzB,wBAAwB,EAAE;QACxB;;;;;WAKG;QACH;YACE,aAAa,EAAE,6CAAoB,CAAC,qBAAqB;YACzD,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,IAAI;YAClB,gBAAgB,EAAE;gBAChB,IAAI,+BAAe,CAAC,IAAI,2CAA2B,CAAC,qCAAqC,CAAC,CAAC;aAC5F;SACF;KACF;IACD,aAAa,EAAE;QACb,iBAAU;QACV,gCAAiB;QACjB,uBAAa;QACb,qFAAqF;QACrF,iFAAiF;QACjF,mFAAmF;QACnF,qFAAqF;QACrF,0FAA0F;QAC1F,mCAAmB;QACnB,6BAAgB;KACjB;IACD;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,EAAE;QACd,CAAC,8BAAoB,GAAG,0BAA0B,CAAC,EAAE,wBAAc,CAAC,MAAM;QAC1E,CAAC,8BAAoB,GAAG,gCAAgC,CAAC,EAAE,sBAAY,CAAC,IAAI;KAC7E;CACF,CAAA"}
1
+ {"version":3,"file":"cli.module.js","sourceRoot":"","sources":["../../../src/cli.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,6DAAsD;AACtD,4CAA6C;AAC7C,wDAAyD;AACzD,kDAAuG;AACvG,4DAA2D;AAC3D,8DAA+D;AAC/D,8DAAwF;AACxF,qEAA8D;AAE9D,wDAAsC;AACtC,2DAAyC;AACzC,sDAAoC;AACpC,kDAAgC;AAChC,0DAAwC;AACxC,gDAA8B;AAC9B,kDAAgC;AAChC,kEAAgD;AAChD,kEAAgD;AAChD,0DAAwC;AACxC,sDAAoC;AACpC,oDAAkC;AAClC,oDAAkC;AAClC,iEAA+C;AAC/C,sDAAoC;AACpC,gDAA8B;AAE9B,yFAAyF;AACzF,yFAAyF;AACzF,mFAAmF;AACnF,oFAAoF;AACpF,6BAA0B;AAAlB,0FAAA,GAAG,OAAA;AAEE,QAAA,SAAS,GAAoB;IACxC,OAAO,EAAE,qCAAgB;IACzB,wBAAwB,EAAE;QACxB;;;;;WAKG;QACH;YACE,aAAa,EAAE,6CAAoB,CAAC,qBAAqB;YACzD,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,IAAI;YAClB,gBAAgB,EAAE;gBAChB,IAAI,+BAAe,CAAC,IAAI,2CAA2B,CAAC,qCAAqC,CAAC,CAAC;aAC5F;SACF;QACD;;;;WAIG;QACH;YACE,aAAa,EAAE,6CAAoB,CAAC,OAAO;YAC3C,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,EAAE;YAChB,gBAAgB,EAAE;gBAChB,IAAI,2CAA2B,CAAC,uBAAuB,CAAC;aACzD;SACF;KACF;IACD,aAAa,EAAE;QACb,iBAAU;QACV,gCAAiB;QACjB,uBAAa;QACb,qFAAqF;QACrF,iFAAiF;QACjF,mFAAmF;QACnF,qFAAqF;QACrF,0FAA0F;QAC1F,mCAAmB;QACnB,6BAAgB;KACjB;IACD;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,EAAE;QACd,CAAC,8BAAoB,GAAG,0BAA0B,CAAC,EAAE,wBAAc,CAAC,MAAM;QAC1E,CAAC,8BAAoB,GAAG,gCAAgC,CAAC,EAAE,sBAAY,CAAC,IAAI;KAC7E;CACF,CAAA"}
@@ -13,6 +13,16 @@ var CliErrorCode;
13
13
  CliErrorCode["CommandNotFound"] = "COMMAND_NOT_FOUND";
14
14
  CliErrorCode["ArgumentMappingFailed"] = "ARGUMENT_MAPPING_FAILED";
15
15
  CliErrorCode["ArgumentValidationFailed"] = "ARGUMENT_VALIDATION_FAILED";
16
+ /**
17
+ * A required command-line argument was missing. Reported with the command's `Usage:` synopsis
18
+ * (exit 64). Distinct from a value supplied but invalid (`InvalidArgument`).
19
+ */
20
+ CliErrorCode["MissingRequiredArgument"] = "MISSING_REQUIRED_ARGUMENT";
21
+ /**
22
+ * A supplied command-line argument failed validation. Reported as a clean
23
+ * `Invalid <flag> '<value>'. …` line (exit 64).
24
+ */
25
+ CliErrorCode["InvalidArgument"] = "INVALID_ARGUMENT";
16
26
  /**
17
27
  * Two `@commandParameter` properties on the same options class resolve to the same flag.
18
28
  * A programming error in the command's options definition, not bad user input.
@@ -1 +1 @@
1
- {"version":3,"file":"cli-error-code.enum.js","sourceRoot":"","sources":["../../../../src/errors/cli-error-code.enum.ts"],"names":[],"mappings":";;;AAAA;;;;;;GAMG;AACH,IAAY,YAgBX;AAhBD,WAAY,YAAY;IACtB,qDAA8C,CAAA;IAC9C,iEAAoD,CAAA;IACpD,uEAAuD,CAAA;IAEvD;;;OAGG;IACH,gFAAgE,CAAA;IAEhE;;;OAGG;IACH,oDAAoC,CAAA;AACtC,CAAC,EAhBW,YAAY,4BAAZ,YAAY,QAgBvB"}
1
+ {"version":3,"file":"cli-error-code.enum.js","sourceRoot":"","sources":["../../../../src/errors/cli-error-code.enum.ts"],"names":[],"mappings":";;;AAAA;;;;;;GAMG;AACH,IAAY,YA4BX;AA5BD,WAAY,YAAY;IACtB,qDAA8C,CAAA;IAC9C,iEAAoD,CAAA;IACpD,uEAAuD,CAAA;IAEvD;;;OAGG;IACH,qEAAqD,CAAA;IAErD;;;OAGG;IACH,oDAAoC,CAAA;IAEpC;;;OAGG;IACH,gFAAgE,CAAA;IAEhE;;;OAGG;IACH,oDAAoC,CAAA;AACtC,CAAC,EA5BW,YAAY,4BAAZ,YAAY,QA4BvB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=command-parameter-choice.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-parameter-choice.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/command-parameter-choice.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=command-parameter-choices-context.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-parameter-choices-context.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/command-parameter-choices-context.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=command-parameter-choices-provider.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-parameter-choices-provider.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/command-parameter-choices-provider.interface.ts"],"names":[],"mappings":""}
@@ -15,5 +15,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./command.interface"), exports);
18
+ __exportStar(require("./command-parameter-choice.interface"), exports);
19
+ __exportStar(require("./command-parameter-choices-context.interface"), exports);
20
+ __exportStar(require("./command-parameter-choices-provider.interface"), exports);
18
21
  __exportStar(require("./terminal-key.interface"), exports);
19
22
  //# sourceMappingURL=interfaces.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/interfaces/interfaces.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,2DAAyC"}
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/interfaces/interfaces.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,uEAAqD;AACrD,gFAA8D;AAC9D,iFAA+D;AAC/D,2DAAyC"}
@@ -50,14 +50,22 @@ let CliErrorReporter = class CliErrorReporter {
50
50
  * `process.exit`. The bin script wraps `bootstrap().catch(err => process.exit(reporter.report(err)))`.
51
51
  */
52
52
  report(error) {
53
- var _a, _b;
53
+ var _a, _b, _c;
54
54
  const e = common_1.PristineError.from(error);
55
55
  const isDev = this.environmentManager.getEnvironment() === core_1.PristineEnvironment.Development;
56
56
  const isUserError = e.options.kind !== common_1.PristineErrorKind.SystemError;
57
+ // Plain mode: the message is already a fully formatted, user-facing block (a command's
58
+ // `Usage:` synopsis, an `Invalid <flag> …` line). Print it verbatim — no `✗ CODE:` envelope,
59
+ // no `details` rendering — and return its exit code. Honored for user errors only; a
60
+ // SystemError is never surfaced verbatim in production.
61
+ if (e.options.plain === true && isUserError) {
62
+ this.write(`${e.message}\n`);
63
+ return (_a = e.options.exitCode) !== null && _a !== void 0 ? _a : common_1.ExitCode.Error;
64
+ }
57
65
  // Headline: in production, system errors get a generic message so we don't dump
58
66
  // internal-bug messages to the user. User errors always show their own message.
59
67
  const headline = isUserError || isDev ? e.message : "Internal Error";
60
- const code = (_a = e.options.code) !== null && _a !== void 0 ? _a : "ERROR";
68
+ const code = (_b = e.options.code) !== null && _b !== void 0 ? _b : "ERROR";
61
69
  this.write(`✗ ${code}: ${headline}\n`);
62
70
  // Details: per-error-class structured fields. Surfaced for user errors always, for
63
71
  // system errors only in dev (helps debugging without leaking in prod CI logs).
@@ -84,7 +92,7 @@ let CliErrorReporter = class CliErrorReporter {
84
92
  }
85
93
  // Exit code fallback: ExitCode.Error (1) for user errors, ExitCode.Software (70)
86
94
  // for system errors. Both follow sysexits.h conventions.
87
- return (_b = e.options.exitCode) !== null && _b !== void 0 ? _b : (isUserError ? common_1.ExitCode.Error : common_1.ExitCode.Software);
95
+ return (_c = e.options.exitCode) !== null && _c !== void 0 ? _c : (isUserError ? common_1.ExitCode.Error : common_1.ExitCode.Software);
88
96
  }
89
97
  /**
90
98
  * Wraps `process.stderr.write` so a broken stderr (closed pipe, etc.) doesn't itself
@@ -1 +1 @@
1
- {"version":3,"file":"cli-error.reporter.js","sourceRoot":"","sources":["../../../../src/reporters/cli-error.reporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-error.reporter.js","sourceRoot":"","sources":["../../../../src/reporters/cli-error.reporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var CommandArgumentErrorFormatter_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.CommandArgumentErrorFormatter = void 0;
14
+ const tsyringe_1 = require("tsyringe");
15
+ const common_1 = require("@pristine-ts/common");
16
+ const metadata_1 = require("@pristine-ts/metadata");
17
+ const cli_module_keyname_1 = require("../cli.module.keyname");
18
+ const cli_decorator_metadata_keyname_enum_1 = require("../enums/cli-decorator-metadata-keyname.enum");
19
+ const cli_error_code_enum_1 = require("../errors/cli-error-code.enum");
20
+ const command_usage_renderer_1 = require("./command-usage-renderer");
21
+ /**
22
+ * Turns `@pristine-ts/class-validator`'s raw per-property validation output into a single,
23
+ * clean, user-facing `UsageError` (exit 64, rendered verbatim via `options.plain`) instead of
24
+ * a `[CONSTRAINT_KEY]`-prefixed dump:
25
+ *
26
+ * - if any *required* parameter is missing → the command's `Usage:` synopsis, so the user
27
+ * sees what to pass (and not a wall of "is not a string" noise for an absent value);
28
+ * - otherwise (values present but invalid) → one line per offending value: the parameter's
29
+ * `errorMessage` (verbatim, `%value%`/`%flag%` filled), or a generated
30
+ * `Invalid <flag> '<value>'. <validator message>` with the constraint-key prefix and
31
+ * definedness noise stripped.
32
+ *
33
+ * Returns the error rather than throwing it, so the resolver keeps the `throw` (clean control
34
+ * flow) and tests can assert on the built error directly.
35
+ */
36
+ let CommandArgumentErrorFormatter = CommandArgumentErrorFormatter_1 = class CommandArgumentErrorFormatter {
37
+ constructor(usageRenderer) {
38
+ this.usageRenderer = usageRenderer;
39
+ }
40
+ /**
41
+ * Builds the `UsageError` for a set of validation errors. `mapped` is the (failed) options
42
+ * instance — read to get each property's effective value and to tell "missing" (undefined /
43
+ * empty) from "present but invalid".
44
+ */
45
+ buildValidationError(optionsType, mapped, validationErrors, context) {
46
+ const missing = validationErrors.filter((error) => this.isMissing(mapped[error.property]));
47
+ if (missing.length > 0) {
48
+ return new common_1.UsageError(this.usageRenderer.render(optionsType, context.commandName, context.binName), {
49
+ code: cli_error_code_enum_1.CliErrorCode.MissingRequiredArgument,
50
+ plain: true,
51
+ details: { missing: missing.map((error) => this.flagFor(optionsType, error.property)).join(", ") },
52
+ });
53
+ }
54
+ const lines = validationErrors.map((error) => this.invalidLine(optionsType, mapped, error));
55
+ return new common_1.UsageError(lines.join("\n"), {
56
+ code: cli_error_code_enum_1.CliErrorCode.InvalidArgument,
57
+ plain: true,
58
+ });
59
+ }
60
+ /** A value counts as "missing" when it never arrived — undefined/null or an empty string. */
61
+ isMissing(value) {
62
+ return value === undefined || value === null || value === "";
63
+ }
64
+ /**
65
+ * One line for an offending value. A parameter's `errorMessage` is the *entire* line, used
66
+ * verbatim (with `%value%`/`%flag%` filled); otherwise we generate
67
+ * `Invalid <flag> '<value>'. <validator message>`. Sensitive parameters never echo the value
68
+ * (it is `<hidden>`, even inside a custom template).
69
+ * @private
70
+ */
71
+ invalidLine(optionsType, mapped, error) {
72
+ var _a;
73
+ const options = this.optionsFor(optionsType, error.property);
74
+ const flag = (_a = options === null || options === void 0 ? void 0 : options.flag) !== null && _a !== void 0 ? _a : error.property;
75
+ const sensitive = (options === null || options === void 0 ? void 0 : options.sensitive) === true;
76
+ const value = sensitive ? "<hidden>" : String(mapped[error.property]);
77
+ if (options === null || options === void 0 ? void 0 : options.errorMessage) {
78
+ return options.errorMessage.replace(/%value%/g, value).replace(/%flag%/g, flag);
79
+ }
80
+ const reason = this.validatorMessage(error);
81
+ return sensitive ? `Invalid ${flag}. ${reason}` : `Invalid ${flag} '${value}'. ${reason}`;
82
+ }
83
+ /**
84
+ * The validator's own message for a present-but-invalid value: the first *semantic* constraint
85
+ * message (definedness noise dropped), falling back to the first message present.
86
+ * @private
87
+ */
88
+ validatorMessage(error) {
89
+ var _a, _b;
90
+ const messages = this.constraintMessages(error);
91
+ return (_b = (_a = messages.semantic) !== null && _a !== void 0 ? _a : messages.fallback) !== null && _b !== void 0 ? _b : "Invalid value.";
92
+ }
93
+ /**
94
+ * Splits an error's constraint messages into the first *semantic* one (not a definedness
95
+ * constraint) and a plain first-seen fallback. Reads `@pristine-ts/class-validator`'s
96
+ * `{keyname, message}` constraint objects defensively.
97
+ * @private
98
+ */
99
+ constraintMessages(error) {
100
+ let semantic;
101
+ let fallback;
102
+ for (const keyname in error.constraints) {
103
+ const message = this.extractMessage(error.constraints[keyname]);
104
+ if (message === undefined) {
105
+ continue;
106
+ }
107
+ if (fallback === undefined) {
108
+ fallback = message;
109
+ }
110
+ if (semantic === undefined && CommandArgumentErrorFormatter_1.DefinednessConstraints.has(keyname.toUpperCase()) === false) {
111
+ semantic = message;
112
+ }
113
+ }
114
+ return { semantic, fallback };
115
+ }
116
+ /** Pulls the human message out of a `{keyname, message}` constraint (or a bare string). */
117
+ extractMessage(constraint) {
118
+ if (typeof constraint === "string") {
119
+ return constraint;
120
+ }
121
+ if (constraint && typeof constraint === "object" && typeof constraint.message === "string") {
122
+ return constraint.message;
123
+ }
124
+ return undefined;
125
+ }
126
+ optionsFor(optionsType, propertyKey) {
127
+ return metadata_1.PropertyMetadata.getMetadata(optionsType.prototype, propertyKey, cli_decorator_metadata_keyname_enum_1.CliDecoratorMetadataKeynameEnum.CommandParameter);
128
+ }
129
+ flagFor(optionsType, propertyKey) {
130
+ var _a, _b;
131
+ return (_b = (_a = this.optionsFor(optionsType, propertyKey)) === null || _a === void 0 ? void 0 : _a.flag) !== null && _b !== void 0 ? _b : propertyKey;
132
+ }
133
+ };
134
+ exports.CommandArgumentErrorFormatter = CommandArgumentErrorFormatter;
135
+ /**
136
+ * Constraint keynames that only trip because a value is *absent*. For a present-but-invalid
137
+ * value these never fire, so we drop them and surface the semantic constraint (e.g.
138
+ * `MATCHES`) the user actually needs — never "is not a string" for a value they gave.
139
+ */
140
+ CommandArgumentErrorFormatter.DefinednessConstraints = new Set(["IS_DEFINED", "IS_NOT_EMPTY", "IS_STRING"]);
141
+ exports.CommandArgumentErrorFormatter = CommandArgumentErrorFormatter = CommandArgumentErrorFormatter_1 = __decorate([
142
+ (0, tsyringe_1.injectable)(),
143
+ (0, common_1.moduleScoped)(cli_module_keyname_1.CliModuleKeyname),
144
+ __metadata("design:paramtypes", [command_usage_renderer_1.CommandUsageRenderer])
145
+ ], CommandArgumentErrorFormatter);
146
+ //# sourceMappingURL=command-argument-error-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-argument-error-formatter.js","sourceRoot":"","sources":["../../../../src/services/command-argument-error-formatter.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,uCAAoC;AAEpC,gDAA6D;AAC7D,oDAAuD;AACvD,8DAAuD;AACvD,sGAA6F;AAE7F,uEAA2D;AAC3D,qEAA8D;AAE9D;;;;;;;;;;;;;;GAcG;AAGI,IAAM,6BAA6B,qCAAnC,MAAM,6BAA6B;IAQxC,YACmB,aAAmC;QAAnC,kBAAa,GAAb,aAAa,CAAsB;IAEtD,CAAC;IAED;;;;OAIG;IACH,oBAAoB,CAClB,WAAkC,EAClC,MAA2B,EAC3B,gBAAuB,EACvB,OAA+C;QAE/C,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,mBAAU,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;gBAClG,IAAI,EAAE,kCAAY,CAAC,uBAAuB;gBAC1C,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,EAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAC;aACjG,CAAC,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAC5F,OAAO,IAAI,mBAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACtC,IAAI,EAAE,kCAAY,CAAC,eAAe;YAClC,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;IACL,CAAC;IAED,6FAA6F;IACrF,SAAS,CAAC,KAAU;QAC1B,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;IAC/D,CAAC;IAED;;;;;;OAMG;IACK,WAAW,CAAC,WAAkC,EAAE,MAA2B,EAAE,KAAU;;QAC7F,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,mCAAI,KAAK,CAAC,QAAQ,CAAC;QAC7C,MAAM,SAAS,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,MAAK,IAAI,CAAC;QAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEtE,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,EAAE,CAAC;YAC1B,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,SAAS,CAAC,CAAC,CAAC,WAAW,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,KAAK,KAAK,MAAM,MAAM,EAAE,CAAC;IAC5F,CAAC;IAED;;;;OAIG;IACK,gBAAgB,CAAC,KAAU;;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAChD,OAAO,MAAA,MAAA,QAAQ,CAAC,QAAQ,mCAAI,QAAQ,CAAC,QAAQ,mCAAI,gBAAgB,CAAC;IACpE,CAAC;IAED;;;;;OAKG;IACK,kBAAkB,CAAC,KAAU;QACnC,IAAI,QAA4B,CAAC;QACjC,IAAI,QAA4B,CAAC;QAEjC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YAChE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,SAAS;YACX,CAAC;YACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,QAAQ,GAAG,OAAO,CAAC;YACrB,CAAC;YACD,IAAI,QAAQ,KAAK,SAAS,IAAI,+BAA6B,CAAC,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;gBACxH,QAAQ,GAAG,OAAO,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAC,CAAC;IAC9B,CAAC;IAED,2FAA2F;IACnF,cAAc,CAAC,UAAe;QACpC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC3F,OAAO,UAAU,CAAC,OAAO,CAAC;QAC5B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,UAAU,CAAC,WAAkC,EAAE,WAAmB;QACxE,OAAO,2BAAgB,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,EAAE,qEAA+B,CAAC,gBAAgB,CAAC,CAAC;IAC5H,CAAC;IAEO,OAAO,CAAC,WAAkC,EAAE,WAAmB;;QACrE,OAAO,MAAA,MAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,WAAW,CAAC,0CAAE,IAAI,mCAAI,WAAW,CAAC;IACxE,CAAC;;AAvHU,sEAA6B;AACxC;;;;GAIG;AACqB,oDAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,AAAvD,CAAwD;wCAN3F,6BAA6B;IAFzC,IAAA,qBAAU,GAAE;IACZ,IAAA,qBAAY,EAAC,qCAAgB,CAAC;qCAUK,6CAAoB;GAT3C,6BAA6B,CAwHzC"}
@@ -49,7 +49,7 @@ let CommandArgumentResolver = class CommandArgumentResolver {
49
49
  if (command.optionsType === null) {
50
50
  return rawArgs;
51
51
  }
52
- return this.commandOptionsResolver.resolve(command.optionsType, rawArgs);
52
+ return this.commandOptionsResolver.resolve(command.optionsType, rawArgs, { commandName: command.name });
53
53
  });
54
54
  }
55
55
  };
@@ -1 +1 @@
1
- {"version":3,"file":"command-argument-resolver.js","sourceRoot":"","sources":["../../../../src/services/command-argument-resolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,uCAAoC;AACpC,gDAAiD;AAEjD,8DAAuD;AACvD,yEAAkE;AAElE;;;;;;;;;;GAUG;AAGI,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClC,YACmB,sBAA8C;QAA9C,2BAAsB,GAAtB,sBAAsB,CAAwB;IAEjE,CAAC;IAED;;;;;OAKG;IACG,OAAO,CAAC,OAA8B,EAAE,OAAY;;YACxD,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;gBACjC,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC3E,CAAC;KAAA;CACF,CAAA;AAlBY,0DAAuB;kCAAvB,uBAAuB;IAFnC,IAAA,qBAAU,GAAE;IACZ,IAAA,qBAAY,EAAC,qCAAgB,CAAC;qCAGc,iDAAsB;GAFtD,uBAAuB,CAkBnC"}
1
+ {"version":3,"file":"command-argument-resolver.js","sourceRoot":"","sources":["../../../../src/services/command-argument-resolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,uCAAoC;AACpC,gDAAiD;AAEjD,8DAAuD;AACvD,yEAAkE;AAElE;;;;;;;;;;GAUG;AAGI,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClC,YACmB,sBAA8C;QAA9C,2BAAsB,GAAtB,sBAAsB,CAAwB;IAEjE,CAAC;IAED;;;;;OAKG;IACG,OAAO,CAAC,OAA8B,EAAE,OAAY;;YACxD,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;gBACjC,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,EAAC,WAAW,EAAE,OAAO,CAAC,IAAI,EAAC,CAAC,CAAC;QACxG,CAAC;KAAA;CACF,CAAA;AAlBY,0DAAuB;kCAAvB,uBAAuB;IAFnC,IAAA,qBAAU,GAAE;IACZ,IAAA,qBAAY,EAAC,qCAAgB,CAAC;qCAGc,iDAAsB;GAFtD,uBAAuB,CAkBnC"}
@@ -26,15 +26,17 @@ const data_mapping_1 = require("@pristine-ts/data-mapping");
26
26
  const cli_module_keyname_1 = require("../cli.module.keyname");
27
27
  const cli_error_code_enum_1 = require("../errors/cli-error-code.enum");
28
28
  const command_parameter_prompter_1 = require("./command-parameter-prompter");
29
+ const command_argument_error_formatter_1 = require("./command-argument-error-formatter");
30
+ const program_name_resolver_1 = require("./program-name-resolver");
29
31
  /**
30
32
  * Resolves a typed, validated options instance from raw arguments: it fills any missing
31
- * `@commandParameter` values by prompting, maps the result onto a real `optionsType`
32
- * instance (prototype + decorator metadata intact, so `class-validator` finds its rules),
33
- * and validates it.
33
+ * `@commandParameter` values by prompting, maps the result onto a real `optionsType` instance
34
+ * (prototype + decorator metadata intact, so `class-validator` finds its rules), and validates
35
+ * it.
34
36
  *
35
- * This is the reusable core behind command dispatch — `CommandArgumentResolver` delegates
36
- * here — exposed so commands and dynamic flows can fill an options class from prompts on
37
- * demand, including ones not tied to a registered command:
37
+ * This is the reusable core behind command dispatch — `CommandArgumentResolver` delegates here
38
+ * — exposed so commands and dynamic flows can fill an options class from prompts on demand,
39
+ * including ones not tied to a registered command:
38
40
  *
39
41
  * ```ts
40
42
  * constructor(private readonly optionsResolver: CommandOptionsResolver) {}
@@ -42,22 +44,29 @@ const command_parameter_prompter_1 = require("./command-parameter-prompter");
42
44
  * const options = await this.optionsResolver.resolve(MyOptions, {region: "us"});
43
45
  * ```
44
46
  *
45
- * Throws `UsageError` for mapping failures and `ValidationError` for validation failures —
46
- * both carry structured `details` for `CliErrorReporter`.
47
+ * Argument problems throw a `UsageError` (exit 64): mapping failures directly, and validation
48
+ * failures via `CommandArgumentErrorFormatter`, which renders a clean `Usage:` synopsis (for a
49
+ * missing required value) or `Invalid <flag> '<value>'. …` lines (for a supplied-but-invalid
50
+ * value) rather than a raw constraint dump.
47
51
  */
48
52
  let CommandOptionsResolver = class CommandOptionsResolver {
49
- constructor(validator, dataMapper, commandParameterPrompter) {
53
+ constructor(validator, dataMapper, commandParameterPrompter, argumentErrorFormatter, programNameResolver) {
50
54
  this.validator = validator;
51
55
  this.dataMapper = dataMapper;
52
56
  this.commandParameterPrompter = commandParameterPrompter;
57
+ this.argumentErrorFormatter = argumentErrorFormatter;
58
+ this.programNameResolver = programNameResolver;
53
59
  }
54
60
  /**
55
- * Prompts for any missing parameters declared on `optionsType`, then maps `rawArgs` (plus
56
- * the prompted answers) onto a real instance and validates it. `rawArgs` seeds the values
57
- * already known — anything absent that carries a `question` is asked for interactively.
61
+ * Prompts for any missing parameters declared on `optionsType`, then maps `rawArgs` (plus the
62
+ * prompted answers) onto a real instance and validates it. `rawArgs` seeds the values already
63
+ * known — anything absent that carries a `question` is asked for interactively.
64
+ * `context.commandName` is woven into the `Usage:` line shown when a required value is missing
65
+ * (defaults to a neutral placeholder for direct, command-less callers).
58
66
  */
59
67
  resolve(optionsType_1) {
60
- return __awaiter(this, arguments, void 0, function* (optionsType, rawArgs = {}) {
68
+ return __awaiter(this, arguments, void 0, function* (optionsType, rawArgs = {}, context = {}) {
69
+ var _a;
61
70
  const preparedArgs = yield this.commandParameterPrompter.fillMissingParameters(optionsType, rawArgs);
62
71
  let mapped;
63
72
  try {
@@ -76,29 +85,11 @@ let CommandOptionsResolver = class CommandOptionsResolver {
76
85
  if (validationErrors.length === 0) {
77
86
  return mapped;
78
87
  }
79
- // Reshape the class-validator output into structured `details` the reporter can render
80
- // line-by-line. Keeps the throw single-pass and the reporter format-agnostic.
81
- const failures = {};
82
- for (const error of validationErrors) {
83
- const messages = [];
84
- for (const constraintKey in error.constraints) {
85
- // `@pristine-ts/class-validator` stores constraints as `{keyname, message}` objects
86
- // rather than the plain strings vanilla class-validator uses. Extract the message
87
- // when present, falling back to JSON for unknown shapes so we never print
88
- // `[object Object]`.
89
- const constraint = error.constraints[constraintKey];
90
- const message = typeof constraint === "string"
91
- ? constraint
92
- : (constraint && typeof constraint === "object" && typeof constraint.message === "string")
93
- ? constraint.message
94
- : JSON.stringify(constraint);
95
- messages.push(`[${constraintKey}] ${message}`);
96
- }
97
- failures[error.property] = messages;
98
- }
99
- throw new common_1.ValidationError("Argument validation failed", {
100
- code: cli_error_code_enum_1.CliErrorCode.ArgumentValidationFailed,
101
- details: failures,
88
+ // Hand the raw class-validator output to the formatter, which classifies missing vs invalid
89
+ // and produces a clean, plain-rendered `UsageError` (exit 64).
90
+ throw this.argumentErrorFormatter.buildValidationError(optionsType, mapped, validationErrors, {
91
+ commandName: (_a = context.commandName) !== null && _a !== void 0 ? _a : "<command>",
92
+ binName: this.programNameResolver.resolve(),
102
93
  });
103
94
  });
104
95
  }
@@ -109,6 +100,8 @@ exports.CommandOptionsResolver = CommandOptionsResolver = __decorate([
109
100
  (0, common_1.moduleScoped)(cli_module_keyname_1.CliModuleKeyname),
110
101
  __metadata("design:paramtypes", [class_validator_1.Validator,
111
102
  data_mapping_1.DataMapper,
112
- command_parameter_prompter_1.CommandParameterPrompter])
103
+ command_parameter_prompter_1.CommandParameterPrompter,
104
+ command_argument_error_formatter_1.CommandArgumentErrorFormatter,
105
+ program_name_resolver_1.ProgramNameResolver])
113
106
  ], CommandOptionsResolver);
114
107
  //# sourceMappingURL=command-options-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-options-resolver.js","sourceRoot":"","sources":["../../../../src/services/command-options-resolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,uCAAoC;AAEpC,gDAA8E;AAC9E,kEAAuD;AACvD,4DAAoF;AACpF,8DAAuD;AACvD,uEAA2D;AAC3D,6EAAsE;AAEtE;;;;;;;;;;;;;;;;;;GAkBG;AAGI,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACjC,YACmB,SAAoB,EACpB,UAAsB,EACtB,wBAAkD;QAFlD,cAAS,GAAT,SAAS,CAAW;QACpB,eAAU,GAAV,UAAU,CAAY;QACtB,6BAAwB,GAAxB,wBAAwB,CAA0B;IAErE,CAAC;IAED;;;;OAIG;IACG,OAAO;6DAAI,WAAgC,EAAE,UAA+B,EAAE;YAClF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAErG,IAAI,MAAS,CAAC;YACd,IAAI,CAAC;gBACH,mFAAmF;gBACnF,mFAAmF;gBACnF,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,4CAA6B,CAAC,EAAC,aAAa,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;YAC9H,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,mBAAU,CAClB,+BAA+B,WAAW,CAAC,IAAI,MAAO,KAAe,CAAC,OAAO,EAAE,EAC/E;oBACE,IAAI,EAAE,kCAAY,CAAC,qBAAqB;oBACxC,KAAK,EAAE,KAAc;oBACrB,OAAO,EAAE,EAAC,UAAU,EAAE,WAAW,CAAC,IAAI,EAAC;iBACxC,CACF,CAAC;YACJ,CAAC;YAED,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC/D,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,uFAAuF;YACvF,8EAA8E;YAC9E,MAAM,QAAQ,GAA6B,EAAE,CAAC;YAC9C,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;gBACrC,MAAM,QAAQ,GAAa,EAAE,CAAC;gBAC9B,KAAK,MAAM,aAAa,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;oBAC9C,oFAAoF;oBACpF,kFAAkF;oBAClF,0EAA0E;oBAC1E,qBAAqB;oBACrB,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;oBACpD,MAAM,OAAO,GAAG,OAAO,UAAU,KAAK,QAAQ;wBAC5C,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,OAAQ,UAAkB,CAAC,OAAO,KAAK,QAAQ,CAAC;4BACjG,CAAC,CAAE,UAAkB,CAAC,OAAO;4BAC7B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;oBACjC,QAAQ,CAAC,IAAI,CAAC,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC,CAAC;gBACjD,CAAC;gBACD,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;YACtC,CAAC;YACD,MAAM,IAAI,wBAAe,CAAC,4BAA4B,EAAE;gBACtD,IAAI,EAAE,kCAAY,CAAC,wBAAwB;gBAC3C,OAAO,EAAE,QAAQ;aAClB,CAAC,CAAC;QACL,CAAC;KAAA;CACF,CAAA;AA9DY,wDAAsB;iCAAtB,sBAAsB;IAFlC,IAAA,qBAAU,GAAE;IACZ,IAAA,qBAAY,EAAC,qCAAgB,CAAC;qCAGC,2BAAS;QACR,yBAAU;QACI,qDAAwB;GAJ1D,sBAAsB,CA8DlC"}
1
+ {"version":3,"file":"command-options-resolver.js","sourceRoot":"","sources":["../../../../src/services/command-options-resolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,uCAAoC;AAEpC,gDAA6D;AAC7D,kEAAuD;AACvD,4DAAoF;AACpF,8DAAuD;AACvD,uEAA2D;AAC3D,6EAAsE;AACtE,yFAAiF;AACjF,mEAA4D;AAE5D;;;;;;;;;;;;;;;;;;;;GAoBG;AAGI,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACjC,YACmB,SAAoB,EACpB,UAAsB,EACtB,wBAAkD,EAClD,sBAAqD,EACrD,mBAAwC;QAJxC,cAAS,GAAT,SAAS,CAAW;QACpB,eAAU,GAAV,UAAU,CAAY;QACtB,6BAAwB,GAAxB,wBAAwB,CAA0B;QAClD,2BAAsB,GAAtB,sBAAsB,CAA+B;QACrD,wBAAmB,GAAnB,mBAAmB,CAAqB;IAE3D,CAAC;IAED;;;;;;OAMG;IACG,OAAO;6DAAI,WAAgC,EAAE,UAA+B,EAAE,EAAE,UAAkC,EAAE;;YACxH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAErG,IAAI,MAAS,CAAC;YACd,IAAI,CAAC;gBACH,mFAAmF;gBACnF,mFAAmF;gBACnF,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,4CAA6B,CAAC,EAAC,aAAa,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;YAC9H,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,mBAAU,CAClB,+BAA+B,WAAW,CAAC,IAAI,MAAO,KAAe,CAAC,OAAO,EAAE,EAC/E;oBACE,IAAI,EAAE,kCAAY,CAAC,qBAAqB;oBACxC,KAAK,EAAE,KAAc;oBACrB,OAAO,EAAE,EAAC,UAAU,EAAE,WAAW,CAAC,IAAI,EAAC;iBACxC,CACF,CAAC;YACJ,CAAC;YAED,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC/D,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,4FAA4F;YAC5F,+DAA+D;YAC/D,MAAM,IAAI,CAAC,sBAAsB,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAA6B,EAAE,gBAAgB,EAAE;gBACnH,WAAW,EAAE,MAAA,OAAO,CAAC,WAAW,mCAAI,WAAW;gBAC/C,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;aAC5C,CAAC,CAAC;QACL,CAAC;KAAA;CACF,CAAA;AAhDY,wDAAsB;iCAAtB,sBAAsB;IAFlC,IAAA,qBAAU,GAAE;IACZ,IAAA,qBAAY,EAAC,qCAAgB,CAAC;qCAGC,2BAAS;QACR,yBAAU;QACI,qDAAwB;QAC1B,gEAA6B;QAChC,2CAAmB;GANhD,sBAAsB,CAgDlC"}