From 367cbf876bad7c389a462409c1cb1481c7b61804 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Mon, 21 Mar 2022 13:02:49 +0100 Subject: [PATCH] fix: avoid double merging of layers resolves nuxt/framework#3800 --- src/loader.ts | 23 ++++++++++++----------- test/fixture/base/config.ts | 3 ++- test/fixture/config.ts | 3 ++- test/index.test.ts | 15 ++++++++++----- 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/loader.ts b/src/loader.ts index 868fcf2..e3bcb40 100644 --- a/src/loader.ts +++ b/src/loader.ts @@ -95,20 +95,10 @@ export async function loadConfig (opts: LoadC configRC ) as T - // Preserve unmerged sources - const baseLayers = [ - opts.overrides && { config: opts.overrides, configFile: undefined, cwd: undefined }, - { config, configFile: opts.configFile, cwd: opts.cwd }, - opts.rcFile && { config: configRC, configFile: opts.rcFile } - ].filter(l => l && l.config) - // Allow extending if (opts.extend) { await extendConfig(r.config, opts) - r.layers = [ - ...baseLayers, - ...r.config._layers - ] + r.layers = r.config._layers delete r.config._layers r.config = defu( r.config, @@ -116,6 +106,17 @@ export async function loadConfig (opts: LoadC ) as T } + // Preserve unmerged sources as layers + const baseLayers = [ + opts.overrides && { config: opts.overrides, configFile: undefined, cwd: undefined }, + { config, configFile: opts.configFile, cwd: opts.cwd }, + opts.rcFile && { config: configRC, configFile: opts.rcFile } + ].filter(l => l && l.config) as ConfigLayer[] + r.layers = [ + ...baseLayers, + ...r.layers + ] + // Apply defaults if (opts.defaults) { r.config = defu(r.config, opts.defaults) as T diff --git a/test/fixture/base/config.ts b/test/fixture/base/config.ts index 1cb2528..ea5ecf9 100644 --- a/test/fixture/base/config.ts +++ b/test/fixture/base/config.ts @@ -3,5 +3,6 @@ export default { colors: { primary: 'base_primary', text: 'base_text' - } + }, + array: ['b'] } diff --git a/test/fixture/config.ts b/test/fixture/config.ts index 7e0721d..f1852c7 100644 --- a/test/fixture/config.ts +++ b/test/fixture/config.ts @@ -7,5 +7,6 @@ export default { primary: 'user_primary' }, configFile: true, - overriden: false + overriden: false, + array: ['a'] } diff --git a/test/index.test.ts b/test/index.test.ts index 7e91daf..3d4dc74 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -27,6 +27,10 @@ describe('c12', () => { expect(transformPaths(config)).toMatchInlineSnapshot(` { + "array": [ + "b", + "a", + ], "baseConfig": true, "colors": { "primary": "user_primary", @@ -36,11 +40,6 @@ describe('c12', () => { "configFile": true, "defaultConfig": true, "devConfig": true, - "extends": [ - "./theme", - "./config.dev", - "virtual", - ], "overriden": true, "rcFile": true, "virtual": true, @@ -59,6 +58,9 @@ describe('c12', () => { }, { "config": { + "array": [ + "a", + ], "colors": { "primary": "user_primary", }, @@ -90,6 +92,9 @@ describe('c12', () => { }, { "config": { + "array": [ + "b", + ], "baseConfig": true, "colors": { "primary": "base_primary",