fast-is-equal 1.2.0 â 1.2.2
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/README.md +31 -25
- package/dist/index.js +208 -116
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
- package/dist/__tests__/fastIsEqual.test.d.ts +0 -1
- package/dist/__tests__/fastIsEqual.test.js +0 -311
- package/dist/__tests__/fastIsEqual.test.js.map +0 -1
package/README.md
CHANGED
|
@@ -4,10 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://badge.fury.io/js/fast-is-equal) [](https://github.com/JairajJangle/fast-is-equal/blob/main/LICENSE)  [](https://github.com/JairajJangle/fast-is-equal/actions/workflows/ci.yml) [](https://github.com/JairajJangle/fast-is-equal) [](https://github.com/JairajJangle/fast-is-equal) [](https://github.com/JairajJangle/fast-is-equal) [](https://github.com/JairajJangle/fast-is-equal) [](https://github.com/JairajJangle/fast-is-equal) [](https://github.com/JairajJangle/fast-is-equal)
|
|
6
6
|
|
|
7
|
-
|
|
8
7
|
## Why fast-is-equal?
|
|
9
8
|
|
|
10
|
-
- ð **Lightning Speed**: Up to **
|
|
9
|
+
- ð **Lightning Speed**: Up to **55.84x faster** than Lodash's `isEqual` (average **11.73x faster** across 49 test cases).
|
|
11
10
|
- ðŠķ **Lightweight**: Dependency-free, minimal footprint.
|
|
12
11
|
- ð **Versatile**: Handles primitives, objects, arrays, Maps, Sets, typed arrays, circular references, and more.
|
|
13
12
|
- ð **Proven**: Outperforms Lodash in **93.9%** of benchmark cases.
|
|
@@ -42,41 +41,48 @@ console.log(fastIsEqual([1, 2], [1, 3])); // false
|
|
|
42
41
|
|
|
43
42
|
### Key Highlights
|
|
44
43
|
|
|
45
|
-
- **Average Speed**: `fastIsEqual` is **
|
|
44
|
+
- **Average Speed**: `fastIsEqual` is **11.73x faster** (0.000172 ms vs. 0.002013 ms).
|
|
46
45
|
- **Win Rate**: Outperforms Lodash in **46/49 cases (93.9%)**.
|
|
47
|
-
- **Peak Performance**: Up to **
|
|
46
|
+
- **Peak Performance**: Up to **55.84x faster** for large Sets.
|
|
48
47
|
|
|
49
48
|
### Top 10 Performance Gains
|
|
50
49
|
|
|
51
|
-
| Test Case
|
|
52
|
-
|
|
|
53
|
-
| Large Set (100 items)
|
|
54
|
-
| Map vs Set
|
|
55
|
-
| Large Map (50 entries)
|
|
56
|
-
| Map with primitives
|
|
57
|
-
|
|
|
58
|
-
|
|
|
59
|
-
|
|
|
60
|
-
| Set
|
|
61
|
-
|
|
|
62
|
-
|
|
|
50
|
+
| Test Case | fastIsEqual (ms) | Lodash isEqual (ms) | Speed Boost |
|
|
51
|
+
| ----------------------- | ---------------- | ------------------- | ------------ |
|
|
52
|
+
| Large Set (100 items) | 0.000673 | 0.037564 | **55.84x** ð |
|
|
53
|
+
| Map vs Set | 0.000018 | 0.000485 | **26.52x** ð |
|
|
54
|
+
| Large Map (50 entries) | 0.001059 | 0.025756 | **24.32x** ð |
|
|
55
|
+
| Map with primitives | 0.000092 | 0.001487 | **16.09x** ð |
|
|
56
|
+
| Map (unequal) | 0.000092 | 0.001406 | **15.29x** ð |
|
|
57
|
+
| Large TypedArray (1000) | 0.000944 | 0.013165 | **13.95x** ð |
|
|
58
|
+
| ArrayBuffer (small) | 0.000092 | 0.001263 | **13.74x** ð |
|
|
59
|
+
| Empty Set | 0.000058 | 0.000691 | **11.96x** ð |
|
|
60
|
+
| Empty Map | 0.000058 | 0.000684 | **11.84x** ð |
|
|
61
|
+
| Set of strings | 0.000082 | 0.000940 | **11.51x** ð |
|
|
62
|
+
|
|
63
|
+
### Performance Across Categories
|
|
64
|
+
|
|
65
|
+
- **Primitives**: Competitive performance with smart optimizations for edge cases like NaN
|
|
66
|
+
- **Objects**: 1.59xâ2.87x faster, with best gains on simple and nested structures
|
|
67
|
+
- **Arrays**: 1.24xâ4.38x faster, excelling at primitive arrays and sparse arrays
|
|
68
|
+
- **TypedArrays**: 11.30xâ13.95x faster, dramatically outperforming on all variants
|
|
69
|
+
- **Special Objects**: 8.63xâ10.25x faster for Dates and RegExp
|
|
70
|
+
- **Collections**: 10.84xâ55.84x faster for Maps and Sets, with exceptional gains on large collections
|
|
71
|
+
- **Circular References**: 3.04xâ3.72x faster with optimized cycle detection
|
|
63
72
|
|
|
64
73
|
### Detailed Benchmark Results
|
|
65
74
|
|
|
66
75
|
Run `yarn benchmark` or `npm run benchmark` to test locally. Full results available in [benchmarks/results.txt](benchmarks/results.txt).
|
|
67
76
|
|
|
68
|
-
####
|
|
77
|
+
#### Edge Cases Where Lodash Wins
|
|
69
78
|
|
|
70
|
-
|
|
71
|
-
- **Objects**: Simple (2.24xâ2.73x), Nested (2.01xâ2.13x), Deeply Nested (2.01x).
|
|
72
|
-
- **Arrays**: Primitives (4.20xâ4.60x), Objects (2.40x), Typed Arrays (6.80xâ14.04x).
|
|
73
|
-
- **Special Cases**: Circular References (3.14xâ3.65x), Maps (9.79xâ17.48x), Sets (10.27xâ50.87x).
|
|
79
|
+
Only 3 cases where Lodash marginally outperforms (by less than 5%):
|
|
74
80
|
|
|
75
|
-
|
|
81
|
+
- String vs Number: 0.95x slower
|
|
82
|
+
- Large Numbers: 0.99x slower
|
|
83
|
+
- Boolean vs Number: 0.99x slower
|
|
76
84
|
|
|
77
|
-
-
|
|
78
|
-
- Booleans: 0.87x slower
|
|
79
|
-
- String vs Number: 0.78x slower
|
|
85
|
+
These represent cross-type comparisons with negligible real-world impact.
|
|
80
86
|
|
|
81
87
|
## Features
|
|
82
88
|
|
package/dist/index.js
CHANGED
|
@@ -4,30 +4,36 @@ const TYPEOF_FUNCTION = 'function';
|
|
|
4
4
|
const TYPEOF_NUMBER = 'number';
|
|
5
5
|
const TYPEOF_STRING = 'string';
|
|
6
6
|
const TYPEOF_BOOLEAN = 'boolean';
|
|
7
|
+
// Inline NaN check for maximum speed
|
|
8
|
+
const isNaN = Number.isNaN;
|
|
9
|
+
// Cache for constructor checks
|
|
10
|
+
const dateConstructor = Date;
|
|
11
|
+
const regExpConstructor = RegExp;
|
|
12
|
+
const mapConstructor = Map;
|
|
13
|
+
const setConstructor = Set;
|
|
14
|
+
const arrayBufferConstructor = ArrayBuffer;
|
|
15
|
+
const promiseConstructor = Promise;
|
|
16
|
+
const errorConstructor = Error;
|
|
7
17
|
export function fastIsEqual(a, b) {
|
|
8
18
|
// Fast path for strict equality
|
|
9
19
|
if (a === b)
|
|
10
20
|
return true;
|
|
11
|
-
// Handle null/undefined early
|
|
21
|
+
// Handle null/undefined early with single comparison
|
|
12
22
|
if (a == null || b == null)
|
|
13
23
|
return false;
|
|
14
24
|
// Get types once
|
|
15
25
|
const typeA = typeof a;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
return
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
// Only NaN needs special handling
|
|
24
|
-
return Number.isNaN(a) && Number.isNaN(b);
|
|
25
|
-
case TYPEOF_STRING:
|
|
26
|
-
case TYPEOF_BOOLEAN:
|
|
27
|
-
return false; // We know a !== b
|
|
28
|
-
case TYPEOF_FUNCTION:
|
|
29
|
-
return false; // Functions use reference equality
|
|
26
|
+
// Type mismatch = not equal (avoid second typeof if possible)
|
|
27
|
+
if (typeA === TYPEOF_NUMBER) {
|
|
28
|
+
// Optimize number comparison - avoid typeof b when possible
|
|
29
|
+
return typeof b === TYPEOF_NUMBER && isNaN(a) && isNaN(b);
|
|
30
|
+
}
|
|
31
|
+
if (typeA === TYPEOF_STRING || typeA === TYPEOF_BOOLEAN || typeA === TYPEOF_FUNCTION) {
|
|
32
|
+
return false; // We know a !== b from first check
|
|
30
33
|
}
|
|
34
|
+
// Now check if b is also object
|
|
35
|
+
if (typeof b !== TYPEOF_OBJECT)
|
|
36
|
+
return false;
|
|
31
37
|
// At this point, we know both are objects
|
|
32
38
|
// Array check using fastest method
|
|
33
39
|
const aIsArray = Array.isArray(a);
|
|
@@ -42,43 +48,59 @@ export function fastIsEqual(a, b) {
|
|
|
42
48
|
const len = a.length;
|
|
43
49
|
if (len !== b.length)
|
|
44
50
|
return false;
|
|
45
|
-
//
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
continue;
|
|
57
|
-
// Type check for deep comparison need
|
|
58
|
-
const elemTypeA = typeof elemA;
|
|
59
|
-
if (elemTypeA !== typeof elemB)
|
|
60
|
-
return false;
|
|
61
|
-
// Primitive comparison
|
|
62
|
-
if (elemTypeA !== TYPEOF_OBJECT && elemTypeA !== TYPEOF_FUNCTION) {
|
|
63
|
-
// Check for NaN
|
|
64
|
-
if (elemTypeA === TYPEOF_NUMBER && Number.isNaN(elemA) && Number.isNaN(elemB))
|
|
51
|
+
// Empty arrays
|
|
52
|
+
if (len === 0)
|
|
53
|
+
return true;
|
|
54
|
+
// Small arrays - unroll loop with minimal overhead
|
|
55
|
+
if (len < 8) {
|
|
56
|
+
for (let i = 0; i < len; i++) {
|
|
57
|
+
// Sparse array check
|
|
58
|
+
const hasA = i in a;
|
|
59
|
+
if (hasA !== (i in b))
|
|
60
|
+
return false;
|
|
61
|
+
if (!hasA)
|
|
65
62
|
continue;
|
|
66
|
-
|
|
63
|
+
const elemA = a[i];
|
|
64
|
+
const elemB = b[i];
|
|
65
|
+
// Fast path for identical elements
|
|
66
|
+
if (elemA === elemB)
|
|
67
|
+
continue;
|
|
68
|
+
// Null check
|
|
69
|
+
if (elemA == null || elemB == null)
|
|
70
|
+
return false;
|
|
71
|
+
// Type check
|
|
72
|
+
const elemTypeA = typeof elemA;
|
|
73
|
+
if (elemTypeA !== typeof elemB)
|
|
74
|
+
return false;
|
|
75
|
+
// Number special case
|
|
76
|
+
if (elemTypeA === TYPEOF_NUMBER) {
|
|
77
|
+
if (!isNaN(elemA) || !isNaN(elemB))
|
|
78
|
+
return false;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
// Primitive comparison
|
|
82
|
+
if (elemTypeA !== TYPEOF_OBJECT && elemTypeA !== TYPEOF_FUNCTION) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
// Need deep comparison - use minimal visited map
|
|
86
|
+
if (!deepEqual(elemA, elemB, new Map()))
|
|
87
|
+
return false;
|
|
67
88
|
}
|
|
68
|
-
|
|
69
|
-
if (!deepEqual(elemA, elemB, new Map()))
|
|
70
|
-
return false;
|
|
89
|
+
return true;
|
|
71
90
|
}
|
|
72
|
-
|
|
91
|
+
// Large arrays - use deep equal
|
|
92
|
+
return deepEqual(a, b, new Map());
|
|
93
|
+
}
|
|
94
|
+
// Handle built-in types inline for common cases
|
|
95
|
+
if (aCtor === dateConstructor) {
|
|
96
|
+
return a.getTime() === b.getTime();
|
|
97
|
+
}
|
|
98
|
+
if (aCtor === regExpConstructor) {
|
|
99
|
+
return a.source === b.source && a.flags === b.flags;
|
|
73
100
|
}
|
|
74
101
|
// For all other objects, use deep comparison
|
|
75
102
|
return deepEqual(a, b, new Map());
|
|
76
103
|
}
|
|
77
|
-
// Inline helper for checking if value is primitive
|
|
78
|
-
function isPrimitive(val) {
|
|
79
|
-
const t = typeof val;
|
|
80
|
-
return t !== TYPEOF_OBJECT && t !== TYPEOF_FUNCTION;
|
|
81
|
-
}
|
|
82
104
|
function deepEqual(valA, valB, visited) {
|
|
83
105
|
// Fast equality check
|
|
84
106
|
if (valA === valB)
|
|
@@ -86,13 +108,13 @@ function deepEqual(valA, valB, visited) {
|
|
|
86
108
|
// Null check
|
|
87
109
|
if (valA == null || valB == null)
|
|
88
110
|
return false;
|
|
89
|
-
// Type check
|
|
111
|
+
// Type check
|
|
90
112
|
const typeA = typeof valA;
|
|
91
113
|
if (typeA !== typeof valB)
|
|
92
114
|
return false;
|
|
93
115
|
// Primitive types
|
|
94
116
|
if (typeA === TYPEOF_NUMBER) {
|
|
95
|
-
return
|
|
117
|
+
return isNaN(valA) && isNaN(valB);
|
|
96
118
|
}
|
|
97
119
|
if (typeA !== TYPEOF_OBJECT && typeA !== TYPEOF_FUNCTION) {
|
|
98
120
|
return false;
|
|
@@ -107,18 +129,16 @@ function deepEqual(valA, valB, visited) {
|
|
|
107
129
|
const ctorA = valA.constructor;
|
|
108
130
|
if (ctorA !== valB.constructor)
|
|
109
131
|
return false;
|
|
110
|
-
// Handle built-in types with switch for better performance
|
|
111
|
-
// Using constructor as discriminator when possible
|
|
112
132
|
// Date - inline comparison
|
|
113
|
-
if (ctorA ===
|
|
133
|
+
if (ctorA === dateConstructor) {
|
|
114
134
|
return valA.getTime() === valB.getTime();
|
|
115
135
|
}
|
|
116
136
|
// RegExp - inline comparison
|
|
117
|
-
if (ctorA ===
|
|
137
|
+
if (ctorA === regExpConstructor) {
|
|
118
138
|
return valA.source === valB.source && valA.flags === valB.flags;
|
|
119
139
|
}
|
|
120
140
|
// Promise and Error - reference equality only
|
|
121
|
-
if (ctorA ===
|
|
141
|
+
if (ctorA === promiseConstructor || ctorA === errorConstructor) {
|
|
122
142
|
return false;
|
|
123
143
|
}
|
|
124
144
|
// Arrays - optimized
|
|
@@ -129,7 +149,10 @@ function deepEqual(valA, valB, visited) {
|
|
|
129
149
|
// Mark visited early
|
|
130
150
|
visited.set(valA, valB);
|
|
131
151
|
visited.set(valB, valA);
|
|
132
|
-
//
|
|
152
|
+
// Empty arrays
|
|
153
|
+
if (len === 0)
|
|
154
|
+
return true;
|
|
155
|
+
// Optimized loop - check primitives first for early exit
|
|
133
156
|
for (let i = 0; i < len; i++) {
|
|
134
157
|
// Sparse array handling
|
|
135
158
|
const hasA = i in valA;
|
|
@@ -146,78 +169,96 @@ function deepEqual(valA, valB, visited) {
|
|
|
146
169
|
return true;
|
|
147
170
|
}
|
|
148
171
|
// Map - optimized
|
|
149
|
-
if (ctorA ===
|
|
172
|
+
if (ctorA === mapConstructor) {
|
|
150
173
|
const mapA = valA;
|
|
151
174
|
const mapB = valB;
|
|
152
175
|
if (mapA.size !== mapB.size)
|
|
153
176
|
return false;
|
|
177
|
+
// Empty maps
|
|
178
|
+
if (mapA.size === 0)
|
|
179
|
+
return true;
|
|
154
180
|
visited.set(valA, valB);
|
|
155
181
|
visited.set(valB, valA);
|
|
156
|
-
//
|
|
157
|
-
let complexKeyFound = false;
|
|
182
|
+
// Optimized iteration
|
|
158
183
|
for (const [key, valueA] of mapA) {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
184
|
+
// Fast primitive key path
|
|
185
|
+
const keyType = typeof key;
|
|
186
|
+
if (keyType !== TYPEOF_OBJECT && keyType !== TYPEOF_FUNCTION) {
|
|
187
|
+
if (!mapB.has(key))
|
|
188
|
+
return false;
|
|
189
|
+
const valueB = mapB.get(key);
|
|
190
|
+
if (valueA !== valueB && !deepEqual(valueA, valueB, visited)) {
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
165
193
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
found = true;
|
|
175
|
-
break;
|
|
194
|
+
else {
|
|
195
|
+
// Complex key - need full search
|
|
196
|
+
let found = false;
|
|
197
|
+
for (const [keyB, valueB] of mapB) {
|
|
198
|
+
if (deepEqual(key, keyB, visited) && deepEqual(valueA, valueB, visited)) {
|
|
199
|
+
found = true;
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
176
202
|
}
|
|
203
|
+
if (!found)
|
|
204
|
+
return false;
|
|
177
205
|
}
|
|
178
|
-
if (!found)
|
|
179
|
-
return false;
|
|
180
206
|
}
|
|
181
207
|
return true;
|
|
182
208
|
}
|
|
183
209
|
// Set - highly optimized
|
|
184
|
-
if (ctorA ===
|
|
210
|
+
if (ctorA === setConstructor) {
|
|
185
211
|
const setA = valA;
|
|
186
212
|
const setB = valB;
|
|
187
213
|
if (setA.size !== setB.size)
|
|
188
214
|
return false;
|
|
215
|
+
// Empty sets
|
|
216
|
+
if (setA.size === 0)
|
|
217
|
+
return true;
|
|
189
218
|
// Early visited check
|
|
190
219
|
visited.set(valA, valB);
|
|
191
|
-
|
|
192
|
-
|
|
220
|
+
visited.set(valB, valA);
|
|
221
|
+
// For equal sets, we can optimize by checking if all primitives exist first
|
|
222
|
+
let hasPrimitives = false;
|
|
223
|
+
let hasObjects = false;
|
|
224
|
+
// First pass - categorize and check primitives
|
|
193
225
|
for (const val of setA) {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
226
|
+
const valType = typeof val;
|
|
227
|
+
if (valType === TYPEOF_OBJECT || valType === TYPEOF_FUNCTION) {
|
|
228
|
+
hasObjects = true;
|
|
197
229
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
if (!hasComplex) {
|
|
201
|
-
for (const val of setA) {
|
|
230
|
+
else {
|
|
231
|
+
hasPrimitives = true;
|
|
202
232
|
if (!setB.has(val))
|
|
203
|
-
return false;
|
|
233
|
+
return false; // Fast fail for primitives
|
|
204
234
|
}
|
|
235
|
+
}
|
|
236
|
+
// If only primitives, we're done
|
|
237
|
+
if (!hasObjects)
|
|
205
238
|
return true;
|
|
239
|
+
// For objects, create arrays for matching
|
|
240
|
+
const objectsA = [];
|
|
241
|
+
const objectsB = [];
|
|
242
|
+
for (const val of setA) {
|
|
243
|
+
const valType = typeof val;
|
|
244
|
+
if (valType === TYPEOF_OBJECT || valType === TYPEOF_FUNCTION) {
|
|
245
|
+
objectsA.push(val);
|
|
246
|
+
}
|
|
206
247
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
arrB.push(val);
|
|
248
|
+
for (const val of setB) {
|
|
249
|
+
const valType = typeof val;
|
|
250
|
+
if (valType === TYPEOF_OBJECT || valType === TYPEOF_FUNCTION) {
|
|
251
|
+
objectsB.push(val);
|
|
252
|
+
}
|
|
213
253
|
}
|
|
214
|
-
|
|
215
|
-
|
|
254
|
+
// Match objects
|
|
255
|
+
const used = new Uint8Array(objectsB.length);
|
|
256
|
+
for (const valA of objectsA) {
|
|
216
257
|
let found = false;
|
|
217
|
-
for (let j = 0; j <
|
|
258
|
+
for (let j = 0; j < objectsB.length; j++) {
|
|
218
259
|
if (!used[j]) {
|
|
219
260
|
const newVisited = new Map(visited);
|
|
220
|
-
if (deepEqual(valA,
|
|
261
|
+
if (deepEqual(valA, objectsB[j], newVisited)) {
|
|
221
262
|
used[j] = 1;
|
|
222
263
|
found = true;
|
|
223
264
|
break;
|
|
@@ -230,7 +271,7 @@ function deepEqual(valA, valB, visited) {
|
|
|
230
271
|
return true;
|
|
231
272
|
}
|
|
232
273
|
// ArrayBuffer - optimized
|
|
233
|
-
if (ctorA ===
|
|
274
|
+
if (ctorA === arrayBufferConstructor) {
|
|
234
275
|
const bufA = valA;
|
|
235
276
|
const bufB = valB;
|
|
236
277
|
const byteLength = bufA.byteLength;
|
|
@@ -238,14 +279,18 @@ function deepEqual(valA, valB, visited) {
|
|
|
238
279
|
return false;
|
|
239
280
|
const viewA = new Uint8Array(bufA);
|
|
240
281
|
const viewB = new Uint8Array(bufB);
|
|
241
|
-
// Unroll loop for better performance
|
|
282
|
+
// Unroll loop for better performance on larger buffers
|
|
242
283
|
let i = 0;
|
|
243
|
-
const
|
|
244
|
-
for (; i <
|
|
284
|
+
const unrollEnd = byteLength - 7;
|
|
285
|
+
for (; i < unrollEnd; i += 8) {
|
|
245
286
|
if (viewA[i] !== viewB[i] ||
|
|
246
287
|
viewA[i + 1] !== viewB[i + 1] ||
|
|
247
288
|
viewA[i + 2] !== viewB[i + 2] ||
|
|
248
|
-
viewA[i + 3] !== viewB[i + 3]
|
|
289
|
+
viewA[i + 3] !== viewB[i + 3] ||
|
|
290
|
+
viewA[i + 4] !== viewB[i + 4] ||
|
|
291
|
+
viewA[i + 5] !== viewB[i + 5] ||
|
|
292
|
+
viewA[i + 6] !== viewB[i + 6] ||
|
|
293
|
+
viewA[i + 7] !== viewB[i + 7]) {
|
|
249
294
|
return false;
|
|
250
295
|
}
|
|
251
296
|
}
|
|
@@ -263,8 +308,27 @@ function deepEqual(valA, valB, visited) {
|
|
|
263
308
|
const len = arrA.length;
|
|
264
309
|
if (len !== arrB.length)
|
|
265
310
|
return false;
|
|
266
|
-
//
|
|
267
|
-
|
|
311
|
+
// Small typed arrays
|
|
312
|
+
if (len < 16) {
|
|
313
|
+
for (let i = 0; i < len; i++) {
|
|
314
|
+
if (arrA[i] !== arrB[i])
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
return true;
|
|
318
|
+
}
|
|
319
|
+
// Large typed arrays - unroll loop
|
|
320
|
+
let i = 0;
|
|
321
|
+
const unrollLen = len - 3;
|
|
322
|
+
for (; i < unrollLen; i += 4) {
|
|
323
|
+
if (arrA[i] !== arrB[i] ||
|
|
324
|
+
arrA[i + 1] !== arrB[i + 1] ||
|
|
325
|
+
arrA[i + 2] !== arrB[i + 2] ||
|
|
326
|
+
arrA[i + 3] !== arrB[i + 3]) {
|
|
327
|
+
return false;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
// Handle remaining
|
|
331
|
+
for (; i < len; i++) {
|
|
268
332
|
if (arrA[i] !== arrB[i])
|
|
269
333
|
return false;
|
|
270
334
|
}
|
|
@@ -279,18 +343,25 @@ function deepEqual(valA, valB, visited) {
|
|
|
279
343
|
// Quick length check
|
|
280
344
|
if (keysALen !== Object.keys(valB).length)
|
|
281
345
|
return false;
|
|
282
|
-
//
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
if (symbolsA.length > 0) {
|
|
346
|
+
// Empty objects - check symbols
|
|
347
|
+
if (keysALen === 0) {
|
|
348
|
+
const checkSymbols = Object.getOwnPropertySymbols !== undefined;
|
|
349
|
+
if (checkSymbols) {
|
|
350
|
+
const symbolsA = Object.getOwnPropertySymbols(valA);
|
|
288
351
|
if (symbolsA.length !== Object.getOwnPropertySymbols(valB).length) {
|
|
289
352
|
return false;
|
|
290
353
|
}
|
|
354
|
+
// Check symbol properties
|
|
355
|
+
for (let i = 0; i < symbolsA.length; i++) {
|
|
356
|
+
const sym = symbolsA[i];
|
|
357
|
+
if (!(sym in valB) || !deepEqual(valA[sym], valB[sym], visited)) {
|
|
358
|
+
return false;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
291
361
|
}
|
|
362
|
+
return true;
|
|
292
363
|
}
|
|
293
|
-
// Optimized property checking
|
|
364
|
+
// Optimized property checking - batch primitive checks
|
|
294
365
|
for (let i = 0; i < keysALen; i++) {
|
|
295
366
|
const key = keysA[i];
|
|
296
367
|
// Use in operator for fastest check
|
|
@@ -298,17 +369,38 @@ function deepEqual(valA, valB, visited) {
|
|
|
298
369
|
return false;
|
|
299
370
|
const propA = valA[key];
|
|
300
371
|
const propB = valB[key];
|
|
301
|
-
|
|
302
|
-
|
|
372
|
+
// Quick primitive equality check
|
|
373
|
+
if (propA !== propB) {
|
|
374
|
+
// Only do deep comparison if needed
|
|
375
|
+
const propTypeA = typeof propA;
|
|
376
|
+
if (propTypeA === TYPEOF_OBJECT || propTypeA === TYPEOF_FUNCTION) {
|
|
377
|
+
if (!deepEqual(propA, propB, visited))
|
|
378
|
+
return false;
|
|
379
|
+
}
|
|
380
|
+
else if (propTypeA === TYPEOF_NUMBER) {
|
|
381
|
+
if (!isNaN(propA) || !isNaN(propB))
|
|
382
|
+
return false;
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
return false;
|
|
386
|
+
}
|
|
303
387
|
}
|
|
304
388
|
}
|
|
305
|
-
// Check symbols if
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
389
|
+
// Check for symbols only if likely to have them
|
|
390
|
+
const checkSymbols = Object.getOwnPropertySymbols !== undefined;
|
|
391
|
+
if (checkSymbols) {
|
|
392
|
+
const symbolsA = Object.getOwnPropertySymbols(valA);
|
|
393
|
+
if (symbolsA.length > 0) {
|
|
394
|
+
if (symbolsA.length !== Object.getOwnPropertySymbols(valB).length) {
|
|
310
395
|
return false;
|
|
311
396
|
}
|
|
397
|
+
// Check symbol properties
|
|
398
|
+
for (let i = 0; i < symbolsA.length; i++) {
|
|
399
|
+
const sym = symbolsA[i];
|
|
400
|
+
if (!(sym in valB) || !deepEqual(valA[sym], valB[sym], visited)) {
|
|
401
|
+
return false;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
312
404
|
}
|
|
313
405
|
}
|
|
314
406
|
return true;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,MAAM,aAAa,GAAG,QAAQ,CAAC;AAC/B,MAAM,eAAe,GAAG,UAAU,CAAC;AACnC,MAAM,aAAa,GAAG,QAAQ,CAAC;AAC/B,MAAM,aAAa,GAAG,QAAQ,CAAC;AAC/B,MAAM,cAAc,GAAG,SAAS,CAAC;AAEjC,MAAM,UAAU,WAAW,CAAC,CAAM,EAAE,CAAM;IACxC,gCAAgC;IAChC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzB,8BAA8B;IAC9B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAEzC,iBAAiB;IACjB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC;IAEvB,4BAA4B;IAC5B,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAElC,2BAA2B;IAC3B,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,aAAa;YAChB,kCAAkC;YAClC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5C,KAAK,aAAa,CAAC;QACnB,KAAK,cAAc;YACjB,OAAO,KAAK,CAAC,CAAC,kBAAkB;QAClC,KAAK,eAAe;YAClB,OAAO,KAAK,CAAC,CAAC,mCAAmC;IACrD,CAAC;IAED,0CAA0C;IAE1C,mCAAmC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,QAAQ,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAEhD,oBAAoB;IACpB,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC;IAC5B,IAAI,KAAK,KAAK,CAAC,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAE1C,0CAA0C;IAC1C,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;QACrB,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAEnC,6BAA6B;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,uCAAuC;YACvC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YACxC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAAE,SAAS;YAExB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAEnB,mCAAmC;YACnC,IAAI,KAAK,KAAK,KAAK;gBAAE,SAAS;YAE9B,sCAAsC;YACtC,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;YAC/B,IAAI,SAAS,KAAK,OAAO,KAAK;gBAAE,OAAO,KAAK,CAAC;YAE7C,uBAAuB;YACvB,IAAI,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;gBACjE,gBAAgB;gBAChB,IAAI,SAAS,KAAK,aAAa,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;oBAAE,SAAS;gBACxF,OAAO,KAAK,CAAC;YACf,CAAC;YAED,iDAAiD;YACjD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC;gBAAE,OAAO,KAAK,CAAC;QACxD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6CAA6C;IAC7C,OAAO,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,mDAAmD;AACnD,SAAS,WAAW,CAAC,GAAQ;IAC3B,MAAM,CAAC,GAAG,OAAO,GAAG,CAAC;IACrB,OAAO,CAAC,KAAK,aAAa,IAAI,CAAC,KAAK,eAAe,CAAC;AACtD,CAAC;AAED,SAAS,SAAS,CAAC,IAAS,EAAE,IAAS,EAAE,OAAsB;IAC7D,sBAAsB;IACtB,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE/B,aAAa;IACb,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAE/C,0BAA0B;IAC1B,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC;IAC1B,IAAI,KAAK,KAAK,OAAO,IAAI;QAAE,OAAO,KAAK,CAAC;IAExC,kBAAkB;IAClB,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,eAAe,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+CAA+C;IAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,UAAU,KAAK,IAAI,CAAC;IACzD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAEpC,oBAAoB;IACpB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;IAC/B,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAE7C,2DAA2D;IAC3D,mDAAmD;IAEnD,2BAA2B;IAC3B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;IAC3C,CAAC;IAED,6BAA6B;IAC7B,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC;IAClE,CAAC;IAED,8CAA8C;IAC9C,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qBAAqB;IACrB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAEtC,qBAAqB;QACrB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAExB,iBAAiB;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,wBAAwB;YACxB,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC;YACvB,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC;YACvC,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAEtB,IAAI,KAAK,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;gBACzD,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB;IAClB,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,IAAqB,CAAC;QACnC,MAAM,IAAI,GAAG,IAAqB,CAAC;QAEnC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAE1C,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAExB,8CAA8C;QAC9C,IAAI,eAAe,GAAG,KAAK,CAAC;QAE5B,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,eAAe,GAAG,IAAI,CAAC;gBACvB,MAAM;YACR,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;gBACjE,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,IAAI,CAAC,eAAe;YAAE,OAAO,IAAI,CAAC;QAElC,2BAA2B;QAC3B,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YAClC,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBAClC,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;oBACzE,KAAK,GAAG,IAAI,CAAC;oBACb,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yBAAyB;IACzB,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,IAAgB,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAgB,CAAC;QAE9B,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAE1C,sBAAsB;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAExB,sBAAsB;QACtB,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,UAAU,GAAG,IAAI,CAAC;gBAClB,MAAM;YACR,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC;YACnC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,uCAAuC;QACvC,mCAAmC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAU,EAAE,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,4BAA4B;QAEtE,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;oBACb,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;oBACpC,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC;wBACzC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBACZ,KAAK,GAAG,IAAI,CAAC;wBACb,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC3B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0BAA0B;IAC1B,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAmB,CAAC;QACjC,MAAM,IAAI,GAAG,IAAmB,CAAC;QAEjC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAEjD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QAEnC,qCAAqC;QACrC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,GAAG,GAAG,UAAU,GAAG,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;gBACvB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC7B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC7B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,yBAAyB;QACzB,OAAO,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC1C,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc;IACd,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAW,CAAC;QACzB,MAAM,IAAI,GAAG,IAAW,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAEtC,oBAAoB;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QACxC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mCAAmC;IACnC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAExB,uBAAuB;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;IAE9B,qBAAqB;IACrB,IAAI,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAExD,mCAAmC;IACnC,IAAI,QAAQ,GAAoB,IAAI,CAAC;IACrC,MAAM,YAAY,GAAG,MAAM,CAAC,qBAAqB,KAAK,SAAS,CAAC;IAEhE,IAAI,YAAY,EAAE,CAAC;QACjB,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBAClE,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,oCAAoC;QACpC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAEjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAExB,IAAI,KAAK,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;YACzD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;gBAChE,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fast-is-equal",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.2",
|
|
4
4
|
"description": "Blazing-fast equality checks, minus the baggage. A lean, standalone alternative to Lodash's isEqualâbecause speed matters.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deep-equal",
|
|
@@ -112,5 +112,6 @@
|
|
|
112
112
|
"type": "individual",
|
|
113
113
|
"url": "https://ko-fi.com/futurejj"
|
|
114
114
|
}
|
|
115
|
-
]
|
|
115
|
+
],
|
|
116
|
+
"packageManager": "yarn@1.22.22"
|
|
116
117
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,311 +0,0 @@
|
|
|
1
|
-
import { fastIsEqual } from '../index';
|
|
2
|
-
describe('isEqual', () => {
|
|
3
|
-
// **Primitives**
|
|
4
|
-
it('should return true for identical primitives', () => {
|
|
5
|
-
expect(fastIsEqual(1, 1)).toBe(true);
|
|
6
|
-
expect(fastIsEqual('a', 'a')).toBe(true);
|
|
7
|
-
expect(fastIsEqual(true, true)).toBe(true);
|
|
8
|
-
});
|
|
9
|
-
it('should return false for different primitives', () => {
|
|
10
|
-
expect(fastIsEqual(1, 2)).toBe(false);
|
|
11
|
-
expect(fastIsEqual('a', 'b')).toBe(false);
|
|
12
|
-
expect(fastIsEqual(true, false)).toBe(false);
|
|
13
|
-
});
|
|
14
|
-
// **NaN**
|
|
15
|
-
it('should return true for NaN and NaN', () => {
|
|
16
|
-
expect(fastIsEqual(NaN, NaN)).toBe(true);
|
|
17
|
-
});
|
|
18
|
-
// **Null and Undefined**
|
|
19
|
-
it('should return true for null and null', () => {
|
|
20
|
-
expect(fastIsEqual(null, null)).toBe(true);
|
|
21
|
-
});
|
|
22
|
-
it('should return true for undefined and undefined', () => {
|
|
23
|
-
expect(fastIsEqual(undefined, undefined)).toBe(true);
|
|
24
|
-
});
|
|
25
|
-
it('should return false for null and undefined', () => {
|
|
26
|
-
expect(fastIsEqual(null, undefined)).toBe(false);
|
|
27
|
-
});
|
|
28
|
-
// **Objects**
|
|
29
|
-
it('should return true for identical objects', () => {
|
|
30
|
-
const obj = { a: 1, b: { c: 2 } };
|
|
31
|
-
expect(fastIsEqual(obj, obj)).toBe(true);
|
|
32
|
-
});
|
|
33
|
-
it('should return true for deeply equal objects', () => {
|
|
34
|
-
const obj1 = { a: 1, b: { c: 2 } };
|
|
35
|
-
const obj2 = { a: 1, b: { c: 2 } };
|
|
36
|
-
expect(fastIsEqual(obj1, obj2)).toBe(true);
|
|
37
|
-
});
|
|
38
|
-
it('should return false for objects with different keys', () => {
|
|
39
|
-
const obj1 = { a: 1 };
|
|
40
|
-
const obj2 = { b: 1 };
|
|
41
|
-
expect(fastIsEqual(obj1, obj2)).toBe(false);
|
|
42
|
-
});
|
|
43
|
-
it('should return false for objects with different values', () => {
|
|
44
|
-
const obj1 = { a: 1 };
|
|
45
|
-
const obj2 = { a: 2 };
|
|
46
|
-
expect(fastIsEqual(obj1, obj2)).toBe(false);
|
|
47
|
-
});
|
|
48
|
-
// **Arrays**
|
|
49
|
-
it('should return true for identical arrays', () => {
|
|
50
|
-
const arr = [1, 2, 3];
|
|
51
|
-
expect(fastIsEqual(arr, arr)).toBe(true);
|
|
52
|
-
});
|
|
53
|
-
it('should return true for deeply equal arrays', () => {
|
|
54
|
-
const arr1 = [1, [2, 3]];
|
|
55
|
-
const arr2 = [1, [2, 3]];
|
|
56
|
-
expect(fastIsEqual(arr1, arr2)).toBe(true);
|
|
57
|
-
});
|
|
58
|
-
it('should return false for arrays with different lengths', () => {
|
|
59
|
-
const arr1 = [1, 2];
|
|
60
|
-
const arr2 = [1, 2, 3];
|
|
61
|
-
expect(fastIsEqual(arr1, arr2)).toBe(false);
|
|
62
|
-
});
|
|
63
|
-
it('should return false for arrays with different elements', () => {
|
|
64
|
-
const arr1 = [1, 2];
|
|
65
|
-
const arr2 = [1, 3];
|
|
66
|
-
expect(fastIsEqual(arr1, arr2)).toBe(false);
|
|
67
|
-
});
|
|
68
|
-
// **Dates**
|
|
69
|
-
it('should return true for identical dates', () => {
|
|
70
|
-
const date = new Date();
|
|
71
|
-
expect(fastIsEqual(date, date)).toBe(true);
|
|
72
|
-
});
|
|
73
|
-
it('should return true for dates with the same timestamp', () => {
|
|
74
|
-
const date1 = new Date('2023-01-01');
|
|
75
|
-
const date2 = new Date('2023-01-01');
|
|
76
|
-
expect(fastIsEqual(date1, date2)).toBe(true);
|
|
77
|
-
});
|
|
78
|
-
it('should return false for dates with different timestamps', () => {
|
|
79
|
-
const date1 = new Date('2023-01-01');
|
|
80
|
-
const date2 = new Date('2023-01-02');
|
|
81
|
-
expect(fastIsEqual(date1, date2)).toBe(false);
|
|
82
|
-
});
|
|
83
|
-
// **Regular Expressions**
|
|
84
|
-
it('should return true for identical regexes', () => {
|
|
85
|
-
const regex = /a/g;
|
|
86
|
-
expect(fastIsEqual(regex, regex)).toBe(true);
|
|
87
|
-
});
|
|
88
|
-
it('should return true for regexes with the same pattern and flags', () => {
|
|
89
|
-
const regex1 = /a/g;
|
|
90
|
-
const regex2 = /a/g;
|
|
91
|
-
expect(fastIsEqual(regex1, regex2)).toBe(true);
|
|
92
|
-
});
|
|
93
|
-
it('should return false for regexes with different patterns', () => {
|
|
94
|
-
const regex1 = /a/g;
|
|
95
|
-
const regex2 = /b/g;
|
|
96
|
-
expect(fastIsEqual(regex1, regex2)).toBe(false);
|
|
97
|
-
});
|
|
98
|
-
it('should return false for regexes with different flags', () => {
|
|
99
|
-
const regex1 = /a/g;
|
|
100
|
-
const regex2 = /a/i;
|
|
101
|
-
expect(fastIsEqual(regex1, regex2)).toBe(false);
|
|
102
|
-
});
|
|
103
|
-
// **Maps**
|
|
104
|
-
it('should return true for identical maps', () => {
|
|
105
|
-
const map = new Map([['a', 1]]);
|
|
106
|
-
expect(fastIsEqual(map, map)).toBe(true);
|
|
107
|
-
});
|
|
108
|
-
it('should return true for maps with the same key-value pairs', () => {
|
|
109
|
-
const map1 = new Map([['a', 1]]);
|
|
110
|
-
const map2 = new Map([['a', 1]]);
|
|
111
|
-
expect(fastIsEqual(map1, map2)).toBe(true);
|
|
112
|
-
});
|
|
113
|
-
it('should return false for maps with different key-value pairs', () => {
|
|
114
|
-
const map1 = new Map([['a', 1]]);
|
|
115
|
-
const map2 = new Map([['a', 2]]);
|
|
116
|
-
expect(fastIsEqual(map1, map2)).toBe(false);
|
|
117
|
-
});
|
|
118
|
-
it('should return false for maps with different sizes', () => {
|
|
119
|
-
const map1 = new Map([['a', 1]]);
|
|
120
|
-
const map2 = new Map([['a', 1], ['b', 2]]);
|
|
121
|
-
expect(fastIsEqual(map1, map2)).toBe(false);
|
|
122
|
-
});
|
|
123
|
-
// **Sets**
|
|
124
|
-
it('should return true for identical sets', () => {
|
|
125
|
-
const set = new Set([1, 2]);
|
|
126
|
-
expect(fastIsEqual(set, set)).toBe(true);
|
|
127
|
-
});
|
|
128
|
-
it('should return true for sets with the same elements', () => {
|
|
129
|
-
const set1 = new Set([1, 2]);
|
|
130
|
-
const set2 = new Set([1, 2]);
|
|
131
|
-
expect(fastIsEqual(set1, set2)).toBe(true);
|
|
132
|
-
});
|
|
133
|
-
it('should return false for sets with different elements', () => {
|
|
134
|
-
const set1 = new Set([1, 2]);
|
|
135
|
-
const set2 = new Set([1, 3]);
|
|
136
|
-
expect(fastIsEqual(set1, set2)).toBe(false);
|
|
137
|
-
});
|
|
138
|
-
it('should return false for sets with different sizes', () => {
|
|
139
|
-
const set1 = new Set([1, 2]);
|
|
140
|
-
const set2 = new Set([1]);
|
|
141
|
-
expect(fastIsEqual(set1, set2)).toBe(false);
|
|
142
|
-
});
|
|
143
|
-
// **Circular References**
|
|
144
|
-
it('should return true for circular references', () => {
|
|
145
|
-
const obj1 = {};
|
|
146
|
-
obj1.self = obj1;
|
|
147
|
-
const obj2 = {};
|
|
148
|
-
obj2.self = obj2;
|
|
149
|
-
expect(fastIsEqual(obj1, obj2)).toBe(true);
|
|
150
|
-
});
|
|
151
|
-
it('should return false for different circular references', () => {
|
|
152
|
-
const obj1 = {};
|
|
153
|
-
obj1.self = obj1;
|
|
154
|
-
const obj2 = { self: {} };
|
|
155
|
-
expect(fastIsEqual(obj1, obj2)).toBe(false);
|
|
156
|
-
});
|
|
157
|
-
// **Other Types (Functions, Promises)**
|
|
158
|
-
it('should return true for the same function reference', () => {
|
|
159
|
-
const func = () => { };
|
|
160
|
-
expect(fastIsEqual(func, func)).toBe(true);
|
|
161
|
-
});
|
|
162
|
-
it('should return false for different functions', () => {
|
|
163
|
-
const func1 = () => { };
|
|
164
|
-
const func2 = () => { };
|
|
165
|
-
expect(fastIsEqual(func1, func2)).toBe(false);
|
|
166
|
-
});
|
|
167
|
-
it('should return false for different promises', () => {
|
|
168
|
-
const p1 = Promise.resolve(1);
|
|
169
|
-
const p2 = Promise.resolve(1);
|
|
170
|
-
expect(fastIsEqual(p1, p2)).toBe(false);
|
|
171
|
-
});
|
|
172
|
-
// **Mixed Types**
|
|
173
|
-
it('should return false for different types', () => {
|
|
174
|
-
expect(fastIsEqual(1, '1')).toBe(false);
|
|
175
|
-
expect(fastIsEqual({}, [])).toBe(false);
|
|
176
|
-
expect(fastIsEqual(new Map(), new Set())).toBe(false);
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
// **Symbols**
|
|
180
|
-
it('should return true for identical symbols', () => {
|
|
181
|
-
const sym = Symbol('test');
|
|
182
|
-
expect(fastIsEqual(sym, sym)).toBe(true);
|
|
183
|
-
});
|
|
184
|
-
it('should return false for different symbols', () => {
|
|
185
|
-
const sym1 = Symbol('test');
|
|
186
|
-
const sym2 = Symbol('test');
|
|
187
|
-
expect(fastIsEqual(sym1, sym2)).toBe(false);
|
|
188
|
-
});
|
|
189
|
-
it('should handle objects with symbol properties', () => {
|
|
190
|
-
const sym = Symbol('test');
|
|
191
|
-
const obj1 = { [sym]: 'value' };
|
|
192
|
-
const obj2 = { [sym]: 'value' };
|
|
193
|
-
expect(fastIsEqual(obj1, obj2)).toBe(true);
|
|
194
|
-
});
|
|
195
|
-
// **TypedArrays**
|
|
196
|
-
it('should return true for identical TypedArrays', () => {
|
|
197
|
-
const arr1 = new Uint8Array([1, 2, 3]);
|
|
198
|
-
const arr2 = new Uint8Array([1, 2, 3]);
|
|
199
|
-
expect(fastIsEqual(arr1, arr2)).toBe(true);
|
|
200
|
-
});
|
|
201
|
-
it('should return false for TypedArrays with different values', () => {
|
|
202
|
-
const arr1 = new Uint8Array([1, 2, 3]);
|
|
203
|
-
const arr2 = new Uint8Array([1, 2, 4]);
|
|
204
|
-
expect(fastIsEqual(arr1, arr2)).toBe(false);
|
|
205
|
-
});
|
|
206
|
-
it('should return false for different TypedArray types', () => {
|
|
207
|
-
const arr1 = new Uint8Array([1, 2, 3]);
|
|
208
|
-
const arr2 = new Int8Array([1, 2, 3]);
|
|
209
|
-
expect(fastIsEqual(arr1, arr2)).toBe(false);
|
|
210
|
-
});
|
|
211
|
-
// **Sets with complex values**
|
|
212
|
-
it('should return true for sets with equal objects', () => {
|
|
213
|
-
const obj1 = { a: 1 };
|
|
214
|
-
const obj2 = { a: 1 };
|
|
215
|
-
const set1 = new Set([obj1]);
|
|
216
|
-
const set2 = new Set([obj2]);
|
|
217
|
-
expect(fastIsEqual(set1, set2)).toBe(true);
|
|
218
|
-
});
|
|
219
|
-
it('should handle sets with nested structures', () => {
|
|
220
|
-
const set1 = new Set([{ a: { b: 1 } }, [1, 2]]);
|
|
221
|
-
const set2 = new Set([[1, 2], { a: { b: 1 } }]);
|
|
222
|
-
expect(fastIsEqual(set1, set2)).toBe(true);
|
|
223
|
-
});
|
|
224
|
-
// **Maps with complex keys**
|
|
225
|
-
it('should handle maps with object keys', () => {
|
|
226
|
-
const key1 = { id: 1 };
|
|
227
|
-
const key2 = { id: 1 };
|
|
228
|
-
const map1 = new Map([[key1, 'value']]);
|
|
229
|
-
const map2 = new Map([[key2, 'value']]);
|
|
230
|
-
expect(fastIsEqual(map1, map2)).toBe(true);
|
|
231
|
-
});
|
|
232
|
-
// **Error objects**
|
|
233
|
-
it('should return true for identical Error instances', () => {
|
|
234
|
-
const err = new Error('test');
|
|
235
|
-
expect(fastIsEqual(err, err)).toBe(true);
|
|
236
|
-
});
|
|
237
|
-
it('should return false for different Error instances with same message', () => {
|
|
238
|
-
const err1 = new Error('test');
|
|
239
|
-
const err2 = new Error('test');
|
|
240
|
-
expect(fastIsEqual(err1, err2)).toBe(false);
|
|
241
|
-
});
|
|
242
|
-
// **Functions with properties**
|
|
243
|
-
it('should handle functions with properties', () => {
|
|
244
|
-
const func1 = () => { };
|
|
245
|
-
func1.customProp = 'value';
|
|
246
|
-
const func2 = () => { };
|
|
247
|
-
func2.customProp = 'value';
|
|
248
|
-
expect(fastIsEqual(func1, func2)).toBe(false); // Different function references
|
|
249
|
-
});
|
|
250
|
-
// **Edge cases**
|
|
251
|
-
it('should handle objects with null prototype', () => {
|
|
252
|
-
const obj1 = Object.create(null);
|
|
253
|
-
obj1.a = 1;
|
|
254
|
-
const obj2 = Object.create(null);
|
|
255
|
-
obj2.a = 1;
|
|
256
|
-
expect(fastIsEqual(obj1, obj2)).toBe(true);
|
|
257
|
-
});
|
|
258
|
-
it('should handle -0 and +0', () => {
|
|
259
|
-
expect(fastIsEqual(-0, +0)).toBe(true);
|
|
260
|
-
});
|
|
261
|
-
it('should handle Infinity', () => {
|
|
262
|
-
expect(fastIsEqual(Infinity, Infinity)).toBe(true);
|
|
263
|
-
expect(fastIsEqual(-Infinity, -Infinity)).toBe(true);
|
|
264
|
-
expect(fastIsEqual(Infinity, -Infinity)).toBe(false);
|
|
265
|
-
});
|
|
266
|
-
// **Complex nested circular references**
|
|
267
|
-
it('should handle mutual circular references', () => {
|
|
268
|
-
const obj1 = { a: {} };
|
|
269
|
-
const obj2 = { a: {} };
|
|
270
|
-
obj1.a.b = obj1;
|
|
271
|
-
obj2.a.b = obj2;
|
|
272
|
-
expect(fastIsEqual(obj1, obj2)).toBe(true);
|
|
273
|
-
});
|
|
274
|
-
it('should handle arrays with circular references', () => {
|
|
275
|
-
const arr1 = [1, 2];
|
|
276
|
-
const arr2 = [1, 2];
|
|
277
|
-
arr1.push(arr1);
|
|
278
|
-
arr2.push(arr2);
|
|
279
|
-
expect(fastIsEqual(arr1, arr2)).toBe(true);
|
|
280
|
-
});
|
|
281
|
-
// **Mixed circular references**
|
|
282
|
-
it('should handle different circular reference structures', () => {
|
|
283
|
-
const obj1 = { a: { b: {} } };
|
|
284
|
-
obj1.a.b.c = obj1.a;
|
|
285
|
-
const obj2 = { a: { b: {} } };
|
|
286
|
-
obj2.a.b.c = obj2;
|
|
287
|
-
expect(fastIsEqual(obj1, obj2)).toBe(false);
|
|
288
|
-
});
|
|
289
|
-
// **ArrayBuffer and DataView**
|
|
290
|
-
it('should handle ArrayBuffer comparison', () => {
|
|
291
|
-
const buffer1 = new ArrayBuffer(8);
|
|
292
|
-
const buffer2 = new ArrayBuffer(8);
|
|
293
|
-
new Uint8Array(buffer1).set([1, 2, 3, 4]);
|
|
294
|
-
new Uint8Array(buffer2).set([1, 2, 3, 4]);
|
|
295
|
-
expect(fastIsEqual(buffer1, buffer2)).toBe(true);
|
|
296
|
-
});
|
|
297
|
-
// **Property descriptors edge case**
|
|
298
|
-
it('should handle non-enumerable properties', () => {
|
|
299
|
-
const obj1 = {};
|
|
300
|
-
Object.defineProperty(obj1, 'hidden', { value: 'secret', enumerable: false });
|
|
301
|
-
const obj2 = {};
|
|
302
|
-
Object.defineProperty(obj2, 'hidden', { value: 'secret', enumerable: false });
|
|
303
|
-
expect(fastIsEqual(obj1, obj2)).toBe(true); // Should ignore non-enumerable
|
|
304
|
-
});
|
|
305
|
-
// **Sparse arrays**
|
|
306
|
-
it('should handle sparse arrays correctly', () => {
|
|
307
|
-
const arr1 = [1, , 3]; // sparse array with hole
|
|
308
|
-
const arr2 = [1, undefined, 3];
|
|
309
|
-
expect(fastIsEqual(arr1, arr2)).toBe(false);
|
|
310
|
-
});
|
|
311
|
-
//# sourceMappingURL=fastIsEqual.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fastIsEqual.test.js","sourceRoot":"","sources":["../../src/__tests__/fastIsEqual.test.ts"],"names":[],"mappings":"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"}
|