@flowscripter/dynamic-cli-framework 1.4.19 → 1.5.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,1090 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
- import {
3
- validateGlobalCommandArgumentValue,
4
- validateOptionValue,
5
- validatePositionalValue,
6
- } from "../../../src/runtime/values/argumentValueValidation.ts";
7
- import { type InvalidArgument, InvalidArgumentReason } from "../../../src/api/RunResult.ts";
8
- import { getGlobalCommandWithShortAlias } from "../../fixtures/Command.ts";
9
- import {
10
- ArgumentValueTypeName,
11
- ComplexValueTypeName,
12
- type PopulatedArgumentValues,
13
- } from "../../../src/api/argument/ArgumentValueTypes.ts";
14
- import type ComplexOption from "../../../src/api/argument/ComplexOption.ts";
15
- import type Positional from "../../../src/api/argument/Positional.ts";
16
- import type GlobalCommandArgument from "../../../src/api/argument/GlobalCommandArgument.ts";
17
- import type Option from "../../../src/api/argument/Option.ts";
18
-
19
- describe("argumentValueValidation tests", () => {
20
- test("Option types", () => {
21
- let option: Option = {
22
- name: "foo",
23
- type: ArgumentValueTypeName.STRING,
24
- };
25
- let invalidArguments: Array<InvalidArgument> = [];
26
- expect(validateOptionValue(option, "foo", invalidArguments)).toEqual("foo");
27
- expect(invalidArguments).toEqual([]);
28
-
29
- option = {
30
- name: "foo",
31
- type: ArgumentValueTypeName.NUMBER,
32
- };
33
- expect(validateOptionValue(option, "1", invalidArguments)).toEqual(1);
34
- expect(invalidArguments).toEqual([]);
35
-
36
- option = {
37
- name: "foo",
38
- type: ArgumentValueTypeName.NUMBER,
39
- };
40
- expect(validateOptionValue(option, "1.1", invalidArguments)).toEqual(1.1);
41
- expect(invalidArguments).toEqual([]);
42
-
43
- option = {
44
- name: "foo",
45
- type: ArgumentValueTypeName.NUMBER,
46
- };
47
- expect(validateOptionValue(option, "-1.1", invalidArguments)).toEqual(-1.1);
48
- expect(invalidArguments).toEqual([]);
49
-
50
- option = {
51
- name: "foo",
52
- type: ArgumentValueTypeName.INTEGER,
53
- };
54
- expect(validateOptionValue(option, "1", invalidArguments)).toEqual(1);
55
- expect(invalidArguments).toEqual([]);
56
-
57
- option = {
58
- name: "foo",
59
- type: ArgumentValueTypeName.INTEGER,
60
- };
61
- expect(validateOptionValue(option, "-1", invalidArguments)).toEqual(-1);
62
- expect(invalidArguments).toEqual([]);
63
-
64
- option = {
65
- name: "foo",
66
- type: ArgumentValueTypeName.SECRET,
67
- };
68
- expect(validateOptionValue(option, "xxx", invalidArguments)).toEqual("xxx");
69
- expect(invalidArguments).toEqual([]);
70
-
71
- option = {
72
- name: "foo",
73
- type: ArgumentValueTypeName.BOOLEAN,
74
- };
75
- expect(validateOptionValue(option, "true", invalidArguments)).toBeTrue();
76
- expect(invalidArguments).toEqual([]);
77
-
78
- option = {
79
- name: "foo",
80
- type: ArgumentValueTypeName.BOOLEAN,
81
- };
82
- expect(validateOptionValue(option, "TRUE", invalidArguments)).toBeTrue();
83
- expect(invalidArguments).toEqual([]);
84
-
85
- option = {
86
- name: "foo",
87
- type: ArgumentValueTypeName.BOOLEAN,
88
- };
89
- expect(validateOptionValue(option, "True", invalidArguments)).toBeTrue();
90
- expect(invalidArguments).toEqual([]);
91
-
92
- option = {
93
- name: "foo",
94
- type: ArgumentValueTypeName.BOOLEAN,
95
- };
96
- expect(validateOptionValue(option, "false", invalidArguments)).toBeFalse();
97
- expect(invalidArguments).toEqual([]);
98
-
99
- option = {
100
- name: "foo",
101
- type: ArgumentValueTypeName.BOOLEAN,
102
- };
103
- expect(validateOptionValue(option, "FALSE", invalidArguments)).toBeFalse();
104
- expect(invalidArguments).toEqual([]);
105
-
106
- option = {
107
- name: "foo",
108
- type: ArgumentValueTypeName.BOOLEAN,
109
- };
110
- expect(validateOptionValue(option, "False", invalidArguments)).toBeFalse();
111
- expect(invalidArguments).toEqual([]);
112
-
113
- option = {
114
- name: "foo",
115
- type: ArgumentValueTypeName.BOOLEAN,
116
- };
117
- expect(validateOptionValue(option, true, invalidArguments)).toBeTrue();
118
- expect(invalidArguments).toEqual([]);
119
-
120
- option = {
121
- name: "foo",
122
- type: ArgumentValueTypeName.BOOLEAN,
123
- };
124
- expect(validateOptionValue(option, false, invalidArguments)).toBeFalse();
125
- expect(invalidArguments).toEqual([]);
126
-
127
- option = {
128
- name: "foo",
129
- type: ArgumentValueTypeName.STRING,
130
- };
131
- expect(validateOptionValue(option, "1", invalidArguments)).toEqual("1");
132
- expect(invalidArguments).toEqual([]);
133
-
134
- option = {
135
- name: "foo",
136
- type: ArgumentValueTypeName.NUMBER,
137
- };
138
- expect(validateOptionValue(option, "foo", invalidArguments)).toBeUndefined();
139
- expect(invalidArguments).toEqual([
140
- {
141
- argument: option,
142
- name: "foo",
143
- value: "foo",
144
- reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
145
- },
146
- ]);
147
-
148
- option = {
149
- name: "foo",
150
- type: ArgumentValueTypeName.BOOLEAN,
151
- };
152
- invalidArguments = [];
153
- expect(validateOptionValue(option, "foo", invalidArguments)).toBeUndefined();
154
- expect(invalidArguments).toEqual([
155
- {
156
- argument: option,
157
- name: "foo",
158
- value: "foo",
159
- reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
160
- },
161
- ]);
162
-
163
- option = {
164
- name: "foo",
165
- type: ArgumentValueTypeName.INTEGER,
166
- };
167
- invalidArguments = [];
168
- expect(validateOptionValue(option, "1.1", invalidArguments)).toBeUndefined();
169
- expect(invalidArguments).toEqual([
170
- {
171
- argument: option,
172
- name: "foo",
173
- value: "1.1",
174
- reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
175
- },
176
- ]);
177
- });
178
-
179
- test("Option array", () => {
180
- let option: Option = {
181
- name: "foo",
182
- type: ArgumentValueTypeName.STRING,
183
- isArray: true,
184
- };
185
- const invalidArguments: Array<InvalidArgument> = [];
186
- expect(validateOptionValue(option, ["foo", "bar"], invalidArguments)).toEqual(["foo", "bar"]);
187
- expect(invalidArguments).toEqual([]);
188
-
189
- option = {
190
- name: "foo",
191
- type: ArgumentValueTypeName.NUMBER,
192
- isArray: true,
193
- };
194
- expect(validateOptionValue(option, ["1", "2"], invalidArguments)).toEqual([1, 2]);
195
- expect(invalidArguments).toEqual([]);
196
-
197
- option = {
198
- name: "foo",
199
- type: ArgumentValueTypeName.BOOLEAN,
200
- isArray: true,
201
- };
202
- expect(validateOptionValue(option, ["true", "false"], invalidArguments)).toEqual([true, false]);
203
- expect(invalidArguments).toEqual([]);
204
-
205
- option = {
206
- name: "foo",
207
- type: ArgumentValueTypeName.STRING,
208
- };
209
- expect(validateOptionValue(option, ["true", "false"], invalidArguments)).toBeUndefined();
210
- expect(invalidArguments).toEqual([
211
- {
212
- argument: option,
213
- name: "foo",
214
- value: ["true", "false"],
215
- reason: InvalidArgumentReason.ILLEGAL_MULTIPLE_VALUES,
216
- },
217
- ]);
218
- });
219
-
220
- test("Optional option", () => {
221
- let option: Option = {
222
- name: "foo",
223
- type: ArgumentValueTypeName.STRING,
224
- isOptional: true,
225
- };
226
- let invalidArguments: Array<InvalidArgument> = [];
227
- expect(validateOptionValue(option, undefined, invalidArguments)).toBeUndefined();
228
- expect(invalidArguments).toEqual([]);
229
-
230
- option = {
231
- name: "foo",
232
- type: ArgumentValueTypeName.STRING,
233
- isArray: true,
234
- isOptional: true,
235
- };
236
- expect(validateOptionValue(option, undefined, invalidArguments)).toBeUndefined();
237
- expect(invalidArguments).toEqual([]);
238
-
239
- option = {
240
- name: "foo",
241
- type: ArgumentValueTypeName.STRING,
242
- };
243
- expect(validateOptionValue(option, undefined, invalidArguments)).toBeUndefined();
244
- expect(invalidArguments).toEqual([
245
- {
246
- argument: option,
247
- name: "foo",
248
- reason: InvalidArgumentReason.MISSING_VALUE,
249
- },
250
- ]);
251
-
252
- option = {
253
- name: "foo",
254
- type: ArgumentValueTypeName.STRING,
255
- isArray: true,
256
- };
257
- invalidArguments = [];
258
- expect(validateOptionValue(option, undefined, invalidArguments)).toBeUndefined();
259
- expect(invalidArguments).toEqual([
260
- {
261
- argument: option,
262
- name: "foo",
263
- reason: InvalidArgumentReason.MISSING_VALUE,
264
- },
265
- ]);
266
- });
267
-
268
- test("Invalid option argument value - not an allowable value", () => {
269
- let option: Option = {
270
- name: "foo",
271
- type: ArgumentValueTypeName.STRING,
272
- allowableValues: ["bar", "two"],
273
- };
274
- const invalidArguments: Array<InvalidArgument> = [];
275
- expect(validateOptionValue(option, "bar", invalidArguments), "bar");
276
- expect(invalidArguments).toEqual([]);
277
-
278
- option = {
279
- name: "foo",
280
- type: ArgumentValueTypeName.STRING,
281
- allowableValues: ["bar", "two"],
282
- };
283
- expect(validateOptionValue(option, "goo", invalidArguments)).toBeUndefined();
284
- expect(invalidArguments).toEqual([
285
- {
286
- argument: option,
287
- name: "foo",
288
- value: "goo",
289
- reason: InvalidArgumentReason.ILLEGAL_VALUE,
290
- },
291
- ]);
292
- });
293
-
294
- test("Invalid option argument value - not within range", () => {
295
- const option: Option = {
296
- name: "foo",
297
- type: ArgumentValueTypeName.INTEGER,
298
- minValueInclusive: 1,
299
- };
300
- const invalidArguments: Array<InvalidArgument> = [];
301
- expect(validateOptionValue(option, "1", invalidArguments), "1");
302
- expect(invalidArguments).toEqual([]);
303
-
304
- expect(validateOptionValue(option, "0", invalidArguments)).toBeUndefined();
305
- expect(invalidArguments).toEqual([
306
- {
307
- argument: option,
308
- name: "foo",
309
- value: "0",
310
- reason: InvalidArgumentReason.ILLEGAL_VALUE,
311
- },
312
- ]);
313
- });
314
-
315
- test("Complex options", () => {
316
- const option: ComplexOption = {
317
- name: "foo",
318
- type: ComplexValueTypeName.COMPLEX,
319
- properties: [
320
- {
321
- name: "a",
322
- type: ArgumentValueTypeName.NUMBER,
323
- },
324
- {
325
- name: "b",
326
- type: ArgumentValueTypeName.NUMBER,
327
- },
328
- ],
329
- };
330
- let invalidArguments: Array<InvalidArgument> = [];
331
- expect(validateOptionValue(option, { a: 1, b: 2 }, invalidArguments)).toEqual({ a: 1, b: 2 });
332
- expect(invalidArguments).toEqual([]);
333
-
334
- invalidArguments = [];
335
-
336
- expect(validateOptionValue(option, { a: "bar", b: 2 }, invalidArguments)).toBeUndefined();
337
- expect(invalidArguments).toEqual([
338
- {
339
- argument: option.properties[0],
340
- name: "foo.a",
341
- value: "bar",
342
- reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
343
- },
344
- ]);
345
-
346
- invalidArguments = [];
347
-
348
- expect(validateOptionValue(option, { b: 2 }, invalidArguments)).toBeUndefined();
349
- expect(invalidArguments).toEqual([
350
- {
351
- argument: option.properties[0],
352
- name: "foo.a",
353
- reason: InvalidArgumentReason.MISSING_VALUE,
354
- },
355
- ]);
356
-
357
- invalidArguments = [];
358
-
359
- expect(validateOptionValue(option, { a: [1, 2], b: 2 }, invalidArguments)).toBeUndefined();
360
- expect(invalidArguments).toEqual([
361
- {
362
- argument: option.properties[0],
363
- name: "foo.a",
364
- value: [1, 2],
365
- reason: InvalidArgumentReason.ILLEGAL_MULTIPLE_VALUES,
366
- },
367
- ]);
368
-
369
- invalidArguments = [];
370
-
371
- expect(validateOptionValue(option, "bar", invalidArguments)).toBeUndefined();
372
- expect(invalidArguments).toEqual([
373
- {
374
- argument: option,
375
- name: "foo",
376
- value: "bar",
377
- reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
378
- },
379
- ]);
380
-
381
- invalidArguments = [];
382
-
383
- expect(validateOptionValue(option, { a: 1, b: { c: 3 } }, invalidArguments)).toBeUndefined();
384
- expect(invalidArguments).toEqual([
385
- {
386
- argument: option.properties[1],
387
- name: "foo.b",
388
- value: { c: 3 },
389
- reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
390
- },
391
- ]);
392
- });
393
-
394
- test("Option array of complex options", () => {
395
- const option: ComplexOption = {
396
- name: "foo",
397
- type: ComplexValueTypeName.COMPLEX,
398
- isArray: true,
399
- properties: [
400
- {
401
- name: "a",
402
- type: ArgumentValueTypeName.NUMBER,
403
- },
404
- {
405
- name: "b",
406
- type: ArgumentValueTypeName.NUMBER,
407
- },
408
- ],
409
- };
410
- let invalidArguments: Array<InvalidArgument> = [];
411
- expect(validateOptionValue(option, [{ a: 1, b: 2 }], invalidArguments)).toEqual([
412
- { a: 1, b: 2 },
413
- ]);
414
- expect(invalidArguments).toEqual([]);
415
-
416
- expect(
417
- validateOptionValue(
418
- option,
419
- [
420
- { a: 1, b: 2 },
421
- { a: 3, b: 4 },
422
- ],
423
- invalidArguments,
424
- ),
425
- ).toEqual([
426
- { a: 1, b: 2 },
427
- { a: 3, b: 4 },
428
- ]);
429
- expect(invalidArguments).toEqual([]);
430
-
431
- invalidArguments = [];
432
-
433
- expect(
434
- validateOptionValue(
435
- option,
436
- [
437
- { a: 1, b: 2 },
438
- { a: "bar", b: 4 },
439
- ],
440
- invalidArguments,
441
- ),
442
- ).toBeUndefined();
443
- expect(invalidArguments).toEqual([
444
- {
445
- argument: option.properties[0],
446
- name: "foo[1].a",
447
- value: "bar",
448
- reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
449
- },
450
- ]);
451
-
452
- invalidArguments = [];
453
-
454
- expect(
455
- validateOptionValue(option, [{ a: 1, b: 2 }, { b: 4 }], invalidArguments),
456
- ).toBeUndefined();
457
- expect(invalidArguments).toEqual([
458
- {
459
- argument: option.properties[0],
460
- name: "foo[1].a",
461
- reason: InvalidArgumentReason.MISSING_VALUE,
462
- },
463
- ]);
464
-
465
- invalidArguments = [];
466
-
467
- expect(
468
- validateOptionValue(option, [undefined, { a: 3, b: 4 }], invalidArguments),
469
- ).toBeUndefined();
470
- expect(invalidArguments).toEqual([
471
- {
472
- argument: option,
473
- name: "foo[0]",
474
- reason: InvalidArgumentReason.ILLEGAL_SPARSE_ARRAY,
475
- },
476
- ]);
477
- });
478
-
479
- test("Complex nested options", () => {
480
- const option: ComplexOption = {
481
- name: "alpha",
482
- shortAlias: "a",
483
- type: ComplexValueTypeName.COMPLEX,
484
- isArray: true,
485
- properties: [
486
- {
487
- name: "beta",
488
- shortAlias: "b",
489
- type: ComplexValueTypeName.COMPLEX,
490
- isArray: true,
491
- properties: [
492
- {
493
- name: "gamma",
494
- shortAlias: "g",
495
- type: ArgumentValueTypeName.STRING,
496
- },
497
- {
498
- name: "delta",
499
- shortAlias: "d",
500
- type: ArgumentValueTypeName.NUMBER,
501
- isArray: true,
502
- },
503
- ],
504
- },
505
- ],
506
- };
507
- let invalidArguments: Array<InvalidArgument> = [];
508
- expect(
509
- validateOptionValue(
510
- option,
511
- [
512
- {
513
- beta: [
514
- {
515
- delta: [1],
516
- gamma: "foo1",
517
- },
518
- {
519
- delta: [3, 2],
520
- gamma: "foo2",
521
- },
522
- ],
523
- },
524
- ],
525
- invalidArguments,
526
- ),
527
- ).toEqual([
528
- {
529
- beta: [
530
- {
531
- delta: [1],
532
- gamma: "foo1",
533
- },
534
- {
535
- delta: [3, 2],
536
- gamma: "foo2",
537
- },
538
- ],
539
- },
540
- ]);
541
- expect(invalidArguments).toEqual([]);
542
-
543
- invalidArguments = [];
544
-
545
- expect(
546
- validateOptionValue(
547
- option,
548
- [
549
- {
550
- beta: 1,
551
- },
552
- ],
553
- invalidArguments,
554
- ),
555
- ).toBeUndefined();
556
- expect(invalidArguments).toEqual([
557
- {
558
- argument: option.properties[0],
559
- name: "alpha[0].beta",
560
- reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
561
- value: 1,
562
- },
563
- ]);
564
- });
565
-
566
- test("Complex sparse array options", () => {
567
- const option: ComplexOption = {
568
- name: "alpha",
569
- shortAlias: "a",
570
- type: ComplexValueTypeName.COMPLEX,
571
- isArray: true,
572
- properties: [
573
- {
574
- name: "beta",
575
- shortAlias: "b",
576
- type: ComplexValueTypeName.COMPLEX,
577
- isArray: true,
578
- properties: [
579
- {
580
- name: "gamma",
581
- shortAlias: "g",
582
- type: ArgumentValueTypeName.STRING,
583
- },
584
- {
585
- name: "delta",
586
- shortAlias: "d",
587
- type: ArgumentValueTypeName.NUMBER,
588
- isArray: true,
589
- },
590
- ],
591
- },
592
- ],
593
- };
594
- const invalidArguments: Array<InvalidArgument> = [];
595
- const value: Array<PopulatedArgumentValues> = [
596
- {
597
- beta: [
598
- {},
599
- {
600
- gamma: "foo1",
601
- delta: [3, 2],
602
- },
603
- ],
604
- },
605
- ];
606
-
607
- expect(validateOptionValue(option, value, invalidArguments)).toBeUndefined();
608
- expect(invalidArguments).toEqual([
609
- {
610
- argument: (option.properties[0] as ComplexOption).properties[0],
611
- name: "alpha[0].beta[0].gamma",
612
- reason: 0,
613
- },
614
- ]);
615
- });
616
-
617
- test("Positional types", () => {
618
- let positional: Positional = {
619
- name: "foo",
620
- type: ArgumentValueTypeName.STRING,
621
- };
622
- let invalidArguments: Array<InvalidArgument> = [];
623
- expect(validatePositionalValue(positional, "foo", invalidArguments), "foo");
624
- expect(invalidArguments).toEqual([]);
625
-
626
- positional = {
627
- name: "foo",
628
- type: ArgumentValueTypeName.NUMBER,
629
- };
630
- expect(validatePositionalValue(positional, "1", invalidArguments)).toEqual(1);
631
- expect(invalidArguments).toEqual([]);
632
-
633
- positional = {
634
- name: "foo",
635
- type: ArgumentValueTypeName.BOOLEAN,
636
- };
637
- expect(validatePositionalValue(positional, "true", invalidArguments)).toBeTrue();
638
- expect(invalidArguments).toEqual([]);
639
-
640
- positional = {
641
- name: "foo",
642
- type: ArgumentValueTypeName.STRING,
643
- };
644
- expect(validatePositionalValue(positional, "1", invalidArguments)).toEqual("1");
645
- expect(invalidArguments).toEqual([]);
646
-
647
- positional = {
648
- name: "foo",
649
- type: ArgumentValueTypeName.NUMBER,
650
- };
651
- expect(validatePositionalValue(positional, "foo", invalidArguments)).toBeUndefined();
652
- expect(invalidArguments).toEqual([
653
- {
654
- argument: positional,
655
- name: "foo",
656
- value: "foo",
657
- reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
658
- },
659
- ]);
660
-
661
- positional = {
662
- name: "foo",
663
- type: ArgumentValueTypeName.BOOLEAN,
664
- };
665
- invalidArguments = [];
666
- expect(validatePositionalValue(positional, "foo", invalidArguments)).toBeUndefined();
667
- expect(invalidArguments).toEqual([
668
- {
669
- argument: positional,
670
- name: "foo",
671
- value: "foo",
672
- reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
673
- },
674
- ]);
675
- });
676
-
677
- test("Positional varargs multiple", () => {
678
- let positional: Positional = {
679
- name: "foo",
680
- type: ArgumentValueTypeName.STRING,
681
- isVarargMultiple: true,
682
- };
683
- const invalidArguments: Array<InvalidArgument> = [];
684
- expect(validatePositionalValue(positional, ["foo", "bar"], invalidArguments)).toEqual([
685
- "foo",
686
- "bar",
687
- ]);
688
- expect(invalidArguments).toEqual([]);
689
-
690
- positional = {
691
- name: "foo",
692
- type: ArgumentValueTypeName.NUMBER,
693
- isVarargMultiple: true,
694
- };
695
- expect(validatePositionalValue(positional, ["1", "2"], invalidArguments)).toEqual([1, 2]);
696
- expect(invalidArguments).toEqual([]);
697
-
698
- positional = {
699
- name: "foo",
700
- type: ArgumentValueTypeName.BOOLEAN,
701
- isVarargMultiple: true,
702
- };
703
- expect(validatePositionalValue(positional, ["true", "false"], invalidArguments)).toEqual([
704
- true,
705
- false,
706
- ]);
707
- expect(invalidArguments).toEqual([]);
708
-
709
- positional = {
710
- name: "foo",
711
- type: ArgumentValueTypeName.BOOLEAN,
712
- isVarargMultiple: true,
713
- };
714
- expect(validatePositionalValue(positional, undefined, invalidArguments)).toBeUndefined();
715
- expect(invalidArguments).toEqual([
716
- {
717
- argument: positional,
718
- name: "foo",
719
- reason: InvalidArgumentReason.MISSING_VALUE,
720
- },
721
- ]);
722
- });
723
-
724
- test("Positional varargs optional", () => {
725
- let positional: Positional = {
726
- name: "foo",
727
- type: ArgumentValueTypeName.STRING,
728
- isVarargOptional: true,
729
- };
730
- let invalidArguments: Array<InvalidArgument> = [];
731
- expect(validatePositionalValue(positional, undefined, invalidArguments)).toBeUndefined();
732
- expect(invalidArguments).toEqual([]);
733
-
734
- positional = {
735
- name: "foo",
736
- type: ArgumentValueTypeName.STRING,
737
- isVarargOptional: true,
738
- };
739
- expect(validatePositionalValue(positional, "foo", invalidArguments), "foo");
740
- expect(invalidArguments).toEqual([]);
741
-
742
- positional = {
743
- name: "foo",
744
- type: ArgumentValueTypeName.STRING,
745
- isVarargOptional: true,
746
- };
747
- expect(validatePositionalValue(positional, ["foo", "bar"], invalidArguments)).toBeUndefined();
748
- expect(invalidArguments).toEqual([
749
- {
750
- argument: positional,
751
- name: "foo",
752
- value: ["foo", "bar"],
753
- reason: InvalidArgumentReason.ILLEGAL_MULTIPLE_VALUES,
754
- },
755
- ]);
756
-
757
- positional = {
758
- name: "foo",
759
- type: ArgumentValueTypeName.STRING,
760
- isVarargMultiple: true,
761
- isVarargOptional: true,
762
- };
763
- invalidArguments = [];
764
- expect(validatePositionalValue(positional, ["foo", "bar"], invalidArguments)).toEqual([
765
- "foo",
766
- "bar",
767
- ]);
768
- expect(invalidArguments).toEqual([]);
769
- });
770
-
771
- test("Invalid positional argument value", () => {
772
- let positional: Option = {
773
- name: "foo",
774
- type: ArgumentValueTypeName.STRING,
775
- allowableValues: ["bar", "two"],
776
- };
777
- const invalidArguments: Array<InvalidArgument> = [];
778
- expect(validatePositionalValue(positional, "bar", invalidArguments), "bar");
779
- expect(invalidArguments).toEqual([]);
780
-
781
- positional = {
782
- name: "foo",
783
- type: ArgumentValueTypeName.STRING,
784
- allowableValues: ["bar", "two"],
785
- };
786
- expect(validatePositionalValue(positional, "goo", invalidArguments)).toBeUndefined();
787
- expect(invalidArguments).toEqual([
788
- {
789
- argument: positional,
790
- name: "foo",
791
- value: "goo",
792
- reason: InvalidArgumentReason.ILLEGAL_VALUE,
793
- },
794
- ]);
795
- });
796
-
797
- test("Global command argument types", () => {
798
- let globalCommandArgument: GlobalCommandArgument = {
799
- type: ArgumentValueTypeName.STRING,
800
- };
801
- let globalCommand = getGlobalCommandWithShortAlias("globalCommand", "f", globalCommandArgument);
802
- let invalidArguments: Array<InvalidArgument> = [];
803
- expect(validateGlobalCommandArgumentValue(globalCommand, "foo", invalidArguments), "foo");
804
- expect(invalidArguments).toEqual([]);
805
-
806
- globalCommandArgument = {
807
- type: ArgumentValueTypeName.NUMBER,
808
- };
809
- globalCommand = getGlobalCommandWithShortAlias("globalCommand", "f", globalCommandArgument);
810
- expect(validateGlobalCommandArgumentValue(globalCommand, "1", invalidArguments)).toEqual(1);
811
- expect(invalidArguments).toEqual([]);
812
-
813
- globalCommandArgument = {
814
- type: ArgumentValueTypeName.BOOLEAN,
815
- };
816
- globalCommand = getGlobalCommandWithShortAlias("globalCommand", "f", globalCommandArgument);
817
- expect(validateGlobalCommandArgumentValue(globalCommand, "true", invalidArguments)).toBeTrue();
818
- expect(invalidArguments).toEqual([]);
819
-
820
- globalCommandArgument = {
821
- type: ArgumentValueTypeName.STRING,
822
- };
823
- globalCommand = getGlobalCommandWithShortAlias("globalCommand", "f", globalCommandArgument);
824
- expect(validateGlobalCommandArgumentValue(globalCommand, "1", invalidArguments), "1");
825
- expect(invalidArguments).toEqual([]);
826
-
827
- globalCommandArgument = {
828
- type: ArgumentValueTypeName.NUMBER,
829
- };
830
- globalCommand = getGlobalCommandWithShortAlias("globalCommand", "f", globalCommandArgument);
831
- expect(
832
- validateGlobalCommandArgumentValue(globalCommand, "foo", invalidArguments),
833
- ).toBeUndefined();
834
- expect(invalidArguments).toEqual([
835
- {
836
- argument: globalCommandArgument,
837
- name: "globalCommand",
838
- value: "foo",
839
- reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
840
- },
841
- ]);
842
-
843
- globalCommandArgument = {
844
- type: ArgumentValueTypeName.BOOLEAN,
845
- };
846
- globalCommand = getGlobalCommandWithShortAlias("globalCommand", "f", globalCommandArgument);
847
- invalidArguments = [];
848
- expect(
849
- validateGlobalCommandArgumentValue(globalCommand, "foo", invalidArguments),
850
- ).toBeUndefined();
851
- expect(invalidArguments).toEqual([
852
- {
853
- argument: globalCommandArgument,
854
- name: "globalCommand",
855
- value: "foo",
856
- reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
857
- },
858
- ]);
859
- });
860
-
861
- test("Optional global command argument", () => {
862
- let globalCommandArgument: GlobalCommandArgument = {
863
- type: ArgumentValueTypeName.STRING,
864
- isOptional: true,
865
- };
866
- let globalCommand = getGlobalCommandWithShortAlias("globalCommand", "f", globalCommandArgument);
867
- const invalidArguments: Array<InvalidArgument> = [];
868
- expect(
869
- validateGlobalCommandArgumentValue(globalCommand, undefined, invalidArguments),
870
- ).toBeUndefined();
871
- expect(invalidArguments).toEqual([]);
872
-
873
- globalCommandArgument = {
874
- type: ArgumentValueTypeName.STRING,
875
- };
876
- globalCommand = getGlobalCommandWithShortAlias("globalCommand", "f", globalCommandArgument);
877
- expect(
878
- validateGlobalCommandArgumentValue(globalCommand, undefined, invalidArguments),
879
- ).toBeUndefined();
880
- expect(invalidArguments).toEqual([
881
- {
882
- argument: globalCommandArgument,
883
- name: "globalCommand",
884
- reason: InvalidArgumentReason.MISSING_VALUE,
885
- },
886
- ]);
887
- });
888
-
889
- test("Option with custom validator that passes", () => {
890
- const option: Option = {
891
- name: "foo",
892
- type: ArgumentValueTypeName.STRING,
893
- validate: () => undefined,
894
- };
895
- const invalidArguments: Array<InvalidArgument> = [];
896
- expect(validateOptionValue(option, "hello", invalidArguments)).toEqual("hello");
897
- expect(invalidArguments).toEqual([]);
898
- });
899
-
900
- test("Option with custom validator that fails", () => {
901
- const option: Option = {
902
- name: "foo",
903
- type: ArgumentValueTypeName.STRING,
904
- validate: (v) => ((v as string).length < 3 ? "min 3 chars" : undefined),
905
- };
906
- const invalidArguments: Array<InvalidArgument> = [];
907
- expect(validateOptionValue(option, "ab", invalidArguments)).toBeUndefined();
908
- expect(invalidArguments).toEqual([
909
- {
910
- argument: option,
911
- name: "foo",
912
- value: "ab",
913
- reason: InvalidArgumentReason.CUSTOM_VALIDATION,
914
- message: "min 3 chars",
915
- },
916
- ]);
917
- });
918
-
919
- test("Positional with custom validator that passes and fails", () => {
920
- const positional: Positional = {
921
- name: "count",
922
- type: ArgumentValueTypeName.NUMBER,
923
- validate: (v) => ((v as number) % 2 !== 0 ? "must be even" : undefined),
924
- };
925
- let invalidArguments: Array<InvalidArgument> = [];
926
- expect(validatePositionalValue(positional, "4", invalidArguments)).toEqual(4);
927
- expect(invalidArguments).toEqual([]);
928
-
929
- invalidArguments = [];
930
- expect(validatePositionalValue(positional, "3", invalidArguments)).toBeUndefined();
931
- expect(invalidArguments).toEqual([
932
- {
933
- argument: positional,
934
- name: "count",
935
- value: 3,
936
- reason: InvalidArgumentReason.CUSTOM_VALIDATION,
937
- message: "must be even",
938
- },
939
- ]);
940
- });
941
-
942
- test("GlobalCommand argument with custom validator that passes and fails", () => {
943
- const globalCommandArgument: GlobalCommandArgument = {
944
- type: ArgumentValueTypeName.STRING,
945
- validate: (v) => ((v as string).startsWith("x") ? undefined : "must start with x"),
946
- };
947
- const globalCommand = getGlobalCommandWithShortAlias(
948
- "globalCommand",
949
- "f",
950
- globalCommandArgument,
951
- );
952
- let invalidArguments: Array<InvalidArgument> = [];
953
- expect(validateGlobalCommandArgumentValue(globalCommand, "xfoo", invalidArguments)).toEqual(
954
- "xfoo",
955
- );
956
- expect(invalidArguments).toEqual([]);
957
-
958
- invalidArguments = [];
959
- expect(
960
- validateGlobalCommandArgumentValue(globalCommand, "bar", invalidArguments),
961
- ).toBeUndefined();
962
- expect(invalidArguments).toEqual([
963
- {
964
- argument: globalCommandArgument,
965
- name: "globalCommand",
966
- value: "bar",
967
- reason: InvalidArgumentReason.CUSTOM_VALIDATION,
968
- message: "must start with x",
969
- },
970
- ]);
971
- });
972
-
973
- test("Option isArray with custom validator checking uniqueness", () => {
974
- const option: Option = {
975
- name: "tags",
976
- type: ArgumentValueTypeName.STRING,
977
- isArray: true,
978
- validate: (v) => {
979
- const arr = v as string[];
980
- return new Set(arr).size !== arr.length ? "values must be unique" : undefined;
981
- },
982
- };
983
- let invalidArguments: Array<InvalidArgument> = [];
984
- expect(validateOptionValue(option, ["a", "b", "c"], invalidArguments)).toEqual(["a", "b", "c"]);
985
- expect(invalidArguments).toEqual([]);
986
-
987
- invalidArguments = [];
988
- expect(validateOptionValue(option, ["a", "b", "a"], invalidArguments)).toBeUndefined();
989
- expect(invalidArguments).toEqual([
990
- {
991
- argument: option,
992
- name: "tags",
993
- value: ["a", "b", "a"],
994
- reason: InvalidArgumentReason.CUSTOM_VALIDATION,
995
- message: "values must be unique",
996
- },
997
- ]);
998
- });
999
-
1000
- test("Positional isVarargMultiple with custom validator checking uniqueness", () => {
1001
- const positional: Positional = {
1002
- name: "ids",
1003
- type: ArgumentValueTypeName.NUMBER,
1004
- isVarargMultiple: true,
1005
- validate: (v) => {
1006
- const arr = v as number[];
1007
- return new Set(arr).size !== arr.length ? "values must be unique" : undefined;
1008
- },
1009
- };
1010
- let invalidArguments: Array<InvalidArgument> = [];
1011
- expect(validatePositionalValue(positional, ["1", "2", "3"], invalidArguments)).toEqual([
1012
- 1, 2, 3,
1013
- ]);
1014
- expect(invalidArguments).toEqual([]);
1015
-
1016
- invalidArguments = [];
1017
- expect(validatePositionalValue(positional, ["1", "2", "1"], invalidArguments)).toBeUndefined();
1018
- expect(invalidArguments).toEqual([
1019
- {
1020
- argument: positional,
1021
- name: "ids",
1022
- value: [1, 2, 1],
1023
- reason: InvalidArgumentReason.CUSTOM_VALIDATION,
1024
- message: "values must be unique",
1025
- },
1026
- ]);
1027
- });
1028
-
1029
- test("Custom validator not called when built-in validation fails", () => {
1030
- const option: Option = {
1031
- name: "foo",
1032
- type: ArgumentValueTypeName.NUMBER,
1033
- validate: () => {
1034
- throw new Error("should not be called");
1035
- },
1036
- };
1037
- const invalidArguments: Array<InvalidArgument> = [];
1038
- expect(validateOptionValue(option, "notanumber", invalidArguments)).toBeUndefined();
1039
- expect(invalidArguments).toEqual([
1040
- {
1041
- argument: option,
1042
- name: "foo",
1043
- value: "notanumber",
1044
- reason: InvalidArgumentReason.INCORRECT_VALUE_TYPE,
1045
- },
1046
- ]);
1047
- });
1048
-
1049
- test("Custom validator not called when value is undefined and optional", () => {
1050
- const option: Option = {
1051
- name: "foo",
1052
- type: ArgumentValueTypeName.STRING,
1053
- isOptional: true,
1054
- validate: () => {
1055
- throw new Error("should not be called");
1056
- },
1057
- };
1058
- const invalidArguments: Array<InvalidArgument> = [];
1059
- expect(validateOptionValue(option, undefined, invalidArguments)).toBeUndefined();
1060
- expect(invalidArguments).toEqual([]);
1061
- });
1062
-
1063
- test("Invalid global command argument value", () => {
1064
- let globalCommandArgument: GlobalCommandArgument = {
1065
- type: ArgumentValueTypeName.STRING,
1066
- allowableValues: ["bar", "two"],
1067
- };
1068
- let globalCommand = getGlobalCommandWithShortAlias("globalCommand", "f", globalCommandArgument);
1069
- const invalidArguments: Array<InvalidArgument> = [];
1070
- expect(validateGlobalCommandArgumentValue(globalCommand, "bar", invalidArguments), "bar");
1071
- expect(invalidArguments).toEqual([]);
1072
-
1073
- globalCommandArgument = {
1074
- type: ArgumentValueTypeName.STRING,
1075
- allowableValues: ["bar", "two"],
1076
- };
1077
- globalCommand = getGlobalCommandWithShortAlias("globalCommand", "f", globalCommandArgument);
1078
- expect(
1079
- validateGlobalCommandArgumentValue(globalCommand, "goo", invalidArguments),
1080
- ).toBeUndefined();
1081
- expect(invalidArguments).toEqual([
1082
- {
1083
- argument: globalCommandArgument,
1084
- name: "globalCommand",
1085
- value: "goo",
1086
- reason: InvalidArgumentReason.ILLEGAL_VALUE,
1087
- },
1088
- ]);
1089
- });
1090
- });