angular-cli-builders
Version:
A set of additional builders for angular-cli
52 lines • 1.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const webpackMerge = require("webpack-merge");
const lodash_1 = require("lodash");
const joinArrays = require('webpack-merge/lib/join-arrays');
class WebpackConfigMerger {
static merge(webpackConfig1, webpackConfig2, mergeStrategies = {}, replacePlugins = false) {
return webpackMerge({
customizeArray: replacePlugins ? mergeReplacePlugins(customizeArray(mergeStrategies)) : customizeArray(mergeStrategies),
customizeObject: customizeObject(mergeStrategies)
})(webpackConfig1, webpackConfig2);
}
}
exports.WebpackConfigMerger = WebpackConfigMerger;
function mergeReplacePlugins(defaultArrayMerger) {
return (a, b, key) => {
let plugins;
if (key === 'plugins') {
const aExceptb = lodash_1.differenceWith(a, b, (item1, item2) => item1.constructor.name === item2.constructor.name);
plugins = [...aExceptb, ...b];
}
else {
plugins = defaultArrayMerger(a, b, key);
}
return plugins;
};
}
function customizeArray(strategies) {
return (a, b, key) => {
switch (strategies[key]) {
case 'prepend':
return [...b, ...a];
case 'replace':
return b;
default: // append
return undefined;
}
};
}
function customizeObject(strategies) {
return (a, b, key) => {
switch (strategies[key]) {
case 'prepend':
return lodash_1.mergeWith({}, b, a, joinArrays());
case 'replace':
return b;
default: // append
return undefined;
}
};
}
//# sourceMappingURL=webpack-config-merger.js.map