From 5f149be15165e52c9ed70587d25f874033f20767 Mon Sep 17 00:00:00 2001 From: Kyle Herock Date: Sat, 26 Mar 2022 18:51:55 -0400 Subject: [PATCH 1/2] test(halt-at-non-option): add failing scenario for when `unknown-options-as-args` is also enabled --- test/yargs-parser.cjs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/yargs-parser.cjs b/test/yargs-parser.cjs index 97add48c..492e3b90 100644 --- a/test/yargs-parser.cjs +++ b/test/yargs-parser.cjs @@ -3008,6 +3008,16 @@ describe('yargs-parser', function () { _: ['./file.js', '--foo', '--', 'barbar'] }) }) + + it('is not influenced by unknown options when "unknown-options-as-args" is true', function () { + const parse = parser( + ['-v', '--long', 'arg', './file.js', '--foo', '--', 'barbar'], + { configuration: { 'halt-at-non-option': true, 'unknown-options-as-args': true }, boolean: ['foo'] } + ) + parse.should.deep.equal({ + _: ['-v', '--long', 'arg', './file.js', '--foo', '--', 'barbar'] + }) + }) }) describe('unknown-options-as-args = true', function () { From 7507bd87a55f9b50db97114599a69941b322ef78 Mon Sep 17 00:00:00 2001 From: Kyle Herock Date: Sat, 26 Mar 2022 19:02:03 -0400 Subject: [PATCH 2/2] fix(halt-at-non-option): prevent known args from being parsed when "unknown-options-as-args" is enabled --- lib/yargs-parser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/yargs-parser.ts b/lib/yargs-parser.ts index 5f776705..764ca64e 100644 --- a/lib/yargs-parser.ts +++ b/lib/yargs-parser.ts @@ -222,7 +222,7 @@ export class YargsParser { let value: string // any unknown option (except for end-of-options, "--") - if (arg !== '--' && isUnknownOptionAsArg(arg)) { + if (arg !== '--' && /^-/.test(arg) && isUnknownOptionAsArg(arg)) { pushPositional(arg) // ---, ---=, ----, etc, } else if (truncatedArg.match(/^---+(=|$)/)) {