@flowscripter/dynamic-cli-framework 1.2.2 → 1.3.1
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.
- package/README/core-service-providers.md +2 -2
- package/README/development.md +3 -6
- package/README/implementation-details.md +17 -17
- package/README/key-concepts.md +17 -17
- package/README.md +4 -4
- package/bun.lock +0 -2
- package/index.ts +22 -30
- package/package.json +19 -19
- package/src/api/argument/Argument.ts +1 -1
- package/src/api/argument/ArgumentValueTypes.ts +3 -10
- package/src/api/argument/ComplexOption.ts +5 -9
- package/src/api/command/GlobalCommand.ts +1 -4
- package/src/api/service/core/ArgumentPrompterService.ts +1 -3
- package/src/api/service/core/AsciiBannerGeneratorService.ts +1 -4
- package/src/api/service/core/CompletionService.ts +2 -6
- package/src/api/service/core/ImagePrinterService.ts +1 -2
- package/src/api/service/core/KeyValueService.ts +1 -2
- package/src/api/service/core/PrettyPrinterService.ts +1 -4
- package/src/api/service/core/PrinterService.ts +8 -9
- package/src/api/service/core/PrompterService.ts +4 -11
- package/src/api/service/core/ShutdownService.ts +1 -2
- package/src/api/service/core/SyntaxHighlighterService.ts +1 -5
- package/src/api/service/core/Table.ts +7 -25
- package/src/api/service/core/TreePrinterService.ts +1 -2
- package/src/cli/BaseCLI.ts +17 -47
- package/src/cli/DefaultRuntimeCLI.ts +1 -4
- package/src/command/CompletionCommand.ts +19 -45
- package/src/command/MultiCommandCliHelpCommand.ts +45 -92
- package/src/command/SingleCommandCliHelpCommand.ts +17 -28
- package/src/command/UsageCommand.ts +6 -12
- package/src/command/VersionCommand.ts +2 -6
- package/src/launcher.ts +4 -2
- package/src/runtime/DefaultContext.ts +2 -5
- package/src/runtime/argument/ArgumentTypeGuards.ts +1 -3
- package/src/runtime/command/CommandTypeGuards.ts +5 -14
- package/src/runtime/command/CommandValidator.ts +56 -118
- package/src/runtime/parser.ts +13 -17
- package/src/runtime/registry/CommandRegistry.ts +2 -7
- package/src/runtime/registry/DefaultCommandRegistry.ts +32 -84
- package/src/runtime/registry/DefaultServiceProviderRegistry.ts +3 -9
- package/src/runtime/runner.ts +103 -142
- package/src/runtime/scanner.ts +28 -46
- package/src/runtime/values/ValuePopulationResult.ts +1 -2
- package/src/runtime/values/argumentValueMerge.ts +16 -28
- package/src/runtime/values/argumentValueValidation.ts +21 -67
- package/src/runtime/values/globalCommandValuePopulation.ts +9 -18
- package/src/runtime/values/subCommandValuePopulation.ts +42 -65
- package/src/service/argumentPrompter/ArgumentPrompterServiceProvider.ts +3 -10
- package/src/service/argumentPrompter/DefaultArgumentPrompterService.ts +22 -59
- package/src/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.ts +5 -14
- package/src/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.ts +59 -77
- package/src/service/banner/BannerServiceProvider.ts +13 -35
- package/src/service/banner/command/NoBannerCommand.ts +2 -8
- package/src/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.ts +5 -10
- package/src/service/completion/CompletionServiceProvider.ts +20 -48
- package/src/service/completion/DefaultCompletionService.ts +17 -56
- package/src/service/completion/shell/ShellHandler.ts +1 -3
- package/src/service/completion/shell/fish.ts +1 -1
- package/src/service/completion/shell/powershell.ts +2 -12
- package/src/service/completion/shell/zsh.ts +1 -1
- package/src/service/configuration/ConfigurationServiceProvider.ts +40 -133
- package/src/service/configuration/DefaultKeyValueService.ts +6 -20
- package/src/service/configuration/DefaultSecretService.ts +10 -14
- package/src/service/configuration/command/ConfigCommand.ts +1 -4
- package/src/service/configuration/command/DumpConfigCommand.ts +9 -21
- package/src/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.ts +5 -14
- package/src/service/dataDumpGenerator/DefaultDataDumpGeneratorService.ts +5 -12
- package/src/service/imagePrinter/DefaultImagePrinterService.ts +1 -5
- package/src/service/imagePrinter/ImagePrinterServiceProvider.ts +1 -4
- package/src/service/prettyPrinter/DefaultPrettyPrinterService.ts +4 -12
- package/src/service/prettyPrinter/PrettyPrinterServiceProvider.ts +3 -10
- package/src/service/printer/DefaultPrinterService.ts +20 -83
- package/src/service/printer/PrinterServiceProvider.ts +3 -11
- package/src/service/printer/command/DarkModeCommand.ts +3 -10
- package/src/service/printer/command/LogLevelCommand.ts +7 -26
- package/src/service/printer/command/NoColorCommand.ts +3 -10
- package/src/service/printer/command/NoHyperlinksCommand.ts +3 -10
- package/src/service/printer/terminal/Progress.ts +99 -90
- package/src/service/printer/terminal/Spinner.ts +7 -26
- package/src/service/prompter/DefaultPrompterService.ts +2 -6
- package/src/service/prompter/PrompterServiceProvider.ts +3 -11
- package/src/service/prompter/command/NoPromptCommand.ts +3 -10
- package/src/service/prompter/prompt/PromptContext.ts +5 -18
- package/src/service/prompter/prompt/promptMultiSelect.ts +6 -21
- package/src/service/prompter/prompt/promptOpenUrl.ts +7 -22
- package/src/service/prompter/prompt/promptSingleSelect.ts +6 -23
- package/src/service/prompter/prompt/promptText.ts +10 -27
- package/src/service/prompter/prompt/promptToggle.ts +8 -8
- package/src/service/shutdown/ShutdownServiceProvider.ts +3 -10
- package/src/service/syntaxHighlighter/DefaultSyntaxHighlighterService.ts +13 -26
- package/src/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.ts +8 -21
- package/src/service/tableGenerator/DefaultTableGeneratorService.ts +44 -68
- package/src/service/tableGenerator/TableGeneratorServiceProvider.ts +7 -16
- package/src/service/treePrinter/DefaultTreePrinterService.ts +2 -7
- package/src/service/treePrinter/TreePrinterServiceProvider.ts +4 -12
- package/src/terminal/ImageRenderer.ts +35 -54
- package/src/terminal/PngDecoder.ts +10 -19
- package/src/terminal/TtyStyler.ts +11 -9
- package/src/terminal/TtyTerminal.ts +2 -10
- package/src/terminal/supportsHyperlinks.ts +4 -10
- package/src/util/configHelper.ts +3 -10
- package/src/util/envVarHelper.ts +50 -88
- package/src/util/helpHelper.ts +123 -193
- package/src/util/logger.ts +12 -42
- package/src/util/runnerHelper.ts +20 -61
- package/tests/cli/BaseCLI.test.ts +23 -80
- package/tests/command/CompletionCommand.test.ts +1 -6
- package/tests/command/MultiCommandCliHelpCommand.test.ts +51 -205
- package/tests/command/SingleCommandCliHelpCommand.test.ts +21 -103
- package/tests/command/UsageCommand.test.ts +4 -10
- package/tests/fixtures/Command.ts +87 -68
- package/tests/fixtures/CommandRegistry.ts +1 -3
- package/tests/fixtures/Context.ts +3 -11
- package/tests/fixtures/ServiceProviderRegistry.ts +1 -1
- package/tests/fixtures/prettierPluginFoo.ts +1 -1
- package/tests/fixtures/util.ts +2 -8
- package/tests/runtime/argument/ArgumentTypeGuards.test.ts +1 -3
- package/tests/runtime/command/CommandValidator.test.ts +881 -604
- package/tests/runtime/parser.test.ts +222 -246
- package/tests/runtime/registry/DefaultCommandRegistry.test.ts +15 -37
- package/tests/runtime/registry/DefaultServiceProviderRegistry.test.ts +2 -8
- package/tests/runtime/runner.test.ts +231 -281
- package/tests/runtime/scanner.test.ts +277 -475
- package/tests/runtime/values/argumentValueMerge.test.ts +133 -81
- package/tests/runtime/values/argumentValueValidation.test.ts +444 -588
- package/tests/runtime/values/globalCommandValuePopulation.test.ts +71 -253
- package/tests/runtime/values/subCommandValuePopulation.test.ts +1342 -1570
- package/tests/service/argumentPrompter/ArgumentPrompterServiceProvider.test.ts +3 -12
- package/tests/service/argumentPrompter/DefaultArgumentPrompterService.test.ts +36 -45
- package/tests/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.test.ts +2 -8
- package/tests/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.test.ts +40 -62
- package/tests/service/banner/BannerServiceProvider.test.ts +5 -18
- package/tests/service/banner/command/NoBannerCommand.test.ts +1 -4
- package/tests/service/completion/CompletionServiceProvider.test.ts +145 -214
- package/tests/service/completion/DefaultCompletionService.test.ts +17 -79
- package/tests/service/completion/shell/fish.test.ts +1 -3
- package/tests/service/configuration/ConfigurationServiceProvider.test.ts +26 -75
- package/tests/service/configuration/DefaultKeyValueService.test.ts +9 -21
- package/tests/service/configuration/DefaultSecretService.test.ts +7 -15
- package/tests/service/configuration/command/DumpConfigCommand.test.ts +4 -13
- package/tests/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.test.ts +6 -12
- package/tests/service/dataDumpGenerator/DefaultDataDumpGeneratorService.test.ts +1 -10
- package/tests/service/imagePrinter/DefaultImagePrinterService.test.ts +5 -70
- package/tests/service/prettyPrinter/DefaultPrettyPrinterService.test.ts +4 -11
- package/tests/service/prettyPrinter/PrettyPrinterServiceProvider.test.ts +2 -6
- package/tests/service/printer/DefaultPrinterService.test.ts +57 -255
- package/tests/service/printer/PrinterServiceProvider.test.ts +2 -8
- package/tests/service/printer/command/DarkModeCommand.test.ts +4 -12
- package/tests/service/printer/command/LogLevelCommand.test.ts +4 -17
- package/tests/service/printer/command/NoColorCommand.test.ts +4 -12
- package/tests/service/printer/command/NoHyperlinksCommand.test.ts +7 -21
- package/tests/service/printer/terminal/Progress.test.ts +1 -3
- package/tests/service/printer/terminal/Spinner.test.ts +2 -8
- package/tests/service/prompter/DefaultPrompterService.test.ts +52 -69
- package/tests/service/prompter/PrompterServiceProvider.test.ts +2 -8
- package/tests/service/shutdown/ShutdownServiceProvider.test.ts +1 -3
- package/tests/service/syntaxHighlighter/DefaultSyntaxHighlighterService.test.ts +13 -99
- package/tests/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.test.ts +2 -7
- package/tests/service/tableGenerator/DefaultTableGeneratorService.test.ts +12 -33
- package/tests/service/tableGenerator/TableGeneratorServiceProvider.test.ts +2 -2
- package/tests/service/treePrinter/DefaultTreePrinterService.test.ts +4 -6
- package/tests/service/treePrinter/TreePrinterServiceProvider.test.ts +4 -8
- package/tests/terminal/ImageRenderer.test.ts +2 -11
- package/tests/terminal/PngDecoder.test.ts +2 -6
- package/tests/util/configHelper.test.ts +55 -137
- 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
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
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
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
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
|
-
(
|
|
390
|
-
PopulatedArgumentValues
|
|
391
|
-
|
|
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
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
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
|
-
(
|
|
443
|
-
|
|
444
|
-
PopulatedArgumentValues
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
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[
|
|
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
|
-
|
|
484
|
-
|
|
485
|
-
|
|
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
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
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
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
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
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
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
|
-
|
|
673
|
-
|
|
674
|
-
|
|
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
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
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
|
-
|
|
720
|
-
name: "
|
|
721
|
-
shortAlias: "
|
|
722
|
-
type:
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
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
|
],
|