@flowscripter/dynamic-cli-framework 1.4.19 → 1.6.0

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 (534) hide show
  1. package/README.md +3 -14
  2. package/cli-plugin.ts +16 -0
  3. package/dist/cli-plugin.d.ts +17 -0
  4. package/dist/cli-plugin.d.ts.map +1 -0
  5. package/dist/cli-plugin.js +69 -0
  6. package/dist/index.d.ts +115 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +105696 -0
  9. package/dist/src/api/BaseCLIFeatureOptions.d.ts +12 -0
  10. package/dist/src/api/BaseCLIFeatureOptions.d.ts.map +1 -0
  11. package/dist/src/api/CLI.d.ts +17 -0
  12. package/dist/src/api/CLI.d.ts.map +1 -0
  13. package/dist/src/api/CLIConfig.d.ts +22 -0
  14. package/dist/src/api/CLIConfig.d.ts.map +1 -0
  15. package/dist/src/api/Context.d.ts +23 -0
  16. package/dist/src/api/Context.d.ts.map +1 -0
  17. package/dist/src/api/RunResult.d.ts +128 -0
  18. package/dist/src/api/RunResult.d.ts.map +1 -0
  19. package/dist/src/api/argument/Argument.d.ts +62 -0
  20. package/dist/src/api/argument/Argument.d.ts.map +1 -0
  21. package/dist/src/api/argument/ArgumentValueTypes.d.ts +68 -0
  22. package/dist/src/api/argument/ArgumentValueTypes.d.ts.map +1 -0
  23. package/dist/src/api/argument/ComplexOption.d.ts +21 -0
  24. package/dist/src/api/argument/ComplexOption.d.ts.map +1 -0
  25. package/dist/src/api/argument/GlobalCommandArgument.d.ts +16 -0
  26. package/dist/src/api/argument/GlobalCommandArgument.d.ts.map +1 -0
  27. package/dist/src/api/argument/Option.d.ts +29 -0
  28. package/dist/src/api/argument/Option.d.ts.map +1 -0
  29. package/dist/src/api/argument/Positional.d.ts +26 -0
  30. package/dist/src/api/argument/Positional.d.ts.map +1 -0
  31. package/dist/src/api/argument/SubCommandArgument.d.ts +18 -0
  32. package/dist/src/api/argument/SubCommandArgument.d.ts.map +1 -0
  33. package/dist/src/api/command/Command.d.ts +21 -0
  34. package/dist/src/api/command/Command.d.ts.map +1 -0
  35. package/dist/src/api/command/GlobalCommand.d.ts +28 -0
  36. package/dist/src/api/command/GlobalCommand.d.ts.map +1 -0
  37. package/dist/src/api/command/GlobalModifierCommand.d.ts +12 -0
  38. package/dist/src/api/command/GlobalModifierCommand.d.ts.map +1 -0
  39. package/dist/src/api/command/GroupCommand.d.ts +19 -0
  40. package/dist/src/api/command/GroupCommand.d.ts.map +1 -0
  41. package/dist/src/api/command/SubCommand.d.ts +37 -0
  42. package/dist/src/api/command/SubCommand.d.ts.map +1 -0
  43. package/dist/src/api/command/UsageExample.d.ts +20 -0
  44. package/dist/src/api/command/UsageExample.d.ts.map +1 -0
  45. package/dist/src/api/plugin/CommandFactory.d.ts +23 -0
  46. package/dist/src/api/plugin/CommandFactory.d.ts.map +1 -0
  47. package/dist/src/api/plugin/ServiceProviderFactory.d.ts +25 -0
  48. package/dist/src/api/plugin/ServiceProviderFactory.d.ts.map +1 -0
  49. package/dist/src/api/service/ServiceProvider.d.ts +47 -0
  50. package/dist/src/api/service/ServiceProvider.d.ts.map +1 -0
  51. package/dist/src/api/service/core/ArgumentPrompterService.d.ts +6 -0
  52. package/dist/src/api/service/core/ArgumentPrompterService.d.ts.map +1 -0
  53. package/dist/src/api/service/core/AsciiBannerGeneratorService.d.ts +59 -0
  54. package/dist/src/api/service/core/AsciiBannerGeneratorService.d.ts.map +1 -0
  55. package/dist/src/api/service/core/CompletionService.d.ts +22 -0
  56. package/dist/src/api/service/core/CompletionService.d.ts.map +1 -0
  57. package/dist/src/api/service/core/DataDumpGeneratorService.d.ts +22 -0
  58. package/dist/src/api/service/core/DataDumpGeneratorService.d.ts.map +1 -0
  59. package/dist/src/api/service/core/ImagePrinterService.d.ts +21 -0
  60. package/dist/src/api/service/core/ImagePrinterService.d.ts.map +1 -0
  61. package/dist/src/api/service/core/KeyValueService.d.ts +40 -0
  62. package/dist/src/api/service/core/KeyValueService.d.ts.map +1 -0
  63. package/dist/src/api/service/core/PluginService.d.ts +55 -0
  64. package/dist/src/api/service/core/PluginService.d.ts.map +1 -0
  65. package/dist/src/api/service/core/PrettyPrinterService.d.ts +35 -0
  66. package/dist/src/api/service/core/PrettyPrinterService.d.ts.map +1 -0
  67. package/dist/src/api/service/core/PrinterService.d.ts +339 -0
  68. package/dist/src/api/service/core/PrinterService.d.ts.map +1 -0
  69. package/dist/src/api/service/core/PrompterService.d.ts +35 -0
  70. package/dist/src/api/service/core/PrompterService.d.ts.map +1 -0
  71. package/dist/src/api/service/core/SecretService.d.ts +25 -0
  72. package/dist/src/api/service/core/SecretService.d.ts.map +1 -0
  73. package/dist/src/api/service/core/ShutdownService.d.ts +24 -0
  74. package/dist/src/api/service/core/ShutdownService.d.ts.map +1 -0
  75. package/dist/src/api/service/core/SyntaxHighlighterService.d.ts +49 -0
  76. package/dist/src/api/service/core/SyntaxHighlighterService.d.ts.map +1 -0
  77. package/dist/src/api/service/core/Table.d.ts +18 -0
  78. package/dist/src/api/service/core/Table.d.ts.map +1 -0
  79. package/dist/src/api/service/core/TableGeneratorService.d.ts +31 -0
  80. package/dist/src/api/service/core/TableGeneratorService.d.ts.map +1 -0
  81. package/dist/src/api/service/core/TreePrinterService.d.ts +9 -0
  82. package/dist/src/api/service/core/TreePrinterService.d.ts.map +1 -0
  83. package/dist/src/cli/BaseCLI.d.ts +59 -0
  84. package/dist/src/cli/BaseCLI.d.ts.map +1 -0
  85. package/dist/src/cli/DefaultRuntimeCLI.d.ts +12 -0
  86. package/dist/src/cli/DefaultRuntimeCLI.d.ts.map +1 -0
  87. package/dist/src/cli/DynamicPluginRuntimeCLI.d.ts +20 -0
  88. package/dist/src/cli/DynamicPluginRuntimeCLI.d.ts.map +1 -0
  89. package/dist/src/command/CompletionCommand.d.ts +31 -0
  90. package/dist/src/command/CompletionCommand.d.ts.map +1 -0
  91. package/dist/src/command/MultiCommandCliHelpCommand.d.ts +40 -0
  92. package/dist/src/command/MultiCommandCliHelpCommand.d.ts.map +1 -0
  93. package/dist/src/command/PluginCommand.d.ts +67 -0
  94. package/dist/src/command/PluginCommand.d.ts.map +1 -0
  95. package/dist/src/command/SingleCommandCliHelpCommand.d.ts +31 -0
  96. package/dist/src/command/SingleCommandCliHelpCommand.d.ts.map +1 -0
  97. package/dist/src/command/UsageCommand.d.ts +14 -0
  98. package/dist/src/command/UsageCommand.d.ts.map +1 -0
  99. package/dist/src/command/VersionCommand.d.ts +12 -0
  100. package/dist/src/command/VersionCommand.d.ts.map +1 -0
  101. package/dist/src/launcher.d.ts +10 -0
  102. package/dist/src/launcher.d.ts.map +1 -0
  103. package/dist/src/runtime/DefaultContext.d.ts +14 -0
  104. package/dist/src/runtime/DefaultContext.d.ts.map +1 -0
  105. package/dist/src/runtime/argument/ArgumentTypeGuards.d.ts +4 -0
  106. package/dist/src/runtime/argument/ArgumentTypeGuards.d.ts.map +1 -0
  107. package/dist/src/runtime/command/CommandTypeGuards.d.ts +10 -0
  108. package/dist/src/runtime/command/CommandTypeGuards.d.ts.map +1 -0
  109. package/dist/src/runtime/command/CommandValidator.d.ts +15 -0
  110. package/dist/src/runtime/command/CommandValidator.d.ts.map +1 -0
  111. package/dist/src/runtime/parser.d.ts +48 -0
  112. package/dist/src/runtime/parser.d.ts.map +1 -0
  113. package/dist/src/runtime/registry/CommandRegistry.d.ts +89 -0
  114. package/dist/src/runtime/registry/CommandRegistry.d.ts.map +1 -0
  115. package/dist/src/runtime/registry/DefaultCommandRegistry.d.ts +51 -0
  116. package/dist/src/runtime/registry/DefaultCommandRegistry.d.ts.map +1 -0
  117. package/dist/src/runtime/registry/DefaultServiceProviderRegistry.d.ts +12 -0
  118. package/dist/src/runtime/registry/DefaultServiceProviderRegistry.d.ts.map +1 -0
  119. package/dist/src/runtime/registry/ServiceProviderRegistry.d.ts +11 -0
  120. package/dist/src/runtime/registry/ServiceProviderRegistry.d.ts.map +1 -0
  121. package/dist/src/runtime/runner.d.ts +76 -0
  122. package/dist/src/runtime/runner.d.ts.map +1 -0
  123. package/dist/src/runtime/scanner.d.ts +69 -0
  124. package/dist/src/runtime/scanner.d.ts.map +1 -0
  125. package/dist/src/runtime/values/ValuePopulationResult.d.ts +34 -0
  126. package/dist/src/runtime/values/ValuePopulationResult.d.ts.map +1 -0
  127. package/dist/src/runtime/values/argumentValueMerge.d.ts +13 -0
  128. package/dist/src/runtime/values/argumentValueMerge.d.ts.map +1 -0
  129. package/dist/src/runtime/values/argumentValueValidation.d.ts +33 -0
  130. package/dist/src/runtime/values/argumentValueValidation.d.ts.map +1 -0
  131. package/dist/src/runtime/values/globalCommandValuePopulation.d.ts +12 -0
  132. package/dist/src/runtime/values/globalCommandValuePopulation.d.ts.map +1 -0
  133. package/dist/src/runtime/values/subCommandValuePopulation.d.ts +12 -0
  134. package/dist/src/runtime/values/subCommandValuePopulation.d.ts.map +1 -0
  135. package/dist/src/service/argumentPrompter/ArgumentPrompterServiceProvider.d.ts +13 -0
  136. package/dist/src/service/argumentPrompter/ArgumentPrompterServiceProvider.d.ts.map +1 -0
  137. package/dist/src/service/argumentPrompter/DefaultArgumentPrompterService.d.ts +9 -0
  138. package/dist/src/service/argumentPrompter/DefaultArgumentPrompterService.d.ts.map +1 -0
  139. package/dist/src/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.d.ts +20 -0
  140. package/dist/src/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.d.ts.map +1 -0
  141. package/dist/src/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.d.ts +12 -0
  142. package/dist/src/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.d.ts.map +1 -0
  143. package/dist/src/service/banner/BannerServiceProvider.d.ts +29 -0
  144. package/dist/src/service/banner/BannerServiceProvider.d.ts.map +1 -0
  145. package/dist/src/service/banner/command/NoBannerCommand.d.ts +19 -0
  146. package/dist/src/service/banner/command/NoBannerCommand.d.ts.map +1 -0
  147. package/dist/src/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.d.ts +22 -0
  148. package/dist/src/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.d.ts.map +1 -0
  149. package/dist/src/service/completion/CompletionServiceProvider.d.ts +14 -0
  150. package/dist/src/service/completion/CompletionServiceProvider.d.ts.map +1 -0
  151. package/dist/src/service/completion/DefaultCompletionService.d.ts +17 -0
  152. package/dist/src/service/completion/DefaultCompletionService.d.ts.map +1 -0
  153. package/dist/src/service/completion/shell/ShellHandler.d.ts +13 -0
  154. package/dist/src/service/completion/shell/ShellHandler.d.ts.map +1 -0
  155. package/dist/src/service/completion/shell/bash.d.ts +11 -0
  156. package/dist/src/service/completion/shell/bash.d.ts.map +1 -0
  157. package/dist/src/service/completion/shell/fish.d.ts +11 -0
  158. package/dist/src/service/completion/shell/fish.d.ts.map +1 -0
  159. package/dist/src/service/completion/shell/powershell.d.ts +11 -0
  160. package/dist/src/service/completion/shell/powershell.d.ts.map +1 -0
  161. package/dist/src/service/completion/shell/zsh.d.ts +11 -0
  162. package/dist/src/service/completion/shell/zsh.d.ts.map +1 -0
  163. package/dist/src/service/configuration/ConfigurationServiceProvider.d.ts +196 -0
  164. package/dist/src/service/configuration/ConfigurationServiceProvider.d.ts.map +1 -0
  165. package/dist/src/service/configuration/DefaultKeyValueService.d.ts +14 -0
  166. package/dist/src/service/configuration/DefaultKeyValueService.d.ts.map +1 -0
  167. package/dist/src/service/configuration/DefaultSecretService.d.ts +27 -0
  168. package/dist/src/service/configuration/DefaultSecretService.d.ts.map +1 -0
  169. package/dist/src/service/configuration/command/ConfigCommand.d.ts +19 -0
  170. package/dist/src/service/configuration/command/ConfigCommand.d.ts.map +1 -0
  171. package/dist/src/service/configuration/command/DumpConfigCommand.d.ts +14 -0
  172. package/dist/src/service/configuration/command/DumpConfigCommand.d.ts.map +1 -0
  173. package/dist/src/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.d.ts +12 -0
  174. package/dist/src/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.d.ts.map +1 -0
  175. package/dist/src/service/dataDumpGenerator/DefaultDataDumpGeneratorService.d.ts +10 -0
  176. package/dist/src/service/dataDumpGenerator/DefaultDataDumpGeneratorService.d.ts.map +1 -0
  177. package/dist/src/service/imagePrinter/DefaultImagePrinterService.d.ts +8 -0
  178. package/dist/src/service/imagePrinter/DefaultImagePrinterService.d.ts.map +1 -0
  179. package/dist/src/service/imagePrinter/ImagePrinterServiceProvider.d.ts +13 -0
  180. package/dist/src/service/imagePrinter/ImagePrinterServiceProvider.d.ts.map +1 -0
  181. package/dist/src/service/plugin/DefaultPluginService.d.ts +15 -0
  182. package/dist/src/service/plugin/DefaultPluginService.d.ts.map +1 -0
  183. package/dist/src/service/plugin/DefaultPluginServiceProvider.d.ts +13 -0
  184. package/dist/src/service/plugin/DefaultPluginServiceProvider.d.ts.map +1 -0
  185. package/dist/src/service/prettyPrinter/DefaultPrettyPrinterService.d.ts +13 -0
  186. package/dist/src/service/prettyPrinter/DefaultPrettyPrinterService.d.ts.map +1 -0
  187. package/dist/src/service/prettyPrinter/PrettyPrinterServiceProvider.d.ts +20 -0
  188. package/dist/src/service/prettyPrinter/PrettyPrinterServiceProvider.d.ts.map +1 -0
  189. package/dist/src/service/printer/DefaultPrinterService.d.ts +61 -0
  190. package/dist/src/service/printer/DefaultPrinterService.d.ts.map +1 -0
  191. package/dist/src/service/printer/PrinterServiceProvider.d.ts +22 -0
  192. package/dist/src/service/printer/PrinterServiceProvider.d.ts.map +1 -0
  193. package/dist/src/service/printer/command/DarkModeCommand.d.ts +19 -0
  194. package/dist/src/service/printer/command/DarkModeCommand.d.ts.map +1 -0
  195. package/dist/src/service/printer/command/LogLevelCommand.d.ts +19 -0
  196. package/dist/src/service/printer/command/LogLevelCommand.d.ts.map +1 -0
  197. package/dist/src/service/printer/command/NoColorCommand.d.ts +19 -0
  198. package/dist/src/service/printer/command/NoColorCommand.d.ts.map +1 -0
  199. package/dist/src/service/printer/command/NoHyperlinksCommand.d.ts +16 -0
  200. package/dist/src/service/printer/command/NoHyperlinksCommand.d.ts.map +1 -0
  201. package/dist/src/service/printer/terminal/Color.d.ts +15 -0
  202. package/dist/src/service/printer/terminal/Color.d.ts.map +1 -0
  203. package/dist/src/service/printer/terminal/Progress.d.ts +20 -0
  204. package/dist/src/service/printer/terminal/Progress.d.ts.map +1 -0
  205. package/dist/src/service/printer/terminal/Spinner.d.ts +16 -0
  206. package/dist/src/service/printer/terminal/Spinner.d.ts.map +1 -0
  207. package/dist/src/service/printer/terminal/Theme.d.ts +3 -0
  208. package/dist/src/service/printer/terminal/Theme.d.ts.map +1 -0
  209. package/dist/src/service/prompter/DefaultPrompterService.d.ts +21 -0
  210. package/dist/src/service/prompter/DefaultPrompterService.d.ts.map +1 -0
  211. package/dist/src/service/prompter/PrompterServiceProvider.d.ts +13 -0
  212. package/dist/src/service/prompter/PrompterServiceProvider.d.ts.map +1 -0
  213. package/dist/src/service/prompter/command/NoPromptCommand.d.ts +16 -0
  214. package/dist/src/service/prompter/command/NoPromptCommand.d.ts.map +1 -0
  215. package/dist/src/service/prompter/prompt/PromptContext.d.ts +15 -0
  216. package/dist/src/service/prompter/prompt/PromptContext.d.ts.map +1 -0
  217. package/dist/src/service/prompter/prompt/promptAcknowledge.d.ts +4 -0
  218. package/dist/src/service/prompter/prompt/promptAcknowledge.d.ts.map +1 -0
  219. package/dist/src/service/prompter/prompt/promptMultiSelect.d.ts +4 -0
  220. package/dist/src/service/prompter/prompt/promptMultiSelect.d.ts.map +1 -0
  221. package/dist/src/service/prompter/prompt/promptOpenUrl.d.ts +4 -0
  222. package/dist/src/service/prompter/prompt/promptOpenUrl.d.ts.map +1 -0
  223. package/dist/src/service/prompter/prompt/promptSingleSelect.d.ts +4 -0
  224. package/dist/src/service/prompter/prompt/promptSingleSelect.d.ts.map +1 -0
  225. package/dist/src/service/prompter/prompt/promptText.d.ts +4 -0
  226. package/dist/src/service/prompter/prompt/promptText.d.ts.map +1 -0
  227. package/dist/src/service/prompter/prompt/promptToggle.d.ts +4 -0
  228. package/dist/src/service/prompter/prompt/promptToggle.d.ts.map +1 -0
  229. package/dist/src/service/shutdown/DefaultShutdownService.d.ts +9 -0
  230. package/dist/src/service/shutdown/DefaultShutdownService.d.ts.map +1 -0
  231. package/dist/src/service/shutdown/ShutdownServiceProvider.d.ts +15 -0
  232. package/dist/src/service/shutdown/ShutdownServiceProvider.d.ts.map +1 -0
  233. package/dist/src/service/shutdown/ShutdownState.d.ts +6 -0
  234. package/dist/src/service/shutdown/ShutdownState.d.ts.map +1 -0
  235. package/dist/src/service/syntaxHighlighter/DefaultSyntaxHighlighterService.d.ts +17 -0
  236. package/dist/src/service/syntaxHighlighter/DefaultSyntaxHighlighterService.d.ts.map +1 -0
  237. package/dist/src/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.d.ts +20 -0
  238. package/dist/src/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.d.ts.map +1 -0
  239. package/dist/src/service/tableGenerator/DefaultTableGeneratorService.d.ts +10 -0
  240. package/dist/src/service/tableGenerator/DefaultTableGeneratorService.d.ts.map +1 -0
  241. package/dist/src/service/tableGenerator/TableGeneratorServiceProvider.d.ts +12 -0
  242. package/dist/src/service/tableGenerator/TableGeneratorServiceProvider.d.ts.map +1 -0
  243. package/dist/src/service/treePrinter/DefaultTreePrinterService.d.ts +10 -0
  244. package/dist/src/service/treePrinter/DefaultTreePrinterService.d.ts.map +1 -0
  245. package/dist/src/service/treePrinter/TreePrinterServiceProvider.d.ts +12 -0
  246. package/dist/src/service/treePrinter/TreePrinterServiceProvider.d.ts.map +1 -0
  247. package/dist/src/terminal/Ansi.d.ts +14 -0
  248. package/dist/src/terminal/Ansi.d.ts.map +1 -0
  249. package/dist/src/terminal/ImageRenderer.d.ts +7 -0
  250. package/dist/src/terminal/ImageRenderer.d.ts.map +1 -0
  251. package/dist/src/terminal/KeyReader.d.ts +22 -0
  252. package/dist/src/terminal/KeyReader.d.ts.map +1 -0
  253. package/dist/src/terminal/PngDecoder.d.ts +6 -0
  254. package/dist/src/terminal/PngDecoder.d.ts.map +1 -0
  255. package/dist/src/terminal/Styler.d.ts +9 -0
  256. package/dist/src/terminal/Styler.d.ts.map +1 -0
  257. package/dist/src/terminal/Terminal.d.ts +10 -0
  258. package/dist/src/terminal/Terminal.d.ts.map +1 -0
  259. package/dist/src/terminal/TtyKeyReader.d.ts +11 -0
  260. package/dist/src/terminal/TtyKeyReader.d.ts.map +1 -0
  261. package/dist/src/terminal/TtyStyler.d.ts +19 -0
  262. package/dist/src/terminal/TtyStyler.d.ts.map +1 -0
  263. package/dist/src/terminal/TtyTerminal.d.ts +14 -0
  264. package/dist/src/terminal/TtyTerminal.d.ts.map +1 -0
  265. package/dist/src/terminal/supportsHyperlinks.d.ts +3 -0
  266. package/dist/src/terminal/supportsHyperlinks.d.ts.map +1 -0
  267. package/dist/src/util/configHelper.d.ts +22 -0
  268. package/dist/src/util/configHelper.d.ts.map +1 -0
  269. package/dist/src/util/envVarHelper.d.ts +21 -0
  270. package/dist/src/util/envVarHelper.d.ts.map +1 -0
  271. package/dist/src/util/helpHelper.d.ts +26 -0
  272. package/dist/src/util/helpHelper.d.ts.map +1 -0
  273. package/dist/src/util/logger.d.ts +18 -0
  274. package/dist/src/util/logger.d.ts.map +1 -0
  275. package/dist/src/util/runnerHelper.d.ts +9 -0
  276. package/dist/src/util/runnerHelper.d.ts.map +1 -0
  277. package/dist/tests/cli/BaseCLI.test.d.ts +2 -0
  278. package/dist/tests/cli/BaseCLI.test.d.ts.map +1 -0
  279. package/dist/tests/cli/DynamicPluginRuntimeCLI.test.d.ts +2 -0
  280. package/dist/tests/cli/DynamicPluginRuntimeCLI.test.d.ts.map +1 -0
  281. package/dist/tests/command/CompletionCommand.test.d.ts +2 -0
  282. package/dist/tests/command/CompletionCommand.test.d.ts.map +1 -0
  283. package/dist/tests/command/MultiCommandCliHelpCommand.test.d.ts +2 -0
  284. package/dist/tests/command/MultiCommandCliHelpCommand.test.d.ts.map +1 -0
  285. package/dist/tests/command/SingleCommandCliHelpCommand.test.d.ts +2 -0
  286. package/dist/tests/command/SingleCommandCliHelpCommand.test.d.ts.map +1 -0
  287. package/dist/tests/command/UsageCommand.test.d.ts +2 -0
  288. package/dist/tests/command/UsageCommand.test.d.ts.map +1 -0
  289. package/dist/tests/command/VersionCommand.test.d.ts +2 -0
  290. package/dist/tests/command/VersionCommand.test.d.ts.map +1 -0
  291. package/dist/tests/fixtures/CLIConfig.d.ts +3 -0
  292. package/dist/tests/fixtures/CLIConfig.d.ts.map +1 -0
  293. package/dist/tests/fixtures/Command.d.ts +20 -0
  294. package/dist/tests/fixtures/Command.d.ts.map +1 -0
  295. package/{tests/fixtures/CommandRegistry.ts → dist/tests/fixtures/CommandRegistry.d.ts} +2 -4
  296. package/dist/tests/fixtures/CommandRegistry.d.ts.map +1 -0
  297. package/dist/tests/fixtures/ConfigurationServiceProvider.d.ts +10 -0
  298. package/dist/tests/fixtures/ConfigurationServiceProvider.d.ts.map +1 -0
  299. package/dist/tests/fixtures/Context.d.ts +4 -0
  300. package/dist/tests/fixtures/Context.d.ts.map +1 -0
  301. package/dist/tests/fixtures/ServiceProviderRegistry.d.ts +4 -0
  302. package/dist/tests/fixtures/ServiceProviderRegistry.d.ts.map +1 -0
  303. package/dist/tests/fixtures/StreamString.d.ts +10 -0
  304. package/dist/tests/fixtures/StreamString.d.ts.map +1 -0
  305. package/dist/tests/fixtures/prettierPluginFoo.d.ts +4 -0
  306. package/dist/tests/fixtures/prettierPluginFoo.d.ts.map +1 -0
  307. package/dist/tests/fixtures/util.d.ts +8 -0
  308. package/dist/tests/fixtures/util.d.ts.map +1 -0
  309. package/dist/tests/runtime/DefaultContext.test.d.ts +2 -0
  310. package/dist/tests/runtime/DefaultContext.test.d.ts.map +1 -0
  311. package/dist/tests/runtime/argument/ArgumentTypeGuards.test.d.ts +2 -0
  312. package/dist/tests/runtime/argument/ArgumentTypeGuards.test.d.ts.map +1 -0
  313. package/dist/tests/runtime/command/CommandTypeGuards.test.d.ts +2 -0
  314. package/dist/tests/runtime/command/CommandTypeGuards.test.d.ts.map +1 -0
  315. package/dist/tests/runtime/command/CommandValidator.test.d.ts +2 -0
  316. package/dist/tests/runtime/command/CommandValidator.test.d.ts.map +1 -0
  317. package/dist/tests/runtime/parser.test.d.ts +2 -0
  318. package/dist/tests/runtime/parser.test.d.ts.map +1 -0
  319. package/dist/tests/runtime/registry/DefaultCommandRegistry.test.d.ts +2 -0
  320. package/dist/tests/runtime/registry/DefaultCommandRegistry.test.d.ts.map +1 -0
  321. package/dist/tests/runtime/registry/DefaultServiceProviderRegistry.test.d.ts +2 -0
  322. package/dist/tests/runtime/registry/DefaultServiceProviderRegistry.test.d.ts.map +1 -0
  323. package/dist/tests/runtime/runner.test.d.ts +2 -0
  324. package/dist/tests/runtime/runner.test.d.ts.map +1 -0
  325. package/dist/tests/runtime/scanner.test.d.ts +2 -0
  326. package/dist/tests/runtime/scanner.test.d.ts.map +1 -0
  327. package/dist/tests/runtime/values/argumentValueMerge.test.d.ts +2 -0
  328. package/dist/tests/runtime/values/argumentValueMerge.test.d.ts.map +1 -0
  329. package/dist/tests/runtime/values/argumentValueValidation.test.d.ts +2 -0
  330. package/dist/tests/runtime/values/argumentValueValidation.test.d.ts.map +1 -0
  331. package/dist/tests/runtime/values/globalCommandValuePopulation.test.d.ts +2 -0
  332. package/dist/tests/runtime/values/globalCommandValuePopulation.test.d.ts.map +1 -0
  333. package/dist/tests/runtime/values/subCommandValuePopulation.test.d.ts +2 -0
  334. package/dist/tests/runtime/values/subCommandValuePopulation.test.d.ts.map +1 -0
  335. package/dist/tests/service/argumentPrompter/ArgumentPrompterServiceProvider.test.d.ts +2 -0
  336. package/dist/tests/service/argumentPrompter/ArgumentPrompterServiceProvider.test.d.ts.map +1 -0
  337. package/dist/tests/service/argumentPrompter/DefaultArgumentPrompterService.test.d.ts +2 -0
  338. package/dist/tests/service/argumentPrompter/DefaultArgumentPrompterService.test.d.ts.map +1 -0
  339. package/dist/tests/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.test.d.ts +2 -0
  340. package/dist/tests/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.test.d.ts.map +1 -0
  341. package/dist/tests/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.test.d.ts +2 -0
  342. package/dist/tests/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.test.d.ts.map +1 -0
  343. package/dist/tests/service/banner/BannerServiceProvider.test.d.ts +2 -0
  344. package/dist/tests/service/banner/BannerServiceProvider.test.d.ts.map +1 -0
  345. package/dist/tests/service/banner/command/NoBannerCommand.test.d.ts +2 -0
  346. package/dist/tests/service/banner/command/NoBannerCommand.test.d.ts.map +1 -0
  347. package/dist/tests/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.test.d.ts +2 -0
  348. package/dist/tests/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.test.d.ts.map +1 -0
  349. package/dist/tests/service/completion/CompletionServiceProvider.test.d.ts +2 -0
  350. package/dist/tests/service/completion/CompletionServiceProvider.test.d.ts.map +1 -0
  351. package/dist/tests/service/completion/DefaultCompletionService.test.d.ts +2 -0
  352. package/dist/tests/service/completion/DefaultCompletionService.test.d.ts.map +1 -0
  353. package/dist/tests/service/completion/shell/bash.test.d.ts +2 -0
  354. package/dist/tests/service/completion/shell/bash.test.d.ts.map +1 -0
  355. package/dist/tests/service/completion/shell/fish.test.d.ts +2 -0
  356. package/dist/tests/service/completion/shell/fish.test.d.ts.map +1 -0
  357. package/dist/tests/service/completion/shell/powershell.test.d.ts +2 -0
  358. package/dist/tests/service/completion/shell/powershell.test.d.ts.map +1 -0
  359. package/dist/tests/service/completion/shell/zsh.test.d.ts +2 -0
  360. package/dist/tests/service/completion/shell/zsh.test.d.ts.map +1 -0
  361. package/dist/tests/service/configuration/ConfigurationServiceProvider.test.d.ts +2 -0
  362. package/dist/tests/service/configuration/ConfigurationServiceProvider.test.d.ts.map +1 -0
  363. package/dist/tests/service/configuration/DefaultKeyValueService.test.d.ts +2 -0
  364. package/dist/tests/service/configuration/DefaultKeyValueService.test.d.ts.map +1 -0
  365. package/dist/tests/service/configuration/DefaultSecretService.test.d.ts +2 -0
  366. package/dist/tests/service/configuration/DefaultSecretService.test.d.ts.map +1 -0
  367. package/dist/tests/service/configuration/command/ConfigCommand.test.d.ts +2 -0
  368. package/dist/tests/service/configuration/command/ConfigCommand.test.d.ts.map +1 -0
  369. package/dist/tests/service/configuration/command/DumpConfigCommand.test.d.ts +2 -0
  370. package/dist/tests/service/configuration/command/DumpConfigCommand.test.d.ts.map +1 -0
  371. package/dist/tests/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.test.d.ts +2 -0
  372. package/dist/tests/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.test.d.ts.map +1 -0
  373. package/dist/tests/service/dataDumpGenerator/DefaultDataDumpGeneratorService.test.d.ts +2 -0
  374. package/dist/tests/service/dataDumpGenerator/DefaultDataDumpGeneratorService.test.d.ts.map +1 -0
  375. package/dist/tests/service/imagePrinter/DefaultImagePrinterService.test.d.ts +2 -0
  376. package/dist/tests/service/imagePrinter/DefaultImagePrinterService.test.d.ts.map +1 -0
  377. package/dist/tests/service/imagePrinter/ImagePrinterServiceProvider.test.d.ts +2 -0
  378. package/dist/tests/service/imagePrinter/ImagePrinterServiceProvider.test.d.ts.map +1 -0
  379. package/dist/tests/service/plugin/DefaultPluginServiceProvider.test.d.ts +2 -0
  380. package/dist/tests/service/plugin/DefaultPluginServiceProvider.test.d.ts.map +1 -0
  381. package/dist/tests/service/prettyPrinter/DefaultPrettyPrinterService.test.d.ts +2 -0
  382. package/dist/tests/service/prettyPrinter/DefaultPrettyPrinterService.test.d.ts.map +1 -0
  383. package/dist/tests/service/prettyPrinter/PrettyPrinterServiceProvider.test.d.ts +2 -0
  384. package/dist/tests/service/prettyPrinter/PrettyPrinterServiceProvider.test.d.ts.map +1 -0
  385. package/dist/tests/service/printer/DefaultPrinterService.test.d.ts +2 -0
  386. package/dist/tests/service/printer/DefaultPrinterService.test.d.ts.map +1 -0
  387. package/dist/tests/service/printer/PrinterServiceProvider.test.d.ts +2 -0
  388. package/dist/tests/service/printer/PrinterServiceProvider.test.d.ts.map +1 -0
  389. package/dist/tests/service/printer/command/DarkModeCommand.test.d.ts +2 -0
  390. package/dist/tests/service/printer/command/DarkModeCommand.test.d.ts.map +1 -0
  391. package/dist/tests/service/printer/command/LogLevelCommand.test.d.ts +2 -0
  392. package/dist/tests/service/printer/command/LogLevelCommand.test.d.ts.map +1 -0
  393. package/dist/tests/service/printer/command/NoColorCommand.test.d.ts +2 -0
  394. package/dist/tests/service/printer/command/NoColorCommand.test.d.ts.map +1 -0
  395. package/dist/tests/service/printer/command/NoHyperlinksCommand.test.d.ts +2 -0
  396. package/dist/tests/service/printer/command/NoHyperlinksCommand.test.d.ts.map +1 -0
  397. package/dist/tests/service/printer/terminal/Progress.test.d.ts +2 -0
  398. package/dist/tests/service/printer/terminal/Progress.test.d.ts.map +1 -0
  399. package/dist/tests/service/printer/terminal/Spinner.test.d.ts +2 -0
  400. package/dist/tests/service/printer/terminal/Spinner.test.d.ts.map +1 -0
  401. package/dist/tests/service/prompter/DefaultPrompterService.test.d.ts +2 -0
  402. package/dist/tests/service/prompter/DefaultPrompterService.test.d.ts.map +1 -0
  403. package/dist/tests/service/prompter/PrompterServiceProvider.test.d.ts +2 -0
  404. package/dist/tests/service/prompter/PrompterServiceProvider.test.d.ts.map +1 -0
  405. package/dist/tests/service/prompter/command/NoPromptCommand.test.d.ts +2 -0
  406. package/dist/tests/service/prompter/command/NoPromptCommand.test.d.ts.map +1 -0
  407. package/dist/tests/service/prompter/prompt/PromptContext.test.d.ts +2 -0
  408. package/dist/tests/service/prompter/prompt/PromptContext.test.d.ts.map +1 -0
  409. package/dist/tests/service/shutdown/ShutdownServiceProvider.test.d.ts +2 -0
  410. package/dist/tests/service/shutdown/ShutdownServiceProvider.test.d.ts.map +1 -0
  411. package/dist/tests/service/syntaxHighlighter/DefaultSyntaxHighlighterService.test.d.ts +2 -0
  412. package/dist/tests/service/syntaxHighlighter/DefaultSyntaxHighlighterService.test.d.ts.map +1 -0
  413. package/dist/tests/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.test.d.ts +2 -0
  414. package/dist/tests/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.test.d.ts.map +1 -0
  415. package/dist/tests/service/tableGenerator/DefaultTableGeneratorService.test.d.ts +2 -0
  416. package/dist/tests/service/tableGenerator/DefaultTableGeneratorService.test.d.ts.map +1 -0
  417. package/dist/tests/service/tableGenerator/TableGeneratorServiceProvider.test.d.ts +2 -0
  418. package/dist/tests/service/tableGenerator/TableGeneratorServiceProvider.test.d.ts.map +1 -0
  419. package/dist/tests/service/treePrinter/DefaultTreePrinterService.test.d.ts +2 -0
  420. package/dist/tests/service/treePrinter/DefaultTreePrinterService.test.d.ts.map +1 -0
  421. package/dist/tests/service/treePrinter/TreePrinterServiceProvider.test.d.ts +2 -0
  422. package/dist/tests/service/treePrinter/TreePrinterServiceProvider.test.d.ts.map +1 -0
  423. package/dist/tests/terminal/ImageRenderer.test.d.ts +2 -0
  424. package/dist/tests/terminal/ImageRenderer.test.d.ts.map +1 -0
  425. package/dist/tests/terminal/PngDecoder.test.d.ts +2 -0
  426. package/dist/tests/terminal/PngDecoder.test.d.ts.map +1 -0
  427. package/dist/tests/terminal/supportsHyperlinks.test.d.ts +2 -0
  428. package/dist/tests/terminal/supportsHyperlinks.test.d.ts.map +1 -0
  429. package/dist/tests/util/configHelper.test.d.ts +2 -0
  430. package/dist/tests/util/configHelper.test.d.ts.map +1 -0
  431. package/dist/tests/util/envVarHelper.test.d.ts +2 -0
  432. package/dist/tests/util/envVarHelper.test.d.ts.map +1 -0
  433. package/dist/tests/util/logger.test.d.ts +2 -0
  434. package/dist/tests/util/logger.test.d.ts.map +1 -0
  435. package/index.ts +15 -1
  436. package/package.json +28 -2
  437. package/src/api/plugin/CommandFactory.ts +25 -0
  438. package/src/api/plugin/ServiceProviderFactory.ts +27 -0
  439. package/src/api/service/core/PluginService.ts +63 -0
  440. package/src/cli/DynamicPluginRuntimeCLI.ts +77 -0
  441. package/src/command/PluginCommand.ts +184 -0
  442. package/src/launcher.ts +35 -0
  443. package/src/service/plugin/DefaultPluginService.ts +37 -0
  444. package/src/service/plugin/DefaultPluginServiceProvider.ts +29 -0
  445. package/.github/workflows/check-bun-dependencies.yml +0 -12
  446. package/.github/workflows/lint-pr-message.yml +0 -13
  447. package/.github/workflows/release-bun-library.yml +0 -15
  448. package/.github/workflows/validate-bun-library-pr.yml +0 -10
  449. package/README/core-commands.md +0 -40
  450. package/README/core-service-providers.md +0 -198
  451. package/README/development.md +0 -57
  452. package/README/implementation-details.md +0 -474
  453. package/README/key-concepts.md +0 -751
  454. package/bun.lock +0 -156
  455. package/tests/cli/BaseCLI.test.ts +0 -283
  456. package/tests/command/CompletionCommand.test.ts +0 -63
  457. package/tests/command/MultiCommandCliHelpCommand.test.ts +0 -496
  458. package/tests/command/SingleCommandCliHelpCommand.test.ts +0 -302
  459. package/tests/command/UsageCommand.test.ts +0 -48
  460. package/tests/command/VersionCommand.test.ts +0 -37
  461. package/tests/fixtures/CLIConfig.ts +0 -9
  462. package/tests/fixtures/Command.ts +0 -248
  463. package/tests/fixtures/ConfigurationServiceProvider.ts +0 -28
  464. package/tests/fixtures/Context.ts +0 -32
  465. package/tests/fixtures/ServiceProviderRegistry.ts +0 -16
  466. package/tests/fixtures/StreamString.ts +0 -37
  467. package/tests/fixtures/prettierPluginFoo.ts +0 -31
  468. package/tests/fixtures/util.ts +0 -35
  469. package/tests/runtime/DefaultContext.test.ts +0 -20
  470. package/tests/runtime/argument/ArgumentTypeGuards.test.ts +0 -47
  471. package/tests/runtime/command/CommandTypeGuards.test.ts +0 -43
  472. package/tests/runtime/command/CommandValidator.test.ts +0 -1196
  473. package/tests/runtime/parser.test.ts +0 -744
  474. package/tests/runtime/registry/DefaultCommandRegistry.test.ts +0 -144
  475. package/tests/runtime/registry/DefaultServiceProviderRegistry.test.ts +0 -36
  476. package/tests/runtime/runner.test.ts +0 -1284
  477. package/tests/runtime/scanner.test.ts +0 -915
  478. package/tests/runtime/values/argumentValueMerge.test.ts +0 -366
  479. package/tests/runtime/values/argumentValueValidation.test.ts +0 -1090
  480. package/tests/runtime/values/globalCommandValuePopulation.test.ts +0 -480
  481. package/tests/runtime/values/subCommandValuePopulation.test.ts +0 -2430
  482. package/tests/service/argumentPrompter/ArgumentPrompterServiceProvider.test.ts +0 -38
  483. package/tests/service/argumentPrompter/DefaultArgumentPrompterService.test.ts +0 -745
  484. package/tests/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.test.ts +0 -17
  485. package/tests/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.test.ts +0 -208
  486. package/tests/service/asciiBannerGenerator/__snapshots__/DefaultAsciiBannerGeneratorService.test.ts.snap +0 -20
  487. package/tests/service/asciiBannerGenerator/small.flf.json +0 -3
  488. package/tests/service/banner/BannerServiceProvider.test.ts +0 -87
  489. package/tests/service/banner/__snapshots__/BannerServiceProvider.test.ts.snap +0 -16
  490. package/tests/service/banner/command/NoBannerCommand.test.ts +0 -18
  491. package/tests/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.test.ts +0 -52
  492. package/tests/service/completion/CompletionServiceProvider.test.ts +0 -335
  493. package/tests/service/completion/DefaultCompletionService.test.ts +0 -216
  494. package/tests/service/completion/shell/bash.test.ts +0 -73
  495. package/tests/service/completion/shell/fish.test.ts +0 -60
  496. package/tests/service/completion/shell/powershell.test.ts +0 -59
  497. package/tests/service/completion/shell/zsh.test.ts +0 -60
  498. package/tests/service/configuration/ConfigurationServiceProvider.test.ts +0 -212
  499. package/tests/service/configuration/DefaultKeyValueService.test.ts +0 -155
  500. package/tests/service/configuration/DefaultSecretService.test.ts +0 -140
  501. package/tests/service/configuration/command/ConfigCommand.test.ts +0 -29
  502. package/tests/service/configuration/command/DumpConfigCommand.test.ts +0 -51
  503. package/tests/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.test.ts +0 -51
  504. package/tests/service/dataDumpGenerator/DefaultDataDumpGeneratorService.test.ts +0 -208
  505. package/tests/service/imagePrinter/DefaultImagePrinterService.test.ts +0 -31
  506. package/tests/service/imagePrinter/ImagePrinterServiceProvider.test.ts +0 -17
  507. package/tests/service/prettyPrinter/DefaultPrettyPrinterService.test.ts +0 -46
  508. package/tests/service/prettyPrinter/PrettyPrinterServiceProvider.test.ts +0 -37
  509. package/tests/service/printer/DefaultPrinterService.test.ts +0 -530
  510. package/tests/service/printer/PrinterServiceProvider.test.ts +0 -34
  511. package/tests/service/printer/command/DarkModeCommand.test.ts +0 -75
  512. package/tests/service/printer/command/LogLevelCommand.test.ts +0 -47
  513. package/tests/service/printer/command/NoColorCommand.test.ts +0 -75
  514. package/tests/service/printer/command/NoHyperlinksCommand.test.ts +0 -75
  515. package/tests/service/printer/terminal/Progress.test.ts +0 -98
  516. package/tests/service/printer/terminal/Spinner.test.ts +0 -92
  517. package/tests/service/prompter/DefaultPrompterService.test.ts +0 -598
  518. package/tests/service/prompter/PrompterServiceProvider.test.ts +0 -41
  519. package/tests/service/prompter/command/NoPromptCommand.test.ts +0 -58
  520. package/tests/service/prompter/prompt/PromptContext.test.ts +0 -61
  521. package/tests/service/shutdown/ShutdownServiceProvider.test.ts +0 -13
  522. package/tests/service/syntaxHighlighter/DefaultSyntaxHighlighterService.test.ts +0 -101
  523. package/tests/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.test.ts +0 -37
  524. package/tests/service/tableGenerator/DefaultTableGeneratorService.test.ts +0 -342
  525. package/tests/service/tableGenerator/TableGeneratorServiceProvider.test.ts +0 -47
  526. package/tests/service/treePrinter/DefaultTreePrinterService.test.ts +0 -142
  527. package/tests/service/treePrinter/TreePrinterServiceProvider.test.ts +0 -51
  528. package/tests/terminal/ImageRenderer.test.ts +0 -152
  529. package/tests/terminal/PngDecoder.test.ts +0 -219
  530. package/tests/terminal/supportsHyperlinks.test.ts +0 -149
  531. package/tests/util/configHelper.test.ts +0 -193
  532. package/tests/util/envVarHelper.test.ts +0 -254
  533. package/tests/util/logger.test.ts +0 -56
  534. package/tsconfig.json +0 -32
