@flowscripter/dynamic-cli-framework 1.7.3 → 1.7.4

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 (367) hide show
  1. package/cli-plugin.ts +1 -1
  2. package/dist/cli-plugin.d.ts +1 -1
  3. package/dist/cli-plugin.d.ts.map +1 -1
  4. package/dist/cli-plugin.js +25 -247
  5. package/dist/index.js +70 -105754
  6. package/dist/src/api/BaseCLIFeatureOptions.js +0 -0
  7. package/dist/src/api/CLI.js +0 -0
  8. package/dist/src/api/CLIConfig.js +0 -0
  9. package/dist/src/api/Context.js +0 -0
  10. package/dist/src/api/RunResult.js +73 -0
  11. package/dist/src/api/argument/Argument.js +0 -0
  12. package/dist/src/api/argument/ArgumentValueTypes.js +18 -0
  13. package/dist/src/api/argument/ComplexOption.js +1 -0
  14. package/dist/src/api/argument/GlobalCommandArgument.js +0 -0
  15. package/dist/src/api/argument/Option.js +0 -0
  16. package/dist/src/api/argument/Positional.js +0 -0
  17. package/dist/src/api/argument/SubCommandArgument.js +1 -0
  18. package/dist/src/api/command/Command.js +0 -0
  19. package/dist/src/api/command/GlobalCommand.js +0 -0
  20. package/dist/src/api/command/GlobalModifierCommand.js +0 -0
  21. package/dist/src/api/command/GroupCommand.js +0 -0
  22. package/dist/src/api/command/SubCommand.js +0 -0
  23. package/dist/src/api/command/UsageExample.js +0 -0
  24. package/dist/src/api/plugin/CLIPlugin.js +2 -0
  25. package/dist/src/api/plugin/CommandFactory.js +7 -0
  26. package/dist/src/api/plugin/ServiceProviderFactory.js +7 -0
  27. package/dist/src/api/plugin/createCLIPlugin.js +30 -0
  28. package/dist/src/api/service/ServiceProvider.js +0 -0
  29. package/dist/src/api/service/core/ArgumentPrompterService.js +1 -0
  30. package/dist/src/api/service/core/AsciiBannerGeneratorService.js +1 -0
  31. package/dist/src/api/service/core/CompletionService.js +8 -0
  32. package/dist/src/api/service/core/DataDumpGeneratorService.js +7 -0
  33. package/dist/src/api/service/core/ImagePrinterService.js +1 -0
  34. package/dist/src/api/service/core/KeyValueService.js +7 -0
  35. package/dist/src/api/service/core/PluginService.js +6 -0
  36. package/dist/src/api/service/core/PrettyPrinterService.js +1 -0
  37. package/dist/src/api/service/core/PrinterService.js +42 -0
  38. package/dist/src/api/service/core/PrompterService.js +10 -0
  39. package/dist/src/api/service/core/SecretService.js +0 -0
  40. package/dist/src/api/service/core/ShutdownService.js +1 -0
  41. package/dist/src/api/service/core/SyntaxHighlighterService.js +1 -0
  42. package/dist/src/api/service/core/Table.js +49 -0
  43. package/dist/src/api/service/core/TableGeneratorService.d.ts +1 -0
  44. package/dist/src/api/service/core/TableGeneratorService.d.ts.map +1 -1
  45. package/dist/src/api/service/core/TableGeneratorService.js +7 -0
  46. package/dist/src/api/service/core/TreePrinterService.js +1 -0
  47. package/dist/src/cli/BaseCLI.d.ts.map +1 -1
  48. package/dist/src/cli/BaseCLI.js +233 -0
  49. package/dist/src/cli/DefaultRuntimeCLI.js +20 -0
  50. package/dist/src/cli/DynamicPluginRuntimeCLI.js +50 -0
  51. package/dist/src/command/MultiCommandCliHelpCommand.js +238 -0
  52. package/dist/src/command/SingleCommandCliHelpCommand.js +104 -0
  53. package/dist/src/command/UsageCommand.js +16 -0
  54. package/dist/src/command/VersionCommand.js +13 -0
  55. package/dist/src/launcher.js +61 -0
  56. package/dist/src/runtime/DefaultContext.js +25 -0
  57. package/dist/src/runtime/argument/ArgumentTypeGuards.js +3 -0
  58. package/dist/src/runtime/command/CommandTypeGuards.js +12 -0
  59. package/dist/src/runtime/command/CommandValidator.js +371 -0
  60. package/dist/src/runtime/parser.js +105 -0
  61. package/dist/src/runtime/registry/CommandRegistry.js +0 -0
  62. package/dist/src/runtime/registry/DefaultCommandRegistry.js +190 -0
  63. package/dist/src/runtime/registry/DefaultServiceProviderRegistry.js +20 -0
  64. package/dist/src/runtime/registry/ServiceProviderRegistry.js +0 -0
  65. package/dist/src/runtime/runner.js +507 -0
  66. package/dist/src/runtime/scanner.js +244 -0
  67. package/dist/src/runtime/values/ValuePopulationResult.js +0 -0
  68. package/dist/src/runtime/values/argumentValueMerge.js +122 -0
  69. package/dist/src/runtime/values/argumentValueValidation.js +505 -0
  70. package/dist/src/runtime/values/globalCommandValuePopulation.js +67 -0
  71. package/dist/src/runtime/values/subCommandValuePopulation.js +549 -0
  72. package/dist/src/service/argumentPrompter/ArgumentPrompterServiceProvider.js +19 -0
  73. package/dist/src/service/argumentPrompter/DefaultArgumentPrompterService.js +197 -0
  74. package/dist/src/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.js +28 -0
  75. package/dist/src/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.js +233 -0
  76. package/dist/src/service/asciiBannerGenerator/standard.flf.json +3 -0
  77. package/dist/src/service/banner/BannerServiceProvider.js +60 -0
  78. package/dist/src/service/banner/command/NoBannerCommand.js +24 -0
  79. package/dist/src/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.js +51 -0
  80. package/dist/src/service/chiselAsciiBannerGenerator/chisel.flf.json +3 -0
  81. package/dist/src/service/completion/CompletionServiceProvider.d.ts +2 -1
  82. package/dist/src/service/completion/CompletionServiceProvider.d.ts.map +1 -1
  83. package/dist/src/service/completion/CompletionServiceProvider.js +160 -0
  84. package/dist/src/service/completion/DefaultCompletionService.js +279 -0
  85. package/dist/src/service/completion/command/CompletionCompleteSubCommand.d.ts +15 -0
  86. package/dist/src/service/completion/command/CompletionCompleteSubCommand.d.ts.map +1 -0
  87. package/dist/src/service/completion/command/CompletionCompleteSubCommand.js +37 -0
  88. package/dist/src/service/completion/command/CompletionGroupCommand.d.ts +14 -0
  89. package/dist/src/service/completion/command/CompletionGroupCommand.d.ts.map +1 -0
  90. package/dist/src/service/completion/command/CompletionGroupCommand.js +10 -0
  91. package/dist/src/service/completion/command/CompletionIntegrationSubCommand.d.ts +14 -0
  92. package/dist/src/service/completion/command/CompletionIntegrationSubCommand.d.ts.map +1 -0
  93. package/dist/src/service/completion/command/CompletionIntegrationSubCommand.js +67 -0
  94. package/dist/src/service/completion/shell/ShellHandler.js +0 -0
  95. package/dist/src/service/completion/shell/bash.js +39 -0
  96. package/dist/src/service/completion/shell/fish.js +35 -0
  97. package/dist/src/service/completion/shell/powershell.js +51 -0
  98. package/dist/src/service/completion/shell/zsh.js +42 -0
  99. package/dist/src/service/configuration/ConfigurationServiceProvider.js +482 -0
  100. package/dist/src/service/configuration/DefaultKeyValueService.js +80 -0
  101. package/dist/src/service/configuration/DefaultSecretService.js +60 -0
  102. package/dist/src/service/configuration/command/ConfigCommand.js +24 -0
  103. package/dist/src/service/configuration/command/DumpConfigCommand.js +18 -0
  104. package/dist/src/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.js +24 -0
  105. package/dist/src/service/dataDumpGenerator/DefaultDataDumpGeneratorService.js +59 -0
  106. package/dist/src/service/imagePrinter/DefaultImagePrinterService.js +10 -0
  107. package/dist/src/service/imagePrinter/ImagePrinterServiceProvider.js +20 -0
  108. package/dist/src/service/plugin/DefaultPluginService.js +21 -0
  109. package/dist/src/service/plugin/DefaultPluginServiceProvider.d.ts +1 -1
  110. package/dist/src/service/plugin/DefaultPluginServiceProvider.d.ts.map +1 -1
  111. package/dist/src/service/plugin/DefaultPluginServiceProvider.js +21 -0
  112. package/dist/src/service/plugin/command/PluginAddSubCommand.d.ts +17 -0
  113. package/dist/src/service/plugin/command/PluginAddSubCommand.d.ts.map +1 -0
  114. package/dist/src/service/plugin/command/PluginAddSubCommand.js +49 -0
  115. package/dist/src/service/plugin/command/PluginGroupCommand.d.ts +12 -0
  116. package/dist/src/service/plugin/command/PluginGroupCommand.d.ts.map +1 -0
  117. package/dist/src/service/plugin/command/PluginGroupCommand.js +21 -0
  118. package/dist/src/service/plugin/command/PluginListSubCommand.d.ts +12 -0
  119. package/dist/src/service/plugin/command/PluginListSubCommand.d.ts.map +1 -0
  120. package/dist/src/service/plugin/command/PluginListSubCommand.js +25 -0
  121. package/dist/src/service/plugin/command/PluginRemoveSubCommand.d.ts +17 -0
  122. package/dist/src/service/plugin/command/PluginRemoveSubCommand.d.ts.map +1 -0
  123. package/dist/src/service/plugin/command/PluginRemoveSubCommand.js +24 -0
  124. package/dist/src/service/plugin/command/PluginSearchSubCommand.d.ts +18 -0
  125. package/dist/src/service/plugin/command/PluginSearchSubCommand.d.ts.map +1 -0
  126. package/dist/src/service/plugin/command/PluginSearchSubCommand.js +34 -0
  127. package/dist/src/service/plugin/command/PluginUpgradeSubCommand.d.ts +12 -0
  128. package/dist/src/service/plugin/command/PluginUpgradeSubCommand.d.ts.map +1 -0
  129. package/dist/src/service/plugin/command/PluginUpgradeSubCommand.js +25 -0
  130. package/dist/src/service/plugin/command/getPluginId.d.ts +3 -0
  131. package/dist/src/service/plugin/command/getPluginId.d.ts.map +1 -0
  132. package/dist/src/service/plugin/command/getPluginId.js +3 -0
  133. package/dist/src/service/prettyPrinter/DefaultPrettyPrinterService.js +45 -0
  134. package/dist/src/service/prettyPrinter/PrettyPrinterServiceProvider.js +28 -0
  135. package/dist/src/service/printer/DefaultPrinterService.js +250 -0
  136. package/dist/src/service/printer/PrinterServiceProvider.js +43 -0
  137. package/dist/src/service/printer/command/DarkModeCommand.js +24 -0
  138. package/dist/src/service/printer/command/LogLevelCommand.js +41 -0
  139. package/dist/src/service/printer/command/NoColorCommand.js +24 -0
  140. package/dist/src/service/printer/command/NoHyperlinksCommand.js +21 -0
  141. package/dist/src/service/printer/terminal/Color.js +15 -0
  142. package/dist/src/service/printer/terminal/Progress.js +271 -0
  143. package/dist/src/service/printer/terminal/Spinner.js +83 -0
  144. package/dist/src/service/printer/terminal/Theme.js +26 -0
  145. package/dist/src/service/prompter/DefaultPrompterService.js +52 -0
  146. package/dist/src/service/prompter/PrompterServiceProvider.js +20 -0
  147. package/dist/src/service/prompter/command/NoPromptCommand.js +21 -0
  148. package/dist/src/service/prompter/prompt/PromptContext.js +22 -0
  149. package/dist/src/service/prompter/prompt/promptAcknowledge.js +19 -0
  150. package/dist/src/service/prompter/prompt/promptMultiSelect.js +74 -0
  151. package/dist/src/service/prompter/prompt/promptOpenUrl.js +70 -0
  152. package/dist/src/service/prompter/prompt/promptSingleSelect.js +73 -0
  153. package/dist/src/service/prompter/prompt/promptText.js +75 -0
  154. package/dist/src/service/prompter/prompt/promptToggle.js +21 -0
  155. package/dist/src/service/shutdown/DefaultShutdownService.js +16 -0
  156. package/dist/src/service/shutdown/ShutdownServiceProvider.js +60 -0
  157. package/dist/src/service/shutdown/ShutdownState.js +5 -0
  158. package/dist/src/service/syntaxHighlighter/DefaultSyntaxHighlighterService.js +54 -0
  159. package/dist/src/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.js +32 -0
  160. package/dist/src/service/tableGenerator/DefaultTableGeneratorService.d.ts +3 -1
  161. package/dist/src/service/tableGenerator/DefaultTableGeneratorService.d.ts.map +1 -1
  162. package/dist/src/service/tableGenerator/DefaultTableGeneratorService.js +344 -0
  163. package/dist/src/service/tableGenerator/TableGeneratorServiceProvider.js +26 -0
  164. package/dist/src/service/treePrinter/DefaultTreePrinterService.js +35 -0
  165. package/dist/src/service/treePrinter/TreePrinterServiceProvider.js +24 -0
  166. package/dist/src/terminal/Ansi.js +23 -0
  167. package/dist/src/terminal/ImageRenderer.js +164 -0
  168. package/dist/src/terminal/KeyReader.js +13 -0
  169. package/dist/src/terminal/PngDecoder.js +115 -0
  170. package/dist/src/terminal/Styler.js +0 -0
  171. package/dist/src/terminal/Terminal.js +0 -0
  172. package/dist/src/terminal/TtyKeyReader.js +87 -0
  173. package/dist/src/terminal/TtyStyler.js +55 -0
  174. package/dist/src/terminal/TtyTerminal.js +52 -0
  175. package/dist/src/terminal/supportsHyperlinks.js +95 -0
  176. package/dist/src/util/configHelper.js +61 -0
  177. package/dist/src/util/envVarHelper.js +216 -0
  178. package/dist/src/util/helpHelper.d.ts.map +1 -1
  179. package/dist/src/util/helpHelper.js +497 -0
  180. package/dist/src/util/logger.js +81 -0
  181. package/dist/src/util/runnerHelper.js +80 -0
  182. package/package.json +2 -2
  183. package/src/api/service/core/TableGeneratorService.ts +1 -0
  184. package/src/cli/BaseCLI.ts +4 -18
  185. package/src/service/completion/CompletionServiceProvider.ts +16 -2
  186. package/src/service/completion/command/CompletionCompleteSubCommand.ts +59 -0
  187. package/src/service/completion/command/CompletionGroupCommand.ts +21 -0
  188. package/src/{command/CompletionCommand.ts → service/completion/command/CompletionIntegrationSubCommand.ts} +12 -73
  189. package/src/service/completion/shell/bash.ts +1 -1
  190. package/src/service/completion/shell/fish.ts +1 -1
  191. package/src/service/completion/shell/powershell.ts +1 -1
  192. package/src/service/completion/shell/zsh.ts +1 -1
  193. package/src/service/plugin/DefaultPluginServiceProvider.ts +2 -2
  194. package/src/service/plugin/command/PluginAddSubCommand.ts +64 -0
  195. package/src/service/plugin/command/PluginGroupCommand.ts +27 -0
  196. package/src/service/plugin/command/PluginListSubCommand.ts +33 -0
  197. package/src/service/plugin/command/PluginRemoveSubCommand.ts +32 -0
  198. package/src/service/plugin/command/PluginSearchSubCommand.ts +42 -0
  199. package/src/service/plugin/command/PluginUpgradeSubCommand.ts +36 -0
  200. package/src/service/plugin/command/getPluginId.ts +5 -0
  201. package/src/service/tableGenerator/DefaultTableGeneratorService.ts +6 -1
  202. package/src/util/helpHelper.ts +1 -2
  203. package/dist/src/command/CompletionCommand.d.ts +0 -32
  204. package/dist/src/command/CompletionCommand.d.ts.map +0 -1
  205. package/dist/src/command/PluginCommand.d.ts +0 -67
  206. package/dist/src/command/PluginCommand.d.ts.map +0 -1
  207. package/dist/tests/cli/BaseCLI.test.d.ts +0 -2
  208. package/dist/tests/cli/BaseCLI.test.d.ts.map +0 -1
  209. package/dist/tests/cli/DynamicPluginRuntimeCLI.test.d.ts +0 -2
  210. package/dist/tests/cli/DynamicPluginRuntimeCLI.test.d.ts.map +0 -1
  211. package/dist/tests/command/CompletionCommand.test.d.ts +0 -2
  212. package/dist/tests/command/CompletionCommand.test.d.ts.map +0 -1
  213. package/dist/tests/command/MultiCommandCliHelpCommand.test.d.ts +0 -2
  214. package/dist/tests/command/MultiCommandCliHelpCommand.test.d.ts.map +0 -1
  215. package/dist/tests/command/PluginCommand.test.d.ts +0 -2
  216. package/dist/tests/command/PluginCommand.test.d.ts.map +0 -1
  217. package/dist/tests/command/SingleCommandCliHelpCommand.test.d.ts +0 -2
  218. package/dist/tests/command/SingleCommandCliHelpCommand.test.d.ts.map +0 -1
  219. package/dist/tests/command/UsageCommand.test.d.ts +0 -2
  220. package/dist/tests/command/UsageCommand.test.d.ts.map +0 -1
  221. package/dist/tests/command/VersionCommand.test.d.ts +0 -2
  222. package/dist/tests/command/VersionCommand.test.d.ts.map +0 -1
  223. package/dist/tests/fixtures/CLIConfig.d.ts +0 -3
  224. package/dist/tests/fixtures/CLIConfig.d.ts.map +0 -1
  225. package/dist/tests/fixtures/Command.d.ts +0 -20
  226. package/dist/tests/fixtures/Command.d.ts.map +0 -1
  227. package/dist/tests/fixtures/CommandRegistry.d.ts +0 -4
  228. package/dist/tests/fixtures/CommandRegistry.d.ts.map +0 -1
  229. package/dist/tests/fixtures/ConfigurationServiceProvider.d.ts +0 -10
  230. package/dist/tests/fixtures/ConfigurationServiceProvider.d.ts.map +0 -1
  231. package/dist/tests/fixtures/Context.d.ts +0 -4
  232. package/dist/tests/fixtures/Context.d.ts.map +0 -1
  233. package/dist/tests/fixtures/ServiceProviderRegistry.d.ts +0 -4
  234. package/dist/tests/fixtures/ServiceProviderRegistry.d.ts.map +0 -1
  235. package/dist/tests/fixtures/StreamString.d.ts +0 -10
  236. package/dist/tests/fixtures/StreamString.d.ts.map +0 -1
  237. package/dist/tests/fixtures/prettierPluginFoo.d.ts +0 -4
  238. package/dist/tests/fixtures/prettierPluginFoo.d.ts.map +0 -1
  239. package/dist/tests/fixtures/util.d.ts +0 -8
  240. package/dist/tests/fixtures/util.d.ts.map +0 -1
  241. package/dist/tests/runtime/DefaultContext.test.d.ts +0 -2
  242. package/dist/tests/runtime/DefaultContext.test.d.ts.map +0 -1
  243. package/dist/tests/runtime/argument/ArgumentTypeGuards.test.d.ts +0 -2
  244. package/dist/tests/runtime/argument/ArgumentTypeGuards.test.d.ts.map +0 -1
  245. package/dist/tests/runtime/command/CommandTypeGuards.test.d.ts +0 -2
  246. package/dist/tests/runtime/command/CommandTypeGuards.test.d.ts.map +0 -1
  247. package/dist/tests/runtime/command/CommandValidator.test.d.ts +0 -2
  248. package/dist/tests/runtime/command/CommandValidator.test.d.ts.map +0 -1
  249. package/dist/tests/runtime/parser.test.d.ts +0 -2
  250. package/dist/tests/runtime/parser.test.d.ts.map +0 -1
  251. package/dist/tests/runtime/registry/DefaultCommandRegistry.test.d.ts +0 -2
  252. package/dist/tests/runtime/registry/DefaultCommandRegistry.test.d.ts.map +0 -1
  253. package/dist/tests/runtime/registry/DefaultServiceProviderRegistry.test.d.ts +0 -2
  254. package/dist/tests/runtime/registry/DefaultServiceProviderRegistry.test.d.ts.map +0 -1
  255. package/dist/tests/runtime/runner.test.d.ts +0 -2
  256. package/dist/tests/runtime/runner.test.d.ts.map +0 -1
  257. package/dist/tests/runtime/scanner.test.d.ts +0 -2
  258. package/dist/tests/runtime/scanner.test.d.ts.map +0 -1
  259. package/dist/tests/runtime/values/argumentValueMerge.test.d.ts +0 -2
  260. package/dist/tests/runtime/values/argumentValueMerge.test.d.ts.map +0 -1
  261. package/dist/tests/runtime/values/argumentValueValidation.test.d.ts +0 -2
  262. package/dist/tests/runtime/values/argumentValueValidation.test.d.ts.map +0 -1
  263. package/dist/tests/runtime/values/globalCommandValuePopulation.test.d.ts +0 -2
  264. package/dist/tests/runtime/values/globalCommandValuePopulation.test.d.ts.map +0 -1
  265. package/dist/tests/runtime/values/subCommandValuePopulation.test.d.ts +0 -2
  266. package/dist/tests/runtime/values/subCommandValuePopulation.test.d.ts.map +0 -1
  267. package/dist/tests/service/argumentPrompter/ArgumentPrompterServiceProvider.test.d.ts +0 -2
  268. package/dist/tests/service/argumentPrompter/ArgumentPrompterServiceProvider.test.d.ts.map +0 -1
  269. package/dist/tests/service/argumentPrompter/DefaultArgumentPrompterService.test.d.ts +0 -2
  270. package/dist/tests/service/argumentPrompter/DefaultArgumentPrompterService.test.d.ts.map +0 -1
  271. package/dist/tests/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.test.d.ts +0 -2
  272. package/dist/tests/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.test.d.ts.map +0 -1
  273. package/dist/tests/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.test.d.ts +0 -2
  274. package/dist/tests/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.test.d.ts.map +0 -1
  275. package/dist/tests/service/banner/BannerServiceProvider.test.d.ts +0 -2
  276. package/dist/tests/service/banner/BannerServiceProvider.test.d.ts.map +0 -1
  277. package/dist/tests/service/banner/command/NoBannerCommand.test.d.ts +0 -2
  278. package/dist/tests/service/banner/command/NoBannerCommand.test.d.ts.map +0 -1
  279. package/dist/tests/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.test.d.ts +0 -2
  280. package/dist/tests/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.test.d.ts.map +0 -1
  281. package/dist/tests/service/completion/CompletionServiceProvider.test.d.ts +0 -2
  282. package/dist/tests/service/completion/CompletionServiceProvider.test.d.ts.map +0 -1
  283. package/dist/tests/service/completion/DefaultCompletionService.test.d.ts +0 -2
  284. package/dist/tests/service/completion/DefaultCompletionService.test.d.ts.map +0 -1
  285. package/dist/tests/service/completion/shell/bash.test.d.ts +0 -2
  286. package/dist/tests/service/completion/shell/bash.test.d.ts.map +0 -1
  287. package/dist/tests/service/completion/shell/fish.test.d.ts +0 -2
  288. package/dist/tests/service/completion/shell/fish.test.d.ts.map +0 -1
  289. package/dist/tests/service/completion/shell/powershell.test.d.ts +0 -2
  290. package/dist/tests/service/completion/shell/powershell.test.d.ts.map +0 -1
  291. package/dist/tests/service/completion/shell/zsh.test.d.ts +0 -2
  292. package/dist/tests/service/completion/shell/zsh.test.d.ts.map +0 -1
  293. package/dist/tests/service/configuration/ConfigurationServiceProvider.test.d.ts +0 -2
  294. package/dist/tests/service/configuration/ConfigurationServiceProvider.test.d.ts.map +0 -1
  295. package/dist/tests/service/configuration/DefaultKeyValueService.test.d.ts +0 -2
  296. package/dist/tests/service/configuration/DefaultKeyValueService.test.d.ts.map +0 -1
  297. package/dist/tests/service/configuration/DefaultSecretService.test.d.ts +0 -2
  298. package/dist/tests/service/configuration/DefaultSecretService.test.d.ts.map +0 -1
  299. package/dist/tests/service/configuration/command/ConfigCommand.test.d.ts +0 -2
  300. package/dist/tests/service/configuration/command/ConfigCommand.test.d.ts.map +0 -1
  301. package/dist/tests/service/configuration/command/DumpConfigCommand.test.d.ts +0 -2
  302. package/dist/tests/service/configuration/command/DumpConfigCommand.test.d.ts.map +0 -1
  303. package/dist/tests/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.test.d.ts +0 -2
  304. package/dist/tests/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.test.d.ts.map +0 -1
  305. package/dist/tests/service/dataDumpGenerator/DefaultDataDumpGeneratorService.test.d.ts +0 -2
  306. package/dist/tests/service/dataDumpGenerator/DefaultDataDumpGeneratorService.test.d.ts.map +0 -1
  307. package/dist/tests/service/imagePrinter/DefaultImagePrinterService.test.d.ts +0 -2
  308. package/dist/tests/service/imagePrinter/DefaultImagePrinterService.test.d.ts.map +0 -1
  309. package/dist/tests/service/imagePrinter/ImagePrinterServiceProvider.test.d.ts +0 -2
  310. package/dist/tests/service/imagePrinter/ImagePrinterServiceProvider.test.d.ts.map +0 -1
  311. package/dist/tests/service/plugin/DefaultPluginServiceProvider.test.d.ts +0 -2
  312. package/dist/tests/service/plugin/DefaultPluginServiceProvider.test.d.ts.map +0 -1
  313. package/dist/tests/service/prettyPrinter/DefaultPrettyPrinterService.test.d.ts +0 -2
  314. package/dist/tests/service/prettyPrinter/DefaultPrettyPrinterService.test.d.ts.map +0 -1
  315. package/dist/tests/service/prettyPrinter/PrettyPrinterServiceProvider.test.d.ts +0 -2
  316. package/dist/tests/service/prettyPrinter/PrettyPrinterServiceProvider.test.d.ts.map +0 -1
  317. package/dist/tests/service/printer/DefaultPrinterService.test.d.ts +0 -2
  318. package/dist/tests/service/printer/DefaultPrinterService.test.d.ts.map +0 -1
  319. package/dist/tests/service/printer/PrinterServiceProvider.test.d.ts +0 -2
  320. package/dist/tests/service/printer/PrinterServiceProvider.test.d.ts.map +0 -1
  321. package/dist/tests/service/printer/command/DarkModeCommand.test.d.ts +0 -2
  322. package/dist/tests/service/printer/command/DarkModeCommand.test.d.ts.map +0 -1
  323. package/dist/tests/service/printer/command/LogLevelCommand.test.d.ts +0 -2
  324. package/dist/tests/service/printer/command/LogLevelCommand.test.d.ts.map +0 -1
  325. package/dist/tests/service/printer/command/NoColorCommand.test.d.ts +0 -2
  326. package/dist/tests/service/printer/command/NoColorCommand.test.d.ts.map +0 -1
  327. package/dist/tests/service/printer/command/NoHyperlinksCommand.test.d.ts +0 -2
  328. package/dist/tests/service/printer/command/NoHyperlinksCommand.test.d.ts.map +0 -1
  329. package/dist/tests/service/printer/terminal/Progress.test.d.ts +0 -2
  330. package/dist/tests/service/printer/terminal/Progress.test.d.ts.map +0 -1
  331. package/dist/tests/service/printer/terminal/Spinner.test.d.ts +0 -2
  332. package/dist/tests/service/printer/terminal/Spinner.test.d.ts.map +0 -1
  333. package/dist/tests/service/prompter/DefaultPrompterService.test.d.ts +0 -2
  334. package/dist/tests/service/prompter/DefaultPrompterService.test.d.ts.map +0 -1
  335. package/dist/tests/service/prompter/PrompterServiceProvider.test.d.ts +0 -2
  336. package/dist/tests/service/prompter/PrompterServiceProvider.test.d.ts.map +0 -1
  337. package/dist/tests/service/prompter/command/NoPromptCommand.test.d.ts +0 -2
  338. package/dist/tests/service/prompter/command/NoPromptCommand.test.d.ts.map +0 -1
  339. package/dist/tests/service/prompter/prompt/PromptContext.test.d.ts +0 -2
  340. package/dist/tests/service/prompter/prompt/PromptContext.test.d.ts.map +0 -1
  341. package/dist/tests/service/shutdown/ShutdownServiceProvider.test.d.ts +0 -2
  342. package/dist/tests/service/shutdown/ShutdownServiceProvider.test.d.ts.map +0 -1
  343. package/dist/tests/service/syntaxHighlighter/DefaultSyntaxHighlighterService.test.d.ts +0 -2
  344. package/dist/tests/service/syntaxHighlighter/DefaultSyntaxHighlighterService.test.d.ts.map +0 -1
  345. package/dist/tests/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.test.d.ts +0 -2
  346. package/dist/tests/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.test.d.ts.map +0 -1
  347. package/dist/tests/service/tableGenerator/DefaultTableGeneratorService.test.d.ts +0 -2
  348. package/dist/tests/service/tableGenerator/DefaultTableGeneratorService.test.d.ts.map +0 -1
  349. package/dist/tests/service/tableGenerator/TableGeneratorServiceProvider.test.d.ts +0 -2
  350. package/dist/tests/service/tableGenerator/TableGeneratorServiceProvider.test.d.ts.map +0 -1
  351. package/dist/tests/service/treePrinter/DefaultTreePrinterService.test.d.ts +0 -2
  352. package/dist/tests/service/treePrinter/DefaultTreePrinterService.test.d.ts.map +0 -1
  353. package/dist/tests/service/treePrinter/TreePrinterServiceProvider.test.d.ts +0 -2
  354. package/dist/tests/service/treePrinter/TreePrinterServiceProvider.test.d.ts.map +0 -1
  355. package/dist/tests/terminal/ImageRenderer.test.d.ts +0 -2
  356. package/dist/tests/terminal/ImageRenderer.test.d.ts.map +0 -1
  357. package/dist/tests/terminal/PngDecoder.test.d.ts +0 -2
  358. package/dist/tests/terminal/PngDecoder.test.d.ts.map +0 -1
  359. package/dist/tests/terminal/supportsHyperlinks.test.d.ts +0 -2
  360. package/dist/tests/terminal/supportsHyperlinks.test.d.ts.map +0 -1
  361. package/dist/tests/util/configHelper.test.d.ts +0 -2
  362. package/dist/tests/util/configHelper.test.d.ts.map +0 -1
  363. package/dist/tests/util/envVarHelper.test.d.ts +0 -2
  364. package/dist/tests/util/envVarHelper.test.d.ts.map +0 -1
  365. package/dist/tests/util/logger.test.d.ts +0 -2
  366. package/dist/tests/util/logger.test.d.ts.map +0 -1
  367. package/src/command/PluginCommand.ts +0 -197
