7
7
8
8
'use strict' ;
9
9
10
- var utils = require ( './utils' ) ;
10
+ var union = require ( 'arr-union' ) ;
11
+ var clone = require ( 'clone-deep' ) ;
12
+ var typeOf = require ( 'kind-of' ) ;
11
13
12
14
module . exports = function mergeDeep ( orig , objects ) {
13
- if ( ! utils . isObject ( orig ) && ! Array . isArray ( orig ) ) {
15
+ if ( ! isObject ( orig ) && ! Array . isArray ( orig ) ) {
14
16
orig = { } ;
15
17
}
16
18
17
- var target = utils . clone ( orig ) ;
19
+ var target = clone ( orig ) ;
18
20
var len = arguments . length ;
19
21
var idx = 0 ;
20
22
21
23
while ( ++ idx < len ) {
22
24
var val = arguments [ idx ] ;
23
25
24
- if ( utils . isObject ( val ) || Array . isArray ( val ) ) {
26
+ if ( isObject ( val ) || Array . isArray ( val ) ) {
25
27
merge ( target , val ) ;
26
28
}
27
29
}
@@ -37,12 +39,12 @@ function merge(target, obj) {
37
39
var oldVal = obj [ key ] ;
38
40
var newVal = target [ key ] ;
39
41
40
- if ( utils . isObject ( newVal ) && utils . isObject ( oldVal ) ) {
42
+ if ( isObject ( newVal ) && isObject ( oldVal ) ) {
41
43
target [ key ] = merge ( newVal , oldVal ) ;
42
44
} else if ( Array . isArray ( newVal ) ) {
43
- target [ key ] = utils . union ( [ ] , newVal , oldVal ) ;
45
+ target [ key ] = union ( [ ] , newVal , oldVal ) ;
44
46
} else {
45
- target [ key ] = utils . clone ( oldVal ) ;
47
+ target [ key ] = clone ( oldVal ) ;
46
48
}
47
49
}
48
50
return target ;
@@ -51,3 +53,7 @@ function merge(target, obj) {
51
53
function hasOwn ( obj , key ) {
52
54
return Object . prototype . hasOwnProperty . call ( obj , key ) ;
53
55
}
56
+
57
+ function isObject ( val ) {
58
+ return typeOf ( val ) === 'object' || typeOf ( val ) === 'function' ;
59
+ }
0 commit comments