@flowscripter/dynamic-cli-framework 1.7.2 → 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 (379) 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 -105710
  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.d.ts +5 -0
  19. package/dist/src/api/command/Command.d.ts.map +1 -1
  20. package/dist/src/api/command/Command.js +0 -0
  21. package/dist/src/api/command/GlobalCommand.js +0 -0
  22. package/dist/src/api/command/GlobalModifierCommand.js +0 -0
  23. package/dist/src/api/command/GroupCommand.js +0 -0
  24. package/dist/src/api/command/SubCommand.js +0 -0
  25. package/dist/src/api/command/UsageExample.js +0 -0
  26. package/dist/src/api/plugin/CLIPlugin.js +2 -0
  27. package/dist/src/api/plugin/CommandFactory.js +7 -0
  28. package/dist/src/api/plugin/ServiceProviderFactory.js +7 -0
  29. package/dist/src/api/plugin/createCLIPlugin.js +30 -0
  30. package/dist/src/api/service/ServiceProvider.js +0 -0
  31. package/dist/src/api/service/core/ArgumentPrompterService.js +1 -0
  32. package/dist/src/api/service/core/AsciiBannerGeneratorService.js +1 -0
  33. package/dist/src/api/service/core/CompletionService.js +8 -0
  34. package/dist/src/api/service/core/DataDumpGeneratorService.js +7 -0
  35. package/dist/src/api/service/core/ImagePrinterService.js +1 -0
  36. package/dist/src/api/service/core/KeyValueService.js +7 -0
  37. package/dist/src/api/service/core/PluginService.js +6 -0
  38. package/dist/src/api/service/core/PrettyPrinterService.js +1 -0
  39. package/dist/src/api/service/core/PrinterService.js +42 -0
  40. package/dist/src/api/service/core/PrompterService.js +10 -0
  41. package/dist/src/api/service/core/SecretService.js +0 -0
  42. package/dist/src/api/service/core/ShutdownService.js +1 -0
  43. package/dist/src/api/service/core/SyntaxHighlighterService.js +1 -0
  44. package/dist/src/api/service/core/Table.js +49 -0
  45. package/dist/src/api/service/core/TableGeneratorService.d.ts +1 -0
  46. package/dist/src/api/service/core/TableGeneratorService.d.ts.map +1 -1
  47. package/dist/src/api/service/core/TableGeneratorService.js +7 -0
  48. package/dist/src/api/service/core/TreePrinterService.js +1 -0
  49. package/dist/src/cli/BaseCLI.d.ts.map +1 -1
  50. package/dist/src/cli/BaseCLI.js +233 -0
  51. package/dist/src/cli/DefaultRuntimeCLI.d.ts.map +1 -1
  52. package/dist/src/cli/DefaultRuntimeCLI.js +20 -0
  53. package/dist/src/cli/DynamicPluginRuntimeCLI.js +50 -0
  54. package/dist/src/command/MultiCommandCliHelpCommand.d.ts.map +1 -1
  55. package/dist/src/command/MultiCommandCliHelpCommand.js +238 -0
  56. package/dist/src/command/SingleCommandCliHelpCommand.js +104 -0
  57. package/dist/src/command/UsageCommand.js +16 -0
  58. package/dist/src/command/VersionCommand.js +13 -0
  59. package/dist/src/launcher.js +61 -0
  60. package/dist/src/runtime/DefaultContext.js +25 -0
  61. package/dist/src/runtime/argument/ArgumentTypeGuards.js +3 -0
  62. package/dist/src/runtime/command/CommandTypeGuards.js +12 -0
  63. package/dist/src/runtime/command/CommandValidator.js +371 -0
  64. package/dist/src/runtime/parser.js +105 -0
  65. package/dist/src/runtime/registry/CommandRegistry.js +0 -0
  66. package/dist/src/runtime/registry/DefaultCommandRegistry.js +190 -0
  67. package/dist/src/runtime/registry/DefaultServiceProviderRegistry.js +20 -0
  68. package/dist/src/runtime/registry/ServiceProviderRegistry.js +0 -0
  69. package/dist/src/runtime/runner.js +507 -0
  70. package/dist/src/runtime/scanner.js +244 -0
  71. package/dist/src/runtime/values/ValuePopulationResult.js +0 -0
  72. package/dist/src/runtime/values/argumentValueMerge.js +122 -0
  73. package/dist/src/runtime/values/argumentValueValidation.js +505 -0
  74. package/dist/src/runtime/values/globalCommandValuePopulation.js +67 -0
  75. package/dist/src/runtime/values/subCommandValuePopulation.js +549 -0
  76. package/dist/src/service/argumentPrompter/ArgumentPrompterServiceProvider.js +19 -0
  77. package/dist/src/service/argumentPrompter/DefaultArgumentPrompterService.js +197 -0
  78. package/dist/src/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.js +28 -0
  79. package/dist/src/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.js +233 -0
  80. package/dist/src/service/asciiBannerGenerator/standard.flf.json +3 -0
  81. package/dist/src/service/banner/BannerServiceProvider.js +60 -0
  82. package/dist/src/service/banner/command/NoBannerCommand.js +24 -0
  83. package/dist/src/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.js +51 -0
  84. package/dist/src/service/chiselAsciiBannerGenerator/chisel.flf.json +3 -0
  85. package/dist/src/service/completion/CompletionServiceProvider.d.ts +2 -1
  86. package/dist/src/service/completion/CompletionServiceProvider.d.ts.map +1 -1
  87. package/dist/src/service/completion/CompletionServiceProvider.js +160 -0
  88. package/dist/src/service/completion/DefaultCompletionService.d.ts.map +1 -1
  89. package/dist/src/service/completion/DefaultCompletionService.js +279 -0
  90. package/dist/src/service/completion/command/CompletionCompleteSubCommand.d.ts +15 -0
  91. package/dist/src/service/completion/command/CompletionCompleteSubCommand.d.ts.map +1 -0
  92. package/dist/src/service/completion/command/CompletionCompleteSubCommand.js +37 -0
  93. package/dist/src/service/completion/command/CompletionGroupCommand.d.ts +14 -0
  94. package/dist/src/service/completion/command/CompletionGroupCommand.d.ts.map +1 -0
  95. package/dist/src/service/completion/command/CompletionGroupCommand.js +10 -0
  96. package/dist/src/service/completion/command/CompletionIntegrationSubCommand.d.ts +14 -0
  97. package/dist/src/service/completion/command/CompletionIntegrationSubCommand.d.ts.map +1 -0
  98. package/dist/src/service/completion/command/CompletionIntegrationSubCommand.js +67 -0
  99. package/dist/src/service/completion/shell/ShellHandler.js +0 -0
  100. package/dist/src/service/completion/shell/bash.js +39 -0
  101. package/dist/src/service/completion/shell/fish.js +35 -0
  102. package/dist/src/service/completion/shell/powershell.js +51 -0
  103. package/dist/src/service/completion/shell/zsh.js +42 -0
  104. package/dist/src/service/configuration/ConfigurationServiceProvider.js +482 -0
  105. package/dist/src/service/configuration/DefaultKeyValueService.js +80 -0
  106. package/dist/src/service/configuration/DefaultSecretService.js +60 -0
  107. package/dist/src/service/configuration/command/ConfigCommand.js +24 -0
  108. package/dist/src/service/configuration/command/DumpConfigCommand.js +18 -0
  109. package/dist/src/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.js +24 -0
  110. package/dist/src/service/dataDumpGenerator/DefaultDataDumpGeneratorService.js +59 -0
  111. package/dist/src/service/imagePrinter/DefaultImagePrinterService.js +10 -0
  112. package/dist/src/service/imagePrinter/ImagePrinterServiceProvider.js +20 -0
  113. package/dist/src/service/plugin/DefaultPluginService.js +21 -0
  114. package/dist/src/service/plugin/DefaultPluginServiceProvider.d.ts +1 -1
  115. package/dist/src/service/plugin/DefaultPluginServiceProvider.d.ts.map +1 -1
  116. package/dist/src/service/plugin/DefaultPluginServiceProvider.js +21 -0
  117. package/dist/src/service/plugin/command/PluginAddSubCommand.d.ts +17 -0
  118. package/dist/src/service/plugin/command/PluginAddSubCommand.d.ts.map +1 -0
  119. package/dist/src/service/plugin/command/PluginAddSubCommand.js +49 -0
  120. package/dist/src/service/plugin/command/PluginGroupCommand.d.ts +12 -0
  121. package/dist/src/service/plugin/command/PluginGroupCommand.d.ts.map +1 -0
  122. package/dist/src/service/plugin/command/PluginGroupCommand.js +21 -0
  123. package/dist/src/service/plugin/command/PluginListSubCommand.d.ts +12 -0
  124. package/dist/src/service/plugin/command/PluginListSubCommand.d.ts.map +1 -0
  125. package/dist/src/service/plugin/command/PluginListSubCommand.js +25 -0
  126. package/dist/src/service/plugin/command/PluginRemoveSubCommand.d.ts +17 -0
  127. package/dist/src/service/plugin/command/PluginRemoveSubCommand.d.ts.map +1 -0
  128. package/dist/src/service/plugin/command/PluginRemoveSubCommand.js +24 -0
  129. package/dist/src/service/plugin/command/PluginSearchSubCommand.d.ts +18 -0
  130. package/dist/src/service/plugin/command/PluginSearchSubCommand.d.ts.map +1 -0
  131. package/dist/src/service/plugin/command/PluginSearchSubCommand.js +34 -0
  132. package/dist/src/service/plugin/command/PluginUpgradeSubCommand.d.ts +12 -0
  133. package/dist/src/service/plugin/command/PluginUpgradeSubCommand.d.ts.map +1 -0
  134. package/dist/src/service/plugin/command/PluginUpgradeSubCommand.js +25 -0
  135. package/dist/src/service/plugin/command/getPluginId.d.ts +3 -0
  136. package/dist/src/service/plugin/command/getPluginId.d.ts.map +1 -0
  137. package/dist/src/service/plugin/command/getPluginId.js +3 -0
  138. package/dist/src/service/prettyPrinter/DefaultPrettyPrinterService.js +45 -0
  139. package/dist/src/service/prettyPrinter/PrettyPrinterServiceProvider.js +28 -0
  140. package/dist/src/service/printer/DefaultPrinterService.js +250 -0
  141. package/dist/src/service/printer/PrinterServiceProvider.js +43 -0
  142. package/dist/src/service/printer/command/DarkModeCommand.js +24 -0
  143. package/dist/src/service/printer/command/LogLevelCommand.js +41 -0
  144. package/dist/src/service/printer/command/NoColorCommand.js +24 -0
  145. package/dist/src/service/printer/command/NoHyperlinksCommand.js +21 -0
  146. package/dist/src/service/printer/terminal/Color.js +15 -0
  147. package/dist/src/service/printer/terminal/Progress.js +271 -0
  148. package/dist/src/service/printer/terminal/Spinner.js +83 -0
  149. package/dist/src/service/printer/terminal/Theme.js +26 -0
  150. package/dist/src/service/prompter/DefaultPrompterService.js +52 -0
  151. package/dist/src/service/prompter/PrompterServiceProvider.js +20 -0
  152. package/dist/src/service/prompter/command/NoPromptCommand.js +21 -0
  153. package/dist/src/service/prompter/prompt/PromptContext.js +22 -0
  154. package/dist/src/service/prompter/prompt/promptAcknowledge.js +19 -0
  155. package/dist/src/service/prompter/prompt/promptMultiSelect.js +74 -0
  156. package/dist/src/service/prompter/prompt/promptOpenUrl.js +70 -0
  157. package/dist/src/service/prompter/prompt/promptSingleSelect.js +73 -0
  158. package/dist/src/service/prompter/prompt/promptText.js +75 -0
  159. package/dist/src/service/prompter/prompt/promptToggle.js +21 -0
  160. package/dist/src/service/shutdown/DefaultShutdownService.js +16 -0
  161. package/dist/src/service/shutdown/ShutdownServiceProvider.js +60 -0
  162. package/dist/src/service/shutdown/ShutdownState.js +5 -0
  163. package/dist/src/service/syntaxHighlighter/DefaultSyntaxHighlighterService.js +54 -0
  164. package/dist/src/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.js +32 -0
  165. package/dist/src/service/tableGenerator/DefaultTableGeneratorService.d.ts +3 -1
  166. package/dist/src/service/tableGenerator/DefaultTableGeneratorService.d.ts.map +1 -1
  167. package/dist/src/service/tableGenerator/DefaultTableGeneratorService.js +344 -0
  168. package/dist/src/service/tableGenerator/TableGeneratorServiceProvider.js +26 -0
  169. package/dist/src/service/treePrinter/DefaultTreePrinterService.js +35 -0
  170. package/dist/src/service/treePrinter/TreePrinterServiceProvider.js +24 -0
  171. package/dist/src/terminal/Ansi.js +23 -0
  172. package/dist/src/terminal/ImageRenderer.js +164 -0
  173. package/dist/src/terminal/KeyReader.js +13 -0
  174. package/dist/src/terminal/PngDecoder.js +115 -0
  175. package/dist/src/terminal/Styler.js +0 -0
  176. package/dist/src/terminal/Terminal.js +0 -0
  177. package/dist/src/terminal/TtyKeyReader.js +87 -0
  178. package/dist/src/terminal/TtyStyler.js +55 -0
  179. package/dist/src/terminal/TtyTerminal.js +52 -0
  180. package/dist/src/terminal/supportsHyperlinks.d.ts.map +1 -1
  181. package/dist/src/terminal/supportsHyperlinks.js +95 -0
  182. package/dist/src/util/configHelper.js +61 -0
  183. package/dist/src/util/envVarHelper.js +216 -0
  184. package/dist/src/util/helpHelper.d.ts.map +1 -1
  185. package/dist/src/util/helpHelper.js +497 -0
  186. package/dist/src/util/logger.js +81 -0
  187. package/dist/src/util/runnerHelper.d.ts +1 -0
  188. package/dist/src/util/runnerHelper.d.ts.map +1 -1
  189. package/dist/src/util/runnerHelper.js +80 -0
  190. package/package.json +3 -3
  191. package/src/api/command/Command.ts +6 -0
  192. package/src/api/service/core/TableGeneratorService.ts +1 -0
  193. package/src/cli/BaseCLI.ts +6 -18
  194. package/src/cli/DefaultRuntimeCLI.ts +0 -4
  195. package/src/command/MultiCommandCliHelpCommand.ts +23 -7
  196. package/src/service/completion/CompletionServiceProvider.ts +16 -2
  197. package/src/service/completion/DefaultCompletionService.ts +14 -0
  198. package/src/service/completion/command/CompletionCompleteSubCommand.ts +59 -0
  199. package/src/service/completion/command/CompletionGroupCommand.ts +21 -0
  200. package/src/{command/CompletionCommand.ts → service/completion/command/CompletionIntegrationSubCommand.ts} +12 -72
  201. package/src/service/completion/shell/bash.ts +1 -1
  202. package/src/service/completion/shell/fish.ts +1 -1
  203. package/src/service/completion/shell/powershell.ts +1 -1
  204. package/src/service/completion/shell/zsh.ts +1 -1
  205. package/src/service/plugin/DefaultPluginServiceProvider.ts +2 -2
  206. package/src/service/plugin/command/PluginAddSubCommand.ts +64 -0
  207. package/src/service/plugin/command/PluginGroupCommand.ts +27 -0
  208. package/src/service/plugin/command/PluginListSubCommand.ts +33 -0
  209. package/src/service/plugin/command/PluginRemoveSubCommand.ts +32 -0
  210. package/src/service/plugin/command/PluginSearchSubCommand.ts +42 -0
  211. package/src/service/plugin/command/PluginUpgradeSubCommand.ts +36 -0
  212. package/src/service/plugin/command/getPluginId.ts +5 -0
  213. package/src/service/tableGenerator/DefaultTableGeneratorService.ts +7 -2
  214. package/src/terminal/supportsHyperlinks.ts +22 -0
  215. package/src/util/helpHelper.ts +7 -6
  216. package/src/util/runnerHelper.ts +14 -2
  217. package/dist/src/command/CompletionCommand.d.ts +0 -31
  218. package/dist/src/command/CompletionCommand.d.ts.map +0 -1
  219. package/dist/src/command/PluginCommand.d.ts +0 -67
  220. package/dist/src/command/PluginCommand.d.ts.map +0 -1
  221. package/dist/tests/cli/BaseCLI.test.d.ts +0 -2
  222. package/dist/tests/cli/BaseCLI.test.d.ts.map +0 -1
  223. package/dist/tests/cli/DynamicPluginRuntimeCLI.test.d.ts +0 -2
  224. package/dist/tests/cli/DynamicPluginRuntimeCLI.test.d.ts.map +0 -1
  225. package/dist/tests/command/CompletionCommand.test.d.ts +0 -2
  226. package/dist/tests/command/CompletionCommand.test.d.ts.map +0 -1
  227. package/dist/tests/command/MultiCommandCliHelpCommand.test.d.ts +0 -2
  228. package/dist/tests/command/MultiCommandCliHelpCommand.test.d.ts.map +0 -1
  229. package/dist/tests/command/SingleCommandCliHelpCommand.test.d.ts +0 -2
  230. package/dist/tests/command/SingleCommandCliHelpCommand.test.d.ts.map +0 -1
  231. package/dist/tests/command/UsageCommand.test.d.ts +0 -2
  232. package/dist/tests/command/UsageCommand.test.d.ts.map +0 -1
  233. package/dist/tests/command/VersionCommand.test.d.ts +0 -2
  234. package/dist/tests/command/VersionCommand.test.d.ts.map +0 -1
  235. package/dist/tests/fixtures/CLIConfig.d.ts +0 -3
  236. package/dist/tests/fixtures/CLIConfig.d.ts.map +0 -1
  237. package/dist/tests/fixtures/Command.d.ts +0 -20
  238. package/dist/tests/fixtures/Command.d.ts.map +0 -1
  239. package/dist/tests/fixtures/CommandRegistry.d.ts +0 -4
  240. package/dist/tests/fixtures/CommandRegistry.d.ts.map +0 -1
  241. package/dist/tests/fixtures/ConfigurationServiceProvider.d.ts +0 -10
  242. package/dist/tests/fixtures/ConfigurationServiceProvider.d.ts.map +0 -1
  243. package/dist/tests/fixtures/Context.d.ts +0 -4
  244. package/dist/tests/fixtures/Context.d.ts.map +0 -1
  245. package/dist/tests/fixtures/ServiceProviderRegistry.d.ts +0 -4
  246. package/dist/tests/fixtures/ServiceProviderRegistry.d.ts.map +0 -1
  247. package/dist/tests/fixtures/StreamString.d.ts +0 -10
  248. package/dist/tests/fixtures/StreamString.d.ts.map +0 -1
  249. package/dist/tests/fixtures/prettierPluginFoo.d.ts +0 -4
  250. package/dist/tests/fixtures/prettierPluginFoo.d.ts.map +0 -1
  251. package/dist/tests/fixtures/util.d.ts +0 -8
  252. package/dist/tests/fixtures/util.d.ts.map +0 -1
  253. package/dist/tests/runtime/DefaultContext.test.d.ts +0 -2
  254. package/dist/tests/runtime/DefaultContext.test.d.ts.map +0 -1
  255. package/dist/tests/runtime/argument/ArgumentTypeGuards.test.d.ts +0 -2
  256. package/dist/tests/runtime/argument/ArgumentTypeGuards.test.d.ts.map +0 -1
  257. package/dist/tests/runtime/command/CommandTypeGuards.test.d.ts +0 -2
  258. package/dist/tests/runtime/command/CommandTypeGuards.test.d.ts.map +0 -1
  259. package/dist/tests/runtime/command/CommandValidator.test.d.ts +0 -2
  260. package/dist/tests/runtime/command/CommandValidator.test.d.ts.map +0 -1
  261. package/dist/tests/runtime/parser.test.d.ts +0 -2
  262. package/dist/tests/runtime/parser.test.d.ts.map +0 -1
  263. package/dist/tests/runtime/registry/DefaultCommandRegistry.test.d.ts +0 -2
  264. package/dist/tests/runtime/registry/DefaultCommandRegistry.test.d.ts.map +0 -1
  265. package/dist/tests/runtime/registry/DefaultServiceProviderRegistry.test.d.ts +0 -2
  266. package/dist/tests/runtime/registry/DefaultServiceProviderRegistry.test.d.ts.map +0 -1
  267. package/dist/tests/runtime/runner.test.d.ts +0 -2
  268. package/dist/tests/runtime/runner.test.d.ts.map +0 -1
  269. package/dist/tests/runtime/scanner.test.d.ts +0 -2
  270. package/dist/tests/runtime/scanner.test.d.ts.map +0 -1
  271. package/dist/tests/runtime/values/argumentValueMerge.test.d.ts +0 -2
  272. package/dist/tests/runtime/values/argumentValueMerge.test.d.ts.map +0 -1
  273. package/dist/tests/runtime/values/argumentValueValidation.test.d.ts +0 -2
  274. package/dist/tests/runtime/values/argumentValueValidation.test.d.ts.map +0 -1
  275. package/dist/tests/runtime/values/globalCommandValuePopulation.test.d.ts +0 -2
  276. package/dist/tests/runtime/values/globalCommandValuePopulation.test.d.ts.map +0 -1
  277. package/dist/tests/runtime/values/subCommandValuePopulation.test.d.ts +0 -2
  278. package/dist/tests/runtime/values/subCommandValuePopulation.test.d.ts.map +0 -1
  279. package/dist/tests/service/argumentPrompter/ArgumentPrompterServiceProvider.test.d.ts +0 -2
  280. package/dist/tests/service/argumentPrompter/ArgumentPrompterServiceProvider.test.d.ts.map +0 -1
  281. package/dist/tests/service/argumentPrompter/DefaultArgumentPrompterService.test.d.ts +0 -2
  282. package/dist/tests/service/argumentPrompter/DefaultArgumentPrompterService.test.d.ts.map +0 -1
  283. package/dist/tests/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.test.d.ts +0 -2
  284. package/dist/tests/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.test.d.ts.map +0 -1
  285. package/dist/tests/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.test.d.ts +0 -2
  286. package/dist/tests/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.test.d.ts.map +0 -1
  287. package/dist/tests/service/banner/BannerServiceProvider.test.d.ts +0 -2
  288. package/dist/tests/service/banner/BannerServiceProvider.test.d.ts.map +0 -1
  289. package/dist/tests/service/banner/command/NoBannerCommand.test.d.ts +0 -2
  290. package/dist/tests/service/banner/command/NoBannerCommand.test.d.ts.map +0 -1
  291. package/dist/tests/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.test.d.ts +0 -2
  292. package/dist/tests/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.test.d.ts.map +0 -1
  293. package/dist/tests/service/completion/CompletionServiceProvider.test.d.ts +0 -2
  294. package/dist/tests/service/completion/CompletionServiceProvider.test.d.ts.map +0 -1
  295. package/dist/tests/service/completion/DefaultCompletionService.test.d.ts +0 -2
  296. package/dist/tests/service/completion/DefaultCompletionService.test.d.ts.map +0 -1
  297. package/dist/tests/service/completion/shell/bash.test.d.ts +0 -2
  298. package/dist/tests/service/completion/shell/bash.test.d.ts.map +0 -1
  299. package/dist/tests/service/completion/shell/fish.test.d.ts +0 -2
  300. package/dist/tests/service/completion/shell/fish.test.d.ts.map +0 -1
  301. package/dist/tests/service/completion/shell/powershell.test.d.ts +0 -2
  302. package/dist/tests/service/completion/shell/powershell.test.d.ts.map +0 -1
  303. package/dist/tests/service/completion/shell/zsh.test.d.ts +0 -2
  304. package/dist/tests/service/completion/shell/zsh.test.d.ts.map +0 -1
  305. package/dist/tests/service/configuration/ConfigurationServiceProvider.test.d.ts +0 -2
  306. package/dist/tests/service/configuration/ConfigurationServiceProvider.test.d.ts.map +0 -1
  307. package/dist/tests/service/configuration/DefaultKeyValueService.test.d.ts +0 -2
  308. package/dist/tests/service/configuration/DefaultKeyValueService.test.d.ts.map +0 -1
  309. package/dist/tests/service/configuration/DefaultSecretService.test.d.ts +0 -2
  310. package/dist/tests/service/configuration/DefaultSecretService.test.d.ts.map +0 -1
  311. package/dist/tests/service/configuration/command/ConfigCommand.test.d.ts +0 -2
  312. package/dist/tests/service/configuration/command/ConfigCommand.test.d.ts.map +0 -1
  313. package/dist/tests/service/configuration/command/DumpConfigCommand.test.d.ts +0 -2
  314. package/dist/tests/service/configuration/command/DumpConfigCommand.test.d.ts.map +0 -1
  315. package/dist/tests/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.test.d.ts +0 -2
  316. package/dist/tests/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.test.d.ts.map +0 -1
  317. package/dist/tests/service/dataDumpGenerator/DefaultDataDumpGeneratorService.test.d.ts +0 -2
  318. package/dist/tests/service/dataDumpGenerator/DefaultDataDumpGeneratorService.test.d.ts.map +0 -1
  319. package/dist/tests/service/imagePrinter/DefaultImagePrinterService.test.d.ts +0 -2
  320. package/dist/tests/service/imagePrinter/DefaultImagePrinterService.test.d.ts.map +0 -1
  321. package/dist/tests/service/imagePrinter/ImagePrinterServiceProvider.test.d.ts +0 -2
  322. package/dist/tests/service/imagePrinter/ImagePrinterServiceProvider.test.d.ts.map +0 -1
  323. package/dist/tests/service/plugin/DefaultPluginServiceProvider.test.d.ts +0 -2
  324. package/dist/tests/service/plugin/DefaultPluginServiceProvider.test.d.ts.map +0 -1
  325. package/dist/tests/service/prettyPrinter/DefaultPrettyPrinterService.test.d.ts +0 -2
  326. package/dist/tests/service/prettyPrinter/DefaultPrettyPrinterService.test.d.ts.map +0 -1
  327. package/dist/tests/service/prettyPrinter/PrettyPrinterServiceProvider.test.d.ts +0 -2
  328. package/dist/tests/service/prettyPrinter/PrettyPrinterServiceProvider.test.d.ts.map +0 -1
  329. package/dist/tests/service/printer/DefaultPrinterService.test.d.ts +0 -2
  330. package/dist/tests/service/printer/DefaultPrinterService.test.d.ts.map +0 -1
  331. package/dist/tests/service/printer/PrinterServiceProvider.test.d.ts +0 -2
  332. package/dist/tests/service/printer/PrinterServiceProvider.test.d.ts.map +0 -1
  333. package/dist/tests/service/printer/command/DarkModeCommand.test.d.ts +0 -2
  334. package/dist/tests/service/printer/command/DarkModeCommand.test.d.ts.map +0 -1
  335. package/dist/tests/service/printer/command/LogLevelCommand.test.d.ts +0 -2
  336. package/dist/tests/service/printer/command/LogLevelCommand.test.d.ts.map +0 -1
  337. package/dist/tests/service/printer/command/NoColorCommand.test.d.ts +0 -2
  338. package/dist/tests/service/printer/command/NoColorCommand.test.d.ts.map +0 -1
  339. package/dist/tests/service/printer/command/NoHyperlinksCommand.test.d.ts +0 -2
  340. package/dist/tests/service/printer/command/NoHyperlinksCommand.test.d.ts.map +0 -1
  341. package/dist/tests/service/printer/terminal/Progress.test.d.ts +0 -2
  342. package/dist/tests/service/printer/terminal/Progress.test.d.ts.map +0 -1
  343. package/dist/tests/service/printer/terminal/Spinner.test.d.ts +0 -2
  344. package/dist/tests/service/printer/terminal/Spinner.test.d.ts.map +0 -1
  345. package/dist/tests/service/prompter/DefaultPrompterService.test.d.ts +0 -2
  346. package/dist/tests/service/prompter/DefaultPrompterService.test.d.ts.map +0 -1
  347. package/dist/tests/service/prompter/PrompterServiceProvider.test.d.ts +0 -2
  348. package/dist/tests/service/prompter/PrompterServiceProvider.test.d.ts.map +0 -1
  349. package/dist/tests/service/prompter/command/NoPromptCommand.test.d.ts +0 -2
  350. package/dist/tests/service/prompter/command/NoPromptCommand.test.d.ts.map +0 -1
  351. package/dist/tests/service/prompter/prompt/PromptContext.test.d.ts +0 -2
  352. package/dist/tests/service/prompter/prompt/PromptContext.test.d.ts.map +0 -1
  353. package/dist/tests/service/shutdown/ShutdownServiceProvider.test.d.ts +0 -2
  354. package/dist/tests/service/shutdown/ShutdownServiceProvider.test.d.ts.map +0 -1
  355. package/dist/tests/service/syntaxHighlighter/DefaultSyntaxHighlighterService.test.d.ts +0 -2
  356. package/dist/tests/service/syntaxHighlighter/DefaultSyntaxHighlighterService.test.d.ts.map +0 -1
  357. package/dist/tests/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.test.d.ts +0 -2
  358. package/dist/tests/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.test.d.ts.map +0 -1
  359. package/dist/tests/service/tableGenerator/DefaultTableGeneratorService.test.d.ts +0 -2
  360. package/dist/tests/service/tableGenerator/DefaultTableGeneratorService.test.d.ts.map +0 -1
  361. package/dist/tests/service/tableGenerator/TableGeneratorServiceProvider.test.d.ts +0 -2
  362. package/dist/tests/service/tableGenerator/TableGeneratorServiceProvider.test.d.ts.map +0 -1
  363. package/dist/tests/service/treePrinter/DefaultTreePrinterService.test.d.ts +0 -2
  364. package/dist/tests/service/treePrinter/DefaultTreePrinterService.test.d.ts.map +0 -1
  365. package/dist/tests/service/treePrinter/TreePrinterServiceProvider.test.d.ts +0 -2
  366. package/dist/tests/service/treePrinter/TreePrinterServiceProvider.test.d.ts.map +0 -1
  367. package/dist/tests/terminal/ImageRenderer.test.d.ts +0 -2
  368. package/dist/tests/terminal/ImageRenderer.test.d.ts.map +0 -1
  369. package/dist/tests/terminal/PngDecoder.test.d.ts +0 -2
  370. package/dist/tests/terminal/PngDecoder.test.d.ts.map +0 -1
  371. package/dist/tests/terminal/supportsHyperlinks.test.d.ts +0 -2
  372. package/dist/tests/terminal/supportsHyperlinks.test.d.ts.map +0 -1
  373. package/dist/tests/util/configHelper.test.d.ts +0 -2
  374. package/dist/tests/util/configHelper.test.d.ts.map +0 -1
  375. package/dist/tests/util/envVarHelper.test.d.ts +0 -2
  376. package/dist/tests/util/envVarHelper.test.d.ts.map +0 -1
  377. package/dist/tests/util/logger.test.d.ts +0 -2
  378. package/dist/tests/util/logger.test.d.ts.map +0 -1
  379. package/src/command/PluginCommand.ts +0 -197
