fast-equals 5.3.3 → 5.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +127 -76
  3. package/dist/cjs/comparator.d.cts +58 -0
  4. package/dist/cjs/index.cjs +132 -155
  5. package/dist/cjs/index.cjs.map +1 -1
  6. package/dist/cjs/{types/index.d.cts → index.d.cts} +21 -2
  7. package/{src/internalTypes.ts → dist/cjs/internalTypes.d.cts} +7 -43
  8. package/dist/cjs/{types/utils.d.cts → utils.d.cts} +7 -2
  9. package/dist/es/comparator.d.mts +58 -0
  10. package/dist/{esm/types → es}/index.d.mts +21 -2
  11. package/dist/{esm → es}/index.mjs +132 -155
  12. package/dist/es/index.mjs.map +1 -0
  13. package/dist/es/internalTypes.d.mts +174 -0
  14. package/dist/{esm/types → es}/utils.d.mts +7 -2
  15. package/dist/{min/types → umd}/comparator.d.ts +1 -1
  16. package/dist/umd/index.js +132 -155
  17. package/dist/umd/index.js.map +1 -1
  18. package/index.d.ts +62 -68
  19. package/package.json +44 -47
  20. package/CHANGELOG.md +0 -364
  21. package/dist/cjs/types/comparator.d.cts +0 -26
  22. package/dist/cjs/types/internalTypes.d.cts +0 -157
  23. package/dist/esm/index.mjs.map +0 -1
  24. package/dist/esm/types/comparator.d.mts +0 -26
  25. package/dist/esm/types/internalTypes.d.mts +0 -157
  26. package/dist/min/index.js +0 -1
  27. package/dist/umd/types/comparator.d.ts +0 -26
  28. package/dist/umd/types/equals.d.ts +0 -54
  29. package/dist/umd/types/index.d.ts +0 -47
  30. package/dist/umd/types/internalTypes.d.ts +0 -157
  31. package/dist/umd/types/utils.d.ts +0 -28
  32. package/src/comparator.ts +0 -376
  33. package/src/equals.ts +0 -355
  34. package/src/index.ts +0 -112
  35. package/src/utils.ts +0 -96
  36. /package/dist/cjs/{types/equals.d.cts → equals.d.cts} +0 -0
  37. /package/dist/{esm/types → es}/equals.d.mts +0 -0
  38. /package/dist/{min/types → umd}/equals.d.ts +0 -0
  39. /package/dist/{min/types → umd}/index.d.ts +0 -0
  40. /package/dist/{min/types → umd}/internalTypes.d.ts +0 -0
  41. /package/dist/{min/types → umd}/utils.d.ts +0 -0
@@ -1,5 +1,6 @@
1
- var getOwnPropertyNames = Object.getOwnPropertyNames, getOwnPropertySymbols = Object.getOwnPropertySymbols;
2
- var hasOwnProperty = Object.prototype.hasOwnProperty;
1
+ const { getOwnPropertyNames, getOwnPropertySymbols } = Object;
2
+ // eslint-disable-next-line @typescript-eslint/unbound-method
3
+ const { hasOwnProperty } = Object.prototype;
3
4
  /**
4
5
  * Combine two comparators into a single comparators.
5
6
  */
