UNPKG

931 BJavaScriptView Raw
1"use strict"
2
3// FROM lodash
4function isObject(value) {
5 // We do not want to deep merge a function
6 //return type == "function" || (!!value && type == "object")
7 return (!!value && typeof(value) === "object")
8}
9
10function deepMerge(...args) {
11 let target = args[0],
12 len = args.length,
13 i = 0
14
15 while (++i < len) {
16 let provider = args[i],
17 allKeys = Object.getOwnPropertySymbols(provider).concat(Object.keys(provider)),
18 allKeysLen = allKeys.length,
19 j = -1
20
21 while (++j < allKeysLen) {
22 let key = allKeys[j],
23 targetVal = target[key],
24 providerVal = provider[key]
25
26 if (Object.prototype.hasOwnProperty.call(target, key) && isObject(targetVal) && isObject(providerVal)) {
27 deepMerge(targetVal, providerVal)
28 } else {
29 target[key] = providerVal
30 }
31 }
32 }
33
34 return target
35}
36
37module.exports = deepMerge