@@ -8,10 +8,6 @@ function objDiff(
8
8
objRefSet1 : WeakSet < WeakKey > ,
9
9
objRefSet2 : WeakSet < WeakKey >
10
10
) : DiffResult [ ] {
11
- if ( typeof a !== typeof b ) {
12
- return [ { t : CHANGED , p : path , v : b } ] ;
13
- }
14
-
15
11
const result : DiffResult [ ] = [ ] ;
16
12
17
13
if ( typeof a === "object" && a !== null && b !== null ) {
@@ -23,7 +19,7 @@ function objDiff(
23
19
objRefSet1 . add ( a as WeakKey ) ;
24
20
objRefSet2 . add ( b as WeakKey ) ;
25
21
26
- if ( Array . isArray ( a ) ) {
22
+ if ( Array . isArray ( a ) && Array . isArray ( b ) ) {
27
23
for ( let i = 0 ; i < a . length ; i ++ ) {
28
24
if ( Object . hasOwn ( b , i ) ) {
29
25
result . push (
@@ -53,7 +49,10 @@ function objDiff(
53
49
return result ;
54
50
}
55
51
56
- if ( Object . prototype . toString . call ( a ) === "[object Object]" ) {
52
+ if (
53
+ Object . prototype . toString . call ( a ) === "[object Object]" &&
54
+ Object . prototype . toString . call ( b ) === "[object Object]"
55
+ ) {
57
56
for ( const k of Object . keys ( a ) ) {
58
57
if ( Object . hasOwn ( b , k ) ) {
59
58
result . push (
@@ -83,13 +82,13 @@ function objDiff(
83
82
return result ;
84
83
}
85
84
86
- if ( a instanceof Date ) {
85
+ if ( a instanceof Date && b instanceof Date ) {
87
86
if ( ! Object . is ( a . getTime ( ) , ( b as Date ) . getTime ( ) ) ) {
88
87
return [ { t : CHANGED , p : path , v : b } ] ;
89
88
}
90
89
}
91
90
92
- if ( a instanceof Map ) {
91
+ if ( a instanceof Map && b instanceof Map ) {
93
92
if ( a . size !== ( b as Map < unknown , unknown > ) . size ) {
94
93
return [ { t : CHANGED , p : path , v : b } ] ;
95
94
}
@@ -101,7 +100,7 @@ function objDiff(
101
100
}
102
101
}
103
102
104
- if ( a instanceof Set ) {
103
+ if ( a instanceof Set && b instanceof Set ) {
105
104
if ( a . size !== ( b as Set < unknown > ) . size ) {
106
105
return [ { t : CHANGED , p : path , v : b } ] ;
107
106
}
@@ -112,6 +111,12 @@ function objDiff(
112
111
}
113
112
}
114
113
}
114
+
115
+ if (
116
+ Object . prototype . toString . call ( a ) !== Object . prototype . toString . call ( b )
117
+ ) {
118
+ return [ { t : CHANGED , p : path , v : b } ] ;
119
+ }
115
120
} else {
116
121
if ( ! Object . is ( a , b ) ) {
117
122
return [ { t : CHANGED , p : path , v : b } ] ;
0 commit comments