From bae66feee45cb59241facc978c8fdd2bb4d4c751 Mon Sep 17 00:00:00 2001 From: Peter Hedenskog Date: Fri, 13 Sep 2019 01:55:54 +0200 Subject: [PATCH] fix: support merging deeply nested configuration (#1423) --- lib/apply-extends.js | 2 +- test/fixtures/extends/config_deep_2.json | 7 +++++++ test/yargs.js | 17 +++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/extends/config_deep_2.json diff --git a/lib/apply-extends.js b/lib/apply-extends.js index 20ded5e07..643c91335 100644 --- a/lib/apply-extends.js +++ b/lib/apply-extends.js @@ -56,7 +56,7 @@ function applyExtends (config, cwd, mergeExtends) { defaultConfig = isPath ? JSON.parse(fs.readFileSync(pathToDefault, 'utf8')) : require(config.extends) delete config.extends - defaultConfig = applyExtends(defaultConfig, path.dirname(pathToDefault)) + defaultConfig = applyExtends(defaultConfig, path.dirname(pathToDefault), mergeExtends) } previouslyVisitedConfigs = [] diff --git a/test/fixtures/extends/config_deep_2.json b/test/fixtures/extends/config_deep_2.json new file mode 100644 index 000000000..88c98258b --- /dev/null +++ b/test/fixtures/extends/config_deep_2.json @@ -0,0 +1,7 @@ +{ + "extends": "./config_deep.json", + "a": { + "b": 12, + "g": 1 + } +} diff --git a/test/yargs.js b/test/yargs.js index fcdd66941..795f1dcae 100644 --- a/test/yargs.js +++ b/test/yargs.js @@ -1402,6 +1402,23 @@ describe('yargs dsl tests', () => { argv.test.yes.should.equal(1) }) + it('deep merges multiple configs when extending when deep-merge-config=true', () => { + const argv = yargs() + .parserConfiguration({ 'deep-merge-config': true }) + .config({ + extends: './test/fixtures/extends/config_deep_2.json', + a: { + g: 3 + } + }) + .parse() + + argv.test.yes.should.equal(1) + argv.a.b.should.equal(12) + argv.a.c.should.equal(12) + argv.a.g.should.equal(3) + }) + it('does not deep merge objects by default', () => { const argv = yargs() .config({