diff options
Diffstat (limited to 'node_modules/webpack-merge/lib')
-rw-r--r-- | node_modules/webpack-merge/lib/index.js | 157 | ||||
-rw-r--r-- | node_modules/webpack-merge/lib/join-arrays-smart.js | 148 | ||||
-rw-r--r-- | node_modules/webpack-merge/lib/join-arrays.js | 67 | ||||
-rw-r--r-- | node_modules/webpack-merge/lib/unique.js | 27 | ||||
-rw-r--r-- | node_modules/webpack-merge/lib/unite-rules.js | 114 |
5 files changed, 513 insertions, 0 deletions
diff --git a/node_modules/webpack-merge/lib/index.js b/node_modules/webpack-merge/lib/index.js new file mode 100644 index 000000000..bd7298897 --- /dev/null +++ b/node_modules/webpack-merge/lib/index.js @@ -0,0 +1,157 @@ +'use strict'; + +var _values2 = require('lodash/values'); + +var _values3 = _interopRequireDefault(_values2); + +var _unionWith2 = require('lodash/unionWith'); + +var _unionWith3 = _interopRequireDefault(_unionWith2); + +var _mergeWith2 = require('lodash/mergeWith'); + +var _mergeWith3 = _interopRequireDefault(_mergeWith2); + +var _differenceWith2 = require('lodash/differenceWith'); + +var _differenceWith3 = _interopRequireDefault(_differenceWith2); + +var _joinArrays = require('./join-arrays'); + +var _joinArrays2 = _interopRequireDefault(_joinArrays); + +var _joinArraysSmart = require('./join-arrays-smart'); + +var _unique = require('./unique'); + +var _unique2 = _interopRequireDefault(_unique); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +function merge() { + for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) { + sources[_key] = arguments[_key]; + } + + // This supports + // merge([<object>] | ...<object>) + // merge({ customizeArray: <fn>, customizeObject: <fn>})([<object>] | ...<object>) + // where fn = (a, b, key) + if (sources.length === 1) { + if (Array.isArray(sources[0])) { + return _mergeWith3.default.apply(undefined, [{}].concat(_toConsumableArray(sources[0]), [(0, _joinArrays2.default)(sources[0])])); + } + + if (sources[0].customizeArray || sources[0].customizeObject) { + return function () { + for (var _len2 = arguments.length, structures = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + structures[_key2] = arguments[_key2]; + } + + if (Array.isArray(structures[0])) { + return _mergeWith3.default.apply(undefined, [{}].concat(_toConsumableArray(structures[0]), [(0, _joinArrays2.default)(sources[0])])); + } + + return _mergeWith3.default.apply(undefined, [{}].concat(structures, [(0, _joinArrays2.default)(sources[0])])); + }; + } + + return sources[0]; + } + + return _mergeWith3.default.apply(undefined, [{}].concat(sources, [(0, _joinArrays2.default)()])); +} + +var mergeSmart = merge({ + customizeArray: function customizeArray(a, b, key) { + if (isRule(key.split('.').slice(-1)[0])) { + return (0, _unionWith3.default)(a, b, _joinArraysSmart.uniteRules.bind(null, {}, key)); + } + + return null; + } +}); + +var mergeMultiple = function mergeMultiple() { + for (var _len3 = arguments.length, sources = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + sources[_key3] = arguments[_key3]; + } + + return (0, _values3.default)(merge(sources)); +}; + +// rules: { <field>: <'append'|'prepend'|'replace'> } +// All default to append but you can override here +var mergeStrategy = function mergeStrategy() { + var rules = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + return merge({ + customizeArray: _customizeArray(rules), + customizeObject: customizeObject(rules) + }); +}; +var mergeSmartStrategy = function mergeSmartStrategy() { + var rules = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + return merge({ + customizeArray: function customizeArray(a, b, key) { + var topKey = key.split('.').slice(-1)[0]; + + if (isRule(topKey)) { + switch (rules[key]) { + case 'prepend': + return [].concat(_toConsumableArray((0, _differenceWith3.default)(b, a, function (newRule, seenRule) { + return (0, _joinArraysSmart.uniteRules)(rules, key, newRule, seenRule, 'prepend'); + })), _toConsumableArray(a)); + case 'replace': + return b; + default: + // append + return (0, _unionWith3.default)(a, b, _joinArraysSmart.uniteRules.bind(null, rules, key)); + } + } + + return _customizeArray(rules)(a, b, key); + }, + customizeObject: customizeObject(rules) + }); +}; + +function _customizeArray(rules) { + return function (a, b, key) { + switch (rules[key]) { + case 'prepend': + return [].concat(_toConsumableArray(b), _toConsumableArray(a)); + case 'replace': + return b; + default: + // append + return false; + } + }; +} + +function customizeObject(rules) { + return function (a, b, key) { + switch (rules[key]) { + case 'prepend': + return (0, _mergeWith3.default)({}, b, a, (0, _joinArrays2.default)()); + case 'replace': + return b; + default: + // append + return false; + } + }; +} + +function isRule(key) { + return ['preLoaders', 'loaders', 'postLoaders', 'rules'].indexOf(key) >= 0; +} + +module.exports = merge; +module.exports.multiple = mergeMultiple; +module.exports.smart = mergeSmart; +module.exports.strategy = mergeStrategy; +module.exports.smartStrategy = mergeSmartStrategy; +module.exports.unique = _unique2.default;
\ No newline at end of file diff --git a/node_modules/webpack-merge/lib/join-arrays-smart.js b/node_modules/webpack-merge/lib/join-arrays-smart.js new file mode 100644 index 000000000..74dda9047 --- /dev/null +++ b/node_modules/webpack-merge/lib/join-arrays-smart.js @@ -0,0 +1,148 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.uniteEntries = exports.uniteRules = undefined; + +var _differenceWith2 = require('lodash/differenceWith'); + +var _differenceWith3 = _interopRequireDefault(_differenceWith2); + +var _unionWith2 = require('lodash/unionWith'); + +var _unionWith3 = _interopRequireDefault(_unionWith2); + +var _mergeWith2 = require('lodash/mergeWith'); + +var _mergeWith3 = _interopRequireDefault(_mergeWith2); + +var _isEqual2 = require('lodash/isEqual'); + +var _isEqual3 = _interopRequireDefault(_isEqual2); + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var isArray = Array.isArray; + +function uniteRules(rules, key, newRule, rule) { + if (String(rule.test) !== String(newRule.test) || (newRule.enforce || rule.enforce) && rule.enforce !== newRule.enforce || newRule.include && !isSameValue(rule.include, newRule.include) || newRule.exclude && !isSameValue(rule.exclude, newRule.exclude)) { + return false; + } else if (!rule.test && !rule.include && !rule.exclude && (rule.loader && rule.loader.split('?')[0]) !== (newRule.loader && newRule.loader.split('?')[0])) { + // Don't merge the rule if there isn't any identifying fields and the loaders don't match + return false; + } else if ((rule.include || rule.exclude) && !newRule.include && !newRule.exclude) { + // Don't merge child without include/exclude to parent that has either + return false; + } + + // newRule.loader should always override + if (newRule.loader) { + var optionsKey = newRule.options ? 'options' : newRule.query && 'query'; + + delete rule.use; + delete rule.loaders; + rule.loader = newRule.loader; + + if (optionsKey) { + rule[optionsKey] = newRule[optionsKey]; + } + } else if ((rule.use || rule.loaders || rule.loader) && (newRule.use || newRule.loaders)) { + var expandEntry = function expandEntry(loader) { + return typeof loader === 'string' ? { loader: loader } : loader; + }; + // this is only here to avoid breaking existing tests + var unwrapEntry = function unwrapEntry(entry) { + return !entry.options && !entry.query ? entry.loader : entry; + }; + + var entries = void 0; + if (rule.loader) { + var _optionsKey = rule.options ? 'options' : rule.query && 'query'; + entries = [{ loader: rule.loader }]; + + if (_optionsKey) { + entries[0][_optionsKey] = rule[_optionsKey]; + } + + delete rule.loader; + + if (_optionsKey) { + delete rule[_optionsKey]; + } + } else { + entries = [].concat(rule.use || rule.loaders).map(expandEntry); + } + var newEntries = [].concat(newRule.use || newRule.loaders).map(expandEntry); + + var loadersKey = rule.use || newRule.use ? 'use' : 'loaders'; + var resolvedKey = key + '.' + loadersKey; + + switch (rules[resolvedKey]) { + case 'prepend': + rule[loadersKey] = [].concat(_toConsumableArray((0, _differenceWith3.default)(newEntries, entries, uniteEntries)), _toConsumableArray(entries)).map(unwrapEntry); + break; + case 'replace': + rule[loadersKey] = newRule.use || newRule.loaders; + break; + default: + rule[loadersKey] = (0, _unionWith3.default)( + // Remove existing entries so that we can respect the order of the new + // entries + (0, _differenceWith3.default)(entries, newEntries, _isEqual3.default), newEntries, uniteEntries).map(unwrapEntry); + } + } + + if (newRule.include) { + rule.include = newRule.include; + } + + if (newRule.exclude) { + rule.exclude = newRule.exclude; + } + + return true; +} + +/** + * Check equality of two values using lodash's isEqual + * Arrays need to be sorted for equality checking + * but clone them first so as not to disrupt the sort order in tests + */ +function isSameValue(a, b) { + var _map = [a, b].map(function (value) { + return isArray(value) ? [].concat(_toConsumableArray(value)).sort() : value; + }), + _map2 = _slicedToArray(_map, 2), + propA = _map2[0], + propB = _map2[1]; + + return (0, _isEqual3.default)(propA, propB); +} + +function uniteEntries(newEntry, entry) { + var loaderNameRe = /^([^?]+)/ig; + + var _entry$loader$match = entry.loader.match(loaderNameRe), + _entry$loader$match2 = _slicedToArray(_entry$loader$match, 1), + loaderName = _entry$loader$match2[0]; + + var _newEntry$loader$matc = newEntry.loader.match(loaderNameRe), + _newEntry$loader$matc2 = _slicedToArray(_newEntry$loader$matc, 1), + newLoaderName = _newEntry$loader$matc2[0]; + + if (loaderName !== newLoaderName) { + return false; + } + + // Replace query values with newer ones + (0, _mergeWith3.default)(entry, newEntry); + return true; +} + +exports.uniteRules = uniteRules; +exports.uniteEntries = uniteEntries;
\ No newline at end of file diff --git a/node_modules/webpack-merge/lib/join-arrays.js b/node_modules/webpack-merge/lib/join-arrays.js new file mode 100644 index 000000000..3f2b378b7 --- /dev/null +++ b/node_modules/webpack-merge/lib/join-arrays.js @@ -0,0 +1,67 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _mergeWith2 = require('lodash/mergeWith'); + +var _mergeWith3 = _interopRequireDefault(_mergeWith2); + +var _isPlainObject2 = require('lodash/isPlainObject'); + +var _isPlainObject3 = _interopRequireDefault(_isPlainObject2); + +var _isFunction2 = require('lodash/isFunction'); + +var _isFunction3 = _interopRequireDefault(_isFunction2); + +var _cloneDeep2 = require('lodash/cloneDeep'); + +var _cloneDeep3 = _interopRequireDefault(_cloneDeep2); + +exports.default = joinArrays; + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var isArray = Array.isArray; + +function joinArrays() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + customizeArray = _ref.customizeArray, + customizeObject = _ref.customizeObject, + key = _ref.key; + + return function _joinArrays(a, b, k) { + var newKey = key ? key + '.' + k : k; + + if ((0, _isFunction3.default)(a) && (0, _isFunction3.default)(b)) { + return function () { + return _joinArrays(a.apply(undefined, arguments), b.apply(undefined, arguments), k); + }; + } + if (isArray(a) && isArray(b)) { + var customResult = customizeArray && customizeArray(a, b, newKey); + + return customResult || [].concat(_toConsumableArray(a), _toConsumableArray(b)); + } + + if ((0, _isPlainObject3.default)(a) && (0, _isPlainObject3.default)(b)) { + var _customResult = customizeObject && customizeObject(a, b, newKey); + + return _customResult || (0, _mergeWith3.default)({}, a, b, joinArrays({ + customizeArray: customizeArray, + customizeObject: customizeObject, + key: newKey + })); + } + + if ((0, _isPlainObject3.default)(b)) { + return (0, _cloneDeep3.default)(b); + } + + return b; + }; +}
\ No newline at end of file diff --git a/node_modules/webpack-merge/lib/unique.js b/node_modules/webpack-merge/lib/unique.js new file mode 100644 index 000000000..4d9992908 --- /dev/null +++ b/node_modules/webpack-merge/lib/unique.js @@ -0,0 +1,27 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _differenceWith2 = require('lodash/differenceWith'); + +var _differenceWith3 = _interopRequireDefault(_differenceWith2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +function mergeUnique(key, uniques) { + var getter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (a) { + return a; + }; + + return function (a, b, k) { + return k === key && [].concat(_toConsumableArray(a), _toConsumableArray((0, _differenceWith3.default)(b, a, function (item) { + return uniques.indexOf(getter(item)) >= 0; + }))); + }; +} + +exports.default = mergeUnique;
\ No newline at end of file diff --git a/node_modules/webpack-merge/lib/unite-rules.js b/node_modules/webpack-merge/lib/unite-rules.js new file mode 100644 index 000000000..a89b5f6d4 --- /dev/null +++ b/node_modules/webpack-merge/lib/unite-rules.js @@ -0,0 +1,114 @@ +'use strict'; + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var isEqual = require('lodash.isequal'); +var mergeWith = require('lodash.mergewith'); +var unionWith = require('lodash.unionwith'); +var differenceWith = require('lodash.differencewith'); + +var isArray = Array.isArray; + +module.exports = function uniteRules(newRule, rule, prepend) { + if (String(rule.test) !== String(newRule.test) || newRule.enforce && rule.enforce !== newRule.enforce || newRule.include && !isSameValue(rule.include, newRule.include) || newRule.exclude && !isSameValue(rule.exclude, newRule.exclude)) { + return false; + } + + // webpack 2 nested rules support + if (rule.rules) { + rule.rules = prepend ? [].concat(_toConsumableArray(differenceWith(newRule.rules, rule.rules, function (b, a) { + return uniteRules(b, a, true); + })), _toConsumableArray(rule.rules)) : unionWith(rule.rules, newRule.rules, uniteRules); + } + + // newRule.loader should always override + if (newRule.loader) { + var optionsKey = newRule.options ? 'options' : newRule.query && 'query'; + + delete rule.use; + delete rule.loaders; + rule.loader = newRule.loader; + + if (optionsKey) { + rule[optionsKey] = newRule[optionsKey]; + } + } else if ((rule.use || rule.loaders || rule.loader) && (newRule.use || newRule.loaders)) { + var expandEntry = function expandEntry(loader) { + return typeof loader === 'string' ? { loader: loader } : loader; + }; + // this is only here to avoid breaking existing tests + var unwrapEntry = function unwrapEntry(entry) { + return !entry.options && !entry.query ? entry.loader : entry; + }; + + var entries = void 0; + if (rule.loader) { + var _optionsKey = rule.options ? 'options' : rule.query && 'query'; + entries = [{ loader: rule.loader }]; + + if (_optionsKey) { + entries[0][_optionsKey] = rule[_optionsKey]; + } + + delete rule.loader; + + if (_optionsKey) { + delete rule[_optionsKey]; + } + } else { + entries = [].concat(rule.use || rule.loaders).map(expandEntry); + } + var newEntries = [].concat(newRule.use || newRule.loaders).map(expandEntry); + + var loadersKey = rule.use || newRule.use ? 'use' : 'loaders'; + rule[loadersKey] = prepend ? [].concat(_toConsumableArray(differenceWith(newEntries, entries, uniteEntries)), _toConsumableArray(entries)).map(unwrapEntry) : unionWith(entries, newEntries, uniteEntries).map(unwrapEntry); + } + + if (newRule.include) { + rule.include = newRule.include; + } + + if (newRule.exclude) { + rule.exclude = newRule.exclude; + } + + return true; +}; + +/** + * Check equality of two values using lodash's isEqual + * Arrays need to be sorted for equality checking + * but clone them first so as not to disrupt the sort order in tests + */ +function isSameValue(a, b) { + var _map = [a, b].map(function (value) { + return isArray(value) ? [].concat(_toConsumableArray(value)).sort() : value; + }), + _map2 = _slicedToArray(_map, 2), + propA = _map2[0], + propB = _map2[1]; + + return isEqual(propA, propB); +} + +function uniteEntries(newEntry, entry) { + var loaderNameRe = /^([^?]+)/ig; + + var _entry$loader$match = entry.loader.match(loaderNameRe), + _entry$loader$match2 = _slicedToArray(_entry$loader$match, 1), + loaderName = _entry$loader$match2[0]; + + var _newEntry$loader$matc = newEntry.loader.match(loaderNameRe), + _newEntry$loader$matc2 = _slicedToArray(_newEntry$loader$matc, 1), + newLoaderName = _newEntry$loader$matc2[0]; + + if (loaderName !== newLoaderName) { + return false; + } + + // Replace query values with newer ones + mergeWith(entry, newEntry); + return true; +}
\ No newline at end of file |