@@ -0,0 +1,244 @@
1
+ import getLogger from "../util/logger.js";
2
+ import { isGroupCommand } from "./command/CommandTypeGuards.js";
3
+ const logger = getLogger("scanner");
4
+ function normaliseFirstArgumentIfRequired(args, globalCommandsByName, globalCommandsByShortAlias) {
5
+ const firstArg = args[0];
6
+ // only looking for:
7
+ // --<global_[modifier_]command_name>
8
+ // --<global_[modifier_]command_name>=<value>
9
+ // -<global_[modifier_]command_short_alias>
10
+ // -<global_[modifier_]command_short_alias>=<value>
11
+ if (firstArg.length < 2 || firstArg.charAt(0) !== "-") {
12
+ return args;
13
+ }
14
+ // looking for:
15
+ // --<global_[modifier_]command_name>
16
+ // --<global_[modifier_]command_name>=<value>
17
+ if (firstArg.length > 2 && firstArg.charAt(1) === "-") {
18
+ let potentialGlobalCommandName = firstArg.slice(2);
19
+ // looking for:
20
+ // <global_command_name>=<value>
21
+ // <global_modifier_command_name>=<value>
22
+ let nextArg;
23
+ if (potentialGlobalCommandName.includes("=")) {
24
+ [potentialGlobalCommandName, nextArg] = potentialGlobalCommandName.split(/=(.*)/);
25
+ }
26
+ if (!globalCommandsByName.has(potentialGlobalCommandName)) {
27
+ // nothing changed
28
+ return args;
29
+ }
30
+ if (!nextArg) {
31
+ // nothing changed
32
+ return args;
33
+ }
34
+ logger.debug(() => `Normalised arg: '${firstArg}' to: '--${potentialGlobalCommandName} ${nextArg}'`);
35
+ return [`--${potentialGlobalCommandName}`, nextArg, ...args.slice(1)];
36
+ }
37
+ // looking for:
38
+ // -<global_[modifier_]command_short_alias>
39
+ // -<global_[modifier_]command_short_alias>=<value>
40
+ // (by now we know the arg starts with -<char>)
41
+ let potentialGlobalCommandShortAlias = firstArg.slice(1);
42
+ // looking for:
43
+ // <global_[modifier_]command_short_alias>=<value>
44
+ let nextArg;
45
+ if (potentialGlobalCommandShortAlias.includes("=")) {
46
+ [potentialGlobalCommandShortAlias, nextArg] = potentialGlobalCommandShortAlias.split(/=(.*)/);
47
+ }
48
+ if (!globalCommandsByShortAlias) {
49
+ // nothing changed
50
+ return args;
51
+ }
52
+ // looking for <global_[modifier_]command_short_alias>
53
+ const globalCommand = globalCommandsByShortAlias.get(potentialGlobalCommandShortAlias);
54
+ if (!globalCommand) {
55
+ // nothing changed
56
+ return args;
57
+ }
58
+ if (nextArg) {
59
+ logger.debug(() => `Normalised arg: '${firstArg}' to: '--${globalCommand.name} ${nextArg}'`);
60
+ return [`--${globalCommand.name}`, nextArg, ...args.slice(1)];
61
+ }
62
+ logger.debug(() => `Normalised arg: '${firstArg}' to: '--${globalCommand.name}'`);
63
+ return [`--${globalCommand.name}`, ...args.slice(1)];
64
+ }
65
+ function scanForNextCommandClause(potentialArgs, includeSubCommands, commandsByName, globalCommandsByShortAlias, groupAndMemberCommandsByJoinedName) {
66
+ let pendingArgs = [...potentialArgs];
67
+ const unusedArgs = [];
68
+ while (pendingArgs.length > 0) {
69
+ pendingArgs = normaliseFirstArgumentIfRequired(pendingArgs, commandsByName, globalCommandsByShortAlias);
70
+ // take first argument
71
+ const currentArg = pendingArgs[0];
72
+ pendingArgs = pendingArgs.slice(1);
73
+ // looking for:
74
+ // <global_[modifier_]command_name>
75
+ if (currentArg.startsWith("--")) {
76
+ const potentialCommandName = currentArg.slice(2);
77
+ // check for Global[Modifier]Command name
78
+ const command = commandsByName.get(potentialCommandName);
79
+ if (command) {
80
+ logger.debug("Found global [modifier] command name: %s", potentialCommandName);
81
+ return {
82
+ commandClause: {
83
+ command,
84
+ potentialArgs: pendingArgs,
85
+ },
86
+ unusedArgs,
87
+ };
88
+ }
89
+ }
90
+ if (!includeSubCommands || currentArg[0] === "-") {
91
+ unusedArgs.push(currentArg);
92
+ continue;
93
+ }
94
+ if (groupAndMemberCommandsByJoinedName) {
95
+ // looking for:
96
+ // <group_command_name>:<member_sub_command_name>
97
+ // <group_command_name> <member_sub_command_name>
98
+ // <sub_command_name>
99
+ let potentialGroupCommandName = currentArg;
100
+ let potentialMemberSubCommandName;
101
+ let potentialMemberCommandNameArgumentUsed = false;
102
+ if (potentialGroupCommandName.includes(":")) {
103
+ // looking for:
104
+ // <group_command_name>:<member_sub_command_name>
105
+ [potentialGroupCommandName, potentialMemberSubCommandName] =
106
+ potentialGroupCommandName.split(":");
107
+ }
108
+ else if (pendingArgs.length > 0) {
109
+ // looking for:
110
+ // <group_command_name> <member_sub_command_name>
111
+ potentialMemberSubCommandName = pendingArgs[0];
112
+ pendingArgs = pendingArgs.slice(1);
113
+ potentialMemberCommandNameArgumentUsed = true;
114
+ }
115
+ if (potentialMemberSubCommandName !== undefined) {
116
+ const result = groupAndMemberCommandsByJoinedName.get(`${potentialGroupCommandName}:${potentialMemberSubCommandName}`);
117
+ if (result && result.command) {
118
+ const { groupCommand, command } = result;
119
+ logger.debug("Found group command name: %s and member sub-command name: %s", potentialGroupCommandName, potentialMemberSubCommandName);
120
+ return {
121
+ commandClause: {
122
+ command,
123
+ groupCommand,
124
+ potentialArgs: pendingArgs,
125
+ },
126
+ unusedArgs,
127
+ };
128
+ }
129
+ }
130
+ // if group parsing was not needed, revert state if necessary
131
+ if (potentialMemberCommandNameArgumentUsed && potentialMemberSubCommandName !== undefined) {
132
+ pendingArgs.unshift(potentialMemberSubCommandName);
133
+ }
134
+ }
135
+ // looking for:
136
+ // <sub_command_name>
137
+ //
138
+ // if we find it is a group command we skip it as we didn't find a member command
139
+ // following it the logic above
140
+ const command = commandsByName.get(currentArg);
141
+ if (command && !isGroupCommand(command)) {
142
+ logger.debug("Found sub-command name: %s", currentArg);
143
+ return {
144
+ commandClause: {
145
+ command,
146
+ potentialArgs: pendingArgs,
147
+ },
148
+ unusedArgs,
149
+ };
150
+ }
151
+ // if we got here we haven't found a command so add the current arg to unused args
152
+ unusedArgs.push(currentArg);
153
+ }
154
+ // if we got here we haven't found a command and we have processed all provided args
155
+ return {
156
+ commandClause: undefined,
157
+ unusedArgs,
158
+ };
159
+ }
160
+ /**
161
+ * Scan the provided arguments and return any {@link CommandClause} instances discovered based on the provided
162
+ * list of {@link GlobalModifierCommand} instances.
163
+ *
164
+ * @param argSequences the list of argument sequences to scan.
165
+ * @param globalModifierCommandsByName the map of {@link GlobalModifierCommand} instances by name to use when scanning.
166
+ * @param globalModifierCommandsByShortAlias the map of {@link GlobalModifierCommand} instances by short alias to use when scanning.
167
+ */
168
+ export function scanForGlobalModifierCommandClauses(argSequences, globalModifierCommandsByName, globalModifierCommandsByShortAlias) {
169
+ logger.debug(() => `Scanning args: '${JSON.stringify(argSequences)}' for global modifier commands: '${Array.from(globalModifierCommandsByName.keys()).join(" ")}'`);
170
+ const scanResult = {
171
+ unusedArgSequences: [],
172
+ };
173
+ const commandClauses = [];
174
+ for (const argSequence of argSequences) {
175
+ let lastCommandClause;
176
+ let args = argSequence;
177
+ while (args.length > 0) {
178
+ const { commandClause, unusedArgs } = scanForNextCommandClause(args, false, globalModifierCommandsByName, globalModifierCommandsByShortAlias, undefined);
179
+ // any args that weren't used in the current scan are...
180
+ if (unusedArgs.length > 0) {
181
+ if (lastCommandClause) {
182
+ // ... given back to the previous scan result if defined
183
+ lastCommandClause.potentialArgs = unusedArgs;
184
+ }
185
+ else {
186
+ // ... or added to the unused arg sequences
187
+ scanResult.unusedArgSequences.push(unusedArgs);
188
+ }
189
+ }
190
+ // if we didn't find a command clause all args have been allocated to
191
+ // a previous clause or the unuused arg sequences, so we can stop scanning
192
+ if (!commandClause) {
193
+ break;
194
+ }
195
+ // save the command we found
196
+ commandClauses.push(commandClause);
197
+ // now set the current scan result as the last scan result
198
+ lastCommandClause = commandClause;
199
+ // temporarily take all of the potential args from the last command clause and use them for a potential
200
+ // new command clause, if any args are left over they will be added back to the last command clause
201
+ args = lastCommandClause.potentialArgs;
202
+ lastCommandClause.potentialArgs = [];
203
+ }
204
+ }
205
+ if (commandClauses.length > 0) {
206
+ scanResult.globalModifierCommandClauses = commandClauses;
207
+ }
208
+ logger.debug("scan result: %O", scanResult);
209
+ return scanResult;
210
+ }
211
+ /**
212
+ * Scan the provided arguments and return the first {@link CommandClause} instance discovered based on the provided
213
+ * list of non-modifier {@link Command} instances.
214
+ *
215
+ * @param argSequences the list of argument sequences to scan.
216
+ * @param nonModifierCommandsByName the map of non-modifier {@link Command} instances by name to use when scanning.
217
+ * @param globalCommandsByShortAlias optional map of {@link GlobalCommand} instances by short alias to use when scanning.
218
+ * @param groupAndMemberCommandsByJoinedName optional map of {@link GroupCommand} and member {@link SubCommand} instances to use when scanning.
219
+ */
220
+ export function scanForNonModifierCommandClause(argSequences, nonModifierCommandsByName, globalCommandsByShortAlias, groupAndMemberCommandsByJoinedName) {
221
+ logger.debug(() => `Scanning args: '${JSON.stringify(argSequences)}' for non-modifier commands: '${Array.from(nonModifierCommandsByName.keys()).join(" ")}'`);
222
+ const scanResult = {
223
+ unusedArgSequences: [],
224
+ };
225
+ for (const argSequence of argSequences) {
226
+ // if a command clause is already defined, we don't need to scan any further,
227
+ // just add the unused args to the unused arg sequences
228
+ if (scanResult.nonModifierCommandClause) {
229
+ scanResult.unusedArgSequences.push(argSequence);
230
+ continue;
231
+ }
232
+ const { commandClause, unusedArgs } = scanForNextCommandClause(argSequence, true, nonModifierCommandsByName, globalCommandsByShortAlias, groupAndMemberCommandsByJoinedName);
233
+ // args that weren't used in the current scan are given to the unused arg sequences
234
+ if (unusedArgs.length > 0) {
235
+ scanResult.unusedArgSequences.push(unusedArgs);
236
+ }
237
+ // use the result if we found a command
238
+ if (commandClause) {
239
+ scanResult.nonModifierCommandClause = commandClause;
240
+ }
241
+ }
242
+ logger.debug("scan result: %O", scanResult);
243
+ return scanResult;
244
+ }
@@ -0,0 +1,122 @@
1
+ import { MAXIMUM_ARGUMENT_ARRAY_SIZE } from "../../api/argument/SubCommandArgument.js";
2
+ import { MAXIMUM_COMPLEX_OPTION_NESTING_DEPTH } from "../../api/argument/ComplexOption.js";
3
+ function doClone(source, nestingLevel) {
4
+ if (source === undefined) {
5
+ return source;
6
+ }
7
+ // check if source is an array
8
+ if (Array.isArray(source)) {
9
+ return arrayMerge(source, [], nestingLevel);
10
+ }
11
+ // check if source is an object
12
+ if (typeof source === "object") {
13
+ return objectMerge(source, {}, nestingLevel);
14
+ }
15
+ // source must be a primitive value
16
+ return source;
17
+ }
18
+ function arrayMerge(override, base, nestingLevel) {
19
+ if (override.length > MAXIMUM_ARGUMENT_ARRAY_SIZE) {
20
+ throw new Error(`Maximum array size exceeded: ${override.length}`);
21
+ }
22
+ if (base.length > MAXIMUM_ARGUMENT_ARRAY_SIZE) {
23
+ throw new Error(`Maximum array size exceeded: ${override.length}`);
24
+ }
25
+ const result = base.slice();
26
+ override.forEach((argValue, index) => {
27
+ if (Array.isArray(argValue)) {
28
+ throw new Error(`Array of array values discovered, this is not supported: ${JSON.stringify(argValue)}`);
29
+ }
30
+ if (index >= base.length) {
31
+ result.push(doClone(argValue, nestingLevel));
32
+ }
33
+ else {
34
+ result[index] = doMerge(argValue, base[index], nestingLevel);
35
+ }
36
+ });
37
+ return result;
38
+ }
39
+ function objectMerge(override, base, nestingLevel) {
40
+ if (nestingLevel > MAXIMUM_COMPLEX_OPTION_NESTING_DEPTH) {
41
+ throw new Error(`Maximum complex option nesting depth exceeded: ${nestingLevel}`);
42
+ }
43
+ nestingLevel++;
44
+ const result = {};
45
+ Object.keys(override).forEach((argName) => {
46
+ if (base[argName] === undefined) {
47
+ // nothing to merge so just clone the override
48
+ result[argName] = doClone(override[argName], nestingLevel);
49
+ }
50
+ else {
51
+ // merge the base and the override
52
+ result[argName] = doMerge(override[argName], base[argName], nestingLevel);
53
+ }
54
+ });
55
+ Object.keys(base).forEach((argName) => {
56
+ // if the base is in the override, we have already merged above
57
+ if (override[argName] !== undefined) {
58
+ return;
59
+ }
60
+ // nothing to merge so just clone the base
61
+ result[argName] = doClone(base[argName], nestingLevel);
62
+ });
63
+ return result;
64
+ }
65
+ function doMerge(override, defaults, nestingLevel) {
66
+ if (defaults === undefined) {
67
+ throw new Error(`Undefined value provided in merge: override = ${JSON.stringify(override)}, defaults = undefined`);
68
+ }
69
+ if (typeof override !== typeof defaults) {
70
+ // check if we need to convert from single value to array
71
+ if (Array.isArray(override)) {
72
+ if (typeof defaults === "object") {
73
+ defaults = [defaults];
74
+ }
75
+ else {
76
+ defaults = [defaults];
77
+ }
78
+ }
79
+ else if (Array.isArray(defaults)) {
80
+ if (typeof override === "object") {
81
+ override = [override];
82
+ }
83
+ else {
84
+ override = [override];
85
+ }
86
+ } // check if we need to convert from single non-string value to single string value
87
+ else if (typeof override === "string" &&
88
+ (typeof defaults == "number" || typeof defaults == "boolean")) {
89
+ defaults = `${defaults}`;
90
+ }
91
+ }
92
+ if (override !== undefined && typeof override !== typeof defaults) {
93
+ throw new Error(`Incompatible value types provided in merge: override = ${JSON.stringify(override)}, defaults = ${JSON.stringify(defaults)}`);
94
+ }
95
+ // check if override is an array
96
+ if (Array.isArray(override)) {
97
+ return arrayMerge(override, defaults, nestingLevel);
98
+ }
99
+ // check if override is an object
100
+ if (typeof override === "object") {
101
+ return objectMerge(override, defaults, nestingLevel);
102
+ }
103
+ // check if override is undefined so we should use default
104
+ if (override === undefined) {
105
+ return doClone(defaults, nestingLevel);
106
+ }
107
+ // override must be a primitive value
108
+ return override;
109
+ }
110
+ /**
111
+ * Deep merge of provided default argument values with overridden argument values. The result is a cloned instance
112
+ * of `defaults` with values in `override` cloned and merged in the result.
113
+ *
114
+ * @throws {Error} if a value appears under the same argument name in both `override` and `defaults`.
115
+ * and they are not of the same type, or if either argument is `undefined`.
116
+ *
117
+ * @param override the values which should be used in place of any defined in `defaults`.
118
+ * @param defaults the values to use unless they are overridden in `override`.
119
+ */
120
+ export default function argumentValueMerge(override, defaults) {
121
+ return doMerge(override, defaults, 0);
122
+ }