@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,598 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
- import DefaultPrompterService, {
3
- DEFAULT_PROMPTER_CONFIG,
4
- } from "../../../src/service/prompter/DefaultPrompterService.ts";
5
- import type KeyReader from "../../../src/terminal/KeyReader.ts";
6
- import { type KeyEvent, SpecialKey } from "../../../src/terminal/KeyReader.ts";
7
- import type Terminal from "../../../src/terminal/Terminal.ts";
8
- import { PromptType } from "../../../src/api/service/core/PrompterService.ts";
9
- import type PrinterService from "../../../src/api/service/core/PrinterService.ts";
10
-
11
- class MockKeyReader implements KeyReader {
12
- #keys: KeyEvent[] = [];
13
-
14
- enableRawMode() {}
15
- disableRawMode() {}
16
-
17
- addKeys(...keys: KeyEvent[]) {
18
- this.#keys.push(...keys);
19
- }
20
-
21
- readKey(): Promise<KeyEvent> {
22
- const key = this.#keys.shift();
23
- if (!key) throw new Error("No more keys");
24
- return Promise.resolve(key);
25
- }
26
- }
27
-
28
- class MockTerminal implements Terminal {
29
- buffer = "";
30
- clearUpLinesCalls: number[] = [];
31
- hideCursorCalled = false;
32
- showCursorCalled = false;
33
-
34
- clearLine(): Promise<void> {
35
- return Promise.resolve();
36
- }
37
-
38
- clearUpLines(count: number): Promise<void> {
39
- this.clearUpLinesCalls.push(count);
40
- return Promise.resolve();
41
- }
42
-
43
- hideCursor(): Promise<void> {
44
- this.hideCursorCalled = true;
45
- return Promise.resolve();
46
- }
47
-
48
- showCursor(): Promise<void> {
49
- this.showCursorCalled = true;
50
- return Promise.resolve();
51
- }
52
-
53
- write(text: string): Promise<void> {
54
- this.buffer += text;
55
- return Promise.resolve();
56
- }
57
-
58
- columns(): number {
59
- return 80;
60
- }
61
-
62
- rows(): number {
63
- return 24;
64
- }
65
- }
66
-
67
- function getMockPrinterService(): PrinterService {
68
- return {
69
- colorEnabled: false,
70
- hyperlinksEnabled: false,
71
- darkMode: false,
72
- stdoutWritable: new WritableStream(),
73
- stderrWritable: new WritableStream(),
74
- primary: (m: string) => m,
75
- secondary: (m: string) => m,
76
- emphasised: (m: string) => m,
77
- selected: (m: string) => m,
78
- italic: (m: string) => m,
79
- yellow: (m: string) => m,
80
- orange: (m: string) => m,
81
- red: (m: string) => m,
82
- magenta: (m: string) => m,
83
- violet: (m: string) => m,
84
- blue: (m: string) => m,
85
- cyan: (m: string) => m,
86
- green: (m: string) => m,
87
- color: (m: string, _c: string) => m,
88
- backgroundPrimary: (m: string) => m,
89
- backgroundSecondary: (m: string) => m,
90
- backgroundEmphasised: (m: string) => m,
91
- backgroundSelected: (m: string) => m,
92
- backgroundYellow: (m: string) => m,
93
- backgroundOrange: (m: string) => m,
94
- backgroundRed: (m: string) => m,
95
- backgroundMagenta: (m: string) => m,
96
- backgroundViolet: (m: string) => m,
97
- backgroundBlue: (m: string) => m,
98
- backgroundCyan: (m: string) => m,
99
- backgroundGreen: (m: string) => m,
100
- backgroundColor: (m: string, _c: string) => m,
101
- hyperlink: (t: string, _u: string) => t,
102
- stdoutColumns: () => 80,
103
- stderrColumns: () => 80,
104
- print: () => Promise.resolve(),
105
- debug: () => Promise.resolve(),
106
- info: () => Promise.resolve(),
107
- warn: () => Promise.resolve(),
108
- error: () => Promise.resolve(),
109
- setLevel: () => {},
110
- getLevel: () => 1,
111
- showSpinner: () => Promise.resolve(),
112
- hideSpinner: () => Promise.resolve(),
113
- showProgressBar: () => Promise.resolve(0),
114
- hideProgressBar: () => Promise.resolve(),
115
- hideAllProgressBars: () => Promise.resolve(),
116
- updateProgressBar: () => {},
117
- } as PrinterService;
118
- }
119
-
120
- function createService(
121
- keyReader: MockKeyReader,
122
- configOverrides?: Partial<
123
- import("../../../src/service/prompter/DefaultPrompterService.ts").PrompterServiceConfig
124
- >,
125
- ): {
126
- service: DefaultPrompterService;
127
- terminal: MockTerminal;
128
- } {
129
- const terminal = new MockTerminal();
130
- const config = { ...DEFAULT_PROMPTER_CONFIG, ...configOverrides };
131
- const service = new DefaultPrompterService(config, terminal, keyReader, getMockPrinterService());
132
- return { service, terminal };
133
- }
134
-
135
- const SSH_ENV_KEYS = ["SSH_CONNECTION", "SSH_CLIENT", "SSH_TTY"] as const;
136
-
137
- function withSshEnvOverride<T>(overrides: Record<string, string | undefined>, fn: () => T): T {
138
- const saved = SSH_ENV_KEYS.map((k) => process.env[k]);
139
- SSH_ENV_KEYS.forEach((k) => {
140
- if (k in overrides) {
141
- if (overrides[k] === undefined) delete process.env[k];
142
- else process.env[k] = overrides[k];
143
- } else {
144
- delete process.env[k];
145
- }
146
- });
147
- try {
148
- return fn();
149
- } finally {
150
- SSH_ENV_KEYS.forEach((k, i) => {
151
- if (saved[i] === undefined) delete process.env[k];
152
- else process.env[k] = saved[i];
153
- });
154
- }
155
- }
156
-
157
- function withoutSshEnv<T>(fn: () => T): T {
158
- return withSshEnvOverride({}, fn);
159
- }
160
-
161
- describe("DefaultPrompterService tests", () => {
162
- test("SINGLE_SELECT selects correct option", async () => {
163
- const keyReader = new MockKeyReader();
164
- keyReader.addKeys(
165
- { specialKey: SpecialKey.DOWN },
166
- {
167
- specialKey: SpecialKey.ENTER,
168
- },
169
- );
170
- const { service } = createService(keyReader);
171
-
172
- const result = await service.prompt({
173
- name: "test",
174
- promptText: "Pick one",
175
- type: PromptType.SINGLE_SELECT,
176
- options: [
177
- { displayValue: "Option A", returnedValue: "a" },
178
- { displayValue: "Option B", returnedValue: "b" },
179
- { displayValue: "Option C", returnedValue: "c" },
180
- ],
181
- });
182
-
183
- expect(result.name).toEqual("test");
184
- expect(result.value).toEqual("b");
185
- });
186
-
187
- test("MULTI_SELECT selects correct options", async () => {
188
- const keyReader = new MockKeyReader();
189
- keyReader.addKeys(
190
- { specialKey: SpecialKey.SPACE },
191
- { specialKey: SpecialKey.DOWN },
192
- { specialKey: SpecialKey.SPACE },
193
- { specialKey: SpecialKey.ENTER },
194
- );
195
- const { service } = createService(keyReader);
196
-
197
- const result = await service.prompt({
198
- name: "test",
199
- promptText: "Pick many",
200
- type: PromptType.MULTI_SELECT,
201
- options: [
202
- { displayValue: "Option A", returnedValue: "a" },
203
- { displayValue: "Option B", returnedValue: "b" },
204
- { displayValue: "Option C", returnedValue: "c" },
205
- ],
206
- });
207
-
208
- expect(result.name).toEqual("test");
209
- expect(result.value).toEqual(["a", "b"]);
210
- });
211
-
212
- test("ACKNOWLEDGE selects Yes when navigated to", async () => {
213
- const keyReader = new MockKeyReader();
214
- keyReader.addKeys(
215
- { specialKey: SpecialKey.UP },
216
- {
217
- specialKey: SpecialKey.ENTER,
218
- },
219
- );
220
- const { service } = createService(keyReader);
221
-
222
- const result = await service.prompt({
223
- name: "test",
224
- promptText: "Confirm?",
225
- type: PromptType.ACKNOWLEDGE,
226
- options: [],
227
- });
228
-
229
- expect(result.name).toEqual("test");
230
- expect(result.value).toEqual(true);
231
- });
232
-
233
- test("TOGGLE selects False", async () => {
234
- const keyReader = new MockKeyReader();
235
- keyReader.addKeys(
236
- { specialKey: SpecialKey.DOWN },
237
- {
238
- specialKey: SpecialKey.ENTER,
239
- },
240
- );
241
- const { service } = createService(keyReader);
242
-
243
- const result = await service.prompt({
244
- name: "test",
245
- promptText: "Toggle?",
246
- type: PromptType.TOGGLE,
247
- options: [],
248
- });
249
-
250
- expect(result.name).toEqual("test");
251
- expect(result.value).toEqual(false);
252
- });
253
-
254
- test("TEXT captures typed characters", async () => {
255
- const keyReader = new MockKeyReader();
256
- keyReader.addKeys(
257
- { key: "h" },
258
- { key: "i" },
259
- {
260
- specialKey: SpecialKey.ENTER,
261
- },
262
- );
263
- const { service } = createService(keyReader);
264
-
265
- const result = await service.prompt({
266
- name: "test",
267
- promptText: "Enter text",
268
- type: PromptType.TEXT,
269
- options: [],
270
- });
271
-
272
- expect(result.name).toEqual("test");
273
- expect(result.value).toEqual("hi");
274
- });
275
-
276
- test("TEXT handles backspace", async () => {
277
- const keyReader = new MockKeyReader();
278
- keyReader.addKeys(
279
- { key: "h" },
280
- { key: "i" },
281
- { specialKey: SpecialKey.BACKSPACE },
282
- { key: "o" },
283
- { specialKey: SpecialKey.ENTER },
284
- );
285
- const { service } = createService(keyReader);
286
-
287
- const result = await service.prompt({
288
- name: "test",
289
- promptText: "Enter text",
290
- type: PromptType.TEXT,
291
- options: [],
292
- });
293
-
294
- expect(result.name).toEqual("test");
295
- expect(result.value).toEqual("ho");
296
- });
297
-
298
- test("promptEnabled=false with default returns default value", async () => {
299
- const keyReader = new MockKeyReader();
300
- const { service } = createService(keyReader);
301
- service.promptEnabled = false;
302
-
303
- const result = await service.prompt({
304
- name: "test",
305
- promptText: "Pick one",
306
- type: PromptType.SINGLE_SELECT,
307
- defaultOption: { displayValue: "Default", returnedValue: "default_val" },
308
- options: [
309
- { displayValue: "Default", returnedValue: "default_val" },
310
- { displayValue: "Other", returnedValue: "other" },
311
- ],
312
- });
313
-
314
- expect(result.name).toEqual("test");
315
- expect(result.value).toEqual("default_val");
316
- });
317
-
318
- test("promptEnabled=false without default throws error", async () => {
319
- const keyReader = new MockKeyReader();
320
- const { service } = createService(keyReader);
321
- service.promptEnabled = false;
322
-
323
- await expect(
324
- service.prompt({
325
- name: "test",
326
- promptText: "Pick one",
327
- type: PromptType.SINGLE_SELECT,
328
- options: [{ displayValue: "A", returnedValue: "a" }],
329
- }),
330
- ).rejects.toThrow("Prompting is disabled and no default for prompt: test");
331
- });
332
-
333
- test("ESCAPE cancels prompt", async () => {
334
- const keyReader = new MockKeyReader();
335
- keyReader.addKeys({ specialKey: SpecialKey.ESCAPE });
336
- const { service } = createService(keyReader);
337
-
338
- await expect(
339
- service.prompt({
340
- name: "test",
341
- promptText: "Pick one",
342
- type: PromptType.SINGLE_SELECT,
343
- options: [{ displayValue: "A", returnedValue: "a" }],
344
- }),
345
- ).rejects.toThrow("Prompt cancelled");
346
- });
347
-
348
- test("promptAll runs multiple prompts sequentially", async () => {
349
- const keyReader = new MockKeyReader();
350
- keyReader.addKeys(
351
- { specialKey: SpecialKey.ENTER },
352
- { key: "x" },
353
- { specialKey: SpecialKey.ENTER },
354
- );
355
- const { service } = createService(keyReader);
356
-
357
- const results = await service.promptAll([
358
- {
359
- name: "first",
360
- promptText: "Pick one",
361
- type: PromptType.SINGLE_SELECT,
362
- options: [
363
- { displayValue: "A", returnedValue: "a" },
364
- { displayValue: "B", returnedValue: "b" },
365
- ],
366
- },
367
- {
368
- name: "second",
369
- promptText: "Enter text",
370
- type: PromptType.TEXT,
371
- options: [],
372
- },
373
- ]);
374
-
375
- expect(results.length).toEqual(2);
376
- expect(results[0]!.name).toEqual("first");
377
- expect(results[0]!.value).toEqual("a");
378
- expect(results[1]!.name).toEqual("second");
379
- expect(results[1]!.value).toEqual("x");
380
- });
381
-
382
- test("OPEN_URL calls openUrl and returns URL on ENTER", () =>
383
- withoutSshEnv(async () => {
384
- const keyReader = new MockKeyReader();
385
- keyReader.addKeys({ specialKey: SpecialKey.ENTER });
386
- let openedUrl: string | undefined;
387
- const mockOpenUrl = (url: string): Promise<void> => {
388
- openedUrl = url;
389
- return Promise.resolve();
390
- };
391
- const { service } = createService(keyReader, { openUrl: mockOpenUrl });
392
-
393
- const result = await service.prompt({
394
- name: "login",
395
- promptText: "Login at:",
396
- type: PromptType.OPEN_URL,
397
- options: [
398
- {
399
- displayValue: "Open browser to login",
400
- returnedValue: "https://example.com/login",
401
- },
402
- ],
403
- });
404
-
405
- expect(result.name).toEqual("login");
406
- expect(result.value).toEqual("https://example.com/login");
407
- expect(openedUrl).toEqual("https://example.com/login");
408
- }));
409
-
410
- test("OPEN_URL ESCAPE cancels without calling openUrl", async () => {
411
- const keyReader = new MockKeyReader();
412
- keyReader.addKeys({ specialKey: SpecialKey.ESCAPE });
413
- let openUrlCalled = false;
414
- const mockOpenUrl = (_url: string): Promise<void> => {
415
- openUrlCalled = true;
416
- return Promise.resolve();
417
- };
418
- const { service } = createService(keyReader, { openUrl: mockOpenUrl });
419
-
420
- await expect(
421
- service.prompt({
422
- name: "login",
423
- promptText: "Login at:",
424
- type: PromptType.OPEN_URL,
425
- options: [
426
- {
427
- displayValue: "Open browser",
428
- returnedValue: "https://example.com/login",
429
- },
430
- ],
431
- }),
432
- ).rejects.toThrow("Prompt cancelled");
433
- expect(openUrlCalled).toBe(false);
434
- });
435
-
436
- test("OPEN_URL renders header, URL, and instruction", () =>
437
- withoutSshEnv(async () => {
438
- const keyReader = new MockKeyReader();
439
- keyReader.addKeys({ specialKey: SpecialKey.ENTER });
440
- const mockOpenUrl = (_url: string): Promise<void> => Promise.resolve();
441
- const { service, terminal } = createService(keyReader, {
442
- openUrl: mockOpenUrl,
443
- });
444
-
445
- await service.prompt({
446
- name: "login",
447
- promptText: "Login at:",
448
- type: PromptType.OPEN_URL,
449
- options: [
450
- {
451
- displayValue: "Open browser to login",
452
- returnedValue: "https://example.com/login",
453
- },
454
- ],
455
- });
456
-
457
- expect(terminal.buffer).toContain("Login at:");
458
- expect(terminal.buffer).toContain("https://example.com/login");
459
- expect(terminal.buffer).toContain("Press ENTER to open in the browser...");
460
- expect(terminal.buffer).toContain("Open browser to login");
461
- }));
462
-
463
- test("OPEN_URL handles openUrl failure gracefully", () =>
464
- withoutSshEnv(async () => {
465
- const keyReader = new MockKeyReader();
466
- keyReader.addKeys({ specialKey: SpecialKey.ENTER });
467
- const mockOpenUrl = (_url: string): Promise<void> => {
468
- return Promise.reject(new Error("browser not found"));
469
- };
470
- const { service, terminal } = createService(keyReader, {
471
- openUrl: mockOpenUrl,
472
- });
473
-
474
- const result = await service.prompt({
475
- name: "login",
476
- promptText: "Login at:",
477
- type: PromptType.OPEN_URL,
478
- options: [
479
- {
480
- displayValue: "Open browser",
481
- returnedValue: "https://example.com/login",
482
- },
483
- ],
484
- });
485
-
486
- expect(result.name).toEqual("login");
487
- expect(result.value).toEqual("https://example.com/login");
488
- expect(terminal.buffer).toContain("Failed to open URL: browser not found");
489
- }));
490
-
491
- test("OPEN_URL with promptEnabled=false and defaultOption returns default", async () => {
492
- const keyReader = new MockKeyReader();
493
- const { service } = createService(keyReader);
494
- service.promptEnabled = false;
495
-
496
- const result = await service.prompt({
497
- name: "login",
498
- promptText: "Login at:",
499
- type: PromptType.OPEN_URL,
500
- defaultOption: {
501
- displayValue: "Default URL",
502
- returnedValue: "https://example.com/default",
503
- },
504
- options: [
505
- {
506
- displayValue: "Open browser",
507
- returnedValue: "https://example.com/login",
508
- },
509
- ],
510
- });
511
-
512
- expect(result.name).toEqual("login");
513
- expect(result.value).toEqual("https://example.com/default");
514
- });
515
-
516
- test("OPEN_URL with promptEnabled=false and no defaultOption throws", async () => {
517
- const keyReader = new MockKeyReader();
518
- const { service } = createService(keyReader);
519
- service.promptEnabled = false;
520
-
521
- await expect(
522
- service.prompt({
523
- name: "login",
524
- promptText: "Login at:",
525
- type: PromptType.OPEN_URL,
526
- options: [
527
- {
528
- displayValue: "Open browser",
529
- returnedValue: "https://example.com/login",
530
- },
531
- ],
532
- }),
533
- ).rejects.toThrow("Prompting is disabled and no default for prompt: login");
534
- });
535
-
536
- test("OPEN_URL in SSH session shows copy message and skips openUrl", () =>
537
- withSshEnvOverride({ SSH_CONNECTION: "192.168.1.1 12345 192.168.1.2 22" }, async () => {
538
- const keyReader = new MockKeyReader();
539
- keyReader.addKeys({ specialKey: SpecialKey.ENTER });
540
- let openUrlCalled = false;
541
- const mockOpenUrl = (_url: string): Promise<void> => {
542
- openUrlCalled = true;
543
- return Promise.resolve();
544
- };
545
- const { service, terminal } = createService(keyReader, {
546
- openUrl: mockOpenUrl,
547
- });
548
-
549
- const result = await service.prompt({
550
- name: "login",
551
- promptText: "Login at:",
552
- type: PromptType.OPEN_URL,
553
- options: [
554
- {
555
- displayValue: "Open browser",
556
- returnedValue: "https://example.com/login",
557
- },
558
- ],
559
- });
560
-
561
- expect(result.name).toEqual("login");
562
- expect(result.value).toEqual("https://example.com/login");
563
- expect(openUrlCalled).toBe(false);
564
- expect(terminal.buffer).toContain(
565
- "Copy the URL above and open it in your local browser, then press ENTER to continue...",
566
- );
567
- expect(terminal.buffer).not.toContain("Press ENTER to open in the browser...");
568
- }));
569
-
570
- test("OPEN_URL outside SSH session shows open message", () =>
571
- withoutSshEnv(async () => {
572
- const keyReader = new MockKeyReader();
573
- keyReader.addKeys({ specialKey: SpecialKey.ENTER });
574
- let openUrlCalled = false;
575
- const mockOpenUrl = (_url: string): Promise<void> => {
576
- openUrlCalled = true;
577
- return Promise.resolve();
578
- };
579
- const { service, terminal } = createService(keyReader, {
580
- openUrl: mockOpenUrl,
581
- });
582
-
583
- await service.prompt({
584
- name: "login",
585
- promptText: "Login at:",
586
- type: PromptType.OPEN_URL,
587
- options: [
588
- {
589
- displayValue: "Open browser",
590
- returnedValue: "https://example.com/login",
591
- },
592
- ],
593
- });
594
-
595
- expect(openUrlCalled).toBe(true);
596
- expect(terminal.buffer).toContain("Press ENTER to open in the browser...");
597
- }));
598
- });
@@ -1,41 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
- import PrompterServiceProvider from "../../../src/service/prompter/PrompterServiceProvider.ts";
3
- import { PROMPTER_SERVICE_ID } from "../../../src/api/service/core/PrompterService.ts";
4
- import type PrompterService from "../../../src/api/service/core/PrompterService.ts";
5
- import DefaultContext from "../../../src/runtime/DefaultContext.ts";
6
- import { getCLIConfig } from "../../fixtures/CLIConfig.ts";
7
-
8
- function getMockPrompterService(): PrompterService {
9
- return {
10
- promptEnabled: true,
11
- prompt: () => Promise.resolve({ name: "", value: "" }),
12
- promptAll: () => Promise.resolve([]),
13
- };
14
- }
15
-
16
- describe("PrompterServiceProvider tests", () => {
17
- test("PrompterServiceProvider has correct serviceId", () => {
18
- const provider = new PrompterServiceProvider(100, getMockPrompterService());
19
-
20
- expect(provider.serviceId).toEqual(PROMPTER_SERVICE_ID);
21
- });
22
-
23
- test("PrompterServiceProvider getServiceInfo returns service and one command", async () => {
24
- const prompterService = getMockPrompterService();
25
- const provider = new PrompterServiceProvider(100, prompterService);
26
- const cliConfig = getCLIConfig();
27
-
28
- const serviceInfo = await provider.getServiceInfo(cliConfig);
29
-
30
- expect(serviceInfo.service).toBe(prompterService);
31
- expect(serviceInfo.commands.length).toEqual(1);
32
- expect(serviceInfo.commands[0]!.name).toEqual("no-prompt");
33
- });
34
-
35
- test("PrompterServiceProvider initService resolves", async () => {
36
- const provider = new PrompterServiceProvider(100, getMockPrompterService());
37
- const context = new DefaultContext(getCLIConfig());
38
-
39
- await expect(provider.initService(context)).resolves.toBeUndefined();
40
- });
41
- });
@@ -1,58 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
- import NoPromptCommand from "../../../../src/service/prompter/command/NoPromptCommand.ts";
3
- import PrompterServiceProvider from "../../../../src/service/prompter/PrompterServiceProvider.ts";
4
- import { ArgumentValueTypeName } from "../../../../src/api/argument/ArgumentValueTypes.ts";
5
- import type PrompterService from "../../../../src/api/service/core/PrompterService.ts";
6
- import type Context from "../../../../src/api/Context.ts";
7
-
8
- function getMockPrompterService(): PrompterService {
9
- return {
10
- promptEnabled: true,
11
- prompt: () => Promise.resolve({ name: "", value: "" }),
12
- promptAll: () => Promise.resolve([]),
13
- };
14
- }
15
-
16
- describe("NoPromptCommand tests", () => {
17
- test("NoPromptCommand has correct properties", () => {
18
- const prompterService = getMockPrompterService();
19
- const provider = new PrompterServiceProvider(100, prompterService);
20
- const command = new NoPromptCommand(provider, 100);
21
-
22
- expect(command.name).toEqual("no-prompt");
23
- expect(command.description).toEqual("Disable interactive prompting");
24
- expect(command.enableConfiguration).toBeTrue();
25
- expect(command.executePriority).toEqual(100);
26
- });
27
-
28
- test("NoPromptCommand has correct argument", () => {
29
- const prompterService = getMockPrompterService();
30
- const provider = new PrompterServiceProvider(100, prompterService);
31
- const command = new NoPromptCommand(provider, 100);
32
-
33
- expect(command.argument.type).toEqual(ArgumentValueTypeName.BOOLEAN);
34
- expect(command.argument.defaultValue).toEqual(false);
35
- expect(command.argument.configurationKey).toEqual("NO_PROMPT");
36
- });
37
-
38
- test("NoPromptCommand execute with true disables prompting", async () => {
39
- const prompterService = getMockPrompterService();
40
- const provider = new PrompterServiceProvider(100, prompterService);
41
- const command = new NoPromptCommand(provider, 100);
42
-
43
- await command.execute({} as Context, true);
44
-
45
- expect(provider.prompterService.promptEnabled).toBeFalse();
46
- });
47
-
48
- test("NoPromptCommand execute with false enables prompting", async () => {
49
- const prompterService = getMockPrompterService();
50
- prompterService.promptEnabled = false;
51
- const provider = new PrompterServiceProvider(100, prompterService);
52
- const command = new NoPromptCommand(provider, 100);
53
-
54
- await command.execute({} as Context, false);
55
-
56
- expect(provider.prompterService.promptEnabled).toBeTrue();
57
- });
58
- });