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 CHANGED
@@ -4,10 +4,9 @@
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/fast-is-equal)](https://badge.fury.io/js/fast-is-equal) [![License](https://img.shields.io/github/license/JairajJangle/fast-is-equal)](https://github.com/JairajJangle/fast-is-equal/blob/main/LICENSE) ![npm bundle size](https://img.shields.io/bundlephobia/minzip/fast-is-equal) [![Workflow Status](https://github.com/JairajJangle/fast-is-equal/actions/workflows/ci.yml/badge.svg)](https://github.com/JairajJangle/fast-is-equal/actions/workflows/ci.yml) [![React Compatibility](https://img.shields.io/badge/React-Compatible-61DAFB?logo=react)](https://github.com/JairajJangle/fast-is-equal) [![React Native Compatibility](https://img.shields.io/badge/React%20Native-Compatible-61DAFB?logo=react)](https://github.com/JairajJangle/fast-is-equal) [![Angular Compatibility](https://img.shields.io/badge/Angular-Compatible-DD0031?logo=angular)](https://github.com/JairajJangle/fast-is-equal) [![Vue Compatibility](https://img.shields.io/badge/Vue-Compatible-4FC08D?logo=vue.js)](https://github.com/JairajJangle/fast-is-equal) [![Svelte Compatibility](https://img.shields.io/badge/Svelte-Compatible-FF3E00?logo=svelte)](https://github.com/JairajJangle/fast-is-equal) [![Modern JS Frameworks](https://img.shields.io/badge/Modern%20JS%20Frameworks-Compatible-F7DF1E?logo=javascript)](https://github.com/JairajJangle/fast-is-equal)
6
6
 
7
-
8
7
  ## Why fast-is-equal?
9
8
 
10
- - 🚀 **Lightning Speed**: Up to **50.87x faster** than Lodash's `isEqual` (average **9.73x faster** across 49 test cases).
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 **9.73x faster** (0.000212 ms vs. 0.002060 ms).
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 **50.87x faster** for large Sets.
46
+ - **Peak Performance**: Up to **55.84x faster** for large Sets.
48
47
 
49
48
  ### Top 10 Performance Gains
50
49
 
51
- | Test Case | fastIsEqual (ms) | Lodash isEqual (ms) | Speed Boost |
52
- | ---------------------- | ---------------- | ------------------- | ------------ |
53
- | Large Set (100 items) | 0.000760 | 0.038668 | **50.87x** 🚀 |
54
- | Map vs Set | 0.000019 | 0.000497 | **25.97x** 🚀 |
55
- | Large Map (50 entries) | 0.001506 | 0.026325 | **17.48x** 🚀 |
56
- | Map with primitives | 0.000107 | 0.001537 | **14.33x** 🚀 |
57
- | ArrayBuffer (small) | 0.000090 | 0.001270 | **14.04x** 🚀 |
58
- | Map (unequal) | 0.000102 | 0.001414 | **13.87x** 🚀 |
59
- | Uint8Array | 0.000060 | 0.000664 | **10.99x** 🚀 |
60
- | Set of strings | 0.000087 | 0.000953 | **10.95x** 🚀 |
61
- | Set (unequal) | 0.000087 | 0.000954 | **10.93x** 🚀 |
62
- | Float32Array | 0.000061 | 0.000666 | **10.91x** 🚀 |
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
- #### Notable Test Cases
77
+ #### Edge Cases Where Lodash Wins
69
78
 
70
- - **Primitives**: Numbers (2.05x), NaN (1.41x), Negative Zero (1.02x).
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
- #### Rare Cases Where Lodash Wins
81
+ - String vs Number: 0.95x slower
82
+ - Large Numbers: 0.99x slower
83
+ - Boolean vs Number: 0.99x slower
76
84
 
77
- - Strings: 0.96x slower
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
- const typeB = typeof b;
17
- // Type mismatch = not equal
18
- if (typeA !== typeB)
19
- return false;
20
- // Handle primitives inline
21
- switch (typeA) {
22
- case TYPEOF_NUMBER:
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
- // Optimized array comparison
46
- for (let i = 0; i < len; i++) {
47
- // Sparse array check using in operator
48
- if ((i in a) !== (i in b))
49
- return false;
50
- if (!(i in a))
51
- continue;
52
- const elemA = a[i];
53
- const elemB = b[i];
54
- // Fast path for identical elements
55
- if (elemA === elemB)
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
- return false;
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
- // Need deep comparison - use minimal visited map
69
- if (!deepEqual(elemA, elemB, new Map()))
70
- return false;
89
+ return true;
71
90
  }
72
- return true;
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 with caching
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 Number.isNaN(valA) && Number.isNaN(valB);
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 === Date) {
133
+ if (ctorA === dateConstructor) {
114
134
  return valA.getTime() === valB.getTime();
115
135
  }
116
136
  // RegExp - inline comparison
117
- if (ctorA === RegExp) {
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 === Promise || ctorA === Error) {
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
- // Optimized loop
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 === Map) {
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
- // Try fast path first - assume primitive keys
157
- let complexKeyFound = false;
182
+ // Optimized iteration
158
183
  for (const [key, valueA] of mapA) {
159
- if (!isPrimitive(key)) {
160
- complexKeyFound = true;
161
- break;
162
- }
163
- if (!mapB.has(key) || !deepEqual(valueA, mapB.get(key), visited)) {
164
- return false;
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
- if (!complexKeyFound)
168
- return true;
169
- // Slow path - complex keys
170
- for (const [keyA, valueA] of mapA) {
171
- let found = false;
172
- for (const [keyB, valueB] of mapB) {
173
- if (deepEqual(keyA, keyB, visited) && deepEqual(valueA, valueB, visited)) {
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 === Set) {
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
- // Scan for complexity
192
- let hasComplex = false;
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
- if (!isPrimitive(val)) {
195
- hasComplex = true;
196
- break;
226
+ const valType = typeof val;
227
+ if (valType === TYPEOF_OBJECT || valType === TYPEOF_FUNCTION) {
228
+ hasObjects = true;
197
229
  }
198
- }
199
- // Fast path - all primitives
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
- // Slow path - need one-to-one matching
208
- // Avoid Array.from for performance
209
- const iterB = setB.values();
210
- const arrB = [];
211
- for (const val of iterB) {
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
- const used = new Uint8Array(arrB.length); // Faster than boolean array
215
- for (const valA of setA) {
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 < arrB.length; 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, arrB[j], newVisited)) {
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 === ArrayBuffer) {
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 len = byteLength - 3;
244
- for (; i < len; i += 4) {
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
- // Direct comparison
267
- for (let i = 0; i < len; i++) {
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
- // Check for symbols only if likely
283
- let symbolsA = null;
284
- const checkSymbols = Object.getOwnPropertySymbols !== undefined;
285
- if (checkSymbols) {
286
- symbolsA = Object.getOwnPropertySymbols(valA);
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
- if (propA !== propB && !deepEqual(propA, propB, visited)) {
302
- return false;
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 present
306
- if (symbolsA && symbolsA.length > 0) {
307
- for (let i = 0; i < symbolsA.length; i++) {
308
- const sym = symbolsA[i];
309
- if (!(sym in valB) || !deepEqual(valA[sym], valB[sym], visited)) {
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":"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"}
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.0",
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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"}