@jakubmazanec/args 2.0.0-next.f9ef3d7 → 2.0.0-unstable.19a45fc
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/build/Arguments.js +2 -0
- package/build/Arguments.js.map +7 -0
- package/build/ArgumentsCommand.js +2 -0
- package/build/ArgumentsCommand.js.map +7 -0
- package/{dist → build}/ArgumentsOptions.d.ts +1 -1
- package/build/ArgumentsOptions.js +2 -0
- package/build/ArgumentsOptions.js.map +7 -0
- package/{dist → build}/ArgumentsParameters.d.ts +10 -20
- package/build/ArgumentsParameters.js +2 -0
- package/build/ArgumentsParameters.js.map +7 -0
- package/build/ArgumentsUnknownOptions.js +2 -0
- package/build/ArgumentsUnknownOptions.js.map +7 -0
- package/build/Argv.js +2 -0
- package/build/Argv.js.map +7 -0
- package/build/CommandConfig.js +2 -0
- package/build/CommandConfig.js.map +7 -0
- package/build/CommandsConfig.js +2 -0
- package/build/CommandsConfig.js.map +7 -0
- package/build/LongOptionName.js +2 -0
- package/build/LongOptionName.js.map +7 -0
- package/build/OptionConfig.js +2 -0
- package/build/OptionConfig.js.map +7 -0
- package/build/OptionsConfig.js +2 -0
- package/build/OptionsConfig.js.map +7 -0
- package/build/ParameterConfig.js +2 -0
- package/build/ParameterConfig.js.map +7 -0
- package/build/ParametersConfig.js +2 -0
- package/build/ParametersConfig.js.map +7 -0
- package/build/ParserConfig.js +2 -0
- package/build/ParserConfig.js.map +7 -0
- package/build/ParsingError.js +9 -0
- package/build/ParsingError.js.map +7 -0
- package/build/ShortOptionName.js +2 -0
- package/build/ShortOptionName.js.map +7 -0
- package/build/ValidationError.js +14 -0
- package/build/ValidationError.js.map +7 -0
- package/build/internals/Checker.js +98 -0
- package/build/internals/Checker.js.map +7 -0
- package/build/internals/CommandScope.js +44 -0
- package/build/internals/CommandScope.js.map +7 -0
- package/build/internals/NormalizedCommandConfig.js +2 -0
- package/build/internals/NormalizedCommandConfig.js.map +7 -0
- package/build/internals/NormalizedCommandsConfig.js +2 -0
- package/build/internals/NormalizedCommandsConfig.js.map +7 -0
- package/build/internals/OptionScope.js +69 -0
- package/build/internals/OptionScope.js.map +7 -0
- package/build/internals/castValue.js +17 -0
- package/build/internals/castValue.js.map +7 -0
- package/build/internals/commandToArguments.js +14 -0
- package/build/internals/commandToArguments.js.map +7 -0
- package/build/internals/createOptionShortNameMap.js +11 -0
- package/build/internals/createOptionShortNameMap.js.map +7 -0
- package/build/internals/expandArguments.js +14 -0
- package/build/internals/expandArguments.js.map +7 -0
- package/build/internals/isCommand.js +6 -0
- package/build/internals/isCommand.js.map +7 -0
- package/build/internals/isFalseString.js +6 -0
- package/build/internals/isFalseString.js.map +7 -0
- package/build/internals/isLongOption.js +6 -0
- package/build/internals/isLongOption.js.map +7 -0
- package/build/internals/isOptionLike.js +6 -0
- package/build/internals/isOptionLike.js.map +7 -0
- package/build/internals/isShortOption.js +6 -0
- package/build/internals/isShortOption.js.map +7 -0
- package/build/internals/isShortOptionsGroup.js +6 -0
- package/build/internals/isShortOptionsGroup.js.map +7 -0
- package/build/internals/isTrueString.js +6 -0
- package/build/internals/isTrueString.js.map +7 -0
- package/build/internals.js +18 -0
- package/build/internals.js.map +7 -0
- package/build/main.js +20 -0
- package/build/main.js.map +7 -0
- package/build/parseArguments.js +236 -0
- package/build/parseArguments.js.map +7 -0
- package/package.json +24 -13
- package/{src → source}/ArgumentsCommand.ts +3 -4
- package/source/ArgumentsOptions.ts +82 -0
- package/source/ArgumentsParameters.ts +149 -0
- package/source/ArgumentsUnknownOptions.ts +5 -0
- package/{src → source}/internals/Checker.ts +6 -6
- package/{src → source}/internals/OptionScope.ts +1 -1
- package/{src → source}/internals/castValue.ts +13 -12
- package/{src → source}/internals/commandToArguments.ts +4 -6
- package/{src → source}/parseArguments.ts +18 -28
- package/dist/Arguments.js +0 -5
- package/dist/Arguments.js.map +0 -1
- package/dist/ArgumentsCommand.js +0 -3
- package/dist/ArgumentsCommand.js.map +0 -1
- package/dist/ArgumentsOptions.js +0 -3
- package/dist/ArgumentsOptions.js.map +0 -1
- package/dist/ArgumentsParameters.js +0 -3
- package/dist/ArgumentsParameters.js.map +0 -1
- package/dist/ArgumentsUnknownOptions.js +0 -3
- package/dist/ArgumentsUnknownOptions.js.map +0 -1
- package/dist/Argv.js +0 -3
- package/dist/Argv.js.map +0 -1
- package/dist/CommandConfig.js +0 -3
- package/dist/CommandConfig.js.map +0 -1
- package/dist/CommandsConfig.js +0 -3
- package/dist/CommandsConfig.js.map +0 -1
- package/dist/LongOptionName.js +0 -3
- package/dist/LongOptionName.js.map +0 -1
- package/dist/OptionConfig.js +0 -3
- package/dist/OptionConfig.js.map +0 -1
- package/dist/OptionsConfig.js +0 -3
- package/dist/OptionsConfig.js.map +0 -1
- package/dist/ParameterConfig.js +0 -3
- package/dist/ParameterConfig.js.map +0 -1
- package/dist/ParametersConfig.js +0 -3
- package/dist/ParametersConfig.js.map +0 -1
- package/dist/ParserConfig.js +0 -3
- package/dist/ParserConfig.js.map +0 -1
- package/dist/ParsingError.js +0 -11
- package/dist/ParsingError.js.map +0 -1
- package/dist/ShortOptionName.js +0 -3
- package/dist/ShortOptionName.js.map +0 -1
- package/dist/ValidationError.js +0 -16
- package/dist/ValidationError.js.map +0 -1
- package/dist/internals/Checker.js +0 -115
- package/dist/internals/Checker.js.map +0 -1
- package/dist/internals/CommandScope.js +0 -48
- package/dist/internals/CommandScope.js.map +0 -1
- package/dist/internals/NormalizedCommandConfig.js +0 -3
- package/dist/internals/NormalizedCommandConfig.js.map +0 -1
- package/dist/internals/NormalizedCommandsConfig.js +0 -3
- package/dist/internals/NormalizedCommandsConfig.js.map +0 -1
- package/dist/internals/OptionScope.js +0 -87
- package/dist/internals/OptionScope.js.map +0 -1
- package/dist/internals/castValue.js +0 -25
- package/dist/internals/castValue.js.map +0 -1
- package/dist/internals/commandToArguments.js +0 -21
- package/dist/internals/commandToArguments.js.map +0 -1
- package/dist/internals/createOptionShortNameMap.js +0 -16
- package/dist/internals/createOptionShortNameMap.js.map +0 -1
- package/dist/internals/expandArguments.js +0 -21
- package/dist/internals/expandArguments.js.map +0 -1
- package/dist/internals/isCommand.js +0 -11
- package/dist/internals/isCommand.js.map +0 -1
- package/dist/internals/isFalseString.js +0 -10
- package/dist/internals/isFalseString.js.map +0 -1
- package/dist/internals/isLongOption.js +0 -11
- package/dist/internals/isLongOption.js.map +0 -1
- package/dist/internals/isOptionLike.js +0 -11
- package/dist/internals/isOptionLike.js.map +0 -1
- package/dist/internals/isShortOption.js +0 -11
- package/dist/internals/isShortOption.js.map +0 -1
- package/dist/internals/isShortOptionsGroup.js +0 -11
- package/dist/internals/isShortOptionsGroup.js.map +0 -1
- package/dist/internals/isTrueString.js +0 -10
- package/dist/internals/isTrueString.js.map +0 -1
- package/dist/internals.js +0 -18
- package/dist/internals.js.map +0 -1
- package/dist/main.js +0 -20
- package/dist/main.js.map +0 -1
- package/dist/parseArguments.js +0 -244
- package/dist/parseArguments.js.map +0 -1
- package/src/ArgumentsOptions.ts +0 -89
- package/src/ArgumentsParameters.ts +0 -158
- package/src/ArgumentsUnknownOptions.ts +0 -6
- /package/{dist → build}/Arguments.d.ts +0 -0
- /package/{dist → build}/ArgumentsCommand.d.ts +0 -0
- /package/{dist → build}/ArgumentsUnknownOptions.d.ts +0 -0
- /package/{dist → build}/Argv.d.ts +0 -0
- /package/{dist → build}/CommandConfig.d.ts +0 -0
- /package/{dist → build}/CommandsConfig.d.ts +0 -0
- /package/{dist → build}/LongOptionName.d.ts +0 -0
- /package/{dist → build}/OptionConfig.d.ts +0 -0
- /package/{dist → build}/OptionsConfig.d.ts +0 -0
- /package/{dist → build}/ParameterConfig.d.ts +0 -0
- /package/{dist → build}/ParametersConfig.d.ts +0 -0
- /package/{dist → build}/ParserConfig.d.ts +0 -0
- /package/{dist → build}/ParsingError.d.ts +0 -0
- /package/{dist → build}/ShortOptionName.d.ts +0 -0
- /package/{dist → build}/ValidationError.d.ts +0 -0
- /package/{dist → build}/internals/Checker.d.ts +0 -0
- /package/{dist → build}/internals/CommandScope.d.ts +0 -0
- /package/{dist → build}/internals/NormalizedCommandConfig.d.ts +0 -0
- /package/{dist → build}/internals/NormalizedCommandsConfig.d.ts +0 -0
- /package/{dist → build}/internals/OptionScope.d.ts +0 -0
- /package/{dist → build}/internals/castValue.d.ts +0 -0
- /package/{dist → build}/internals/commandToArguments.d.ts +0 -0
- /package/{dist → build}/internals/createOptionShortNameMap.d.ts +0 -0
- /package/{dist → build}/internals/expandArguments.d.ts +0 -0
- /package/{dist → build}/internals/isCommand.d.ts +0 -0
- /package/{dist → build}/internals/isFalseString.d.ts +0 -0
- /package/{dist → build}/internals/isLongOption.d.ts +0 -0
- /package/{dist → build}/internals/isOptionLike.d.ts +0 -0
- /package/{dist → build}/internals/isShortOption.d.ts +0 -0
- /package/{dist → build}/internals/isShortOptionsGroup.d.ts +0 -0
- /package/{dist → build}/internals/isTrueString.d.ts +0 -0
- /package/{dist → build}/internals.d.ts +0 -0
- /package/{dist → build}/main.d.ts +0 -0
- /package/{dist → build}/parseArguments.d.ts +0 -0
- /package/{src → source}/Arguments.ts +0 -0
- /package/{src → source}/Argv.ts +0 -0
- /package/{src → source}/CommandConfig.ts +0 -0
- /package/{src → source}/CommandsConfig.ts +0 -0
- /package/{src → source}/LongOptionName.ts +0 -0
- /package/{src → source}/OptionConfig.ts +0 -0
- /package/{src → source}/OptionsConfig.ts +0 -0
- /package/{src → source}/ParameterConfig.ts +0 -0
- /package/{src → source}/ParametersConfig.ts +0 -0
- /package/{src → source}/ParserConfig.ts +0 -0
- /package/{src → source}/ParsingError.ts +0 -0
- /package/{src → source}/ShortOptionName.ts +0 -0
- /package/{src → source}/ValidationError.ts +0 -0
- /package/{src → source}/internals/CommandScope.ts +0 -0
- /package/{src → source}/internals/NormalizedCommandConfig.ts +0 -0
- /package/{src → source}/internals/NormalizedCommandsConfig.ts +0 -0
- /package/{src → source}/internals/createOptionShortNameMap.ts +0 -0
- /package/{src → source}/internals/expandArguments.ts +0 -0
- /package/{src → source}/internals/isCommand.ts +0 -0
- /package/{src → source}/internals/isFalseString.ts +0 -0
- /package/{src → source}/internals/isLongOption.ts +0 -0
- /package/{src → source}/internals/isOptionLike.ts +0 -0
- /package/{src → source}/internals/isShortOption.ts +0 -0
- /package/{src → source}/internals/isShortOptionsGroup.ts +0 -0
- /package/{src → source}/internals/isTrueString.ts +0 -0
- /package/{src → source}/internals.ts +0 -0
- /package/{src → source}/main.ts +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type TupleToUnion } from '@jakubmazanec/ts-utils';
|
|
2
|
-
import { type
|
|
2
|
+
import { type BooleanOptionConfig, type BooleansOptionConfig, type CountOptionConfig, type NumberOptionConfig, type NumbersOptionConfig, type OptionConfig, type StringOptionConfig, type StringsOptionConfig } from './OptionConfig.js';
|
|
3
3
|
import { type OptionsConfig } from './OptionsConfig.js';
|
|
4
4
|
import { type ParserConfig } from './ParserConfig.js';
|
|
5
5
|
type BooleanOptionConfigToArgumentsOption<O extends BooleanOptionConfig | BooleansOptionConfig> = O extends BooleanOptionConfig ? O['defaultValue'] extends boolean ? boolean : boolean | undefined : O extends BooleansOptionConfig ? O['defaultValue'] extends readonly boolean[] ? boolean[] : boolean[] | undefined : never;
|
|
@@ -1,32 +1,26 @@
|
|
|
1
1
|
import { type TupleToUnion } from '@jakubmazanec/ts-utils';
|
|
2
|
-
import { type
|
|
2
|
+
import { type BooleanParameterConfig, type NumberParameterConfig, type ParameterConfig, type StringParameterConfig } from './ParameterConfig.js';
|
|
3
3
|
import { type ParametersConfig } from './ParametersConfig.js';
|
|
4
4
|
import { type ParserConfig } from './ParserConfig.js';
|
|
5
5
|
type NumberParameterConfigToArgumentsParameter<O extends NumberParameterConfig> = O['choices'] extends readonly number[] ? O['defaultValue'] extends number ? TupleToUnion<O['choices']> : TupleToUnion<O['choices']> | undefined : O['defaultValue'] extends number ? number : number | undefined;
|
|
6
6
|
type StringParameterConfigToArgumentsParameter<O extends StringParameterConfig> = O['choices'] extends readonly string[] ? O['defaultValue'] extends string ? TupleToUnion<O['choices']> : TupleToUnion<O['choices']> | undefined : O['defaultValue'] extends string ? string : string | undefined;
|
|
7
7
|
type BooleanParameterConfigToArgumentsParameter<O extends BooleanParameterConfig> = O['defaultValue'] extends boolean ? boolean : boolean | undefined;
|
|
8
8
|
type ParameterConfigToArgumentsParameter<O extends ParameterConfig> = O extends NumberParameterConfig ? NumberParameterConfigToArgumentsParameter<O> : O extends StringParameterConfig ? StringParameterConfigToArgumentsParameter<O> : O extends BooleanParameterConfig ? BooleanParameterConfigToArgumentsParameter<O> : never;
|
|
9
|
-
type ParametersConfigToArgumentsParameters<O extends ParametersConfig> = O extends readonly [
|
|
9
|
+
type ParametersConfigToArgumentsParameters<O extends ParametersConfig> = O extends (readonly [
|
|
10
10
|
ParameterConfig,
|
|
11
11
|
ParameterConfig,
|
|
12
12
|
ParameterConfig,
|
|
13
13
|
ParameterConfig,
|
|
14
14
|
ParameterConfig,
|
|
15
15
|
ParameterConfig
|
|
16
|
-
] ? readonly [
|
|
16
|
+
]) ? readonly [
|
|
17
17
|
ParameterConfigToArgumentsParameter<O[0]>,
|
|
18
18
|
ParameterConfigToArgumentsParameter<O[1]>,
|
|
19
19
|
ParameterConfigToArgumentsParameter<O[2]>,
|
|
20
20
|
ParameterConfigToArgumentsParameter<O[3]>,
|
|
21
21
|
ParameterConfigToArgumentsParameter<O[4]>,
|
|
22
22
|
ParameterConfigToArgumentsParameter<O[5]>
|
|
23
|
-
] : O extends readonly [
|
|
24
|
-
ParameterConfig,
|
|
25
|
-
ParameterConfig,
|
|
26
|
-
ParameterConfig,
|
|
27
|
-
ParameterConfig,
|
|
28
|
-
ParameterConfig
|
|
29
|
-
] ? readonly [
|
|
23
|
+
] : O extends (readonly [ParameterConfig, ParameterConfig, ParameterConfig, ParameterConfig, ParameterConfig]) ? readonly [
|
|
30
24
|
ParameterConfigToArgumentsParameter<O[0]>,
|
|
31
25
|
ParameterConfigToArgumentsParameter<O[1]>,
|
|
32
26
|
ParameterConfigToArgumentsParameter<O[2]>,
|
|
@@ -42,14 +36,14 @@ type ParametersConfigToArgumentsParameters<O extends ParametersConfig> = O exten
|
|
|
42
36
|
ParameterConfigToArgumentsParameter<O[1]>,
|
|
43
37
|
ParameterConfigToArgumentsParameter<O[2]>
|
|
44
38
|
] : O extends readonly [ParameterConfig, ParameterConfig] ? readonly [ParameterConfigToArgumentsParameter<O[0]>, ParameterConfigToArgumentsParameter<O[1]>] : O extends readonly [ParameterConfig] ? readonly [ParameterConfigToArgumentsParameter<O[0]>] : never;
|
|
45
|
-
type ParametersConfigToVariadicArgumentsParameters<O extends ParametersConfig> = O extends readonly [
|
|
39
|
+
type ParametersConfigToVariadicArgumentsParameters<O extends ParametersConfig> = O extends (readonly [
|
|
46
40
|
ParameterConfig,
|
|
47
41
|
ParameterConfig,
|
|
48
42
|
ParameterConfig,
|
|
49
43
|
ParameterConfig,
|
|
50
44
|
ParameterConfig,
|
|
51
45
|
ParameterConfig
|
|
52
|
-
] ? readonly [
|
|
46
|
+
]) ? readonly [
|
|
53
47
|
ParameterConfigToArgumentsParameter<O[0]>,
|
|
54
48
|
ParameterConfigToArgumentsParameter<O[1]>,
|
|
55
49
|
ParameterConfigToArgumentsParameter<O[2]>,
|
|
@@ -57,13 +51,7 @@ type ParametersConfigToVariadicArgumentsParameters<O extends ParametersConfig> =
|
|
|
57
51
|
ParameterConfigToArgumentsParameter<O[4]>,
|
|
58
52
|
ParameterConfigToArgumentsParameter<O[5]>,
|
|
59
53
|
...(readonly string[])
|
|
60
|
-
] : O extends readonly [
|
|
61
|
-
ParameterConfig,
|
|
62
|
-
ParameterConfig,
|
|
63
|
-
ParameterConfig,
|
|
64
|
-
ParameterConfig,
|
|
65
|
-
ParameterConfig
|
|
66
|
-
] ? readonly [
|
|
54
|
+
] : O extends (readonly [ParameterConfig, ParameterConfig, ParameterConfig, ParameterConfig, ParameterConfig]) ? readonly [
|
|
67
55
|
ParameterConfigToArgumentsParameter<O[0]>,
|
|
68
56
|
ParameterConfigToArgumentsParameter<O[1]>,
|
|
69
57
|
ParameterConfigToArgumentsParameter<O[2]>,
|
|
@@ -87,5 +75,7 @@ type ParametersConfigToVariadicArgumentsParameters<O extends ParametersConfig> =
|
|
|
87
75
|
...(readonly string[])
|
|
88
76
|
] : O extends readonly [ParameterConfig] ? readonly [ParameterConfigToArgumentsParameter<O[0]>, ...(readonly string[])] : readonly [...(readonly string[])];
|
|
89
77
|
/** Parsed parameters. */
|
|
90
|
-
export type ArgumentsParameters<O extends ParserConfig> = Omit<O, 'parameters'> extends O ? O['allowUnknownParameters'] extends true ? [
|
|
78
|
+
export type ArgumentsParameters<O extends ParserConfig> = Omit<O, 'parameters'> extends O ? O['allowUnknownParameters'] extends true ? [
|
|
79
|
+
...string[]
|
|
80
|
+
] : null : O['parameters'] extends undefined ? null : O['allowUnknownParameters'] extends true ? ParametersConfigToVariadicArgumentsParameters<NonNullable<O['parameters']>> : ParametersConfigToArgumentsParameters<NonNullable<O['parameters']>>;
|
|
91
81
|
export {};
|
package/build/Argv.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { createCustomError } from "@jakubmazanec/error";
|
|
3
|
+
export const ParsingError = createCustomError("ParsingError", {
|
|
4
|
+
INVALID_PARAMETER: 'Invalid parameter value "{0}" found. Allowed values for parameter "{1}" are: {2}.',
|
|
5
|
+
UNKNOWN_PARAMETER: 'Unknown parameter "{0}" found. Unknown parameters are not allowed.',
|
|
6
|
+
INVALID_OPTION: 'Invalid option value "{0}" found. Allowed values for option "{1}" are: {2}.',
|
|
7
|
+
UNKNOWN_OPTION: 'Unknown option "{0}" found. Unknown options are not allowed.'
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=ParsingError.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../source/ParsingError.ts"],
|
|
4
|
+
"sourcesContent": ["import {createCustomError} from '@jakubmazanec/error';\n\n/**\n * A subclass of `Error` that indicates a parsing failure.\n */\nexport const ParsingError = createCustomError('ParsingError', {\n INVALID_PARAMETER:\n 'Invalid parameter value \"{0}\" found. Allowed values for parameter \"{1}\" are: {2}.',\n UNKNOWN_PARAMETER: 'Unknown parameter \"{0}\" found. Unknown parameters are not allowed.',\n INVALID_OPTION: 'Invalid option value \"{0}\" found. Allowed values for option \"{1}\" are: {2}.',\n UNKNOWN_OPTION: 'Unknown option \"{0}\" found. Unknown options are not allowed.',\n});\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAQ,yBAAwB;AAKzB,aAAM,eAAe,kBAAkB,gBAAgB;AAAA,EAC5D,mBACE;AAAA,EACF,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,gBAAgB;AAClB,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { createCustomError } from "@jakubmazanec/error";
|
|
3
|
+
export const ValidationError = createCustomError("ValidationError", {
|
|
4
|
+
INVALID_COMMAND: 'Command "{0}" has invalid format. Only words consisting of letters, numbers or dashes separated by single space are allowed.',
|
|
5
|
+
MISSING_PARAMETER: 'Parameter "{0}" is required but its value is undefined.',
|
|
6
|
+
INVALID_PARAMETER_DEFAULT_AND_CHOICES: 'Parameter "{0}" has invalid default value "{1}". Default value must be one of the `choices` elements.',
|
|
7
|
+
INVALID_PARAMETER_ORDER: 'Parameter "{0}" has invalid order. All parameters before must have a default value or be required too',
|
|
8
|
+
MISSING_OPTION: 'Option "{0}" is required but its value is undefined.',
|
|
9
|
+
INVALID_OPTION_DEFAULT_AND_CHOICES: 'Option "{0}" has invalid default value "{1}". Default value must be one of the `choices` elements.',
|
|
10
|
+
INVALID_OPTION_NAME: 'Option "{0}" has invalid name. Only names consisting of letters, numbers or dashes are allowed.',
|
|
11
|
+
REPEATED_OPTION_NAME: 'Option "{0}" has invalid short name "{1}". Short option names must be unique.',
|
|
12
|
+
INVALID_OPTION_ARITY: 'Option "{0}" has invalid number of values. Found "{1}", require "{2}".'
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=ValidationError.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../source/ValidationError.ts"],
|
|
4
|
+
"sourcesContent": ["import {createCustomError} from '@jakubmazanec/error';\n\n/**\n * A subclass of `Error` that indicates a validation issue.\n */\nexport const ValidationError = createCustomError('ValidationError', {\n INVALID_COMMAND:\n 'Command \"{0}\" has invalid format. Only words consisting of letters, numbers or dashes separated by single space are allowed.',\n MISSING_PARAMETER: 'Parameter \"{0}\" is required but its value is undefined.',\n INVALID_PARAMETER_DEFAULT_AND_CHOICES:\n 'Parameter \"{0}\" has invalid default value \"{1}\". Default value must be one of the `choices` elements.',\n INVALID_PARAMETER_ORDER:\n 'Parameter \"{0}\" has invalid order. All parameters before must have a default value or be required too',\n MISSING_OPTION: 'Option \"{0}\" is required but its value is undefined.',\n INVALID_OPTION_DEFAULT_AND_CHOICES:\n 'Option \"{0}\" has invalid default value \"{1}\". Default value must be one of the `choices` elements.',\n INVALID_OPTION_NAME:\n 'Option \"{0}\" has invalid name. Only names consisting of letters, numbers or dashes are allowed.',\n REPEATED_OPTION_NAME:\n 'Option \"{0}\" has invalid short name \"{1}\". Short option names must be unique.',\n INVALID_OPTION_ARITY: 'Option \"{0}\" has invalid number of values. Found \"{1}\", require \"{2}\".',\n});\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAQ,yBAAwB;AAKzB,aAAM,kBAAkB,kBAAkB,mBAAmB;AAAA,EAClE,iBACE;AAAA,EACF,mBAAmB;AAAA,EACnB,uCACE;AAAA,EACF,yBACE;AAAA,EACF,gBAAgB;AAAA,EAChB,oCACE;AAAA,EACF,qBACE;AAAA,EACF,sBACE;AAAA,EACF,sBAAsB;AACxB,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { ValidationError } from "../ValidationError.js";
|
|
3
|
+
import { isCommand } from "./isCommand.js";
|
|
4
|
+
import { isLongOption } from "./isLongOption.js";
|
|
5
|
+
export class Checker {
|
|
6
|
+
errors = [];
|
|
7
|
+
checkCommandsConfig(commandsConfig) {
|
|
8
|
+
for (let commandConfig of commandsConfig) {
|
|
9
|
+
if (!isCommand(commandConfig)) {
|
|
10
|
+
this.addError(new ValidationError("INVALID_COMMAND", { messageParameters: [commandConfig] }));
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
checkParametersConfig(parametersConfig) {
|
|
15
|
+
for (let [i, parameterConfig] of parametersConfig.entries()) {
|
|
16
|
+
if (parameterConfig.type !== "boolean" && parameterConfig.choices && // default values and chocies do not contradict each other
|
|
17
|
+
parameterConfig.defaultValue !== void 0 && !parameterConfig.choices.includes(parameterConfig.defaultValue)) {
|
|
18
|
+
this.addError(
|
|
19
|
+
new ValidationError("INVALID_PARAMETER_DEFAULT_AND_CHOICES", {
|
|
20
|
+
messageParameters: [parameterConfig.label ?? i, parameterConfig.defaultValue]
|
|
21
|
+
})
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
if (i >= 1 && parameterConfig.required === true && !parametersConfig.slice(0, i).every(
|
|
25
|
+
(previousParameterConfig) => previousParameterConfig.required === true || previousParameterConfig.defaultValue !== void 0
|
|
26
|
+
)) {
|
|
27
|
+
this.addError(
|
|
28
|
+
new ValidationError("INVALID_PARAMETER_ORDER", {
|
|
29
|
+
messageParameters: [parameterConfig.label ?? i]
|
|
30
|
+
})
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
checkOptionsConfig(optionsConfig) {
|
|
36
|
+
let usedShortOptionNames = /* @__PURE__ */ new Set([]);
|
|
37
|
+
for (let [optionName, optionConfig] of Object.entries(optionsConfig)) {
|
|
38
|
+
if (!isLongOption(`--${optionName}`)) {
|
|
39
|
+
this.addError(
|
|
40
|
+
new ValidationError("INVALID_OPTION_NAME", {
|
|
41
|
+
messageParameters: [optionName]
|
|
42
|
+
})
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
if (optionConfig.shortName && usedShortOptionNames.has(optionConfig.shortName)) {
|
|
46
|
+
this.addError(
|
|
47
|
+
new ValidationError("REPEATED_OPTION_NAME", {
|
|
48
|
+
messageParameters: [optionName, optionConfig.shortName]
|
|
49
|
+
})
|
|
50
|
+
);
|
|
51
|
+
} else if (optionConfig.shortName) {
|
|
52
|
+
usedShortOptionNames.add(optionConfig.shortName);
|
|
53
|
+
}
|
|
54
|
+
if ((optionConfig.type === "string" || optionConfig.type === "number" && !optionConfig.count) && optionConfig.choices && optionConfig.defaultValue !== void 0 && !optionConfig.choices.includes(optionConfig.defaultValue)) {
|
|
55
|
+
this.addError(
|
|
56
|
+
new ValidationError("INVALID_OPTION_DEFAULT_AND_CHOICES", {
|
|
57
|
+
messageParameters: [optionName, optionConfig.defaultValue]
|
|
58
|
+
})
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
checkParsedParameters(parametersConfig, parsedParameters) {
|
|
64
|
+
for (let [i, parameterConfig] of parametersConfig.entries()) {
|
|
65
|
+
let parsedParameter = parsedParameters[i];
|
|
66
|
+
if (parameterConfig.required === true && parsedParameter === void 0) {
|
|
67
|
+
this.addError(
|
|
68
|
+
new ValidationError("MISSING_PARAMETER", {
|
|
69
|
+
messageParameters: [parameterConfig.label ?? i]
|
|
70
|
+
})
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
checkParsedOptions(optionsConfig, parsedOptions) {
|
|
76
|
+
for (let [optionName, optionConfig] of Object.entries(optionsConfig)) {
|
|
77
|
+
let parsedOption = parsedOptions[optionName];
|
|
78
|
+
if (optionConfig.required && parsedOption === void 0) {
|
|
79
|
+
this.addError(
|
|
80
|
+
new ValidationError("MISSING_OPTION", {
|
|
81
|
+
messageParameters: [optionName]
|
|
82
|
+
})
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
if (parsedOption !== void 0 && (optionConfig.type === "string" && optionConfig.multiple || optionConfig.type === "number" && optionConfig.multiple) && typeof optionConfig.arity === "number" && Array.isArray(parsedOption) && parsedOption.length > 0 && parsedOption.length !== optionConfig.arity) {
|
|
86
|
+
this.addError(
|
|
87
|
+
new ValidationError("INVALID_OPTION_ARITY", {
|
|
88
|
+
messageParameters: [optionName, parsedOption.length, optionConfig.arity]
|
|
89
|
+
})
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
addError(error) {
|
|
95
|
+
this.errors.push(error);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=Checker.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../source/internals/Checker.ts"],
|
|
4
|
+
"sourcesContent": ["import {type CommandsConfig} from '../CommandsConfig.js';\nimport {type OptionsConfig} from '../OptionsConfig.js';\nimport {type ParametersConfig} from '../ParametersConfig.js';\nimport {ValidationError} from '../ValidationError.js';\nimport {isCommand} from './isCommand.js';\nimport {isLongOption} from './isLongOption.js';\n\n/**\n * `Checker` is used for handling various checks before, during, and after parsing of the arguments.\n */\nexport class Checker {\n errors: Error[] = [];\n\n checkCommandsConfig(commandsConfig: CommandsConfig | []) {\n for (let commandConfig of commandsConfig) {\n if (!isCommand(commandConfig)) {\n this.addError(new ValidationError('INVALID_COMMAND', {messageParameters: [commandConfig]}));\n }\n }\n }\n\n checkParametersConfig(parametersConfig: ParametersConfig | []) {\n for (let [i, parameterConfig] of parametersConfig.entries()) {\n // types of choices must be correct\n if (\n parameterConfig.type !== 'boolean' &&\n parameterConfig.choices && // default values and chocies do not contradict each other\n parameterConfig.defaultValue !== undefined &&\n !parameterConfig.choices.includes(parameterConfig.defaultValue as never)\n ) {\n this.addError(\n new ValidationError('INVALID_PARAMETER_DEFAULT_AND_CHOICES', {\n messageParameters: [parameterConfig.label ?? i, parameterConfig.defaultValue],\n }),\n );\n }\n\n // if parameter is required, all parameters before must be required too\n if (\n i >= 1 &&\n parameterConfig.required === true &&\n !parametersConfig\n .slice(0, i)\n .every(\n (previousParameterConfig) =>\n previousParameterConfig.required === true ||\n previousParameterConfig.defaultValue !== undefined,\n )\n ) {\n this.addError(\n new ValidationError('INVALID_PARAMETER_ORDER', {\n messageParameters: [parameterConfig.label ?? i],\n }),\n );\n }\n }\n }\n\n checkOptionsConfig(optionsConfig: OptionsConfig) {\n let usedShortOptionNames: Set<string> = new Set([]);\n\n for (let [optionName, optionConfig] of Object.entries(optionsConfig)) {\n // option names must be in correct format\n if (!isLongOption(`--${optionName}`)) {\n this.addError(\n new ValidationError('INVALID_OPTION_NAME', {\n messageParameters: [optionName],\n }),\n );\n }\n\n // option short names must be unique\n if (optionConfig.shortName && usedShortOptionNames.has(optionConfig.shortName)) {\n this.addError(\n new ValidationError('REPEATED_OPTION_NAME', {\n messageParameters: [optionName, optionConfig.shortName],\n }),\n );\n } else if (optionConfig.shortName) {\n usedShortOptionNames.add(optionConfig.shortName);\n }\n\n // default values and chocies do not contradict each other\n if (\n (optionConfig.type === 'string' ||\n (optionConfig.type === 'number' && !optionConfig.count)) &&\n optionConfig.choices &&\n optionConfig.defaultValue !== undefined &&\n !optionConfig.choices.includes(optionConfig.defaultValue as never)\n ) {\n this.addError(\n new ValidationError('INVALID_OPTION_DEFAULT_AND_CHOICES', {\n messageParameters: [optionName, optionConfig.defaultValue],\n }),\n );\n }\n }\n }\n\n checkParsedParameters(parametersConfig: ParametersConfig | [], parsedParameters: unknown[]) {\n for (let [i, parameterConfig] of parametersConfig.entries()) {\n let parsedParameter = parsedParameters[i];\n\n // required parameters must have value\n if (parameterConfig.required === true && parsedParameter === undefined) {\n this.addError(\n new ValidationError('MISSING_PARAMETER', {\n messageParameters: [parameterConfig.label ?? i],\n }),\n );\n }\n }\n }\n\n checkParsedOptions(optionsConfig: OptionsConfig, parsedOptions: Record<string, unknown>) {\n for (let [optionName, optionConfig] of Object.entries(optionsConfig)) {\n let parsedOption = parsedOptions[optionName];\n\n // check required\n if (optionConfig.required && parsedOption === undefined) {\n this.addError(\n new ValidationError('MISSING_OPTION', {\n messageParameters: [optionName],\n }),\n );\n }\n\n // check arity\n if (\n parsedOption !== undefined &&\n ((optionConfig.type === 'string' && optionConfig.multiple) ||\n (optionConfig.type === 'number' && optionConfig.multiple)) &&\n typeof optionConfig.arity === 'number' &&\n Array.isArray(parsedOption) &&\n (parsedOption as unknown[]).length > 0 &&\n (parsedOption as unknown[]).length !== optionConfig.arity\n ) {\n this.addError(\n new ValidationError('INVALID_OPTION_ARITY', {\n messageParameters: [optionName, (parsedOption as unknown[]).length, optionConfig.arity],\n }),\n );\n }\n }\n }\n\n addError(error: Error) {\n this.errors.push(error);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
export class CommandScope {
|
|
3
|
+
args;
|
|
4
|
+
config;
|
|
5
|
+
constructor(arg, normalizedCommandsConfig) {
|
|
6
|
+
let normalizedArgument = arg.toLowerCase();
|
|
7
|
+
let commandConfig = normalizedCommandsConfig.find(
|
|
8
|
+
(commandConfig2) => commandConfig2.args[0] === normalizedArgument
|
|
9
|
+
);
|
|
10
|
+
this.config = commandConfig ?? [];
|
|
11
|
+
this.args = [normalizedArgument];
|
|
12
|
+
}
|
|
13
|
+
captureArg(arg) {
|
|
14
|
+
this.args.push(arg.toLowerCase());
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
isComplete() {
|
|
18
|
+
let isComplete = true;
|
|
19
|
+
for (let [i, arg] of this.config.args.entries()) {
|
|
20
|
+
if (this.args[i] !== arg) {
|
|
21
|
+
isComplete = false;
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return isComplete;
|
|
26
|
+
}
|
|
27
|
+
isDone() {
|
|
28
|
+
let isDone = false;
|
|
29
|
+
for (let [i, arg] of this.config.args.entries()) {
|
|
30
|
+
if (this.args[i] !== arg) {
|
|
31
|
+
isDone = true;
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return isDone;
|
|
36
|
+
}
|
|
37
|
+
getValue() {
|
|
38
|
+
return this.config.command;
|
|
39
|
+
}
|
|
40
|
+
getArgs() {
|
|
41
|
+
return [...this.args];
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=CommandScope.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../source/internals/CommandScope.ts"],
|
|
4
|
+
"sourcesContent": ["import {type NormalizedCommandConfig} from './NormalizedCommandConfig.js';\nimport {type NormalizedCommandsConfig} from './NormalizedCommandsConfig.js';\n\n/**\n * `CommandScope` handles storing information about parsing of a command.\n */\nexport class CommandScope {\n private readonly args: string[];\n readonly config: NormalizedCommandConfig;\n\n constructor(arg: string, normalizedCommandsConfig: NormalizedCommandsConfig) {\n let normalizedArgument = arg.toLowerCase();\n let commandConfig = normalizedCommandsConfig.find(\n (commandConfig) => commandConfig.args[0] === normalizedArgument,\n );\n\n this.config = commandConfig ?? ([] as unknown as NormalizedCommandConfig);\n this.args = [normalizedArgument];\n }\n\n captureArg(arg: string) {\n this.args.push(arg.toLowerCase());\n\n return this;\n }\n\n isComplete() {\n let isComplete = true;\n\n for (let [i, arg] of this.config.args.entries()) {\n if (this.args[i] !== arg) {\n isComplete = false;\n\n break;\n }\n }\n\n return isComplete;\n }\n\n isDone() {\n let isDone = false;\n\n for (let [i, arg] of this.config.args.entries()) {\n if (this.args[i] !== arg) {\n isDone = true;\n\n break;\n }\n }\n\n return isDone;\n }\n\n getValue() {\n return this.config.command;\n }\n\n getArgs() {\n return [...this.args];\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAMO,aAAM,aAAa;AAAA,EACP;AAAA,EACR;AAAA,EAET,YAAY,KAAa,0BAAoD;AAC3E,QAAI,qBAAqB,IAAI,YAAY;AACzC,QAAI,gBAAgB,yBAAyB;AAAA,MAC3C,CAACA,mBAAkBA,eAAc,KAAK,CAAC,MAAM;AAAA,IAC/C;AAEA,SAAK,SAAS,iBAAkB,CAAC;AACjC,SAAK,OAAO,CAAC,kBAAkB;AAAA,EACjC;AAAA,EAEA,WAAW,KAAa;AACtB,SAAK,KAAK,KAAK,IAAI,YAAY,CAAC;AAEhC,WAAO;AAAA,EACT;AAAA,EAEA,aAAa;AACX,QAAI,aAAa;AAEjB,aAAS,CAAC,GAAG,GAAG,KAAK,KAAK,OAAO,KAAK,QAAQ,GAAG;AAC/C,UAAI,KAAK,KAAK,CAAC,MAAM,KAAK;AACxB,qBAAa;AAEb;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,SAAS;AACP,QAAI,SAAS;AAEb,aAAS,CAAC,GAAG,GAAG,KAAK,KAAK,OAAO,KAAK,QAAQ,GAAG;AAC/C,UAAI,KAAK,KAAK,CAAC,MAAM,KAAK;AACxB,iBAAS;AAET;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,WAAW;AACT,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,UAAU;AACR,WAAO,CAAC,GAAG,KAAK,IAAI;AAAA,EACtB;AACF;",
|
|
6
|
+
"names": ["commandConfig"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import camelCase from "lodash.camelcase";
|
|
3
|
+
import { ParsingError } from "../ParsingError.js";
|
|
4
|
+
import { castValue } from "./castValue.js";
|
|
5
|
+
export class OptionScope {
|
|
6
|
+
name;
|
|
7
|
+
values = [];
|
|
8
|
+
previousParsedValue;
|
|
9
|
+
config;
|
|
10
|
+
constructor(optionName, optionsConfig, allowUnknownOptions = false) {
|
|
11
|
+
this.name = optionName;
|
|
12
|
+
if (this.name.includes("-")) {
|
|
13
|
+
this.name = camelCase(this.name);
|
|
14
|
+
}
|
|
15
|
+
let optionConfig = optionsConfig[this.name];
|
|
16
|
+
if (!optionConfig) {
|
|
17
|
+
if (!allowUnknownOptions) {
|
|
18
|
+
throw new ParsingError("UNKNOWN_OPTION", { messageParameters: [this.name] });
|
|
19
|
+
}
|
|
20
|
+
optionConfig = {
|
|
21
|
+
type: "string"
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
this.config = optionConfig;
|
|
25
|
+
}
|
|
26
|
+
captureArg(arg) {
|
|
27
|
+
let value = castValue(arg, this.config.type);
|
|
28
|
+
if ((this.config.type === "number" && !this.config.count || this.config.type === "string") && this.config.choices !== void 0 && !this.config.choices.includes(value)) {
|
|
29
|
+
throw new ParsingError("INVALID_OPTION", {
|
|
30
|
+
messageParameters: [
|
|
31
|
+
value,
|
|
32
|
+
this.name,
|
|
33
|
+
this.config.choices.map((choice) => `"${choice}"`).join(", ")
|
|
34
|
+
]
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
if (this.config.multiple) {
|
|
38
|
+
this.values.push(value);
|
|
39
|
+
} else {
|
|
40
|
+
this.values = [value];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
isComplete() {
|
|
44
|
+
if (!this.config.multiple && this.values.length === 1) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
if (this.config.multiple && typeof this.config.arity === "number" && this.values.length + (this.previousParsedValue ?? []).length === this.config.arity) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
getValue() {
|
|
53
|
+
let { config, previousParsedValue } = this;
|
|
54
|
+
let { values } = this;
|
|
55
|
+
if (config.type === "boolean" && !config.multiple && !values.length) {
|
|
56
|
+
values = [true];
|
|
57
|
+
} else if (config.type === "number" && config.count && !values.length) {
|
|
58
|
+
values = [1];
|
|
59
|
+
}
|
|
60
|
+
if (config.multiple && previousParsedValue) {
|
|
61
|
+
values = [...previousParsedValue, ...values];
|
|
62
|
+
}
|
|
63
|
+
if (config.type === "number" && config.count && previousParsedValue) {
|
|
64
|
+
values = [values[0] + previousParsedValue];
|
|
65
|
+
}
|
|
66
|
+
return config.multiple ? values : values[0];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=OptionScope.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../source/internals/OptionScope.ts"],
|
|
4
|
+
"sourcesContent": ["import camelCase from 'lodash.camelcase';\n\nimport {type OptionConfig} from '../OptionConfig.js';\nimport {type OptionsConfig} from '../OptionsConfig.js';\nimport {ParsingError} from '../ParsingError.js';\nimport {castValue} from './castValue.js';\n\n/**\n * `CommandScope` handles storing information about parsing of an option..\n */\nexport class OptionScope {\n name: string;\n\n values: unknown[] = [];\n previousParsedValue?: unknown[] | unknown;\n readonly config: OptionConfig;\n\n constructor(optionName: string, optionsConfig: OptionsConfig, allowUnknownOptions = false) {\n this.name = optionName;\n\n // Convert option to camel case\n if (this.name.includes('-')) {\n this.name = camelCase(this.name);\n }\n\n let optionConfig = optionsConfig[this.name];\n\n if (!optionConfig) {\n if (!allowUnknownOptions) {\n throw new ParsingError('UNKNOWN_OPTION', {messageParameters: [this.name]});\n }\n\n optionConfig = {\n type: 'string',\n };\n }\n\n this.config = optionConfig;\n }\n\n captureArg(arg: string) {\n let value = castValue(arg, this.config.type);\n\n if (\n ((this.config.type === 'number' && !this.config.count) || this.config.type === 'string') &&\n this.config.choices !== undefined &&\n !this.config.choices.includes(value as never)\n ) {\n throw new ParsingError('INVALID_OPTION', {\n messageParameters: [\n value,\n this.name,\n this.config.choices.map((choice) => `\"${choice}\"`).join(', '),\n ],\n });\n }\n\n if (this.config.multiple) {\n this.values.push(value);\n } else {\n this.values = [value];\n }\n }\n\n isComplete() {\n if (!this.config.multiple && this.values.length === 1) {\n return true;\n }\n\n if (\n this.config.multiple &&\n typeof this.config.arity === 'number' &&\n this.values.length + ((this.previousParsedValue as unknown[] | undefined) ?? []).length ===\n this.config.arity\n ) {\n return true;\n }\n\n return false;\n }\n\n getValue() {\n let {config, previousParsedValue} = this;\n let {values} = this;\n\n if (config.type === 'boolean' && !config.multiple && !values.length) {\n values = [true];\n } else if (config.type === 'number' && config.count && !values.length) {\n values = [1];\n }\n\n if (config.multiple && previousParsedValue) {\n values = [...(previousParsedValue as unknown[]), ...values];\n }\n\n if (config.type === 'number' && config.count && previousParsedValue) {\n values = [(values[0] as number) + (previousParsedValue as number)];\n }\n\n return config.multiple ? values : values[0];\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAAA,OAAO,eAAe;AAItB,SAAQ,oBAAmB;AAC3B,SAAQ,iBAAgB;AAKjB,aAAM,YAAY;AAAA,EACvB;AAAA,EAEA,SAAoB,CAAC;AAAA,EACrB;AAAA,EACS;AAAA,EAET,YAAY,YAAoB,eAA8B,sBAAsB,OAAO;AACzF,SAAK,OAAO;AAGZ,QAAI,KAAK,KAAK,SAAS,GAAG,GAAG;AAC3B,WAAK,OAAO,UAAU,KAAK,IAAI;AAAA,IACjC;AAEA,QAAI,eAAe,cAAc,KAAK,IAAI;AAE1C,QAAI,CAAC,cAAc;AACjB,UAAI,CAAC,qBAAqB;AACxB,cAAM,IAAI,aAAa,kBAAkB,EAAC,mBAAmB,CAAC,KAAK,IAAI,EAAC,CAAC;AAAA,MAC3E;AAEA,qBAAe;AAAA,QACb,MAAM;AAAA,MACR;AAAA,IACF;AAEA,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,WAAW,KAAa;AACtB,QAAI,QAAQ,UAAU,KAAK,KAAK,OAAO,IAAI;AAE3C,SACI,KAAK,OAAO,SAAS,YAAY,CAAC,KAAK,OAAO,SAAU,KAAK,OAAO,SAAS,aAC/E,KAAK,OAAO,YAAY,UACxB,CAAC,KAAK,OAAO,QAAQ,SAAS,KAAc,GAC5C;AACA,YAAM,IAAI,aAAa,kBAAkB;AAAA,QACvC,mBAAmB;AAAA,UACjB;AAAA,UACA,KAAK;AAAA,UACL,KAAK,OAAO,QAAQ,IAAI,CAAC,WAAW,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,QAC9D;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,KAAK,OAAO,UAAU;AACxB,WAAK,OAAO,KAAK,KAAK;AAAA,IACxB,OAAO;AACL,WAAK,SAAS,CAAC,KAAK;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,aAAa;AACX,QAAI,CAAC,KAAK,OAAO,YAAY,KAAK,OAAO,WAAW,GAAG;AACrD,aAAO;AAAA,IACT;AAEA,QACE,KAAK,OAAO,YACZ,OAAO,KAAK,OAAO,UAAU,YAC7B,KAAK,OAAO,UAAW,KAAK,uBAAiD,CAAC,GAAG,WAC/E,KAAK,OAAO,OACd;AACA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,WAAW;AACT,QAAI,EAAC,QAAQ,oBAAmB,IAAI;AACpC,QAAI,EAAC,OAAM,IAAI;AAEf,QAAI,OAAO,SAAS,aAAa,CAAC,OAAO,YAAY,CAAC,OAAO,QAAQ;AACnE,eAAS,CAAC,IAAI;AAAA,IAChB,WAAW,OAAO,SAAS,YAAY,OAAO,SAAS,CAAC,OAAO,QAAQ;AACrE,eAAS,CAAC,CAAC;AAAA,IACb;AAEA,QAAI,OAAO,YAAY,qBAAqB;AAC1C,eAAS,CAAC,GAAI,qBAAmC,GAAG,MAAM;AAAA,IAC5D;AAEA,QAAI,OAAO,SAAS,YAAY,OAAO,SAAS,qBAAqB;AACnE,eAAS,CAAE,OAAO,CAAC,IAAgB,mBAA8B;AAAA,IACnE;AAEA,WAAO,OAAO,WAAW,SAAS,OAAO,CAAC;AAAA,EAC5C;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|