@@ -14,12 +14,11 @@ var keys = obj => isPlainObject(obj) || Array.isArray(obj) ? Object.keys(obj) :
14
14
var has = ( obj , key ) => obj . hasOwnProperty ( key )
15
15
var stringArray = arr => sortBy ( uniq ( arr ) )
16
16
var undefEmpty = val => undef ( val ) || ( Array . isArray ( val ) && val . length === 0 )
17
- var keyValEqual = ( a , b , key , compare ) => b && has ( b , key ) && a && has ( a , key ) && compare ( a [ key ] , b [ key ] )
18
17
var undefAndZero = ( a , b ) => ( undef ( a ) && b === 0 ) || ( undef ( b ) && a === 0 ) || isEqual ( a , b )
19
18
var falseUndefined = ( a , b ) => ( undef ( a ) && b === false ) || ( undef ( b ) && a === false ) || isEqual ( a , b )
20
19
var emptySchema = schema => undef ( schema ) || isEqual ( schema , { } ) || schema === true
21
- var emptyObjUndef = schema => undef ( schema ) || isEqual ( schema , { } )
22
20
var isSchema = val => undef ( val ) || isPlainObject ( val ) || val === true || val === false
21
+ var propOrFake = ( a , key ) => undef ( a ) ? undefined : a [ key ]
23
22
24
23
function undefArrayEqual ( a , b ) {
25
24
if ( undefEmpty ( a ) && undefEmpty ( b ) ) {
@@ -37,25 +36,24 @@ function unsortedNormalizedArray(a, b) {
37
36
38
37
function schemaGroup ( a , b , key , compare ) {
39
38
var allProps = uniq ( keys ( a ) . concat ( keys ( b ) ) )
40
- if ( emptyObjUndef ( a ) && emptyObjUndef ( b ) ) {
39
+ if ( emptySchema ( a ) && emptySchema ( b ) ) {
41
40
return true
42
- } else if ( emptyObjUndef ( a ) && keys ( b ) . length ) {
43
- return false
44
- } else if ( emptyObjUndef ( b ) && keys ( a ) . length ) {
45
- return false
46
41
}
47
42
48
43
return allProps . every ( function ( key ) {
49
- var aVal = a [ key ]
50
- var bVal = b [ key ]
44
+ var aVal = propOrFake ( a , key )
45
+ var bVal = propOrFake ( b , key )
46
+
47
+ // TODO, remove when no longer support dependencies
51
48
if ( Array . isArray ( aVal ) && Array . isArray ( bVal ) ) {
52
49
return isEqual ( stringArray ( a ) , stringArray ( b ) )
53
50
} else if ( Array . isArray ( aVal ) && ! Array . isArray ( bVal ) ) {
54
51
return false
55
52
} else if ( Array . isArray ( bVal ) && ! Array . isArray ( aVal ) ) {
56
53
return false
57
54
}
58
- return keyValEqual ( a , b , key , compare )
55
+
56
+ return compare ( aVal , bVal )
59
57
} )
60
58
}
61
59
@@ -127,15 +125,14 @@ function compare(a, b, options) {
127
125
return a === b
128
126
}
129
127
130
- if ( ( a === undefined && b === false ) || ( b === undefined && a === false ) ) {
128
+ if ( ( a !== false && b === false ) || ( b !== false && a === false ) ) {
131
129
return false
132
130
}
133
131
134
- if ( ( undef ( a ) && ! undef ( b ) ) || ( ! undef ( a ) && undef ( b ) ) ) {
135
- return false
136
- }
132
+ var aKeys = isPlainObject ( a ) ? Object . keys ( a ) : [ ]
133
+ var bKeys = isPlainObject ( b ) ? Object . keys ( b ) : [ ]
137
134
138
- var allKeys = uniq ( Object . keys ( a ) . concat ( Object . keys ( b ) ) )
135
+ var allKeys = uniq ( [ ... aKeys , ... bKeys ] )
139
136
140
137
if ( options . ignore . length ) {
141
138
allKeys = allKeys . filter ( k => options . ignore . indexOf ( k ) === - 1 )
@@ -150,8 +147,8 @@ function compare(a, b, options) {
150
147
}
151
148
152
149
return allKeys . every ( function ( key ) {
153
- var aValue = a [ key ]
154
- var bValue = b [ key ]
150
+ var aValue = propOrFake ( a , key )
151
+ var bValue = propOrFake ( b , key )
155
152
156
153
if ( schemaProps . indexOf ( key ) !== - 1 ) {
157
154
return compare ( aValue , bValue , options )
0 commit comments