@@ -114,6 +114,8 @@ const validateOptions = (flag: OptionFlag<any>, input: string): string => {
114114 return input
115115}
116116
117+ const NEGATION = '--no-'
118+
117119export class Parser <
118120 T extends ParserInput ,
119121 TFlags extends OutputFlags < T [ 'flags' ] > ,
@@ -397,15 +399,19 @@ export class Parser<
397399 if ( tokenLength ) {
398400 // boolean
399401 if ( fws . inputFlag . flag . type === 'boolean' && last ( fws . tokens ) ?. input ) {
402+ const doesNotContainNegation = ( i : FlagWithStrategy ) => {
403+ const possibleNegations = [ i . inputFlag . name , ...( i . inputFlag . flag . aliases ?? [ ] ) ] . map (
404+ ( n ) => `${ NEGATION } ${ n } ` ,
405+ )
406+ const input = last ( i . tokens ) ?. input
407+ if ( ! input ) return true
408+ return ! possibleNegations . includes ( input )
409+ }
410+
400411 return {
401412 ...fws ,
402413 valueFunction : async ( i ) =>
403- parseFlagOrThrowError (
404- last ( i . tokens ) ?. input !== `--no-${ i . inputFlag . name } ` ,
405- i . inputFlag . flag ,
406- this . context ,
407- last ( i . tokens ) ,
408- ) ,
414+ parseFlagOrThrowError ( doesNotContainNegation ( i ) , i . inputFlag . flag , this . context , last ( i . tokens ) ) ,
409415 }
410416 }
411417
@@ -652,9 +658,14 @@ export class Parser<
652658 return this . flagAliases [ name ] . name
653659 }
654660
655- if ( arg . startsWith ( '--no-' ) ) {
656- const flag = this . booleanFlags [ arg . slice ( 5 ) ]
661+ if ( arg . startsWith ( NEGATION ) ) {
662+ const flag = this . booleanFlags [ arg . slice ( NEGATION . length ) ]
657663 if ( flag && flag . allowNo ) return flag . name
664+
665+ const flagAlias = this . flagAliases [ arg . slice ( NEGATION . length ) ]
666+ if ( flagAlias && flagAlias . type === 'boolean' && flagAlias . allowNo ) {
667+ return flagAlias . name
668+ }
658669 }
659670 }
660671
0 commit comments