From 237117cd8d91a98f2a5bf1bc30a5afdf50cea6ec Mon Sep 17 00:00:00 2001 From: herecydev Date: Thu, 16 Mar 2017 08:59:54 +0000 Subject: [PATCH] Added merge multiple that outputs an array --- src/index.js | 5 +- tests/merge-multiple-tests.js | 114 ++++++++++++++++++++++++++++++++++ tests/test-merge-multiple.js | 10 +++ 3 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 tests/merge-multiple-tests.js create mode 100644 tests/test-merge-multiple.js diff --git a/src/index.js b/src/index.js index 8b79c30..3bcccf9 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,5 @@ import { - differenceWith, mergeWith, unionWith + differenceWith, mergeWith, unionWith, values } from 'lodash'; import joinArrays from './join-arrays'; import { uniteRules } from './join-arrays-smart'; @@ -41,6 +41,8 @@ const mergeSmart = merge({ } }); +const mergeMultiple = (...sources) => values(merge(sources)); + // rules: { : <'append'|'prepend'|'replace'> } // All default to append but you can override here const mergeStrategy = (rules = {}) => merge({ @@ -103,6 +105,7 @@ function isRule(key) { } module.exports = merge; +module.exports.multiple = mergeMultiple; module.exports.smart = mergeSmart; module.exports.strategy = mergeStrategy; module.exports.smartStrategy = mergeSmartStrategy; diff --git a/tests/merge-multiple-tests.js b/tests/merge-multiple-tests.js new file mode 100644 index 0000000..a362af3 --- /dev/null +++ b/tests/merge-multiple-tests.js @@ -0,0 +1,114 @@ +/* eslint-env mocha */ +const assert = require('assert'); + +function multipleTests(merge) { + it('should override objects', function () { + const a = { + client: { + entry: './client.js' + } + }; + const b = { + client: { + entry: './replaced.js' + } + }; + const result = [ + { + entry: './replaced.js' + } + ]; + + assert.deepEqual(merge(a, b), result); + }); + + it('should add new objects if not existing', function () { + const a = { + client: { + entry: './client.js' + }, + server: { + entry: './server.js', + } + }; + const b = { + client: { + entry: './replaced.js' + } + }; + const result = [ + { + entry: './replaced.js' + }, + { + entry: './server.js' + } + ]; + + assert.deepEqual(merge(a, b), result); + }); + + it('should work with an array of objects', function () { + const a = { + client: { + entry: ['./client.js', './client2.js'] + }, + server: { + entry: ['./server.js', './server2.js'] + } + }; + const b = { + client: { + entry: ['./replaced.js', './replaced2.js'] + } + }; + const result = [ + { + entry: ['./client.js', './client2.js', './replaced.js', './replaced2.js'] + }, + { + entry: ['./server.js', './server2.js'] + } + ]; + + assert.deepEqual(merge(a, b), result); + }); + + it('should deeply merge objects', function () { + const a = { + client: { + entry: { + main: './client.js' + } + }, + server: { + entry: { + main: './server.js' + } + } + }; + const b = { + client: { + entry: { + main: './replaced.js' + } + } + }; + const result = [ + { + entry: { + main: './replaced.js' + } + }, + { + entry: { + main: './server.js' + } + } + ]; + + assert.deepEqual(merge(a, b), result); + }); +} + +module.exports = multipleTests; \ No newline at end of file diff --git a/tests/test-merge-multiple.js b/tests/test-merge-multiple.js new file mode 100644 index 0000000..bd85c0a --- /dev/null +++ b/tests/test-merge-multiple.js @@ -0,0 +1,10 @@ +/* eslint-env mocha */ +const webpackMerge = require('..'); +const mergeMultipleTests = require('./merge-multiple-tests'); + +describe('Multiple merge', function () { + const merge = webpackMerge.multiple; + console.log(merge); + + mergeMultipleTests(merge); +});