@flowscripter/dynamic-cli-framework 1.7.3 → 1.7.5

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 (369) hide show
  1. package/cli-plugin.ts +1 -1
  2. package/dist/cli-plugin.d.ts +1 -1
  3. package/dist/cli-plugin.d.ts.map +1 -1
  4. package/dist/cli-plugin.js +25 -247
  5. package/dist/index.js +70 -105754
  6. package/dist/src/api/BaseCLIFeatureOptions.js +0 -0
  7. package/dist/src/api/CLI.js +0 -0
  8. package/dist/src/api/CLIConfig.js +0 -0
  9. package/dist/src/api/Context.js +0 -0
  10. package/dist/src/api/RunResult.js +73 -0
  11. package/dist/src/api/argument/Argument.js +0 -0
  12. package/dist/src/api/argument/ArgumentValueTypes.js +18 -0
  13. package/dist/src/api/argument/ComplexOption.js +1 -0
  14. package/dist/src/api/argument/GlobalCommandArgument.js +0 -0
  15. package/dist/src/api/argument/Option.js +0 -0
  16. package/dist/src/api/argument/Positional.js +0 -0
  17. package/dist/src/api/argument/SubCommandArgument.js +1 -0
  18. package/dist/src/api/command/Command.js +0 -0
  19. package/dist/src/api/command/GlobalCommand.js +0 -0
  20. package/dist/src/api/command/GlobalModifierCommand.js +0 -0
  21. package/dist/src/api/command/GroupCommand.js +0 -0
  22. package/dist/src/api/command/SubCommand.js +0 -0
  23. package/dist/src/api/command/UsageExample.js +0 -0
  24. package/dist/src/api/plugin/CLIPlugin.js +2 -0
  25. package/dist/src/api/plugin/CommandFactory.js +7 -0
  26. package/dist/src/api/plugin/ServiceProviderFactory.js +7 -0
  27. package/dist/src/api/plugin/createCLIPlugin.js +30 -0
  28. package/dist/src/api/service/ServiceProvider.js +0 -0
  29. package/dist/src/api/service/core/ArgumentPrompterService.js +1 -0
  30. package/dist/src/api/service/core/AsciiBannerGeneratorService.js +1 -0
  31. package/dist/src/api/service/core/CompletionService.js +8 -0
  32. package/dist/src/api/service/core/DataDumpGeneratorService.js +7 -0
  33. package/dist/src/api/service/core/ImagePrinterService.js +1 -0
  34. package/dist/src/api/service/core/KeyValueService.js +7 -0
  35. package/dist/src/api/service/core/PluginService.js +6 -0
  36. package/dist/src/api/service/core/PrettyPrinterService.js +1 -0
  37. package/dist/src/api/service/core/PrinterService.js +42 -0
  38. package/dist/src/api/service/core/PrompterService.js +10 -0
  39. package/dist/src/api/service/core/SecretService.js +0 -0
  40. package/dist/src/api/service/core/ShutdownService.js +1 -0
  41. package/dist/src/api/service/core/SyntaxHighlighterService.js +1 -0
  42. package/dist/src/api/service/core/Table.js +49 -0
  43. package/dist/src/api/service/core/TableGeneratorService.d.ts +1 -0
  44. package/dist/src/api/service/core/TableGeneratorService.d.ts.map +1 -1
  45. package/dist/src/api/service/core/TableGeneratorService.js +7 -0
  46. package/dist/src/api/service/core/TreePrinterService.js +1 -0
  47. package/dist/src/cli/BaseCLI.d.ts.map +1 -1
  48. package/dist/src/cli/BaseCLI.js +232 -0
  49. package/dist/src/cli/DefaultRuntimeCLI.js +20 -0
  50. package/dist/src/cli/DynamicPluginRuntimeCLI.js +50 -0
  51. package/dist/src/command/MultiCommandCliHelpCommand.js +238 -0
  52. package/dist/src/command/SingleCommandCliHelpCommand.js +104 -0
  53. package/dist/src/command/UsageCommand.js +16 -0
  54. package/dist/src/command/VersionCommand.js +13 -0
  55. package/dist/src/launcher.js +61 -0
  56. package/dist/src/runtime/DefaultContext.js +25 -0
  57. package/dist/src/runtime/argument/ArgumentTypeGuards.js +3 -0
  58. package/dist/src/runtime/command/CommandTypeGuards.js +12 -0
  59. package/dist/src/runtime/command/CommandValidator.js +371 -0
  60. package/dist/src/runtime/parser.js +105 -0
  61. package/dist/src/runtime/registry/CommandRegistry.js +0 -0
  62. package/dist/src/runtime/registry/DefaultCommandRegistry.js +190 -0
  63. package/dist/src/runtime/registry/DefaultServiceProviderRegistry.js +20 -0
  64. package/dist/src/runtime/registry/ServiceProviderRegistry.js +0 -0
  65. package/dist/src/runtime/runner.js +507 -0
  66. package/dist/src/runtime/scanner.js +244 -0
  67. package/dist/src/runtime/values/ValuePopulationResult.js +0 -0
  68. package/dist/src/runtime/values/argumentValueMerge.js +122 -0
  69. package/dist/src/runtime/values/argumentValueValidation.js +505 -0
  70. package/dist/src/runtime/values/globalCommandValuePopulation.js +67 -0
  71. package/dist/src/runtime/values/subCommandValuePopulation.js +549 -0
  72. package/dist/src/service/argumentPrompter/ArgumentPrompterServiceProvider.js +19 -0
  73. package/dist/src/service/argumentPrompter/DefaultArgumentPrompterService.js +197 -0
  74. package/dist/src/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.js +28 -0
  75. package/dist/src/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.js +233 -0
  76. package/dist/src/service/asciiBannerGenerator/standard.flf.json +3 -0
  77. package/dist/src/service/banner/BannerServiceProvider.js +60 -0
  78. package/dist/src/service/banner/command/NoBannerCommand.js +24 -0
  79. package/dist/src/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.js +51 -0
  80. package/dist/src/service/chiselAsciiBannerGenerator/chisel.flf.json +3 -0
  81. package/dist/src/service/completion/CompletionServiceProvider.d.ts +2 -1
  82. package/dist/src/service/completion/CompletionServiceProvider.d.ts.map +1 -1
  83. package/dist/src/service/completion/CompletionServiceProvider.js +159 -0
  84. package/dist/src/service/completion/DefaultCompletionService.js +279 -0
  85. package/dist/src/service/completion/command/CompletionCompleteSubCommand.d.ts +15 -0
  86. package/dist/src/service/completion/command/CompletionCompleteSubCommand.d.ts.map +1 -0
  87. package/dist/src/service/completion/command/CompletionCompleteSubCommand.js +37 -0
  88. package/dist/src/service/completion/command/CompletionGroupCommand.d.ts +14 -0
  89. package/dist/src/service/completion/command/CompletionGroupCommand.d.ts.map +1 -0
  90. package/dist/src/service/completion/command/CompletionGroupCommand.js +10 -0
  91. package/dist/src/service/completion/command/CompletionIntegrationSubCommand.d.ts +14 -0
  92. package/dist/src/service/completion/command/CompletionIntegrationSubCommand.d.ts.map +1 -0
  93. package/dist/src/service/completion/command/CompletionIntegrationSubCommand.js +67 -0
  94. package/dist/src/service/completion/shell/ShellHandler.js +0 -0
  95. package/dist/src/service/completion/shell/bash.js +39 -0
  96. package/dist/src/service/completion/shell/fish.js +35 -0
  97. package/dist/src/service/completion/shell/powershell.js +51 -0
  98. package/dist/src/service/completion/shell/zsh.js +42 -0
  99. package/dist/src/service/configuration/ConfigurationServiceProvider.js +482 -0
  100. package/dist/src/service/configuration/DefaultKeyValueService.js +80 -0
  101. package/dist/src/service/configuration/DefaultSecretService.js +60 -0
  102. package/dist/src/service/configuration/command/ConfigCommand.js +24 -0
  103. package/dist/src/service/configuration/command/DumpConfigCommand.js +18 -0
  104. package/dist/src/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.js +24 -0
  105. package/dist/src/service/dataDumpGenerator/DefaultDataDumpGeneratorService.js +59 -0
  106. package/dist/src/service/imagePrinter/DefaultImagePrinterService.js +10 -0
  107. package/dist/src/service/imagePrinter/ImagePrinterServiceProvider.js +20 -0
  108. package/dist/src/service/plugin/DefaultPluginService.js +21 -0
  109. package/dist/src/service/plugin/DefaultPluginServiceProvider.d.ts +1 -1
  110. package/dist/src/service/plugin/DefaultPluginServiceProvider.d.ts.map +1 -1
  111. package/dist/src/service/plugin/DefaultPluginServiceProvider.js +21 -0
  112. package/dist/src/service/plugin/command/PluginAddSubCommand.d.ts +17 -0
  113. package/dist/src/service/plugin/command/PluginAddSubCommand.d.ts.map +1 -0
  114. package/dist/src/service/plugin/command/PluginAddSubCommand.js +49 -0
  115. package/dist/src/service/plugin/command/PluginGroupCommand.d.ts +12 -0
  116. package/dist/src/service/plugin/command/PluginGroupCommand.d.ts.map +1 -0
  117. package/dist/src/service/plugin/command/PluginGroupCommand.js +21 -0
  118. package/dist/src/service/plugin/command/PluginListSubCommand.d.ts +12 -0
  119. package/dist/src/service/plugin/command/PluginListSubCommand.d.ts.map +1 -0
  120. package/dist/src/service/plugin/command/PluginListSubCommand.js +25 -0
  121. package/dist/src/service/plugin/command/PluginRemoveSubCommand.d.ts +17 -0
  122. package/dist/src/service/plugin/command/PluginRemoveSubCommand.d.ts.map +1 -0
  123. package/dist/src/service/plugin/command/PluginRemoveSubCommand.js +24 -0
  124. package/dist/src/service/plugin/command/PluginSearchSubCommand.d.ts +18 -0
  125. package/dist/src/service/plugin/command/PluginSearchSubCommand.d.ts.map +1 -0
  126. package/dist/src/service/plugin/command/PluginSearchSubCommand.js +34 -0
  127. package/dist/src/service/plugin/command/PluginUpgradeSubCommand.d.ts +12 -0
  128. package/dist/src/service/plugin/command/PluginUpgradeSubCommand.d.ts.map +1 -0
  129. package/dist/src/service/plugin/command/PluginUpgradeSubCommand.js +25 -0
  130. package/dist/src/service/plugin/command/getPluginId.d.ts +3 -0
  131. package/dist/src/service/plugin/command/getPluginId.d.ts.map +1 -0
  132. package/dist/src/service/plugin/command/getPluginId.js +3 -0
  133. package/dist/src/service/prettyPrinter/DefaultPrettyPrinterService.js +45 -0
  134. package/dist/src/service/prettyPrinter/PrettyPrinterServiceProvider.js +28 -0
  135. package/dist/src/service/printer/DefaultPrinterService.js +250 -0
  136. package/dist/src/service/printer/PrinterServiceProvider.js +43 -0
  137. package/dist/src/service/printer/command/DarkModeCommand.js +24 -0
  138. package/dist/src/service/printer/command/LogLevelCommand.js +41 -0
  139. package/dist/src/service/printer/command/NoColorCommand.js +24 -0
  140. package/dist/src/service/printer/command/NoHyperlinksCommand.js +21 -0
  141. package/dist/src/service/printer/terminal/Color.js +15 -0
  142. package/dist/src/service/printer/terminal/Progress.js +271 -0
  143. package/dist/src/service/printer/terminal/Spinner.js +83 -0
  144. package/dist/src/service/printer/terminal/Theme.js +26 -0
  145. package/dist/src/service/prompter/DefaultPrompterService.js +52 -0
  146. package/dist/src/service/prompter/PrompterServiceProvider.js +20 -0
  147. package/dist/src/service/prompter/command/NoPromptCommand.js +21 -0
  148. package/dist/src/service/prompter/prompt/PromptContext.js +22 -0
  149. package/dist/src/service/prompter/prompt/promptAcknowledge.js +19 -0
  150. package/dist/src/service/prompter/prompt/promptMultiSelect.js +74 -0
  151. package/dist/src/service/prompter/prompt/promptOpenUrl.js +70 -0
  152. package/dist/src/service/prompter/prompt/promptSingleSelect.js +73 -0
  153. package/dist/src/service/prompter/prompt/promptText.js +75 -0
  154. package/dist/src/service/prompter/prompt/promptToggle.js +21 -0
  155. package/dist/src/service/shutdown/DefaultShutdownService.js +16 -0
  156. package/dist/src/service/shutdown/ShutdownServiceProvider.js +60 -0
  157. package/dist/src/service/shutdown/ShutdownState.js +5 -0
  158. package/dist/src/service/syntaxHighlighter/DefaultSyntaxHighlighterService.js +54 -0
  159. package/dist/src/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.js +32 -0
  160. package/dist/src/service/tableGenerator/DefaultTableGeneratorService.d.ts +3 -1
  161. package/dist/src/service/tableGenerator/DefaultTableGeneratorService.d.ts.map +1 -1
  162. package/dist/src/service/tableGenerator/DefaultTableGeneratorService.js +344 -0
  163. package/dist/src/service/tableGenerator/TableGeneratorServiceProvider.js +26 -0
  164. package/dist/src/service/treePrinter/DefaultTreePrinterService.js +35 -0
  165. package/dist/src/service/treePrinter/TreePrinterServiceProvider.js +24 -0
  166. package/dist/src/terminal/Ansi.js +23 -0
  167. package/dist/src/terminal/ImageRenderer.d.ts.map +1 -1
  168. package/dist/src/terminal/ImageRenderer.js +166 -0
  169. package/dist/src/terminal/KeyReader.js +13 -0
  170. package/dist/src/terminal/PngDecoder.js +115 -0
  171. package/dist/src/terminal/Styler.js +0 -0
  172. package/dist/src/terminal/Terminal.js +0 -0
  173. package/dist/src/terminal/TtyKeyReader.js +87 -0
  174. package/dist/src/terminal/TtyStyler.js +55 -0
  175. package/dist/src/terminal/TtyTerminal.js +52 -0
  176. package/dist/src/terminal/supportsHyperlinks.js +95 -0
  177. package/dist/src/util/configHelper.js +61 -0
  178. package/dist/src/util/envVarHelper.js +216 -0
  179. package/dist/src/util/helpHelper.d.ts.map +1 -1
  180. package/dist/src/util/helpHelper.js +497 -0
  181. package/dist/src/util/logger.js +81 -0
  182. package/dist/src/util/runnerHelper.js +80 -0
  183. package/package.json +2 -2
  184. package/src/api/service/core/TableGeneratorService.ts +1 -0
  185. package/src/cli/BaseCLI.ts +4 -19
  186. package/src/service/completion/CompletionServiceProvider.ts +16 -3
  187. package/src/service/completion/command/CompletionCompleteSubCommand.ts +59 -0
  188. package/src/service/completion/command/CompletionGroupCommand.ts +21 -0
  189. package/src/{command/CompletionCommand.ts → service/completion/command/CompletionIntegrationSubCommand.ts} +12 -73
  190. package/src/service/completion/shell/bash.ts +1 -1
  191. package/src/service/completion/shell/fish.ts +1 -1
  192. package/src/service/completion/shell/powershell.ts +1 -1
  193. package/src/service/completion/shell/zsh.ts +1 -1
  194. package/src/service/plugin/DefaultPluginServiceProvider.ts +2 -2
  195. package/src/service/plugin/command/PluginAddSubCommand.ts +64 -0
  196. package/src/service/plugin/command/PluginGroupCommand.ts +27 -0
  197. package/src/service/plugin/command/PluginListSubCommand.ts +33 -0
  198. package/src/service/plugin/command/PluginRemoveSubCommand.ts +32 -0
  199. package/src/service/plugin/command/PluginSearchSubCommand.ts +42 -0
  200. package/src/service/plugin/command/PluginUpgradeSubCommand.ts +36 -0
  201. package/src/service/plugin/command/getPluginId.ts +5 -0
  202. package/src/service/tableGenerator/DefaultTableGeneratorService.ts +6 -1
  203. package/src/terminal/ImageRenderer.ts +7 -5
  204. package/src/util/helpHelper.ts +1 -2
  205. package/dist/src/command/CompletionCommand.d.ts +0 -32
  206. package/dist/src/command/CompletionCommand.d.ts.map +0 -1
  207. package/dist/src/command/PluginCommand.d.ts +0 -67
  208. package/dist/src/command/PluginCommand.d.ts.map +0 -1
  209. package/dist/tests/cli/BaseCLI.test.d.ts +0 -2
  210. package/dist/tests/cli/BaseCLI.test.d.ts.map +0 -1
  211. package/dist/tests/cli/DynamicPluginRuntimeCLI.test.d.ts +0 -2
  212. package/dist/tests/cli/DynamicPluginRuntimeCLI.test.d.ts.map +0 -1
  213. package/dist/tests/command/CompletionCommand.test.d.ts +0 -2
  214. package/dist/tests/command/CompletionCommand.test.d.ts.map +0 -1
  215. package/dist/tests/command/MultiCommandCliHelpCommand.test.d.ts +0 -2
  216. package/dist/tests/command/MultiCommandCliHelpCommand.test.d.ts.map +0 -1
  217. package/dist/tests/command/PluginCommand.test.d.ts +0 -2
  218. package/dist/tests/command/PluginCommand.test.d.ts.map +0 -1
  219. package/dist/tests/command/SingleCommandCliHelpCommand.test.d.ts +0 -2
  220. package/dist/tests/command/SingleCommandCliHelpCommand.test.d.ts.map +0 -1
  221. package/dist/tests/command/UsageCommand.test.d.ts +0 -2
  222. package/dist/tests/command/UsageCommand.test.d.ts.map +0 -1
  223. package/dist/tests/command/VersionCommand.test.d.ts +0 -2
  224. package/dist/tests/command/VersionCommand.test.d.ts.map +0 -1
  225. package/dist/tests/fixtures/CLIConfig.d.ts +0 -3
  226. package/dist/tests/fixtures/CLIConfig.d.ts.map +0 -1
  227. package/dist/tests/fixtures/Command.d.ts +0 -20
  228. package/dist/tests/fixtures/Command.d.ts.map +0 -1
  229. package/dist/tests/fixtures/CommandRegistry.d.ts +0 -4
  230. package/dist/tests/fixtures/CommandRegistry.d.ts.map +0 -1
  231. package/dist/tests/fixtures/ConfigurationServiceProvider.d.ts +0 -10
  232. package/dist/tests/fixtures/ConfigurationServiceProvider.d.ts.map +0 -1
  233. package/dist/tests/fixtures/Context.d.ts +0 -4
  234. package/dist/tests/fixtures/Context.d.ts.map +0 -1
  235. package/dist/tests/fixtures/ServiceProviderRegistry.d.ts +0 -4
  236. package/dist/tests/fixtures/ServiceProviderRegistry.d.ts.map +0 -1
  237. package/dist/tests/fixtures/StreamString.d.ts +0 -10
  238. package/dist/tests/fixtures/StreamString.d.ts.map +0 -1
  239. package/dist/tests/fixtures/prettierPluginFoo.d.ts +0 -4
  240. package/dist/tests/fixtures/prettierPluginFoo.d.ts.map +0 -1
  241. package/dist/tests/fixtures/util.d.ts +0 -8
  242. package/dist/tests/fixtures/util.d.ts.map +0 -1
  243. package/dist/tests/runtime/DefaultContext.test.d.ts +0 -2
  244. package/dist/tests/runtime/DefaultContext.test.d.ts.map +0 -1
  245. package/dist/tests/runtime/argument/ArgumentTypeGuards.test.d.ts +0 -2
  246. package/dist/tests/runtime/argument/ArgumentTypeGuards.test.d.ts.map +0 -1
  247. package/dist/tests/runtime/command/CommandTypeGuards.test.d.ts +0 -2
  248. package/dist/tests/runtime/command/CommandTypeGuards.test.d.ts.map +0 -1
  249. package/dist/tests/runtime/command/CommandValidator.test.d.ts +0 -2
  250. package/dist/tests/runtime/command/CommandValidator.test.d.ts.map +0 -1
  251. package/dist/tests/runtime/parser.test.d.ts +0 -2
  252. package/dist/tests/runtime/parser.test.d.ts.map +0 -1
  253. package/dist/tests/runtime/registry/DefaultCommandRegistry.test.d.ts +0 -2
  254. package/dist/tests/runtime/registry/DefaultCommandRegistry.test.d.ts.map +0 -1
  255. package/dist/tests/runtime/registry/DefaultServiceProviderRegistry.test.d.ts +0 -2
  256. package/dist/tests/runtime/registry/DefaultServiceProviderRegistry.test.d.ts.map +0 -1
  257. package/dist/tests/runtime/runner.test.d.ts +0 -2
  258. package/dist/tests/runtime/runner.test.d.ts.map +0 -1
  259. package/dist/tests/runtime/scanner.test.d.ts +0 -2
  260. package/dist/tests/runtime/scanner.test.d.ts.map +0 -1
  261. package/dist/tests/runtime/values/argumentValueMerge.test.d.ts +0 -2
  262. package/dist/tests/runtime/values/argumentValueMerge.test.d.ts.map +0 -1
  263. package/dist/tests/runtime/values/argumentValueValidation.test.d.ts +0 -2
  264. package/dist/tests/runtime/values/argumentValueValidation.test.d.ts.map +0 -1
  265. package/dist/tests/runtime/values/globalCommandValuePopulation.test.d.ts +0 -2
  266. package/dist/tests/runtime/values/globalCommandValuePopulation.test.d.ts.map +0 -1
  267. package/dist/tests/runtime/values/subCommandValuePopulation.test.d.ts +0 -2
  268. package/dist/tests/runtime/values/subCommandValuePopulation.test.d.ts.map +0 -1
  269. package/dist/tests/service/argumentPrompter/ArgumentPrompterServiceProvider.test.d.ts +0 -2
  270. package/dist/tests/service/argumentPrompter/ArgumentPrompterServiceProvider.test.d.ts.map +0 -1
  271. package/dist/tests/service/argumentPrompter/DefaultArgumentPrompterService.test.d.ts +0 -2
  272. package/dist/tests/service/argumentPrompter/DefaultArgumentPrompterService.test.d.ts.map +0 -1
  273. package/dist/tests/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.test.d.ts +0 -2
  274. package/dist/tests/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.test.d.ts.map +0 -1
  275. package/dist/tests/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.test.d.ts +0 -2
  276. package/dist/tests/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.test.d.ts.map +0 -1
  277. package/dist/tests/service/banner/BannerServiceProvider.test.d.ts +0 -2
  278. package/dist/tests/service/banner/BannerServiceProvider.test.d.ts.map +0 -1
  279. package/dist/tests/service/banner/command/NoBannerCommand.test.d.ts +0 -2
  280. package/dist/tests/service/banner/command/NoBannerCommand.test.d.ts.map +0 -1
  281. package/dist/tests/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.test.d.ts +0 -2
  282. package/dist/tests/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.test.d.ts.map +0 -1
  283. package/dist/tests/service/completion/CompletionServiceProvider.test.d.ts +0 -2
  284. package/dist/tests/service/completion/CompletionServiceProvider.test.d.ts.map +0 -1
  285. package/dist/tests/service/completion/DefaultCompletionService.test.d.ts +0 -2
  286. package/dist/tests/service/completion/DefaultCompletionService.test.d.ts.map +0 -1
  287. package/dist/tests/service/completion/shell/bash.test.d.ts +0 -2
  288. package/dist/tests/service/completion/shell/bash.test.d.ts.map +0 -1
  289. package/dist/tests/service/completion/shell/fish.test.d.ts +0 -2
  290. package/dist/tests/service/completion/shell/fish.test.d.ts.map +0 -1
  291. package/dist/tests/service/completion/shell/powershell.test.d.ts +0 -2
  292. package/dist/tests/service/completion/shell/powershell.test.d.ts.map +0 -1
  293. package/dist/tests/service/completion/shell/zsh.test.d.ts +0 -2
  294. package/dist/tests/service/completion/shell/zsh.test.d.ts.map +0 -1
  295. package/dist/tests/service/configuration/ConfigurationServiceProvider.test.d.ts +0 -2
  296. package/dist/tests/service/configuration/ConfigurationServiceProvider.test.d.ts.map +0 -1
  297. package/dist/tests/service/configuration/DefaultKeyValueService.test.d.ts +0 -2
  298. package/dist/tests/service/configuration/DefaultKeyValueService.test.d.ts.map +0 -1
  299. package/dist/tests/service/configuration/DefaultSecretService.test.d.ts +0 -2
  300. package/dist/tests/service/configuration/DefaultSecretService.test.d.ts.map +0 -1
  301. package/dist/tests/service/configuration/command/ConfigCommand.test.d.ts +0 -2
  302. package/dist/tests/service/configuration/command/ConfigCommand.test.d.ts.map +0 -1
  303. package/dist/tests/service/configuration/command/DumpConfigCommand.test.d.ts +0 -2
  304. package/dist/tests/service/configuration/command/DumpConfigCommand.test.d.ts.map +0 -1
  305. package/dist/tests/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.test.d.ts +0 -2
  306. package/dist/tests/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.test.d.ts.map +0 -1
  307. package/dist/tests/service/dataDumpGenerator/DefaultDataDumpGeneratorService.test.d.ts +0 -2
  308. package/dist/tests/service/dataDumpGenerator/DefaultDataDumpGeneratorService.test.d.ts.map +0 -1
  309. package/dist/tests/service/imagePrinter/DefaultImagePrinterService.test.d.ts +0 -2
  310. package/dist/tests/service/imagePrinter/DefaultImagePrinterService.test.d.ts.map +0 -1
  311. package/dist/tests/service/imagePrinter/ImagePrinterServiceProvider.test.d.ts +0 -2
  312. package/dist/tests/service/imagePrinter/ImagePrinterServiceProvider.test.d.ts.map +0 -1
  313. package/dist/tests/service/plugin/DefaultPluginServiceProvider.test.d.ts +0 -2
  314. package/dist/tests/service/plugin/DefaultPluginServiceProvider.test.d.ts.map +0 -1
  315. package/dist/tests/service/prettyPrinter/DefaultPrettyPrinterService.test.d.ts +0 -2
  316. package/dist/tests/service/prettyPrinter/DefaultPrettyPrinterService.test.d.ts.map +0 -1
  317. package/dist/tests/service/prettyPrinter/PrettyPrinterServiceProvider.test.d.ts +0 -2
  318. package/dist/tests/service/prettyPrinter/PrettyPrinterServiceProvider.test.d.ts.map +0 -1
  319. package/dist/tests/service/printer/DefaultPrinterService.test.d.ts +0 -2
  320. package/dist/tests/service/printer/DefaultPrinterService.test.d.ts.map +0 -1
  321. package/dist/tests/service/printer/PrinterServiceProvider.test.d.ts +0 -2
  322. package/dist/tests/service/printer/PrinterServiceProvider.test.d.ts.map +0 -1
  323. package/dist/tests/service/printer/command/DarkModeCommand.test.d.ts +0 -2
  324. package/dist/tests/service/printer/command/DarkModeCommand.test.d.ts.map +0 -1
  325. package/dist/tests/service/printer/command/LogLevelCommand.test.d.ts +0 -2
  326. package/dist/tests/service/printer/command/LogLevelCommand.test.d.ts.map +0 -1
  327. package/dist/tests/service/printer/command/NoColorCommand.test.d.ts +0 -2
  328. package/dist/tests/service/printer/command/NoColorCommand.test.d.ts.map +0 -1
  329. package/dist/tests/service/printer/command/NoHyperlinksCommand.test.d.ts +0 -2
  330. package/dist/tests/service/printer/command/NoHyperlinksCommand.test.d.ts.map +0 -1
  331. package/dist/tests/service/printer/terminal/Progress.test.d.ts +0 -2
  332. package/dist/tests/service/printer/terminal/Progress.test.d.ts.map +0 -1
  333. package/dist/tests/service/printer/terminal/Spinner.test.d.ts +0 -2
  334. package/dist/tests/service/printer/terminal/Spinner.test.d.ts.map +0 -1
  335. package/dist/tests/service/prompter/DefaultPrompterService.test.d.ts +0 -2
  336. package/dist/tests/service/prompter/DefaultPrompterService.test.d.ts.map +0 -1
  337. package/dist/tests/service/prompter/PrompterServiceProvider.test.d.ts +0 -2
  338. package/dist/tests/service/prompter/PrompterServiceProvider.test.d.ts.map +0 -1
  339. package/dist/tests/service/prompter/command/NoPromptCommand.test.d.ts +0 -2
  340. package/dist/tests/service/prompter/command/NoPromptCommand.test.d.ts.map +0 -1
  341. package/dist/tests/service/prompter/prompt/PromptContext.test.d.ts +0 -2
  342. package/dist/tests/service/prompter/prompt/PromptContext.test.d.ts.map +0 -1
  343. package/dist/tests/service/shutdown/ShutdownServiceProvider.test.d.ts +0 -2
  344. package/dist/tests/service/shutdown/ShutdownServiceProvider.test.d.ts.map +0 -1
  345. package/dist/tests/service/syntaxHighlighter/DefaultSyntaxHighlighterService.test.d.ts +0 -2
  346. package/dist/tests/service/syntaxHighlighter/DefaultSyntaxHighlighterService.test.d.ts.map +0 -1
  347. package/dist/tests/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.test.d.ts +0 -2
  348. package/dist/tests/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.test.d.ts.map +0 -1
  349. package/dist/tests/service/tableGenerator/DefaultTableGeneratorService.test.d.ts +0 -2
  350. package/dist/tests/service/tableGenerator/DefaultTableGeneratorService.test.d.ts.map +0 -1
  351. package/dist/tests/service/tableGenerator/TableGeneratorServiceProvider.test.d.ts +0 -2
  352. package/dist/tests/service/tableGenerator/TableGeneratorServiceProvider.test.d.ts.map +0 -1
  353. package/dist/tests/service/treePrinter/DefaultTreePrinterService.test.d.ts +0 -2
  354. package/dist/tests/service/treePrinter/DefaultTreePrinterService.test.d.ts.map +0 -1
  355. package/dist/tests/service/treePrinter/TreePrinterServiceProvider.test.d.ts +0 -2
  356. package/dist/tests/service/treePrinter/TreePrinterServiceProvider.test.d.ts.map +0 -1
  357. package/dist/tests/terminal/ImageRenderer.test.d.ts +0 -2
  358. package/dist/tests/terminal/ImageRenderer.test.d.ts.map +0 -1
  359. package/dist/tests/terminal/PngDecoder.test.d.ts +0 -2
  360. package/dist/tests/terminal/PngDecoder.test.d.ts.map +0 -1
  361. package/dist/tests/terminal/supportsHyperlinks.test.d.ts +0 -2
  362. package/dist/tests/terminal/supportsHyperlinks.test.d.ts.map +0 -1
  363. package/dist/tests/util/configHelper.test.d.ts +0 -2
  364. package/dist/tests/util/configHelper.test.d.ts.map +0 -1
  365. package/dist/tests/util/envVarHelper.test.d.ts +0 -2
  366. package/dist/tests/util/envVarHelper.test.d.ts.map +0 -1
  367. package/dist/tests/util/logger.test.d.ts +0 -2
  368. package/dist/tests/util/logger.test.d.ts.map +0 -1
  369. package/src/command/PluginCommand.ts +0 -197
