@@ -312,17 +312,32 @@ function camelcase(str) {
312312function splitOptionFlags ( flags ) {
313313 let shortFlag ;
314314 let longFlag ;
315- // Use original very loose parsing to maintain backwards compatibility for now,
316- // which allowed for example unintended `-sw, --short-word` [sic].
317- const flagParts = flags . split ( / [ | , ] + / ) ;
318- if ( flagParts . length > 1 && ! / ^ [ [ < ] / . test ( flagParts [ 1 ] ) )
319- shortFlag = flagParts . shift ( ) ;
320- longFlag = flagParts . shift ( ) ;
321- // Add support for lone short flag without significantly changing parsing!
322- if ( ! shortFlag && / ^ - [ ^ - ] $ / . test ( longFlag ) ) {
323- shortFlag = longFlag ;
324- longFlag = undefined ;
325- }
315+ // short flag, single dash and single character
316+ const shortFlagExp = / ^ - [ ^ - ] $ / ;
317+ // long flag, double dash and at least one character
318+ const longFlagExp = / ^ - - [ ^ - ] / ;
319+
320+ const flagParts = flags . split ( / [ | , ] + / ) . concat ( 'guard' ) ;
321+ if ( shortFlagExp . test ( flagParts [ 0 ] ) ) shortFlag = flagParts . shift ( ) ;
322+ if ( longFlagExp . test ( flagParts [ 0 ] ) ) longFlag = flagParts . shift ( ) ;
323+
324+ // Check for some unsupported flags that people try.
325+ if ( / ^ - [ ^ - ] [ ^ - ] / . test ( flagParts [ 0 ] ) )
326+ throw new Error (
327+ `invalid Option flags, short option is dash and single character: '${ flags } '` ,
328+ ) ;
329+ if ( shortFlag && shortFlagExp . test ( flagParts [ 0 ] ) )
330+ throw new Error (
331+ `invalid Option flags, more than one short flag: '${ flags } '` ,
332+ ) ;
333+ if ( longFlag && longFlagExp . test ( flagParts [ 0 ] ) )
334+ throw new Error (
335+ `invalid Option flags, more than one long flag: '${ flags } '` ,
336+ ) ;
337+ // Generic error if failed to find a flag or an unexpected flag left over.
338+ if ( ! ( shortFlag || longFlag ) || flagParts [ 0 ] . startsWith ( '-' ) )
339+ throw new Error ( `invalid Option flags: '${ flags } '` ) ;
340+
326341 return { shortFlag, longFlag } ;
327342}
328343
0 commit comments