From c474bc10c3aa0ae864b95e5722730114ef15f573 Mon Sep 17 00:00:00 2001 From: Kyle Herock Date: Tue, 19 Jul 2022 12:03:30 -0400 Subject: [PATCH] fix(halt-at-non-option): prevent known args from being parsed when "unknown-options-as-args" is enabled (#438) --- lib/yargs-parser.ts | 2 +- test/yargs-parser.cjs | 10 ++++++++++ 2 files changed, 11 insertions(+), 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(/^---+(=|$)/)) { 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 () {