fast-equals 5.0.0-beta.5 → 5.0.0
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/CHANGELOG.md +17 -1
- package/README.md +68 -48
- package/dist/cjs/index.cjs +165 -140
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/types/comparator.d.ts +20 -3
- package/dist/cjs/types/equals.d.ts +5 -2
- package/dist/cjs/types/index.d.ts +9 -9
- package/dist/cjs/types/internalTypes.d.ts +100 -12
- package/dist/cjs/types/utils.d.ts +1 -6
- package/dist/esm/index.mjs +165 -140
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/types/comparator.d.ts +20 -3
- package/dist/esm/types/equals.d.ts +5 -2
- package/dist/esm/types/index.d.ts +9 -9
- package/dist/esm/types/internalTypes.d.ts +100 -12
- package/dist/esm/types/utils.d.ts +1 -6
- package/dist/min/index.js +1 -1
- package/dist/min/types/comparator.d.ts +20 -3
- package/dist/min/types/equals.d.ts +5 -2
- package/dist/min/types/index.d.ts +9 -9
- package/dist/min/types/internalTypes.d.ts +100 -12
- package/dist/min/types/utils.d.ts +1 -6
- package/dist/umd/index.js +165 -140
- package/dist/umd/index.js.map +1 -1
- package/dist/umd/types/comparator.d.ts +20 -3
- package/dist/umd/types/equals.d.ts +5 -2
- package/dist/umd/types/index.d.ts +9 -9
- package/dist/umd/types/internalTypes.d.ts +100 -12
- package/dist/umd/types/utils.d.ts +1 -6
- package/package.json +7 -7
- package/recipes/legacy-circular-equal-support.md +3 -2
- package/recipes/legacy-regexp-support.md +2 -3
- package/recipes/non-standard-properties.md +4 -2
- package/src/comparator.ts +126 -38
- package/src/equals.ts +97 -63
- package/src/index.ts +21 -65
- package/src/internalTypes.ts +104 -16
- package/src/utils.ts +2 -24
package/dist/umd/index.js
CHANGED
|
@@ -14,15 +14,6 @@
|
|
|
14
14
|
return comparatorA(a, b, state) && comparatorB(a, b, state);
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
|
-
/**
|
|
18
|
-
* Default equality comparator pass-through, used as the standard `isEqual` creator for
|
|
19
|
-
* use inside the built comparator.
|
|
20
|
-
*/
|
|
21
|
-
function createInternalComparator(compare) {
|
|
22
|
-
return function (a, b, _indexOrKeyA, _indexOrKeyB, _parentA, _parentB, state) {
|
|
23
|
-
return compare(a, b, state);
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
17
|
/**
|
|
27
18
|
* Wrap the provided `areItemsEqual` method to manage the circular state, allowing
|
|
28
19
|
* for circular references to be safely included in the comparison without creating
|
|
@@ -95,36 +86,42 @@
|
|
|
95
86
|
* Whether the `Map`s are equal in value.
|
|
96
87
|
*/
|
|
97
88
|
function areMapsEqual(a, b, state) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
89
|
+
if (a.size !== b.size) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
var matchedIndices = {};
|
|
93
|
+
var aIterable = a.entries();
|
|
94
|
+
var index = 0;
|
|
95
|
+
var aResult;
|
|
96
|
+
var bResult;
|
|
97
|
+
while ((aResult = aIterable.next())) {
|
|
98
|
+
if (aResult.done) {
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
var bIterable = b.entries();
|
|
102
|
+
var hasMatch = false;
|
|
103
|
+
var matchIndex = 0;
|
|
104
|
+
while ((bResult = bIterable.next())) {
|
|
105
|
+
if (bResult.done) {
|
|
106
|
+
break;
|
|
110
107
|
}
|
|
111
|
-
var
|
|
112
|
-
var
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
(
|
|
117
|
-
state.equals(
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
108
|
+
var _a = aResult.value, aKey = _a[0], aValue = _a[1];
|
|
109
|
+
var _b = bResult.value, bKey = _b[0], bValue = _b[1];
|
|
110
|
+
if (!hasMatch &&
|
|
111
|
+
!matchedIndices[matchIndex] &&
|
|
112
|
+
(hasMatch =
|
|
113
|
+
state.equals(aKey, bKey, index, matchIndex, a, b, state) &&
|
|
114
|
+
state.equals(aValue, bValue, aKey, bKey, a, b, state))) {
|
|
115
|
+
matchedIndices[matchIndex] = true;
|
|
116
|
+
}
|
|
117
|
+
matchIndex++;
|
|
118
|
+
}
|
|
119
|
+
if (!hasMatch) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
index++;
|
|
126
123
|
}
|
|
127
|
-
return
|
|
124
|
+
return true;
|
|
128
125
|
}
|
|
129
126
|
/**
|
|
130
127
|
* Whether the objects are equal in value.
|
|
@@ -212,33 +209,40 @@
|
|
|
212
209
|
* Whether the `Set`s are equal in value.
|
|
213
210
|
*/
|
|
214
211
|
function areSetsEqual(a, b, state) {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
212
|
+
if (a.size !== b.size) {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
var matchedIndices = {};
|
|
216
|
+
var aIterable = a.values();
|
|
217
|
+
var aResult;
|
|
218
|
+
var bResult;
|
|
219
|
+
while ((aResult = aIterable.next())) {
|
|
220
|
+
if (aResult.done) {
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
var bIterable = b.values();
|
|
224
|
+
var hasMatch = false;
|
|
225
|
+
var matchIndex = 0;
|
|
226
|
+
while ((bResult = bIterable.next())) {
|
|
227
|
+
if (bResult.done) {
|
|
228
|
+
break;
|
|
226
229
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
isValueEqual = hasMatch;
|
|
238
|
-
});
|
|
230
|
+
if (!hasMatch &&
|
|
231
|
+
!matchedIndices[matchIndex] &&
|
|
232
|
+
(hasMatch = state.equals(aResult.value, bResult.value, aResult.value, bResult.value, a, b, state))) {
|
|
233
|
+
matchedIndices[matchIndex] = true;
|
|
234
|
+
}
|
|
235
|
+
matchIndex++;
|
|
236
|
+
}
|
|
237
|
+
if (!hasMatch) {
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
239
240
|
}
|
|
240
|
-
return
|
|
241
|
+
return true;
|
|
241
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Whether the TypedArray instances are equal in value.
|
|
245
|
+
*/
|
|
242
246
|
function areTypedArraysEqual(a, b) {
|
|
243
247
|
var index = a.length;
|
|
244
248
|
if (b.length !== index) {
|
|
@@ -270,7 +274,7 @@
|
|
|
270
274
|
/**
|
|
271
275
|
* Create a comparator method based on the type-specific equality comparators passed.
|
|
272
276
|
*/
|
|
273
|
-
function
|
|
277
|
+
function createEqualityComparator(_a) {
|
|
274
278
|
var areArraysEqual = _a.areArraysEqual, areDatesEqual = _a.areDatesEqual, areMapsEqual = _a.areMapsEqual, areObjectsEqual = _a.areObjectsEqual, arePrimitiveWrappersEqual = _a.arePrimitiveWrappersEqual, areRegExpsEqual = _a.areRegExpsEqual, areSetsEqual = _a.areSetsEqual, areTypedArraysEqual = _a.areTypedArraysEqual;
|
|
275
279
|
/**
|
|
276
280
|
* compare the value of the two objects and return true if they are equivalent in values
|
|
@@ -284,9 +288,13 @@
|
|
|
284
288
|
// of them being equal but not strictly is if they are both `NaN`. Since
|
|
285
289
|
// `NaN` is uniquely not equal to itself, we can use self-comparison of
|
|
286
290
|
// both objects, which is faster than `isNaN()`.
|
|
287
|
-
if (
|
|
291
|
+
if (a == null ||
|
|
292
|
+
b == null ||
|
|
293
|
+
typeof a !== 'object' ||
|
|
294
|
+
typeof b !== 'object') {
|
|
288
295
|
return a !== a && b !== b;
|
|
289
296
|
}
|
|
297
|
+
var constructor = a.constructor;
|
|
290
298
|
// Checks are listed in order of commonality of use-case:
|
|
291
299
|
// 1. Common complex object types (plain object, array)
|
|
292
300
|
// 2. Common data values (date, regexp)
|
|
@@ -295,43 +303,47 @@
|
|
|
295
303
|
// Inherently this is both subjective and assumptive, however
|
|
296
304
|
// when reviewing comparable libraries in the wild this order
|
|
297
305
|
// appears to be generally consistent.
|
|
306
|
+
// Constructors should match, otherwise there is potential for false positives
|
|
307
|
+
// between class and subclass or custom object and POJO.
|
|
308
|
+
if (constructor !== b.constructor) {
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
298
311
|
// `isPlainObject` only checks against the object's own realm. Cross-realm
|
|
299
312
|
// comparisons are rare, and will be handled in the ultimate fallback, so
|
|
300
|
-
// we can avoid the
|
|
301
|
-
if (
|
|
313
|
+
// we can avoid capturing the string tag.
|
|
314
|
+
if (constructor === Object) {
|
|
302
315
|
return areObjectsEqual(a, b, state);
|
|
303
316
|
}
|
|
304
|
-
//
|
|
305
|
-
//
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
return false;
|
|
317
|
+
// `isArray()` works on subclasses and is cross-realm, so we can avoid capturing
|
|
318
|
+
// the string tag or doing an `instanceof` check.
|
|
319
|
+
if (isArray(a)) {
|
|
320
|
+
return areArraysEqual(a, b, state);
|
|
309
321
|
}
|
|
310
|
-
// `
|
|
311
|
-
// the
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
var bArray = isArray(b);
|
|
315
|
-
if (aArray || bArray) {
|
|
316
|
-
return aArray === bArray && areArraysEqual(a, b, state);
|
|
317
|
-
}
|
|
318
|
-
// Prioritize the `TypedArray` check because it does not require capturing the tag, which is a
|
|
319
|
-
// slower path.
|
|
320
|
-
if (isTypedArray) {
|
|
321
|
-
aArray = isTypedArray(a);
|
|
322
|
-
bArray = isTypedArray(b);
|
|
323
|
-
if (aArray || bArray) {
|
|
324
|
-
return aArray === bArray && areTypedArraysEqual(a, b, state);
|
|
325
|
-
}
|
|
322
|
+
// `isTypedArray()` works on all possible TypedArray classes, so we can avoid
|
|
323
|
+
// capturing the string tag or comparing against all possible constructors.
|
|
324
|
+
if (isTypedArray != null && isTypedArray(a)) {
|
|
325
|
+
return areTypedArraysEqual(a, b, state);
|
|
326
326
|
}
|
|
327
|
-
//
|
|
328
|
-
//
|
|
329
|
-
//
|
|
330
|
-
//
|
|
331
|
-
|
|
332
|
-
if (
|
|
333
|
-
return
|
|
327
|
+
// Try to fast-path equality checks for other complex object types in the
|
|
328
|
+
// same realm to avoid capturing the string tag. Strict equality is used
|
|
329
|
+
// instead of `instanceof` because it is more performant for the common
|
|
330
|
+
// use-case. If someone is subclassing a native class, it will be handled
|
|
331
|
+
// with the string tag comparison.
|
|
332
|
+
if (constructor === Date) {
|
|
333
|
+
return areDatesEqual(a, b, state);
|
|
334
|
+
}
|
|
335
|
+
if (constructor === RegExp) {
|
|
336
|
+
return areRegExpsEqual(a, b, state);
|
|
337
|
+
}
|
|
338
|
+
if (constructor === Map) {
|
|
339
|
+
return areMapsEqual(a, b, state);
|
|
334
340
|
}
|
|
341
|
+
if (constructor === Set) {
|
|
342
|
+
return areSetsEqual(a, b, state);
|
|
343
|
+
}
|
|
344
|
+
// Since this is a custom object, capture the string tag to determing its type.
|
|
345
|
+
// This is reasonably performant in modern environments like v8 and SpiderMonkey.
|
|
346
|
+
var tag = getTag(a);
|
|
335
347
|
if (tag === DATE_TAG) {
|
|
336
348
|
return areDatesEqual(a, b, state);
|
|
337
349
|
}
|
|
@@ -344,11 +356,9 @@
|
|
|
344
356
|
if (tag === SET_TAG) {
|
|
345
357
|
return areSetsEqual(a, b, state);
|
|
346
358
|
}
|
|
347
|
-
// If a simple object tag, then we can prioritize a simple object comparison because
|
|
348
|
-
// it is likely a custom class.
|
|
349
359
|
if (tag === OBJECT_TAG) {
|
|
350
|
-
// The exception for value comparison is `Promise`-like
|
|
351
|
-
// treated the same as standard `Promise` objects, which means strict equality, and if
|
|
360
|
+
// The exception for value comparison is custom `Promise`-like class instances. These should
|
|
361
|
+
// be treated the same as standard `Promise` objects, which means strict equality, and if
|
|
352
362
|
// it reaches this point then that strict equality comparison has already failed.
|
|
353
363
|
return (typeof a.then !== 'function' &&
|
|
354
364
|
typeof b.then !== 'function' &&
|
|
@@ -381,7 +391,7 @@
|
|
|
381
391
|
/**
|
|
382
392
|
* Create the configuration object used for building comparators.
|
|
383
393
|
*/
|
|
384
|
-
function
|
|
394
|
+
function createEqualityComparatorConfig(_a) {
|
|
385
395
|
var circular = _a.circular, createCustomConfig = _a.createCustomConfig, strict = _a.strict;
|
|
386
396
|
var config = {
|
|
387
397
|
areArraysEqual: strict
|
|
@@ -400,7 +410,7 @@
|
|
|
400
410
|
? combineComparators(areSetsEqual, areObjectsEqualStrict)
|
|
401
411
|
: areSetsEqual,
|
|
402
412
|
areTypedArraysEqual: strict
|
|
403
|
-
?
|
|
413
|
+
? areObjectsEqualStrict
|
|
404
414
|
: areTypedArraysEqual,
|
|
405
415
|
};
|
|
406
416
|
if (createCustomConfig) {
|
|
@@ -420,6 +430,51 @@
|
|
|
420
430
|
}
|
|
421
431
|
return config;
|
|
422
432
|
}
|
|
433
|
+
/**
|
|
434
|
+
* Default equality comparator pass-through, used as the standard `isEqual` creator for
|
|
435
|
+
* use inside the built comparator.
|
|
436
|
+
*/
|
|
437
|
+
function createInternalEqualityComparator(compare) {
|
|
438
|
+
return function (a, b, _indexOrKeyA, _indexOrKeyB, _parentA, _parentB, state) {
|
|
439
|
+
return compare(a, b, state);
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Create the `isEqual` function used by the consuming application.
|
|
444
|
+
*/
|
|
445
|
+
function createIsEqual(_a) {
|
|
446
|
+
var circular = _a.circular, comparator = _a.comparator, createState = _a.createState, equals = _a.equals, strict = _a.strict;
|
|
447
|
+
if (createState) {
|
|
448
|
+
return function isEqual(a, b) {
|
|
449
|
+
var _a = createState(), _b = _a.cache, cache = _b === void 0 ? circular ? new WeakMap() : undefined : _b, meta = _a.meta;
|
|
450
|
+
return comparator(a, b, {
|
|
451
|
+
cache: cache,
|
|
452
|
+
equals: equals,
|
|
453
|
+
meta: meta,
|
|
454
|
+
strict: strict,
|
|
455
|
+
});
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
if (circular) {
|
|
459
|
+
return function isEqual(a, b) {
|
|
460
|
+
return comparator(a, b, {
|
|
461
|
+
cache: new WeakMap(),
|
|
462
|
+
equals: equals,
|
|
463
|
+
meta: undefined,
|
|
464
|
+
strict: strict,
|
|
465
|
+
});
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
var state = {
|
|
469
|
+
cache: undefined,
|
|
470
|
+
equals: equals,
|
|
471
|
+
meta: undefined,
|
|
472
|
+
strict: strict,
|
|
473
|
+
};
|
|
474
|
+
return function isEqual(a, b) {
|
|
475
|
+
return comparator(a, b, state);
|
|
476
|
+
};
|
|
477
|
+
}
|
|
423
478
|
|
|
424
479
|
/**
|
|
425
480
|
* Whether the items passed are deeply-equal in value.
|
|
@@ -445,29 +500,29 @@
|
|
|
445
500
|
* Whether the items passed are shallowly-equal in value.
|
|
446
501
|
*/
|
|
447
502
|
var shallowEqual = createCustomEqual({
|
|
448
|
-
|
|
503
|
+
createInternalComparator: function () { return sameValueZeroEqual; },
|
|
449
504
|
});
|
|
450
505
|
/**
|
|
451
506
|
* Whether the items passed are shallowly-equal in value based on strict comparison
|
|
452
507
|
*/
|
|
453
508
|
var strictShallowEqual = createCustomEqual({
|
|
454
|
-
comparator: sameValueZeroEqual,
|
|
455
509
|
strict: true,
|
|
510
|
+
createInternalComparator: function () { return sameValueZeroEqual; },
|
|
456
511
|
});
|
|
457
512
|
/**
|
|
458
513
|
* Whether the items passed are shallowly-equal in value, including circular references.
|
|
459
514
|
*/
|
|
460
515
|
var circularShallowEqual = createCustomEqual({
|
|
461
|
-
comparator: sameValueZeroEqual,
|
|
462
516
|
circular: true,
|
|
517
|
+
createInternalComparator: function () { return sameValueZeroEqual; },
|
|
463
518
|
});
|
|
464
519
|
/**
|
|
465
520
|
* Whether the items passed are shallowly-equal in value, including circular references,
|
|
466
521
|
* based on strict comparison.
|
|
467
522
|
*/
|
|
468
523
|
var strictCircularShallowEqual = createCustomEqual({
|
|
469
|
-
comparator: sameValueZeroEqual,
|
|
470
524
|
circular: true,
|
|
525
|
+
createInternalComparator: function () { return sameValueZeroEqual; },
|
|
471
526
|
strict: true,
|
|
472
527
|
});
|
|
473
528
|
/**
|
|
@@ -480,43 +535,13 @@
|
|
|
480
535
|
*/
|
|
481
536
|
function createCustomEqual(options) {
|
|
482
537
|
if (options === void 0) { options = {}; }
|
|
483
|
-
var
|
|
484
|
-
var config =
|
|
485
|
-
var
|
|
486
|
-
var
|
|
487
|
-
(
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
if (createState) {
|
|
491
|
-
return function isEqual(a, b, metaOverride) {
|
|
492
|
-
var _a = createState(isEqualCustom), _b = _a.cache, cache = _b === void 0 ? circular ? new WeakMap() : undefined : _b, _c = _a.equals, equals = _c === void 0 ? isEqualCustomComparator : _c, meta = _a.meta, _d = _a.strict, strict = _d === void 0 ? baseStrict : _d;
|
|
493
|
-
return isEqualCustom(a, b, {
|
|
494
|
-
cache: cache,
|
|
495
|
-
equals: equals,
|
|
496
|
-
meta: metaOverride !== undefined ? metaOverride : meta,
|
|
497
|
-
strict: strict,
|
|
498
|
-
});
|
|
499
|
-
};
|
|
500
|
-
}
|
|
501
|
-
if (circular) {
|
|
502
|
-
return function equals(a, b) {
|
|
503
|
-
return isEqualCustom(a, b, {
|
|
504
|
-
cache: new WeakMap(),
|
|
505
|
-
equals: isEqualCustomComparator,
|
|
506
|
-
meta: undefined,
|
|
507
|
-
strict: baseStrict,
|
|
508
|
-
});
|
|
509
|
-
};
|
|
510
|
-
}
|
|
511
|
-
var state = Object.freeze({
|
|
512
|
-
cache: undefined,
|
|
513
|
-
equals: isEqualCustomComparator,
|
|
514
|
-
meta: undefined,
|
|
515
|
-
strict: baseStrict,
|
|
516
|
-
});
|
|
517
|
-
return function equals(a, b) {
|
|
518
|
-
return isEqualCustom(a, b, state);
|
|
519
|
-
};
|
|
538
|
+
var _a = options.circular, circular = _a === void 0 ? false : _a, createCustomInternalComparator = options.createInternalComparator, createState = options.createState, _b = options.strict, strict = _b === void 0 ? false : _b;
|
|
539
|
+
var config = createEqualityComparatorConfig(options);
|
|
540
|
+
var comparator = createEqualityComparator(config);
|
|
541
|
+
var equals = createCustomInternalComparator
|
|
542
|
+
? createCustomInternalComparator(comparator)
|
|
543
|
+
: createInternalEqualityComparator(comparator);
|
|
544
|
+
return createIsEqual({ circular: circular, comparator: comparator, createState: createState, equals: equals, strict: strict });
|
|
520
545
|
}
|
|
521
546
|
|
|
522
547
|
exports.circularDeepEqual = circularDeepEqual;
|
package/dist/umd/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/utils.ts","../../src/equals.ts","../../src/comparator.ts","../../src/index.ts"],"sourcesContent":["import {\n AnyEqualityComparator,\n BaseCircular,\n CircularState,\n Dictionary,\n EqualityComparator,\n InternalEqualityComparator,\n State,\n TypeEqualityComparator,\n} from './internalTypes';\n\nconst { getOwnPropertyNames, getOwnPropertySymbols } = Object;\nconst { hasOwnProperty } = Object.prototype;\n\n/**\n * Combine two comparators into a single comparators.\n */\nexport function combineComparators<Meta>(\n comparatorA: AnyEqualityComparator<Meta>,\n comparatorB: AnyEqualityComparator<Meta>,\n) {\n return function isEqual<A, B>(a: A, b: B, state: State<Meta>) {\n return comparatorA(a, b, state) && comparatorB(a, b, state);\n };\n}\n\n/**\n * Default equality comparator pass-through, used as the standard `isEqual` creator for\n * use inside the built comparator.\n */\nexport function createInternalComparator<Meta>(\n compare: EqualityComparator<Meta>,\n): InternalEqualityComparator<Meta> {\n return function (\n a: any,\n b: any,\n _indexOrKeyA: any,\n _indexOrKeyB: any,\n _parentA: any,\n _parentB: any,\n state: State<Meta>,\n ) {\n return compare(a, b, state);\n };\n}\n\n/**\n * Wrap the provided `areItemsEqual` method to manage the circular state, allowing\n * for circular references to be safely included in the comparison without creating\n * stack overflows.\n */\nexport function createIsCircular<\n AreItemsEqual extends TypeEqualityComparator<any, any>,\n>(areItemsEqual: AreItemsEqual): AreItemsEqual {\n return function isCircular(\n a: any,\n b: any,\n state: CircularState<BaseCircular>,\n ) {\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') {\n return areItemsEqual(a, b, state);\n }\n\n const { cache } = state;\n\n const cachedA = cache.get(a);\n const cachedB = cache.get(b);\n\n if (cachedA && cachedB) {\n return cachedA === b && cachedB === a;\n }\n\n cache.set(a, b);\n cache.set(b, a);\n\n const result = areItemsEqual(a, b, state);\n\n cache.delete(a);\n cache.delete(b);\n\n return result;\n } as AreItemsEqual;\n}\n\n/**\n * Get the properties to strictly examine, which include both own properties that are\n * not enumerable and symbol properties.\n */\nexport function getStrictProperties(\n object: Dictionary,\n): Array<string | symbol> {\n return (getOwnPropertyNames(object) as Array<string | symbol>).concat(\n getOwnPropertySymbols(object),\n );\n}\n\n/**\n * Whether the object contains the property passed as an own property.\n */\nexport const hasOwn =\n Object.hasOwn ||\n ((object: Dictionary, property: number | string | symbol) =>\n hasOwnProperty.call(object, property));\n\n/**\n * Whether the values passed are strictly equal or both NaN.\n */\nexport function sameValueZeroEqual(a: any, b: any): boolean {\n return a || b ? a === b : a === b || (a !== a && b !== b);\n}\n","import { getStrictProperties, hasOwn, sameValueZeroEqual } from './utils';\nimport type { Dictionary, State, TypedArray } from './internalTypes';\n\nconst OWNER = '_owner';\n\nconst { getOwnPropertyDescriptor, keys } = Object;\n\n/**\n * Whether the arrays are equal in value.\n */\nexport function areArraysEqual(a: any[], b: any[], state: State<any>) {\n let index = a.length;\n\n if (b.length !== index) {\n return false;\n }\n\n while (index-- > 0) {\n if (!state.equals(a[index], b[index], index, index, a, b, state)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the dates passed are equal in value.\n */\nexport function areDatesEqual(a: Date, b: Date): boolean {\n return sameValueZeroEqual(a.getTime(), b.getTime());\n}\n\n/**\n * Whether the `Map`s are equal in value.\n */\nexport function areMapsEqual(\n a: Map<any, any>,\n b: Map<any, any>,\n state: State<any>,\n): boolean {\n let isValueEqual = a.size === b.size;\n\n if (isValueEqual && a.size) {\n // The use of `forEach()` is to avoid the transpilation cost of `for...of` comparisons, and\n // the inability to control the performance of the resulting code. It also avoids excessive\n // iteration compared to doing comparisons of `keys()` and `values()`. As a result, though,\n // we cannot short-circuit the iterations; bookkeeping must be done to short-circuit the\n // equality checks themselves.\n\n const matchedIndices: Record<number, true> = {};\n\n let indexA = 0;\n\n a.forEach((aValue, aKey) => {\n if (!isValueEqual) {\n return;\n }\n\n let hasMatch = false;\n let matchIndexB = 0;\n\n b.forEach((bValue, bKey) => {\n if (\n !hasMatch &&\n !matchedIndices[matchIndexB] &&\n (hasMatch =\n state.equals(aKey, bKey, indexA, matchIndexB, a, b, state) &&\n state.equals(aValue, bValue, aKey, bKey, a, b, state))\n ) {\n matchedIndices[matchIndexB] = true;\n }\n\n matchIndexB++;\n });\n\n indexA++;\n isValueEqual = hasMatch;\n });\n }\n\n return isValueEqual;\n}\n\n/**\n * Whether the objects are equal in value.\n */\nexport function areObjectsEqual(\n a: Dictionary,\n b: Dictionary,\n state: State<any>,\n): boolean {\n const properties = keys(a);\n\n let index = properties.length;\n\n if (keys(b).length !== index) {\n return false;\n }\n\n let property: string | symbol;\n\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n property = properties[index]!;\n\n if (\n property === OWNER &&\n (a.$$typeof || b.$$typeof) &&\n a.$$typeof !== b.$$typeof\n ) {\n return false;\n }\n\n if (\n !hasOwn(b, property) ||\n !state.equals(a[property], b[property], property, property, a, b, state)\n ) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the objects are equal in value with strict property checking.\n */\nexport function areObjectsEqualStrict(\n a: Dictionary,\n b: Dictionary,\n state: State<any>,\n): boolean {\n const properties = getStrictProperties(a);\n\n let index = properties.length;\n\n if (getStrictProperties(b).length !== index) {\n return false;\n }\n\n let property: string | symbol;\n let descriptorA: ReturnType<typeof getOwnPropertyDescriptor>;\n let descriptorB: ReturnType<typeof getOwnPropertyDescriptor>;\n\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n property = properties[index]!;\n\n if (\n property === OWNER &&\n (a.$$typeof || b.$$typeof) &&\n a.$$typeof !== b.$$typeof\n ) {\n return false;\n }\n\n if (!hasOwn(b, property)) {\n return false;\n }\n\n if (\n !state.equals(a[property], b[property], property, property, a, b, state)\n ) {\n return false;\n }\n\n descriptorA = getOwnPropertyDescriptor(a, property);\n descriptorB = getOwnPropertyDescriptor(b, property);\n\n if (\n (descriptorA || descriptorB) &&\n (!descriptorA ||\n !descriptorB ||\n descriptorA.configurable !== descriptorB.configurable ||\n descriptorA.enumerable !== descriptorB.enumerable ||\n descriptorA.writable !== descriptorB.writable)\n ) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the primitive wrappers passed are equal in value.\n */\nexport function arePrimitiveWrappersEqual(a: Date, b: Date): boolean {\n return sameValueZeroEqual(a.valueOf(), b.valueOf());\n}\n\n/**\n * Whether the regexps passed are equal in value.\n */\nexport function areRegExpsEqual(a: RegExp, b: RegExp): boolean {\n return a.source === b.source && a.flags === b.flags;\n}\n\n/**\n * Whether the `Set`s are equal in value.\n */\nexport function areSetsEqual(\n a: Set<any>,\n b: Set<any>,\n state: State<any>,\n): boolean {\n let isValueEqual = a.size === b.size;\n\n if (isValueEqual && a.size) {\n // The use of `forEach()` is to avoid the transpilation cost of `for...of` comparisons, and\n // the inability to control the performance of the resulting code. It also avoids excessive\n // iteration compared to doing comparisons of `keys()` and `values()`. As a result, though,\n // we cannot short-circuit the iterations; bookkeeping must be done to short-circuit the\n // equality checks themselves.\n\n const matchedIndices: Record<number, true> = {};\n\n a.forEach((aValue, aKey) => {\n if (!isValueEqual) {\n return;\n }\n\n let hasMatch = false;\n let matchIndex = 0;\n\n b.forEach((bValue, bKey) => {\n if (\n !hasMatch &&\n !matchedIndices[matchIndex] &&\n (hasMatch = state.equals(aValue, bValue, aKey, bKey, a, b, state))\n ) {\n matchedIndices[matchIndex] = true;\n }\n\n matchIndex++;\n });\n\n isValueEqual = hasMatch;\n });\n }\n\n return isValueEqual;\n}\n\nexport function areTypedArraysEqual(a: TypedArray, b: TypedArray) {\n let index = a.length;\n\n if (b.length !== index) {\n return false;\n }\n\n while (index-- > 0) {\n if (a[index] !== b[index]) {\n return false;\n }\n }\n\n return true;\n}\n","import {\n areArraysEqual as areArraysEqualDefault,\n areDatesEqual as areDatesEqualDefault,\n areMapsEqual as areMapsEqualDefault,\n areObjectsEqual as areObjectsEqualDefault,\n areObjectsEqualStrict as areObjectsEqualStrictDefault,\n arePrimitiveWrappersEqual as arePrimitiveWrappersEqualDefault,\n areRegExpsEqual as areRegExpsEqualDefault,\n areSetsEqual as areSetsEqualDefault,\n areTypedArraysEqual,\n} from './equals';\nimport { combineComparators, createIsCircular } from './utils';\nimport type {\n ComparatorConfig,\n CustomEqualCreatorOptions,\n EqualityComparator,\n State,\n} from './internalTypes';\n\nconst ARGUMENTS_TAG = '[object Arguments]';\nconst BOOLEAN_TAG = '[object Boolean]';\nconst DATE_TAG = '[object Date]';\nconst MAP_TAG = '[object Map]';\nconst NUMBER_TAG = '[object Number]';\nconst OBJECT_TAG = '[object Object]';\nconst REG_EXP_TAG = '[object RegExp]';\nconst SET_TAG = '[object Set]';\nconst STRING_TAG = '[object String]';\n\nconst { isArray } = Array;\nconst isTypedArray =\n typeof ArrayBuffer === 'function' && ArrayBuffer.isView\n ? ArrayBuffer.isView\n : null;\nconst { assign } = Object;\nconst getTag = Object.prototype.toString.call.bind(\n Object.prototype.toString,\n) as (a: object) => string;\n\n/**\n * Create a comparator method based on the type-specific equality comparators passed.\n */\nexport function createComparator<Meta>({\n areArraysEqual,\n areDatesEqual,\n areMapsEqual,\n areObjectsEqual,\n arePrimitiveWrappersEqual,\n areRegExpsEqual,\n areSetsEqual,\n areTypedArraysEqual,\n}: ComparatorConfig<Meta>): EqualityComparator<Meta> {\n /**\n * compare the value of the two objects and return true if they are equivalent in values\n */\n return function comparator(a: any, b: any, state: State<Meta>): boolean {\n // If the items are strictly equal, no need to do a value comparison.\n if (a === b) {\n return true;\n }\n\n // If the items are not non-nullish objects, then the only possibility\n // of them being equal but not strictly is if they are both `NaN`. Since\n // `NaN` is uniquely not equal to itself, we can use self-comparison of\n // both objects, which is faster than `isNaN()`.\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') {\n return a !== a && b !== b;\n }\n\n // Checks are listed in order of commonality of use-case:\n // 1. Common complex object types (plain object, array)\n // 2. Common data values (date, regexp)\n // 3. Less-common complex object types (map, set)\n // 4. Less-common data values (promise, primitive wrappers)\n // Inherently this is both subjective and assumptive, however\n // when reviewing comparable libraries in the wild this order\n // appears to be generally consistent.\n\n // `isPlainObject` only checks against the object's own realm. Cross-realm\n // comparisons are rare, and will be handled in the ultimate fallback, so\n // we can avoid the `toString.call()` cost unless necessary.\n if (a.constructor === Object && b.constructor === Object) {\n return areObjectsEqual(a, b, state);\n }\n\n // In strict mode, constructors should match. We placed this after the plain object check\n // because the constructors must match to meet plain object requirements (must both be `Object`\n // in the given Realm), so it slightly improves performance on a very common use-case.\n if (state.strict && a.constructor !== b.constructor) {\n return false;\n }\n\n // `isArray()` works on subclasses and is cross-realm, so we can again avoid\n // the `toString.call()` cost unless necessary by just checking if either\n // and then both are arrays.\n let aArray = isArray(a);\n let bArray = isArray(b);\n\n if (aArray || bArray) {\n return aArray === bArray && areArraysEqual(a, b, state);\n }\n\n // Prioritize the `TypedArray` check because it does not require capturing the tag, which is a\n // slower path.\n if (isTypedArray) {\n aArray = isTypedArray(a);\n bArray = isTypedArray(b);\n\n if (aArray || bArray) {\n return aArray === bArray && areTypedArraysEqual(a, b, state);\n }\n }\n\n // Since this is a custom object, use the classic `toString.call()` to get its\n // type. This is reasonably performant in modern environments like v8 and\n // SpiderMonkey, and allows for cross-realm comparison when other checks like\n // `instanceof` do not.\n const tag = getTag(a);\n\n if (tag !== getTag(b)) {\n return false;\n }\n\n if (tag === DATE_TAG) {\n return areDatesEqual(a, b, state);\n }\n\n if (tag === REG_EXP_TAG) {\n return areRegExpsEqual(a, b, state);\n }\n\n if (tag === MAP_TAG) {\n return areMapsEqual(a, b, state);\n }\n\n if (tag === SET_TAG) {\n return areSetsEqual(a, b, state);\n }\n\n // If a simple object tag, then we can prioritize a simple object comparison because\n // it is likely a custom class.\n if (tag === OBJECT_TAG) {\n // The exception for value comparison is `Promise`-like contracts. These should be\n // treated the same as standard `Promise` objects, which means strict equality, and if\n // it reaches this point then that strict equality comparison has already failed.\n return (\n typeof a.then !== 'function' &&\n typeof b.then !== 'function' &&\n areObjectsEqual(a, b, state)\n );\n }\n\n // If an arguments tag, it should be treated as a standard object.\n if (tag === ARGUMENTS_TAG) {\n return areObjectsEqual(a, b, state);\n }\n\n // As the penultimate fallback, check if the values passed are primitive wrappers. This\n // is very rare in modern JS, which is why it is deprioritized compared to all other object\n // types.\n if (tag === BOOLEAN_TAG || tag === NUMBER_TAG || tag === STRING_TAG) {\n return arePrimitiveWrappersEqual(a, b, state);\n }\n\n // If not matching any tags that require a specific type of comparison, then we hard-code false because\n // the only thing remaining is strict equality, which has already been compared. This is for a few reasons:\n // - Certain types that cannot be introspected (e.g., `WeakMap`). For these types, this is the only\n // comparison that can be made.\n // - For types that can be introspected, but rarely have requirements to be compared\n // (`ArrayBuffer`, `DataView`, etc.), the cost is avoided to prioritize the common\n // use-cases (may be included in a future release, if requested enough).\n // - For types that can be introspected but do not have an objective definition of what\n // equality is (`Error`, etc.), the subjective decision is to be conservative and strictly compare.\n // In all cases, these decisions should be reevaluated based on changes to the language and\n // common development practices.\n return false;\n };\n}\n\n/**\n * Create the configuration object used for building comparators.\n */\nexport function createComparatorConfig<Meta>({\n circular,\n createCustomConfig,\n strict,\n}: CustomEqualCreatorOptions<Meta>): ComparatorConfig<Meta> {\n let config = {\n areArraysEqual: strict\n ? areObjectsEqualStrictDefault\n : areArraysEqualDefault,\n areDatesEqual: areDatesEqualDefault,\n areMapsEqual: strict\n ? combineComparators(areMapsEqualDefault, areObjectsEqualStrictDefault)\n : areMapsEqualDefault,\n areObjectsEqual: strict\n ? areObjectsEqualStrictDefault\n : areObjectsEqualDefault,\n arePrimitiveWrappersEqual: arePrimitiveWrappersEqualDefault,\n areRegExpsEqual: areRegExpsEqualDefault,\n areSetsEqual: strict\n ? combineComparators(areSetsEqualDefault, areObjectsEqualStrictDefault)\n : areSetsEqualDefault,\n areTypedArraysEqual: strict\n ? combineComparators(areTypedArraysEqual, areObjectsEqualStrictDefault)\n : areTypedArraysEqual,\n };\n\n if (createCustomConfig) {\n config = assign({}, config, createCustomConfig(config));\n }\n\n if (circular) {\n const areArraysEqual = createIsCircular(config.areArraysEqual);\n const areMapsEqual = createIsCircular(config.areMapsEqual);\n const areObjectsEqual = createIsCircular(config.areObjectsEqual);\n const areSetsEqual = createIsCircular(config.areSetsEqual);\n\n config = assign({}, config, {\n areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areSetsEqual,\n });\n }\n\n return config;\n}\n","import { createComparator, createComparatorConfig } from './comparator';\nimport type {\n CircularState,\n CustomEqualCreatorOptions,\n DefaultState,\n} from './internalTypes';\nimport { createInternalComparator, sameValueZeroEqual } from './utils';\n\nexport { sameValueZeroEqual };\nexport * from './internalTypes';\n\n/**\n * Whether the items passed are deeply-equal in value.\n */\nexport const deepEqual = createCustomEqual();\n\n/**\n * Whether the items passed are deeply-equal in value based on strict comparison.\n */\nexport const strictDeepEqual = createCustomEqual({ strict: true });\n\n/**\n * Whether the items passed are deeply-equal in value, including circular references.\n */\nexport const circularDeepEqual = createCustomEqual({ circular: true });\n\n/**\n * Whether the items passed are deeply-equal in value, including circular references,\n * based on strict comparison.\n */\nexport const strictCircularDeepEqual = createCustomEqual({\n circular: true,\n strict: true,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value.\n */\nexport const shallowEqual = createCustomEqual({\n comparator: sameValueZeroEqual,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value based on strict comparison\n */\nexport const strictShallowEqual = createCustomEqual({\n comparator: sameValueZeroEqual,\n strict: true,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value, including circular references.\n */\nexport const circularShallowEqual = createCustomEqual({\n comparator: sameValueZeroEqual,\n circular: true,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value, including circular references,\n * based on strict comparison.\n */\nexport const strictCircularShallowEqual = createCustomEqual({\n comparator: sameValueZeroEqual,\n circular: true,\n strict: true,\n});\n\n/**\n * Create a custom equality comparison method.\n *\n * This can be done to create very targeted comparisons in extreme hot-path scenarios\n * where the standard methods are not performant enough, but can also be used to provide\n * support for legacy environments that do not support expected features like\n * `RegExp.prototype.flags` out of the box.\n */\nexport function createCustomEqual<Meta>(\n options: CustomEqualCreatorOptions<Meta> = {},\n) {\n const {\n circular,\n comparator,\n createInternalComparator: createCustomInternalComparator,\n createState,\n strict: baseStrict = false,\n } = options;\n\n const config = createComparatorConfig<Meta>(options);\n const isEqualCustom = createComparator(config);\n const isEqualCustomComparator =\n comparator ||\n (createCustomInternalComparator\n ? createCustomInternalComparator(isEqualCustom)\n : createInternalComparator(isEqualCustom));\n\n if (createState) {\n return function isEqual<A, B>(\n a: A,\n b: B,\n metaOverride?: Meta | undefined,\n ): boolean {\n const {\n cache = circular ? new WeakMap() : undefined,\n equals = isEqualCustomComparator,\n meta,\n strict = baseStrict,\n } = createState!(isEqualCustom);\n\n return isEqualCustom(a, b, {\n cache,\n equals,\n meta: metaOverride !== undefined ? metaOverride : meta,\n strict,\n } as CircularState<Meta>);\n };\n }\n\n if (circular) {\n return function equals<A, B>(a: A, b: B): boolean {\n return isEqualCustom(a, b, {\n cache: new WeakMap(),\n equals: isEqualCustomComparator,\n meta: undefined as Meta,\n strict: baseStrict,\n } as CircularState<Meta>);\n };\n }\n\n const state = Object.freeze({\n cache: undefined,\n equals: isEqualCustomComparator,\n meta: undefined,\n strict: baseStrict,\n });\n\n return function equals<A, B>(a: A, b: B): boolean {\n return isEqualCustom(a, b, state as DefaultState<Meta>);\n };\n}\n"],"names":["areObjectsEqualStrictDefault","areArraysEqualDefault","areDatesEqualDefault","areMapsEqualDefault","areObjectsEqualDefault","arePrimitiveWrappersEqualDefault","areRegExpsEqualDefault","areSetsEqualDefault","areArraysEqual","areMapsEqual","areObjectsEqual","areSetsEqual"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/utils.ts","../../src/equals.ts","../../src/comparator.ts","../../src/index.ts"],"sourcesContent":["import {\n AnyEqualityComparator,\n Cache,\n CircularState,\n Dictionary,\n State,\n TypeEqualityComparator,\n} from './internalTypes';\n\nconst { getOwnPropertyNames, getOwnPropertySymbols } = Object;\nconst { hasOwnProperty } = Object.prototype;\n\n/**\n * Combine two comparators into a single comparators.\n */\nexport function combineComparators<Meta>(\n comparatorA: AnyEqualityComparator<Meta>,\n comparatorB: AnyEqualityComparator<Meta>,\n) {\n return function isEqual<A, B>(a: A, b: B, state: State<Meta>) {\n return comparatorA(a, b, state) && comparatorB(a, b, state);\n };\n}\n\n/**\n * Wrap the provided `areItemsEqual` method to manage the circular state, allowing\n * for circular references to be safely included in the comparison without creating\n * stack overflows.\n */\nexport function createIsCircular<\n AreItemsEqual extends TypeEqualityComparator<any, any>,\n>(areItemsEqual: AreItemsEqual): AreItemsEqual {\n return function isCircular(\n a: any,\n b: any,\n state: CircularState<Cache<any, any>>,\n ) {\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') {\n return areItemsEqual(a, b, state);\n }\n\n const { cache } = state;\n\n const cachedA = cache.get(a);\n const cachedB = cache.get(b);\n\n if (cachedA && cachedB) {\n return cachedA === b && cachedB === a;\n }\n\n cache.set(a, b);\n cache.set(b, a);\n\n const result = areItemsEqual(a, b, state);\n\n cache.delete(a);\n cache.delete(b);\n\n return result;\n } as AreItemsEqual;\n}\n\n/**\n * Get the properties to strictly examine, which include both own properties that are\n * not enumerable and symbol properties.\n */\nexport function getStrictProperties(\n object: Dictionary,\n): Array<string | symbol> {\n return (getOwnPropertyNames(object) as Array<string | symbol>).concat(\n getOwnPropertySymbols(object),\n );\n}\n\n/**\n * Whether the object contains the property passed as an own property.\n */\nexport const hasOwn =\n Object.hasOwn ||\n ((object: Dictionary, property: number | string | symbol) =>\n hasOwnProperty.call(object, property));\n\n/**\n * Whether the values passed are strictly equal or both NaN.\n */\nexport function sameValueZeroEqual(a: any, b: any): boolean {\n return a || b ? a === b : a === b || (a !== a && b !== b);\n}\n","import { getStrictProperties, hasOwn, sameValueZeroEqual } from './utils';\nimport type {\n Dictionary,\n PrimitiveWrapper,\n State,\n TypedArray,\n} from './internalTypes';\n\nconst OWNER = '_owner';\n\nconst { getOwnPropertyDescriptor, keys } = Object;\n\n/**\n * Whether the arrays are equal in value.\n */\nexport function areArraysEqual(a: any[], b: any[], state: State<any>) {\n let index = a.length;\n\n if (b.length !== index) {\n return false;\n }\n\n while (index-- > 0) {\n if (!state.equals(a[index], b[index], index, index, a, b, state)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the dates passed are equal in value.\n */\nexport function areDatesEqual(a: Date, b: Date): boolean {\n return sameValueZeroEqual(a.getTime(), b.getTime());\n}\n\n/**\n * Whether the `Map`s are equal in value.\n */\nexport function areMapsEqual(\n a: Map<any, any>,\n b: Map<any, any>,\n state: State<any>,\n): boolean {\n if (a.size !== b.size) {\n return false;\n }\n\n const matchedIndices: Record<number, true> = {};\n const aIterable = a.entries();\n\n let index = 0;\n let aResult: IteratorResult<[any, any]>;\n let bResult: IteratorResult<[any, any]>;\n\n while ((aResult = aIterable.next())) {\n if (aResult.done) {\n break;\n }\n\n const bIterable = b.entries();\n\n let hasMatch = false;\n let matchIndex = 0;\n\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n\n const [aKey, aValue] = aResult.value;\n const [bKey, bValue] = bResult.value;\n\n if (\n !hasMatch &&\n !matchedIndices[matchIndex] &&\n (hasMatch =\n state.equals(aKey, bKey, index, matchIndex, a, b, state) &&\n state.equals(aValue, bValue, aKey, bKey, a, b, state))\n ) {\n matchedIndices[matchIndex] = true;\n }\n\n matchIndex++;\n }\n\n if (!hasMatch) {\n return false;\n }\n\n index++;\n }\n\n return true;\n}\n\n/**\n * Whether the objects are equal in value.\n */\nexport function areObjectsEqual(\n a: Dictionary,\n b: Dictionary,\n state: State<any>,\n): boolean {\n const properties = keys(a);\n\n let index = properties.length;\n\n if (keys(b).length !== index) {\n return false;\n }\n\n let property: string;\n\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n property = properties[index]!;\n\n if (\n property === OWNER &&\n (a.$$typeof || b.$$typeof) &&\n a.$$typeof !== b.$$typeof\n ) {\n return false;\n }\n\n if (\n !hasOwn(b, property) ||\n !state.equals(a[property], b[property], property, property, a, b, state)\n ) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the objects are equal in value with strict property checking.\n */\nexport function areObjectsEqualStrict(\n a: Dictionary,\n b: Dictionary,\n state: State<any>,\n): boolean {\n const properties = getStrictProperties(a);\n\n let index = properties.length;\n\n if (getStrictProperties(b).length !== index) {\n return false;\n }\n\n let property: string | symbol;\n let descriptorA: ReturnType<typeof getOwnPropertyDescriptor>;\n let descriptorB: ReturnType<typeof getOwnPropertyDescriptor>;\n\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n property = properties[index]!;\n\n if (\n property === OWNER &&\n (a.$$typeof || b.$$typeof) &&\n a.$$typeof !== b.$$typeof\n ) {\n return false;\n }\n\n if (!hasOwn(b, property)) {\n return false;\n }\n\n if (\n !state.equals(a[property], b[property], property, property, a, b, state)\n ) {\n return false;\n }\n\n descriptorA = getOwnPropertyDescriptor(a, property);\n descriptorB = getOwnPropertyDescriptor(b, property);\n\n if (\n (descriptorA || descriptorB) &&\n (!descriptorA ||\n !descriptorB ||\n descriptorA.configurable !== descriptorB.configurable ||\n descriptorA.enumerable !== descriptorB.enumerable ||\n descriptorA.writable !== descriptorB.writable)\n ) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the primitive wrappers passed are equal in value.\n */\nexport function arePrimitiveWrappersEqual(\n a: PrimitiveWrapper,\n b: PrimitiveWrapper,\n): boolean {\n return sameValueZeroEqual(a.valueOf(), b.valueOf());\n}\n\n/**\n * Whether the regexps passed are equal in value.\n */\nexport function areRegExpsEqual(a: RegExp, b: RegExp): boolean {\n return a.source === b.source && a.flags === b.flags;\n}\n\n/**\n * Whether the `Set`s are equal in value.\n */\nexport function areSetsEqual(\n a: Set<any>,\n b: Set<any>,\n state: State<any>,\n): boolean {\n if (a.size !== b.size) {\n return false;\n }\n\n const matchedIndices: Record<number, true> = {};\n const aIterable = a.values();\n\n let aResult: IteratorResult<any>;\n let bResult: IteratorResult<any>;\n\n while ((aResult = aIterable.next())) {\n if (aResult.done) {\n break;\n }\n\n const bIterable = b.values();\n\n let hasMatch = false;\n let matchIndex = 0;\n\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n\n if (\n !hasMatch &&\n !matchedIndices[matchIndex] &&\n (hasMatch = state.equals(\n aResult.value,\n bResult.value,\n aResult.value,\n bResult.value,\n a,\n b,\n state,\n ))\n ) {\n matchedIndices[matchIndex] = true;\n }\n\n matchIndex++;\n }\n\n if (!hasMatch) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the TypedArray instances are equal in value.\n */\nexport function areTypedArraysEqual(a: TypedArray, b: TypedArray) {\n let index = a.length;\n\n if (b.length !== index) {\n return false;\n }\n\n while (index-- > 0) {\n if (a[index] !== b[index]) {\n return false;\n }\n }\n\n return true;\n}\n","import {\n areArraysEqual as areArraysEqualDefault,\n areDatesEqual as areDatesEqualDefault,\n areMapsEqual as areMapsEqualDefault,\n areObjectsEqual as areObjectsEqualDefault,\n areObjectsEqualStrict as areObjectsEqualStrictDefault,\n arePrimitiveWrappersEqual as arePrimitiveWrappersEqualDefault,\n areRegExpsEqual as areRegExpsEqualDefault,\n areSetsEqual as areSetsEqualDefault,\n areTypedArraysEqual,\n} from './equals';\nimport { combineComparators, createIsCircular } from './utils';\nimport type {\n ComparatorConfig,\n CreateState,\n CustomEqualCreatorOptions,\n EqualityComparator,\n InternalEqualityComparator,\n State,\n} from './internalTypes';\n\nconst ARGUMENTS_TAG = '[object Arguments]';\nconst BOOLEAN_TAG = '[object Boolean]';\nconst DATE_TAG = '[object Date]';\nconst MAP_TAG = '[object Map]';\nconst NUMBER_TAG = '[object Number]';\nconst OBJECT_TAG = '[object Object]';\nconst REG_EXP_TAG = '[object RegExp]';\nconst SET_TAG = '[object Set]';\nconst STRING_TAG = '[object String]';\n\nconst { isArray } = Array;\nconst isTypedArray =\n typeof ArrayBuffer === 'function' && ArrayBuffer.isView\n ? ArrayBuffer.isView\n : null;\nconst { assign } = Object;\nconst getTag = Object.prototype.toString.call.bind(\n Object.prototype.toString,\n) as (a: object) => string;\n\ninterface CreateIsEqualOptions<Meta> {\n circular: boolean;\n comparator: EqualityComparator<Meta>;\n createState: CreateState<Meta> | undefined;\n equals: InternalEqualityComparator<Meta>;\n strict: boolean;\n}\n\n/**\n * Create a comparator method based on the type-specific equality comparators passed.\n */\nexport function createEqualityComparator<Meta>({\n areArraysEqual,\n areDatesEqual,\n areMapsEqual,\n areObjectsEqual,\n arePrimitiveWrappersEqual,\n areRegExpsEqual,\n areSetsEqual,\n areTypedArraysEqual,\n}: ComparatorConfig<Meta>): EqualityComparator<Meta> {\n /**\n * compare the value of the two objects and return true if they are equivalent in values\n */\n return function comparator(a: any, b: any, state: State<Meta>): boolean {\n // If the items are strictly equal, no need to do a value comparison.\n if (a === b) {\n return true;\n }\n\n // If the items are not non-nullish objects, then the only possibility\n // of them being equal but not strictly is if they are both `NaN`. Since\n // `NaN` is uniquely not equal to itself, we can use self-comparison of\n // both objects, which is faster than `isNaN()`.\n if (\n a == null ||\n b == null ||\n typeof a !== 'object' ||\n typeof b !== 'object'\n ) {\n return a !== a && b !== b;\n }\n\n const constructor = a.constructor;\n\n // Checks are listed in order of commonality of use-case:\n // 1. Common complex object types (plain object, array)\n // 2. Common data values (date, regexp)\n // 3. Less-common complex object types (map, set)\n // 4. Less-common data values (promise, primitive wrappers)\n // Inherently this is both subjective and assumptive, however\n // when reviewing comparable libraries in the wild this order\n // appears to be generally consistent.\n\n // Constructors should match, otherwise there is potential for false positives\n // between class and subclass or custom object and POJO.\n if (constructor !== b.constructor) {\n return false;\n }\n\n // `isPlainObject` only checks against the object's own realm. Cross-realm\n // comparisons are rare, and will be handled in the ultimate fallback, so\n // we can avoid capturing the string tag.\n if (constructor === Object) {\n return areObjectsEqual(a, b, state);\n }\n\n // `isArray()` works on subclasses and is cross-realm, so we can avoid capturing\n // the string tag or doing an `instanceof` check.\n if (isArray(a)) {\n return areArraysEqual(a, b, state);\n }\n\n // `isTypedArray()` works on all possible TypedArray classes, so we can avoid\n // capturing the string tag or comparing against all possible constructors.\n if (isTypedArray != null && isTypedArray(a)) {\n return areTypedArraysEqual(a, b, state);\n }\n\n // Try to fast-path equality checks for other complex object types in the\n // same realm to avoid capturing the string tag. Strict equality is used\n // instead of `instanceof` because it is more performant for the common\n // use-case. If someone is subclassing a native class, it will be handled\n // with the string tag comparison.\n\n if (constructor === Date) {\n return areDatesEqual(a, b, state);\n }\n\n if (constructor === RegExp) {\n return areRegExpsEqual(a, b, state);\n }\n\n if (constructor === Map) {\n return areMapsEqual(a, b, state);\n }\n\n if (constructor === Set) {\n return areSetsEqual(a, b, state);\n }\n\n // Since this is a custom object, capture the string tag to determing its type.\n // This is reasonably performant in modern environments like v8 and SpiderMonkey.\n const tag = getTag(a);\n\n if (tag === DATE_TAG) {\n return areDatesEqual(a, b, state);\n }\n\n if (tag === REG_EXP_TAG) {\n return areRegExpsEqual(a, b, state);\n }\n\n if (tag === MAP_TAG) {\n return areMapsEqual(a, b, state);\n }\n\n if (tag === SET_TAG) {\n return areSetsEqual(a, b, state);\n }\n\n if (tag === OBJECT_TAG) {\n // The exception for value comparison is custom `Promise`-like class instances. These should\n // be treated the same as standard `Promise` objects, which means strict equality, and if\n // it reaches this point then that strict equality comparison has already failed.\n return (\n typeof a.then !== 'function' &&\n typeof b.then !== 'function' &&\n areObjectsEqual(a, b, state)\n );\n }\n\n // If an arguments tag, it should be treated as a standard object.\n if (tag === ARGUMENTS_TAG) {\n return areObjectsEqual(a, b, state);\n }\n\n // As the penultimate fallback, check if the values passed are primitive wrappers. This\n // is very rare in modern JS, which is why it is deprioritized compared to all other object\n // types.\n if (tag === BOOLEAN_TAG || tag === NUMBER_TAG || tag === STRING_TAG) {\n return arePrimitiveWrappersEqual(a, b, state);\n }\n\n // If not matching any tags that require a specific type of comparison, then we hard-code false because\n // the only thing remaining is strict equality, which has already been compared. This is for a few reasons:\n // - Certain types that cannot be introspected (e.g., `WeakMap`). For these types, this is the only\n // comparison that can be made.\n // - For types that can be introspected, but rarely have requirements to be compared\n // (`ArrayBuffer`, `DataView`, etc.), the cost is avoided to prioritize the common\n // use-cases (may be included in a future release, if requested enough).\n // - For types that can be introspected but do not have an objective definition of what\n // equality is (`Error`, etc.), the subjective decision is to be conservative and strictly compare.\n // In all cases, these decisions should be reevaluated based on changes to the language and\n // common development practices.\n return false;\n };\n}\n\n/**\n * Create the configuration object used for building comparators.\n */\nexport function createEqualityComparatorConfig<Meta>({\n circular,\n createCustomConfig,\n strict,\n}: CustomEqualCreatorOptions<Meta>): ComparatorConfig<Meta> {\n let config = {\n areArraysEqual: strict\n ? areObjectsEqualStrictDefault\n : areArraysEqualDefault,\n areDatesEqual: areDatesEqualDefault,\n areMapsEqual: strict\n ? combineComparators(areMapsEqualDefault, areObjectsEqualStrictDefault)\n : areMapsEqualDefault,\n areObjectsEqual: strict\n ? areObjectsEqualStrictDefault\n : areObjectsEqualDefault,\n arePrimitiveWrappersEqual: arePrimitiveWrappersEqualDefault,\n areRegExpsEqual: areRegExpsEqualDefault,\n areSetsEqual: strict\n ? combineComparators(areSetsEqualDefault, areObjectsEqualStrictDefault)\n : areSetsEqualDefault,\n areTypedArraysEqual: strict\n ? areObjectsEqualStrictDefault\n : areTypedArraysEqual,\n };\n\n if (createCustomConfig) {\n config = assign({}, config, createCustomConfig(config));\n }\n\n if (circular) {\n const areArraysEqual = createIsCircular(config.areArraysEqual);\n const areMapsEqual = createIsCircular(config.areMapsEqual);\n const areObjectsEqual = createIsCircular(config.areObjectsEqual);\n const areSetsEqual = createIsCircular(config.areSetsEqual);\n\n config = assign({}, config, {\n areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areSetsEqual,\n });\n }\n\n return config;\n}\n\n/**\n * Default equality comparator pass-through, used as the standard `isEqual` creator for\n * use inside the built comparator.\n */\nexport function createInternalEqualityComparator<Meta>(\n compare: EqualityComparator<Meta>,\n): InternalEqualityComparator<Meta> {\n return function (\n a: any,\n b: any,\n _indexOrKeyA: any,\n _indexOrKeyB: any,\n _parentA: any,\n _parentB: any,\n state: State<Meta>,\n ) {\n return compare(a, b, state);\n };\n}\n\n/**\n * Create the `isEqual` function used by the consuming application.\n */\nexport function createIsEqual<Meta>({\n circular,\n comparator,\n createState,\n equals,\n strict,\n}: CreateIsEqualOptions<Meta>) {\n if (createState) {\n return function isEqual<A, B>(a: A, b: B): boolean {\n const { cache = circular ? new WeakMap() : undefined, meta } =\n createState!();\n\n return comparator(a, b, {\n cache,\n equals,\n meta,\n strict,\n } as State<Meta>);\n };\n }\n\n if (circular) {\n return function isEqual<A, B>(a: A, b: B): boolean {\n return comparator(a, b, {\n cache: new WeakMap(),\n equals,\n meta: undefined as Meta,\n strict,\n } as State<Meta>);\n };\n }\n\n const state = {\n cache: undefined,\n equals,\n meta: undefined,\n strict,\n } as State<Meta>;\n\n return function isEqual<A, B>(a: A, b: B): boolean {\n return comparator(a, b, state);\n };\n}\n","import {\n createEqualityComparatorConfig,\n createEqualityComparator,\n createInternalEqualityComparator,\n createIsEqual,\n} from './comparator';\nimport type { CustomEqualCreatorOptions } from './internalTypes';\nimport { sameValueZeroEqual } from './utils';\n\nexport { sameValueZeroEqual };\nexport * from './internalTypes';\n\n/**\n * Whether the items passed are deeply-equal in value.\n */\nexport const deepEqual = createCustomEqual();\n\n/**\n * Whether the items passed are deeply-equal in value based on strict comparison.\n */\nexport const strictDeepEqual = createCustomEqual({ strict: true });\n\n/**\n * Whether the items passed are deeply-equal in value, including circular references.\n */\nexport const circularDeepEqual = createCustomEqual({ circular: true });\n\n/**\n * Whether the items passed are deeply-equal in value, including circular references,\n * based on strict comparison.\n */\nexport const strictCircularDeepEqual = createCustomEqual({\n circular: true,\n strict: true,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value.\n */\nexport const shallowEqual = createCustomEqual({\n createInternalComparator: () => sameValueZeroEqual,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value based on strict comparison\n */\nexport const strictShallowEqual = createCustomEqual({\n strict: true,\n createInternalComparator: () => sameValueZeroEqual,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value, including circular references.\n */\nexport const circularShallowEqual = createCustomEqual({\n circular: true,\n createInternalComparator: () => sameValueZeroEqual,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value, including circular references,\n * based on strict comparison.\n */\nexport const strictCircularShallowEqual = createCustomEqual({\n circular: true,\n createInternalComparator: () => sameValueZeroEqual,\n strict: true,\n});\n\n/**\n * Create a custom equality comparison method.\n *\n * This can be done to create very targeted comparisons in extreme hot-path scenarios\n * where the standard methods are not performant enough, but can also be used to provide\n * support for legacy environments that do not support expected features like\n * `RegExp.prototype.flags` out of the box.\n */\nexport function createCustomEqual<Meta = undefined>(\n options: CustomEqualCreatorOptions<Meta> = {},\n) {\n const {\n circular = false,\n createInternalComparator: createCustomInternalComparator,\n createState,\n strict = false,\n } = options;\n\n const config = createEqualityComparatorConfig<Meta>(options);\n const comparator = createEqualityComparator(config);\n const equals = createCustomInternalComparator\n ? createCustomInternalComparator(comparator)\n : createInternalEqualityComparator(comparator);\n\n return createIsEqual({ circular, comparator, createState, equals, strict });\n}\n"],"names":["areObjectsEqualStrictDefault","areArraysEqualDefault","areDatesEqualDefault","areMapsEqualDefault","areObjectsEqualDefault","arePrimitiveWrappersEqualDefault","areRegExpsEqualDefault","areSetsEqualDefault","areArraysEqual","areMapsEqual","areObjectsEqual","areSetsEqual"],"mappings":"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"}
|
|
@@ -1,9 +1,26 @@
|
|
|
1
|
-
import type { ComparatorConfig, CustomEqualCreatorOptions, EqualityComparator } from './internalTypes';
|
|
1
|
+
import type { ComparatorConfig, CreateState, CustomEqualCreatorOptions, EqualityComparator, InternalEqualityComparator } from './internalTypes';
|
|
2
|
+
interface CreateIsEqualOptions<Meta> {
|
|
3
|
+
circular: boolean;
|
|
4
|
+
comparator: EqualityComparator<Meta>;
|
|
5
|
+
createState: CreateState<Meta> | undefined;
|
|
6
|
+
equals: InternalEqualityComparator<Meta>;
|
|
7
|
+
strict: boolean;
|
|
8
|
+
}
|
|
2
9
|
/**
|
|
3
10
|
* Create a comparator method based on the type-specific equality comparators passed.
|
|
4
11
|
*/
|
|
5
|
-
export declare function
|
|
12
|
+
export declare function createEqualityComparator<Meta>({ areArraysEqual, areDatesEqual, areMapsEqual, areObjectsEqual, arePrimitiveWrappersEqual, areRegExpsEqual, areSetsEqual, areTypedArraysEqual, }: ComparatorConfig<Meta>): EqualityComparator<Meta>;
|
|
6
13
|
/**
|
|
7
14
|
* Create the configuration object used for building comparators.
|
|
8
15
|
*/
|
|
9
|
-
export declare function
|
|
16
|
+
export declare function createEqualityComparatorConfig<Meta>({ circular, createCustomConfig, strict, }: CustomEqualCreatorOptions<Meta>): ComparatorConfig<Meta>;
|
|
17
|
+
/**
|
|
18
|
+
* Default equality comparator pass-through, used as the standard `isEqual` creator for
|
|
19
|
+
* use inside the built comparator.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createInternalEqualityComparator<Meta>(compare: EqualityComparator<Meta>): InternalEqualityComparator<Meta>;
|
|
22
|
+
/**
|
|
23
|
+
* Create the `isEqual` function used by the consuming application.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createIsEqual<Meta>({ circular, comparator, createState, equals, strict, }: CreateIsEqualOptions<Meta>): <A, B>(a: A, b: B) => boolean;
|
|
26
|
+
export {};
|