@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
@@ -21,11 +21,7 @@ import {
21
21
  import type SubCommand from "../../src/api/command/SubCommand.ts";
22
22
 
23
23
  function expectParseResult(result: ParseResult, expected: ParseResult) {
24
- expect(
25
- result.populatedArgumentValues,
26
- ).toEqual(
27
- expected.populatedArgumentValues!,
28
- );
24
+ expect(result.populatedArgumentValues).toEqual(expected.populatedArgumentValues!);
29
25
  expect(result.unusedArgs).toEqual(expected.unusedArgs);
30
26
  expect(result.invalidArguments).toEqual(expected.invalidArguments);
31
27
  }
@@ -111,12 +107,7 @@ describe("parser tests", () => {
111
107
  });
112
108
 
113
109
  test("Arguments parsed for global modifier command", () => {
114
- const globalModifierCommand = getGlobalModifierCommand(
115
- "modifierCommand",
116
- "m",
117
- true,
118
- true,
119
- );
110
+ const globalModifierCommand = getGlobalModifierCommand("modifierCommand", "m", true, true);
120
111
 
121
112
  const parseResult = parseGlobalCommandClause({
122
113
  command: globalModifierCommand,
@@ -151,13 +142,16 @@ describe("parser tests", () => {
151
142
  test("All arguments provided in config", () => {
152
143
  const subCommand = getSubCommandWithOptionAndPositional();
153
144
 
154
- const parseResult = parseSubCommandClause({
155
- command: subCommand,
156
- potentialArgs: [],
157
- }, {
158
- goo: "g",
159
- foo: "bar",
160
- });
145
+ const parseResult = parseSubCommandClause(
146
+ {
147
+ command: subCommand,
148
+ potentialArgs: [],
149
+ },
150
+ {
151
+ goo: "g",
152
+ foo: "bar",
153
+ },
154
+ );
161
155
  expectParseResult(parseResult, {
162
156
  command: subCommand,
163
157
  populatedArgumentValues: {
@@ -172,12 +166,15 @@ describe("parser tests", () => {
172
166
  test("Some arguments provided in config", () => {
173
167
  const subCommand = getSubCommandWithOptionAndPositional();
174
168
 
175
- let parseResult = parseSubCommandClause({
176
- command: subCommand,
177
- potentialArgs: ["--goo", "g"],
178
- }, {
179
- foo: "bar",
180
- });
169
+ let parseResult = parseSubCommandClause(
170
+ {
171
+ command: subCommand,
172
+ potentialArgs: ["--goo", "g"],
173
+ },
174
+ {
175
+ foo: "bar",
176
+ },
177
+ );
181
178
  expectParseResult(parseResult, {
182
179
  command: subCommand,
183
180
  populatedArgumentValues: {
@@ -188,12 +185,15 @@ describe("parser tests", () => {
188
185
  invalidArguments: [],
189
186
  });
190
187
 
191
- parseResult = parseSubCommandClause({
192
- command: subCommand,
193
- potentialArgs: ["bar"],
194
- }, {
195
- goo: "g",
196
- });
188
+ parseResult = parseSubCommandClause(
189
+ {
190
+ command: subCommand,
191
+ potentialArgs: ["bar"],
192
+ },
193
+ {
194
+ goo: "g",
195
+ },
196
+ );
197
197
  expectParseResult(parseResult, {
198
198
  command: subCommand,
199
199
  populatedArgumentValues: {
@@ -208,13 +208,16 @@ describe("parser tests", () => {
208
208
  test("Extra config provided", () => {
209
209
  const subCommand = getSubCommandWithOptionAndPositional();
210
210
 
211
- const parseResult = parseSubCommandClause({
212
- command: subCommand,
213
- potentialArgs: ["--goo", "g"],
214
- }, {
215
- foo: "bar",
216
- yee: "ha",
217
- });
211
+ const parseResult = parseSubCommandClause(
212
+ {
213
+ command: subCommand,
214
+ potentialArgs: ["--goo", "g"],
215
+ },
216
+ {
217
+ foo: "bar",
218
+ yee: "ha",
219
+ },
220
+ );
218
221
  expectParseResult(parseResult, {
219
222
  command: subCommand,
220
223
  populatedArgumentValues: {
@@ -249,16 +252,11 @@ describe("parser tests", () => {
249
252
  {
250
253
  beta: [
251
254
  {
252
- delta: [
253
- 1,
254
- ],
255
+ delta: [1],
255
256
  gamma: "foo1",
256
257
  },
257
258
  {
258
- delta: [
259
- 3,
260
- 2,
261
- ],
259
+ delta: [3, 2],
262
260
  gamma: "foo2",
263
261
  },
264
262
  ],
@@ -295,26 +293,21 @@ describe("parser tests", () => {
295
293
  alpha: [
296
294
  {
297
295
  beta: {
298
- delta: [
299
- "1",
300
- ],
296
+ delta: ["1"],
301
297
  gamma: "foo1",
302
298
  },
303
299
  },
304
300
  ],
305
301
  },
306
- unusedArgs: [
307
- "-a.b.d=2",
308
- "-a.b.d=3",
309
- "-e.g=bar",
310
- "-e.d=1",
302
+ unusedArgs: ["-a.b.d=2", "-a.b.d=3", "-e.g=bar", "-e.d=1"],
303
+ invalidArguments: [
304
+ {
305
+ argument: ((subCommand.options[0] as ComplexOption).properties[0] as ComplexOption)
306
+ .properties[0],
307
+ reason: InvalidArgumentReason.ILLEGAL_MULTIPLE_VALUES,
308
+ name: "gamma",
309
+ },
311
310
  ],
312
- invalidArguments: [{
313
- argument: ((subCommand.options[0] as ComplexOption)
314
- .properties[0] as ComplexOption).properties[0],
315
- reason: InvalidArgumentReason.ILLEGAL_MULTIPLE_VALUES,
316
- name: "gamma",
317
- }],
318
311
  });
319
312
 
320
313
  parseResult = parseSubCommandClause({
@@ -335,11 +328,7 @@ describe("parser tests", () => {
335
328
  alpha: [
336
329
  {
337
330
  beta: {
338
- delta: [
339
- "1",
340
- "2",
341
- "3",
342
- ],
331
+ delta: ["1", "2", "3"],
343
332
  gamma: "foo1",
344
333
  },
345
334
  },
@@ -365,13 +354,7 @@ describe("parser tests", () => {
365
354
 
366
355
  let parseResult = parseSubCommandClause({
367
356
  command: subCommand,
368
- potentialArgs: [
369
- "-e.g=bar",
370
- "-e.d=1",
371
- "-a.b[1].g=foo2",
372
- "-a.b[1].d[1]=2",
373
- "-a.b[1].d[0]=3",
374
- ],
357
+ potentialArgs: ["-e.g=bar", "-e.d=1", "-a.b[1].g=foo2", "-a.b[1].d[1]=2", "-a.b[1].d[0]=3"],
375
358
  });
376
359
 
377
360
  let argumentValues: PopulatedArgumentValues = {
@@ -386,9 +369,10 @@ describe("parser tests", () => {
386
369
  },
387
370
  };
388
371
 
389
- ((argumentValues.alpha as Array<PopulatedArgumentValues>)[0]!.beta as Array<
390
- PopulatedArgumentValues
391
- >)[1] = {
372
+ (
373
+ (argumentValues.alpha as Array<PopulatedArgumentValues>)[0]!
374
+ .beta as Array<PopulatedArgumentValues>
375
+ )[1] = {
392
376
  gamma: "foo2",
393
377
  delta: ["3", "2"], // these are still stored as strings as the validation (and type conversion) failed fast
394
378
  };
@@ -420,18 +404,20 @@ describe("parser tests", () => {
420
404
  });
421
405
 
422
406
  argumentValues = {
423
- alpha: [{
424
- beta: [
425
- {
426
- gamma: "foo1",
427
- delta: ["1"], // this is still stored as strings as the validation (and type conversion) failed fast
428
- },
429
- {
430
- gamma: "foo2",
431
- delta: [],
432
- },
433
- ],
434
- }],
407
+ alpha: [
408
+ {
409
+ beta: [
410
+ {
411
+ gamma: "foo1",
412
+ delta: ["1"], // this is still stored as strings as the validation (and type conversion) failed fast
413
+ },
414
+ {
415
+ gamma: "foo2",
416
+ delta: [],
417
+ },
418
+ ],
419
+ },
420
+ ],
435
421
  epsilon: {
436
422
  gamma: "bar",
437
423
  delta: 1,
@@ -439,14 +425,18 @@ describe("parser tests", () => {
439
425
  };
440
426
 
441
427
  // these are still stored as strings as the validation (and type conversion) failed fast
442
- (((argumentValues.alpha as Array<PopulatedArgumentValues>)[0]!
443
- .beta as Array<
444
- PopulatedArgumentValues
445
- >)[1]!.delta as Array<ArgumentValueType>)[0] = "0";
446
- (((argumentValues.alpha as Array<PopulatedArgumentValues>)[0]!
447
- .beta as Array<
448
- PopulatedArgumentValues
449
- >)[1]!.delta as Array<ArgumentValueType>)[2] = "2";
428
+ (
429
+ (
430
+ (argumentValues.alpha as Array<PopulatedArgumentValues>)[0]!
431
+ .beta as Array<PopulatedArgumentValues>
432
+ )[1]!.delta as Array<ArgumentValueType>
433
+ )[0] = "0";
434
+ (
435
+ (
436
+ (argumentValues.alpha as Array<PopulatedArgumentValues>)[0]!
437
+ .beta as Array<PopulatedArgumentValues>
438
+ )[1]!.delta as Array<ArgumentValueType>
439
+ )[2] = "2";
450
440
 
451
441
  expectParseResult(parseResult, {
452
442
  command: subCommand,
@@ -454,8 +444,8 @@ describe("parser tests", () => {
454
444
  unusedArgs: [],
455
445
  invalidArguments: [
456
446
  {
457
- argument: ((subCommand.options[0] as ComplexOption)
458
- .properties[0] as ComplexOption).properties[1],
447
+ argument: ((subCommand.options[0] as ComplexOption).properties[0] as ComplexOption)
448
+ .properties[1],
459
449
  name: "alpha[0].beta[1].delta[1]",
460
450
  reason: InvalidArgumentReason.ILLEGAL_SPARSE_ARRAY,
461
451
  },
@@ -468,23 +458,19 @@ describe("parser tests", () => {
468
458
 
469
459
  const parseResult = parseSubCommandClause({
470
460
  command: subCommand,
471
- potentialArgs: [
472
- "-a.b.g=foo1",
473
- "-a.b.d=1",
474
- "-a.b.d=2",
475
- "-a.b.d=3",
476
- "-e.d=1",
477
- ],
461
+ potentialArgs: ["-a.b.g=foo1", "-a.b.d=1", "-a.b.d=2", "-a.b.d=3", "-e.d=1"],
478
462
  });
479
463
  expectParseResult(parseResult, {
480
464
  command: subCommand,
481
465
  populatedArgumentValues: {
482
- alpha: [{
483
- beta: {
484
- gamma: "foo1",
485
- delta: [1, 2, 3],
466
+ alpha: [
467
+ {
468
+ beta: {
469
+ gamma: "foo1",
470
+ delta: [1, 2, 3],
471
+ },
486
472
  },
487
- }],
473
+ ],
488
474
  epsilon: {
489
475
  delta: "1",
490
476
  },
@@ -503,21 +489,24 @@ describe("parser tests", () => {
503
489
  test("Arguments parsed for sub-command with complex options and some values provided by config", () => {
504
490
  const subCommand = getSubCommandWithComplexOptions(false, true);
505
491
 
506
- const parseResult = parseSubCommandClause({
507
- command: subCommand,
508
- potentialArgs: [
509
- "-a.b[1].g=foo2",
510
- "--alpha.beta[0].gamma=foo1",
511
- "-a.b[1].d[1]=2",
512
- "-a.b[0].d=1",
513
- "-a.b[1].d[0]=3",
514
- ],
515
- }, {
516
- epsilon: {
517
- gamma: "bar",
518
- delta: 1,
492
+ const parseResult = parseSubCommandClause(
493
+ {
494
+ command: subCommand,
495
+ potentialArgs: [
496
+ "-a.b[1].g=foo2",
497
+ "--alpha.beta[0].gamma=foo1",
498
+ "-a.b[1].d[1]=2",
499
+ "-a.b[0].d=1",
500
+ "-a.b[1].d[0]=3",
501
+ ],
519
502
  },
520
- });
503
+ {
504
+ epsilon: {
505
+ gamma: "bar",
506
+ delta: 1,
507
+ },
508
+ },
509
+ );
521
510
  expectParseResult(parseResult, {
522
511
  command: subCommand,
523
512
  populatedArgumentValues: {
@@ -525,16 +514,11 @@ describe("parser tests", () => {
525
514
  {
526
515
  beta: [
527
516
  {
528
- delta: [
529
- 1,
530
- ],
517
+ delta: [1],
531
518
  gamma: "foo1",
532
519
  },
533
520
  {
534
- delta: [
535
- 3,
536
- 2,
537
- ],
521
+ delta: [3, 2],
538
522
  gamma: "foo2",
539
523
  },
540
524
  ],
@@ -553,23 +537,26 @@ describe("parser tests", () => {
553
537
  test("Arguments parsed for sub-command with complex options and some values provided by config but overridden", () => {
554
538
  const subCommand = getSubCommandWithComplexOptions(false, true);
555
539
 
556
- const parseResult = parseSubCommandClause({
557
- command: subCommand,
558
- potentialArgs: [
559
- "-e.g=bar2",
560
- "-e.d=2",
561
- "-a.b[1].g=foo2",
562
- "--alpha.beta[0].gamma=foo1",
563
- "-a.b[1].d[1]=2",
564
- "-a.b[0].d=1",
565
- "-a.b[1].d[0]=3",
566
- ],
567
- }, {
568
- epsilon: {
569
- gamma: "bar",
570
- delta: 1,
540
+ const parseResult = parseSubCommandClause(
541
+ {
542
+ command: subCommand,
543
+ potentialArgs: [
544
+ "-e.g=bar2",
545
+ "-e.d=2",
546
+ "-a.b[1].g=foo2",
547
+ "--alpha.beta[0].gamma=foo1",
548
+ "-a.b[1].d[1]=2",
549
+ "-a.b[0].d=1",
550
+ "-a.b[1].d[0]=3",
551
+ ],
571
552
  },
572
- });
553
+ {
554
+ epsilon: {
555
+ gamma: "bar",
556
+ delta: 1,
557
+ },
558
+ },
559
+ );
573
560
  expectParseResult(parseResult, {
574
561
  command: subCommand,
575
562
  populatedArgumentValues: {
@@ -577,16 +564,11 @@ describe("parser tests", () => {
577
564
  {
578
565
  beta: [
579
566
  {
580
- delta: [
581
- 1,
582
- ],
567
+ delta: [1],
583
568
  gamma: "foo1",
584
569
  },
585
570
  {
586
- delta: [
587
- 3,
588
- 2,
589
- ],
571
+ delta: [3, 2],
590
572
  gamma: "foo2",
591
573
  },
592
574
  ],
@@ -605,34 +587,32 @@ describe("parser tests", () => {
605
587
  test("Arguments parsed for sub-command with complex options and all values provided by config", () => {
606
588
  const subCommand = getSubCommandWithComplexOptions(false, true);
607
589
 
608
- const parseResult = parseSubCommandClause({
609
- command: subCommand,
610
- potentialArgs: [],
611
- }, {
612
- alpha: [
613
- {
614
- beta: [
615
- {
616
- delta: [
617
- 1,
618
- ],
619
- gamma: "foo1",
620
- },
621
- {
622
- delta: [
623
- 3,
624
- 2,
625
- ],
626
- gamma: "foo2",
627
- },
628
- ],
590
+ const parseResult = parseSubCommandClause(
591
+ {
592
+ command: subCommand,
593
+ potentialArgs: [],
594
+ },
595
+ {
596
+ alpha: [
597
+ {
598
+ beta: [
599
+ {
600
+ delta: [1],
601
+ gamma: "foo1",
602
+ },
603
+ {
604
+ delta: [3, 2],
605
+ gamma: "foo2",
606
+ },
607
+ ],
608
+ },
609
+ ],
610
+ epsilon: {
611
+ gamma: "bar",
612
+ delta: 1,
629
613
  },
630
- ],
631
- epsilon: {
632
- gamma: "bar",
633
- delta: 1,
634
614
  },
635
- });
615
+ );
636
616
  expectParseResult(parseResult, {
637
617
  command: subCommand,
638
618
  populatedArgumentValues: {
@@ -640,16 +620,11 @@ describe("parser tests", () => {
640
620
  {
641
621
  beta: [
642
622
  {
643
- delta: [
644
- 1,
645
- ],
623
+ delta: [1],
646
624
  gamma: "foo1",
647
625
  },
648
626
  {
649
- delta: [
650
- 3,
651
- 2,
652
- ],
627
+ delta: [3, 2],
653
628
  gamma: "foo2",
654
629
  },
655
630
  ],
@@ -668,64 +643,70 @@ describe("parser tests", () => {
668
643
  test("Arguments parsed for sub-command with complex options and all values provided by default value", () => {
669
644
  const subCommand: SubCommand = {
670
645
  name: "subCommand",
671
- options: [{
672
- name: "alpha",
673
- shortAlias: "a",
674
- type: ComplexValueTypeName.COMPLEX,
675
- isArray: true,
676
- defaultValue: [
677
- {
678
- beta: [
679
- {
680
- delta: [
681
- 1,
682
- ],
683
- gamma: "foo1",
684
- },
685
- {
686
- delta: [
687
- 3,
688
- 2,
689
- ],
690
- gamma: "foo2",
691
- },
692
- ],
693
- },
694
- ],
695
- properties: [{
696
- name: "beta",
697
- shortAlias: "b",
646
+ options: [
647
+ {
648
+ name: "alpha",
649
+ shortAlias: "a",
698
650
  type: ComplexValueTypeName.COMPLEX,
699
651
  isArray: true,
700
- properties: [{
701
- name: "gamma",
702
- shortAlias: "g",
703
- type: ArgumentValueTypeName.STRING,
704
- }, {
705
- name: "delta",
706
- shortAlias: "d",
707
- type: ArgumentValueTypeName.NUMBER,
708
- isArray: true,
709
- }],
710
- }],
711
- }, {
712
- name: "epsilon",
713
- shortAlias: "e",
714
- type: ComplexValueTypeName.COMPLEX,
715
- defaultValue: {
716
- gamma: "bar",
717
- delta: 1,
652
+ defaultValue: [
653
+ {
654
+ beta: [
655
+ {
656
+ delta: [1],
657
+ gamma: "foo1",
658
+ },
659
+ {
660
+ delta: [3, 2],
661
+ gamma: "foo2",
662
+ },
663
+ ],
664
+ },
665
+ ],
666
+ properties: [
667
+ {
668
+ name: "beta",
669
+ shortAlias: "b",
670
+ type: ComplexValueTypeName.COMPLEX,
671
+ isArray: true,
672
+ properties: [
673
+ {
674
+ name: "gamma",
675
+ shortAlias: "g",
676
+ type: ArgumentValueTypeName.STRING,
677
+ },
678
+ {
679
+ name: "delta",
680
+ shortAlias: "d",
681
+ type: ArgumentValueTypeName.NUMBER,
682
+ isArray: true,
683
+ },
684
+ ],
685
+ },
686
+ ],
718
687
  },
719
- properties: [{
720
- name: "gamma",
721
- shortAlias: "g",
722
- type: ArgumentValueTypeName.STRING,
723
- }, {
724
- name: "delta",
725
- shortAlias: "d",
726
- type: ArgumentValueTypeName.NUMBER,
727
- }],
728
- }],
688
+ {
689
+ name: "epsilon",
690
+ shortAlias: "e",
691
+ type: ComplexValueTypeName.COMPLEX,
692
+ defaultValue: {
693
+ gamma: "bar",
694
+ delta: 1,
695
+ },
696
+ properties: [
697
+ {
698
+ name: "gamma",
699
+ shortAlias: "g",
700
+ type: ArgumentValueTypeName.STRING,
701
+ },
702
+ {
703
+ name: "delta",
704
+ shortAlias: "d",
705
+ type: ArgumentValueTypeName.NUMBER,
706
+ },
707
+ ],
708
+ },
709
+ ],
729
710
  positionals: [],
730
711
  execute: async (): Promise<void> => {},
731
712
  };
@@ -741,16 +722,11 @@ describe("parser tests", () => {
741
722
  {
742
723
  beta: [
743
724
  {
744
- delta: [
745
- 1,
746
- ],
725
+ delta: [1],
747
726
  gamma: "foo1",
748
727
  },
749
728
  {
750
- delta: [
751
- 3,
752
- 2,
753
- ],
729
+ delta: [3, 2],
754
730
  gamma: "foo2",
755
731
  },
756
732
  ],