@flowscripter/dynamic-cli-framework 1.2.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/README/core-service-providers.md +2 -2
  2. package/README/development.md +3 -6
  3. package/README/implementation-details.md +17 -17
  4. package/README/key-concepts.md +17 -17
  5. package/README.md +4 -4
  6. package/bun.lock +0 -2
  7. package/index.ts +22 -30
  8. package/package.json +19 -19
  9. package/src/api/argument/Argument.ts +1 -1
  10. package/src/api/argument/ArgumentValueTypes.ts +3 -10
  11. package/src/api/argument/ComplexOption.ts +5 -9
  12. package/src/api/command/GlobalCommand.ts +1 -4
  13. package/src/api/service/core/ArgumentPrompterService.ts +1 -3
  14. package/src/api/service/core/AsciiBannerGeneratorService.ts +1 -4
  15. package/src/api/service/core/CompletionService.ts +2 -6
  16. package/src/api/service/core/ImagePrinterService.ts +1 -2
  17. package/src/api/service/core/KeyValueService.ts +1 -2
  18. package/src/api/service/core/PrettyPrinterService.ts +1 -4
  19. package/src/api/service/core/PrinterService.ts +8 -9
  20. package/src/api/service/core/PrompterService.ts +4 -11
  21. package/src/api/service/core/ShutdownService.ts +1 -2
  22. package/src/api/service/core/SyntaxHighlighterService.ts +1 -5
  23. package/src/api/service/core/Table.ts +7 -25
  24. package/src/api/service/core/TreePrinterService.ts +1 -2
  25. package/src/cli/BaseCLI.ts +17 -47
  26. package/src/cli/DefaultRuntimeCLI.ts +1 -4
  27. package/src/command/CompletionCommand.ts +19 -45
  28. package/src/command/MultiCommandCliHelpCommand.ts +45 -92
  29. package/src/command/SingleCommandCliHelpCommand.ts +17 -28
  30. package/src/command/UsageCommand.ts +6 -12
  31. package/src/command/VersionCommand.ts +2 -6
  32. package/src/launcher.ts +4 -2
  33. package/src/runtime/DefaultContext.ts +2 -5
  34. package/src/runtime/argument/ArgumentTypeGuards.ts +1 -3
  35. package/src/runtime/command/CommandTypeGuards.ts +5 -14
  36. package/src/runtime/command/CommandValidator.ts +56 -118
  37. package/src/runtime/parser.ts +13 -17
  38. package/src/runtime/registry/CommandRegistry.ts +2 -7
  39. package/src/runtime/registry/DefaultCommandRegistry.ts +32 -84
  40. package/src/runtime/registry/DefaultServiceProviderRegistry.ts +3 -9
  41. package/src/runtime/runner.ts +103 -142
  42. package/src/runtime/scanner.ts +28 -46
  43. package/src/runtime/values/ValuePopulationResult.ts +1 -2
  44. package/src/runtime/values/argumentValueMerge.ts +16 -28
  45. package/src/runtime/values/argumentValueValidation.ts +21 -67
  46. package/src/runtime/values/globalCommandValuePopulation.ts +9 -18
  47. package/src/runtime/values/subCommandValuePopulation.ts +42 -65
  48. package/src/service/argumentPrompter/ArgumentPrompterServiceProvider.ts +3 -10
  49. package/src/service/argumentPrompter/DefaultArgumentPrompterService.ts +22 -59
  50. package/src/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.ts +5 -14
  51. package/src/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.ts +59 -77
  52. package/src/service/banner/BannerServiceProvider.ts +13 -35
  53. package/src/service/banner/command/NoBannerCommand.ts +2 -8
  54. package/src/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.ts +5 -10
  55. package/src/service/completion/CompletionServiceProvider.ts +20 -48
  56. package/src/service/completion/DefaultCompletionService.ts +17 -56
  57. package/src/service/completion/shell/ShellHandler.ts +1 -3
  58. package/src/service/completion/shell/fish.ts +1 -1
  59. package/src/service/completion/shell/powershell.ts +2 -12
  60. package/src/service/completion/shell/zsh.ts +1 -1
  61. package/src/service/configuration/ConfigurationServiceProvider.ts +40 -133
  62. package/src/service/configuration/DefaultKeyValueService.ts +6 -20
  63. package/src/service/configuration/DefaultSecretService.ts +10 -14
  64. package/src/service/configuration/command/ConfigCommand.ts +1 -4
  65. package/src/service/configuration/command/DumpConfigCommand.ts +9 -21
  66. package/src/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.ts +5 -14
  67. package/src/service/dataDumpGenerator/DefaultDataDumpGeneratorService.ts +5 -12
  68. package/src/service/imagePrinter/DefaultImagePrinterService.ts +1 -5
  69. package/src/service/imagePrinter/ImagePrinterServiceProvider.ts +1 -4
  70. package/src/service/prettyPrinter/DefaultPrettyPrinterService.ts +4 -12
  71. package/src/service/prettyPrinter/PrettyPrinterServiceProvider.ts +3 -10
  72. package/src/service/printer/DefaultPrinterService.ts +20 -83
  73. package/src/service/printer/PrinterServiceProvider.ts +3 -11
  74. package/src/service/printer/command/DarkModeCommand.ts +3 -10
  75. package/src/service/printer/command/LogLevelCommand.ts +7 -26
  76. package/src/service/printer/command/NoColorCommand.ts +3 -10
  77. package/src/service/printer/command/NoHyperlinksCommand.ts +3 -10
  78. package/src/service/printer/terminal/Progress.ts +99 -90
  79. package/src/service/printer/terminal/Spinner.ts +7 -26
  80. package/src/service/prompter/DefaultPrompterService.ts +2 -6
  81. package/src/service/prompter/PrompterServiceProvider.ts +3 -11
  82. package/src/service/prompter/command/NoPromptCommand.ts +3 -10
  83. package/src/service/prompter/prompt/PromptContext.ts +5 -18
  84. package/src/service/prompter/prompt/promptMultiSelect.ts +6 -21
  85. package/src/service/prompter/prompt/promptOpenUrl.ts +7 -22
  86. package/src/service/prompter/prompt/promptSingleSelect.ts +6 -23
  87. package/src/service/prompter/prompt/promptText.ts +10 -27
  88. package/src/service/prompter/prompt/promptToggle.ts +8 -8
  89. package/src/service/shutdown/ShutdownServiceProvider.ts +3 -10
  90. package/src/service/syntaxHighlighter/DefaultSyntaxHighlighterService.ts +13 -26
  91. package/src/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.ts +8 -21
  92. package/src/service/tableGenerator/DefaultTableGeneratorService.ts +44 -68
  93. package/src/service/tableGenerator/TableGeneratorServiceProvider.ts +7 -16
  94. package/src/service/treePrinter/DefaultTreePrinterService.ts +2 -7
  95. package/src/service/treePrinter/TreePrinterServiceProvider.ts +4 -12
  96. package/src/terminal/ImageRenderer.ts +35 -54
  97. package/src/terminal/PngDecoder.ts +10 -19
  98. package/src/terminal/TtyStyler.ts +11 -9
  99. package/src/terminal/TtyTerminal.ts +2 -10
  100. package/src/terminal/supportsHyperlinks.ts +4 -10
  101. package/src/util/configHelper.ts +3 -10
  102. package/src/util/envVarHelper.ts +50 -88
  103. package/src/util/helpHelper.ts +123 -193
  104. package/src/util/logger.ts +12 -42
  105. package/src/util/runnerHelper.ts +20 -61
  106. package/tests/cli/BaseCLI.test.ts +23 -80
  107. package/tests/command/CompletionCommand.test.ts +1 -6
  108. package/tests/command/MultiCommandCliHelpCommand.test.ts +51 -205
  109. package/tests/command/SingleCommandCliHelpCommand.test.ts +21 -103
  110. package/tests/command/UsageCommand.test.ts +4 -10
  111. package/tests/fixtures/Command.ts +87 -68
  112. package/tests/fixtures/CommandRegistry.ts +1 -3
  113. package/tests/fixtures/Context.ts +3 -11
  114. package/tests/fixtures/ServiceProviderRegistry.ts +1 -1
  115. package/tests/fixtures/prettierPluginFoo.ts +1 -1
  116. package/tests/fixtures/util.ts +2 -8
  117. package/tests/runtime/argument/ArgumentTypeGuards.test.ts +1 -3
  118. package/tests/runtime/command/CommandValidator.test.ts +881 -604
  119. package/tests/runtime/parser.test.ts +222 -246
  120. package/tests/runtime/registry/DefaultCommandRegistry.test.ts +15 -37
  121. package/tests/runtime/registry/DefaultServiceProviderRegistry.test.ts +2 -8
  122. package/tests/runtime/runner.test.ts +231 -281
  123. package/tests/runtime/scanner.test.ts +277 -475
  124. package/tests/runtime/values/argumentValueMerge.test.ts +133 -81
  125. package/tests/runtime/values/argumentValueValidation.test.ts +444 -588
  126. package/tests/runtime/values/globalCommandValuePopulation.test.ts +71 -253
  127. package/tests/runtime/values/subCommandValuePopulation.test.ts +1342 -1570
  128. package/tests/service/argumentPrompter/ArgumentPrompterServiceProvider.test.ts +3 -12
  129. package/tests/service/argumentPrompter/DefaultArgumentPrompterService.test.ts +36 -45
  130. package/tests/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.test.ts +2 -8
  131. package/tests/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.test.ts +40 -62
  132. package/tests/service/banner/BannerServiceProvider.test.ts +5 -18
  133. package/tests/service/banner/command/NoBannerCommand.test.ts +1 -4
  134. package/tests/service/completion/CompletionServiceProvider.test.ts +145 -214
  135. package/tests/service/completion/DefaultCompletionService.test.ts +17 -79
  136. package/tests/service/completion/shell/fish.test.ts +1 -3
  137. package/tests/service/configuration/ConfigurationServiceProvider.test.ts +26 -75
  138. package/tests/service/configuration/DefaultKeyValueService.test.ts +9 -21
  139. package/tests/service/configuration/DefaultSecretService.test.ts +7 -15
  140. package/tests/service/configuration/command/DumpConfigCommand.test.ts +4 -13
  141. package/tests/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.test.ts +6 -12
  142. package/tests/service/dataDumpGenerator/DefaultDataDumpGeneratorService.test.ts +1 -10
  143. package/tests/service/imagePrinter/DefaultImagePrinterService.test.ts +5 -70
  144. package/tests/service/prettyPrinter/DefaultPrettyPrinterService.test.ts +4 -11
  145. package/tests/service/prettyPrinter/PrettyPrinterServiceProvider.test.ts +2 -6
  146. package/tests/service/printer/DefaultPrinterService.test.ts +57 -255
  147. package/tests/service/printer/PrinterServiceProvider.test.ts +2 -8
  148. package/tests/service/printer/command/DarkModeCommand.test.ts +4 -12
  149. package/tests/service/printer/command/LogLevelCommand.test.ts +4 -17
  150. package/tests/service/printer/command/NoColorCommand.test.ts +4 -12
  151. package/tests/service/printer/command/NoHyperlinksCommand.test.ts +7 -21
  152. package/tests/service/printer/terminal/Progress.test.ts +1 -3
  153. package/tests/service/printer/terminal/Spinner.test.ts +2 -8
  154. package/tests/service/prompter/DefaultPrompterService.test.ts +52 -69
  155. package/tests/service/prompter/PrompterServiceProvider.test.ts +2 -8
  156. package/tests/service/shutdown/ShutdownServiceProvider.test.ts +1 -3
  157. package/tests/service/syntaxHighlighter/DefaultSyntaxHighlighterService.test.ts +13 -99
  158. package/tests/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.test.ts +2 -7
  159. package/tests/service/tableGenerator/DefaultTableGeneratorService.test.ts +12 -33
  160. package/tests/service/tableGenerator/TableGeneratorServiceProvider.test.ts +2 -2
  161. package/tests/service/treePrinter/DefaultTreePrinterService.test.ts +4 -6
  162. package/tests/service/treePrinter/TreePrinterServiceProvider.test.ts +4 -8
  163. package/tests/terminal/ImageRenderer.test.ts +2 -11
  164. package/tests/terminal/PngDecoder.test.ts +2 -6
  165. package/tests/util/configHelper.test.ts +55 -137
  166. package/tests/util/envVarHelper.test.ts +46 -110
