@rainbow-oh/yee-c 0.6.3 → 0.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Checkbox/style/index.less +1 -1
- package/dist/cjs/Table/style/index.less +1 -1
- package/dist/cjs/style/themes.css +1 -1
- package/dist/cjs/style/variables.css +1 -1
- package/dist/cjs/utils/isEqual.d.ts +1 -1
- package/dist/cjs/utils/isEqual.js +26 -13
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/Checkbox/style/index.less +1 -1
- package/dist/esm/Table/style/index.less +1 -1
- package/dist/esm/style/themes.css +1 -1
- package/dist/esm/style/variables.css +1 -1
- package/dist/esm/utils/isEqual.d.ts +1 -1
- package/dist/esm/utils/isEqual.js +33 -15
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/umd/yee-c.min.css +1 -1
- package/dist/umd/yee-c.min.js +1 -1
- package/package.json +1 -1
- package/src/Checkbox/style/index.less +1 -1
- package/src/Table/style/index.less +1 -1
- package/src/utils/isEqual.ts +37 -14
- package/src/version.ts +1 -1
package/package.json
CHANGED
package/src/utils/isEqual.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
export default function isEqual(
|
|
1
|
+
export default function isEqual(
|
|
2
|
+
a: unknown,
|
|
3
|
+
b: unknown,
|
|
4
|
+
seen?: Map<object, Set<object>>,
|
|
5
|
+
): boolean {
|
|
2
6
|
// Compare reference types
|
|
3
7
|
if (a === b) return true;
|
|
4
8
|
|
|
@@ -18,17 +22,40 @@ export default function isEqual(a: unknown, b: unknown) {
|
|
|
18
22
|
return a.source === b.source && a.flags === b.flags;
|
|
19
23
|
}
|
|
20
24
|
|
|
21
|
-
// Compare
|
|
22
|
-
if (
|
|
23
|
-
|
|
24
|
-
for (let i = 0; i < a.length; i++) {
|
|
25
|
-
if (!isEqual(a[i], b[i])) return false;
|
|
26
|
-
}
|
|
27
|
-
return true;
|
|
25
|
+
// Compare functions
|
|
26
|
+
if (typeof a === 'function' && typeof b === 'function') {
|
|
27
|
+
return a.toString() === b.toString();
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
//
|
|
30
|
+
// For objects and arrays, detect circular references
|
|
31
31
|
if (typeof a === 'object' && typeof b === 'object') {
|
|
32
|
+
if (!seen) {
|
|
33
|
+
seen = new Map();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// If we've already started comparing this pair, assume equal to break the cycle
|
|
37
|
+
const seenForA = seen.get(a as object);
|
|
38
|
+
if (seenForA && seenForA.has(b as object)) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Mark this pair as being compared
|
|
43
|
+
if (!seenForA) {
|
|
44
|
+
seen.set(a as object, new Set([b as object]));
|
|
45
|
+
} else {
|
|
46
|
+
seenForA.add(b as object);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Compare arrays
|
|
50
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
51
|
+
if (a.length !== b.length) return false;
|
|
52
|
+
for (let i = 0; i < a.length; i++) {
|
|
53
|
+
if (!isEqual(a[i], b[i], seen)) return false;
|
|
54
|
+
}
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Compare objects
|
|
32
59
|
const keysA = Object.keys(a);
|
|
33
60
|
const keysB = Object.keys(b);
|
|
34
61
|
if (keysA.length !== keysB.length) return false;
|
|
@@ -38,6 +65,7 @@ export default function isEqual(a: unknown, b: unknown) {
|
|
|
38
65
|
!isEqual(
|
|
39
66
|
(a as Record<string, unknown>)[key],
|
|
40
67
|
(b as Record<string, unknown>)[key],
|
|
68
|
+
seen,
|
|
41
69
|
)
|
|
42
70
|
)
|
|
43
71
|
return false;
|
|
@@ -45,11 +73,6 @@ export default function isEqual(a: unknown, b: unknown) {
|
|
|
45
73
|
return true;
|
|
46
74
|
}
|
|
47
75
|
|
|
48
|
-
// Compare functions
|
|
49
|
-
if (typeof a === 'function' && typeof b === 'function') {
|
|
50
|
-
return a.toString() === b.toString();
|
|
51
|
-
}
|
|
52
|
-
|
|
53
76
|
// Other cases
|
|
54
77
|
return false;
|
|
55
78
|
}
|