fast-equals 2.0.1 → 3.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.
@@ -1,75 +1,12 @@
1
1
  (function (global, factory) {
2
2
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
3
  typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
- (global = global || self, factory(global['fast-equals'] = {}));
5
- }(this, function (exports) { 'use strict';
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["fast-equals"] = {}));
5
+ })(this, (function (exports) { 'use strict';
6
6
 
7
7
  var HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';
8
8
  var keys = Object.keys;
9
9
  /**
10
- * @function addToCache
11
- *
12
- * add object to cache if an object
13
- *
14
- * @param value the value to potentially add to cache
15
- * @param cache the cache to add to
16
- */
17
- function addToCache(value, cache) {
18
- if (value && typeof value === 'object') {
19
- cache.add(value);
20
- }
21
- }
22
- /**
23
- * @function hasPair
24
- *
25
- * @description
26
- * does the `pairToMatch` exist in the list of `pairs` provided based on the
27
- * `isEqual` check
28
- *
29
- * @param pairs the pairs to compare against
30
- * @param pairToMatch the pair to match
31
- * @param isEqual the equality comparator used
32
- * @param meta the meta provided
33
- * @returns does the pair exist in the pairs provided
34
- */
35
- function hasPair(pairs, pairToMatch, isEqual, meta) {
36
- var length = pairs.length;
37
- var pair;
38
- for (var index = 0; index < length; index++) {
39
- pair = pairs[index];
40
- if (isEqual(pair[0], pairToMatch[0], meta) &&
41
- isEqual(pair[1], pairToMatch[1], meta)) {
42
- return true;
43
- }
44
- }
45
- return false;
46
- }
47
- /**
48
- * @function hasValue
49
- *
50
- * @description
51
- * does the `valueToMatch` exist in the list of `values` provided based on the
52
- * `isEqual` check
53
- *
54
- * @param values the values to compare against
55
- * @param valueToMatch the value to match
56
- * @param isEqual the equality comparator used
57
- * @param meta the meta provided
58
- * @returns does the value exist in the values provided
59
- */
60
- function hasValue(values, valueToMatch, isEqual, meta) {
61
- var length = values.length;
62
- for (var index = 0; index < length; index++) {
63
- if (isEqual(values[index], valueToMatch, meta)) {
64
- return true;
65
- }
66
- }
67
- return false;
68
- }
69
- /**
70
- * @function sameValueZeroEqual
71
- *
72
- * @description
73
10
  * are the values passed strictly equal or both NaN
74
11
  *
75
12
  * @param a the value to compare against
@@ -80,9 +17,6 @@
80
17
  return a === b || (a !== a && b !== b);
81
18
  }
82
19
  /**
83
- * @function isPlainObject
84
- *
85
- * @description
86
20
  * is the value a plain object
87
21
  *
88
22
  * @param value the value to test
@@ -92,9 +26,6 @@
92
26
  return value.constructor === Object || value.constructor == null;
93
27
  }
94
28
  /**
95
- * @function isPromiseLike
96
- *
97
- * @description
98
29
  * is the value promise-like (meaning it is thenable)
99
30
  *
100
31
  * @param value the value to test
@@ -104,9 +35,6 @@
104
35
  return !!value && typeof value.then === 'function';
105
36
  }
106
37
  /**
107
- * @function isReactElement
108
- *
109
- * @description
110
38
  * is the value passed a react element
111
39
  *
112
40
  * @param value the value to test
@@ -116,29 +44,23 @@
116
44
  return !!(value && value.$$typeof);
117
45
  }
118
46
  /**
119
- * @function getNewCacheFallback
120
- *
121
- * @description
122
47
  * in cases where WeakSet is not supported, creates a new custom
123
48
  * object that mimics the necessary API aspects for cache purposes
124
49
  *
125
50
  * @returns the new cache object
126
51
  */
127
52
  function getNewCacheFallback() {
128
- return Object.create({
129
- _values: [],
53
+ var values = [];
54
+ return {
130
55
  add: function (value) {
131
- this._values.push(value);
56
+ values.push(value);
132
57
  },
133
58
  has: function (value) {
134
- return this._values.indexOf(value) !== -1;
59
+ return values.indexOf(value) !== -1;
135
60
  },
136
- });
61
+ };
137
62
  }
138
63
  /**
139
- * @function getNewCache
140
- *
141
- * @description
142
64
  * get a new cache object to prevent circular references
143
65
  *
144
66
  * @returns the new cache object
@@ -152,9 +74,6 @@
152
74
  return getNewCacheFallback;
153
75
  })(HAS_WEAKSET_SUPPORT);
154
76
  /**
155
- * @function createCircularEqualCreator
156
- *
157
- * @description
158
77
  * create a custom isEqual handler specific to circular objects
159
78
  *
160
79
  * @param [isEqual] the isEqual comparator to use instead of isDeepEqual
@@ -163,57 +82,28 @@
163
82
  function createCircularEqualCreator(isEqual) {
164
83
  return function createCircularEqual(comparator) {
165
84
  var _comparator = isEqual || comparator;
166
- return function circularEqual(a, b, cache) {
85
+ return function circularEqual(a, b, indexOrKeyA, indexOrKeyB, parentA, parentB, cache) {
167
86
  if (cache === void 0) { cache = getNewCache(); }
168
- var hasA = cache.has(a);
169
- var hasB = cache.has(b);
170
- if (hasA || hasB) {
171
- return hasA && hasB;
87
+ var isCacheableA = !!a && typeof a === 'object';
88
+ var isCacheableB = !!b && typeof b === 'object';
89
+ if (isCacheableA || isCacheableB) {
90
+ var hasA = isCacheableA && cache.has(a);
91
+ var hasB = isCacheableB && cache.has(b);
92
+ if (hasA || hasB) {
93
+ return hasA && hasB;
94
+ }
95
+ if (isCacheableA) {
96
+ cache.add(a);
97
+ }
98
+ if (isCacheableB) {
99
+ cache.add(b);
100
+ }
172
101
  }
173
- addToCache(a, cache);
174
- addToCache(b, cache);
175
102
  return _comparator(a, b, cache);
176
103
  };
177
104
  };
178
105
  }
179
106
  /**
180
- * @function toPairs
181
- *
182
- * @description
183
- * convert the map passed into pairs (meaning an array of [key, value] tuples)
184
- *
185
- * @param map the map to convert to [key, value] pairs (entries)
186
- * @returns the [key, value] pairs
187
- */
188
- function toPairs(map) {
189
- var pairs = new Array(map.size);
190
- var index = 0;
191
- map.forEach(function (value, key) {
192
- pairs[index++] = [key, value];
193
- });
194
- return pairs;
195
- }
196
- /**
197
- * @function toValues
198
- *
199
- * @description
200
- * convert the set passed into values
201
- *
202
- * @param set the set to convert to values
203
- * @returns the values
204
- */
205
- function toValues(set) {
206
- var values = new Array(set.size);
207
- var index = 0;
208
- set.forEach(function (value) {
209
- values[index++] = value;
210
- });
211
- return values;
212
- }
213
- /**
214
- * @function areArraysEqual
215
- *
216
- * @description
217
107
  * are the arrays equal in value
218
108
  *
219
109
  * @param a the array to test
@@ -223,21 +113,18 @@
223
113
  * @returns are the arrays equal
224
114
  */
225
115
  function areArraysEqual(a, b, isEqual, meta) {
226
- var length = a.length;
227
- if (b.length !== length) {
116
+ var index = a.length;
117
+ if (b.length !== index) {
228
118
  return false;
229
119
  }
230
- for (var index = 0; index < length; index++) {
231
- if (!isEqual(a[index], b[index], meta)) {
120
+ while (index-- > 0) {
121
+ if (!isEqual(a[index], b[index], index, index, a, b, meta)) {
232
122
  return false;
233
123
  }
234
124
  }
235
125
  return true;
236
126
  }
237
127
  /**
238
- * @function areMapsEqual
239
- *
240
- * @description
241
128
  * are the maps equal in value
242
129
  *
243
130
  * @param a the map to test
@@ -247,26 +134,34 @@
247
134
  * @returns are the maps equal
248
135
  */
249
136
  function areMapsEqual(a, b, isEqual, meta) {
250
- if (a.size !== b.size) {
251
- return false;
252
- }
253
- var pairsA = toPairs(a);
254
- var pairsB = toPairs(b);
255
- var length = pairsA.length;
256
- for (var index = 0; index < length; index++) {
257
- if (!hasPair(pairsB, pairsA[index], isEqual, meta) ||
258
- !hasPair(pairsA, pairsB[index], isEqual, meta)) {
259
- return false;
260
- }
137
+ var isValueEqual = a.size === b.size;
138
+ if (isValueEqual && a.size) {
139
+ var matchedIndices_1 = {};
140
+ var indexA_1 = 0;
141
+ a.forEach(function (aValue, aKey) {
142
+ if (isValueEqual) {
143
+ var hasMatch_1 = false;
144
+ var matchIndexB_1 = 0;
145
+ b.forEach(function (bValue, bKey) {
146
+ if (!hasMatch_1 && !matchedIndices_1[matchIndexB_1]) {
147
+ hasMatch_1 =
148
+ isEqual(aKey, bKey, indexA_1, matchIndexB_1, a, b, meta) && isEqual(aValue, bValue, aKey, bKey, a, b, meta);
149
+ if (hasMatch_1) {
150
+ matchedIndices_1[matchIndexB_1] = true;
151
+ }
152
+ }
153
+ matchIndexB_1++;
154
+ });
155
+ indexA_1++;
156
+ isValueEqual = hasMatch_1;
157
+ }
158
+ });
261
159
  }
262
- return true;
160
+ return isValueEqual;
263
161
  }
264
162
  var OWNER = '_owner';
265
163
  var hasOwnProperty = Function.prototype.bind.call(Function.prototype.call, Object.prototype.hasOwnProperty);
266
164
  /**
267
- * @function areObjectsEqual
268
- *
269
- * @description
270
165
  * are the objects equal in value
271
166
  *
272
167
  * @param a the object to test
@@ -277,31 +172,30 @@
277
172
  */
278
173
  function areObjectsEqual(a, b, isEqual, meta) {
279
174
  var keysA = keys(a);
280
- var length = keysA.length;
281
- if (keys(b).length !== length) {
175
+ var index = keysA.length;
176
+ if (keys(b).length !== index) {
282
177
  return false;
283
178
  }
284
- var key;
285
- for (var index = 0; index < length; index++) {
286
- key = keysA[index];
287
- if (!hasOwnProperty(b, key)) {
288
- return false;
289
- }
290
- if (key === OWNER && isReactElement(a)) {
291
- if (!isReactElement(b)) {
179
+ if (index) {
180
+ var key = void 0;
181
+ while (index-- > 0) {
182
+ key = keysA[index];
183
+ if (key === OWNER) {
184
+ var reactElementA = isReactElement(a);
185
+ var reactElementB = isReactElement(b);
186
+ if ((reactElementA || reactElementB) &&
187
+ reactElementA !== reactElementB) {
188
+ return false;
189
+ }
190
+ }
191
+ if (!hasOwnProperty(b, key) || !isEqual(a[key], b[key], key, key, a, b, meta)) {
292
192
  return false;
293
193
  }
294
194
  }
295
- else if (!isEqual(a[key], b[key], meta)) {
296
- return false;
297
- }
298
195
  }
299
196
  return true;
300
197
  }
301
198
  /**
302
- * @function areRegExpsEqual
303
- *
304
- * @description
305
199
  * are the regExps equal in value
306
200
  *
307
201
  * @param a the regExp to test
@@ -318,9 +212,6 @@
318
212
  a.lastIndex === b.lastIndex);
319
213
  }
320
214
  /**
321
- * @function areSetsEqual
322
- *
323
- * @description
324
215
  * are the sets equal in value
325
216
  *
326
217
  * @param a the set to test
@@ -330,36 +221,39 @@
330
221
  * @returns are the sets equal
331
222
  */
332
223
  function areSetsEqual(a, b, isEqual, meta) {
333
- if (a.size !== b.size) {
334
- return false;
335
- }
336
- var valuesA = toValues(a);
337
- var valuesB = toValues(b);
338
- var length = valuesA.length;
339
- for (var index = 0; index < length; index++) {
340
- if (!hasValue(valuesB, valuesA[index], isEqual, meta) ||
341
- !hasValue(valuesA, valuesB[index], isEqual, meta)) {
342
- return false;
343
- }
224
+ var isValueEqual = a.size === b.size;
225
+ if (isValueEqual && a.size) {
226
+ var matchedIndices_2 = {};
227
+ a.forEach(function (aValue, aKey) {
228
+ if (isValueEqual) {
229
+ var hasMatch_2 = false;
230
+ var matchIndex_1 = 0;
231
+ b.forEach(function (bValue, bKey) {
232
+ if (!hasMatch_2 && !matchedIndices_2[matchIndex_1]) {
233
+ hasMatch_2 = isEqual(aValue, bValue, aKey, bKey, a, b, meta);
234
+ if (hasMatch_2) {
235
+ matchedIndices_2[matchIndex_1] = true;
236
+ }
237
+ }
238
+ matchIndex_1++;
239
+ });
240
+ isValueEqual = hasMatch_2;
241
+ }
242
+ });
344
243
  }
345
- return true;
244
+ return isValueEqual;
346
245
  }
347
246
 
348
- var isArray = Array.isArray;
349
247
  var HAS_MAP_SUPPORT = typeof Map === 'function';
350
248
  var HAS_SET_SUPPORT = typeof Set === 'function';
351
- var OBJECT_TYPEOF = 'object';
352
249
  function createComparator(createIsEqual) {
353
250
  var isEqual =
354
251
  /* eslint-disable no-use-before-define */
355
252
  typeof createIsEqual === 'function'
356
253
  ? createIsEqual(comparator)
357
- : comparator;
254
+ : function (a, b, indexOrKeyA, indexOrKeyB, parentA, parentB, meta) { return comparator(a, b, meta); };
358
255
  /* eslint-enable */
359
256
  /**
360
- * @function comparator
361
- *
362
- * @description
363
257
  * compare the value of the two objects and return true if they are equivalent in values
364
258
  *
365
259
  * @param a the value to test against
@@ -368,53 +262,52 @@
368
262
  * @returns are a and b equivalent in value
369
263
  */
370
264
  function comparator(a, b, meta) {
371
- if (sameValueZeroEqual(a, b)) {
265
+ if (a === b) {
372
266
  return true;
373
267
  }
374
- if (a && b && typeof a === OBJECT_TYPEOF && typeof b === OBJECT_TYPEOF) {
268
+ if (a && b && typeof a === 'object' && typeof b === 'object') {
375
269
  if (isPlainObject(a) && isPlainObject(b)) {
376
270
  return areObjectsEqual(a, b, isEqual, meta);
377
271
  }
378
- var arrayA = isArray(a);
379
- var arrayB = isArray(b);
380
- if (arrayA || arrayB) {
381
- return arrayA === arrayB && areArraysEqual(a, b, isEqual, meta);
272
+ var aShape = Array.isArray(a);
273
+ var bShape = Array.isArray(b);
274
+ if (aShape || bShape) {
275
+ return aShape === bShape && areArraysEqual(a, b, isEqual, meta);
382
276
  }
383
- var aDate = a instanceof Date;
384
- var bDate = b instanceof Date;
385
- if (aDate || bDate) {
386
- return aDate === bDate && sameValueZeroEqual(a.getTime(), b.getTime());
277
+ aShape = a instanceof Date;
278
+ bShape = b instanceof Date;
279
+ if (aShape || bShape) {
280
+ return (aShape === bShape && sameValueZeroEqual(a.getTime(), b.getTime()));
387
281
  }
388
- var aRegExp = a instanceof RegExp;
389
- var bRegExp = b instanceof RegExp;
390
- if (aRegExp || bRegExp) {
391
- return aRegExp === bRegExp && areRegExpsEqual(a, b);
282
+ aShape = a instanceof RegExp;
283
+ bShape = b instanceof RegExp;
284
+ if (aShape || bShape) {
285
+ return aShape === bShape && areRegExpsEqual(a, b);
392
286
  }
393
287
  if (isPromiseLike(a) || isPromiseLike(b)) {
394
288
  return a === b;
395
289
  }
396
290
  if (HAS_MAP_SUPPORT) {
397
- var aMap = a instanceof Map;
398
- var bMap = b instanceof Map;
399
- if (aMap || bMap) {
400
- return aMap === bMap && areMapsEqual(a, b, isEqual, meta);
291
+ aShape = a instanceof Map;
292
+ bShape = b instanceof Map;
293
+ if (aShape || bShape) {
294
+ return aShape === bShape && areMapsEqual(a, b, isEqual, meta);
401
295
  }
402
296
  }
403
297
  if (HAS_SET_SUPPORT) {
404
- var aSet = a instanceof Set;
405
- var bSet = b instanceof Set;
406
- if (aSet || bSet) {
407
- return aSet === bSet && areSetsEqual(a, b, isEqual, meta);
298
+ aShape = a instanceof Set;
299
+ bShape = b instanceof Set;
300
+ if (aShape || bShape) {
301
+ return aShape === bShape && areSetsEqual(a, b, isEqual, meta);
408
302
  }
409
303
  }
410
304
  return areObjectsEqual(a, b, isEqual, meta);
411
305
  }
412
- return false;
306
+ return a !== a && b !== b;
413
307
  }
414
308
  return comparator;
415
309
  }
416
310
 
417
- // comparator
418
311
  var deepEqual = createComparator();
419
312
  var shallowEqual = createComparator(function () { return sameValueZeroEqual; });
420
313
  var circularDeepEqual = createComparator(createCircularEqualCreator());
@@ -1 +1 @@
1
- {"version":3,"file":"fast-equals.js","sources":["../src/utils.ts","../src/comparator.ts","../src/index.ts"],"sourcesContent":["const HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';\n\nconst { keys } = Object;\n\ntype Cache = {\n add: (value: any) => void;\n has: (value: any) => boolean;\n};\n\n/**\n * @function addToCache\n *\n * add object to cache if an object\n *\n * @param value the value to potentially add to cache\n * @param cache the cache to add to\n */\nexport function addToCache(value: any, cache: Cache) {\n if (value && typeof value === 'object') {\n cache.add(value);\n }\n}\n\nexport type EqualityComparator = (a: any, b: any, meta?: any) => boolean;\n\n/**\n * @function hasPair\n *\n * @description\n * does the `pairToMatch` exist in the list of `pairs` provided based on the\n * `isEqual` check\n *\n * @param pairs the pairs to compare against\n * @param pairToMatch the pair to match\n * @param isEqual the equality comparator used\n * @param meta the meta provided\n * @returns does the pair exist in the pairs provided\n */\nexport function hasPair(\n pairs: [any, any][],\n pairToMatch: [any, any],\n isEqual: EqualityComparator,\n meta: any,\n) {\n const { length } = pairs;\n\n let pair: [any, any];\n\n for (let index = 0; index < length; index++) {\n pair = pairs[index];\n\n if (\n isEqual(pair[0], pairToMatch[0], meta) &&\n isEqual(pair[1], pairToMatch[1], meta)\n ) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * @function hasValue\n *\n * @description\n * does the `valueToMatch` exist in the list of `values` provided based on the\n * `isEqual` check\n *\n * @param values the values to compare against\n * @param valueToMatch the value to match\n * @param isEqual the equality comparator used\n * @param meta the meta provided\n * @returns does the value exist in the values provided\n */\nexport function hasValue(\n values: any[],\n valueToMatch: any,\n isEqual: EqualityComparator,\n meta: any,\n) {\n const { length } = values;\n\n for (let index = 0; index < length; index++) {\n if (isEqual(values[index], valueToMatch, meta)) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * @function sameValueZeroEqual\n *\n * @description\n * are the values passed strictly equal or both NaN\n *\n * @param a the value to compare against\n * @param b the value to test\n * @returns are the values equal by the SameValueZero principle\n */\nexport function sameValueZeroEqual(a: any, b: any) {\n return a === b || (a !== a && b !== b);\n}\n\n/**\n * @function isPlainObject\n *\n * @description\n * is the value a plain object\n *\n * @param value the value to test\n * @returns is the value a plain object\n */\nexport function isPlainObject(value: any) {\n return value.constructor === Object || value.constructor == null;\n}\n\n/**\n * @function isPromiseLike\n *\n * @description\n * is the value promise-like (meaning it is thenable)\n *\n * @param value the value to test\n * @returns is the value promise-like\n */\nexport function isPromiseLike(value: any) {\n return !!value && typeof value.then === 'function';\n}\n\n/**\n * @function isReactElement\n *\n * @description\n * is the value passed a react element\n *\n * @param value the value to test\n * @returns is the value a react element\n */\nexport function isReactElement(value: any) {\n return !!(value && value.$$typeof);\n}\n\n/**\n * @function getNewCacheFallback\n *\n * @description\n * in cases where WeakSet is not supported, creates a new custom\n * object that mimics the necessary API aspects for cache purposes\n *\n * @returns the new cache object\n */\nexport function getNewCacheFallback(): Cache {\n return Object.create({\n _values: [],\n\n add(value: any) {\n this._values.push(value);\n },\n\n has(value: any) {\n return this._values.indexOf(value) !== -1;\n },\n });\n}\n\n/**\n * @function getNewCache\n *\n * @description\n * get a new cache object to prevent circular references\n *\n * @returns the new cache object\n */\nexport const getNewCache = ((canUseWeakMap: boolean) => {\n if (canUseWeakMap) {\n return function _getNewCache(): Cache {\n return new WeakSet();\n };\n }\n\n return getNewCacheFallback;\n})(HAS_WEAKSET_SUPPORT);\n\n/**\n * @function createCircularEqualCreator\n *\n * @description\n * create a custom isEqual handler specific to circular objects\n *\n * @param [isEqual] the isEqual comparator to use instead of isDeepEqual\n * @returns the method to create the `isEqual` function\n */\nexport function createCircularEqualCreator(isEqual?: EqualityComparator) {\n return function createCircularEqual(comparator: EqualityComparator) {\n const _comparator = isEqual || comparator;\n\n return function circularEqual(\n a: any,\n b: any,\n cache: Cache = getNewCache(),\n ) {\n const hasA = cache.has(a);\n const hasB = cache.has(b);\n\n if (hasA || hasB) {\n return hasA && hasB;\n }\n\n addToCache(a, cache);\n addToCache(b, cache);\n\n return _comparator(a, b, cache);\n };\n };\n}\n\n/**\n * @function toPairs\n *\n * @description\n * convert the map passed into pairs (meaning an array of [key, value] tuples)\n *\n * @param map the map to convert to [key, value] pairs (entries)\n * @returns the [key, value] pairs\n */\nexport function toPairs(map: Map<any, any>): [any, any][] {\n const pairs = new Array(map.size);\n\n let index = 0;\n\n map.forEach((value, key) => {\n pairs[index++] = [key, value];\n });\n\n return pairs;\n}\n\n/**\n * @function toValues\n *\n * @description\n * convert the set passed into values\n *\n * @param set the set to convert to values\n * @returns the values\n */\nexport function toValues(set: Set<any>) {\n const values = new Array(set.size);\n\n let index = 0;\n\n set.forEach((value) => {\n values[index++] = value;\n });\n\n return values;\n}\n\n/**\n * @function areArraysEqual\n *\n * @description\n * are the arrays equal in value\n *\n * @param a the array to test\n * @param b the array to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta object to pass through\n * @returns are the arrays equal\n */\nexport function areArraysEqual(\n a: any[],\n b: any[],\n isEqual: EqualityComparator,\n meta: any,\n) {\n const { length } = a;\n\n if (b.length !== length) {\n return false;\n }\n\n for (let index = 0; index < length; index++) {\n if (!isEqual(a[index], b[index], meta)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * @function areMapsEqual\n *\n * @description\n * are the maps equal in value\n *\n * @param a the map to test\n * @param b the map to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta map to pass through\n * @returns are the maps equal\n */\nexport function areMapsEqual(\n a: Map<any, any>,\n b: Map<any, any>,\n isEqual: EqualityComparator,\n meta: any,\n) {\n if (a.size !== b.size) {\n return false;\n }\n\n const pairsA = toPairs(a);\n const pairsB = toPairs(b);\n\n const { length } = pairsA;\n\n for (let index = 0; index < length; index++) {\n if (\n !hasPair(pairsB, pairsA[index], isEqual, meta) ||\n !hasPair(pairsA, pairsB[index], isEqual, meta)\n ) {\n return false;\n }\n }\n\n return true;\n}\n\ntype Dictionary<Type> = {\n [key: string]: Type;\n [index: number]: Type;\n};\n\nconst OWNER = '_owner';\n\nconst hasOwnProperty = Function.prototype.bind.call(\n Function.prototype.call,\n Object.prototype.hasOwnProperty,\n);\n\n/**\n * @function areObjectsEqual\n *\n * @description\n * are the objects equal in value\n *\n * @param a the object to test\n * @param b the object to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta object to pass through\n * @returns are the objects equal\n */\nexport function areObjectsEqual(\n a: Dictionary<any>,\n b: Dictionary<any>,\n isEqual: EqualityComparator,\n meta: any,\n) {\n const keysA = keys(a);\n\n const { length } = keysA;\n\n if (keys(b).length !== length) {\n return false;\n }\n\n let key: string;\n\n for (let index = 0; index < length; index++) {\n key = keysA[index];\n\n if (!hasOwnProperty(b, key)) {\n return false;\n }\n\n if (key === OWNER && isReactElement(a)) {\n if (!isReactElement(b)) {\n return false;\n }\n } else if (!isEqual(a[key], b[key], meta)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * @function areRegExpsEqual\n *\n * @description\n * are the regExps equal in value\n *\n * @param a the regExp to test\n * @param b the regExp to test agains\n * @returns are the regExps equal\n */\nexport function areRegExpsEqual(a: RegExp, b: RegExp) {\n return (\n a.source === b.source &&\n a.global === b.global &&\n a.ignoreCase === b.ignoreCase &&\n a.multiline === b.multiline &&\n a.unicode === b.unicode &&\n a.sticky === b.sticky &&\n a.lastIndex === b.lastIndex\n );\n}\n\n/**\n * @function areSetsEqual\n *\n * @description\n * are the sets equal in value\n *\n * @param a the set to test\n * @param b the set to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta set to pass through\n * @returns are the sets equal\n */\nexport function areSetsEqual(\n a: Set<any>,\n b: Set<any>,\n isEqual: EqualityComparator,\n meta: any,\n) {\n if (a.size !== b.size) {\n return false;\n }\n\n const valuesA = toValues(a);\n const valuesB = toValues(b);\n\n const { length } = valuesA;\n\n for (let index = 0; index < length; index++) {\n if (\n !hasValue(valuesB, valuesA[index], isEqual, meta) ||\n !hasValue(valuesA, valuesB[index], isEqual, meta)\n ) {\n return false;\n }\n }\n\n return true;\n}\n","import {\n EqualityComparator,\n areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areRegExpsEqual,\n areSetsEqual,\n isPlainObject,\n isPromiseLike,\n sameValueZeroEqual,\n} from './utils';\n\nconst { isArray } = Array;\n\nconst HAS_MAP_SUPPORT = typeof Map === 'function';\nconst HAS_SET_SUPPORT = typeof Set === 'function';\n\nconst OBJECT_TYPEOF = 'object';\n\ntype EqualityComparatorCreator = (fn: EqualityComparator) => EqualityComparator;\n\nexport function createComparator(createIsEqual?: EqualityComparatorCreator) {\n const isEqual: EqualityComparator =\n /* eslint-disable no-use-before-define */\n typeof createIsEqual === 'function'\n ? createIsEqual(comparator)\n : comparator;\n /* eslint-enable */\n\n /**\n * @function comparator\n *\n * @description\n * compare the value of the two objects and return true if they are equivalent in values\n *\n * @param a the value to test against\n * @param b the value to test\n * @param [meta] an optional meta object that is passed through to all equality test calls\n * @returns are a and b equivalent in value\n */\n function comparator(a: any, b: any, meta?: any) {\n if (sameValueZeroEqual(a, b)) {\n return true;\n }\n\n if (a && b && typeof a === OBJECT_TYPEOF && typeof b === OBJECT_TYPEOF) {\n if (isPlainObject(a) && isPlainObject(b)) {\n return areObjectsEqual(a, b, isEqual, meta);\n }\n\n const arrayA = isArray(a);\n const arrayB = isArray(b);\n\n if (arrayA || arrayB) {\n return arrayA === arrayB && areArraysEqual(a, b, isEqual, meta);\n }\n\n const aDate = a instanceof Date;\n const bDate = b instanceof Date;\n\n if (aDate || bDate) {\n return aDate === bDate && sameValueZeroEqual(a.getTime(), b.getTime());\n }\n\n const aRegExp = a instanceof RegExp;\n const bRegExp = b instanceof RegExp;\n\n if (aRegExp || bRegExp) {\n return aRegExp === bRegExp && areRegExpsEqual(a, b);\n }\n\n if (isPromiseLike(a) || isPromiseLike(b)) {\n return a === b;\n }\n\n if (HAS_MAP_SUPPORT) {\n const aMap = a instanceof Map;\n const bMap = b instanceof Map;\n\n if (aMap || bMap) {\n return aMap === bMap && areMapsEqual(a, b, isEqual, meta);\n }\n }\n\n if (HAS_SET_SUPPORT) {\n const aSet = a instanceof Set;\n const bSet = b instanceof Set;\n\n if (aSet || bSet) {\n return aSet === bSet && areSetsEqual(a, b, isEqual, meta);\n }\n }\n\n return areObjectsEqual(a, b, isEqual, meta);\n }\n\n return false;\n }\n\n return comparator;\n}\n","// comparator\nimport { createComparator } from './comparator';\n\n// utils\nimport { createCircularEqualCreator, sameValueZeroEqual } from './utils';\n\nexport { createComparator as createCustomEqual, sameValueZeroEqual };\n\nexport const deepEqual = createComparator();\nexport const shallowEqual = createComparator(() => sameValueZeroEqual);\n\nexport const circularDeepEqual = createComparator(createCircularEqualCreator());\nexport const circularShallowEqual = createComparator(\n createCircularEqualCreator(sameValueZeroEqual),\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fast-equals.js","sources":["../src/utils.ts","../src/comparator.ts","../src/index.ts"],"sourcesContent":["const HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';\n\nconst { keys } = Object;\n\ntype Cache = {\n add: (value: any) => void;\n has: (value: any) => boolean;\n};\n\nexport type InternalEqualityComparator = (\n objectA: any,\n objectB: any,\n indexOrKeyA: any,\n indexOrKeyB: any,\n parentA: any,\n parentB: any,\n meta: any,\n) => boolean;\n\nexport type EqualityComparator = (\n objectA: any,\n objectB: any,\n meta?: any\n) => boolean;\n\n/**\n * are the values passed strictly equal or both NaN\n *\n * @param a the value to compare against\n * @param b the value to test\n * @returns are the values equal by the SameValueZero principle\n */\nexport function sameValueZeroEqual(a: any, b: any) {\n return a === b || (a !== a && b !== b);\n}\n\n/**\n * is the value a plain object\n *\n * @param value the value to test\n * @returns is the value a plain object\n */\nexport function isPlainObject(value: any) {\n return value.constructor === Object || value.constructor == null;\n}\n\n/**\n * is the value promise-like (meaning it is thenable)\n *\n * @param value the value to test\n * @returns is the value promise-like\n */\nexport function isPromiseLike(value: any) {\n return !!value && typeof value.then === 'function';\n}\n\n/**\n * is the value passed a react element\n *\n * @param value the value to test\n * @returns is the value a react element\n */\nexport function isReactElement(value: any) {\n return !!(value && value.$$typeof);\n}\n\n/**\n * in cases where WeakSet is not supported, creates a new custom\n * object that mimics the necessary API aspects for cache purposes\n *\n * @returns the new cache object\n */\nexport function getNewCacheFallback(): Cache {\n const values: any[] = [];\n\n return {\n add(value: any) {\n values.push(value);\n },\n\n has(value: any) {\n return values.indexOf(value) !== -1;\n },\n };\n}\n\n/**\n * get a new cache object to prevent circular references\n *\n * @returns the new cache object\n */\nexport const getNewCache = ((canUseWeakMap: boolean) => {\n if (canUseWeakMap) {\n return function _getNewCache(): Cache {\n return new WeakSet();\n };\n }\n\n return getNewCacheFallback;\n})(HAS_WEAKSET_SUPPORT);\n\n/**\n * create a custom isEqual handler specific to circular objects\n *\n * @param [isEqual] the isEqual comparator to use instead of isDeepEqual\n * @returns the method to create the `isEqual` function\n */\nexport function createCircularEqualCreator(isEqual?: EqualityComparator) {\n return function createCircularEqual(comparator: EqualityComparator): InternalEqualityComparator {\n const _comparator = isEqual || comparator;\n\n return function circularEqual(\n a,\n b,\n indexOrKeyA,\n indexOrKeyB,\n parentA,\n parentB,\n cache: Cache = getNewCache(),\n ) {\n const isCacheableA = !!a && typeof a === 'object';\n const isCacheableB = !!b && typeof b === 'object';\n\n if (isCacheableA || isCacheableB) {\n const hasA = isCacheableA && cache.has(a);\n const hasB = isCacheableB && cache.has(b);\n\n if (hasA || hasB) {\n return hasA && hasB;\n }\n\n if (isCacheableA) {\n cache.add(a);\n }\n\n if (isCacheableB) {\n cache.add(b);\n }\n }\n\n return _comparator(a, b, cache);\n };\n };\n}\n\n/**\n * are the arrays equal in value\n *\n * @param a the array to test\n * @param b the array to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta object to pass through\n * @returns are the arrays equal\n */\nexport function areArraysEqual(\n a: any[],\n b: any[],\n isEqual: InternalEqualityComparator,\n meta: any,\n) {\n let index = a.length;\n\n if (b.length !== index) {\n return false;\n }\n\n while (index-- > 0) {\n if (!isEqual(a[index], b[index], index, index, a, b, meta)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * are the maps equal in value\n *\n * @param a the map to test\n * @param b the map to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta map to pass through\n * @returns are the maps equal\n */\nexport function areMapsEqual(\n a: Map<any, any>,\n b: Map<any, any>,\n isEqual: InternalEqualityComparator,\n meta: any,\n) {\n let isValueEqual = a.size === b.size;\n\n if (isValueEqual && a.size) {\n const matchedIndices: Record<number, true> = {};\n let indexA = 0;\n\n a.forEach((aValue, aKey) => {\n if (isValueEqual) {\n let hasMatch = false;\n let matchIndexB = 0;\n\n b.forEach((bValue, bKey) => {\n if (!hasMatch && !matchedIndices[matchIndexB]) {\n hasMatch =\n isEqual(aKey, bKey, indexA, matchIndexB, a, b, meta) && isEqual(aValue, bValue, aKey, bKey, a, b, meta);\n\n if (hasMatch) {\n matchedIndices[matchIndexB] = true;\n }\n }\n\n matchIndexB++;\n });\n\n indexA++;\n isValueEqual = hasMatch;\n }\n });\n }\n\n return isValueEqual;\n}\n\ntype Dictionary<Type> = {\n [key: string]: Type;\n [index: number]: Type;\n};\n\nconst OWNER = '_owner';\n\nconst hasOwnProperty = Function.prototype.bind.call(\n Function.prototype.call,\n Object.prototype.hasOwnProperty,\n);\n\n/**\n * are the objects equal in value\n *\n * @param a the object to test\n * @param b the object to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta object to pass through\n * @returns are the objects equal\n */\nexport function areObjectsEqual(\n a: Dictionary<any>,\n b: Dictionary<any>,\n isEqual: InternalEqualityComparator,\n meta: any,\n) {\n const keysA = keys(a);\n\n let index = keysA.length;\n\n if (keys(b).length !== index) {\n return false;\n }\n\n if (index) {\n let key: string;\n\n while (index-- > 0) {\n key = keysA[index];\n\n if (key === OWNER) {\n const reactElementA = isReactElement(a);\n const reactElementB = isReactElement(b);\n\n if (\n (reactElementA || reactElementB) &&\n reactElementA !== reactElementB\n ) {\n return false;\n }\n }\n\n if (!hasOwnProperty(b, key) || !isEqual(a[key], b[key], key, key, a, b, meta)) {\n return false;\n }\n }\n }\n\n return true;\n}\n\n/**\n * are the regExps equal in value\n *\n * @param a the regExp to test\n * @param b the regExp to test agains\n * @returns are the regExps equal\n */\nexport function areRegExpsEqual(a: RegExp, b: RegExp) {\n return (\n a.source === b.source &&\n a.global === b.global &&\n a.ignoreCase === b.ignoreCase &&\n a.multiline === b.multiline &&\n a.unicode === b.unicode &&\n a.sticky === b.sticky &&\n a.lastIndex === b.lastIndex\n );\n}\n\n/**\n * are the sets equal in value\n *\n * @param a the set to test\n * @param b the set to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta set to pass through\n * @returns are the sets equal\n */\nexport function areSetsEqual(\n a: Set<any>,\n b: Set<any>,\n isEqual: InternalEqualityComparator,\n meta: any,\n) {\n let isValueEqual = a.size === b.size;\n\n if (isValueEqual && a.size) {\n const matchedIndices: Record<number, true> = {};\n\n a.forEach((aValue, aKey) => {\n if (isValueEqual) {\n let hasMatch = false;\n let matchIndex = 0;\n\n b.forEach((bValue, bKey) => {\n if (!hasMatch && !matchedIndices[matchIndex]) {\n hasMatch = isEqual(aValue, bValue, aKey, bKey, a, b, meta);\n\n if (hasMatch) {\n matchedIndices[matchIndex] = true;\n }\n }\n\n matchIndex++;\n });\n\n isValueEqual = hasMatch;\n }\n });\n }\n\n return isValueEqual;\n}\n","import {\n EqualityComparator,\n InternalEqualityComparator,\n areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areRegExpsEqual,\n areSetsEqual,\n isPlainObject,\n isPromiseLike,\n sameValueZeroEqual,\n} from './utils';\n\nconst HAS_MAP_SUPPORT = typeof Map === 'function';\nconst HAS_SET_SUPPORT = typeof Set === 'function';\n\nexport type EqualityComparatorCreator = (fn: EqualityComparator) => InternalEqualityComparator;\n\nexport function createComparator(createIsEqual?: EqualityComparatorCreator): EqualityComparator {\n const isEqual: InternalEqualityComparator =\n /* eslint-disable no-use-before-define */\n typeof createIsEqual === 'function'\n ? createIsEqual(comparator)\n : (a: any, b: any, indexOrKeyA: any, indexOrKeyB: any, parentA: any, parentB: any, meta: any) => comparator(a, b, meta);\n /* eslint-enable */\n\n /**\n * compare the value of the two objects and return true if they are equivalent in values\n *\n * @param a the value to test against\n * @param b the value to test\n * @param [meta] an optional meta object that is passed through to all equality test calls\n * @returns are a and b equivalent in value\n */\n function comparator(a: any, b: any, meta?: any) {\n if (a === b) {\n return true;\n }\n\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n if (isPlainObject(a) && isPlainObject(b)) {\n return areObjectsEqual(a, b, isEqual, meta);\n }\n\n let aShape = Array.isArray(a);\n let bShape = Array.isArray(b);\n\n if (aShape || bShape) {\n return aShape === bShape && areArraysEqual(a, b, isEqual, meta);\n }\n\n aShape = a instanceof Date;\n bShape = b instanceof Date;\n\n if (aShape || bShape) {\n return (\n aShape === bShape && sameValueZeroEqual(a.getTime(), b.getTime())\n );\n }\n\n aShape = a instanceof RegExp;\n bShape = b instanceof RegExp;\n\n if (aShape || bShape) {\n return aShape === bShape && areRegExpsEqual(a, b);\n }\n\n if (isPromiseLike(a) || isPromiseLike(b)) {\n return a === b;\n }\n\n if (HAS_MAP_SUPPORT) {\n aShape = a instanceof Map;\n bShape = b instanceof Map;\n\n if (aShape || bShape) {\n return aShape === bShape && areMapsEqual(a, b, isEqual, meta);\n }\n }\n\n if (HAS_SET_SUPPORT) {\n aShape = a instanceof Set;\n bShape = b instanceof Set;\n\n if (aShape || bShape) {\n return aShape === bShape && areSetsEqual(a, b, isEqual, meta);\n }\n }\n\n return areObjectsEqual(a, b, isEqual, meta);\n }\n\n return a !== a && b !== b;\n }\n\n return comparator;\n}\n","import { createComparator } from './comparator';\nimport { createCircularEqualCreator, sameValueZeroEqual } from './utils';\n\nexport { createComparator as createCustomEqual, sameValueZeroEqual };\n\nexport const deepEqual = createComparator();\nexport const shallowEqual = createComparator(() => sameValueZeroEqual);\n\nexport const circularDeepEqual = createComparator(createCircularEqualCreator());\nexport const circularShallowEqual = createComparator(\n createCircularEqualCreator(sameValueZeroEqual),\n);\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- !function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((n=n||self)["fast-equals"]={})}(this,function(n){"use strict";var e="function"==typeof WeakSet,t=Object.keys;function r(n,e){n&&"object"==typeof n&&e.add(n)}function u(n,e,t,r){for(var u,i=n.length,o=0;o<i;o++)if(t((u=n[o])[0],e[0],r)&&t(u[1],e[1],r))return!0;return!1}function i(n,e,t,r){for(var u=n.length,i=0;i<u;i++)if(t(n[i],e,r))return!0;return!1}function o(n,e){return n===e||n!=n&&e!=e}function f(n){return n.constructor===Object||null==n.constructor}function a(n){return!!n&&"function"==typeof n.then}function c(n){return!(!n||!n.$$typeof)}function s(){return Object.create({_values:[],add:function(n){this._values.push(n)},has:function(n){return-1!==this._values.indexOf(n)}})}var l=e?function(){return new WeakSet}:s;function p(n){return function(e){var t=n||e;return function(n,e,u){void 0===u&&(u=l());var i=u.has(n),o=u.has(e);return i||o?i&&o:(r(n,u),r(e,u),t(n,e,u))}}}function v(n){var e=new Array(n.size),t=0;return n.forEach(function(n,r){e[t++]=[r,n]}),e}function y(n){var e=new Array(n.size),t=0;return n.forEach(function(n){e[t++]=n}),e}var d="_owner",h=Function.prototype.bind.call(Function.prototype.call,Object.prototype.hasOwnProperty);function g(n,e,r,u){var i,o=t(n),f=o.length;if(t(e).length!==f)return!1;for(var a=0;a<f;a++){if(i=o[a],!h(e,i))return!1;if(i===d&&c(n)){if(!c(e))return!1}else if(!r(n[i],e[i],u))return!1}return!0}var b=Array.isArray,E="function"==typeof Map,j="function"==typeof Set,m="object";function x(n){var e="function"==typeof n?n(t):t;function t(n,t,r){if(o(n,t))return!0;if(n&&t&&typeof n===m&&typeof t===m){if(f(n)&&f(t))return g(n,t,e,r);var c=b(n),s=b(t);if(c||s)return c===s&&function(n,e,t,r){var u=n.length;if(e.length!==u)return!1;for(var i=0;i<u;i++)if(!t(n[i],e[i],r))return!1;return!0}(n,t,e,r);var l=n instanceof Date,p=t instanceof Date;if(l||p)return l===p&&o(n.getTime(),t.getTime());var d=n instanceof RegExp,h=t instanceof RegExp;if(d||h)return d===h&&function(n,e){return n.source===e.source&&n.global===e.global&&n.ignoreCase===e.ignoreCase&&n.multiline===e.multiline&&n.unicode===e.unicode&&n.sticky===e.sticky&&n.lastIndex===e.lastIndex}(n,t);if(a(n)||a(t))return n===t;if(E){var x=n instanceof Map,q=t instanceof Map;if(x||q)return x===q&&function(n,e,t,r){if(n.size!==e.size)return!1;for(var i=v(n),o=v(e),f=i.length,a=0;a<f;a++)if(!u(o,i[a],t,r)||!u(i,o[a],t,r))return!1;return!0}(n,t,e,r)}if(j){var w=n instanceof Set,O=t instanceof Set;if(w||O)return w===O&&function(n,e,t,r){if(n.size!==e.size)return!1;for(var u=y(n),o=y(e),f=u.length,a=0;a<f;a++)if(!i(o,u[a],t,r)||!i(u,o[a],t,r))return!1;return!0}(n,t,e,r)}return g(n,t,e,r)}return!1}return t}var q=x(),w=x(function(){return o}),O=x(p()),z=x(p(o));n.circularDeepEqual=O,n.circularShallowEqual=z,n.createCustomEqual=x,n.deepEqual=q,n.sameValueZeroEqual=o,n.shallowEqual=w,Object.defineProperty(n,"__esModule",{value:!0})});
1
+ !function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((n="undefined"!=typeof globalThis?globalThis:n||self)["fast-equals"]={})}(this,(function(n){"use strict";var e="function"==typeof WeakSet,t=Object.keys;function r(n,e){return n===e||n!=n&&e!=e}function o(n){return n.constructor===Object||null==n.constructor}function i(n){return!!n&&"function"==typeof n.then}function u(n){return!(!n||!n.$$typeof)}function f(){var n=[];return{add:function(e){n.push(e)},has:function(e){return-1!==n.indexOf(e)}}}var a=e?function(){return new WeakSet}:f;function c(n){return function(e){var t=n||e;return function(n,e,r,o,i,u,f){void 0===f&&(f=a());var c=!!n&&"object"==typeof n,s=!!e&&"object"==typeof e;if(c||s){var l=c&&f.has(n),p=s&&f.has(e);if(l||p)return l&&p;c&&f.add(n),s&&f.add(e)}return t(n,e,f)}}}var s=Function.prototype.bind.call(Function.prototype.call,Object.prototype.hasOwnProperty);function l(n,e,r,o){var i=t(n),f=i.length;if(t(e).length!==f)return!1;if(f)for(var a=void 0;f-- >0;){if("_owner"===(a=i[f])){var c=u(n),l=u(e);if((c||l)&&c!==l)return!1}if(!s(e,a)||!r(n[a],e[a],a,a,n,e,o))return!1}return!0}var p="function"==typeof Map,d="function"==typeof Set;function y(n){var e="function"==typeof n?n(t):function(n,e,r,o,i,u,f){return t(n,e,f)};function t(n,t,u){if(n===t)return!0;if(n&&t&&"object"==typeof n&&"object"==typeof t){if(o(n)&&o(t))return l(n,t,e,u);var f=Array.isArray(n),a=Array.isArray(t);return f||a?f===a&&function(n,e,t,r){var o=n.length;if(e.length!==o)return!1;for(;o-- >0;)if(!t(n[o],e[o],o,o,n,e,r))return!1;return!0}(n,t,e,u):(f=n instanceof Date,a=t instanceof Date,f||a?f===a&&r(n.getTime(),t.getTime()):(f=n instanceof RegExp,a=t instanceof RegExp,f||a?f===a&&function(n,e){return n.source===e.source&&n.global===e.global&&n.ignoreCase===e.ignoreCase&&n.multiline===e.multiline&&n.unicode===e.unicode&&n.sticky===e.sticky&&n.lastIndex===e.lastIndex}(n,t):i(n)||i(t)?n===t:p&&(f=n instanceof Map,a=t instanceof Map,f||a)?f===a&&function(n,e,t,r){var o=n.size===e.size;if(o&&n.size){var i={},u=0;n.forEach((function(f,a){if(o){var c=!1,s=0;e.forEach((function(o,l){c||i[s]||(c=t(a,l,u,s,n,e,r)&&t(f,o,a,l,n,e,r))&&(i[s]=!0),s++})),u++,o=c}}))}return o}(n,t,e,u):d&&(f=n instanceof Set,a=t instanceof Set,f||a)?f===a&&function(n,e,t,r){var o=n.size===e.size;if(o&&n.size){var i={};n.forEach((function(u,f){if(o){var a=!1,c=0;e.forEach((function(o,s){a||i[c]||(a=t(u,o,f,s,n,e,r))&&(i[c]=!0),c++})),o=a}}))}return o}(n,t,e,u):l(n,t,e,u)))}return n!=n&&t!=t}return t}var v=y(),h=y((function(){return r})),b=y(c()),g=y(c(r));n.circularDeepEqual=b,n.circularShallowEqual=g,n.createCustomEqual=y,n.deepEqual=v,n.sameValueZeroEqual=r,n.shallowEqual=h,Object.defineProperty(n,"__esModule",{value:!0})}));