@@ -10,11 +10,7 @@ import type SubCommand from "../../../src/api/command/SubCommand.ts";
10
10
  import type Positional from "../../../src/api/argument/Positional.ts";
11
11
  import type Option from "../../../src/api/argument/Option.ts";
12
12
 
13
- function getSubCommand(
14
- name: string,
15
- options: Option[],
16
- positionals: Positional[],
17
- ): SubCommand {
13
+ function getSubCommand(name: string, options: Option[], positionals: Positional[]): SubCommand {
18
14
  return {
19
15
  name,
20
16
  options,
@@ -88,53 +84,36 @@ describe("DefaultCommandRegistry tests", () => {
88
84
  commandRegistry.addCommand(globalModifierCommand3, service1Id);
89
85
  commandRegistry.addCommand(globalModifierCommand4, service2Id);
90
86
 
91
- expect(
92
- commandRegistry.getSubCommandByName(subCommand2.name)!.name,
93
- ).toEqual(
94
- subCommand2.name,
95
- );
96
- expect(
97
- commandRegistry.getGroupCommandByName(groupCommand2.name)!.name,
98
- ).toEqual(
87
+ expect(commandRegistry.getSubCommandByName(subCommand2.name)!.name).toEqual(subCommand2.name);
88
+ expect(commandRegistry.getGroupCommandByName(groupCommand2.name)!.name).toEqual(
99
89
  groupCommand2.name,
100
90
  );
101
- expect(
102
- commandRegistry.getGlobalCommandByName(globalCommand2.name)!.name,
103
- ).toEqual(
91
+ expect(commandRegistry.getGlobalCommandByName(globalCommand2.name)!.name).toEqual(
104
92
  globalCommand2.name,
105
93
  );
106
94
  expect(
107
- commandRegistry.getGlobalModifierCommandByName(
108
- globalModifierCommand2.name,
109
- )!.name,
110
- ).toEqual(
111
- globalModifierCommand2.name,
112
- );
95
+ commandRegistry.getGlobalModifierCommandByName(globalModifierCommand2.name)!.name,
96
+ ).toEqual(globalModifierCommand2.name);
113
97
 
114
- const result1 = commandRegistry
115
- .getGroupCommandAndMemberSubCommandByJoinedName(
116
- `${groupCommand2.name}:${memberSubCommand2.name}`,
117
- );
98
+ const result1 = commandRegistry.getGroupCommandAndMemberSubCommandByJoinedName(
99
+ `${groupCommand2.name}:${memberSubCommand2.name}`,
100
+ );
118
101
 
119
102
  expect(result1!.groupCommand.name).toEqual(groupCommand2.name);
120
103
  expect(result1!.command.name).toEqual(memberSubCommand2.name);
121
104
 
122
105
  const result2 = commandRegistry.getGroupAndMemberCommandsByJoinedName();
123
- const result3 = result2!.get(
124
- `${groupCommand2.name}:${memberSubCommand2.name}`,
125
- );
106
+ const result3 = result2!.get(`${groupCommand2.name}:${memberSubCommand2.name}`);
126
107
 
127
108
  expect(result3!.groupCommand.name).toEqual(groupCommand2.name);
128
109
  expect(result3!.command.name).toEqual(memberSubCommand2.name);
129
110
 
130
- const result4 = commandRegistry
131
- .getGlobalModifierCommandsByNameNotProvidedByService();
111
+ const result4 = commandRegistry.getGlobalModifierCommandsByNameNotProvidedByService();
132
112
  const result5 = result4!.get(globalModifierCommand2.name);
133
113
 
134
114
  expect(result5!.name).toEqual(globalModifierCommand2.name);
135
115
 
136
- const result6 = commandRegistry
137
- .getGlobalModifierCommandsByShortAliasNotProvidedByService();
116
+ const result6 = commandRegistry.getGlobalModifierCommandsByShortAliasNotProvidedByService();
138
117
  const result7 = result6!.get(globalModifierCommand2.shortAlias!);
139
118
 
140
119
  expect(result7!.name).toEqual(globalModifierCommand2.name);
@@ -151,14 +130,13 @@ describe("DefaultCommandRegistry tests", () => {
151
130
  expect(result11!.name).toEqual(subCommand2.name);
152
131
  expect(result12!.name).toEqual(globalCommand2.name);
153
132
 
154
- const result13 = commandRegistry
155
- .getGlobalModifierCommandsByNameProvidedByService(service1Id);
133
+ const result13 = commandRegistry.getGlobalModifierCommandsByNameProvidedByService(service1Id);
156
134
  const result14 = result13!.get(globalModifierCommand3.name);
157
135
 
158
136
  expect(result14!.name).toEqual(globalModifierCommand3.name);
159
137
 
160
- const result15 = commandRegistry
161
- .getGlobalModifierCommandsByShortAliasProvidedByService(service2Id);
138
+ const result15 =
139
+ commandRegistry.getGlobalModifierCommandsByShortAliasProvidedByService(service2Id);
162
140
  const result16 = result15!.get(globalModifierCommand4.shortAlias!);
163
141
 
164
142
  expect(result16!.name).toEqual(globalModifierCommand4.name);
@@ -1,16 +1,10 @@
1
1
  import { describe, expect, test } from "bun:test";
2
- import type {
3
- ServiceInfo,
4
- ServiceProvider,
5
- } from "../../../src/api/service/ServiceProvider.ts";
2
+ import type { ServiceInfo, ServiceProvider } from "../../../src/api/service/ServiceProvider.ts";
6
3
  import DefaultServiceProviderRegistry from "../../../src/runtime/registry/DefaultServiceProviderRegistry.ts";
7
4
  import type Context from "../../../src/api/Context.ts";
8
5
  import type CLIConfig from "../../../src/api/CLIConfig.ts";
9
6
 
10
- function getServiceProvider(
11
- serviceId: string,
12
- servicePriority: number,
13
- ): ServiceProvider {
7
+ function getServiceProvider(serviceId: string, servicePriority: number): ServiceProvider {
14
8
  return {
15
9
  serviceId,
16
10
  servicePriority,