@@ -1,2430 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
- import populateSubCommandValues from "../../../src/runtime/values/subCommandValuePopulation.ts";
3
- import {
4
- ArgumentValueTypeName,
5
- ComplexValueTypeName,
6
- type PopulatedArgumentValues,
7
- } from "../../../src/api/argument/ArgumentValueTypes.ts";
8
- import type { SubCommandValuePopulationResult } from "../../../src/runtime/values/ValuePopulationResult.ts";
9
- import { InvalidArgumentReason } from "../../../src/api/RunResult.ts";
10
- import type SubCommand from "../../../src/api/command/SubCommand.ts";
11
- import type ComplexOption from "../../../src/api/argument/ComplexOption.ts";
12
-
13
- function expectExtractResult(
14
- result: SubCommandValuePopulationResult,
15
- values: PopulatedArgumentValues,
16
- unusedArgs: ReadonlyArray<string>,
17
- ) {
18
- expect(result.populatedArgumentValues).toEqual(values);
19
- expect(result.unusedArgs).toEqual(unusedArgs);
20
- }
21
- describe("subCommandValuePopulation tests", () => {
22
- test("Option argument", () => {
23
- const command: SubCommand = {
24
- name: "command",
25
- options: [
26
- {
27
- name: "foo",
28
- type: ArgumentValueTypeName.STRING,
29
- shortAlias: "f",
30
- },
31
- ],
32
- positionals: [],
33
- execute: async (): Promise<void> => {},
34
- };
35
-
36
- let result = populateSubCommandValues(command, ["--foo", "bar"], undefined);
37
- expectExtractResult(result, { foo: "bar" }, []);
38
- expect(result.invalidArgument).toBeUndefined();
39
-
40
- result = populateSubCommandValues(command, ["--foo=bar"], undefined);
41
- expectExtractResult(result, { foo: "bar" }, []);
42
- expect(result.invalidArgument).toBeUndefined();
43
-
44
- result = populateSubCommandValues(command, ["-f", "bar"], undefined);
45
- expectExtractResult(result, { foo: "bar" }, []);
46
- expect(result.invalidArgument).toBeUndefined();
47
-
48
- result = populateSubCommandValues(command, ["-f=bar"], undefined);
49
- expectExtractResult(result, { foo: "bar" }, []);
50
- expect(result.invalidArgument).toBeUndefined();
51
-
52
- result = populateSubCommandValues(command, ["--foo", "goo=1 and goo=2"], undefined);
53
- expectExtractResult(result, { foo: "goo=1 and goo=2" }, []);
54
- expect(result.invalidArgument).toBeUndefined();
55
-
56
- result = populateSubCommandValues(command, ["--foo=goo=1 and goo=2"], undefined);
57
- expectExtractResult(result, { foo: "goo=1 and goo=2" }, []);
58
- expect(result.invalidArgument).toBeUndefined();
59
- });
60
-
61
- test("Option types", () => {
62
- let command: SubCommand = {
63
- name: "command",
64
- options: [
65
- {
66
- name: "foo",
67
- shortAlias: "f",
68
- type: ArgumentValueTypeName.NUMBER,
69
- },
70
- ],
71
- positionals: [],
72
- execute: async (): Promise<void> => {},
73
- };
74
-
75
- let result = populateSubCommandValues(command, ["--foo", "1.1"], undefined);
76
- expectExtractResult(result, { foo: "1.1" }, []);
77
- expect(result.invalidArgument).toBeUndefined();
78
-
79
- command = {
80
- name: "command",
81
- options: [
82
- {
83
- name: "foo",
84
- shortAlias: "f",
85
- type: ArgumentValueTypeName.INTEGER,
86
- },
87
- ],
88
- positionals: [],
89
- execute: async (): Promise<void> => {},
90
- };
91
-
92
- result = populateSubCommandValues(command, ["-f", "1"], undefined);
93
- expectExtractResult(result, { foo: "1" }, []);
94
- expect(result.invalidArgument).toBeUndefined();
95
-
96
- command = {
97
- name: "command",
98
- options: [
99
- {
100
- name: "foo",
101
- shortAlias: "f",
102
- type: ArgumentValueTypeName.SECRET,
103
- },
104
- ],
105
- positionals: [],
106
- execute: async (): Promise<void> => {},
107
- };
108
-
109
- result = populateSubCommandValues(command, ["-f", "xxx"], undefined);
110
- expectExtractResult(result, { foo: "xxx" }, []);
111
- expect(result.invalidArgument).toBeUndefined();
112
-
113
- command = {
114
- name: "command",
115
- options: [
116
- {
117
- name: "foo",
118
- shortAlias: "f",
119
- type: ArgumentValueTypeName.STRING,
120
- },
121
- ],
122
- positionals: [],
123
- execute: async (): Promise<void> => {},
124
- };
125
-
126
- result = populateSubCommandValues(command, ["-f", "bar"], undefined);
127
- expectExtractResult(result, { foo: "bar" }, []);
128
- expect(result.invalidArgument).toBeUndefined();
129
-
130
- command = {
131
- name: "command",
132
- options: [
133
- {
134
- name: "foo",
135
- shortAlias: "f",
136
- type: ArgumentValueTypeName.BOOLEAN,
137
- },
138
- ],
139
- positionals: [],
140
- execute: async (): Promise<void> => {},
141
- };
142
-
143
- result = populateSubCommandValues(command, ["-f"], undefined);
144
- expectExtractResult(result, { foo: "true" }, []);
145
- expect(result.invalidArgument).toBeUndefined();
146
- });
147
-
148
- test("Option array", () => {
149
- const command: SubCommand = {
150
- name: "command",
151
- options: [
152
- {
153
- name: "foo",
154
- type: ArgumentValueTypeName.STRING,
155
- shortAlias: "f",
156
- isArray: true,
157
- },
158
- ],
159
- positionals: [],
160
- execute: async (): Promise<void> => {},
161
- };
162
-
163
- let result = populateSubCommandValues(command, ["--foo", "bar"], undefined);
164
- expectExtractResult(result, { foo: ["bar"] }, []);
165
- expect(result.invalidArgument).toBeUndefined();
166
-
167
- result = populateSubCommandValues(command, ["--foo", "bar", "--foo", "bar"], undefined);
168
- expectExtractResult(result, { foo: ["bar", "bar"] }, []);
169
- expect(result.invalidArgument).toBeUndefined();
170
-
171
- result = populateSubCommandValues(command, ["--foo=bar", "--foo", "bar"], undefined);
172
- expectExtractResult(result, { foo: ["bar", "bar"] }, []);
173
- expect(result.invalidArgument).toBeUndefined();
174
-
175
- result = populateSubCommandValues(command, ["--foo=bar", "-f", "bar"], undefined);
176
- expectExtractResult(result, { foo: ["bar", "bar"] }, []);
177
- expect(result.invalidArgument).toBeUndefined();
178
-
179
- result = populateSubCommandValues(command, ["--foo=bar", "-f=bar"], undefined);
180
- expectExtractResult(result, { foo: ["bar", "bar"] }, []);
181
- expect(result.invalidArgument).toBeUndefined();
182
- });
183
-
184
- test("Option argument configured value is overridden by arg", () => {
185
- let command: SubCommand = {
186
- name: "command",
187
- options: [
188
- {
189
- name: "foo",
190
- type: ArgumentValueTypeName.STRING,
191
- },
192
- ],
193
- positionals: [],
194
- execute: async (): Promise<void> => {},
195
- };
196
-
197
- let result = populateSubCommandValues(command, ["--foo", "bar"], {
198
- foo: "nope",
199
- });
200
- expectExtractResult(result, { foo: "bar" }, []);
201
- expect(result.invalidArgument).toBeUndefined();
202
-
203
- command = {
204
- name: "command",
205
- options: [
206
- {
207
- name: "foo",
208
- type: ArgumentValueTypeName.NUMBER,
209
- },
210
- ],
211
- positionals: [],
212
- execute: async (): Promise<void> => {},
213
- };
214
-
215
- result = populateSubCommandValues(command, ["--foo", "1"], { foo: 2 });
216
- expectExtractResult(result, { foo: "1" }, []);
217
- expect(result.invalidArgument).toBeUndefined();
218
-
219
- command = {
220
- name: "command",
221
- options: [
222
- {
223
- name: "foo",
224
- type: ArgumentValueTypeName.BOOLEAN,
225
- },
226
- ],
227
- positionals: [],
228
- execute: async (): Promise<void> => {},
229
- };
230
-
231
- result = populateSubCommandValues(command, ["--foo", "true"], {
232
- foo: false,
233
- });
234
- expectExtractResult(result, { foo: "true" }, []);
235
- expect(result.invalidArgument).toBeUndefined();
236
- });
237
-
238
- test("Option argument default value is overridden by configured value", () => {
239
- let command: SubCommand = {
240
- name: "command",
241
- options: [
242
- {
243
- name: "foo",
244
- type: ArgumentValueTypeName.STRING,
245
- defaultValue: "nope",
246
- },
247
- ],
248
- positionals: [],
249
- execute: async (): Promise<void> => {},
250
- };
251
-
252
- let result = populateSubCommandValues(command, [], { foo: "bar" });
253
- expectExtractResult(result, { foo: "bar" }, []);
254
- expect(result.invalidArgument).toBeUndefined();
255
-
256
- command = {
257
- name: "command",
258
- options: [
259
- {
260
- name: "foo",
261
- type: ArgumentValueTypeName.NUMBER,
262
- defaultValue: 2,
263
- },
264
- ],
265
- positionals: [],
266
- execute: async (): Promise<void> => {},
267
- };
268
-
269
- result = populateSubCommandValues(command, [], { foo: 1 });
270
- expectExtractResult(result, { foo: 1 }, []);
271
- expect(result.invalidArgument).toBeUndefined();
272
-
273
- command = {
274
- name: "command",
275
- options: [
276
- {
277
- name: "foo",
278
- type: ArgumentValueTypeName.BOOLEAN,
279
- defaultValue: false,
280
- },
281
- ],
282
- positionals: [],
283
- execute: async (): Promise<void> => {},
284
- };
285
-
286
- result = populateSubCommandValues(command, [], { foo: true });
287
- expectExtractResult(result, { foo: true }, []);
288
- expect(result.invalidArgument).toBeUndefined();
289
- });
290
-
291
- test("Option argument default value is overridden by arg", () => {
292
- let command: SubCommand = {
293
- name: "command",
294
- options: [
295
- {
296
- name: "foo",
297
- type: ArgumentValueTypeName.STRING,
298
- defaultValue: "nope",
299
- },
300
- ],
301
- positionals: [],
302
- execute: async (): Promise<void> => {},
303
- };
304
-
305
- let result = populateSubCommandValues(command, ["--foo", "bar"], undefined);
306
- expectExtractResult(result, { foo: "bar" }, []);
307
- expect(result.invalidArgument).toBeUndefined();
308
-
309
- command = {
310
- name: "command",
311
- options: [
312
- {
313
- name: "foo",
314
- type: ArgumentValueTypeName.NUMBER,
315
- defaultValue: 2,
316
- },
317
- ],
318
- positionals: [],
319
- execute: async (): Promise<void> => {},
320
- };
321
-
322
- result = populateSubCommandValues(command, ["--foo", "1"], undefined);
323
- expectExtractResult(result, { foo: "1" }, []);
324
- expect(result.invalidArgument).toBeUndefined();
325
-
326
- command = {
327
- name: "command",
328
- options: [
329
- {
330
- name: "foo",
331
- type: ArgumentValueTypeName.BOOLEAN,
332
- defaultValue: true,
333
- },
334
- ],
335
- positionals: [],
336
- execute: async (): Promise<void> => {},
337
- };
338
-
339
- result = populateSubCommandValues(command, ["--foo", "false"], undefined);
340
- expectExtractResult(result, { foo: "false" }, []);
341
- expect(result.invalidArgument).toBeUndefined();
342
- });
343
-
344
- test("Option argument configured value is used if no arg provided", () => {
345
- let command: SubCommand = {
346
- name: "command",
347
- options: [
348
- {
349
- name: "foo",
350
- type: ArgumentValueTypeName.STRING,
351
- },
352
- ],
353
- positionals: [],
354
- execute: async (): Promise<void> => {},
355
- };
356
-
357
- let result = populateSubCommandValues(command, [], { foo: "bar" });
358
- expectExtractResult(result, { foo: "bar" }, []);
359
- expect(result.invalidArgument).toBeUndefined();
360
-
361
- command = {
362
- name: "command",
363
- options: [
364
- {
365
- name: "foo",
366
- type: ArgumentValueTypeName.NUMBER,
367
- },
368
- ],
369
- positionals: [],
370
- execute: async (): Promise<void> => {},
371
- };
372
-
373
- result = populateSubCommandValues(command, [], { foo: 1 });
374
- expectExtractResult(result, { foo: 1 }, []);
375
- expect(result.invalidArgument).toBeUndefined();
376
-
377
- command = {
378
- name: "command",
379
- options: [
380
- {
381
- name: "foo",
382
- type: ArgumentValueTypeName.BOOLEAN,
383
- },
384
- ],
385
- positionals: [],
386
- execute: async (): Promise<void> => {},
387
- };
388
-
389
- result = populateSubCommandValues(command, [], { foo: false });
390
- expectExtractResult(result, { foo: false }, []);
391
- expect(result.invalidArgument).toBeUndefined();
392
- });
393
-
394
- test("Two options", () => {
395
- let command: SubCommand = {
396
- name: "command",
397
- options: [
398
- {
399
- name: "foo",
400
- type: ArgumentValueTypeName.STRING,
401
- isArray: false,
402
- },
403
- {
404
- name: "goo",
405
- type: ArgumentValueTypeName.STRING,
406
- },
407
- ],
408
- positionals: [],
409
- execute: async (): Promise<void> => {},
410
- };
411
-
412
- let result = populateSubCommandValues(command, ["--foo", "bar", "--goo=gar"], undefined);
413
- expectExtractResult(result, { foo: "bar", goo: "gar" }, []);
414
- expect(result.invalidArgument).toBeUndefined();
415
-
416
- command = {
417
- name: "command",
418
- options: [
419
- {
420
- name: "foo",
421
- type: ArgumentValueTypeName.BOOLEAN,
422
- isArray: false,
423
- },
424
- {
425
- name: "goo",
426
- type: ArgumentValueTypeName.STRING,
427
- },
428
- ],
429
- positionals: [],
430
- execute: async (): Promise<void> => {},
431
- };
432
-
433
- result = populateSubCommandValues(command, ["--foo", "--goo=gar"], undefined);
434
- expectExtractResult(result, { foo: "true", goo: "gar" }, []);
435
- expect(result.invalidArgument).toBeUndefined();
436
-
437
- command = {
438
- name: "command",
439
- options: [
440
- {
441
- name: "foo",
442
- type: ArgumentValueTypeName.BOOLEAN,
443
- isArray: true,
444
- },
445
- {
446
- name: "goo",
447
- type: ArgumentValueTypeName.STRING,
448
- },
449
- ],
450
- positionals: [],
451
- execute: async (): Promise<void> => {},
452
- };
453
-
454
- result = populateSubCommandValues(command, ["--foo", "--foo", "false", "--goo=gar"], undefined);
455
- expectExtractResult(result, { foo: ["true", "false"], goo: "gar" }, []);
456
- expect(result.invalidArgument).toBeUndefined();
457
- });
458
-
459
- test("Interleaved option arrays", () => {
460
- const command: SubCommand = {
461
- name: "command",
462
- options: [
463
- {
464
- name: "foo",
465
- type: ArgumentValueTypeName.STRING,
466
- isArray: true,
467
- },
468
- {
469
- name: "goo",
470
- type: ArgumentValueTypeName.BOOLEAN,
471
- isArray: true,
472
- shortAlias: "g",
473
- },
474
- ],
475
- positionals: [],
476
- execute: async (): Promise<void> => {},
477
- };
478
-
479
- let result = populateSubCommandValues(
480
- command,
481
- ["--foo", "bar1", "--goo=true", "--foo", "bar2", "--goo=false"],
482
- undefined,
483
- );
484
- expectExtractResult(
485
- result,
486
- {
487
- foo: ["bar1", "bar2"],
488
- goo: ["true", "false"],
489
- },
490
- [],
491
- );
492
- expect(result.invalidArgument).toBeUndefined();
493
-
494
- result = populateSubCommandValues(
495
- command,
496
- ["--foo", "bar1", "--goo=true", "--goo=false", "--foo", "bar2"],
497
- undefined,
498
- );
499
- expectExtractResult(
500
- result,
501
- {
502
- foo: ["bar1", "bar2"],
503
- goo: ["true", "false"],
504
- },
505
- [],
506
- );
507
- expect(result.invalidArgument).toBeUndefined();
508
-
509
- result = populateSubCommandValues(
510
- command,
511
- ["--foo", "bar1", "-g", "--foo", "bar2", "-g=false"],
512
- undefined,
513
- );
514
- expectExtractResult(
515
- result,
516
- {
517
- foo: ["bar1", "bar2"],
518
- goo: ["true", "false"],
519
- },
520
- [],
521
- );
522
- expect(result.invalidArgument).toBeUndefined();
523
- });
524
-
525
- test("Unknown option name", () => {
526
- const command: SubCommand = {
527
- name: "command",
528
- options: [
529
- {
530
- name: "foo",
531
- type: ArgumentValueTypeName.STRING,
532
- },
533
- ],
534
- positionals: [],
535
- execute: async (): Promise<void> => {},
536
- };
537
-
538
- let result = populateSubCommandValues(command, ["--goo=moo"], undefined);
539
- expectExtractResult(result, {}, ["--goo=moo"]);
540
- expect(result.invalidArgument).toBeUndefined();
541
-
542
- result = populateSubCommandValues(command, ["--goo", "moo"], undefined);
543
- expectExtractResult(result, {}, ["--goo", "moo"]);
544
- expect(result.invalidArgument).toBeUndefined();
545
- });
546
-
547
- test("Illegal option syntax", () => {
548
- const command: SubCommand = {
549
- name: "command",
550
- options: [
551
- {
552
- name: "foo",
553
- shortAlias: "f",
554
- type: ArgumentValueTypeName.STRING,
555
- },
556
- ],
557
- positionals: [],
558
- execute: async (): Promise<void> => {},
559
- };
560
-
561
- let result = populateSubCommandValues(command, ["-foo=moo"], undefined);
562
- expectExtractResult(result, {}, ["-foo=moo"]);
563
- expect(result.invalidArgument).toBeUndefined();
564
-
565
- result = populateSubCommandValues(command, ["--f", "moo"], undefined);
566
- expectExtractResult(result, {}, ["--f", "moo"]);
567
- expect(result.invalidArgument).toBeUndefined();
568
-
569
- result = populateSubCommandValues(command, ["--foo=", "moo"], undefined);
570
- expectExtractResult(result, {}, ["moo"]);
571
- expect(result.invalidArgument).toEqual({
572
- name: "foo",
573
- reason: InvalidArgumentReason.MISSING_VALUE,
574
- });
575
-
576
- result = populateSubCommandValues(command, ["-f=", "moo"], undefined);
577
- expectExtractResult(result, {}, ["moo"]);
578
- expect(result.invalidArgument).toEqual({
579
- name: "f",
580
- reason: InvalidArgumentReason.MISSING_VALUE,
581
- });
582
- });
583
-
584
- test("Positional argument", () => {
585
- let command: SubCommand = {
586
- name: "command",
587
- options: [],
588
- positionals: [
589
- {
590
- name: "foo",
591
- type: ArgumentValueTypeName.STRING,
592
- },
593
- ],
594
- execute: async (): Promise<void> => {},
595
- };
596
-
597
- let result = populateSubCommandValues(command, ["bar"], undefined);
598
- expectExtractResult(result, { foo: "bar" }, []);
599
- expect(result.invalidArgument).toBeUndefined();
600
-
601
- command = {
602
- name: "command",
603
- options: [],
604
- positionals: [
605
- {
606
- name: "foo",
607
- type: ArgumentValueTypeName.STRING,
608
- },
609
- {
610
- name: "bar",
611
- type: ArgumentValueTypeName.STRING,
612
- },
613
- ],
614
- execute: async (): Promise<void> => {},
615
- };
616
-
617
- result = populateSubCommandValues(command, ["foo", "bar"], undefined);
618
- expectExtractResult(result, { foo: "foo", bar: "bar" }, []);
619
- expect(result.invalidArgument).toBeUndefined();
620
- });
621
-
622
- test("Positional types", () => {
623
- let command: SubCommand = {
624
- name: "command",
625
- options: [],
626
- positionals: [
627
- {
628
- name: "foo",
629
- type: ArgumentValueTypeName.NUMBER,
630
- },
631
- ],
632
- execute: async (): Promise<void> => {},
633
- };
634
-
635
- let result = populateSubCommandValues(command, ["1"], undefined);
636
- expectExtractResult(result, { foo: "1" }, []);
637
- expect(result.invalidArgument).toBeUndefined();
638
-
639
- command = {
640
- name: "command",
641
- options: [],
642
- positionals: [
643
- {
644
- name: "foo",
645
- type: ArgumentValueTypeName.STRING,
646
- },
647
- ],
648
- execute: async (): Promise<void> => {},
649
- };
650
- result = populateSubCommandValues(command, ["bar"], undefined);
651
- expectExtractResult(result, { foo: "bar" }, []);
652
- expect(result.invalidArgument).toBeUndefined();
653
-
654
- command = {
655
- name: "command",
656
- options: [],
657
- positionals: [
658
- {
659
- name: "foo",
660
- type: ArgumentValueTypeName.BOOLEAN,
661
- },
662
- ],
663
- execute: async (): Promise<void> => {},
664
- };
665
- result = populateSubCommandValues(command, ["true"], undefined);
666
- expectExtractResult(result, { foo: "true" }, []);
667
- expect(result.invalidArgument).toBeUndefined();
668
- });
669
-
670
- test("Multiple positionals", () => {
671
- const command: SubCommand = {
672
- name: "command",
673
- options: [],
674
- positionals: [
675
- {
676
- name: "foo1",
677
- type: ArgumentValueTypeName.STRING,
678
- },
679
- {
680
- name: "foo2",
681
- type: ArgumentValueTypeName.STRING,
682
- },
683
- ],
684
- execute: async (): Promise<void> => {},
685
- };
686
-
687
- const result = populateSubCommandValues(command, ["f1", "f2"], undefined);
688
- expectExtractResult(result, { foo1: "f1", foo2: "f2" }, []);
689
- expect(result.invalidArgument).toBeUndefined();
690
- });
691
-
692
- test("Positional varargs", () => {
693
- const command: SubCommand = {
694
- name: "command",
695
- options: [],
696
- positionals: [
697
- {
698
- name: "foo",
699
- type: ArgumentValueTypeName.STRING,
700
- isVarargMultiple: true,
701
- isVarargOptional: true,
702
- },
703
- ],
704
- execute: async (): Promise<void> => {},
705
- };
706
-
707
- let result = populateSubCommandValues(command, ["bar", "bar"], undefined);
708
- expectExtractResult(result, { foo: ["bar", "bar"] }, []);
709
- expect(result.invalidArgument).toBeUndefined();
710
-
711
- result = populateSubCommandValues(command, ["bar"], undefined);
712
- expectExtractResult(result, { foo: ["bar"] }, []);
713
- expect(result.invalidArgument).toBeUndefined();
714
-
715
- result = populateSubCommandValues(command, [], undefined);
716
- expectExtractResult(result, {}, []);
717
- expect(result.invalidArgument).toBeUndefined();
718
- });
719
-
720
- test("Multiple positional and varargs", () => {
721
- const command: SubCommand = {
722
- name: "command",
723
- options: [],
724
- positionals: [
725
- {
726
- name: "foo",
727
- type: ArgumentValueTypeName.STRING,
728
- },
729
- {
730
- name: "bar",
731
- type: ArgumentValueTypeName.STRING,
732
- isVarargMultiple: true,
733
- isVarargOptional: true,
734
- },
735
- ],
736
- execute: async (): Promise<void> => {},
737
- };
738
-
739
- let result = populateSubCommandValues(command, ["foo"], undefined);
740
- expectExtractResult(result, { foo: "foo" }, []);
741
- expect(result.invalidArgument).toBeUndefined();
742
-
743
- result = populateSubCommandValues(command, ["foo", "bar"], undefined);
744
- expectExtractResult(result, { foo: "foo", bar: ["bar"] }, []);
745
- expect(result.invalidArgument).toBeUndefined();
746
-
747
- result = populateSubCommandValues(command, ["foo", "bar", "bar"], undefined);
748
- expectExtractResult(result, { foo: "foo", bar: ["bar", "bar"] }, []);
749
- expect(result.invalidArgument).toBeUndefined();
750
-
751
- result = populateSubCommandValues(command, ["foo"], undefined);
752
- expectExtractResult(result, { foo: "foo" }, []);
753
- expect(result.invalidArgument).toBeUndefined();
754
- });
755
-
756
- test("String options either side of positionals", () => {
757
- const command: SubCommand = {
758
- name: "command",
759
- options: [
760
- {
761
- name: "goo1",
762
- type: ArgumentValueTypeName.STRING,
763
- shortAlias: "1",
764
- },
765
- {
766
- name: "goo2",
767
- type: ArgumentValueTypeName.STRING,
768
- shortAlias: "2",
769
- },
770
- ],
771
- positionals: [
772
- {
773
- name: "foo1",
774
- type: ArgumentValueTypeName.STRING,
775
- },
776
- {
777
- name: "foo2",
778
- type: ArgumentValueTypeName.STRING,
779
- },
780
- ],
781
- execute: async (): Promise<void> => {},
782
- };
783
-
784
- let result = populateSubCommandValues(
785
- command,
786
- ["--goo1=g1", "f1", "f2", "--goo2=g2"],
787
- undefined,
788
- );
789
- expectExtractResult(
790
- result,
791
- {
792
- goo1: "g1",
793
- goo2: "g2",
794
- foo1: "f1",
795
- foo2: "f2",
796
- },
797
- [],
798
- );
799
- expect(result.invalidArgument).toBeUndefined();
800
-
801
- result = populateSubCommandValues(
802
- command,
803
- ["--goo1", "g1", "f1", "f2", "--goo2", "g2"],
804
- undefined,
805
- );
806
- expectExtractResult(
807
- result,
808
- {
809
- goo1: "g1",
810
- goo2: "g2",
811
- foo1: "f1",
812
- foo2: "f2",
813
- },
814
- [],
815
- );
816
- expect(result.invalidArgument).toBeUndefined();
817
-
818
- result = populateSubCommandValues(command, ["-1", "g1", "f1", "f2", "-2", "g2"], undefined);
819
- expectExtractResult(
820
- result,
821
- {
822
- goo1: "g1",
823
- goo2: "g2",
824
- foo1: "f1",
825
- foo2: "f2",
826
- },
827
- [],
828
- );
829
- expect(result.invalidArgument).toBeUndefined();
830
- });
831
-
832
- test("Boolean options either side of positionals", () => {
833
- const command: SubCommand = {
834
- name: "command",
835
- options: [
836
- {
837
- name: "goo1",
838
- shortAlias: "1",
839
- type: ArgumentValueTypeName.BOOLEAN,
840
- },
841
- {
842
- name: "goo2",
843
- shortAlias: "2",
844
- type: ArgumentValueTypeName.BOOLEAN,
845
- },
846
- ],
847
- positionals: [
848
- {
849
- name: "foo1",
850
- type: ArgumentValueTypeName.STRING,
851
- },
852
- {
853
- name: "foo2",
854
- type: ArgumentValueTypeName.STRING,
855
- },
856
- ],
857
- execute: async (): Promise<void> => {},
858
- };
859
-
860
- let result = populateSubCommandValues(command, ["--goo1", "f1", "f2", "--goo2"], undefined);
861
- expectExtractResult(
862
- result,
863
- {
864
- goo1: "true",
865
- goo2: "true",
866
- foo1: "f1",
867
- foo2: "f2",
868
- },
869
- [],
870
- );
871
- expect(result.invalidArgument).toBeUndefined();
872
-
873
- result = populateSubCommandValues(
874
- command,
875
- ["--goo1", "true", "f1", "f2", "--goo2", "false"],
876
- undefined,
877
- );
878
- expectExtractResult(
879
- result,
880
- {
881
- goo1: "true",
882
- goo2: "false",
883
- foo1: "f1",
884
- foo2: "f2",
885
- },
886
- [],
887
- );
888
- expect(result.invalidArgument).toBeUndefined();
889
-
890
- result = populateSubCommandValues(
891
- command,
892
- ["-1", "true", "f1", "f2", "-2", "false"],
893
- undefined,
894
- );
895
- expectExtractResult(
896
- result,
897
- {
898
- goo1: "true",
899
- goo2: "false",
900
- foo1: "f1",
901
- foo2: "f2",
902
- },
903
- [],
904
- );
905
- expect(result.invalidArgument).toBeUndefined();
906
- });
907
-
908
- test("Option array either side of positional", () => {
909
- let command: SubCommand = {
910
- name: "command",
911
- options: [
912
- {
913
- name: "foo",
914
- isArray: true,
915
- type: ArgumentValueTypeName.STRING,
916
- },
917
- ],
918
- positionals: [
919
- {
920
- name: "goo",
921
- type: ArgumentValueTypeName.STRING,
922
- },
923
- ],
924
- execute: async (): Promise<void> => {},
925
- };
926
-
927
- let result = populateSubCommandValues(
928
- command,
929
- ["--foo", "f1", "goo1", "--foo", "f2"],
930
- undefined,
931
- );
932
- expectExtractResult(
933
- result,
934
- {
935
- foo: ["f1", "f2"],
936
- goo: "goo1",
937
- },
938
- [],
939
- );
940
- expect(result.invalidArgument).toBeUndefined();
941
-
942
- command = {
943
- name: "command",
944
- options: [
945
- {
946
- name: "foo",
947
- isArray: true,
948
- type: ArgumentValueTypeName.BOOLEAN,
949
- },
950
- ],
951
- positionals: [
952
- {
953
- name: "goo",
954
- type: ArgumentValueTypeName.STRING,
955
- },
956
- ],
957
- execute: async (): Promise<void> => {},
958
- };
959
- result = populateSubCommandValues(
960
- command,
961
- ["--foo", "true", "goo1", "--foo", "false"],
962
- undefined,
963
- );
964
- expectExtractResult(
965
- result,
966
- {
967
- foo: ["true", "false"],
968
- goo: "goo1",
969
- },
970
- [],
971
- );
972
- expect(result.invalidArgument).toBeUndefined();
973
-
974
- result = populateSubCommandValues(command, ["--foo", "goo1", "--foo"], undefined);
975
- expectExtractResult(
976
- result,
977
- {
978
- foo: ["true", "true"],
979
- goo: "goo1",
980
- },
981
- [],
982
- );
983
- expect(result.invalidArgument).toBeUndefined();
984
- });
985
-
986
- test("Unused option after used option", () => {
987
- let command: SubCommand = {
988
- name: "command",
989
- options: [
990
- {
991
- name: "foo",
992
- shortAlias: "f",
993
- type: ArgumentValueTypeName.STRING,
994
- },
995
- ],
996
- positionals: [],
997
- execute: async (): Promise<void> => {},
998
- };
999
-
1000
- let result = populateSubCommandValues(command, ["--foo", "bar", "--goo", "gar"], undefined);
1001
- expectExtractResult(result, { foo: "bar" }, ["--goo", "gar"]);
1002
- expect(result.invalidArgument).toBeUndefined();
1003
-
1004
- result = populateSubCommandValues(command, ["--foo=bar", "--goo=gar"], undefined);
1005
- expectExtractResult(result, { foo: "bar" }, ["--goo=gar"]);
1006
- expect(result.invalidArgument).toBeUndefined();
1007
-
1008
- command = {
1009
- name: "command",
1010
- options: [
1011
- {
1012
- name: "foo",
1013
- shortAlias: "f",
1014
- type: ArgumentValueTypeName.BOOLEAN,
1015
- },
1016
- ],
1017
- positionals: [],
1018
- execute: async (): Promise<void> => {},
1019
- };
1020
-
1021
- result = populateSubCommandValues(command, ["-f", "--goo", "gar"], undefined);
1022
- expectExtractResult(result, { foo: "true" }, ["--goo", "gar"]);
1023
- expect(result.invalidArgument).toBeUndefined();
1024
- });
1025
-
1026
- test("Unused option before used option", () => {
1027
- let command: SubCommand = {
1028
- name: "command",
1029
- options: [
1030
- {
1031
- name: "foo",
1032
- shortAlias: "f",
1033
- type: ArgumentValueTypeName.STRING,
1034
- },
1035
- ],
1036
- positionals: [],
1037
- execute: async (): Promise<void> => {},
1038
- };
1039
-
1040
- let result = populateSubCommandValues(command, ["--goo", "gar", "--foo", "bar"], undefined);
1041
- expectExtractResult(result, { foo: "bar" }, ["--goo", "gar"]);
1042
- expect(result.invalidArgument).toBeUndefined();
1043
-
1044
- result = populateSubCommandValues(command, ["--goo=gar", "--foo=bar"], undefined);
1045
- expectExtractResult(result, { foo: "bar" }, ["--goo=gar"]);
1046
- expect(result.invalidArgument).toBeUndefined();
1047
-
1048
- command = {
1049
- name: "command",
1050
- options: [
1051
- {
1052
- name: "foo",
1053
- shortAlias: "f",
1054
- type: ArgumentValueTypeName.BOOLEAN,
1055
- },
1056
- ],
1057
- positionals: [],
1058
- execute: async (): Promise<void> => {},
1059
- };
1060
-
1061
- result = populateSubCommandValues(command, ["--goo", "gar", "-f"], undefined);
1062
- expectExtractResult(result, { foo: "true" }, ["--goo", "gar"]);
1063
- expect(result.invalidArgument).toBeUndefined();
1064
- });
1065
-
1066
- test("Unused option after positional", () => {
1067
- const command: SubCommand = {
1068
- name: "command",
1069
- options: [
1070
- {
1071
- name: "foo1",
1072
- shortAlias: "1",
1073
- type: ArgumentValueTypeName.STRING,
1074
- },
1075
- ],
1076
- positionals: [
1077
- {
1078
- name: "foo2",
1079
- type: ArgumentValueTypeName.STRING,
1080
- },
1081
- ],
1082
- execute: async (): Promise<void> => {},
1083
- };
1084
-
1085
- const result = populateSubCommandValues(
1086
- command,
1087
- ["--foo1", "bar", "foo2", "--goo", "gar"],
1088
- undefined,
1089
- );
1090
- expectExtractResult(result, { foo1: "bar", foo2: "foo2" }, ["--goo", "gar"]);
1091
- expect(result.invalidArgument).toBeUndefined();
1092
- });
1093
-
1094
- test("Unused option before positional", () => {
1095
- const command: SubCommand = {
1096
- name: "command",
1097
- options: [
1098
- {
1099
- name: "foo1",
1100
- shortAlias: "1",
1101
- type: ArgumentValueTypeName.STRING,
1102
- },
1103
- ],
1104
- positionals: [
1105
- {
1106
- name: "foo2",
1107
- type: ArgumentValueTypeName.STRING,
1108
- },
1109
- ],
1110
- execute: async (): Promise<void> => {},
1111
- };
1112
-
1113
- const result = populateSubCommandValues(
1114
- command,
1115
- [
1116
- "--goo", // as this is unrecognised as an option for the command it will be used as a positional value
1117
- "gar",
1118
- "foo2",
1119
- "--foo1",
1120
- "bar",
1121
- ],
1122
- undefined,
1123
- );
1124
- expectExtractResult(result, { foo1: "bar", foo2: "--goo" }, ["gar", "foo2"]);
1125
- expect(result.invalidArgument).toBeUndefined();
1126
- });
1127
-
1128
- test("Unused positional after positional", () => {
1129
- const command: SubCommand = {
1130
- name: "command",
1131
- options: [],
1132
- positionals: [
1133
- {
1134
- name: "foo",
1135
- type: ArgumentValueTypeName.STRING,
1136
- },
1137
- ],
1138
- execute: async (): Promise<void> => {},
1139
- };
1140
-
1141
- const result = populateSubCommandValues(command, ["bar", "goo"], undefined);
1142
- expectExtractResult(result, { foo: "bar" }, ["goo"]);
1143
- expect(result.invalidArgument).toBeUndefined();
1144
- });
1145
-
1146
- test("Unused positional after optional", () => {
1147
- let command: SubCommand = {
1148
- name: "command",
1149
- options: [
1150
- {
1151
- name: "foo",
1152
- type: ArgumentValueTypeName.STRING,
1153
- },
1154
- ],
1155
- positionals: [],
1156
- execute: async (): Promise<void> => {},
1157
- };
1158
-
1159
- let result = populateSubCommandValues(command, ["--foo", "bar", "goo"], undefined);
1160
- expectExtractResult(result, { foo: "bar" }, ["goo"]);
1161
- expect(result.invalidArgument).toBeUndefined();
1162
-
1163
- command = {
1164
- name: "command",
1165
- options: [
1166
- {
1167
- name: "foo",
1168
- type: ArgumentValueTypeName.BOOLEAN,
1169
- },
1170
- ],
1171
- positionals: [],
1172
- execute: async (): Promise<void> => {},
1173
- };
1174
-
1175
- result = populateSubCommandValues(command, ["--foo", "goo"], undefined);
1176
- expectExtractResult(result, { foo: "true" }, ["goo"]);
1177
- expect(result.invalidArgument).toBeUndefined();
1178
- });
1179
-
1180
- test("Positionals either side of options", () => {
1181
- let command: SubCommand = {
1182
- name: "command",
1183
- options: [
1184
- {
1185
- name: "goo1",
1186
- type: ArgumentValueTypeName.STRING,
1187
- },
1188
- {
1189
- name: "goo2",
1190
- type: ArgumentValueTypeName.STRING,
1191
- },
1192
- ],
1193
- positionals: [
1194
- {
1195
- name: "foo1",
1196
- type: ArgumentValueTypeName.STRING,
1197
- },
1198
- {
1199
- name: "foo2",
1200
- type: ArgumentValueTypeName.STRING,
1201
- },
1202
- ],
1203
- execute: async (): Promise<void> => {},
1204
- };
1205
-
1206
- let result = populateSubCommandValues(
1207
- command,
1208
- ["f1", "--goo1", "g1", "--goo2", "g2", "f2"],
1209
- undefined,
1210
- );
1211
- expectExtractResult(
1212
- result,
1213
- {
1214
- goo1: "g1",
1215
- goo2: "g2",
1216
- foo1: "f1",
1217
- foo2: "f2",
1218
- },
1219
- [],
1220
- );
1221
- expect(result.invalidArgument).toBeUndefined();
1222
-
1223
- command = {
1224
- name: "command",
1225
- options: [
1226
- {
1227
- name: "goo1",
1228
- type: ArgumentValueTypeName.BOOLEAN,
1229
- },
1230
- {
1231
- name: "goo2",
1232
- type: ArgumentValueTypeName.STRING,
1233
- },
1234
- ],
1235
- positionals: [
1236
- {
1237
- name: "foo1",
1238
- type: ArgumentValueTypeName.BOOLEAN,
1239
- },
1240
- {
1241
- name: "foo2",
1242
- type: ArgumentValueTypeName.STRING,
1243
- },
1244
- ],
1245
- execute: async (): Promise<void> => {},
1246
- };
1247
-
1248
- result = populateSubCommandValues(command, ["true", "--goo1", "--goo2", "g2", "f2"], undefined);
1249
- expectExtractResult(
1250
- result,
1251
- {
1252
- goo1: "true",
1253
- goo2: "g2",
1254
- foo1: "true",
1255
- foo2: "f2",
1256
- },
1257
- [],
1258
- );
1259
- expect(result.invalidArgument).toBeUndefined();
1260
- });
1261
-
1262
- test("Positionals and non-boolean options interleaved", () => {
1263
- const command: SubCommand = {
1264
- name: "command",
1265
- options: [
1266
- {
1267
- name: "goo1",
1268
- type: ArgumentValueTypeName.STRING,
1269
- },
1270
- {
1271
- name: "goo2",
1272
- type: ArgumentValueTypeName.STRING,
1273
- },
1274
- ],
1275
- positionals: [
1276
- {
1277
- name: "foo1",
1278
- type: ArgumentValueTypeName.STRING,
1279
- },
1280
- {
1281
- name: "foo2",
1282
- type: ArgumentValueTypeName.STRING,
1283
- },
1284
- ],
1285
- execute: async (): Promise<void> => {},
1286
- };
1287
-
1288
- let result = populateSubCommandValues(
1289
- command,
1290
- ["f1", "--goo1", "g1", "f2", "--goo2", "g2"],
1291
- undefined,
1292
- );
1293
- expectExtractResult(
1294
- result,
1295
- {
1296
- goo1: "g1",
1297
- goo2: "g2",
1298
- foo1: "f1",
1299
- foo2: "f2",
1300
- },
1301
- [],
1302
- );
1303
- expect(result.invalidArgument).toBeUndefined();
1304
-
1305
- result = populateSubCommandValues(
1306
- command,
1307
- ["--goo1", "g1", "f1", "--goo2", "g2", "f2"],
1308
- undefined,
1309
- );
1310
- expectExtractResult(
1311
- result,
1312
- {
1313
- goo1: "g1",
1314
- goo2: "g2",
1315
- foo1: "f1",
1316
- foo2: "f2",
1317
- },
1318
- [],
1319
- );
1320
- expect(result.invalidArgument).toBeUndefined();
1321
- });
1322
-
1323
- test("Positionals and boolean options interleaved", () => {
1324
- const command: SubCommand = {
1325
- name: "command",
1326
- options: [
1327
- {
1328
- name: "goo1",
1329
- type: ArgumentValueTypeName.BOOLEAN,
1330
- },
1331
- {
1332
- name: "goo2",
1333
- type: ArgumentValueTypeName.BOOLEAN,
1334
- },
1335
- ],
1336
- positionals: [
1337
- {
1338
- name: "foo1",
1339
- type: ArgumentValueTypeName.STRING,
1340
- },
1341
- {
1342
- name: "foo2",
1343
- type: ArgumentValueTypeName.STRING,
1344
- },
1345
- ],
1346
- execute: async (): Promise<void> => {},
1347
- };
1348
-
1349
- let result = populateSubCommandValues(
1350
- command,
1351
- ["f1", "--goo1", "true", "f2", "--goo2", "true"],
1352
- undefined,
1353
- );
1354
- expectExtractResult(
1355
- result,
1356
- {
1357
- goo1: "true",
1358
- goo2: "true",
1359
- foo1: "f1",
1360
- foo2: "f2",
1361
- },
1362
- [],
1363
- );
1364
- expect(result.invalidArgument).toBeUndefined();
1365
-
1366
- result = populateSubCommandValues(command, ["f1", "--goo1", "f2", "--goo2"], undefined);
1367
- expectExtractResult(
1368
- result,
1369
- {
1370
- goo1: "true",
1371
- goo2: "true",
1372
- foo1: "f1",
1373
- foo2: "f2",
1374
- },
1375
- [],
1376
- );
1377
- expect(result.invalidArgument).toBeUndefined();
1378
- });
1379
-
1380
- test("Array option before vararg positional", () => {
1381
- const command: SubCommand = {
1382
- name: "command",
1383
- options: [
1384
- {
1385
- name: "foo",
1386
- type: ArgumentValueTypeName.STRING,
1387
- isArray: true,
1388
- },
1389
- ],
1390
- positionals: [
1391
- {
1392
- name: "goo",
1393
- type: ArgumentValueTypeName.STRING,
1394
- isVarargMultiple: true,
1395
- },
1396
- ],
1397
- execute: async (): Promise<void> => {},
1398
- };
1399
-
1400
- const result = populateSubCommandValues(
1401
- command,
1402
- ["--foo", "f1", "--foo", "f2", "g1", "g2"],
1403
- undefined,
1404
- );
1405
- expectExtractResult(
1406
- result,
1407
- {
1408
- foo: ["f1", "f2"],
1409
- goo: ["g1", "g2"],
1410
- },
1411
- [],
1412
- );
1413
- expect(result.invalidArgument).toBeUndefined();
1414
- });
1415
-
1416
- test("Vararg positional before array option", () => {
1417
- const command: SubCommand = {
1418
- name: "command",
1419
- options: [
1420
- {
1421
- name: "foo",
1422
- type: ArgumentValueTypeName.STRING,
1423
- isArray: true,
1424
- },
1425
- ],
1426
- positionals: [
1427
- {
1428
- name: "goo",
1429
- type: ArgumentValueTypeName.STRING,
1430
- isVarargMultiple: true,
1431
- isVarargOptional: true,
1432
- },
1433
- ],
1434
- execute: async (): Promise<void> => {},
1435
- };
1436
-
1437
- let result = populateSubCommandValues(
1438
- command,
1439
- ["g1", "g2", "--foo", "f1", "--foo", "f2"],
1440
- undefined,
1441
- );
1442
- expectExtractResult(
1443
- result,
1444
- {
1445
- foo: ["f1", "f2"],
1446
- goo: ["g1", "g2"],
1447
- },
1448
- [],
1449
- );
1450
- expect(result.invalidArgument).toBeUndefined();
1451
-
1452
- result = populateSubCommandValues(command, ["--foo", "f1", "--foo", "f2"], undefined);
1453
- expectExtractResult(
1454
- result,
1455
- {
1456
- foo: ["f1", "f2"],
1457
- },
1458
- [],
1459
- );
1460
- expect(result.invalidArgument).toBeUndefined();
1461
- });
1462
-
1463
- test("Positional types configured value is overridden by arg", () => {
1464
- let command: SubCommand = {
1465
- name: "command",
1466
- options: [],
1467
- positionals: [
1468
- {
1469
- name: "foo",
1470
- type: ArgumentValueTypeName.NUMBER,
1471
- },
1472
- ],
1473
- execute: async (): Promise<void> => {},
1474
- };
1475
-
1476
- let result = populateSubCommandValues(command, ["1"], { foo: 2 });
1477
- expectExtractResult(result, { foo: "1" }, []);
1478
- expect(result.invalidArgument).toBeUndefined();
1479
-
1480
- command = {
1481
- name: "command",
1482
- options: [],
1483
- positionals: [
1484
- {
1485
- name: "foo",
1486
- type: ArgumentValueTypeName.STRING,
1487
- },
1488
- ],
1489
- execute: async (): Promise<void> => {},
1490
- };
1491
- result = populateSubCommandValues(command, ["bar"], { foo: "nope" });
1492
- expectExtractResult(result, { foo: "bar" }, []);
1493
- expect(result.invalidArgument).toBeUndefined();
1494
-
1495
- command = {
1496
- name: "command",
1497
- options: [],
1498
- positionals: [
1499
- {
1500
- name: "foo",
1501
- type: ArgumentValueTypeName.BOOLEAN,
1502
- },
1503
- ],
1504
- execute: async (): Promise<void> => {},
1505
- };
1506
- result = populateSubCommandValues(command, ["true"], { foo: false });
1507
- expectExtractResult(result, { foo: "true" }, []);
1508
- expect(result.invalidArgument).toBeUndefined();
1509
- });
1510
-
1511
- test("Positional types configured value is used for optional vararg with no arg provided", () => {
1512
- let command: SubCommand = {
1513
- name: "command",
1514
- options: [],
1515
- positionals: [
1516
- {
1517
- name: "foo",
1518
- type: ArgumentValueTypeName.NUMBER,
1519
- isVarargOptional: true,
1520
- },
1521
- ],
1522
- execute: async (): Promise<void> => {},
1523
- };
1524
-
1525
- let result = populateSubCommandValues(command, [], { foo: 1 });
1526
- expectExtractResult(result, { foo: 1 }, []);
1527
- expect(result.invalidArgument).toBeUndefined();
1528
-
1529
- command = {
1530
- name: "command",
1531
- options: [],
1532
- positionals: [
1533
- {
1534
- name: "foo",
1535
- type: ArgumentValueTypeName.STRING,
1536
- isVarargOptional: true,
1537
- },
1538
- ],
1539
- execute: async (): Promise<void> => {},
1540
- };
1541
- result = populateSubCommandValues(command, [], { foo: "bar" });
1542
- expectExtractResult(result, { foo: "bar" }, []);
1543
- expect(result.invalidArgument).toBeUndefined();
1544
-
1545
- command = {
1546
- name: "command",
1547
- options: [],
1548
- positionals: [
1549
- {
1550
- name: "foo",
1551
- type: ArgumentValueTypeName.BOOLEAN,
1552
- isVarargOptional: true,
1553
- },
1554
- ],
1555
- execute: async (): Promise<void> => {},
1556
- };
1557
- result = populateSubCommandValues(command, [], { foo: true });
1558
- expectExtractResult(result, { foo: true }, []);
1559
- expect(result.invalidArgument).toBeUndefined();
1560
- });
1561
-
1562
- test("Positional types configured value is used for mandatory vararg with no arg provided", () => {
1563
- let command: SubCommand = {
1564
- name: "command",
1565
- options: [],
1566
- positionals: [
1567
- {
1568
- name: "foo",
1569
- type: ArgumentValueTypeName.NUMBER,
1570
- isVarargOptional: false,
1571
- isVarargMultiple: true,
1572
- },
1573
- ],
1574
- execute: async (): Promise<void> => {},
1575
- };
1576
-
1577
- let result = populateSubCommandValues(command, [], { foo: 1 });
1578
- expectExtractResult(result, { foo: 1 }, []);
1579
- expect(result.invalidArgument).toBeUndefined();
1580
-
1581
- command = {
1582
- name: "command",
1583
- options: [],
1584
- positionals: [
1585
- {
1586
- name: "foo",
1587
- type: ArgumentValueTypeName.STRING,
1588
- isVarargOptional: false,
1589
- isVarargMultiple: true,
1590
- },
1591
- ],
1592
- execute: async (): Promise<void> => {},
1593
- };
1594
- result = populateSubCommandValues(command, [], { foo: "bar" });
1595
- expectExtractResult(result, { foo: "bar" }, []);
1596
- expect(result.invalidArgument).toBeUndefined();
1597
-
1598
- command = {
1599
- name: "command",
1600
- options: [],
1601
- positionals: [
1602
- {
1603
- name: "foo",
1604
- type: ArgumentValueTypeName.BOOLEAN,
1605
- isVarargOptional: false,
1606
- isVarargMultiple: true,
1607
- },
1608
- ],
1609
- execute: async (): Promise<void> => {},
1610
- };
1611
- result = populateSubCommandValues(command, [], { foo: true });
1612
- expectExtractResult(result, { foo: true }, []);
1613
- expect(result.invalidArgument).toBeUndefined();
1614
- });
1615
-
1616
- test("Option array configured single values completely overridden by multiple args", () => {
1617
- const command: SubCommand = {
1618
- name: "command",
1619
- options: [
1620
- {
1621
- name: "foo",
1622
- type: ArgumentValueTypeName.STRING,
1623
- isArray: true,
1624
- },
1625
- ],
1626
- positionals: [],
1627
- execute: async (): Promise<void> => {},
1628
- };
1629
-
1630
- const result = populateSubCommandValues(command, ["--foo", "bar1", "--foo", "bar2"], {
1631
- foo: ["bar"],
1632
- });
1633
- expectExtractResult(result, { foo: ["bar1", "bar2"] }, []);
1634
- expect(result.invalidArgument).toBeUndefined();
1635
- });
1636
-
1637
- test("Option array configured multiple values partially overridden by arg", () => {
1638
- const command: SubCommand = {
1639
- name: "command",
1640
- options: [
1641
- {
1642
- name: "foo",
1643
- type: ArgumentValueTypeName.STRING,
1644
- isArray: true,
1645
- },
1646
- ],
1647
- positionals: [],
1648
- execute: async (): Promise<void> => {},
1649
- };
1650
-
1651
- const result = populateSubCommandValues(command, ["--foo", "bar"], {
1652
- foo: ["bar1", "bar2"],
1653
- });
1654
- expectExtractResult(result, { foo: ["bar", "bar2"] }, []);
1655
- expect(result.invalidArgument).toBeUndefined();
1656
- });
1657
-
1658
- test("Positional argument configured single value completely overridden by multiple args", () => {
1659
- const command: SubCommand = {
1660
- name: "command",
1661
- options: [],
1662
- positionals: [
1663
- {
1664
- name: "foo",
1665
- type: ArgumentValueTypeName.STRING,
1666
- isVarargMultiple: true,
1667
- },
1668
- ],
1669
- execute: async (): Promise<void> => {},
1670
- };
1671
-
1672
- const result = populateSubCommandValues(command, ["bar", "bar"], {
1673
- foo: "bar1",
1674
- });
1675
- expectExtractResult(result, { foo: ["bar", "bar"] }, []);
1676
- expect(result.invalidArgument).toBeUndefined();
1677
- });
1678
-
1679
- test("Positional argument configured multiple values partially overridden by single arg", () => {
1680
- const command: SubCommand = {
1681
- name: "command",
1682
- options: [],
1683
- positionals: [
1684
- {
1685
- name: "foo",
1686
- type: ArgumentValueTypeName.STRING,
1687
- isVarargMultiple: true,
1688
- },
1689
- ],
1690
- execute: async (): Promise<void> => {},
1691
- };
1692
-
1693
- const result = populateSubCommandValues(command, ["bar"], {
1694
- foo: ["bar1", "bar2"],
1695
- });
1696
- expectExtractResult(result, { foo: ["bar", "bar2"] }, []);
1697
- expect(result.invalidArgument).toBeUndefined();
1698
- });
1699
-
1700
- test("Option array using indices", () => {
1701
- const command: SubCommand = {
1702
- name: "command",
1703
- options: [
1704
- {
1705
- name: "foo",
1706
- type: ArgumentValueTypeName.STRING,
1707
- shortAlias: "f",
1708
- isArray: true,
1709
- },
1710
- ],
1711
- positionals: [],
1712
- execute: async (): Promise<void> => {},
1713
- };
1714
-
1715
- let result = populateSubCommandValues(command, ["--foo[0]", "bar"], undefined);
1716
- expectExtractResult(result, { foo: ["bar"] }, []);
1717
- expect(result.invalidArgument).toBeUndefined();
1718
-
1719
- result = populateSubCommandValues(command, ["--foo[1]", "bar1", "--foo[0]", "bar0"], undefined);
1720
- expectExtractResult(result, { foo: ["bar0", "bar1"] }, []);
1721
- expect(result.invalidArgument).toBeUndefined();
1722
-
1723
- result = populateSubCommandValues(command, ["--foo[0]=bar0", "--foo[1]", "bar1"], undefined);
1724
- expectExtractResult(result, { foo: ["bar0", "bar1"] }, []);
1725
- expect(result.invalidArgument).toBeUndefined();
1726
-
1727
- result = populateSubCommandValues(command, ["--foo[1]=bar1", "-f[0]", "bar0"], undefined);
1728
- expectExtractResult(result, { foo: ["bar0", "bar1"] }, []);
1729
- expect(result.invalidArgument).toBeUndefined();
1730
- });
1731
-
1732
- test("Option array invalid indices", () => {
1733
- const command: SubCommand = {
1734
- name: "command",
1735
- options: [
1736
- {
1737
- name: "foo",
1738
- type: ArgumentValueTypeName.STRING,
1739
- shortAlias: "f",
1740
- isArray: true,
1741
- },
1742
- ],
1743
- positionals: [],
1744
- execute: async (): Promise<void> => {},
1745
- };
1746
-
1747
- let result = populateSubCommandValues(command, ["--foo[1]", "bar"], undefined);
1748
- let expected = {
1749
- foo: [] as Array<string>,
1750
- };
1751
- expected.foo[1] = "bar";
1752
- expectExtractResult(result, expected, []);
1753
- expect(result.invalidArgument).toBeUndefined();
1754
-
1755
- result = populateSubCommandValues(command, ["--foo[2]", "bar2", "--foo[0]", "bar0"], undefined);
1756
- expected = {
1757
- foo: [] as Array<string>,
1758
- };
1759
- expected.foo[0] = "bar0";
1760
- expected.foo[2] = "bar2";
1761
- expectExtractResult(result, expected, []);
1762
- expect(result.invalidArgument).toBeUndefined();
1763
- });
1764
-
1765
- test("Option array missing indices populated by configured defaults", () => {
1766
- const command: SubCommand = {
1767
- name: "command",
1768
- options: [
1769
- {
1770
- name: "foo",
1771
- type: ArgumentValueTypeName.STRING,
1772
- shortAlias: "f",
1773
- isArray: true,
1774
- },
1775
- ],
1776
- positionals: [],
1777
- execute: async (): Promise<void> => {},
1778
- };
1779
-
1780
- let result = populateSubCommandValues(command, ["--foo[1]", "bar"], {
1781
- foo: ["car"],
1782
- });
1783
- expectExtractResult(result, { foo: ["car", "bar"] }, []);
1784
- expect(result.invalidArgument).toBeUndefined();
1785
-
1786
- result = populateSubCommandValues(command, ["--foo[2]", "bar1", "--foo[0]", "bar0"], {
1787
- foo: ["bar", "car"],
1788
- });
1789
- expectExtractResult(result, { foo: ["bar0", "car", "bar1"] }, []);
1790
- expect(result.invalidArgument).toBeUndefined();
1791
- });
1792
-
1793
- test("Option array using indices either side of positional", () => {
1794
- let command: SubCommand = {
1795
- name: "command",
1796
- options: [
1797
- {
1798
- name: "foo",
1799
- isArray: true,
1800
- type: ArgumentValueTypeName.STRING,
1801
- },
1802
- ],
1803
- positionals: [
1804
- {
1805
- name: "goo",
1806
- type: ArgumentValueTypeName.STRING,
1807
- },
1808
- ],
1809
- execute: async (): Promise<void> => {},
1810
- };
1811
-
1812
- let result = populateSubCommandValues(
1813
- command,
1814
- ["--foo[0]", "f1", "goo1", "--foo[1]", "f2"],
1815
- undefined,
1816
- );
1817
- expectExtractResult(
1818
- result,
1819
- {
1820
- foo: ["f1", "f2"],
1821
- goo: "goo1",
1822
- },
1823
- [],
1824
- );
1825
- expect(result.invalidArgument).toBeUndefined();
1826
-
1827
- command = {
1828
- name: "command",
1829
- options: [
1830
- {
1831
- name: "foo",
1832
- isArray: true,
1833
- type: ArgumentValueTypeName.BOOLEAN,
1834
- },
1835
- ],
1836
- positionals: [
1837
- {
1838
- name: "goo",
1839
- type: ArgumentValueTypeName.STRING,
1840
- },
1841
- ],
1842
- execute: async (): Promise<void> => {},
1843
- };
1844
- result = populateSubCommandValues(
1845
- command,
1846
- ["--foo[1]", "true", "goo1", "--foo[0]", "false"],
1847
- undefined,
1848
- );
1849
- expectExtractResult(
1850
- result,
1851
- {
1852
- foo: ["false", "true"],
1853
- goo: "goo1",
1854
- },
1855
- [],
1856
- );
1857
- expect(result.invalidArgument).toBeUndefined();
1858
-
1859
- result = populateSubCommandValues(command, ["--foo[1]", "goo1", "--foo[0]"], undefined);
1860
- expectExtractResult(
1861
- result,
1862
- {
1863
- foo: ["true", "true"],
1864
- goo: "goo1",
1865
- },
1866
- [],
1867
- );
1868
- expect(result.invalidArgument).toBeUndefined();
1869
- });
1870
-
1871
- test("Option complex values", () => {
1872
- const command: SubCommand = {
1873
- name: "command",
1874
- options: [
1875
- {
1876
- name: "alpha",
1877
- type: ComplexValueTypeName.COMPLEX,
1878
- shortAlias: "a",
1879
- properties: [
1880
- {
1881
- name: "beta",
1882
- type: ComplexValueTypeName.COMPLEX,
1883
- shortAlias: "b",
1884
- properties: [
1885
- {
1886
- name: "gamma",
1887
- type: ArgumentValueTypeName.STRING,
1888
- shortAlias: "g",
1889
- },
1890
- {
1891
- name: "delta",
1892
- type: ArgumentValueTypeName.STRING,
1893
- shortAlias: "d",
1894
- },
1895
- ],
1896
- },
1897
- ],
1898
- },
1899
- ],
1900
- positionals: [],
1901
- execute: async (): Promise<void> => {},
1902
- };
1903
-
1904
- let result = populateSubCommandValues(
1905
- command,
1906
- ["--alpha.beta.gamma", "foo", "--alpha.beta.delta", "bar"],
1907
- undefined,
1908
- );
1909
- expectExtractResult(
1910
- result,
1911
- {
1912
- alpha: { beta: { gamma: "foo", delta: "bar" } },
1913
- },
1914
- [],
1915
- );
1916
- expect(result.invalidArgument).toBeUndefined();
1917
-
1918
- result = populateSubCommandValues(command, ["-a.b.g", "foo", "-a.b.d", "bar"], undefined);
1919
- expectExtractResult(
1920
- result,
1921
- {
1922
- alpha: { beta: { gamma: "foo", delta: "bar" } },
1923
- },
1924
- [],
1925
- );
1926
- expect(result.invalidArgument).toBeUndefined();
1927
- });
1928
-
1929
- test("Option arrays of complex values and vice versa", () => {
1930
- const command: SubCommand = {
1931
- name: "command",
1932
- options: [
1933
- {
1934
- name: "alpha",
1935
- type: ComplexValueTypeName.COMPLEX,
1936
- shortAlias: "a",
1937
- isArray: true,
1938
- properties: [
1939
- {
1940
- name: "beta",
1941
- type: ComplexValueTypeName.COMPLEX,
1942
- shortAlias: "b",
1943
- properties: [
1944
- {
1945
- name: "gamma",
1946
- type: ArgumentValueTypeName.STRING,
1947
- shortAlias: "g",
1948
- },
1949
- {
1950
- name: "delta",
1951
- type: ArgumentValueTypeName.STRING,
1952
- shortAlias: "d",
1953
- isArray: true,
1954
- },
1955
- ],
1956
- },
1957
- ],
1958
- },
1959
- ],
1960
- positionals: [],
1961
- execute: async (): Promise<void> => {},
1962
- };
1963
-
1964
- let result = populateSubCommandValues(
1965
- command,
1966
- ["--alpha.beta.gamma", "foo", "--alpha.beta.delta", "bar"],
1967
- undefined,
1968
- );
1969
- expectExtractResult(
1970
- result,
1971
- {
1972
- alpha: [{ beta: { gamma: "foo", delta: ["bar"] } }],
1973
- },
1974
- [],
1975
- );
1976
- expect(result.invalidArgument).toBeUndefined();
1977
-
1978
- result = populateSubCommandValues(command, ["-a[0].b.d[0]", "bar"], undefined);
1979
- expectExtractResult(
1980
- result,
1981
- {
1982
- alpha: [{ beta: { delta: ["bar"] } }],
1983
- },
1984
- [],
1985
- );
1986
- expect(result.invalidArgument).toBeUndefined();
1987
-
1988
- result = populateSubCommandValues(
1989
- command,
1990
- ["-a[0].b.g", "foo", "-a[0].b.d[0]", "bar"],
1991
- undefined,
1992
- );
1993
- expectExtractResult(
1994
- result,
1995
- {
1996
- alpha: [{ beta: { gamma: "foo", delta: ["bar"] } }],
1997
- },
1998
- [],
1999
- );
2000
- expect(result.invalidArgument).toBeUndefined();
2001
-
2002
- result = populateSubCommandValues(
2003
- command,
2004
- [
2005
- "-a[0].b.g",
2006
- "foo",
2007
- "-a[0].b.d[0]",
2008
- "bar",
2009
- "-a[0].b.d[1]",
2010
- "car",
2011
- "-a[1].b.g",
2012
- "foo",
2013
- "-a[1].b.d[1]",
2014
- "bar",
2015
- "-a[1].b.d[0]",
2016
- "car",
2017
- ],
2018
- undefined,
2019
- );
2020
- expectExtractResult(
2021
- result,
2022
- {
2023
- alpha: [
2024
- { beta: { gamma: "foo", delta: ["bar", "car"] } },
2025
- {
2026
- beta: { gamma: "foo", delta: ["car", "bar"] },
2027
- },
2028
- ],
2029
- },
2030
- [],
2031
- );
2032
- expect(result.invalidArgument).toBeUndefined();
2033
- });
2034
-
2035
- test("Option complex values with invalid properties", () => {
2036
- const command: SubCommand = {
2037
- name: "command",
2038
- options: [
2039
- {
2040
- name: "alpha",
2041
- type: ComplexValueTypeName.COMPLEX,
2042
- shortAlias: "a",
2043
- properties: [
2044
- {
2045
- name: "beta",
2046
- type: ComplexValueTypeName.COMPLEX,
2047
- shortAlias: "b",
2048
- properties: [
2049
- {
2050
- name: "gamma",
2051
- type: ArgumentValueTypeName.STRING,
2052
- shortAlias: "g",
2053
- },
2054
- {
2055
- name: "delta",
2056
- type: ArgumentValueTypeName.STRING,
2057
- shortAlias: "d",
2058
- },
2059
- ],
2060
- },
2061
- ],
2062
- },
2063
- ],
2064
- positionals: [],
2065
- execute: async (): Promise<void> => {},
2066
- };
2067
-
2068
- let result = populateSubCommandValues(
2069
- command,
2070
- ["--alpha.beta.delta", "bar", "--alpha.beta.gamma"],
2071
- undefined,
2072
- );
2073
- expectExtractResult(
2074
- result,
2075
- {
2076
- alpha: { beta: { delta: "bar" } },
2077
- },
2078
- [],
2079
- );
2080
- expect(result.invalidArgument).toEqual({
2081
- argument: ((command.options[0] as ComplexOption).properties[0] as ComplexOption)
2082
- .properties[0],
2083
- name: "--alpha.beta.gamma",
2084
- reason: InvalidArgumentReason.MISSING_VALUE,
2085
- });
2086
-
2087
- result = populateSubCommandValues(command, ["-a.b.g", "foo", "--alpha.beta.delta"], undefined);
2088
- expectExtractResult(
2089
- result,
2090
- {
2091
- alpha: { beta: { gamma: "foo" } },
2092
- },
2093
- [],
2094
- );
2095
- expect(result.invalidArgument).toEqual({
2096
- argument: ((command.options[0] as ComplexOption).properties[0] as ComplexOption)
2097
- .properties[1],
2098
- name: "--alpha.beta.delta",
2099
- reason: InvalidArgumentReason.MISSING_VALUE,
2100
- });
2101
-
2102
- result = populateSubCommandValues(command, ["-a.b.x", "foo"], undefined);
2103
- expectExtractResult(
2104
- result,
2105
- {
2106
- alpha: { beta: {} },
2107
- },
2108
- ["foo"],
2109
- );
2110
- expect(result.invalidArgument).toEqual({
2111
- name: "-a.b.x",
2112
- reason: InvalidArgumentReason.UNKNOWN_PROPERTY,
2113
- });
2114
-
2115
- result = populateSubCommandValues(command, ["-a.b.g.a", "foo"], undefined);
2116
- expectExtractResult(
2117
- result,
2118
- {
2119
- alpha: { beta: {} },
2120
- },
2121
- ["foo"],
2122
- );
2123
- expect(result.invalidArgument).toEqual({
2124
- name: "-a.b.g.a",
2125
- reason: InvalidArgumentReason.UNKNOWN_PROPERTY,
2126
- });
2127
- });
2128
-
2129
- test("Option complex values with missing properties supplied by configured defaults", () => {
2130
- const command: SubCommand = {
2131
- name: "command",
2132
- options: [
2133
- {
2134
- name: "alpha",
2135
- type: ComplexValueTypeName.COMPLEX,
2136
- shortAlias: "a",
2137
- properties: [
2138
- {
2139
- name: "beta",
2140
- type: ComplexValueTypeName.COMPLEX,
2141
- shortAlias: "b",
2142
- properties: [
2143
- {
2144
- name: "gamma",
2145
- type: ArgumentValueTypeName.STRING,
2146
- shortAlias: "g",
2147
- },
2148
- {
2149
- name: "delta",
2150
- type: ArgumentValueTypeName.STRING,
2151
- shortAlias: "d",
2152
- },
2153
- ],
2154
- },
2155
- ],
2156
- },
2157
- ],
2158
- positionals: [],
2159
- execute: async (): Promise<void> => {},
2160
- };
2161
-
2162
- let result = populateSubCommandValues(command, ["--alpha.beta.delta", "bar"], {
2163
- alpha: { beta: { gamma: "foo" } },
2164
- });
2165
- expectExtractResult(
2166
- result,
2167
- {
2168
- alpha: { beta: { gamma: "foo", delta: "bar" } },
2169
- },
2170
- [],
2171
- );
2172
- expect(result.invalidArgument).toBeUndefined();
2173
-
2174
- result = populateSubCommandValues(command, ["-a.b.g", "foo"], {
2175
- alpha: { beta: { delta: "bar" } },
2176
- });
2177
- expectExtractResult(
2178
- result,
2179
- {
2180
- alpha: { beta: { gamma: "foo", delta: "bar" } },
2181
- },
2182
- [],
2183
- );
2184
- expect(result.invalidArgument).toBeUndefined();
2185
- });
2186
-
2187
- test("Option array check for maximum array size", () => {
2188
- const command: SubCommand = {
2189
- name: "command",
2190
- options: [
2191
- {
2192
- name: "foo",
2193
- type: ArgumentValueTypeName.STRING,
2194
- isArray: true,
2195
- },
2196
- ],
2197
- positionals: [],
2198
- execute: async (): Promise<void> => {},
2199
- };
2200
-
2201
- const potentialArgs: Array<string> = [];
2202
- for (let i = 0; i < 257; i++) {
2203
- potentialArgs.push(`--foo=bar${i}`);
2204
- }
2205
- const values = { foo: [] as Array<string> };
2206
- for (let i = 0; i < 255; i++) {
2207
- values.foo.push(`bar${i}`);
2208
- }
2209
-
2210
- let result = populateSubCommandValues(command, potentialArgs, undefined);
2211
- expectExtractResult(result, values, ["--foo=bar256"]);
2212
- expect(result.invalidArgument).toEqual({
2213
- argument: command.options[0],
2214
- reason: InvalidArgumentReason.ARRAY_SIZE_EXCEEDED,
2215
- name: "foo",
2216
- });
2217
-
2218
- result = populateSubCommandValues(command, ["--foo[256]=bar"], undefined);
2219
- expectExtractResult(result, {}, []);
2220
- expect(result.invalidArgument).toEqual({
2221
- argument: command.options[0],
2222
- reason: InvalidArgumentReason.ARRAY_SIZE_EXCEEDED,
2223
- name: "foo",
2224
- });
2225
-
2226
- result = populateSubCommandValues(command, ["--foo[256]", "bar"], undefined);
2227
- expectExtractResult(result, {}, ["bar"]);
2228
- expect(result.invalidArgument).toEqual({
2229
- argument: command.options[0],
2230
- reason: InvalidArgumentReason.ARRAY_SIZE_EXCEEDED,
2231
- name: "foo",
2232
- });
2233
- });
2234
-
2235
- test("Option array using mix of explicit and implicit indices", () => {
2236
- const command: SubCommand = {
2237
- name: "command",
2238
- options: [
2239
- {
2240
- name: "foo",
2241
- type: ArgumentValueTypeName.STRING,
2242
- shortAlias: "f",
2243
- isArray: true,
2244
- },
2245
- ],
2246
- positionals: [],
2247
- execute: async (): Promise<void> => {},
2248
- };
2249
-
2250
- let result = populateSubCommandValues(
2251
- command,
2252
- ["--foo[0]", "bar0", "-f=bar1", "-f[2]=bar2"],
2253
- undefined,
2254
- );
2255
- expectExtractResult(result, { foo: ["bar0", "bar1", "bar2"] }, []);
2256
- expect(result.invalidArgument).toBeUndefined();
2257
-
2258
- result = populateSubCommandValues(
2259
- command,
2260
- ["--foo", "bar0", "--foo", "bar1", "--foo[2]=bar2"],
2261
- undefined,
2262
- );
2263
- expectExtractResult(result, { foo: ["bar0", "bar1", "bar2"] }, []);
2264
- expect(result.invalidArgument).toBeUndefined();
2265
-
2266
- result = populateSubCommandValues(command, ["--foo[2]", "bar2", "--foo", "bar3"], undefined);
2267
-
2268
- const values = { foo: [] as Array<string | undefined> };
2269
- values.foo[2] = "bar2";
2270
- values.foo[3] = "bar3";
2271
-
2272
- expectExtractResult(result, values, []);
2273
- expect(result.invalidArgument).toBeUndefined();
2274
- });
2275
-
2276
- test("Positional varargs check for maximum array size", () => {
2277
- const command: SubCommand = {
2278
- name: "command",
2279
- options: [],
2280
- positionals: [
2281
- {
2282
- name: "foo",
2283
- type: ArgumentValueTypeName.STRING,
2284
- isVarargMultiple: true,
2285
- },
2286
- ],
2287
- execute: async (): Promise<void> => {},
2288
- };
2289
-
2290
- const potentialArgs: Array<string> = [];
2291
- for (let i = 0; i < 257; i++) {
2292
- potentialArgs.push(`bar${i}`);
2293
- }
2294
- const values = { foo: [] as Array<string> };
2295
- for (let i = 0; i < 255; i++) {
2296
- values.foo.push(`bar${i}`);
2297
- }
2298
-
2299
- const result = populateSubCommandValues(command, potentialArgs, undefined);
2300
- expectExtractResult(result, values, ["bar256"]);
2301
- expect(result.invalidArgument).toEqual({
2302
- argument: command.positionals[0],
2303
- reason: InvalidArgumentReason.ARRAY_SIZE_EXCEEDED,
2304
- name: "foo",
2305
- });
2306
- });
2307
-
2308
- test("Option path invalid reference to complex option", () => {
2309
- const command: SubCommand = {
2310
- name: "command",
2311
- options: [
2312
- {
2313
- name: "alpha",
2314
- type: ComplexValueTypeName.COMPLEX,
2315
- shortAlias: "a",
2316
- properties: [
2317
- {
2318
- name: "beta",
2319
- type: ComplexValueTypeName.COMPLEX,
2320
- shortAlias: "b",
2321
- properties: [
2322
- {
2323
- name: "gamma",
2324
- type: ArgumentValueTypeName.STRING,
2325
- shortAlias: "g",
2326
- },
2327
- {
2328
- name: "delta",
2329
- type: ArgumentValueTypeName.STRING,
2330
- shortAlias: "d",
2331
- },
2332
- ],
2333
- },
2334
- ],
2335
- },
2336
- ],
2337
- positionals: [],
2338
- execute: async (): Promise<void> => {},
2339
- };
2340
-
2341
- const result = populateSubCommandValues(command, ["--alpha.beta", "foo"], undefined);
2342
- expectExtractResult(
2343
- result,
2344
- {
2345
- alpha: { beta: {} },
2346
- },
2347
- ["foo"],
2348
- );
2349
- expect(result.invalidArgument).toEqual({
2350
- argument: (command.options[0] as ComplexOption).properties[0],
2351
- reason: InvalidArgumentReason.OPTION_IS_COMPLEX,
2352
- name: "beta",
2353
- });
2354
- });
2355
-
2356
- test("Complex options with duplicated names and aliases ok if not siblings", () => {
2357
- const command: SubCommand = {
2358
- name: "command",
2359
- options: [
2360
- {
2361
- name: "alpha",
2362
- type: ComplexValueTypeName.COMPLEX,
2363
- shortAlias: "a",
2364
- properties: [
2365
- {
2366
- name: "beta",
2367
- type: ComplexValueTypeName.COMPLEX,
2368
- shortAlias: "b",
2369
- properties: [
2370
- {
2371
- name: "alpha",
2372
- type: ArgumentValueTypeName.STRING,
2373
- shortAlias: "a",
2374
- },
2375
- ],
2376
- },
2377
- ],
2378
- },
2379
- ],
2380
- positionals: [],
2381
- execute: async (): Promise<void> => {},
2382
- };
2383
-
2384
- const result = populateSubCommandValues(command, ["-a.b.a", "foo"], undefined);
2385
- expectExtractResult(
2386
- result,
2387
- {
2388
- alpha: { beta: { alpha: "foo" } },
2389
- },
2390
- [],
2391
- );
2392
- expect(result.invalidArgument).toBeUndefined();
2393
- });
2394
-
2395
- test("Option path check for maximum nesting", () => {
2396
- const command: SubCommand = {
2397
- name: "command",
2398
- options: [
2399
- {
2400
- name: "alpha",
2401
- type: ComplexValueTypeName.COMPLEX,
2402
- shortAlias: "a",
2403
- properties: [
2404
- {
2405
- name: "beta",
2406
- type: ComplexValueTypeName.COMPLEX,
2407
- shortAlias: "b",
2408
- properties: [
2409
- {
2410
- name: "gamma",
2411
- type: ArgumentValueTypeName.STRING,
2412
- shortAlias: "g",
2413
- },
2414
- ],
2415
- },
2416
- ],
2417
- },
2418
- ],
2419
- positionals: [],
2420
- execute: async (): Promise<void> => {},
2421
- };
2422
-
2423
- const result = populateSubCommandValues(command, ["-a.b.g.d.e.f.g.h.i.j.k", "foo"], undefined);
2424
- expectExtractResult(result, {}, ["foo"]);
2425
- expect(result.invalidArgument).toEqual({
2426
- reason: InvalidArgumentReason.NESTING_DEPTH_EXCEEDED,
2427
- name: "-a.b.g.d.e.f.g.h.i.j.k",
2428
- });
2429
- });
2430
- });