@@ -176,23 +176,6 @@ function redactInputFromProperties(obj: Record<string, unknown>, input: string,
176
176
* Thrown when underlying parameter parser throws an exception parsing some input.
177
177
*/
178
178
export class ArgumentParseError extends ArgumentScannerError {
179
- static parseInput < T , P extends InputParser < T , CONTEXT > , CONTEXT extends CommandContext > (
180
- externalFlagNameOrPlaceholder : ExternalFlagName | Placeholder ,
181
- parser : P ,
182
- input : string ,
183
- displayValue : string ,
184
- source : ArgumentInputSource ,
185
- context : CONTEXT ,
186
- ) : ReturnType < P > {
187
- try {
188
- return parser . call ( context , input ) as ReturnType < P > ;
189
- } catch ( exc ) {
190
- if ( typeof exc === "object" && exc ) {
191
- redactInputFromProperties ( exc as Record < string , unknown > , input , displayValue ) ;
192
- }
193
- throw new ArgumentParseError ( externalFlagNameOrPlaceholder , displayValue , source , exc ) ;
194
- }
195
- }
196
179
/**
197
180
* External name of flag or placeholder for positional argument that was parsing this input.
198
181
*/
@@ -235,27 +218,28 @@ export class ArgumentParseError extends ArgumentScannerError {
235
218
}
236
219
}
237
220
221
+ function parseInput < T , P extends InputParser < T , CONTEXT > , CONTEXT extends CommandContext > (
222
+ externalFlagNameOrPlaceholder : ExternalFlagName | Placeholder ,
223
+ parser : P ,
224
+ input : string ,
225
+ displayValue : string ,
226
+ source : ArgumentInputSource ,
227
+ context : CONTEXT ,
228
+ ) : ReturnType < P > {
229
+ try {
230
+ return parser . call ( context , input ) as ReturnType < P > ;
231
+ } catch ( exc ) {
232
+ if ( typeof exc === "object" && exc ) {
233
+ redactInputFromProperties ( exc as Record < string , unknown > , input , displayValue ) ;
234
+ }
235
+ throw new ArgumentParseError ( externalFlagNameOrPlaceholder , displayValue , source , exc ) ;
236
+ }
237
+ }
238
+
238
239
/**
239
240
* Thrown when input fails to match the given values for an enum flag.
240
241
*/
241
242
export class EnumValidationError extends ArgumentScannerError {
242
- static assertInputIsEnumValue < T extends string > (
243
- flag : BaseEnumFlagParameter < T > ,
244
- input : string ,
245
- displayValue : string ,
246
- source : ArgumentInputSource ,
247
- config : ScannerConfiguration ,
248
- externalFlagName : ExternalFlagName ,
249
- ) : asserts input is T {
250
- if ( ! flag . values . includes ( input as T ) ) {
251
- if ( input === displayValue ) {
252
- const corrections = filterClosestAlternatives ( input , flag . values , config . distanceOptions ) ;
253
- throw new EnumValidationError ( externalFlagName , input , source , flag . values , corrections ) ;
254
- } else {
255
- throw new EnumValidationError ( externalFlagName , displayValue , source , flag . values , [ ] ) ;
256
- }
257
- }
258
- }
259
243
/**
260
244
* External name of flag that was parsing this input.
261
245
*/
@@ -308,6 +292,24 @@ export class EnumValidationError extends ArgumentScannerError {
308
292
}
309
293
}
310
294
295
+ function assertInputIsEnumValue < T extends string > (
296
+ flag : BaseEnumFlagParameter < T > ,
297
+ input : string ,
298
+ displayValue : string ,
299
+ source : ArgumentInputSource ,
300
+ config : ScannerConfiguration ,
301
+ externalFlagName : ExternalFlagName ,
302
+ ) : asserts input is T {
303
+ if ( ! flag . values . includes ( input as T ) ) {
304
+ if ( input === displayValue ) {
305
+ const corrections = filterClosestAlternatives ( input , flag . values , config . distanceOptions ) ;
306
+ throw new EnumValidationError ( externalFlagName , input , source , flag . values , corrections ) ;
307
+ } else {
308
+ throw new EnumValidationError ( externalFlagName , displayValue , source , flag . values , [ ] ) ;
309
+ }
310
+ }
311
+ }
312
+
311
313
/**
312
314
* Thrown when flag was expecting input that was not provided.
313
315
*/
@@ -583,7 +585,7 @@ async function parseInputsForFlag<CONTEXT extends CommandContext>(
583
585
}
584
586
const displayValue = flag . default . redact ? "*" . repeat ( defaultValue . length ) : defaultValue ;
585
587
if ( flag . kind === "boolean" ) {
586
- return ArgumentParseError . parseInput (
588
+ return parseInput (
587
589
externalFlagName ,
588
590
looseBooleanParser ,
589
591
defaultValue ,
@@ -593,39 +595,18 @@ async function parseInputsForFlag<CONTEXT extends CommandContext>(
593
595
) ;
594
596
}
595
597
if ( flag . kind === "enum" ) {
596
- EnumValidationError . assertInputIsEnumValue (
597
- flag ,
598
- defaultValue ,
599
- displayValue ,
600
- source ,
601
- config ,
602
- externalFlagName ,
603
- ) ;
598
+ assertInputIsEnumValue ( flag , defaultValue , displayValue , source , config , externalFlagName ) ;
604
599
return defaultValue ;
605
600
}
606
- return ArgumentParseError . parseInput (
607
- externalFlagName ,
608
- flag . parse ,
609
- defaultValue ,
610
- displayValue ,
611
- source ,
612
- context ,
613
- ) ;
601
+ return parseInput ( externalFlagName , flag . parse , defaultValue , displayValue , source , context ) ;
614
602
}
615
603
if ( flag . kind === "boolean" ) {
616
604
return flag . default ;
617
605
}
618
606
if ( flag . kind === "enum" ) {
619
607
return flag . default ;
620
608
}
621
- return ArgumentParseError . parseInput (
622
- externalFlagName ,
623
- flag . parse ,
624
- flag . default ,
625
- flag . default ,
626
- "default" ,
627
- context ,
628
- ) ;
609
+ return parseInput ( externalFlagName , flag . parse , flag . default , flag . default , "default" , context ) ;
629
610
}
630
611
if ( flag . optional ) {
631
612
return ;
@@ -639,32 +620,30 @@ async function parseInputsForFlag<CONTEXT extends CommandContext>(
639
620
}
640
621
if ( flag . kind === "counter" ) {
641
622
return inputs . reduce ( ( total , input ) => {
642
- const value = ArgumentParseError . parseInput ( externalFlagName , numberParser , input , input , "argv" , context ) ;
623
+ const value = parseInput ( externalFlagName , numberParser , input , input , "argv" , context ) ;
643
624
return total + value ;
644
625
} , 0 ) ;
645
626
}
646
627
if ( "variadic" in flag && flag . variadic ) {
647
628
if ( flag . kind === "enum" ) {
648
629
for ( const input of inputs ) {
649
- EnumValidationError . assertInputIsEnumValue ( flag , input , input , "argv" , config , externalFlagName ) ;
630
+ assertInputIsEnumValue ( flag , input , input , "argv" , config , externalFlagName ) ;
650
631
}
651
632
return inputs ;
652
633
}
653
634
return Promise . all (
654
- inputs . map ( ( input ) =>
655
- ArgumentParseError . parseInput ( externalFlagName , flag . parse , input , input , "argv" , context ) ,
656
- ) ,
635
+ inputs . map ( ( input ) => parseInput ( externalFlagName , flag . parse , input , input , "argv" , context ) ) ,
657
636
) ;
658
637
}
659
638
const input = inputs [ 0 ] ;
660
639
if ( flag . kind === "boolean" ) {
661
- return ArgumentParseError . parseInput ( externalFlagName , looseBooleanParser , input , input , "argv" , context ) ;
640
+ return parseInput ( externalFlagName , looseBooleanParser , input , input , "argv" , context ) ;
662
641
}
663
642
if ( flag . kind === "enum" ) {
664
- EnumValidationError . assertInputIsEnumValue ( flag , input , input , "argv" , config , externalFlagName ) ;
643
+ assertInputIsEnumValue ( flag , input , input , "argv" , config , externalFlagName ) ;
665
644
return input ;
666
645
}
667
- return ArgumentParseError . parseInput ( externalFlagName , flag . parse , input , input , "argv" , context ) ;
646
+ return parseInput ( externalFlagName , flag . parse , input , input , "argv" , context ) ;
668
647
}
669
648
670
649
/**
@@ -895,14 +874,7 @@ export function buildArgumentScanner<FLAGS extends BaseFlags, ARGS extends BaseA
895
874
positionalValues_p = allSettledOrElse (
896
875
positionalInputs . map ( async ( input , i ) => {
897
876
const placeholder = getPlaceholder ( positional . parameter , i + 1 ) ;
898
- return ArgumentParseError . parseInput (
899
- placeholder ,
900
- positional . parameter . parse ,
901
- input ,
902
- input ,
903
- "argv" ,
904
- context ,
905
- ) ;
877
+ return parseInput ( placeholder , positional . parameter . parse , input , input , "argv" , context ) ;
906
878
} ) ,
907
879
) as Promise < PromiseSettledOrElseResult < ARGS > > ;
908
880
} else {
@@ -912,7 +884,7 @@ export function buildArgumentScanner<FLAGS extends BaseFlags, ARGS extends BaseA
912
884
const input = positionalInputs [ i ] ;
913
885
if ( typeof input !== "string" ) {
914
886
if ( typeof param . default === "string" ) {
915
- return ArgumentParseError . parseInput (
887
+ return parseInput (
916
888
placeholder ,
917
889
param . parse ,
918
890
param . default ,
@@ -926,7 +898,7 @@ export function buildArgumentScanner<FLAGS extends BaseFlags, ARGS extends BaseA
926
898
}
927
899
throw new UnsatisfiedPositionalError ( placeholder ) ;
928
900
}
929
- return ArgumentParseError . parseInput ( placeholder , param . parse , input , input , "argv" , context ) ;
901
+ return parseInput ( placeholder , param . parse , input , input , "argv" , context ) ;
930
902
} ) ,
931
903
) as Promise < PromiseSettledOrElseResult < ARGS > > ;
932
904
}
0 commit comments