@@ -0,0 +1,80 @@
1
+ import { SECRET_SENTINEL_PREFIX } from "../../api/service/core/KeyValueService.js";
2
+ export default class DefaultKeyValueService {
3
+ #keyValueData;
4
+ #dirty = false;
5
+ #secretService;
6
+ constructor(secretService) {
7
+ this.#secretService = secretService;
8
+ }
9
+ setKeyValueData(keyValueData) {
10
+ if (this.#keyValueData) {
11
+ throw new Error("Attempt to overwrite key-value data, it should be cleared first");
12
+ }
13
+ this.#keyValueData = keyValueData;
14
+ this.#dirty = false;
15
+ }
16
+ clearKeyValueData() {
17
+ this.#keyValueData = undefined;
18
+ this.#dirty = false;
19
+ }
20
+ isDirty() {
21
+ return this.#dirty;
22
+ }
23
+ async getKey(key) {
24
+ if (this.#keyValueData === undefined) {
25
+ throw new Error("Attempt to access undefined key-value data");
26
+ }
27
+ const value = this.#keyValueData.get(key);
28
+ if (value === undefined) {
29
+ throw new Error("Attempt to access unknown key");
30
+ }
31
+ if (value.startsWith(SECRET_SENTINEL_PREFIX)) {
32
+ if (!this.#secretService) {
33
+ throw new Error("Secret sentinel found but no secret service is available");
34
+ }
35
+ const bunSecretName = value.slice(SECRET_SENTINEL_PREFIX.length);
36
+ const secretValue = await this.#secretService.getSecret(bunSecretName);
37
+ if (secretValue === null) {
38
+ throw new Error(`Secret not found in OS secret store for key: '${key}'`);
39
+ }
40
+ return secretValue;
41
+ }
42
+ return value;
43
+ }
44
+ hasKey(key) {
45
+ if (this.#keyValueData === undefined) {
46
+ return Promise.reject(new Error("Attempt to access undefined key-value data"));
47
+ }
48
+ return Promise.resolve(this.#keyValueData.has(key));
49
+ }
50
+ async setKey(key, value, isSecret = false) {
51
+ if (this.#keyValueData === undefined) {
52
+ throw new Error("Attempt to access undefined key-value data");
53
+ }
54
+ if (isSecret) {
55
+ if (!this.#secretService) {
56
+ throw new Error("Attempt to set a secret but no secret service is available");
57
+ }
58
+ const bunSecretName = await this.#secretService.setSecret(key, value);
59
+ this.#keyValueData.set(key, SECRET_SENTINEL_PREFIX + bunSecretName);
60
+ }
61
+ else {
62
+ this.#keyValueData.set(key, value);
63
+ }
64
+ this.#dirty = true;
65
+ }
66
+ async deleteKey(key) {
67
+ if (this.#keyValueData === undefined) {
68
+ throw new Error("Attempt to access undefined key-value data");
69
+ }
70
+ const value = this.#keyValueData.get(key);
71
+ if (value !== undefined && value.startsWith(SECRET_SENTINEL_PREFIX)) {
72
+ if (this.#secretService) {
73
+ const bunSecretName = value.slice(SECRET_SENTINEL_PREFIX.length);
74
+ await this.#secretService.deleteSecret(bunSecretName);
75
+ }
76
+ }
77
+ this.#keyValueData.delete(key);
78
+ this.#dirty = true;
79
+ }
80
+ }
@@ -0,0 +1,60 @@
1
+ import { secrets as bunSecrets } from "bun";
2
+ const MAX_NAME_LENGTH = 255;
3
+ const MAX_VALUE_BYTES = 2047;
4
+ export default class DefaultSecretService {
5
+ #serviceName;
6
+ #secrets;
7
+ #scope;
8
+ constructor(serviceName, secretsApi) {
9
+ this.#serviceName = DefaultSecretService.#sanitize(serviceName);
10
+ if (this.#serviceName.length > MAX_NAME_LENGTH) {
11
+ throw new Error(`Service name exceeds ${MAX_NAME_LENGTH} characters after sanitization: '${this.#serviceName}'`);
12
+ }
13
+ this.#secrets = secretsApi ?? bunSecrets;
14
+ }
15
+ static #sanitize(value) {
16
+ return value.replace(/[^a-zA-Z0-9_]/g, "_");
17
+ }
18
+ setScope(scope) {
19
+ this.#scope = DefaultSecretService.#sanitize(scope);
20
+ }
21
+ clearScope() {
22
+ this.#scope = undefined;
23
+ }
24
+ async setSecret(key, value) {
25
+ if (this.#scope === undefined) {
26
+ throw new Error("Attempt to set secret without a scope being set");
27
+ }
28
+ const name = this.#scope + "_" + DefaultSecretService.#sanitize(key);
29
+ if (name.length > MAX_NAME_LENGTH) {
30
+ throw new Error(`Secret name exceeds ${MAX_NAME_LENGTH} characters: '${name}'`);
31
+ }
32
+ if (new TextEncoder().encode(value).byteLength > MAX_VALUE_BYTES) {
33
+ throw new Error(`Secret value exceeds ${MAX_VALUE_BYTES} bytes`);
34
+ }
35
+ await this.#secrets.set({
36
+ service: this.#serviceName,
37
+ name,
38
+ value,
39
+ });
40
+ return name;
41
+ }
42
+ async getSecret(bunSecretName) {
43
+ return await this.#secrets.get({
44
+ service: this.#serviceName,
45
+ name: bunSecretName,
46
+ });
47
+ }
48
+ async deleteSecret(bunSecretName) {
49
+ return await this.#secrets.delete({
50
+ service: this.#serviceName,
51
+ name: bunSecretName,
52
+ });
53
+ }
54
+ async hasSecret(bunSecretName) {
55
+ return ((await this.#secrets.get({
56
+ service: this.#serviceName,
57
+ name: bunSecretName,
58
+ })) !== null);
59
+ }
60
+ }
@@ -0,0 +1,24 @@
1
+ import { ArgumentValueTypeName, } from "../../../api/argument/ArgumentValueTypes.js";
2
+ /**
3
+ * Command allowing the specification of the configuration file location used by the {@link ConfigurationServiceProvider}.
4
+ */
5
+ export default class ConfigCommand {
6
+ name = "config";
7
+ description = "Set the configuration file location";
8
+ enableConfiguration = true;
9
+ argument = {
10
+ type: ArgumentValueTypeName.STRING,
11
+ configurationKey: "CONFIG",
12
+ };
13
+ executePriority;
14
+ #configurationServiceProvider;
15
+ constructor(configurationServiceProvider, executePriority) {
16
+ this.#configurationServiceProvider = configurationServiceProvider;
17
+ this.executePriority = executePriority;
18
+ }
19
+ execute(_context, argumentValue) {
20
+ const configLocation = argumentValue;
21
+ this.#configurationServiceProvider.setConfigLocation(configLocation);
22
+ return Promise.resolve();
23
+ }
24
+ }
@@ -0,0 +1,18 @@
1
+ import { PRINTER_SERVICE_ID } from "../../../api/service/core/PrinterService.js";
2
+ import { SYNTAX_HIGHLIGHTER_SERVICE_ID } from "../../../api/service/core/SyntaxHighlighterService.js";
3
+ /**
4
+ * Command which dumps the configuration loaded by the {@link ConfigurationServiceProvider}.
5
+ */
6
+ export default class DumpConfigCommand {
7
+ name = "dump-config";
8
+ description = "Dump configuration values";
9
+ #configurationServiceProvider;
10
+ constructor(configurationServiceProvider) {
11
+ this.#configurationServiceProvider = configurationServiceProvider;
12
+ }
13
+ async execute(context) {
14
+ const printerService = context.getServiceById(PRINTER_SERVICE_ID);
15
+ const syntaxHighlighterService = context.getServiceById(SYNTAX_HIGHLIGHTER_SERVICE_ID);
16
+ await printerService.print(`${syntaxHighlighterService.highlight(this.#configurationServiceProvider.getConfigString(), "json")}\n`);
17
+ }
18
+ }
@@ -0,0 +1,24 @@
1
+ import DefaultDataDumpGeneratorService from "./DefaultDataDumpGeneratorService.js";
2
+ import { DATA_DUMP_GENERATOR_SERVICE_ID } from "../../api/service/core/DataDumpGeneratorService.js";
3
+ import { PRINTER_SERVICE_ID } from "../../api/service/core/PrinterService.js";
4
+ export default class DataDumpGeneratorServiceProvider {
5
+ servicePriority;
6
+ serviceId = DATA_DUMP_GENERATOR_SERVICE_ID;
7
+ #defaultService;
8
+ constructor(servicePriority) {
9
+ this.servicePriority = servicePriority;
10
+ this.#defaultService = new DefaultDataDumpGeneratorService();
11
+ }
12
+ getServiceInfo(_cliConfig) {
13
+ return Promise.resolve({
14
+ service: this.#defaultService,
15
+ commands: [],
16
+ });
17
+ }
18
+ initService(context) {
19
+ const printerService = context.getServiceById(PRINTER_SERVICE_ID);
20
+ this.#defaultService.colorEnabled = printerService.colorEnabled;
21
+ this.#defaultService.colorFunction = printerService.color.bind(printerService);
22
+ return Promise.resolve(undefined);
23
+ }
24
+ }
@@ -0,0 +1,59 @@
1
+ import { Buffer } from "node:buffer";
2
+ import { DumpFormat, } from "../../api/service/core/DataDumpGeneratorService.js";
3
+ export default class DefaultDataDumpGeneratorService {
4
+ colorEnabled = true;
5
+ colorFunction = (text) => text;
6
+ #colorByte(text, byteValue, colorScheme) {
7
+ if (!this.colorEnabled || !colorScheme) {
8
+ return text;
9
+ }
10
+ for (const range of colorScheme) {
11
+ if (byteValue >= range.start && byteValue <= range.end) {
12
+ return this.colorFunction(text, range.color);
13
+ }
14
+ }
15
+ return text;
16
+ }
17
+ generate(data, options) {
18
+ if (data.length === 0) {
19
+ return "";
20
+ }
21
+ const format = options?.format ?? DumpFormat.HEX;
22
+ const bytesPerGroup = options?.bytesPerGroup ?? 4;
23
+ const groupsPerRow = options?.groupsPerRow ?? 8;
24
+ const spacesBetweenGroups = options?.spacesBetweenGroups ?? 1;
25
+ const colorScheme = options?.colorScheme;
26
+ const bytesPerRow = bytesPerGroup * groupsPerRow;
27
+ const groupSeparator = " ".repeat(spacesBetweenGroups);
28
+ const rows = [];
29
+ for (let offset = 0; offset < data.length; offset += bytesPerRow) {
30
+ const groups = [];
31
+ for (let g = 0; g < groupsPerRow; g++) {
32
+ const groupStart = offset + g * bytesPerGroup;
33
+ let groupStr = "";
34
+ for (let b = 0; b < bytesPerGroup; b++) {
35
+ const byteIndex = groupStart + b;
36
+ if (byteIndex < data.length) {
37
+ const byteValue = data[byteIndex];
38
+ let rendered;
39
+ if (format === DumpFormat.ASCII) {
40
+ rendered =
41
+ byteValue >= 0x20 && byteValue <= 0x7e ? String.fromCharCode(byteValue) : ".";
42
+ }
43
+ else {
44
+ rendered = byteValue.toString(16).toUpperCase().padStart(2, "0");
45
+ }
46
+ groupStr += this.#colorByte(rendered, byteValue, colorScheme);
47
+ }
48
+ else {
49
+ // Pad partial group
50
+ groupStr += format === DumpFormat.ASCII ? " " : " ";
51
+ }
52
+ }
53
+ groups.push(groupStr);
54
+ }
55
+ rows.push(groups.join(groupSeparator));
56
+ }
57
+ return rows.join("\n");
58
+ }
59
+ }
@@ -0,0 +1,10 @@
1
+ import ImageRenderer from "../../terminal/ImageRenderer.js";
2
+ export default class DefaultImagePrinterService {
3
+ #renderer;
4
+ constructor(terminal) {
5
+ this.#renderer = new ImageRenderer(terminal);
6
+ }
7
+ image(imageBuffer, widthPercentage = 100, hexFormattedBackgroundColor) {
8
+ return this.#renderer.renderImage(imageBuffer, widthPercentage, hexFormattedBackgroundColor);
9
+ }
10
+ }
@@ -0,0 +1,20 @@
1
+ import DefaultImagePrinterService from "./DefaultImagePrinterService.js";
2
+ import { IMAGE_PRINTER_SERVICE_ID } from "../../api/service/core/ImagePrinterService.js";
3
+ export default class ImagePrinterServiceProvider {
4
+ servicePriority;
5
+ serviceId = IMAGE_PRINTER_SERVICE_ID;
6
+ #defaultImagePrinterService;
7
+ constructor(servicePriority, terminal) {
8
+ this.servicePriority = servicePriority;
9
+ this.#defaultImagePrinterService = new DefaultImagePrinterService(terminal);
10
+ }
11
+ getServiceInfo(_cliConfig) {
12
+ return Promise.resolve({
13
+ service: this.#defaultImagePrinterService,
14
+ commands: [],
15
+ });
16
+ }
17
+ initService(_context) {
18
+ return Promise.resolve(undefined);
19
+ }
20
+ }
@@ -0,0 +1,21 @@
1
+ export default class DefaultPluginService {
2
+ #pluginManager;
3
+ constructor(pluginManager) {
4
+ this.#pluginManager = pluginManager;
5
+ }
6
+ search(query) {
7
+ return this.#pluginManager.search(query);
8
+ }
9
+ async install(descriptor) {
10
+ await this.#pluginManager.install(descriptor);
11
+ }
12
+ async uninstall(pluginId) {
13
+ await this.#pluginManager.uninstall(pluginId);
14
+ }
15
+ listInstalled() {
16
+ return this.#pluginManager.listInstalled();
17
+ }
18
+ checkForUpdates() {
19
+ return this.#pluginManager.checkForUpdates();
20
+ }
21
+ }
@@ -1,4 +1,4 @@
1
- import type { ServiceProvider, ServiceInfo } from "../../api/service/ServiceProvider.ts";
1
+ import type { ServiceInfo, ServiceProvider } from "../../api/service/ServiceProvider.ts";
2
2
  import type Context from "../../api/Context.ts";