@@ -18,15 +19,15 @@ function createIsCircular(areItemsEqual) {
18
19
  if (!a || !b || typeof a !== 'object' || typeof b !== 'object') {
19
20
  return areItemsEqual(a, b, state);
20
21
  }
21
- var cache = state.cache;
22
- var cachedA = cache.get(a);
23
- var cachedB = cache.get(b);
22
+ const { cache } = state;
23
+ const cachedA = cache.get(a);
24
+ const cachedB = cache.get(b);
24
25
  if (cachedA && cachedB) {
25
26
  return cachedA === b && cachedB === a;
26
27
  }
27
28
  cache.set(a, b);
28
29
  cache.set(b, a);
29
- var result = areItemsEqual(a, b, state);
30
+ const result = areItemsEqual(a, b, state);
30
31
  cache.delete(a);
31
32
  cache.delete(b);
32
33
  return result;
@@ -48,12 +49,9 @@ function getStrictProperties(object) {
48
49
  /**
49
50
  * Whether the object contains the property passed as an own property.
50
51
  */
51
- var hasOwn =
52
+ const hasOwn =
52
53
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
53
- Object.hasOwn ||
54
- (function (object, property) {
55
- return hasOwnProperty.call(object, property);
56
- });
54
+ Object.hasOwn || ((object, property) => hasOwnProperty.call(object, property));
57
55
  /**
58
56
  * Whether the values passed are strictly equal or both NaN.
59
57
  */
@@ -61,15 +59,15 @@ function sameValueZeroEqual(a, b) {
61
59
  return a === b || (!a && !b && a !== a && b !== b);
62
60
  }
63
61
 
64
- var PREACT_VNODE = '__v';
65
- var PREACT_OWNER = '__o';
66
- var REACT_OWNER = '_owner';
67
- var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor, keys = Object.keys;
62
+ const PREACT_VNODE = '__v';
63
+ const PREACT_OWNER = '__o';
64
+ const REACT_OWNER = '_owner';
65
+ const { getOwnPropertyDescriptor, keys } = Object;
68
66
  /**
69
67
  * Whether the arrays are equal in value.
70
68
  */
71
69
  function areArraysEqual(a, b, state) {
72
- var index = a.length;
70
+ let index = a.length;
73
71
  if (b.length !== index) {
74
72
  return false;
75
73
  }
@@ -90,10 +88,7 @@ function areDatesEqual(a, b) {
90
88
  * Whether the errors passed are equal in value.
91
89
  */
92
90
  function areErrorsEqual(a, b) {
93
- return (a.name === b.name &&
94
- a.message === b.message &&
95
- a.cause === b.cause &&
96
- a.stack === b.stack);
91
+ return a.name === b.name && a.message === b.message && a.cause === b.cause && a.stack === b.stack;
97
92
  }
98
93
  /**
99
94
  * Whether the functions passed are equal in value.
@@ -105,26 +100,26 @@ function areFunctionsEqual(a, b) {
105
100
  * Whether the `Map`s are equal in value.
106
101
  */
107
102
  function areMapsEqual(a, b, state) {
108
- var size = a.size;
103
+ const size = a.size;
109
104
  if (size !== b.size) {
110
105
  return false;
111
106
  }
112
107
  if (!size) {
113
108
  return true;
114
109
  }
115
- var matchedIndices = new Array(size);
116
- var aIterable = a.entries();
117
- var aResult;
118
- var bResult;
119
- var index = 0;
110
+ const matchedIndices = new Array(size);
111
+ const aIterable = a.entries();
112
+ let aResult;
113
+ let bResult;
114
+ let index = 0;
120
115
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
121
116
  while ((aResult = aIterable.next())) {
122
117
  if (aResult.done) {
123
118
  break;
124
119
  }
125
- var bIterable = b.entries();
126
- var hasMatch = false;
127
- var matchIndex = 0;
120
+ const bIterable = b.entries();
121
+ let hasMatch = false;
122
+ let matchIndex = 0;
128
123
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
129
124
  while ((bResult = bIterable.next())) {
130
125
  if (bResult.done) {
@@ -134,10 +129,10 @@ function areMapsEqual(a, b, state) {
134
129
  matchIndex++;
135
130
  continue;
136
131
  }
137
- var aEntry = aResult.value;
138
- var bEntry = bResult.value;
139
- if (state.equals(aEntry[0], bEntry[0], index, matchIndex, a, b, state) &&
140
- state.equals(aEntry[1], bEntry[1], aEntry[0], bEntry[0], a, b, state)) {
132
+ const aEntry = aResult.value;
133
+ const bEntry = bResult.value;
134
+ if (state.equals(aEntry[0], bEntry[0], index, matchIndex, a, b, state)
135
+ && state.equals(aEntry[1], bEntry[1], aEntry[0], bEntry[0], a, b, state)) {
141
136
  hasMatch = matchedIndices[matchIndex] = true;
142
137
  break;
143
138
  }
@@ -153,13 +148,13 @@ function areMapsEqual(a, b, state) {
153
148
  /**
154
149
  * Whether the numbers are equal in value.
155
150
  */
156
- var areNumbersEqual = sameValueZeroEqual;
151
+ const areNumbersEqual = sameValueZeroEqual;
157
152
  /**
158
153
  * Whether the objects are equal in value.
159
154
  */
160
155
  function areObjectsEqual(a, b, state) {
161
- var properties = keys(a);
162
- var index = properties.length;
156
+ const properties = keys(a);
157
+ let index = properties.length;
163
158
  if (keys(b).length !== index) {
164
159
  return false;
165
160
  }
@@ -178,14 +173,14 @@ function areObjectsEqual(a, b, state) {
178
173
  * Whether the objects are equal in value with strict property checking.
179
174
  */
180
175
  function areObjectsEqualStrict(a, b, state) {
181
- var properties = getStrictProperties(a);
182
- var index = properties.length;
176
+ const properties = getStrictProperties(a);
177
+ let index = properties.length;
183
178
  if (getStrictProperties(b).length !== index) {
184
179
  return false;
185
180
  }
186
- var property;
187
- var descriptorA;
188
- var descriptorB;
181
+ let property;
182
+ let descriptorA;
183
+ let descriptorB;
189
184
  // Decrementing `while` showed faster results than either incrementing or
190
185
  // decrementing `for` loop and than an incrementing `while` loop. Declarative
191
186
  // methods like `some` / `every` were not used to avoid incurring the garbage
@@ -197,12 +192,12 @@ function areObjectsEqualStrict(a, b, state) {
197
192
  }
198
193
  descriptorA = getOwnPropertyDescriptor(a, property);
199
194
  descriptorB = getOwnPropertyDescriptor(b, property);
200
- if ((descriptorA || descriptorB) &&
201
- (!descriptorA ||
202
- !descriptorB ||
203
- descriptorA.configurable !== descriptorB.configurable ||
204
- descriptorA.enumerable !== descriptorB.enumerable ||
205
- descriptorA.writable !== descriptorB.writable)) {
195
+ if ((descriptorA || descriptorB)
196
+ && (!descriptorA
197
+ || !descriptorB
198
+ || descriptorA.configurable !== descriptorB.configurable
199
+ || descriptorA.enumerable !== descriptorB.enumerable
200
+ || descriptorA.writable !== descriptorB.writable)) {
206
201
  return false;
207
202
  }
208
203
  }
@@ -224,32 +219,32 @@ function areRegExpsEqual(a, b) {
224
219
  * Whether the `Set`s are equal in value.
225
220
  */
226
221
  function areSetsEqual(a, b, state) {
227
- var size = a.size;
222
+ const size = a.size;
228
223
  if (size !== b.size) {
229
224
  return false;
230
225
  }
231
226
  if (!size) {
232
227
  return true;
233
228
  }
234
- var matchedIndices = new Array(size);
235
- var aIterable = a.values();
236
- var aResult;
237
- var bResult;
229
+ const matchedIndices = new Array(size);
230
+ const aIterable = a.values();
231
+ let aResult;
232
+ let bResult;
238
233
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
239
234
  while ((aResult = aIterable.next())) {
240
235
  if (aResult.done) {
241
236
  break;
242
237
  }
243
- var bIterable = b.values();
244
- var hasMatch = false;
245
- var matchIndex = 0;
238
+ const bIterable = b.values();
239
+ let hasMatch = false;
240
+ let matchIndex = 0;
246
241
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
247
242
  while ((bResult = bIterable.next())) {
248
243
  if (bResult.done) {
249
244
  break;
250
245
  }
251
- if (!matchedIndices[matchIndex] &&
252
- state.equals(aResult.value, bResult.value, aResult.value, bResult.value, a, b, state)) {
246
+ if (!matchedIndices[matchIndex]
247
+ && state.equals(aResult.value, bResult.value, aResult.value, bResult.value, a, b, state)) {
253
248
  hasMatch = matchedIndices[matchIndex] = true;
254
249
  break;
255
250
  }
@@ -265,7 +260,7 @@ function areSetsEqual(a, b, state) {
265
260
  * Whether the TypedArray instances are equal in value.
266
261
  */
267
262
  function areTypedArraysEqual(a, b) {
268
- var index = a.length;
263
+ let index = a.length;
269
264
  if (b.length !== index) {
270
265
  return false;
271
266
  }
@@ -280,47 +275,44 @@ function areTypedArraysEqual(a, b) {
280
275
  * Whether the URL instances are equal in value.
281
276
  */
282
277
  function areUrlsEqual(a, b) {
283
- return (a.hostname === b.hostname &&
284
- a.pathname === b.pathname &&
285
- a.protocol === b.protocol &&
286
- a.port === b.port &&
287
- a.hash === b.hash &&
288
- a.username === b.username &&
289
- a.password === b.password);
278
+ return (a.hostname === b.hostname
279
+ && a.pathname === b.pathname
280
+ && a.protocol === b.protocol
281
+ && a.port === b.port
282
+ && a.hash === b.hash
283
+ && a.username === b.username
284
+ && a.password === b.password);
290
285
  }
291
286
  function isPropertyEqual(a, b, state, property) {
292
- if ((property === REACT_OWNER ||
293
- property === PREACT_OWNER ||
294
- property === PREACT_VNODE) &&
295
- (a.$$typeof || b.$$typeof)) {
287
+ if ((property === REACT_OWNER || property === PREACT_OWNER || property === PREACT_VNODE)
288
+ && (a.$$typeof || b.$$typeof)) {
296
289
  return true;
297
290
  }
298
- return (hasOwn(b, property) &&
299
- state.equals(a[property], b[property], property, property, a, b, state));
291
+ return hasOwn(b, property) && state.equals(a[property], b[property], property, property, a, b, state);
300
292
  }
301
293
 
302
- var ARGUMENTS_TAG = '[object Arguments]';
303
- var BOOLEAN_TAG = '[object Boolean]';
304
- var DATE_TAG = '[object Date]';
305
- var ERROR_TAG = '[object Error]';
306
- var MAP_TAG = '[object Map]';
307
- var NUMBER_TAG = '[object Number]';
308
- var OBJECT_TAG = '[object Object]';
309
- var REG_EXP_TAG = '[object RegExp]';
310
- var SET_TAG = '[object Set]';
311
- var STRING_TAG = '[object String]';
312
- var URL_TAG = '[object URL]';
313
- var isArray = Array.isArray;
314
- var isTypedArray = typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function'
315
- ? ArrayBuffer.isView
316
- : null;
317
- var assign = Object.assign;
318
- var getTag = Object.prototype.toString.call.bind(Object.prototype.toString);
294
+ const ARGUMENTS_TAG = '[object Arguments]';
295
+ const BOOLEAN_TAG = '[object Boolean]';
296
+ const DATE_TAG = '[object Date]';
297
+ const ERROR_TAG = '[object Error]';
298
+ const MAP_TAG = '[object Map]';
299
+ const NUMBER_TAG = '[object Number]';
300
+ const OBJECT_TAG = '[object Object]';
301
+ const REG_EXP_TAG = '[object RegExp]';
302
+ const SET_TAG = '[object Set]';
303
+ const STRING_TAG = '[object String]';
304
+ const URL_TAG = '[object URL]';
305
+ const { isArray } = Array;
306
+ const isTypedArray =
307
+ // eslint-disable-next-line @typescript-eslint/unbound-method
308
+ typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView : null;
309
+ const { assign } = Object;
310
+ // eslint-disable-next-line @typescript-eslint/unbound-method
311
+ const getTag = Object.prototype.toString.call.bind(Object.prototype.toString);
319
312
  /**
320
313
  * Create a comparator method based on the type-specific equality comparators passed.
321
314
  */
322
- function createEqualityComparator(_a) {
323
- var areArraysEqual = _a.areArraysEqual, areDatesEqual = _a.areDatesEqual, areErrorsEqual = _a.areErrorsEqual, areFunctionsEqual = _a.areFunctionsEqual, areMapsEqual = _a.areMapsEqual, areNumbersEqual = _a.areNumbersEqual, areObjectsEqual = _a.areObjectsEqual, arePrimitiveWrappersEqual = _a.arePrimitiveWrappersEqual, areRegExpsEqual = _a.areRegExpsEqual, areSetsEqual = _a.areSetsEqual, areTypedArraysEqual = _a.areTypedArraysEqual, areUrlsEqual = _a.areUrlsEqual, unknownTagComparators = _a.unknownTagComparators;
315
+ function createEqualityComparator({ areArraysEqual, areDatesEqual, areErrorsEqual, areFunctionsEqual, areMapsEqual, areNumbersEqual, areObjectsEqual, arePrimitiveWrappersEqual, areRegExpsEqual, areSetsEqual, areTypedArraysEqual, areUrlsEqual, unknownTagComparators, }) {
324
316
  /**
325
317
  * compare the value of the two objects and return true if they are equivalent in values
326
318
  */
@@ -334,7 +326,7 @@ function createEqualityComparator(_a) {
334
326
  if (a == null || b == null) {
335
327
  return false;
336
328
  }
337
- var type = typeof a;
329
+ const type = typeof a;
338
330
  if (type !== typeof b) {
339
331
  return false;
340
332
  }
@@ -348,7 +340,7 @@ function createEqualityComparator(_a) {
348
340
  // If a primitive value that is not strictly equal, it must be unequal.
349
341
  return false;
350
342
  }
351
- var constructor = a.constructor;
343
+ const constructor = a.constructor;
352
344
  // Checks are listed in order of commonality of use-case:
353
345
  // 1. Common complex object types (plain object, array)
354
346
  // 2. Common data values (date, regexp)
@@ -397,7 +389,7 @@ function createEqualityComparator(_a) {
397
389
  }
398
390
  // Since this is a custom object, capture the string tag to determing its type.
399
391
  // This is reasonably performant in modern environments like v8 and SpiderMonkey.
400
- var tag = getTag(a);
392
+ const tag = getTag(a);
401
393
  if (tag === DATE_TAG) {
402
394
  return areDatesEqual(a, b, state);
403
395
  }
@@ -416,9 +408,7 @@ function createEqualityComparator(_a) {
416
408
  // The exception for value comparison is custom `Promise`-like class instances. These should
417
409
  // be treated the same as standard `Promise` objects, which means strict equality, and if
418
410
  // it reaches this point then that strict equality comparison has already failed.
419
- return (typeof a.then !== 'function' &&
420
- typeof b.then !== 'function' &&
421
- areObjectsEqual(a, b, state));
411
+ return typeof a.then !== 'function' && typeof b.then !== 'function' && areObjectsEqual(a, b, state);
422
412
  }
423
413
  // If a URL tag, it should be tested explicitly. Like RegExp, the properties are not
424
414
  // enumerable, and therefore will give false positives if tested like a standard object.
@@ -441,9 +431,9 @@ function createEqualityComparator(_a) {
441
431
  return arePrimitiveWrappersEqual(a, b, state);
442
432
  }
443
433
  if (unknownTagComparators) {
444
- var unknownTagComparator = unknownTagComparators[tag];
434
+ let unknownTagComparator = unknownTagComparators[tag];
445
435
  if (!unknownTagComparator) {
446
- var shortTag = getShortTag(a);
436
+ const shortTag = getShortTag(a);
447
437
  if (shortTag) {
448
438
  unknownTagComparator = unknownTagComparators[shortTag];
449
439
  }
@@ -471,30 +461,19 @@ function createEqualityComparator(_a) {
471
461
  /**
472
462
  * Create the configuration object used for building comparators.
473
463
  */
474
- function createEqualityComparatorConfig(_a) {
475
- var circular = _a.circular, createCustomConfig = _a.createCustomConfig, strict = _a.strict;
476
- var config = {
477
- areArraysEqual: strict
478
- ? areObjectsEqualStrict
479
- : areArraysEqual,
464
+ function createEqualityComparatorConfig({ circular, createCustomConfig, strict, }) {
465
+ let config = {
466
+ areArraysEqual: strict ? areObjectsEqualStrict : areArraysEqual,
480
467
  areDatesEqual: areDatesEqual,
481
468
  areErrorsEqual: areErrorsEqual,
482
469
  areFunctionsEqual: areFunctionsEqual,
483
- areMapsEqual: strict
484
- ? combineComparators(areMapsEqual, areObjectsEqualStrict)
485
- : areMapsEqual,
470
+ areMapsEqual: strict ? combineComparators(areMapsEqual, areObjectsEqualStrict) : areMapsEqual,
486
471
  areNumbersEqual: areNumbersEqual,
487
- areObjectsEqual: strict
488
- ? areObjectsEqualStrict
489
- : areObjectsEqual,
472
+ areObjectsEqual: strict ? areObjectsEqualStrict : areObjectsEqual,
490
473
  arePrimitiveWrappersEqual: arePrimitiveWrappersEqual,
491
474
  areRegExpsEqual: areRegExpsEqual,
492
- areSetsEqual: strict
493
- ? combineComparators(areSetsEqual, areObjectsEqualStrict)
494
- : areSetsEqual,
495
- areTypedArraysEqual: strict
496
- ? areObjectsEqualStrict
497
- : areTypedArraysEqual,
475
+ areSetsEqual: strict ? combineComparators(areSetsEqual, areObjectsEqualStrict) : areSetsEqual,
476
+ areTypedArraysEqual: strict ? areObjectsEqualStrict : areTypedArraysEqual,
498
477
  areUrlsEqual: areUrlsEqual,
499
478
  unknownTagComparators: undefined,
500
479
  };
@@ -502,15 +481,15 @@ function createEqualityComparatorConfig(_a) {
502
481
  config = assign({}, config, createCustomConfig(config));
503
482
  }
504
483
  if (circular) {
505
- var areArraysEqual$1 = createIsCircular(config.areArraysEqual);
506
- var areMapsEqual$1 = createIsCircular(config.areMapsEqual);
507
- var areObjectsEqual$1 = createIsCircular(config.areObjectsEqual);
508
- var areSetsEqual$1 = createIsCircular(config.areSetsEqual);
484
+ const areArraysEqual = createIsCircular(config.areArraysEqual);
485
+ const areMapsEqual = createIsCircular(config.areMapsEqual);
486
+ const areObjectsEqual = createIsCircular(config.areObjectsEqual);
487
+ const areSetsEqual = createIsCircular(config.areSetsEqual);
509
488
  config = assign({}, config, {
510
- areArraysEqual: areArraysEqual$1,
511
- areMapsEqual: areMapsEqual$1,
512
- areObjectsEqual: areObjectsEqual$1,
513
- areSetsEqual: areSetsEqual$1,
489
+ areArraysEqual,
490
+ areMapsEqual,
491
+ areObjectsEqual,
492
+ areSetsEqual,
514
493
  });
515
494
  }
516
495
  return config;
@@ -527,16 +506,15 @@ function createInternalEqualityComparator(compare) {
527
506
  /**
528
507
  * Create the `isEqual` function used by the consuming application.
529
508
  */
530
- function createIsEqual(_a) {
531
- var circular = _a.circular, comparator = _a.comparator, createState = _a.createState, equals = _a.equals, strict = _a.strict;
509
+ function createIsEqual({ circular, comparator, createState, equals, strict }) {
532
510
  if (createState) {
533
511
  return function isEqual(a, b) {
534
- var _a = createState(), _b = _a.cache, cache = _b === void 0 ? circular ? new WeakMap() : undefined : _b, meta = _a.meta;
512
+ const { cache = circular ? new WeakMap() : undefined, meta } = createState();
535
513
  return comparator(a, b, {
536
- cache: cache,
537
- equals: equals,
538
- meta: meta,
539
- strict: strict,
514
+ cache,
515
+ equals,
516
+ meta,
517
+ strict,
540
518
  });
541
519
  };
542
520
  }
@@ -544,17 +522,17 @@ function createIsEqual(_a) {
544
522
  return function isEqual(a, b) {
545
523
  return comparator(a, b, {
546
524
  cache: new WeakMap(),
547
- equals: equals,
525
+ equals,
548
526
  meta: undefined,
549
- strict: strict,
527
+ strict,
550
528
  });
551
529
  };
552
530
  }
553
- var state = {
531
+ const state = {
554
532
  cache: undefined,
555
- equals: equals,
533
+ equals,
556
534
  meta: undefined,
557
- strict: strict,
535
+ strict,
558
536
  };
559
537
  return function isEqual(a, b) {
560
538
  return comparator(a, b, state);
@@ -564,50 +542,50 @@ function createIsEqual(_a) {
564
542
  /**
565
543
  * Whether the items passed are deeply-equal in value.
566
544
  */
567
- var deepEqual = createCustomEqual();
545
+ const deepEqual = createCustomEqual();
568
546
  /**
569
547
  * Whether the items passed are deeply-equal in value based on strict comparison.
570
548
  */
571
- var strictDeepEqual = createCustomEqual({ strict: true });
549
+ const strictDeepEqual = createCustomEqual({ strict: true });
572
550
  /**
573
551
  * Whether the items passed are deeply-equal in value, including circular references.
574
552
  */
575
- var circularDeepEqual = createCustomEqual({ circular: true });
553
+ const circularDeepEqual = createCustomEqual({ circular: true });
576
554
  /**
577
555
  * Whether the items passed are deeply-equal in value, including circular references,
578
556
  * based on strict comparison.
579
557
  */
580
- var strictCircularDeepEqual = createCustomEqual({
558
+ const strictCircularDeepEqual = createCustomEqual({
581
559
  circular: true,
582
560
  strict: true,
583
561
  });
584
562
  /**
585
563
  * Whether the items passed are shallowly-equal in value.
586
564
  */
587
- var shallowEqual = createCustomEqual({
588
- createInternalComparator: function () { return sameValueZeroEqual; },
565
+ const shallowEqual = createCustomEqual({
566
+ createInternalComparator: () => sameValueZeroEqual,
589
567
  });
590
568
  /**
591
569
  * Whether the items passed are shallowly-equal in value based on strict comparison
592
570
  */
593
- var strictShallowEqual = createCustomEqual({
571
+ const strictShallowEqual = createCustomEqual({
594
572
  strict: true,
595
- createInternalComparator: function () { return sameValueZeroEqual; },
573
+ createInternalComparator: () => sameValueZeroEqual,
596
574
  });
597
575
  /**
598
576
  * Whether the items passed are shallowly-equal in value, including circular references.
599
577
  */
600
- var circularShallowEqual = createCustomEqual({
578
+ const circularShallowEqual = createCustomEqual({
601
579
  circular: true,
602
- createInternalComparator: function () { return sameValueZeroEqual; },
580
+ createInternalComparator: () => sameValueZeroEqual,
603
581
  });
604
582
  /**
605
583
  * Whether the items passed are shallowly-equal in value, including circular references,
606
584
  * based on strict comparison.
607
585
  */
608
- var strictCircularShallowEqual = createCustomEqual({
586
+ const strictCircularShallowEqual = createCustomEqual({
609
587
  circular: true,
610
- createInternalComparator: function () { return sameValueZeroEqual; },
588
+ createInternalComparator: () => sameValueZeroEqual,
611
589
  strict: true,
612
590
  });
613
591
  /**
@@ -618,15 +596,14 @@ var strictCircularShallowEqual = createCustomEqual({
618
596
  * support for legacy environments that do not support expected features like
619
597
  * `RegExp.prototype.flags` out of the box.
620
598
  */
621
- function createCustomEqual(options) {
622
- if (options === void 0) { options = {}; }
623
- 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;
624
- var config = createEqualityComparatorConfig(options);
625
- var comparator = createEqualityComparator(config);
626
- var equals = createCustomInternalComparator
599
+ function createCustomEqual(options = {}) {
600
+ const { circular = false, createInternalComparator: createCustomInternalComparator, createState, strict = false, } = options;
601
+ const config = createEqualityComparatorConfig(options);
602
+ const comparator = createEqualityComparator(config);
603
+ const equals = createCustomInternalComparator
627
604
  ? createCustomInternalComparator(comparator)
628
605
  : createInternalEqualityComparator(comparator);
629
- return createIsEqual({ circular: circular, comparator: comparator, createState: createState, equals: equals, strict: strict });
606
+ return createIsEqual({ circular, comparator, createState, equals, strict });
630
607
  }
631
608
 
632
609
  export { circularDeepEqual, circularShallowEqual, createCustomEqual, deepEqual, sameValueZeroEqual, shallowEqual, strictCircularDeepEqual, strictCircularShallowEqual, strictDeepEqual, strictShallowEqual };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/utils.ts","../../../src/equals.ts","../../../src/comparator.ts","../../../src/index.ts"],"sourcesContent":["import type {\n AnyEqualityComparator,\n Cache,\n CircularState,\n Dictionary,\n State,\n TypeEqualityComparator,\n} from './internalTypes.js';\n\nconst { getOwnPropertyNames, getOwnPropertySymbols } = Object;\n// eslint-disable-next-line @typescript-eslint/unbound-method\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<AreItemsEqual extends TypeEqualityComparator<any, any>>(\n areItemsEqual: AreItemsEqual,\n): AreItemsEqual {\n return function isCircular(a: any, b: any, state: CircularState<Cache<any, any>>) {\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 `@@toStringTag` of the value, if it exists.\n */\nexport function getShortTag(value: any): string | undefined {\n return value != null ? (value[Symbol.toStringTag] as string) : undefined;\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(object: Dictionary): Array<string | symbol> {\n return (getOwnPropertyNames(object) as Array<string | symbol>).concat(getOwnPropertySymbols(object));\n}\n\n/**\n * Whether the object contains the property passed as an own property.\n */\nexport const hasOwn =\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n Object.hasOwn || ((object: Dictionary, property: number | string | symbol) => 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 !== a && b !== b);\n}\n","import type { Dictionary, PrimitiveWrapper, State, TypedArray } from './internalTypes.js';\nimport { getStrictProperties, hasOwn, sameValueZeroEqual } from './utils.js';\n\nconst PREACT_VNODE = '__v';\nconst PREACT_OWNER = '__o';\nconst REACT_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 errors passed are equal in value.\n */\nexport function areErrorsEqual(a: Error, b: Error): boolean {\n return a.name === b.name && a.message === b.message && a.cause === b.cause && a.stack === b.stack;\n}\n\n/**\n * Whether the functions passed are equal in value.\n */\nexport function areFunctionsEqual(a: (...args: any[]) => any, b: (...args: any[]) => any): boolean {\n return a === b;\n}\n\n/**\n * Whether the `Map`s are equal in value.\n */\nexport function areMapsEqual(a: Map<any, any>, b: Map<any, any>, state: State<any>): boolean {\n const size = a.size;\n\n if (size !== b.size) {\n return false;\n }\n\n if (!size) {\n return true;\n }\n\n const matchedIndices = new Array<true | undefined>(size);\n const aIterable = a.entries();\n\n let aResult: IteratorResult<[any, any]>;\n let bResult: IteratorResult<[any, any]>;\n let index = 0;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\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 // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n\n if (matchedIndices[matchIndex]) {\n matchIndex++;\n continue;\n }\n\n const aEntry = aResult.value;\n const bEntry = bResult.value;\n\n if (\n state.equals(aEntry[0], bEntry[0], index, matchIndex, a, b, state)\n && state.equals(aEntry[1], bEntry[1], aEntry[0], bEntry[0], a, b, state)\n ) {\n hasMatch = matchedIndices[matchIndex] = true;\n break;\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 numbers are equal in value.\n */\nexport const areNumbersEqual = sameValueZeroEqual;\n\n/**\n * Whether the objects are equal in value.\n */\nexport function areObjectsEqual(a: Dictionary, b: Dictionary, state: State<any>): 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 // 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 if (!isPropertyEqual(a, b, state, properties[index]!)) {\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(a: Dictionary, b: Dictionary, state: State<any>): 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 (!isPropertyEqual(a, b, state, property)) {\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: PrimitiveWrapper, b: PrimitiveWrapper): 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(a: Set<any>, b: Set<any>, state: State<any>): boolean {\n const size = a.size;\n\n if (size !== b.size) {\n return false;\n }\n\n if (!size) {\n return true;\n }\n\n const matchedIndices = new Array<true | undefined>(size);\n const aIterable = a.values();\n\n let aResult: IteratorResult<any>;\n let bResult: IteratorResult<any>;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\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 // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n\n if (\n !matchedIndices[matchIndex]\n && state.equals(aResult.value, bResult.value, aResult.value, bResult.value, a, b, state)\n ) {\n hasMatch = matchedIndices[matchIndex] = true;\n break;\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\n/**\n * Whether the URL instances are equal in value.\n */\nexport function areUrlsEqual(a: URL, b: URL): boolean {\n return (\n a.hostname === b.hostname\n && a.pathname === b.pathname\n && a.protocol === b.protocol\n && a.port === b.port\n && a.hash === b.hash\n && a.username === b.username\n && a.password === b.password\n );\n}\n\nfunction isPropertyEqual(a: Dictionary, b: Dictionary, state: State<any>, property: string | symbol) {\n if (\n (property === REACT_OWNER || property === PREACT_OWNER || property === PREACT_VNODE)\n && (a.$$typeof || b.$$typeof)\n ) {\n return true;\n }\n\n return hasOwn(b, property) && state.equals(a[property], b[property], property, property, a, b, state);\n}\n","import {\n areArraysEqual as areArraysEqualDefault,\n areDatesEqual as areDatesEqualDefault,\n areErrorsEqual as areErrorsEqualDefault,\n areFunctionsEqual as areFunctionsEqualDefault,\n areMapsEqual as areMapsEqualDefault,\n areNumbersEqual as areNumbersEqualDefault,\n areObjectsEqual as areObjectsEqualDefault,\n areObjectsEqualStrict as areObjectsEqualStrictDefault,\n arePrimitiveWrappersEqual as arePrimitiveWrappersEqualDefault,\n areRegExpsEqual as areRegExpsEqualDefault,\n areSetsEqual as areSetsEqualDefault,\n areTypedArraysEqual as areTypedArraysEqualDefault,\n areUrlsEqual as areUrlsEqualDefault,\n} from './equals.js';\nimport type {\n ComparatorConfig,\n CreateState,\n CustomEqualCreatorOptions,\n EqualityComparator,\n InternalEqualityComparator,\n State,\n} from './internalTypes.js';\nimport { combineComparators, createIsCircular, getShortTag } from './utils.js';\n\nconst ARGUMENTS_TAG = '[object Arguments]';\nconst BOOLEAN_TAG = '[object Boolean]';\nconst DATE_TAG = '[object Date]';\nconst ERROR_TAG = '[object Error]';\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]';\nconst URL_TAG = '[object URL]';\n\nconst { isArray } = Array;\nconst isTypedArray =\n // eslint-disable-next-line @typescript-eslint/unbound-method\n typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' ? ArrayBuffer.isView : null;\nconst { assign } = Object;\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst getTag = Object.prototype.toString.call.bind(Object.prototype.toString) 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 areErrorsEqual,\n areFunctionsEqual,\n areMapsEqual,\n areNumbersEqual,\n areObjectsEqual,\n arePrimitiveWrappersEqual,\n areRegExpsEqual,\n areSetsEqual,\n areTypedArraysEqual,\n areUrlsEqual,\n unknownTagComparators,\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 either of the items are nullish and fail the strictly equal check\n // above, then they must be unequal.\n if (a == null || b == null) {\n return false;\n }\n\n const type = typeof a;\n\n if (type !== typeof b) {\n return false;\n }\n\n if (type !== 'object') {\n if (type === 'number') {\n return areNumbersEqual(a, b, state);\n }\n\n if (type === 'function') {\n return areFunctionsEqual(a, b, state);\n }\n\n // If a primitive value that is not strictly equal, it must be unequal.\n return false;\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 as object);\n\n if (tag === DATE_TAG) {\n return areDatesEqual(a, b, state);\n }\n\n // For RegExp, the properties are not enumerable, and therefore will give false positives if\n // tested like a standard object.\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 typeof a.then !== 'function' && typeof b.then !== 'function' && areObjectsEqual(a, b, state);\n }\n\n // If a URL tag, it should be tested explicitly. Like RegExp, the properties are not\n // enumerable, and therefore will give false positives if tested like a standard object.\n if (tag === URL_TAG) {\n return areUrlsEqual(a, b, state);\n }\n\n // If an error tag, it should be tested explicitly. Like RegExp, the properties are not\n // enumerable, and therefore will give false positives if tested like a standard object.\n if (tag === ERROR_TAG) {\n return areErrorsEqual(a, b, state);\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 (unknownTagComparators) {\n let unknownTagComparator = unknownTagComparators[tag];\n\n if (!unknownTagComparator) {\n const shortTag = getShortTag(a);\n\n if (shortTag) {\n unknownTagComparator = unknownTagComparators[shortTag];\n }\n }\n\n // If the custom config has an unknown tag comparator that matches the captured tag or the\n // @@toStringTag, it is the source of truth for whether the values are equal.\n if (unknownTagComparator) {\n return unknownTagComparator(a, b, state);\n }\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 ? areObjectsEqualStrictDefault : areArraysEqualDefault,\n areDatesEqual: areDatesEqualDefault,\n areErrorsEqual: areErrorsEqualDefault,\n areFunctionsEqual: areFunctionsEqualDefault,\n areMapsEqual: strict ? combineComparators(areMapsEqualDefault, areObjectsEqualStrictDefault) : areMapsEqualDefault,\n areNumbersEqual: areNumbersEqualDefault,\n areObjectsEqual: strict ? areObjectsEqualStrictDefault : areObjectsEqualDefault,\n arePrimitiveWrappersEqual: arePrimitiveWrappersEqualDefault,\n areRegExpsEqual: areRegExpsEqualDefault,\n areSetsEqual: strict ? combineComparators(areSetsEqualDefault, areObjectsEqualStrictDefault) : areSetsEqualDefault,\n areTypedArraysEqual: strict ? areObjectsEqualStrictDefault : areTypedArraysEqualDefault,\n areUrlsEqual: areUrlsEqualDefault,\n unknownTagComparators: undefined,\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>({ circular, comparator, createState, equals, strict }: CreateIsEqualOptions<Meta>) {\n if (createState) {\n return function isEqual<A, B>(a: A, b: B): boolean {\n const { cache = circular ? new WeakMap() : undefined, meta } = 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.js';\nimport type { CustomEqualCreatorOptions } from './internalTypes.js';\nimport { sameValueZeroEqual } from './utils.js';\n\nexport { sameValueZeroEqual };\nexport type {\n AnyEqualityComparator,\n Cache,\n CircularState,\n ComparatorConfig,\n CreateCustomComparatorConfig,\n CreateState,\n CustomEqualCreatorOptions,\n DefaultState,\n Dictionary,\n EqualityComparator,\n EqualityComparatorCreator,\n InternalEqualityComparator,\n PrimitiveWrapper,\n State,\n TypeEqualityComparator,\n TypedArray,\n} from './internalTypes.js';\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>(options: CustomEqualCreatorOptions<Meta> = {}) {\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","areErrorsEqualDefault","areFunctionsEqualDefault","areMapsEqualDefault","areNumbersEqualDefault","areObjectsEqualDefault","arePrimitiveWrappersEqualDefault","areRegExpsEqualDefault","areSetsEqualDefault","areTypedArraysEqualDefault","areUrlsEqualDefault"],"mappings":"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"}