@@ -0,0 +1,505 @@
1
+ import { ArgumentValueTypeName, ComplexValueTypeName, } from "../../api/argument/ArgumentValueTypes.js";
2
+ import { isComplexOption } from "../argument/ArgumentTypeGuards.js";
3
+ import { InvalidArgumentReason } from "../../api/RunResult.js";
4
+ /**
5
+ * Validates the provided primitive value against the provided {@link Argument}.
6
+ *
7
+ * @param argument the {@link Argument} to validate against.
8
+ * @param value the value (if any) for the {@link Argument}.
9
+ */
10
+ function validatePrimitiveValue(argument, value) {
11
+ let convertedValue;
12
+ if (value === undefined) {
13
+ return {
14
+ invalidArgument: {
15
+ argument,
16
+ reason: InvalidArgumentReason.MISSING_VALUE,
17
+ },
18
+ };
19
+ }
20
+ // type check and conversion
21
+ let castValue;
22
+ switch (argument.type) {
23
+ case ArgumentValueTypeName.BOOLEAN:
24
+ if (value === true || value === false) {
25
+ convertedValue = value;
26
+ break;
27
+ }
28
+ if (typeof value === "string") {
29
+ castValue = value;
30
+ castValue = castValue.toLowerCase();
31
+ }
32
+ if (castValue !== "true" && castValue !== "false") {
33
+ return {
34
+ invalidArgument: {
35
+ argument,
36
+ value,
37
+ reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
38
+ },
39
+ };
40
+ }
41
+ convertedValue = castValue === "true";
42
+ break;
43
+ case ArgumentValueTypeName.INTEGER:
44
+ if (!Number.isInteger(Number(value))) {
45
+ return {
46
+ invalidArgument: {
47
+ argument,
48
+ value,
49
+ reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
50
+ },
51
+ };
52
+ }
53
+ convertedValue = Number(value);
54
+ break;
55
+ case ArgumentValueTypeName.NUMBER:
56
+ if (!Number.isFinite(Number(value))) {
57
+ return {
58
+ invalidArgument: {
59
+ argument,
60
+ value,
61
+ reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
62
+ },
63
+ };
64
+ }
65
+ convertedValue = Number(value);
66
+ break;
67
+ case ArgumentValueTypeName.STRING:
68
+ default:
69
+ convertedValue = String(value);
70
+ break;
71
+ }
72
+ // check if the value is valid
73
+ if (argument.allowableValues) {
74
+ let searchValue = convertedValue;
75
+ let allowableValues = argument.allowableValues;
76
+ if (argument.type === ArgumentValueTypeName.STRING && argument.isCaseInsensitive) {
77
+ searchValue = convertedValue.toLowerCase();
78
+ allowableValues = argument.allowableValues.map((v) => v.toLowerCase());
79
+ }
80
+ if (!allowableValues.includes(searchValue)) {
81
+ return {
82
+ invalidArgument: {
83
+ argument,
84
+ value,
85
+ reason: InvalidArgumentReason.ILLEGAL_VALUE,
86
+ },
87
+ };
88
+ }
89
+ }
90
+ if (argument.minValueInclusive !== undefined) {
91
+ if (convertedValue < argument.minValueInclusive) {
92
+ return {
93
+ invalidArgument: {
94
+ argument,
95
+ value,
96
+ reason: InvalidArgumentReason.ILLEGAL_VALUE,
97
+ },
98
+ };
99
+ }
100
+ }
101
+ if (argument.maxValueInclusive !== undefined) {
102
+ if (convertedValue > argument.maxValueInclusive) {
103
+ return {
104
+ invalidArgument: {
105
+ argument,
106
+ value,
107
+ reason: InvalidArgumentReason.ILLEGAL_VALUE,
108
+ },
109
+ };
110
+ }
111
+ }
112
+ return { validValue: convertedValue };
113
+ }
114
+ function validateArrayValue(subCommandArgument, arrayValue) {
115
+ const convertedArrayValue = [];
116
+ for (let i = 0; i < arrayValue.length; i += 1) {
117
+ const singleValue = arrayValue[i];
118
+ if (singleValue === undefined) {
119
+ return {
120
+ validValue: convertedArrayValue,
121
+ invalidArgument: {
122
+ argument: subCommandArgument,
123
+ name: `[${i}]`,
124
+ reason: InvalidArgumentReason.ILLEGAL_SPARSE_ARRAY,
125
+ },
126
+ };
127
+ }
128
+ let validationResult;
129
+ if (Array.isArray(singleValue)) {
130
+ throw new Error(`Unexpected array value as array member, arrays of arrays are not supported. Argument: ${subCommandArgument.name}[${i}]`);
131
+ }
132
+ else if (typeof singleValue === "object") {
133
+ if (subCommandArgument.type !== ComplexValueTypeName.COMPLEX) {
134
+ return {
135
+ validValue: convertedArrayValue,
136
+ invalidArgument: {
137
+ argument: subCommandArgument,
138
+ name: `[${i}]`,
139
+ value: arrayValue,
140
+ reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
141
+ },
142
+ };
143
+ }
144
+ validationResult = validateObjectValue(subCommandArgument, singleValue);
145
+ } // if not array and not object, then must be primitive
146
+ else {
147
+ if (isComplexOption(subCommandArgument)) {
148
+ return {
149
+ validValue: convertedArrayValue,
150
+ invalidArgument: {
151
+ argument: subCommandArgument,
152
+ name: `[${i}]`,
153
+ value: arrayValue,
154
+ reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
155
+ },
156
+ };
157
+ }
158
+ validationResult = validatePrimitiveValue(subCommandArgument, singleValue);
159
+ }
160
+ if (validationResult.validValue !== undefined) {
161
+ convertedArrayValue.push(validationResult.validValue);
162
+ }
163
+ if (validationResult.invalidArgument) {
164
+ // fast fail
165
+ if (validationResult.invalidArgument.value !== undefined) {
166
+ return {
167
+ validValue: convertedArrayValue,
168
+ invalidArgument: {
169
+ argument: validationResult.invalidArgument.argument,
170
+ name: `[${i}]${validationResult.invalidArgument.name ? validationResult.invalidArgument.name : ""}`,
171
+ value: validationResult.invalidArgument.value,
172
+ reason: validationResult.invalidArgument.reason,
173
+ },
174
+ };
175
+ }
176
+ else {
177
+ return {
178
+ validValue: convertedArrayValue,
179
+ invalidArgument: {
180
+ argument: validationResult.invalidArgument.argument,
181
+ name: `[${i}]${validationResult.invalidArgument.name ? validationResult.invalidArgument.name : ""}`,
182
+ reason: validationResult.invalidArgument.reason,
183
+ },
184
+ };
185
+ }
186
+ }
187
+ }
188
+ return {
189
+ validValue: convertedArrayValue,
190
+ };
191
+ }
192
+ function validateObjectValue(argument, objectValue) {
193
+ const convertedObjectValue = {};
194
+ for (let i = 0; i < argument.properties.length; i++) {
195
+ const propertyArg = argument.properties[i];
196
+ const propertyValue = objectValue[propertyArg.name];
197
+ if (propertyValue === undefined) {
198
+ return {
199
+ validValue: convertedObjectValue,
200
+ invalidArgument: {
201
+ argument: propertyArg,
202
+ name: `.${propertyArg.name}`,
203
+ reason: InvalidArgumentReason.MISSING_VALUE,
204
+ },
205
+ };
206
+ }
207
+ let validationResult;
208
+ if (Array.isArray(propertyValue)) {
209
+ if (!propertyArg.isArray) {
210
+ return {
211
+ validValue: convertedObjectValue,
212
+ invalidArgument: {
213
+ argument: propertyArg,
214
+ name: `.${propertyArg.name}`,
215
+ value: propertyValue,
216
+ reason: InvalidArgumentReason.ILLEGAL_MULTIPLE_VALUES,
217
+ },
218
+ };
219
+ }
220
+ validationResult = validateArrayValue(propertyArg, propertyValue);
221
+ }
222
+ else if (typeof propertyValue === "object") {
223
+ if (propertyArg.type !== ComplexValueTypeName.COMPLEX) {
224
+ return {
225
+ validValue: convertedObjectValue,
226
+ invalidArgument: {
227
+ argument: propertyArg,
228
+ name: `.${propertyArg.name}`,
229
+ value: propertyValue,
230
+ reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
231
+ },
232
+ };
233
+ }
234
+ validationResult = validateObjectValue(propertyArg, propertyValue);
235
+ } // if not array and not object, then must be primitive
236
+ else {
237
+ if (isComplexOption(propertyArg)) {
238
+ return {
239
+ validValue: convertedObjectValue,
240
+ invalidArgument: {
241
+ argument: propertyArg,
242
+ name: `.${propertyArg.name}`,
243
+ value: propertyValue,
244
+ reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
245
+ },
246
+ };
247
+ }
248
+ validationResult = validatePrimitiveValue(propertyArg, propertyValue);
249
+ }
250
+ if (validationResult.validValue !== undefined) {
251
+ convertedObjectValue[propertyArg.name] = validationResult.validValue;
252
+ }
253
+ // fast fail
254
+ if (validationResult.invalidArgument !== undefined) {
255
+ if (validationResult.invalidArgument.value !== undefined) {
256
+ return {
257
+ validValue: convertedObjectValue,
258
+ invalidArgument: {
259
+ argument: validationResult.invalidArgument.argument,
260
+ name: `.${propertyArg.name}${validationResult.invalidArgument.name ? validationResult.invalidArgument.name : ""}`,
261
+ value: validationResult.invalidArgument.value,
262
+ reason: validationResult.invalidArgument.reason,
263
+ },
264
+ };
265
+ }
266
+ else {
267
+ return {
268
+ validValue: convertedObjectValue,
269
+ invalidArgument: {
270
+ argument: validationResult.invalidArgument.argument,
271
+ name: `.${propertyArg.name}${validationResult.invalidArgument.name ? validationResult.invalidArgument.name : ""}`,
272
+ reason: validationResult.invalidArgument.reason,
273
+ },
274
+ };
275
+ }
276
+ }
277
+ }
278
+ return {
279
+ validValue: convertedObjectValue,
280
+ };
281
+ }
282
+ function doSubCommandArgumentValidation(argument, value, isArray, isOptional, invalidArguments) {
283
+ // if there is a value, check if it is valid
284
+ if (value !== undefined) {
285
+ let validationResult;
286
+ if (Array.isArray(value)) {
287
+ if (!isArray) {
288
+ invalidArguments.push({
289
+ argument,
290
+ name: argument.name,
291
+ value,
292
+ reason: InvalidArgumentReason.ILLEGAL_MULTIPLE_VALUES,
293
+ });
294
+ return undefined;
295
+ }
296
+ validationResult = validateArrayValue(argument, value);
297
+ }
298
+ else if (typeof value === "object") {
299
+ if (!isComplexOption(argument)) {
300
+ invalidArguments.push({
301
+ argument,
302
+ name: argument.name,
303
+ value,
304
+ reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
305
+ });
306
+ return undefined;
307
+ }
308
+ validationResult = validateObjectValue(argument, value);
309
+ }
310
+ else {
311
+ if (isComplexOption(argument)) {
312
+ invalidArguments.push({
313
+ argument,
314
+ name: argument.name,
315
+ value,
316
+ reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
317
+ });
318
+ return undefined;
319
+ }
320
+ validationResult = validatePrimitiveValue(argument, value);
321
+ }
322
+ if (validationResult.invalidArgument !== undefined) {
323
+ if (validationResult.invalidArgument.value !== undefined) {
324
+ validationResult.invalidArgument = {
325
+ argument: validationResult.invalidArgument.argument,
326
+ name: `${argument.name}${validationResult.invalidArgument.name ? validationResult.invalidArgument.name : ""}`,
327
+ value: validationResult.invalidArgument.value,
328
+ reason: validationResult.invalidArgument.reason,
329
+ };
330
+ }
331
+ else {
332
+ validationResult.invalidArgument = {
333
+ argument: validationResult.invalidArgument.argument,
334
+ name: `${argument.name}${validationResult.invalidArgument.name ? validationResult.invalidArgument.name : ""}`,
335
+ reason: validationResult.invalidArgument.reason,
336
+ };
337
+ }
338
+ }
339
+ if (validationResult.invalidArgument) {
340
+ invalidArguments.push(validationResult.invalidArgument);
341
+ return undefined;
342
+ }
343
+ if (argument.validate && validationResult.validValue !== undefined) {
344
+ const customError = argument.validate(validationResult.validValue);
345
+ if (customError !== undefined) {
346
+ invalidArguments.push({
347
+ argument,
348
+ name: argument.name,
349
+ value: validationResult.validValue,
350
+ reason: InvalidArgumentReason.CUSTOM_VALIDATION,
351
+ message: customError,
352
+ });
353
+ return undefined;
354
+ }
355
+ }
356
+ return validationResult.validValue;
357
+ }
358
+ // if there is no value, check if it was optional
359
+ if (!isOptional) {
360
+ invalidArguments.push({
361
+ argument: argument,
362
+ name: argument.name,
363
+ reason: InvalidArgumentReason.MISSING_VALUE,
364
+ });
365
+ }
366
+ return undefined;
367
+ }
368
+ /**
369
+ * Validates the provided value against the provided {@link Option}.
370
+ *
371
+ * @param option the {@link Option} to validate against.
372
+ * @param value the value (if any) for the {@link Option}.
373
+ * @param invalidArguments an array of {@link InvalidArgument} which may be added to if the provided value is invalid.
374
+ */
375
+ export function validateOptionValue(option, value, invalidArguments) {
376
+ return doSubCommandArgumentValidation(option, value, option.isArray || false, option.isOptional || false, invalidArguments);
377
+ }
378
+ /**
379
+ * Validates the provided value against the provided {@link Positional}.
380
+ *
381
+ * @param positional the {@link Positional} to validate against.
382
+ * @param value the value (if any) for the {@link Positional}.
383
+ * @param invalidArguments an array of {@link InvalidArgument} which may be added to if the provided value is invalid.
384
+ */
385
+ export function validatePositionalValue(positional, value, invalidArguments) {
386
+ return doSubCommandArgumentValidation(positional, value, positional.isVarargMultiple || false, positional.isVarargOptional || false, invalidArguments);
387
+ }
388
+ /**
389
+ * Validates the provided value against the {@link GlobalCommandArgument} provided by the {@link GlobalCommand} and returns the validated
390
+ * value or undefined if the value was invalid.
391
+ *
392
+ * @param globalCommand the {@link GlobalCommand} providing the {@link GlobalCommandArgument}.
393
+ * @param value the value (if any) for the {@link GlobalCommandArgument}.
394
+ * @param invalidArguments an array of {@link InvalidArgument} which may be added to if the provided value is invalid.
395
+ */
396
+ export function validateGlobalCommandArgumentValue(globalCommand, value, invalidArguments) {
397
+ // if this function is called it is because the argument is defined
398
+ const globalCommandArgument = globalCommand.argument;
399
+ // if there is a value, check if it is valid
400
+ if (value !== undefined) {
401
+ const validationResult = validatePrimitiveValue(globalCommandArgument, value);
402
+ if (validationResult.invalidArgument) {
403
+ if (validationResult.invalidArgument.value !== undefined) {
404
+ invalidArguments.push({
405
+ argument: globalCommandArgument,
406
+ name: globalCommand.name,
407
+ value: validationResult.invalidArgument.value,
408
+ reason: validationResult.invalidArgument.reason,
409
+ });
410
+ }
411
+ else {
412
+ invalidArguments.push({
413
+ argument: globalCommandArgument,
414
+ name: globalCommand.name,
415
+ reason: validationResult.invalidArgument.reason,
416
+ });
417
+ }
418
+ return undefined;
419
+ }
420
+ if (globalCommandArgument.validate && validationResult.validValue !== undefined) {
421
+ const customError = globalCommandArgument.validate(validationResult.validValue);
422
+ if (customError !== undefined) {
423
+ invalidArguments.push({
424
+ argument: globalCommandArgument,
425
+ name: globalCommand.name,
426
+ value: validationResult.validValue,
427
+ reason: InvalidArgumentReason.CUSTOM_VALIDATION,
428
+ message: customError,
429
+ });
430
+ return undefined;
431
+ }
432
+ }
433
+ return validationResult.validValue;
434
+ }
435
+ // if there is no value, check if it was optional
436
+ if (!globalCommandArgument.isOptional) {
437
+ invalidArguments.push({
438
+ argument: globalCommandArgument,
439
+ name: globalCommand.name,
440
+ reason: InvalidArgumentReason.MISSING_VALUE,
441
+ });
442
+ }
443
+ return undefined;
444
+ }
445
+ export function getInvalidArgumentString(invalidArgument, skipArgName) {
446
+ let nameString = "";
447
+ if (!skipArgName && invalidArgument.name !== undefined) {
448
+ nameString = invalidArgument.name;
449
+ }
450
+ let valueString = "";
451
+ if (invalidArgument.value !== undefined) {
452
+ valueString = `'${invalidArgument.value}'`;
453
+ }
454
+ let argString = "";
455
+ if (nameString !== "") {
456
+ if (valueString !== "") {
457
+ argString = `${nameString}=${valueString} `;
458
+ }
459
+ else {
460
+ argString = `${nameString} `;
461
+ }
462
+ }
463
+ else if (valueString !== "") {
464
+ argString = `${valueString} `;
465
+ }
466
+ let invalidString;
467
+ switch (invalidArgument.reason) {
468
+ case InvalidArgumentReason.MISSING_VALUE:
469
+ invalidString = "(missing value)";
470
+ break;
471
+ case InvalidArgumentReason.INCORRECT_VALUE_TYPE:
472
+ invalidString = "(incorrect type)";
473
+ break;
474
+ case InvalidArgumentReason.ILLEGAL_MULTIPLE_VALUES:
475
+ invalidString = "(illegal multiple values)";
476
+ break;
477
+ case InvalidArgumentReason.ILLEGAL_VALUE:
478
+ invalidString = "(illegal value)";
479
+ break;
480
+ case InvalidArgumentReason.ILLEGAL_SPARSE_ARRAY:
481
+ invalidString = "(sparse array values)";
482
+ break;
483
+ case InvalidArgumentReason.UNKNOWN_PROPERTY:
484
+ invalidString = "(unknown property)";
485
+ break;
486
+ case InvalidArgumentReason.NESTING_DEPTH_EXCEEDED:
487
+ invalidString = "(nesting depth exceeded)";
488
+ break;
489
+ case InvalidArgumentReason.ARRAY_SIZE_EXCEEDED:
490
+ invalidString = "(array size exceeded)";
491
+ break;
492
+ case InvalidArgumentReason.OPTION_IS_COMPLEX:
493
+ invalidString = "(specified option is complex)";
494
+ break;
495
+ case InvalidArgumentReason.CUSTOM_VALIDATION:
496
+ invalidString = invalidArgument.message
497
+ ? `(custom validation: ${invalidArgument.message})`
498
+ : "(custom validation failed)";
499
+ break;
500
+ default:
501
+ invalidString = "";
502
+ break;
503
+ }
504
+ return `${argString}${invalidString}`;
505
+ }
@@ -0,0 +1,67 @@
1
+ import { ArgumentValueTypeName } from "../../api/argument/ArgumentValueTypes.js";
2
+ import getLogger from "../../util/logger.js";
3
+ import { InvalidArgumentReason } from "../../api/RunResult.js";
4
+ const logger = getLogger("globalCommandValuePopulation");
5
+ /**
6
+ * Attempt to populate a {@link ArgumentValueType} for the provided {@link GlobalCommand} using the provided potential args.
7
+ *
8
+ * @param globalCommand the {@link GlobalCommand} for which {@link ArgumentValues} values should be populated.
9
+ * @param potentialArgs the potential args to use for population.
10
+ * @param defaultValue optional default value to use for population before parsing the provided arguments.
11
+ */
12
+ export default function populateGlobalCommandValue(globalCommand, potentialArgs, defaultValue) {
13
+ logger.debug(() => {
14
+ const message = `Populating value for global command: '${globalCommand.name}' using potential args: ${potentialArgs.join(" ")}`;
15
+ if (defaultValue !== undefined) {
16
+ return `${message} and configured value: '${defaultValue}'`;
17
+ }
18
+ return message;
19
+ });
20
+ const argument = globalCommand.argument;
21
+ // default to defined argument default value
22
+ let populatedArgumentValue = argument.defaultValue;
23
+ // override with provided configured value
24
+ if (defaultValue !== undefined) {
25
+ populatedArgumentValue = defaultValue;
26
+ }
27
+ let unusedArgs = [];
28
+ if (potentialArgs.length > 0) {
29
+ const firstPotentialArg = potentialArgs[0];
30
+ // don't use potentialArg if it cannot be a boolean value...
31
+ if (argument.type === ArgumentValueTypeName.BOOLEAN) {
32
+ const firstPotentialArgLower = firstPotentialArg.toLowerCase();
33
+ if (firstPotentialArgLower !== "true" && firstPotentialArgLower !== "false") {
34
+ // ...instead, use the fact that the argument is present as the value true
35
+ return {
36
+ populatedArgumentValue: "true",
37
+ unusedArgs: potentialArgs,
38
+ };
39
+ }
40
+ }
41
+ // otherwise override with parsed argument value
42
+ populatedArgumentValue = firstPotentialArg;
43
+ unusedArgs = potentialArgs.slice(1);
44
+ } // check if argument type is boolean and therefore command being specified is an implicit value of true
45
+ else if (argument.type === ArgumentValueTypeName.BOOLEAN &&
46
+ (populatedArgumentValue === undefined || argument.defaultValue === false)) {
47
+ return {
48
+ populatedArgumentValue: "true",
49
+ unusedArgs,
50
+ };
51
+ }
52
+ // check if there is no value and the global command argument is not optional
53
+ if (populatedArgumentValue === undefined && !argument.isOptional) {
54
+ return {
55
+ populatedArgumentValue,
56
+ unusedArgs,
57
+ invalidArgument: {
58
+ name: globalCommand.name,
59
+ reason: InvalidArgumentReason.MISSING_VALUE,
60
+ },
61
+ };
62
+ }
63
+ return {
64
+ populatedArgumentValue,
65
+ unusedArgs,
66
+ };
67
+ }