3
3
  import type CLIConfig from "../../api/CLIConfig.ts";
4
4
  import type { MarketplacePluginManager } from "@flowscripter/dynamic-plugin-framework";
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultPluginServiceProvider.d.ts","sourceRoot":"","sources":["../../../../src/service/plugin/DefaultPluginServiceProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACzF,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAKvF,MAAM,CAAC,OAAO,OAAO,4BAA6B,YAAW,eAAe;;IAC1E,QAAQ,CAAC,SAAS,oBAAqB;IACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;gBAIrB,aAAa,EAAE,wBAAwB,EAAE,eAAe,SAAK;IAKnE,cAAc,CAAC,UAAU,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ3D,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CACpD"}
1
+ {"version":3,"file":"DefaultPluginServiceProvider.d.ts","sourceRoot":"","sources":["../../../../src/service/plugin/DefaultPluginServiceProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACzF,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAKvF,MAAM,CAAC,OAAO,OAAO,4BAA6B,YAAW,eAAe;;IAC1E,QAAQ,CAAC,SAAS,oBAAqB;IACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;gBAIrB,aAAa,EAAE,wBAAwB,EAAE,eAAe,SAAK;IAKnE,cAAc,CAAC,UAAU,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ3D,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CACpD"}
@@ -0,0 +1,21 @@
1
+ import { PLUGIN_SERVICE_ID } from "../../api/service/core/PluginService.js";
2
+ import DefaultPluginService from "./DefaultPluginService.js";
3
+ import { PluginGroupCommand } from "./command/PluginGroupCommand.js";
4
+ export default class DefaultPluginServiceProvider {
5
+ serviceId = PLUGIN_SERVICE_ID;
6
+ servicePriority;
7
+ #pluginManager;
8
+ #pluginService;
9
+ constructor(pluginManager, servicePriority = 50) {
10
+ this.#pluginManager = pluginManager;
11
+ this.servicePriority = servicePriority;
12
+ }
13
+ async getServiceInfo(_cliConfig) {
14
+ this.#pluginService = new DefaultPluginService(this.#pluginManager);
15
+ return {
16
+ service: this.#pluginService,
17
+ commands: [new PluginGroupCommand()],
18
+ };
19
+ }
20
+ async initService(_context) { }
21
+ }
@@ -0,0 +1,17 @@
1
+ import type SubCommand from "../../../api/command/SubCommand.ts";
2
+ import type Context from "../../../api/Context.ts";
3
+ import type { ArgumentValues } from "../../../api/argument/ArgumentValueTypes.ts";
4
+ import { ArgumentValueTypeName } from "../../../api/argument/ArgumentValueTypes.ts";
5
+ export declare class PluginAddSubCommand implements SubCommand {
6
+ readonly name = "add";
7
+ readonly description = "Install a remote plugin";
8
+ readonly enableConfiguration = false;
9
+ readonly options: never[];
10
+ readonly positionals: {
11
+ name: string;
12
+ description: string;
13
+ type: ArgumentValueTypeName;
14
+ }[];
15
+ execute(context: Context, argumentValues: ArgumentValues): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=PluginAddSubCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginAddSubCommand.d.ts","sourceRoot":"","sources":["../../../../../src/service/plugin/command/PluginAddSubCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,oCAAoC,CAAC;AACjE,OAAO,KAAK,OAAO,MAAM,yBAAyB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AAQpF,qBAAa,mBAAoB,YAAW,UAAU;IACpD,QAAQ,CAAC,IAAI,SAAS;IACtB,QAAQ,CAAC,WAAW,6BAA6B;IACjD,QAAQ,CAAC,mBAAmB,SAAS;IACrC,QAAQ,CAAC,OAAO,UAAM;IACtB,QAAQ,CAAC,WAAW;;;;QAMlB;IAEI,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAuC/E"}
@@ -0,0 +1,49 @@
1
+ import { ArgumentValueTypeName } from "../../../api/argument/ArgumentValueTypes.js";
2
+ import { Icon, PRINTER_SERVICE_ID } from "../../../api/service/core/PrinterService.js";
3
+ import { PLUGIN_SERVICE_ID } from "../../../api/service/core/PluginService.js";
4
+ import { getPluginId } from "./getPluginId.js";
5
+ export class PluginAddSubCommand {
6
+ name = "add";
7
+ description = "Install a remote plugin";
8
+ enableConfiguration = false;
9
+ options = [];
10
+ positionals = [
11
+ {
12
+ name: "pluginId",
13
+ description: "Plugin ID to install (e.g. @scope/name)",
14
+ type: ArgumentValueTypeName.STRING,
15
+ },
16
+ ];
17
+ async execute(context, argumentValues) {
18
+ const printerService = context.getServiceById(PRINTER_SERVICE_ID);
19
+ const pluginService = context.getServiceById(PLUGIN_SERVICE_ID);
20
+ const pluginId = argumentValues["pluginId"];
21
+ await printerService.info(`Searching for plugin: ${pluginId}\n`, Icon.INFORMATION);
22
+ let descriptor;
23
+ for await (const d of pluginService.search({ text: pluginId })) {
24
+ if (getPluginId(d) === pluginId || d.pluginId === pluginId) {
25
+ descriptor = d;
26
+ break;
27
+ }
28
+ }
29
+ if (!descriptor) {
30
+ // Search did not find an exact match - attempt direct install by plugin ID.
31
+ // This handles cases where the package exists on the registry but is not
32
+ // returned by search (e.g. recently published or low search ranking).
33
+ await printerService.info(`Plugin not found via search, attempting direct install of ${pluginId}...\n`, Icon.INFORMATION);
34
+ const parts = pluginId.startsWith("@") ? pluginId.slice(1).split("/") : [undefined, pluginId];
35
+ const scope = pluginId.startsWith("@") ? `@${parts[0]}` : undefined;
36
+ const name = pluginId.startsWith("@") ? parts[1] : pluginId;
37
+ descriptor = {
38
+ pluginId,
39
+ scope,
40
+ name,
41
+ version: "latest",
42
+ extensionPoints: [],
43
+ };
44
+ }
45
+ await printerService.info(`Installing ${descriptor.pluginId}...\n`, Icon.INFORMATION);
46
+ await pluginService.install(descriptor);
47
+ await printerService.print(`Plugin ${descriptor.pluginId} installed.\n`, Icon.SUCCESS);
48
+ }
49
+ }
@@ -0,0 +1,12 @@
1
+ import type GroupCommand from "../../../api/command/GroupCommand.ts";
2
+ import type SubCommand from "../../../api/command/SubCommand.ts";
3
+ import type Context from "../../../api/Context.ts";
4
+ export declare class PluginGroupCommand implements GroupCommand {
5
+ readonly name = "plugin";
6
+ readonly description = "Manage CLI plugins";
7
+ readonly enableConfiguration = false;
8
+ readonly memberSubCommands: ReadonlyArray<SubCommand>;
9
+ constructor();
10
+ execute(_context: Context): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=PluginGroupCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginGroupCommand.d.ts","sourceRoot":"","sources":["../../../../../src/service/plugin/command/PluginGroupCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,sCAAsC,CAAC;AACrE,OAAO,KAAK,UAAU,MAAM,oCAAoC,CAAC;AACjE,OAAO,KAAK,OAAO,MAAM,yBAAyB,CAAC;AAOnD,qBAAa,kBAAmB,YAAW,YAAY;IACrD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,wBAAwB;IAC5C,QAAQ,CAAC,mBAAmB,SAAS;IACrC,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;;IAYhD,OAAO,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAChD"}
@@ -0,0 +1,21 @@
1
+ import { PluginListSubCommand } from "./PluginListSubCommand.js";
2
+ import { PluginSearchSubCommand } from "./PluginSearchSubCommand.js";
3
+ import { PluginAddSubCommand } from "./PluginAddSubCommand.js";
4
+ import { PluginRemoveSubCommand } from "./PluginRemoveSubCommand.js";
5
+ import { PluginUpgradeSubCommand } from "./PluginUpgradeSubCommand.js";
6
+ export class PluginGroupCommand {
7
+ name = "plugin";
8
+ description = "Manage CLI plugins";
9
+ enableConfiguration = false;
10
+ memberSubCommands;
11
+ constructor() {
12
+ this.memberSubCommands = [
13
+ new PluginListSubCommand(),
14
+ new PluginSearchSubCommand(),
15
+ new PluginAddSubCommand(),
16
+ new PluginRemoveSubCommand(),
17
+ new PluginUpgradeSubCommand(),
18
+ ];
19
+ }
20
+ async execute(_context) { }
21
+ }
@@ -0,0 +1,12 @@
1
+ import type SubCommand from "../../../api/command/SubCommand.ts";
2
+ import type Context from "../../../api/Context.ts";
3
+ import type { ArgumentValues } from "../../../api/argument/ArgumentValueTypes.ts";
4
+ export declare class PluginListSubCommand implements SubCommand {
5
+ readonly name = "list";
6
+ readonly description = "List locally installed plugins";
7
+ readonly enableConfiguration = false;
8
+ readonly options: never[];
9
+ readonly positionals: never[];
10
+ execute(context: Context, _argumentValues: ArgumentValues): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=PluginListSubCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginListSubCommand.d.ts","sourceRoot":"","sources":["../../../../../src/service/plugin/command/PluginListSubCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,oCAAoC,CAAC;AACjE,OAAO,KAAK,OAAO,MAAM,yBAAyB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAOlF,qBAAa,oBAAqB,YAAW,UAAU;IACrD,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,WAAW,oCAAoC;IACxD,QAAQ,CAAC,mBAAmB,SAAS;IACrC,QAAQ,CAAC,OAAO,UAAM;IACtB,QAAQ,CAAC,WAAW,UAAM;IAEpB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBhF"}
@@ -0,0 +1,25 @@
1
+ import { PRINTER_SERVICE_ID } from "../../../api/service/core/PrinterService.js";
2
+ import { PLUGIN_SERVICE_ID } from "../../../api/service/core/PluginService.js";
3
+ import { getPluginId } from "./getPluginId.js";
4
+ export class PluginListSubCommand {
5
+ name = "list";
6
+ description = "List locally installed plugins";
7
+ enableConfiguration = false;
8
+ options = [];
9
+ positionals = [];
10
+ async execute(context, _argumentValues) {
11
+ const printerService = context.getServiceById(PRINTER_SERVICE_ID);
12
+ const pluginService = context.getServiceById(PLUGIN_SERVICE_ID);
13
+ let found = false;
14
+ for await (const descriptor of pluginService.listInstalled()) {
15
+ if (!found) {
16
+ found = true;
17
+ await printerService.print("Installed plugins:\n");
18
+ }
19
+ await printerService.print(` ${getPluginId(descriptor)} ${descriptor.version}\n`);
20
+ }
21
+ if (!found) {
22
+ await printerService.print("No plugins installed.\n");
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,17 @@
1
+ import type SubCommand from "../../../api/command/SubCommand.ts";
2
+ import type Context from "../../../api/Context.ts";
3
+ import type { ArgumentValues } from "../../../api/argument/ArgumentValueTypes.ts";
4
+ import { ArgumentValueTypeName } from "../../../api/argument/ArgumentValueTypes.ts";
5
+ export declare class PluginRemoveSubCommand implements SubCommand {
6
+ readonly name = "remove";
7
+ readonly description = "Remove a locally installed plugin";
8
+ readonly enableConfiguration = false;
9
+ readonly options: never[];
10
+ readonly positionals: {
11
+ name: string;
12
+ description: string;
13
+ type: ArgumentValueTypeName;
14
+ }[];
15
+ execute(context: Context, argumentValues: ArgumentValues): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=PluginRemoveSubCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginRemoveSubCommand.d.ts","sourceRoot":"","sources":["../../../../../src/service/plugin/command/PluginRemoveSubCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,oCAAoC,CAAC;AACjE,OAAO,KAAK,OAAO,MAAM,yBAAyB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AAMpF,qBAAa,sBAAuB,YAAW,UAAU;IACvD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,uCAAuC;IAC3D,QAAQ,CAAC,mBAAmB,SAAS;IACrC,QAAQ,CAAC,OAAO,UAAM;IACtB,QAAQ,CAAC,WAAW;;;;QAMlB;IAEI,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAS/E"}
@@ -0,0 +1,24 @@
1
+ import { ArgumentValueTypeName } from "../../../api/argument/ArgumentValueTypes.js";
2
+ import { Icon, PRINTER_SERVICE_ID } from "../../../api/service/core/PrinterService.js";
3
+ import { PLUGIN_SERVICE_ID } from "../../../api/service/core/PluginService.js";
4
+ export class PluginRemoveSubCommand {
5
+ name = "remove";
6
+ description = "Remove a locally installed plugin";
7
+ enableConfiguration = false;
8
+ options = [];
9
+ positionals = [
10
+ {
11
+ name: "pluginId",
12
+ description: "Plugin ID to remove (e.g. @scope/name)",
13
+ type: ArgumentValueTypeName.STRING,
14
+ },
15
+ ];
16
+ async execute(context, argumentValues) {
17
+ const printerService = context.getServiceById(PRINTER_SERVICE_ID);
18
+ const pluginService = context.getServiceById(PLUGIN_SERVICE_ID);
19
+ const pluginId = argumentValues["pluginId"];
20
+ await printerService.info(`Removing plugin: ${pluginId}...\n`, Icon.INFORMATION);
21
+ await pluginService.uninstall(pluginId);
22
+ await printerService.print(`Plugin ${pluginId} removed.\n`, Icon.SUCCESS);
23
+ }
24
+ }
@@ -0,0 +1,18 @@
1
+ import type SubCommand from "../../../api/command/SubCommand.ts";
2
+ import type Context from "../../../api/Context.ts";
3
+ import type { ArgumentValues } from "../../../api/argument/ArgumentValueTypes.ts";
4
+ import { ArgumentValueTypeName } from "../../../api/argument/ArgumentValueTypes.ts";
5
+ export declare class PluginSearchSubCommand implements SubCommand {
6
+ readonly name = "search";
7
+ readonly description = "Search remote plugins";
8
+ readonly enableConfiguration = false;
9
+ readonly options: never[];
10
+ readonly positionals: {
11
+ name: string;
12
+ description: string;
13
+ type: ArgumentValueTypeName;
14
+ isVarargOptional: boolean;
15
+ }[];
16
+ execute(context: Context, argumentValues: ArgumentValues): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=PluginSearchSubCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginSearchSubCommand.d.ts","sourceRoot":"","sources":["../../../../../src/service/plugin/command/PluginSearchSubCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,oCAAoC,CAAC;AACjE,OAAO,KAAK,OAAO,MAAM,yBAAyB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AAOpF,qBAAa,sBAAuB,YAAW,UAAU;IACvD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,2BAA2B;IAC/C,QAAQ,CAAC,mBAAmB,SAAS;IACrC,QAAQ,CAAC,OAAO,UAAM;IACtB,QAAQ,CAAC,WAAW;;;;;QAOlB;IAEI,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAiB/E"}
@@ -0,0 +1,34 @@
1
+ import { ArgumentValueTypeName } from "../../../api/argument/ArgumentValueTypes.js";
2
+ import { PRINTER_SERVICE_ID } from "../../../api/service/core/PrinterService.js";
3
+ import { PLUGIN_SERVICE_ID } from "../../../api/service/core/PluginService.js";
4
+ import { getPluginId } from "./getPluginId.js";
5
+ export class PluginSearchSubCommand {
6
+ name = "search";
7
+ description = "Search remote plugins";
8
+ enableConfiguration = false;
9
+ options = [];
10
+ positionals = [
11
+ {
12
+ name: "query",
13
+ description: "Search query",
14
+ type: ArgumentValueTypeName.STRING,
15
+ isVarargOptional: true,
16
+ },
17
+ ];
18
+ async execute(context, argumentValues) {
19
+ const printerService = context.getServiceById(PRINTER_SERVICE_ID);
20
+ const pluginService = context.getServiceById(PLUGIN_SERVICE_ID);
21
+ const query = argumentValues["query"] ?? "";
22
+ let found = false;
23
+ for await (const descriptor of pluginService.search({ text: query })) {
24
+ if (!found) {
25
+ found = true;
26
+ await printerService.print("Available plugins:\n");
27
+ }
28
+ await printerService.print(` ${getPluginId(descriptor)} ${descriptor.version}\n`);
29
+ }
30
+ if (!found) {
31
+ await printerService.print("No plugins found.\n");
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,12 @@
1
+ import type SubCommand from "../../../api/command/SubCommand.ts";
2
+ import type Context from "../../../api/Context.ts";
3
+ import type { ArgumentValues } from "../../../api/argument/ArgumentValueTypes.ts";
4
+ export declare class PluginUpgradeSubCommand implements SubCommand {
5
+ readonly name = "upgrade";
6
+ readonly description = "Upgrade locally installed plugins";
7
+ readonly enableConfiguration = false;
8
+ readonly options: never[];
9
+ readonly positionals: never[];
10
+ execute(context: Context, _argumentValues: ArgumentValues): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=PluginUpgradeSubCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginUpgradeSubCommand.d.ts","sourceRoot":"","sources":["../../../../../src/service/plugin/command/PluginUpgradeSubCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,oCAAoC,CAAC;AACjE,OAAO,KAAK,OAAO,MAAM,yBAAyB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAOlF,qBAAa,uBAAwB,YAAW,UAAU;IACxD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,uCAAuC;IAC3D,QAAQ,CAAC,mBAAmB,SAAS;IACrC,QAAQ,CAAC,OAAO,UAAM;IACtB,QAAQ,CAAC,WAAW,UAAM;IAEpB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBhF"}