@flowscripter/dynamic-cli-framework 2.4.0 → 3.0.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 (143) hide show
  1. package/dist/index.d.ts +6 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +4 -1
  4. package/dist/src/cli/BaseCLI.d.ts +1 -0
  5. package/dist/src/cli/BaseCLI.d.ts.map +1 -1
  6. package/dist/src/cli/BaseCLI.js +6 -0
  7. package/dist/src/cli/BaseCLIFeatureOptions.d.ts +1 -0
  8. package/dist/src/cli/BaseCLIFeatureOptions.d.ts.map +1 -1
  9. package/dist/src/command/MultiCommandCliHelpCommand.d.ts +4 -4
  10. package/dist/src/command/MultiCommandCliHelpCommand.d.ts.map +1 -1
  11. package/dist/src/command/MultiCommandCliHelpCommand.js +3 -3
  12. package/dist/src/runtime/command/CommandValidator.d.ts.map +1 -1
  13. package/dist/src/runtime/command/CommandValidator.js +14 -16
  14. package/dist/src/runtime/parser.d.ts +5 -5
  15. package/dist/src/runtime/parser.d.ts.map +1 -1
  16. package/dist/src/runtime/parser.js +2 -2
  17. package/dist/src/runtime/runner.d.ts.map +1 -1
  18. package/dist/src/runtime/values/ValuePopulationResult.d.ts +3 -3
  19. package/dist/src/runtime/values/ValuePopulationResult.d.ts.map +1 -1
  20. package/dist/src/runtime/values/argumentValueMerge.d.ts +2 -2
  21. package/dist/src/runtime/values/argumentValueMerge.d.ts.map +1 -1
  22. package/dist/src/runtime/values/argumentValueValidation.d.ts +4 -4
  23. package/dist/src/runtime/values/argumentValueValidation.d.ts.map +1 -1
  24. package/dist/src/runtime/values/argumentValueValidation.js +6 -6
  25. package/dist/src/runtime/values/globalCommandValuePopulation.d.ts +4 -4
  26. package/dist/src/runtime/values/globalCommandValuePopulation.d.ts.map +1 -1
  27. package/dist/src/runtime/values/globalCommandValuePopulation.js +5 -5
  28. package/dist/src/runtime/values/subCommandValuePopulation.d.ts +5 -5
  29. package/dist/src/runtime/values/subCommandValuePopulation.d.ts.map +1 -1
  30. package/dist/src/runtime/values/subCommandValuePopulation.js +8 -7
  31. package/dist/src/service/argumentPrompter/DefaultArgumentPrompterService.d.ts.map +1 -1
  32. package/dist/src/service/argumentPrompter/DefaultArgumentPrompterService.js +6 -6
  33. package/dist/src/service/banner/command/NoBannerCommand.d.ts +2 -2
  34. package/dist/src/service/banner/command/NoBannerCommand.d.ts.map +1 -1
  35. package/dist/src/service/banner/command/NoBannerCommand.js +2 -2
  36. package/dist/src/service/completion/command/CompletionCompleteSubCommand.d.ts +2 -2
  37. package/dist/src/service/completion/command/CompletionCompleteSubCommand.d.ts.map +1 -1
  38. package/dist/src/service/completion/command/CompletionCompleteSubCommand.js +3 -3
  39. package/dist/src/service/completion/command/CompletionIntegrationSubCommand.d.ts +2 -2
  40. package/dist/src/service/completion/command/CompletionIntegrationSubCommand.d.ts.map +1 -1
  41. package/dist/src/service/completion/command/CompletionIntegrationSubCommand.js +3 -3
  42. package/dist/src/service/configuration/ConfigurationServiceProvider.d.ts +6 -6
  43. package/dist/src/service/configuration/ConfigurationServiceProvider.d.ts.map +1 -1
  44. package/dist/src/service/configuration/ConfigurationServiceProvider.js +4 -4
  45. package/dist/src/service/configuration/command/ConfigCommand.d.ts +2 -2
  46. package/dist/src/service/configuration/command/ConfigCommand.d.ts.map +1 -1
  47. package/dist/src/service/configuration/command/ConfigCommand.js +2 -2
  48. package/dist/src/service/fetch/DefaultFetchService.d.ts +7 -0
  49. package/dist/src/service/fetch/DefaultFetchService.d.ts.map +1 -0
  50. package/dist/src/service/fetch/DefaultFetchService.js +44 -0
  51. package/dist/src/service/fetch/FetchServiceProvider.d.ts +10 -0
  52. package/dist/src/service/fetch/FetchServiceProvider.d.ts.map +1 -0
  53. package/dist/src/service/fetch/FetchServiceProvider.js +22 -0
  54. package/dist/src/service/plugin/DefaultPluginServiceProvider.d.ts +2 -1
  55. package/dist/src/service/plugin/DefaultPluginServiceProvider.d.ts.map +1 -1
  56. package/dist/src/service/plugin/DefaultPluginServiceProvider.js +23 -8
  57. package/dist/src/service/plugin/FetchInterfaceAdapter.d.ts +17 -0
  58. package/dist/src/service/plugin/FetchInterfaceAdapter.d.ts.map +1 -0
  59. package/dist/src/service/plugin/FetchInterfaceAdapter.js +16 -0
  60. package/dist/src/service/plugin/SpawnInterfaceAdapter.js +1 -1
  61. package/dist/src/service/plugin/command/PluginAddSubCommand.d.ts +4 -4
  62. package/dist/src/service/plugin/command/PluginAddSubCommand.d.ts.map +1 -1
  63. package/dist/src/service/plugin/command/PluginAddSubCommand.js +2 -2
  64. package/dist/src/service/plugin/command/PluginListSubCommand.d.ts +2 -2
  65. package/dist/src/service/plugin/command/PluginListSubCommand.d.ts.map +1 -1
  66. package/dist/src/service/plugin/command/PluginRemoveSubCommand.d.ts +4 -4
  67. package/dist/src/service/plugin/command/PluginRemoveSubCommand.d.ts.map +1 -1
  68. package/dist/src/service/plugin/command/PluginRemoveSubCommand.js +2 -2
  69. package/dist/src/service/plugin/command/PluginSearchSubCommand.d.ts +4 -4
  70. package/dist/src/service/plugin/command/PluginSearchSubCommand.d.ts.map +1 -1
  71. package/dist/src/service/plugin/command/PluginSearchSubCommand.js +2 -2
  72. package/dist/src/service/plugin/command/PluginUpgradeSubCommand.d.ts +2 -2
  73. package/dist/src/service/plugin/command/PluginUpgradeSubCommand.d.ts.map +1 -1
  74. package/dist/src/service/printer/command/DarkModeCommand.d.ts +2 -2
  75. package/dist/src/service/printer/command/DarkModeCommand.d.ts.map +1 -1
  76. package/dist/src/service/printer/command/DarkModeCommand.js +2 -2
  77. package/dist/src/service/printer/command/LogLevelCommand.d.ts +2 -2
  78. package/dist/src/service/printer/command/LogLevelCommand.d.ts.map +1 -1
  79. package/dist/src/service/printer/command/LogLevelCommand.js +2 -2
  80. package/dist/src/service/printer/command/NoColorCommand.d.ts +2 -2
  81. package/dist/src/service/printer/command/NoColorCommand.d.ts.map +1 -1
  82. package/dist/src/service/printer/command/NoColorCommand.js +2 -2
  83. package/dist/src/service/printer/command/NoHyperlinksCommand.d.ts +2 -2
  84. package/dist/src/service/printer/command/NoHyperlinksCommand.d.ts.map +1 -1
  85. package/dist/src/service/printer/command/NoHyperlinksCommand.js +2 -2
  86. package/dist/src/service/prompter/command/NoPromptCommand.d.ts +2 -2
  87. package/dist/src/service/prompter/command/NoPromptCommand.d.ts.map +1 -1
  88. package/dist/src/service/prompter/command/NoPromptCommand.js +2 -2
  89. package/dist/src/service/spawn/DefaultSpawnService.js +6 -6
  90. package/dist/src/service/upgrade/DefaultUpgradeService.d.ts +2 -2
  91. package/dist/src/service/upgrade/DefaultUpgradeService.d.ts.map +1 -1
  92. package/dist/src/service/upgrade/DefaultUpgradeService.js +33 -51
  93. package/dist/src/service/upgrade/UpgradeServiceProvider.d.ts.map +1 -1
  94. package/dist/src/service/upgrade/UpgradeServiceProvider.js +12 -9
  95. package/dist/src/service/upgrade/command/UpgradeSubCommand.d.ts +2 -2
  96. package/dist/src/service/upgrade/command/UpgradeSubCommand.d.ts.map +1 -1
  97. package/dist/src/service/upgrade/command/UpgradeSubCommand.js +3 -3
  98. package/dist/src/util/envVarHelper.d.ts +3 -3
  99. package/dist/src/util/envVarHelper.d.ts.map +1 -1
  100. package/dist/src/util/envVarHelper.js +9 -12
  101. package/dist/src/util/helpHelper.d.ts.map +1 -1
  102. package/dist/src/util/helpHelper.js +27 -28
  103. package/index.ts +12 -10
  104. package/package.json +3 -3
  105. package/src/cli/BaseCLI.ts +7 -0
  106. package/src/cli/BaseCLIFeatureOptions.ts +1 -0
  107. package/src/command/MultiCommandCliHelpCommand.ts +7 -7
  108. package/src/runtime/command/CommandValidator.ts +17 -26
  109. package/src/runtime/parser.ts +8 -8
  110. package/src/runtime/runner.ts +16 -19
  111. package/src/runtime/values/ValuePopulationResult.ts +4 -4
  112. package/src/runtime/values/argumentValueMerge.ts +33 -50
  113. package/src/runtime/values/argumentValueValidation.ts +38 -52
  114. package/src/runtime/values/globalCommandValuePopulation.ts +7 -7
  115. package/src/runtime/values/subCommandValuePopulation.ts +42 -47
  116. package/src/service/argumentPrompter/DefaultArgumentPrompterService.ts +23 -26
  117. package/src/service/banner/command/NoBannerCommand.ts +3 -6
  118. package/src/service/completion/command/CompletionCompleteSubCommand.ts +4 -7
  119. package/src/service/completion/command/CompletionIntegrationSubCommand.ts +4 -7
  120. package/src/service/configuration/ConfigurationServiceProvider.ts +21 -21
  121. package/src/service/configuration/command/ConfigCommand.ts +3 -6
  122. package/src/service/fetch/DefaultFetchService.ts +55 -0
  123. package/src/service/fetch/FetchServiceProvider.ts +33 -0
  124. package/src/service/plugin/DefaultPluginServiceProvider.ts +29 -12
  125. package/src/service/plugin/FetchInterfaceAdapter.ts +28 -0
  126. package/src/service/plugin/SpawnInterfaceAdapter.ts +1 -1
  127. package/src/service/plugin/command/PluginAddSubCommand.ts +4 -4
  128. package/src/service/plugin/command/PluginListSubCommand.ts +2 -2
  129. package/src/service/plugin/command/PluginRemoveSubCommand.ts +4 -4
  130. package/src/service/plugin/command/PluginSearchSubCommand.ts +4 -4
  131. package/src/service/plugin/command/PluginUpgradeSubCommand.ts +2 -2
  132. package/src/service/printer/command/DarkModeCommand.ts +3 -6
  133. package/src/service/printer/command/LogLevelCommand.ts +3 -6
  134. package/src/service/printer/command/NoColorCommand.ts +3 -6
  135. package/src/service/printer/command/NoHyperlinksCommand.ts +3 -6
  136. package/src/service/prompter/command/NoPromptCommand.ts +3 -6
  137. package/src/service/prompter/prompt/promptText.ts +2 -2
  138. package/src/service/spawn/DefaultSpawnService.ts +6 -6
  139. package/src/service/upgrade/DefaultUpgradeService.ts +66 -65
  140. package/src/service/upgrade/UpgradeServiceProvider.ts +13 -9
  141. package/src/service/upgrade/command/UpgradeSubCommand.ts +4 -7
  142. package/src/util/envVarHelper.ts +23 -26
  143. package/src/util/helpHelper.ts +28 -36
