@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
@@ -56,14 +56,9 @@ describe("runner tests", () => {
56
56
  let modifierHasRun = false;
57
57
  let subHasRun = false;
58
58
 
59
- const globalModifierCommand = getGlobalModifierCommandWithArgument(
60
- "modifierCommand",
61
- "c",
62
- 1,
63
- {
64
- type: ArgumentValueTypeName.STRING,
65
- },
66
- );
59
+ const globalModifierCommand = getGlobalModifierCommandWithArgument("modifierCommand", "c", 1, {
60
+ type: ArgumentValueTypeName.STRING,
61
+ });
67
62
  const subCommand = getSubCommand("subCommand", [], []);
68
63
 
69
64
  globalModifierCommand.execute = (): Promise<void> => {
@@ -75,10 +70,7 @@ describe("runner tests", () => {
75
70
  return Promise.resolve();
76
71
  };
77
72
 
78
- const commandRegistry = new DefaultCommandRegistry([
79
- globalModifierCommand,
80
- subCommand,
81
- ]);
73
+ const commandRegistry = new DefaultCommandRegistry([globalModifierCommand, subCommand]);
82
74
  let runResult = await run(
83
75
  ["--modifierCommand=bar", "subCommand"],
84
76
  commandRegistry,
@@ -191,14 +183,9 @@ describe("runner tests", () => {
191
183
  let modifierHasRun = false;
192
184
  let subHasRun = false;
193
185
 
194
- const modifierCommand = getGlobalModifierCommandWithArgument(
195
- "modifier",
196
- "m",
197
- 1,
198
- {
199
- type: ArgumentValueTypeName.STRING,
200
- },
201
- );
186
+ const modifierCommand = getGlobalModifierCommandWithArgument("modifier", "m", 1, {
187
+ type: ArgumentValueTypeName.STRING,
188
+ });
202
189
  const option = {
203
190
  name: "foo",
204
191
  type: ArgumentValueTypeName.STRING,
@@ -215,10 +202,7 @@ describe("runner tests", () => {
215
202
  return Promise.resolve();
216
203
  };
217
204
 
218
- const commandRegistry = new DefaultCommandRegistry([
219
- modifierCommand,
220
- subCommand,
221
- ]);
205
+ const commandRegistry = new DefaultCommandRegistry([modifierCommand, subCommand]);
222
206
  const runResult = await run(
223
207
  ["--modifier=bar", "command", "--foo", "bar"],
224
208
  commandRegistry,
@@ -236,14 +220,9 @@ describe("runner tests", () => {
236
220
  let modifierHasRun = false;
237
221
  let globalHasRun = false;
238
222
 
239
- const modifierCommand = getGlobalModifierCommandWithArgument(
240
- "modifier",
241
- "m",
242
- 1,
243
- {
244
- type: ArgumentValueTypeName.STRING,
245
- },
246
- );
223
+ const modifierCommand = getGlobalModifierCommandWithArgument("modifier", "m", 1, {
224
+ type: ArgumentValueTypeName.STRING,
225
+ });
247
226
  const globalCommand = getGlobalCommandWithShortAlias("global", "g", {
248
227
  type: ArgumentValueTypeName.STRING,
249
228
  });
@@ -257,10 +236,7 @@ describe("runner tests", () => {
257
236
  return Promise.resolve();
258
237
  };
259
238
 
260
- const commandRegistry = new DefaultCommandRegistry([
261
- modifierCommand,
262
- globalCommand,
263
- ]);
239
+ const commandRegistry = new DefaultCommandRegistry([modifierCommand, globalCommand]);
264
240
  const runResult = await run(
265
241
  ["--modifier=bar", "-g", "bar"],
266
242
  commandRegistry,
@@ -279,22 +255,12 @@ describe("runner tests", () => {
279
255
  let modifier2HasRun = false;
280
256
  let globalHasRun = false;
281
257
 
282
- const modifierCommand1 = getGlobalModifierCommandWithArgument(
283
- "modifier1",
284
- "m",
285
- 1,
286
- {
287
- type: ArgumentValueTypeName.STRING,
288
- },
289
- );
290
- const modifierCommand2 = getGlobalModifierCommandWithArgument(
291
- "modifier2",
292
- "n",
293
- 2,
294
- {
295
- type: ArgumentValueTypeName.STRING,
296
- },
297
- );
258
+ const modifierCommand1 = getGlobalModifierCommandWithArgument("modifier1", "m", 1, {
259
+ type: ArgumentValueTypeName.STRING,
260
+ });
261
+ const modifierCommand2 = getGlobalModifierCommandWithArgument("modifier2", "n", 2, {
262
+ type: ArgumentValueTypeName.STRING,
263
+ });
298
264
  const globalCommand = getGlobalCommandWithShortAlias("global", "g", {
299
265
  type: ArgumentValueTypeName.STRING,
300
266
  });
@@ -337,22 +303,12 @@ describe("runner tests", () => {
337
303
  let groupHasRun = false;
338
304
  let subHasRun = false;
339
305
 
340
- const modifierCommand1 = getGlobalModifierCommandWithArgument(
341
- "modifier1",
342
- "m",
343
- 1,
344
- {
345
- type: ArgumentValueTypeName.STRING,
346
- },
347
- );
348
- const modifierCommand2 = getGlobalModifierCommandWithArgument(
349
- "modifier2",
350
- "n",
351
- 2,
352
- {
353
- type: ArgumentValueTypeName.STRING,
354
- },
355
- );
306
+ const modifierCommand1 = getGlobalModifierCommandWithArgument("modifier1", "m", 1, {
307
+ type: ArgumentValueTypeName.STRING,
308
+ });
309
+ const modifierCommand2 = getGlobalModifierCommandWithArgument("modifier2", "n", 2, {
310
+ type: ArgumentValueTypeName.STRING,
311
+ });
356
312
  const subCommand = getSubCommandWithOption("subCommand", true);
357
313
  const groupCommand = getGroupCommand("group", [subCommand]);
358
314
 
@@ -382,14 +338,7 @@ describe("runner tests", () => {
382
338
  groupCommand,
383
339
  ]);
384
340
  const runResult = await run(
385
- [
386
- "--modifier1=bar1",
387
- "group",
388
- "subCommand",
389
- "--foo",
390
- "subfoo",
391
- "--modifier2=bar2",
392
- ],
341
+ ["--modifier1=bar1", "group", "subCommand", "--foo", "subfoo", "--modifier2=bar2"],
393
342
  commandRegistry,
394
343
  getServiceProviderRegistry(),
395
344
  undefined,
@@ -407,14 +356,9 @@ describe("runner tests", () => {
407
356
  let modifierHasRun = false;
408
357
  let defaultHasRun = false;
409
358
 
410
- const modifierCommand = getGlobalModifierCommandWithArgument(
411
- "modifier",
412
- "m",
413
- 1,
414
- {
415
- type: ArgumentValueTypeName.STRING,
416
- },
417
- );
359
+ const modifierCommand = getGlobalModifierCommandWithArgument("modifier", "m", 1, {
360
+ type: ArgumentValueTypeName.STRING,
361
+ });
418
362
  const globalCommand = getGlobalCommandWithShortAlias("global", "g");
419
363
 
420
364
  modifierCommand.execute = (): Promise<void> => {
@@ -426,10 +370,7 @@ describe("runner tests", () => {
426
370
  return Promise.resolve();
427
371
  };
428
372
 
429
- const commandRegistry = new DefaultCommandRegistry([
430
- modifierCommand,
431
- globalCommand,
432
- ]);
373
+ const commandRegistry = new DefaultCommandRegistry([modifierCommand, globalCommand]);
433
374
  const runResult = await run(
434
375
  ["--modifier=bar"],
435
376
  commandRegistry,
@@ -450,14 +391,9 @@ describe("runner tests", () => {
450
391
  let modifierHasRun = false;
451
392
  let defaultHasRun = false;
452
393
 
453
- const modifierCommand = getGlobalModifierCommandWithArgument(
454
- "modifier",
455
- "m",
456
- 1,
457
- {
458
- type: ArgumentValueTypeName.STRING,
459
- },
460
- );
394
+ const modifierCommand = getGlobalModifierCommandWithArgument("modifier", "m", 1, {
395
+ type: ArgumentValueTypeName.STRING,
396
+ });
461
397
  const globalCommand = getGlobalCommandWithShortAlias("global", "g");
462
398
 
463
399
  modifierCommand.execute = (): Promise<void> => {
@@ -469,10 +405,7 @@ describe("runner tests", () => {
469
405
  return Promise.resolve();
470
406
  };
471
407
 
472
- const commandRegistry = new DefaultCommandRegistry([
473
- modifierCommand,
474
- globalCommand,
475
- ]);
408
+ const commandRegistry = new DefaultCommandRegistry([modifierCommand, globalCommand]);
476
409
  const runResult = await run(
477
410
  ["--modifier"],
478
411
  commandRegistry,
@@ -569,11 +502,7 @@ describe("runner tests", () => {
569
502
 
570
503
  let globalHasRun = false;
571
504
 
572
- const globalModifierCommand = getGlobalModifierCommandWithArgument(
573
- "modifier",
574
- "m",
575
- 1,
576
- );
505
+ const globalModifierCommand = getGlobalModifierCommandWithArgument("modifier", "m", 1);
577
506
  const globalCommand = getGlobalCommandWithShortAlias("global", "g");
578
507
 
579
508
  globalModifierCommand.execute = (): Promise<void> => {
@@ -584,10 +513,7 @@ describe("runner tests", () => {
584
513
  return Promise.resolve();
585
514
  };
586
515
 
587
- const commandRegistry = new DefaultCommandRegistry([
588
- globalCommand,
589
- globalModifierCommand,
590
- ]);
516
+ const commandRegistry = new DefaultCommandRegistry([globalCommand, globalModifierCommand]);
591
517
  const runResult = await run(
592
518
  ["--global", "--modifier"],
593
519
  commandRegistry,
@@ -627,10 +553,7 @@ describe("runner tests", () => {
627
553
  );
628
554
 
629
555
  expect(runResult.runState).toEqual(RunState.PARSE_ERROR);
630
- expectStringIncludes(
631
- streamString.getString(),
632
- "-f (missing value)",
633
- );
556
+ expectStringIncludes(streamString.getString(), "-f (missing value)");
634
557
  expect(hasRun).toBeFalse();
635
558
  });
636
559
 
@@ -682,10 +605,7 @@ describe("runner tests", () => {
682
605
  );
683
606
 
684
607
  expect(runResult.runState).toEqual(RunState.NO_COMMAND);
685
- expectStringIncludes(
686
- streamString.getString(),
687
- "No command specified",
688
- );
608
+ expectStringIncludes(streamString.getString(), "No command specified");
689
609
  expect(hasRun).toBeFalse();
690
610
  });
691
611
 
@@ -714,14 +634,8 @@ describe("runner tests", () => {
714
634
  );
715
635
 
716
636
  expect(runResult.runState).toEqual(RunState.NO_COMMAND);
717
- expectStringIncludes(
718
- streamString.getString(),
719
- "No command recognised",
720
- );
721
- expectStringIncludes(
722
- streamString.getString(),
723
- "Possible matches: command\n",
724
- );
637
+ expectStringIncludes(streamString.getString(), "No command recognised");
638
+ expectStringIncludes(streamString.getString(), "Possible matches: command\n");
725
639
  expect(hasRun).toBeFalse();
726
640
  });
727
641
 
@@ -797,13 +711,20 @@ describe("runner tests", () => {
797
711
  });
798
712
 
799
713
  test("Run default based on all args", async () => {
800
- const command = getSubCommand("command", [{
801
- name: "foo",
802
- type: ArgumentValueTypeName.STRING,
803
- }, {
804
- name: "goo",
805
- type: ArgumentValueTypeName.STRING,
806
- }], []);
714
+ const command = getSubCommand(
715
+ "command",
716
+ [
717
+ {
718
+ name: "foo",
719
+ type: ArgumentValueTypeName.STRING,
720
+ },
721
+ {
722
+ name: "goo",
723
+ type: ArgumentValueTypeName.STRING,
724
+ },
725
+ ],
726
+ [],
727
+ );
807
728
  const runResult = await run(
808
729
  ["--foo=f", "--goo=g"],
809
730
  new DefaultCommandRegistry([]),
@@ -820,13 +741,16 @@ describe("runner tests", () => {
820
741
  const streamString = new StreamString();
821
742
  const command = getSubCommand(
822
743
  "command",
823
- [{
824
- name: "foo",
825
- type: ArgumentValueTypeName.STRING,
826
- }, {
827
- name: "goo",
828
- type: ArgumentValueTypeName.STRING,
829
- }],
744
+ [
745
+ {
746
+ name: "foo",
747
+ type: ArgumentValueTypeName.STRING,
748
+ },
749
+ {
750
+ name: "goo",
751
+ type: ArgumentValueTypeName.STRING,
752
+ },
753
+ ],
830
754
  [],
831
755
  true,
832
756
  );
@@ -837,10 +761,13 @@ describe("runner tests", () => {
837
761
  getConfigurationServiceProvider(
838
762
  90,
839
763
  new Map([
840
- ["command", {
841
- foo: "f",
842
- goo: "g",
843
- }],
764
+ [
765
+ "command",
766
+ {
767
+ foo: "f",
768
+ goo: "g",
769
+ },
770
+ ],
844
771
  ]),
845
772
  ),
846
773
  getContext(streamString),
@@ -848,23 +775,23 @@ describe("runner tests", () => {
848
775
  );
849
776
 
850
777
  expect(runResult.runState).toEqual(RunState.SUCCESS);
851
- expectStringIncludes(
852
- streamString.getString(),
853
- "Unused args: --bip=b --bop=b",
854
- );
778
+ expectStringIncludes(streamString.getString(), "Unused args: --bip=b --bop=b");
855
779
  });
856
780
 
857
781
  test("Run default command based on some args and treating some args as unused", async () => {
858
782
  const streamString = new StreamString();
859
783
  const command = getSubCommand(
860
784
  "command",
861
- [{
862
- name: "foo",
863
- type: ArgumentValueTypeName.STRING,
864
- }, {
865
- name: "goo",
866
- type: ArgumentValueTypeName.STRING,
867
- }],
785
+ [
786
+ {
787
+ name: "foo",
788
+ type: ArgumentValueTypeName.STRING,
789
+ },
790
+ {
791
+ name: "goo",
792
+ type: ArgumentValueTypeName.STRING,
793
+ },
794
+ ],
868
795
  [],
869
796
  true,
870
797
  );
@@ -876,9 +803,12 @@ describe("runner tests", () => {
876
803
  getConfigurationServiceProvider(
877
804
  90,
878
805
  new Map([
879
- ["command", {
880
- foo: "f",
881
- }],
806
+ [
807
+ "command",
808
+ {
809
+ foo: "f",
810
+ },
811
+ ],
882
812
  ]),
883
813
  ),
884
814
  getContext(streamString),
@@ -886,21 +816,25 @@ describe("runner tests", () => {
886
816
  );
887
817
 
888
818
  expect(runResult.runState).toEqual(RunState.SUCCESS);
889
- expectStringIncludes(
890
- streamString.getString(),
891
- "Unused arg: --bip=b",
892
- );
819
+ expectStringIncludes(streamString.getString(), "Unused arg: --bip=b");
893
820
  });
894
821
 
895
822
  test("Fail to parse default command with some unused args and missing required values", async () => {
896
823
  const streamString = new StreamString();
897
- const command = getSubCommand("command", [{
898
- name: "foo",
899
- type: ArgumentValueTypeName.STRING,
900
- }, {
901
- name: "goo",
902
- type: ArgumentValueTypeName.STRING,
903
- }], []);
824
+ const command = getSubCommand(
825
+ "command",
826
+ [
827
+ {
828
+ name: "foo",
829
+ type: ArgumentValueTypeName.STRING,
830
+ },
831
+ {
832
+ name: "goo",
833
+ type: ArgumentValueTypeName.STRING,
834
+ },
835
+ ],
836
+ [],
837
+ );
904
838
 
905
839
  const runResult = await run(
906
840
  ["--bip=b", "--goo=g"],
@@ -916,14 +850,21 @@ describe("runner tests", () => {
916
850
 
917
851
  test("Fail to parse default command with some unused args", async () => {
918
852
  const streamString = new StreamString();
919
- const command = getSubCommand("command", [{
920
- name: "foo",
921
- type: ArgumentValueTypeName.STRING,
922
- isOptional: true,
923
- }, {
924
- name: "goo",
925
- type: ArgumentValueTypeName.STRING,
926
- }], []);
853
+ const command = getSubCommand(
854
+ "command",
855
+ [
856
+ {
857
+ name: "foo",
858
+ type: ArgumentValueTypeName.STRING,
859
+ isOptional: true,
860
+ },
861
+ {
862
+ name: "goo",
863
+ type: ArgumentValueTypeName.STRING,
864
+ },
865
+ ],
866
+ [],
867
+ );
927
868
 
928
869
  const runResult = await run(
929
870
  ["--bip=b", "--goo=g"],
@@ -953,10 +894,7 @@ describe("runner tests", () => {
953
894
  };
954
895
 
955
896
  const subCommand2 = getSubCommand("command2", [], []);
956
- const commandRegistry = new DefaultCommandRegistry([
957
- subCommand1,
958
- subCommand2,
959
- ]);
897
+ const commandRegistry = new DefaultCommandRegistry([subCommand1, subCommand2]);
960
898
  const runResult = await run(
961
899
  ["command1", "--foo", "bar", "command2"],
962
900
  commandRegistry,
@@ -966,31 +904,18 @@ describe("runner tests", () => {
966
904
  );
967
905
 
968
906
  expect(runResult.runState).toEqual(RunState.SUCCESS);
969
- expectStringIncludes(
970
- streamString.getString(),
971
- "Unused arg: command2",
972
- );
907
+ expectStringIncludes(streamString.getString(), "Unused arg: command2");
973
908
  expect(hasRun).toBeTrue();
974
909
  });
975
910
 
976
911
  test("Ensure global modifier and global run priority order", async () => {
977
912
  const hasRun: string[] = [];
978
- const modifier1Command = getGlobalModifierCommandWithArgument(
979
- "modifier1",
980
- "1",
981
- 2,
982
- {
983
- type: ArgumentValueTypeName.STRING,
984
- },
985
- );
986
- const modifier2Command = getGlobalModifierCommandWithArgument(
987
- "modifier2",
988
- "2",
989
- 1,
990
- {
991
- type: ArgumentValueTypeName.STRING,
992
- },
993
- );
913
+ const modifier1Command = getGlobalModifierCommandWithArgument("modifier1", "1", 2, {
914
+ type: ArgumentValueTypeName.STRING,
915
+ });
916
+ const modifier2Command = getGlobalModifierCommandWithArgument("modifier2", "2", 1, {
917
+ type: ArgumentValueTypeName.STRING,
918
+ });
994
919
  const globalCommand = getGlobalCommandWithShortAlias("global", "g", {
995
920
  type: ArgumentValueTypeName.STRING,
996
921
  });
@@ -1071,41 +996,52 @@ describe("runner tests", () => {
1071
996
 
1072
997
  test("Sub-Command run with complex options and explicit arrays", async () => {
1073
998
  let hasRun = false;
1074
- const options = [{
1075
- name: "alpha",
1076
- shortAlias: "a",
1077
- type: ComplexValueTypeName.COMPLEX,
1078
- isArray: true,
1079
- properties: [{
1080
- name: "beta",
1081
- shortAlias: "b",
999
+ const options = [
1000
+ {
1001
+ name: "alpha",
1002
+ shortAlias: "a",
1082
1003
  type: ComplexValueTypeName.COMPLEX,
1083
1004
  isArray: true,
1084
- properties: [{
1085
- name: "gamma",
1086
- shortAlias: "g",
1087
- type: ArgumentValueTypeName.STRING,
1088
- }, {
1089
- name: "delta",
1090
- shortAlias: "d",
1091
- type: ArgumentValueTypeName.NUMBER,
1092
- isArray: true,
1093
- }],
1094
- }],
1095
- }, {
1096
- name: "epsilon",
1097
- shortAlias: "e",
1098
- type: ComplexValueTypeName.COMPLEX,
1099
- properties: [{
1100
- name: "gamma",
1101
- shortAlias: "g",
1102
- type: ArgumentValueTypeName.STRING,
1103
- }, {
1104
- name: "delta",
1105
- shortAlias: "d",
1106
- type: ArgumentValueTypeName.NUMBER,
1107
- }],
1108
- }];
1005
+ properties: [
1006
+ {
1007
+ name: "beta",
1008
+ shortAlias: "b",
1009
+ type: ComplexValueTypeName.COMPLEX,
1010
+ isArray: true,
1011
+ properties: [
1012
+ {
1013
+ name: "gamma",
1014
+ shortAlias: "g",
1015
+ type: ArgumentValueTypeName.STRING,
1016
+ },
1017
+ {
1018
+ name: "delta",
1019
+ shortAlias: "d",
1020
+ type: ArgumentValueTypeName.NUMBER,
1021
+ isArray: true,
1022
+ },
1023
+ ],
1024
+ },
1025
+ ],
1026
+ },
1027
+ {
1028
+ name: "epsilon",
1029
+ shortAlias: "e",
1030
+ type: ComplexValueTypeName.COMPLEX,
1031
+ properties: [
1032
+ {
1033
+ name: "gamma",
1034
+ shortAlias: "g",
1035
+ type: ArgumentValueTypeName.STRING,
1036
+ },
1037
+ {
1038
+ name: "delta",
1039
+ shortAlias: "d",
1040
+ type: ArgumentValueTypeName.NUMBER,
1041
+ },
1042
+ ],
1043
+ },
1044
+ ];
1109
1045
  const command = getSubCommand("command", options, []);
1110
1046
 
1111
1047
  command.execute = (): Promise<void> => {
@@ -1138,50 +1074,64 @@ describe("runner tests", () => {
1138
1074
 
1139
1075
  test("Sub-Command run with complex options and positionals", async () => {
1140
1076
  let hasRun = false;
1141
- const options = [{
1142
- name: "alpha",
1143
- shortAlias: "a",
1144
- type: ComplexValueTypeName.COMPLEX,
1145
- isArray: true,
1146
- properties: [{
1147
- name: "beta",
1148
- shortAlias: "b",
1077
+ const options = [
1078
+ {
1079
+ name: "alpha",
1080
+ shortAlias: "a",
1149
1081
  type: ComplexValueTypeName.COMPLEX,
1150
1082
  isArray: true,
1151
- properties: [{
1152
- name: "gamma",
1153
- shortAlias: "g",
1154
- type: ArgumentValueTypeName.STRING,
1155
- }, {
1156
- name: "delta",
1157
- shortAlias: "d",
1158
- type: ArgumentValueTypeName.NUMBER,
1159
- isArray: true,
1160
- }],
1161
- }],
1162
- }, {
1163
- name: "epsilon",
1164
- shortAlias: "e",
1165
- type: ComplexValueTypeName.COMPLEX,
1166
- properties: [{
1167
- name: "gamma",
1168
- shortAlias: "g",
1083
+ properties: [
1084
+ {
1085
+ name: "beta",
1086
+ shortAlias: "b",
1087
+ type: ComplexValueTypeName.COMPLEX,
1088
+ isArray: true,
1089
+ properties: [
1090
+ {
1091
+ name: "gamma",
1092
+ shortAlias: "g",
1093
+ type: ArgumentValueTypeName.STRING,
1094
+ },
1095
+ {
1096
+ name: "delta",
1097
+ shortAlias: "d",
1098
+ type: ArgumentValueTypeName.NUMBER,
1099
+ isArray: true,
1100
+ },
1101
+ ],
1102
+ },
1103
+ ],
1104
+ },
1105
+ {
1106
+ name: "epsilon",
1107
+ shortAlias: "e",
1108
+ type: ComplexValueTypeName.COMPLEX,
1109
+ properties: [
1110
+ {
1111
+ name: "gamma",
1112
+ shortAlias: "g",
1113
+ type: ArgumentValueTypeName.STRING,
1114
+ },
1115
+ {
1116
+ name: "delta",
1117
+ shortAlias: "d",
1118
+ type: ArgumentValueTypeName.NUMBER,
1119
+ },
1120
+ ],
1121
+ },
1122
+ ];
1123
+ const positionals = [
1124
+ {
1125
+ name: "foo",
1169
1126
  type: ArgumentValueTypeName.STRING,
1170
- }, {
1171
- name: "delta",
1172
- shortAlias: "d",
1173
- type: ArgumentValueTypeName.NUMBER,
1174
- }],
1175
- }];
1176
- const positionals = [{
1177
- name: "foo",
1178
- type: ArgumentValueTypeName.STRING,
1179
- }, {
1180
- name: "bar",
1181
- type: ArgumentValueTypeName.INTEGER,
1182
- isVarargMultiple: true,
1183
- isVarargOptional: true,
1184
- }];
1127
+ },
1128
+ {
1129
+ name: "bar",
1130
+ type: ArgumentValueTypeName.INTEGER,
1131
+ isVarargMultiple: true,
1132
+ isVarargOptional: true,
1133
+ },
1134
+ ];
1185
1135
 
1186
1136
  const command = getSubCommand("command", options, positionals);
1187
1137
 
@@ -1308,10 +1258,7 @@ describe("runner tests", () => {
1308
1258
  return Promise.resolve();
1309
1259
  };
1310
1260
 
1311
- const commandRegistry = new DefaultCommandRegistry([
1312
- modifierCommand,
1313
- globalCommand,
1314
- ]);
1261
+ const commandRegistry = new DefaultCommandRegistry([modifierCommand, globalCommand]);
1315
1262
  const runResult = await run(
1316
1263
  ["-g", "bar"],
1317
1264
  commandRegistry,
@@ -1320,9 +1267,12 @@ describe("runner tests", () => {
1320
1267
  90,
1321
1268
  new Map<string, ArgumentValues | ArgumentSingleValueType>([
1322
1269
  ["modifier", "foo"],
1323
- ["irrelevant", {
1324
- name: "value",
1325
- }],
1270
+ [
1271
+ "irrelevant",
1272
+ {
1273
+ name: "value",
1274
+ },
1275
+ ],
1326
1276
  ]),
1327
1277
  ),
1328
1278
  getContext(new WritableStreamString()),