Comparing version
@@ -0,1 +1,5 @@ | ||
# [1.1.0](https://github.com/KyleAMathews/deepmerge/releases/tag/v1.1.0) | ||
- allow consumers to specify their own array merging algorithm: [Pull request 37](https://github.com/KyleAMathews/deepmerge/pull/37) | ||
# [1.0.3](https://github.com/KyleAMathews/deepmerge/releases/tag/v1.0.3) | ||
@@ -2,0 +6,0 @@ |
70
index.js
@@ -19,40 +19,48 @@ (function (root, factory) { | ||
return function deepmerge(target, src) { | ||
var array = Array.isArray(src); | ||
var dst = array ? [] : {}; | ||
function defaultArrayMerge(target, source, optionsArgument) { | ||
var destination = target.slice() | ||
source.forEach(function(e, i) { | ||
if (typeof destination[i] === 'undefined') { | ||
destination[i] = e | ||
} else if (isMergeableObject(e)) { | ||
destination[i] = deepmerge(target[i], e, optionsArgument) | ||
} else if (target.indexOf(e) === -1) { | ||
destination.push(e) | ||
} | ||
}) | ||
return destination | ||
} | ||
function mergeObject(target, source, optionsArgument) { | ||
var destination = {} | ||
if (isMergeableObject(target)) { | ||
Object.keys(target).forEach(function (key) { | ||
destination[key] = target[key] | ||
}) | ||
} | ||
Object.keys(source).forEach(function (key) { | ||
if (!isMergeableObject(source[key]) || !target[key]) { | ||
destination[key] = source[key] | ||
} else { | ||
destination[key] = deepmerge(target[key], source[key], optionsArgument) | ||
} | ||
}) | ||
return destination | ||
} | ||
function deepmerge(target, source, optionsArgument) { | ||
var array = Array.isArray(source); | ||
var options = optionsArgument || { arrayMerge: defaultArrayMerge } | ||
var arrayMerge = options.arrayMerge || defaultArrayMerge | ||
if (array) { | ||
target = target || []; | ||
dst = dst.concat(target); | ||
src.forEach(function(e, i) { | ||
if (typeof dst[i] === 'undefined') { | ||
dst[i] = e; | ||
} else if (isMergeableObject(e)) { | ||
dst[i] = deepmerge(target[i], e); | ||
} else if (target.indexOf(e) === -1) { | ||
dst.push(e); | ||
} | ||
}); | ||
return arrayMerge(target, source, optionsArgument) | ||
} else { | ||
if (isMergeableObject(target)) { | ||
Object.keys(target).forEach(function (key) { | ||
dst[key] = target[key]; | ||
}) | ||
} | ||
Object.keys(src).forEach(function (key) { | ||
if (!isMergeableObject(src[key])) { | ||
dst[key] = src[key]; | ||
} else { | ||
if (!target[key]) { | ||
dst[key] = src[key]; | ||
} else { | ||
dst[key] = deepmerge(target[key], src[key]); | ||
} | ||
} | ||
}); | ||
return mergeObject(target, source, optionsArgument) | ||
} | ||
return dst; | ||
} | ||
return deepmerge | ||
})); |
@@ -13,3 +13,3 @@ { | ||
], | ||
"version": "1.0.3", | ||
"version": "1.1.0", | ||
"homepage": "https://github.com/KyleAMathews/deepmerge", | ||
@@ -22,3 +22,3 @@ "repository": { | ||
"engines": { | ||
"node": ">=0.4.0" | ||
"node": ">=0.10.0" | ||
}, | ||
@@ -25,0 +25,0 @@ "scripts": { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
14970
14.77%10
11.11%354
13.83%76
10.14%