@@ -2,7 +2,7 @@ import { UPGRADE_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
2
2
  import { PROMPTER_SERVICE_ID, PromptType } from "@flowscripter/dynamic-cli-framework-api";
3
3
  import { KEY_VALUE_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
4
4
  import { SPAWN_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
5
- import { SHUTDOWN_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
5
+ import { FETCH_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
6
6
  import { Icon, PRINTER_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
7
7
  import DefaultUpgradeService from "./DefaultUpgradeService.js";
8
8
  import { UpgradeSubCommand } from "./command/UpgradeSubCommand.js";
@@ -29,16 +29,19 @@ export default class UpgradeServiceProvider {
29
29
  async initService(context) {
30
30
  const upgradeService = this.#upgradeService;
31
31
  const cliConfig = this.#cliConfig;
32
- if (context.doesServiceExist(SPAWN_SERVICE_ID)) {
33
- const spawnService = context.getServiceById(SPAWN_SERVICE_ID);
34
- const shutdownService = context.doesServiceExist(SHUTDOWN_SERVICE_ID)
35
- ? context.getServiceById(SHUTDOWN_SERVICE_ID)
36
- : undefined;
37
- upgradeService.setDependencies(spawnService, shutdownService);
38
- }
39
- else {
32
+ const spawnService = context.doesServiceExist(SPAWN_SERVICE_ID)
33
+ ? context.getServiceById(SPAWN_SERVICE_ID)
34
+ : undefined;
35
+ const fetchService = context.doesServiceExist(FETCH_SERVICE_ID)
36
+ ? context.getServiceById(FETCH_SERVICE_ID)
37
+ : undefined;
38
+ if (spawnService === undefined) {
40
39
  logger.debug(() => "SpawnService not available, upgrade install methods will be unavailable");
41
40
  }
41
+ if (fetchService === undefined) {
42
+ logger.debug(() => "FetchService not available, upgrade version checks will be unavailable");
43
+ }
44
+ upgradeService.setDependencies(spawnService, fetchService);
42
45
  void upgradeService.getUpgradeCheckResult();
43
46
  if (!context.doesServiceExist(PROMPTER_SERVICE_ID)) {
44
47
  logger.debug(() => "PrompterService not available, skipping auto-upgrade");
@@ -1,7 +1,7 @@
1
1
  import type { SubCommand } from "@flowscripter/dynamic-cli-framework-api";
2
2
  import type { Option } from "@flowscripter/dynamic-cli-framework-api";
3
3
  import type { Context } from "@flowscripter/dynamic-cli-framework-api";
4
- import { type ArgumentValues } from "@flowscripter/dynamic-cli-framework-api";
4
+ import { type Values } from "@flowscripter/dynamic-cli-framework-api";
5
5
  import type DefaultUpgradeService from "../DefaultUpgradeService.ts";
6
6
  export declare class UpgradeSubCommand implements SubCommand {
7
7
  #private;
@@ -11,6 +11,6 @@ export declare class UpgradeSubCommand implements SubCommand {
11
11
  readonly positionals: never[];
12
12
  readonly options: ReadonlyArray<Option>;
13
13
  constructor(upgradeService: DefaultUpgradeService);
14
- execute(context: Context, argumentValues: ArgumentValues): Promise<void>;
14
+ execute(context: Context, argumentValues: Values): Promise<void>;
15
15
  }
16
16
  //# sourceMappingURL=UpgradeSubCommand.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UpgradeSubCommand.d.ts","sourceRoot":"","sources":["../../../../../src/service/upgrade/command/UpgradeSubCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AACtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,EACL,KAAK,cAAc,EAEpB,MAAM,yCAAyC,CAAC;AASjD,OAAO,KAAK,qBAAqB,MAAM,6BAA6B,CAAC;AAErE,qBAAa,iBAAkB,YAAW,UAAU;;IAClD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,6CAA6C;IACjE,QAAQ,CAAC,mBAAmB,SAAS;IACrC,QAAQ,CAAC,WAAW,UAAM;IAE1B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAerC;gBAIiB,cAAc,EAAE,qBAAqB;IAI3C,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAyCtF"}
1
+ {"version":3,"file":"UpgradeSubCommand.d.ts","sourceRoot":"","sources":["../../../../../src/service/upgrade/command/UpgradeSubCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AACtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,yCAAyC,CAAC;AASrF,OAAO,KAAK,qBAAqB,MAAM,6BAA6B,CAAC;AAErE,qBAAa,iBAAkB,YAAW,UAAU;;IAClD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,6CAA6C;IACjE,QAAQ,CAAC,mBAAmB,SAAS;IACrC,QAAQ,CAAC,WAAW,UAAM;IAE1B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAerC;gBAIiB,cAAc,EAAE,qBAAqB;IAI3C,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAyC9E"}
@@ -1,4 +1,4 @@
1
- import { ArgumentValueTypeName, } from "@flowscripter/dynamic-cli-framework-api";
1
+ import { ValueTypeName } from "@flowscripter/dynamic-cli-framework-api";
2
2
  import { Icon, InstallMethod, PRINTER_SERVICE_ID, SupportedArch, SupportedOs, } from "@flowscripter/dynamic-cli-framework-api";
3
3
  export class UpgradeSubCommand {
4
4
  name = "upgrade";
@@ -8,14 +8,14 @@ export class UpgradeSubCommand {
8
8
  options = [
9
9
  {
10
10
  name: "os",
11
- type: ArgumentValueTypeName.STRING,
11
+ type: ValueTypeName.STRING,
12
12
  isOptional: true,
13
13
  allowableValues: Object.values(SupportedOs),
14
14
  description: "Override the detected operating system",
15
15
  },
16
16
  {
17
17
  name: "install-method",
18
- type: ArgumentValueTypeName.STRING,
18
+ type: ValueTypeName.STRING,
19
19
  isOptional: true,
20
20
  allowableValues: Object.values(InstallMethod),
21
21
  description: "Override the detected install method",
@@ -1,5 +1,5 @@
1
1
  import type { CLIConfig } from "@flowscripter/dynamic-cli-framework-api";
2
- import { type PopulatedArgumentSingleValueType, type PopulatedArgumentValues } from "@flowscripter/dynamic-cli-framework-api";
2
+ import { type PopulatedSingleValueType, type PopulatedValues } from "@flowscripter/dynamic-cli-framework-api";
3
3
  import type { GlobalCommand } from "@flowscripter/dynamic-cli-framework-api";
4
4
  import type { SubCommand } from "@flowscripter/dynamic-cli-framework-api";
5
5
  /**
@@ -9,7 +9,7 @@ import type { SubCommand } from "@flowscripter/dynamic-cli-framework-api";
9
9
  * @param command the {@link GlobalCommand} to use for determining the default configuration key and containing a
10
10
  * {@link GlobalCommandArgument} instance to populate a value for.
11
11
  */
12
- export declare function getGlobalCommandValueFromEnvVars(cliConfig: CLIConfig, command: GlobalCommand): PopulatedArgumentSingleValueType;
12
+ export declare function getGlobalCommandValueFromEnvVars(cliConfig: CLIConfig, command: GlobalCommand): PopulatedSingleValueType;
13
13
  /**
14
14
  * Get configured argument values for the specified {@link Option} from environment variables.
15
15
  *
@@ -17,5 +17,5 @@ export declare function getGlobalCommandValueFromEnvVars(cliConfig: CLIConfig, c
17
17
  * @param command the {@link SubCommand} to use for determining the default configuration key and containing
18
18
  * {@link Positional} and {@link Option} instances to populate values for.
19
19
  */
20
- export declare function getSubCommandValuesFromEnvVars(cliConfig: CLIConfig, command: SubCommand): PopulatedArgumentValues | undefined;
20
+ export declare function getSubCommandValuesFromEnvVars(cliConfig: CLIConfig, command: SubCommand): PopulatedValues | undefined;
21
21
  //# sourceMappingURL=envVarHelper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"envVarHelper.d.ts","sourceRoot":"","sources":["../../../src/util/envVarHelper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAGL,KAAK,gCAAgC,EACrC,KAAK,uBAAuB,EAC7B,MAAM,yCAAyC,CAAC;AAOjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAmC1E;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,aAAa,GACrB,gCAAgC,CAalC;AA0ID;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,UAAU,GAClB,uBAAuB,GAAG,SAAS,CA6ErC"}
1
+ {"version":3,"file":"envVarHelper.d.ts","sourceRoot":"","sources":["../../../src/util/envVarHelper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACrB,MAAM,yCAAyC,CAAC;AAOjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAmC1E;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,aAAa,GACrB,wBAAwB,CAa1B;AAwID;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,UAAU,GAClB,eAAe,GAAG,SAAS,CA4E7B"}
@@ -1,5 +1,5 @@
1
1
  import process from "node:process";
2
- import { ArgumentValueTypeName, ComplexValueTypeName, } from "@flowscripter/dynamic-cli-framework-api";
2
+ import { ValueTypeName, ComplexValueTypeName, } from "@flowscripter/dynamic-cli-framework-api";
3
3
  import { MAXIMUM_ARGUMENT_ARRAY_SIZE } from "@flowscripter/dynamic-cli-framework-api";
4
4
  function getKeySegment(segment) {
5
5
  let keySegment = segment.replace("-", "_").toUpperCase();
@@ -34,7 +34,7 @@ export function getGlobalCommandValueFromEnvVars(cliConfig, command) {
34
34
  }
35
35
  // simple check for a specific env var name
36
36
  let envVarValue = process.env[getGlobalArgumentKeyPrefix(cliConfig, command, argument)];
37
- if (envVarValue != undefined && argument.type === ArgumentValueTypeName.BOOLEAN) {
37
+ if (envVarValue != undefined && argument.type === ValueTypeName.BOOLEAN) {
38
38
  envVarValue = envVarValue.length > 0 ? "true" : "false";
39
39
  }
40
40
  return envVarValue;
@@ -77,8 +77,7 @@ function getOptionValuesFromEnvVars(envVarValues, potentialEnvVarNames, env, opt
77
77
  }
78
78
  if (suffix.length > 0) {
79
79
  if (option.type === ComplexValueTypeName.COMPLEX) {
80
- if (envVarValues[option.name][index] ===
81
- undefined) {
80
+ if (envVarValues[option.name][index] === undefined) {
82
81
  envVarValues[option.name][index] = Object.create(null);
83
82
  }
84
83
  option.properties.forEach((property) => {
@@ -99,11 +98,10 @@ function getOptionValuesFromEnvVars(envVarValues, potentialEnvVarNames, env, opt
99
98
  else {
100
99
  // set primitive value
101
100
  let envVarValue = env[match];
102
- if (envVarValue != undefined && option.type === ArgumentValueTypeName.BOOLEAN) {
101
+ if (envVarValue != undefined && option.type === ValueTypeName.BOOLEAN) {
103
102
  envVarValue = envVarValue.length > 1 ? "true" : "false";
104
103
  }
105
- envVarValues[option.name][index] =
106
- envVarValue;
104
+ envVarValues[option.name][index] = envVarValue;
107
105
  }
108
106
  const elements = envVarValues[option.name];
109
107
  for (let i = elements.length - 1; i > -1; i--) {
@@ -135,7 +133,7 @@ function getOptionValuesFromEnvVars(envVarValues, potentialEnvVarNames, env, opt
135
133
  if (value === undefined) {
136
134
  return undefined;
137
135
  }
138
- if (option.type === ArgumentValueTypeName.BOOLEAN) {
136
+ if (option.type === ValueTypeName.BOOLEAN) {
139
137
  value = value.length > 1 ? "true" : "false";
140
138
  }
141
139
  // set primitive value
@@ -186,11 +184,10 @@ export function getSubCommandValuesFromEnvVars(cliConfig, command) {
186
184
  }
187
185
  // set primitive value
188
186
  let envVarValue = process.env[match];
189
- if (envVarValue != undefined && positional.type === ArgumentValueTypeName.BOOLEAN) {
187
+ if (envVarValue != undefined && positional.type === ValueTypeName.BOOLEAN) {
190
188
  envVarValue = envVarValue.length > 1 ? "true" : "false";
191
189
  }
192
- envVarValues[positional.name][index] =
193
- envVarValue;
190
+ envVarValues[positional.name][index] = envVarValue;
194
191
  }
195
192
  });
196
193
  }
@@ -200,7 +197,7 @@ export function getSubCommandValuesFromEnvVars(cliConfig, command) {
200
197
  if (value === undefined) {
201
198
  return undefined;
202
199
  }
203
- if (positional.type === ArgumentValueTypeName.BOOLEAN) {
200
+ if (positional.type === ValueTypeName.BOOLEAN) {
204
201
  value = value.length > 1 ? "true" : "false";
205
202
  }
206
203
  // set primitive value
@@ -1 +1 @@
1
- {"version":3,"file":"helpHelper.d.ts","sourceRoot":"","sources":["../../../src/util/helpHelper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAM7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAIvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAM5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAG9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAMrF,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;CACxC;AAsDD,wBAAsB,iBAAiB,CACrC,cAAc,EAAE,cAAc,EAC9B,qBAAqB,EAAE,qBAAqB,EAC5C,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC,CA2Cf;AA8BD,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,OAAO,EACvB,aAAa,EAAE,aAAa,GAC3B,SAAS,CA6DX;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CA+C3E;AAkLD,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,OAAO,EACvB,UAAU,EAAE,UAAU,EACtB,kBAAkB,EAAE,OAAO,GAC1B,KAAK,CAAC,WAAW,CAAC,CAoBpB;AACD,wBAAgB,8BAA8B,CAC5C,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,GACrB,KAAK,CAAC,WAAW,CAAC,CAgCpB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,sBAAsB,EAAE,aAAa,CAAC,qBAAqB,CAAC,EAC5D,cAAc,EAAE,aAAa,CAAC,aAAa,CAAC,EAC5C,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,EAC1C,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,GACrC,MAAM,CAgJR;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,EAC1C,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,GACrC,MAAM,EAAE,CAkBV"}
1
+ {"version":3,"file":"helpHelper.d.ts","sourceRoot":"","sources":["../../../src/util/helpHelper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAG7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAIvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAM5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAG9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAMrF,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;CACxC;AAsDD,wBAAsB,iBAAiB,CACrC,cAAc,EAAE,cAAc,EAC9B,qBAAqB,EAAE,qBAAqB,EAC5C,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC,CA2Cf;AA2BD,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,OAAO,EACvB,aAAa,EAAE,aAAa,GAC3B,SAAS,CA6DX;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CA+C3E;AAkLD,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,OAAO,EACvB,UAAU,EAAE,UAAU,EACtB,kBAAkB,EAAE,OAAO,GAC1B,KAAK,CAAC,WAAW,CAAC,CAoBpB;AACD,wBAAgB,8BAA8B,CAC5C,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,GACrB,KAAK,CAAC,WAAW,CAAC,CAgCpB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,sBAAsB,EAAE,aAAa,CAAC,qBAAqB,CAAC,EAC5D,cAAc,EAAE,aAAa,CAAC,aAAa,CAAC,EAC5C,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,EAC1C,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,GACrC,MAAM,CA8IR;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,EAC1C,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,GACrC,MAAM,EAAE,CAkBV"}
@@ -1,5 +1,5 @@
1
1
  import { distance } from "fastest-levenshtein";
2
- import { ArgumentValueTypeName, ComplexValueTypeName, } from "@flowscripter/dynamic-cli-framework-api";
2
+ import { ValueTypeName, ComplexValueTypeName } from "@flowscripter/dynamic-cli-framework-api";
3
3
  import { getGlobalCommandArgumentConfigurationKey, getSubCommandArgumentConfigurationKey, } from "./configHelper.js";
4
4
  const SYNTAX_INDENT_WIDTH = 2;
5
5
  const MINIMUM_SYNTAX_COLUMN_WIDTH = 15;
@@ -74,21 +74,20 @@ export async function printHelpSections(printerService, tableGeneratorService, s
74
74
  function getGlobalCommandArgumentForm(globalCommandArgument) {
75
75
  let argumentSyntax = "";
76
76
  switch (globalCommandArgument.type) {
77
- case ArgumentValueTypeName.BOOLEAN:
77
+ case ValueTypeName.BOOLEAN:
78
78
  argumentSyntax = "true|false";
79
79
  break;
80
- case ArgumentValueTypeName.INTEGER:
80
+ case ValueTypeName.INTEGER:
81
81
  argumentSyntax = "<integer_value>";
82
82
  break;
83
- case ArgumentValueTypeName.NUMBER:
83
+ case ValueTypeName.NUMBER:
84
84
  argumentSyntax = "<number_value>";
85
85
  break;
86
- case ArgumentValueTypeName.STRING:
86
+ case ValueTypeName.STRING:
87
87
  argumentSyntax = "<string_value>";
88
88
  break;
89
89
  }
90
- if (globalCommandArgument.isOptional ||
91
- globalCommandArgument.type === ArgumentValueTypeName.BOOLEAN) {
90
+ if (globalCommandArgument.isOptional || globalCommandArgument.type === ValueTypeName.BOOLEAN) {
92
91
  argumentSyntax = `[${argumentSyntax}]`;
93
92
  }
94
93
  return argumentSyntax;
@@ -106,13 +105,13 @@ export function getGlobalArgumentHelpEntry(cliConfig, includeEnvVars, globalComm
106
105
  }
107
106
  else {
108
107
  switch (argument.type) {
109
- case ArgumentValueTypeName.STRING:
108
+ case ValueTypeName.STRING:
110
109
  notesItems.push("string value");
111
110
  break;
112
- case ArgumentValueTypeName.INTEGER:
111
+ case ValueTypeName.INTEGER:
113
112
  notesItems.push("integer value");
114
113
  break;
115
- case ArgumentValueTypeName.NUMBER:
114
+ case ValueTypeName.NUMBER:
116
115
  notesItems.push("number value");
117
116
  break;
118
117
  }
@@ -151,16 +150,16 @@ export function getSubCommandArgumentsSyntax(subCommand) {
151
150
  subCommand.options.forEach((option) => {
152
151
  let optionSyntax = `--${option.name}`;
153
152
  switch (option.type) {
154
- case ArgumentValueTypeName.BOOLEAN:
153
+ case ValueTypeName.BOOLEAN:
155
154
  optionSyntax = `${optionSyntax} [true|false]`;
156
155
  break;
157
- case ArgumentValueTypeName.INTEGER:
156
+ case ValueTypeName.INTEGER:
158
157
  optionSyntax = `${optionSyntax} <integer_value>`;
159
158
  break;
160
- case ArgumentValueTypeName.NUMBER:
159
+ case ValueTypeName.NUMBER:
161
160
  optionSyntax = `${optionSyntax} <number_value>`;
162
161
  break;
163
- case ArgumentValueTypeName.STRING:
162
+ case ValueTypeName.STRING:
164
163
  optionSyntax = `${optionSyntax} <string_value>`;
165
164
  break;
166
165
  case ComplexValueTypeName.COMPLEX:
@@ -219,16 +218,16 @@ function getOptionHelpEntry(cliConfig, includeEnvVars, command, option, subEntry
219
218
  }
220
219
  else {
221
220
  switch (option.type) {
222
- case ArgumentValueTypeName.STRING:
221
+ case ValueTypeName.STRING:
223
222
  notesItems.push(`string value`);
224
223
  break;
225
- case ArgumentValueTypeName.INTEGER:
224
+ case ValueTypeName.INTEGER:
226
225
  notesItems.push(`integer value`);
227
226
  break;
228
- case ArgumentValueTypeName.NUMBER:
227
+ case ValueTypeName.NUMBER:
229
228
  notesItems.push(`number value`);
230
229
  break;
231
- case ArgumentValueTypeName.BOOLEAN:
230
+ case ValueTypeName.BOOLEAN:
232
231
  notesItems.push(`boolean value`);
233
232
  break;
234
233
  }
@@ -287,16 +286,16 @@ function getPositionalHelpEntry(cliConfig, includeEnvVars, command, positional)
287
286
  }
288
287
  else {
289
288
  switch (positional.type) {
290
- case ArgumentValueTypeName.STRING:
289
+ case ValueTypeName.STRING:
291
290
  notesItems.push(`string value`);
292
291
  break;
293
- case ArgumentValueTypeName.INTEGER:
292
+ case ValueTypeName.INTEGER:
294
293
  notesItems.push(`integer value`);
295
294
  break;
296
- case ArgumentValueTypeName.NUMBER:
295
+ case ValueTypeName.NUMBER:
297
296
  notesItems.push(`number value`);
298
297
  break;
299
- case ArgumentValueTypeName.BOOLEAN:
298
+ case ValueTypeName.BOOLEAN:
300
299
  notesItems.push(`boolean value`);
301
300
  break;
302
301
  }
@@ -401,7 +400,7 @@ export function getMultiCommandAppSyntax(context, globalModifierCommands, global
401
400
  const optionArgMandatory = globalModifierCommands.every((modifier) => modifier.argument !== undefined &&
402
401
  !modifier.argument.isOptional &&
403
402
  modifier.argument.defaultValue === undefined &&
404
- modifier.argument.type !== ArgumentValueTypeName.BOOLEAN);
403
+ modifier.argument.type !== ValueTypeName.BOOLEAN);
405
404
  syntax += optionArgMandatory ? " <value>" : " [<value>]";
406
405
  }
407
406
  syntax += "]";
@@ -422,7 +421,7 @@ export function getMultiCommandAppSyntax(context, globalModifierCommands, global
422
421
  ((globalCommand.argument.isOptional !== undefined && globalCommand.argument.isOptional) ||
423
422
  globalCommand.argument.defaultValue !== undefined));
424
423
  argValueOptional = globalCommands.some((globalCommand) => globalCommand.argument !== undefined &&
425
- globalCommand.argument.type === ArgumentValueTypeName.BOOLEAN);
424
+ globalCommand.argument.type === ValueTypeName.BOOLEAN);
426
425
  }
427
426
  }
428
427
  if (groupCommands.length > 0 || subCommands.length > 0) {
@@ -442,10 +441,10 @@ export function getMultiCommandAppSyntax(context, globalModifierCommands, global
442
441
  subCommand.positionals.some((positional) => positional.isVarargOptional !== undefined && positional.isVarargOptional));
443
442
  argValueOptional =
444
443
  argValueOptional ||
445
- groupCommands.some((groupCommand) => groupCommand.memberSubCommands.some((memberCommand) => memberCommand.options.some((option) => option.type === ArgumentValueTypeName.BOOLEAN ||
446
- memberCommand.positionals.some((positional) => positional.type === ArgumentValueTypeName.BOOLEAN)))) ||
447
- subCommands.some((subCommand) => subCommand.options.some((option) => option.type === ArgumentValueTypeName.BOOLEAN) ||
448
- subCommand.positionals.some((positional) => positional.type === ArgumentValueTypeName.BOOLEAN));
444
+ groupCommands.some((groupCommand) => groupCommand.memberSubCommands.some((memberCommand) => memberCommand.options.some((option) => option.type === ValueTypeName.BOOLEAN ||
445
+ memberCommand.positionals.some((positional) => positional.type === ValueTypeName.BOOLEAN)))) ||
446
+ subCommands.some((subCommand) => subCommand.options.some((option) => option.type === ValueTypeName.BOOLEAN) ||
447
+ subCommand.positionals.some((positional) => positional.type === ValueTypeName.BOOLEAN));
449
448
  multipleArg =
450
449
  multipleArg ||
451
450
  groupCommands.some((groupCommand) => groupCommand.memberSubCommands.some((memberCommand) => memberCommand.options.some((option) => option.isArray) ||
package/index.ts CHANGED
@@ -1,17 +1,14 @@
1
1
  // Argument API
2
2
  export type { Argument } from "@flowscripter/dynamic-cli-framework-api";
3
3
  export type {
4
- ArgumentSingleValueType,
5
- ArgumentValues,
6
- ArgumentValueType,
7
- PopulatedArgumentSingleValueType,
8
- PopulatedArgumentValues,
9
- PopulatedArgumentValueType,
10
- } from "@flowscripter/dynamic-cli-framework-api";
11
- export {
12
- ArgumentValueTypeName,
13
- ComplexValueTypeName,
4
+ SingleValueType,
5
+ Values,
6
+ ValueType,
7
+ PopulatedSingleValueType,
8
+ PopulatedValues,
9
+ PopulatedValueType,
14
10
  } from "@flowscripter/dynamic-cli-framework-api";
11
+ export { ValueTypeName, ComplexValueTypeName } from "@flowscripter/dynamic-cli-framework-api";
15
12
  export type { ComplexOption } from "@flowscripter/dynamic-cli-framework-api";
16
13
  export { MAXIMUM_COMPLEX_OPTION_NESTING_DEPTH } from "@flowscripter/dynamic-cli-framework-api";
17
14
  export type { SubCommandArgument } from "@flowscripter/dynamic-cli-framework-api";
@@ -78,6 +75,11 @@ export type { ShutdownService } from "@flowscripter/dynamic-cli-framework-api";
78
75
  export { default as DefaultShutdownService } from "./src/service/shutdown/DefaultShutdownService.ts";
79
76
  export { default as ShutdownServiceProvider } from "./src/service/shutdown/ShutdownServiceProvider.ts";
80
77
 
78
+ export { FETCH_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
79
+ export type { FetchOptions, FetchService } from "@flowscripter/dynamic-cli-framework-api";
80
+ export { default as DefaultFetchService } from "./src/service/fetch/DefaultFetchService.ts";
81
+ export { default as FetchServiceProvider } from "./src/service/fetch/FetchServiceProvider.ts";
82
+
81
83
  export { SPAWN_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
82
84
  export type {
83
85
  SpawnOptions,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowscripter/dynamic-cli-framework",
3
- "version": "2.4.0",
3
+ "version": "3.0.0",
4
4
  "description": "A framework for developing CLI applications which supports dynamic discovery and installation of new commands",
5
5
  "keywords": [
6
6
  "bun",
@@ -48,8 +48,8 @@
48
48
  "build": "tsc -p tsconfig.build.json"
49
49
  },
50
50
  "dependencies": {
51
- "@flowscripter/dynamic-cli-framework-api": "^1.3.0",
52
- "@flowscripter/dynamic-plugin-framework": "1.11.1",
51
+ "@flowscripter/dynamic-cli-framework-api": "^1.4.1",
52
+ "@flowscripter/dynamic-plugin-framework": "1.12.0",
53
53
  "emphasize": "^7.0.0",
54
54
  "fastest-levenshtein": "^1.0.16",
55
55
  "figlet": "^1.11.0",
@@ -52,6 +52,7 @@ import DefaultCompletionService from "../service/completion/DefaultCompletionSer
52
52
  import CompletionServiceProvider from "../service/completion/CompletionServiceProvider.ts";
53
53
  import ImagePrinterServiceProvider from "../service/imagePrinter/ImagePrinterServiceProvider.ts";
54
54
  import SpawnServiceProvider from "../service/spawn/SpawnServiceProvider.ts";
55
+ import FetchServiceProvider from "../service/fetch/FetchServiceProvider.ts";
55
56
  import UpgradeServiceProvider from "../service/upgrade/UpgradeServiceProvider.ts";
56
57
  const logger = getLogger("BaseCLI");
57
58
 
@@ -72,6 +73,7 @@ const logger = getLogger("BaseCLI");
72
73
  *
73
74
  * * {@link ImagePrinterServiceProvider}
74
75
  * * {@link SpawnServiceProvider}
76
+ * * {@link FetchServiceProvider}
75
77
  * * {@link CompletionServiceProvider}
76
78
  * * {@link UpgradeServiceProvider}
77
79
  *
@@ -136,6 +138,7 @@ export default class BaseCLI implements CLI {
136
138
  completionServiceEnabled: false,
137
139
  imagePrinterServiceEnabled: false,
138
140
  spawnServiceEnabled: false,
141
+ fetchServiceEnabled: false,
139
142
  upgradeServiceEnabled: false,
140
143
  upgradeLocationsConfig: { supportedPlatforms: [] },
141
144
  validateAllCommands: false,
@@ -274,6 +277,10 @@ export default class BaseCLI implements CLI {
274
277
  this.addServiceProvider(new SpawnServiceProvider(58));
275
278
  }
276
279
 
280
+ if (this.#options.fetchServiceEnabled) {
281
+ this.addServiceProvider(new FetchServiceProvider(57));
282
+ }
283
+
277
284
  if (this.#options.completionServiceEnabled) {
278
285
  const completionService = new DefaultCompletionService();
279
286
  this.addServiceProvider(
@@ -9,6 +9,7 @@ export default interface BaseCLIFeatureOptions {
9
9
  readonly completionServiceEnabled?: boolean;
10
10
  readonly imagePrinterServiceEnabled?: boolean;
11
11
  readonly spawnServiceEnabled?: boolean;
12
+ readonly fetchServiceEnabled?: boolean;
12
13
  readonly upgradeServiceEnabled?: boolean;
13
14
  readonly upgradeLocationsConfig?: UpgradeLocationsConfig;
14
15
  readonly validateAllCommands?: boolean;
@@ -4,9 +4,9 @@ import type { SubCommand } from "@flowscripter/dynamic-cli-framework-api";
4
4
  import type { GlobalCommand } from "@flowscripter/dynamic-cli-framework-api";
5
5
  import type { GroupCommand } from "@flowscripter/dynamic-cli-framework-api";
6
6
  import {
7
- type ArgumentSingleValueType,
8
- type ArgumentValues,
9
- ArgumentValueTypeName,
7
+ type SingleValueType,
8
+ type Values,
9
+ ValueTypeName,
10
10
  } from "@flowscripter/dynamic-cli-framework-api";
11
11
  import type { Context } from "@flowscripter/dynamic-cli-framework-api";
12
12
  import type { HelpSection } from "../util/helpHelper.ts";
@@ -308,11 +308,11 @@ export class MultiCommandCliHelpGlobalCommand
308
308
 
309
309
  readonly argument = {
310
310
  name: "command",
311
- type: ArgumentValueTypeName.STRING,
311
+ type: ValueTypeName.STRING,
312
312
  isOptional: true,
313
313
  };
314
314
 
315
- public async execute(context: Context, argumentValue?: ArgumentSingleValueType): Promise<void> {
315
+ public async execute(context: Context, argumentValue?: SingleValueType): Promise<void> {
316
316
  const commandName = argumentValue as string | undefined;
317
317
  if (commandName !== undefined) {
318
318
  await this.printUsageHelp(context, commandName);
@@ -334,13 +334,13 @@ export class MultiCommandCliHelpSubCommand
334
334
  public readonly positionals: ReadonlyArray<Positional> = [
335
335
  {
336
336
  name: "command",
337
- type: ArgumentValueTypeName.STRING,
337
+ type: ValueTypeName.STRING,
338
338
  isVarargOptional: true,
339
339
  description: "Display help for the specific <command>",
340
340
  },
341
341
  ];
342
342
 
343
- public async execute(context: Context, argumentValues: ArgumentValues): Promise<void> {
343
+ public async execute(context: Context, argumentValues: Values): Promise<void> {
344
344
  const commandName = argumentValues["command"] as string | undefined;
345
345
  if (commandName !== undefined) {
346
346
  await this.printUsageHelp(context, commandName);
@@ -4,11 +4,8 @@ import type { GlobalCommand } from "@flowscripter/dynamic-cli-framework-api";
4
4
  import type { Argument } from "@flowscripter/dynamic-cli-framework-api";
5
5
  import type { GroupCommand } from "@flowscripter/dynamic-cli-framework-api";
6
6
  import type { SubCommand } from "@flowscripter/dynamic-cli-framework-api";
7
- import type { ArgumentSingleValueType } from "@flowscripter/dynamic-cli-framework-api";
8
- import {
9
- ArgumentValueTypeName,
10
- ComplexValueTypeName,
11
- } from "@flowscripter/dynamic-cli-framework-api";
7
+ import type { SingleValueType } from "@flowscripter/dynamic-cli-framework-api";
8
+ import { ValueTypeName, ComplexValueTypeName } from "@flowscripter/dynamic-cli-framework-api";
12
9
  import type { Option } from "@flowscripter/dynamic-cli-framework-api";
13
10
  import type { ComplexOption } from "@flowscripter/dynamic-cli-framework-api";
14
11
  import { isComplexOption } from "../argument/ArgumentTypeGuards.ts";
@@ -30,14 +27,14 @@ import type { GlobalCommandArgument } from "@flowscripter/dynamic-cli-framework-
30
27
  const logger = getLogger("commandValidation");
31
28
 
32
29
  function validateValueType(
33
- type: ArgumentValueTypeName,
34
- value: ArgumentSingleValueType,
30
+ type: ValueTypeName,
31
+ value: SingleValueType,
35
32
  argumentName: string,
36
33
  isDefaultValue: boolean,
37
34
  isRangeValue: boolean,
38
35
  ): void {
39
36
  switch (type) {
40
- case ArgumentValueTypeName.BOOLEAN:
37
+ case ValueTypeName.BOOLEAN:
41
38
  if (typeof value !== "boolean") {
42
39
  throw new Error(
43
40
  `Specified ${
@@ -46,7 +43,7 @@ function validateValueType(
46
43
  );
47
44
  }
48
45
  break;
49
- case ArgumentValueTypeName.NUMBER:
46
+ case ValueTypeName.NUMBER:
50
47
  if (typeof value !== "number" || !Number.isFinite(value)) {
51
48
  throw new Error(
52
49
  `Specified ${
@@ -55,7 +52,7 @@ function validateValueType(
55
52
  );
56
53
  }
57
54
  break;
58
- case ArgumentValueTypeName.INTEGER:
55
+ case ValueTypeName.INTEGER:
59
56
  if (typeof value !== "number" || !Number.isInteger(value)) {
60
57
  throw new Error(
61
58
  `Specified ${
@@ -64,7 +61,7 @@ function validateValueType(
64
61
  );
65
62
  }
66
63
  break;
67
- case ArgumentValueTypeName.STRING:
64
+ case ValueTypeName.STRING:
68
65
  if (typeof value !== "string") {
69
66
  throw new Error(
70
67
  `Specified ${
@@ -102,15 +99,15 @@ function isConfigurationKeyLegal(configurationKey: string): boolean {
102
99
 
103
100
  function validateArgument(argument: Argument, name: string): void {
104
101
  if (
105
- argument.type !== ArgumentValueTypeName.NUMBER &&
106
- argument.type !== ArgumentValueTypeName.INTEGER &&
107
- argument.type !== ArgumentValueTypeName.STRING &&
108
- argument.type !== ArgumentValueTypeName.BOOLEAN
102
+ argument.type !== ValueTypeName.NUMBER &&
103
+ argument.type !== ValueTypeName.INTEGER &&
104
+ argument.type !== ValueTypeName.STRING &&
105
+ argument.type !== ValueTypeName.BOOLEAN
109
106
  ) {
110
107
  throw new Error(`Illegal type: '${argument.type}' for argument: '${name}'`);
111
108
  }
112
109
  if (argument.allowableValues) {
113
- if (argument.type === ArgumentValueTypeName.BOOLEAN) {
110
+ if (argument.type === ValueTypeName.BOOLEAN) {
114
111
  throw new Error(
115
112
  `Illegal type: '${argument.type}' for argument: '${name}' with allowable values specified`,
116
113
  );
@@ -120,21 +117,18 @@ function validateArgument(argument: Argument, name: string): void {
120
117
  });
121
118
  }
122
119
  if (argument.isCaseInsensitive !== undefined) {
123
- if (argument.type === ArgumentValueTypeName.BOOLEAN && argument.isCaseInsensitive === false) {
120
+ if (argument.type === ValueTypeName.BOOLEAN && argument.isCaseInsensitive === false) {
124
121
  throw new Error(
125
122
  `Illegal type: '${argument.type}' for argument: '${name}' must always be case insensitive`,
126
123
  );
127
- } else if (argument.type !== ArgumentValueTypeName.STRING) {
124
+ } else if (argument.type !== ValueTypeName.STRING) {
128
125
  throw new Error(
129
126
  `Illegal type: '${argument.type}' for argument: '${name}' with case insensitive specified`,
130
127
  );
131
128
  }
132
129
  }
133
130
  if (argument.minValueInclusive !== undefined) {
134
- if (
135
- argument.type !== ArgumentValueTypeName.NUMBER &&
136
- argument.type !== ArgumentValueTypeName.INTEGER
137
- ) {
131
+ if (argument.type !== ValueTypeName.NUMBER && argument.type !== ValueTypeName.INTEGER) {
138
132
  throw new Error(
139
133
  `Illegal type: '${argument.type}' for argument: '${name}' with min value specified`,
140
134
  );
@@ -147,10 +141,7 @@ function validateArgument(argument: Argument, name: string): void {
147
141
  validateValueType(argument.type, argument.minValueInclusive, name, false, true);
148
142
  }
149
143
  if (argument.maxValueInclusive !== undefined) {
150
- if (
151
- argument.type !== ArgumentValueTypeName.NUMBER &&
152
- argument.type !== ArgumentValueTypeName.INTEGER
153
- ) {
144
+ if (argument.type !== ValueTypeName.NUMBER && argument.type !== ValueTypeName.INTEGER) {
154
145
  throw new Error(
155
146
  `Illegal type: '${argument.type}' for argument: '${name}' with max value specified`,
156
147
  );