webpack-merge
Advanced tools
Comparing version 0.6.0 to 0.7.0
@@ -0,1 +1,7 @@ | ||
0.7.0 / 2015-12-31 | ||
================== | ||
* Bug fix: Arrays get merged within nested structures correctly now. Array items are prepended (reverse order compared to earlier). This is related to the change made in *0.6.0*. Incidentally this change affects normal merge as well. | ||
* Smart merge: If a loader contains either `include` or `exclude`, it will generate separate entries instead of merging. Without this the configuration might change in an unpredictable manner. | ||
0.6.0 / 2015-12-30 | ||
@@ -2,0 +8,0 @@ ================== |
@@ -21,2 +21,6 @@ 'use strict'; | ||
if (foundLoader.include || foundLoader.exclude) { | ||
return [].concat(_toConsumableArray(mergedLoaderConfigs), [loaderConfig]); | ||
} | ||
foundLoader.loaders = newLoaders.reduce(function (mergedLoaders, loader) { | ||
@@ -34,3 +38,3 @@ var loaderName = loader.match(loaderNameRe)[0]; | ||
} else if (!foundLoader) { | ||
return [loaderConfig].concat(_toConsumableArray(mergedLoaderConfigs)); | ||
return [].concat(_toConsumableArray(mergedLoaderConfigs), [loaderConfig]); | ||
} | ||
@@ -49,7 +53,7 @@ | ||
return b.concat(a); | ||
return a.concat(b); | ||
} | ||
if (isPlainObject(a) && isPlainObject(b)) { | ||
return merge(a, b, joinArrays.bind(null, function () {})); | ||
return merge(a, b, joinArrays.bind(null, customizer)); | ||
} | ||
@@ -56,0 +60,0 @@ |
@@ -5,3 +5,3 @@ { | ||
"author": "Juho Vepsalainen <bebraw@gmail.com>", | ||
"version": "0.6.0", | ||
"version": "0.7.0", | ||
"scripts": { | ||
@@ -8,0 +8,0 @@ "build": "babel src -d lib", |
@@ -15,2 +15,6 @@ const isArray = Array.isArray; | ||
if (foundLoader.include || foundLoader.exclude) { | ||
return [...mergedLoaderConfigs, loaderConfig]; | ||
} | ||
foundLoader.loaders = newLoaders.reduce((mergedLoaders, loader) => { | ||
@@ -25,5 +29,4 @@ const loaderName = loader.match(loaderNameRe)[0]; | ||
}, foundLoader.loaders); | ||
} else if (!foundLoader) { | ||
return [loaderConfig, ...mergedLoaderConfigs]; | ||
return [...mergedLoaderConfigs, loaderConfig]; | ||
} | ||
@@ -42,7 +45,7 @@ | ||
return b.concat(a); | ||
return a.concat(b); | ||
} | ||
if (isPlainObject(a) && isPlainObject(b)) { | ||
return merge(a, b, joinArrays.bind(null, () => {})); | ||
return merge(a, b, joinArrays.bind(null, customizer)); | ||
} | ||
@@ -49,0 +52,0 @@ |
249
test.js
@@ -45,6 +45,12 @@ /* eslint-env mocha */ | ||
}]; | ||
const c = { | ||
const result = { | ||
module: {} | ||
}; | ||
c.module[loadersKey] = [{ | ||
result.module[loadersKey] = [{ | ||
test: /\.css$/, | ||
loader: 'b' | ||
}, { | ||
test: /\.sass$/, | ||
loader: 'b' | ||
}, { | ||
test: /\.js$/, | ||
@@ -55,11 +61,5 @@ loader: 'a' | ||
loader: 'a' | ||
}, { | ||
test: /\.css$/, | ||
loader: 'b' | ||
}, { | ||
test: /\.sass$/, | ||
loader: 'b' | ||
}]; | ||
assert.deepEqual(merge(a, b), c); | ||
assert.deepEqual(merge(a, b), result); | ||
}); | ||
@@ -81,8 +81,5 @@ | ||
}]; | ||
const c = {}; | ||
c[loadersKey] = [{ | ||
const result = {}; | ||
result[loadersKey] = [{ | ||
test: /\.js$/, | ||
loader: 'a' | ||
}, { | ||
test: /\.js$/, | ||
loader: 'b' | ||
@@ -92,5 +89,8 @@ }, { | ||
loader: 'b' | ||
}, { | ||
test: /\.js$/, | ||
loader: 'a' | ||
}]; | ||
assert.deepEqual(merge(a, b), c); | ||
assert.deepEqual(merge(a, b), result); | ||
}); | ||
@@ -112,8 +112,5 @@ | ||
}]; | ||
const c = {}; | ||
c[loadersKey] = [{ | ||
const result = {}; | ||
result[loadersKey] = [{ | ||
test: /\.js$/, | ||
loaders: ['a'] | ||
}, { | ||
test: /\.js$/, | ||
loaders: ['b'] | ||
@@ -123,5 +120,8 @@ }, { | ||
loader: 'b' | ||
}, { | ||
test: /\.js$/, | ||
loaders: ['a'] | ||
}]; | ||
assert.deepEqual(merge(a, b), c); | ||
assert.deepEqual(merge(a, b), result); | ||
}); | ||
@@ -140,12 +140,12 @@ | ||
}]; | ||
const c = {}; | ||
c[loadersKey] = [{ | ||
const result = {}; | ||
result[loadersKey] = [{ | ||
test: /\.js$/, | ||
loaders: ['a'] | ||
loaders: ['a', 'b'] | ||
}, { | ||
test: /\.js$/, | ||
loaders: ['a', 'b'] | ||
loaders: ['a'] | ||
}]; | ||
assert.deepEqual(merge(a, b), c); | ||
assert.deepEqual(merge(a, b), result); | ||
}); | ||
@@ -169,6 +169,6 @@ | ||
}]; | ||
const d = {}; | ||
d[loadersKey] = [{ | ||
const result = {}; | ||
result[loadersKey] = [{ | ||
test: /\.js$/, | ||
loaders: ['a?1'] | ||
loaders: ['a', 'b?3'] | ||
}, { | ||
@@ -179,6 +179,6 @@ test: /\.js$/, | ||
test: /\.js$/, | ||
loaders: ['a', 'b?3'] | ||
loaders: ['a?1'] | ||
}]; | ||
assert.deepEqual(merge(a, b, c), d); | ||
assert.deepEqual(merge(a, b, c), result); | ||
}); | ||
@@ -194,4 +194,4 @@ } | ||
}]; | ||
const b = {}; | ||
b[loadersKey] = [{ | ||
const result = {}; | ||
result[loadersKey] = [{ | ||
test: /\.js$/, | ||
@@ -204,3 +204,3 @@ loader: 'b' | ||
assert.deepEqual(merge(a, b), b); | ||
assert.deepEqual(merge(a, result), result); | ||
}); | ||
@@ -222,4 +222,4 @@ | ||
}]; | ||
const c = {}; | ||
c[loadersKey] = [{ | ||
const result = {}; | ||
result[loadersKey] = [{ | ||
test: /\.js$/, | ||
@@ -236,3 +236,3 @@ // loaders are evaluated from right to left so it makes sense to | ||
assert.deepEqual(merge(a, b), c); | ||
assert.deepEqual(merge(a, b), result); | ||
}); | ||
@@ -254,4 +254,4 @@ | ||
}]; | ||
const c = {}; | ||
c[loadersKey] = [{ | ||
const result = {}; | ||
result[loadersKey] = [{ | ||
test: /\.js$/, | ||
@@ -268,3 +268,3 @@ // loaders are evaluated from right to left so it makes sense to | ||
assert.deepEqual(merge(a, b), c); | ||
assert.deepEqual(merge(a, b), result); | ||
}); | ||
@@ -283,4 +283,4 @@ | ||
}]; | ||
const c = {}; | ||
c[loadersKey] = [{ | ||
const result = {}; | ||
result[loadersKey] = [{ | ||
test: /\.js$/, | ||
@@ -290,3 +290,3 @@ loaders: ['a', 'b'] | ||
assert.deepEqual(merge(a, b), c); | ||
assert.deepEqual(merge(a, b), result); | ||
}); | ||
@@ -310,4 +310,4 @@ | ||
}]; | ||
const d = {}; | ||
d[loadersKey] = [{ | ||
const result = {}; | ||
result[loadersKey] = [{ | ||
test: /\.js$/, | ||
@@ -317,4 +317,132 @@ loaders: ['a', 'b?3'] | ||
assert.deepEqual(merge(a, b, c), d); | ||
assert.deepEqual(merge(a, b, c), result); | ||
}); | ||
it('should merge module.loaders for ' + loadersKey, function () { | ||
const common = { | ||
module: {} | ||
}; | ||
common.module[loadersKey] = [ | ||
{ | ||
test: /\.jsx?$/, | ||
loaders: ['eslint'] | ||
} | ||
]; | ||
const isparta = { | ||
module: {} | ||
}; | ||
isparta.module[loadersKey] = [ | ||
{ | ||
test: /\.jsx?$/, | ||
loaders: ['isparta-instrumenter'] | ||
} | ||
]; | ||
const result = { | ||
module: {} | ||
}; | ||
result.module[loadersKey] = [ | ||
{ | ||
test: /\.jsx?$/, | ||
loaders: ['isparta-instrumenter', 'eslint'] | ||
} | ||
]; | ||
assert.deepEqual(merge(common, isparta), result); | ||
}); | ||
it('should not merge if a loader has include for ' + loadersKey, function () { | ||
// these shouldn't be merged because `include` is defined. | ||
// instead, it should prepend to guarantee sane evaluation order | ||
const common = { | ||
module: {} | ||
}; | ||
common.module[loadersKey] = [ | ||
{ | ||
test: /\.jsx?$/, | ||
loaders: ['eslint'], | ||
include: [ | ||
'foo', | ||
'bar' | ||
] | ||
} | ||
]; | ||
const isparta = { | ||
module: {} | ||
}; | ||
isparta.module[loadersKey] = [ | ||
{ | ||
test: /\.jsx?$/, | ||
loaders: ['isparta-instrumenter'], | ||
include: 'baz' | ||
} | ||
]; | ||
const result = { | ||
module: {} | ||
}; | ||
result.module[loadersKey] = [ | ||
{ | ||
test: /\.jsx?$/, | ||
loaders: ['isparta-instrumenter'], | ||
include: 'baz' | ||
}, | ||
{ | ||
test: /\.jsx?$/, | ||
loaders: ['eslint'], | ||
include: [ | ||
'foo', | ||
'bar' | ||
] | ||
} | ||
]; | ||
assert.deepEqual(merge(common, isparta), result); | ||
}); | ||
it('should not merge if a loader has exclude for ' + loadersKey, function () { | ||
// these shouldn't be merged because `exclude` is defined. | ||
// instead, it should prepend to guarantee sane evaluation order | ||
const common = { | ||
module: {} | ||
}; | ||
common.module[loadersKey] = [ | ||
{ | ||
test: /\.jsx?$/, | ||
loaders: ['eslint'], | ||
exclude: [ | ||
'foo', | ||
'bar' | ||
] | ||
} | ||
]; | ||
const isparta = { | ||
module: {} | ||
}; | ||
isparta.module[loadersKey] = [ | ||
{ | ||
test: /\.jsx?$/, | ||
loaders: ['isparta-instrumenter'], | ||
exclude: 'baz' | ||
} | ||
]; | ||
const result = { | ||
module: {} | ||
}; | ||
result.module[loadersKey] = [ | ||
{ | ||
test: /\.jsx?$/, | ||
loaders: ['isparta-instrumenter'], | ||
exclude: 'baz' | ||
}, | ||
{ | ||
test: /\.jsx?$/, | ||
loaders: ['eslint'], | ||
exclude: [ | ||
'foo', | ||
'bar' | ||
] | ||
} | ||
]; | ||
assert.deepEqual(merge(common, isparta), result); | ||
}); | ||
} | ||
@@ -333,6 +461,7 @@ | ||
}; | ||
const result = { | ||
foo: ['c', 'b', 'a'] | ||
}; | ||
assert.deepEqual(merge(a, b, c), { | ||
foo: ['a', 'b', 'c'] | ||
}); | ||
assert.deepEqual(merge(a, b, c), result); | ||
}); | ||
@@ -344,7 +473,7 @@ | ||
}; | ||
const b = { | ||
const result = { | ||
foo: 'b' | ||
}; | ||
assert.deepEqual(merge(a, b), b); | ||
assert.deepEqual(merge(a, result), result); | ||
}); | ||
@@ -359,6 +488,7 @@ | ||
}; | ||
const result = { | ||
foo: ['b', 'a'] | ||
}; | ||
assert.deepEqual(merge(a, b), { | ||
foo: ['a', 'b'] | ||
}); | ||
assert.deepEqual(merge(a, b), result); | ||
}); | ||
@@ -373,2 +503,5 @@ | ||
}; | ||
const result = { | ||
foo: ['b', 'a'] | ||
}; | ||
@@ -378,5 +511,3 @@ // this should not mutate | ||
assert.deepEqual(merge(a, b), { | ||
foo: ['a', 'b'] | ||
}); | ||
assert.deepEqual(merge(a, b), result); | ||
}); | ||
@@ -391,8 +522,8 @@ | ||
}; | ||
const c = { | ||
const result = { | ||
foo: 'c' | ||
}; | ||
assert.deepEqual(merge(a, b, c), c); | ||
assert.deepEqual(merge(a, b, result), result); | ||
}); | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
529463
6505