From 3fee2d895e9da14af978bbd1c7c9c20170c3aa59 Mon Sep 17 00:00:00 2001 From: Daniel Stockman Date: Tue, 15 Oct 2019 09:25:50 -0700 Subject: [PATCH] fix(unknown-options-as-args): '--' is not an unknown option (#207) --- index.js | 3 ++- test/yargs-parser.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 395f5fee..03dd1407 100644 --- a/index.js +++ b/index.js @@ -143,7 +143,8 @@ function parse (args, opts) { var next var value - if (isUnknownOptionAsArg(arg)) { + // any unknown option (except for end-of-options, "--") + if (arg !== '--' && isUnknownOptionAsArg(arg)) { argv._.push(arg) // -- separated by = } else if (arg.match(/^--.+=/) || ( diff --git a/test/yargs-parser.js b/test/yargs-parser.js index 349549b4..79ccf978 100644 --- a/test/yargs-parser.js +++ b/test/yargs-parser.js @@ -2894,6 +2894,36 @@ describe('yargs-parser', function () { k: true }) }) + + it('should not identify "--" as an unknown option', function () { + const argv = parser('-a -k one -1 -- -b -k two -2', { + boolean: ['k'], + configuration: { + 'unknown-options-as-args': true + } + }) + argv.should.deep.equal({ + _: ['-a', 'one', -1, '-b', '-k', 'two', '-2'], + k: true + }) + }) + + it('should not identify "--" as an unknown option when "populate--" is true', function () { + const argv = parser('-a -k one -1 -- -b -k two -2', { + boolean: ['k'], + configuration: { + 'populate--': true, + 'unknown-options-as-args': true + } + }) + argv.should.deep.equal({ + // populate argv._ with everything before the -- + _: ['-a', 'one', -1], + // and argv['--'] with everything after the -- + '--': ['-b', '-k', 'two', '-2'], + k: true + }) + }) }) })