1
+ ( function ( global , factory ) {
2
+ if ( typeof define === "function" && define . amd ) {
3
+ define ( [ 'module' , 'exports' , '../utils' ] , factory ) ;
4
+ } else if ( typeof exports !== "undefined" ) {
5
+ factory ( module , exports , require ( '../utils' ) ) ;
6
+ } else {
7
+ var mod = {
8
+ exports : { }
9
+ } ;
10
+ factory ( mod , mod . exports , global . utils ) ;
11
+ global . index = mod . exports ;
12
+ }
13
+ } ) ( this , function ( module , exports , _utils ) {
14
+ 'use strict' ;
15
+
16
+ Object . defineProperty ( exports , "__esModule" , {
17
+ value : true
18
+ } ) ;
19
+
20
+ function _defineProperty ( obj , key , value ) {
21
+ if ( key in obj ) {
22
+ Object . defineProperty ( obj , key , {
23
+ value : value ,
24
+ enumerable : true ,
25
+ configurable : true ,
26
+ writable : true
27
+ } ) ;
28
+ } else {
29
+ obj [ key ] = value ;
30
+ }
31
+
32
+ return obj ;
33
+ }
34
+
35
+ var _extends = Object . assign || function ( target ) {
36
+ for ( var i = 1 ; i < arguments . length ; i ++ ) {
37
+ var source = arguments [ i ] ;
38
+
39
+ for ( var key in source ) {
40
+ if ( Object . prototype . hasOwnProperty . call ( source , key ) ) {
41
+ target [ key ] = source [ key ] ;
42
+ }
43
+ }
44
+ }
45
+
46
+ return target ;
47
+ } ;
48
+
49
+ var diff = function diff ( lhs , rhs ) {
50
+ if ( lhs === rhs ) return { } ; // equal return no diff
51
+
52
+ if ( ! ( 0 , _utils . isObject ) ( lhs ) || ! ( 0 , _utils . isObject ) ( rhs ) ) return rhs ; // return updated rhs
53
+
54
+ var l = ( 0 , _utils . properObject ) ( lhs ) ;
55
+ var r = ( 0 , _utils . properObject ) ( rhs ) ;
56
+
57
+ var deletedValues = Object . keys ( l ) . reduce ( function ( acc , key ) {
58
+ return r . hasOwnProperty ( key ) ? acc : _extends ( { } , acc , _defineProperty ( { } , key , undefined ) ) ;
59
+ } , { } ) ;
60
+
61
+ if ( ( 0 , _utils . isDate ) ( l ) || ( 0 , _utils . isDate ) ( r ) ) {
62
+ if ( l . valueOf ( ) == r . valueOf ( ) ) return { } ;
63
+ return r ;
64
+ }
65
+
66
+ if ( Array . isArray ( r ) && Array . isArray ( l ) ) {
67
+ var _deletedValues = l . reduce ( function ( acc , item , index ) {
68
+ return r . hasOwnProperty ( index ) ? acc . concat ( item ) : acc . concat ( undefined ) ;
69
+ } , [ ] ) ;
70
+
71
+ return r . reduce ( function ( acc , rightItem , index ) {
72
+ if ( ! _deletedValues . hasOwnProperty ( index ) ) {
73
+ return acc . concat ( rightItem ) ;
74
+ }
75
+
76
+ var leftItem = l [ index ] ;
77
+ var difference = diff ( rightItem , leftItem ) ;
78
+
79
+ if ( ( 0 , _utils . isObject ) ( difference ) && ( 0 , _utils . isEmpty ) ( difference ) && ! ( 0 , _utils . isDate ) ( difference ) ) {
80
+ delete acc [ index ] ;
81
+ return acc ; // return no diff
82
+ }
83
+
84
+ return acc . slice ( 0 , index ) . concat ( rightItem ) . concat ( acc . slice ( index + 1 ) ) ; // return updated key
85
+ } , _deletedValues ) ;
86
+ }
87
+
88
+ return Object . keys ( r ) . reduce ( function ( acc , key ) {
89
+ if ( ! l . hasOwnProperty ( key ) ) return _extends ( { } , acc , _defineProperty ( { } , key , r [ key ] ) ) ; // return added r key
90
+
91
+ var difference = diff ( l [ key ] , r [ key ] ) ;
92
+
93
+ if ( ( 0 , _utils . isObject ) ( difference ) && ( 0 , _utils . isEmpty ) ( difference ) && ! ( 0 , _utils . isDate ) ( difference ) ) return acc ; // return no diff
94
+
95
+ return _extends ( { } , acc , _defineProperty ( { } , key , difference ) ) ; // return updated key
96
+ } , deletedValues ) ;
97
+ } ;
98
+
99
+ exports . default = diff ;
100
+ module . exports = exports [ 'default' ] ;
101
+ } ) ;
0 commit comments