fast-equals 3.0.0 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # fast-equals CHANGELOG
2
2
 
3
+ ## 3.0.3
4
+
5
+ - Fix [#77](https://github.com/planttheidea/fast-equals/issues/73) - better circular object validation
6
+
7
+ ## 3.0.2
8
+
9
+ - Fix [#73](https://github.com/planttheidea/fast-equals/issues/73) - support comparison of primitive wrappers
10
+ - [#76](https://github.com/planttheidea/fast-equals/pull/76) - improve speed and accuracy of `RegExp` comparison in modern environments
11
+
12
+ ## 3.0.1
13
+
14
+ - Fix [#71](https://github.com/planttheidea/fast-equals/pull/71) - use generic types for better type flow-through
15
+
3
16
  ## 3.0.0
4
17
 
5
18
  ### Breaking changes
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';
5
+ var HAS_WEAK_MAP_SUPPORT = typeof WeakMap === 'function';
6
6
  var keys = Object.keys;
7
7
  /**
8
8
  * are the values passed strictly equal or both NaN
@@ -42,20 +42,38 @@ function isReactElement(value) {
42
42
  return !!(value && value.$$typeof);
43
43
  }
44
44
  /**
45
- * in cases where WeakSet is not supported, creates a new custom
45
+ * in cases where WeakMap is not supported, creates a new custom
46
46
  * object that mimics the necessary API aspects for cache purposes
47
47
  *
48
48
  * @returns the new cache object
49
49
  */
50
50
  function getNewCacheFallback() {
51
- var values = [];
51
+ var entries = [];
52
52
  return {
53
- add: function (value) {
54
- values.push(value);
53
+ delete: function (key) {
54
+ for (var index = 0; index < entries.length; ++index) {
55
+ if (entries[index][0] === key) {
56
+ entries.splice(index, 1);
57
+ return;
58
+ }
59
+ }
55
60
  },
56
- has: function (value) {
57
- return values.indexOf(value) !== -1;
61
+ get: function (key) {
62
+ for (var index = 0; index < entries.length; ++index) {
63
+ if (entries[index][0] === key) {
64
+ return entries[index][1];
65
+ }
66
+ }
58
67
  },
68
+ set: function (key, value) {
69
+ for (var index = 0; index < entries.length; ++index) {
70
+ if (entries[index][0] === key) {
71
+ entries[index][1] = value;
72
+ return;
73
+ }
74
+ }
75
+ entries.push([key, value]);
76
+ }
59
77
  };
60
78
  }
61
79
  /**
@@ -66,11 +84,11 @@ function getNewCacheFallback() {
66
84
  var getNewCache = (function (canUseWeakMap) {
67
85
  if (canUseWeakMap) {
68
86
  return function _getNewCache() {
69
- return new WeakSet();
87
+ return new WeakMap();
70
88
  };
71
89
  }
72
90
  return getNewCacheFallback;
73
- })(HAS_WEAKSET_SUPPORT);
91
+ })(HAS_WEAK_MAP_SUPPORT);
74
92
  /**
75
93
  * create a custom isEqual handler specific to circular objects
76
94
  *
@@ -84,20 +102,22 @@ function createCircularEqualCreator(isEqual) {
84
102
  if (cache === void 0) { cache = getNewCache(); }
85
103
  var isCacheableA = !!a && typeof a === 'object';
86
104
  var isCacheableB = !!b && typeof b === 'object';
87
- if (isCacheableA || isCacheableB) {
88
- var hasA = isCacheableA && cache.has(a);
89
- var hasB = isCacheableB && cache.has(b);
90
- if (hasA || hasB) {
91
- return hasA && hasB;
92
- }
93
- if (isCacheableA) {
94
- cache.add(a);
95
- }
96
- if (isCacheableB) {
97
- cache.add(b);
98
- }
105
+ if (isCacheableA !== isCacheableB) {
106
+ return false;
107
+ }
108
+ if (!isCacheableA && !isCacheableB) {
109
+ return _comparator(a, b, cache);
99
110
  }
100
- return _comparator(a, b, cache);
111
+ var cachedA = cache.get(a);
112
+ if (cachedA && cache.get(b)) {
113
+ return cachedA === b;
114
+ }
115
+ cache.set(a, b);
116
+ cache.set(b, a);
117
+ var result = _comparator(a, b, cache);
118
+ cache.delete(a);
119
+ cache.delete(b);
120
+ return result;
101
121
  };
102
122
  };
103
123
  }
@@ -143,7 +163,8 @@ function areMapsEqual(a, b, isEqual, meta) {
143
163
  b.forEach(function (bValue, bKey) {
144
164
  if (!hasMatch_1 && !matchedIndices_1[matchIndexB_1]) {
145
165
  hasMatch_1 =
146
- isEqual(aKey, bKey, indexA_1, matchIndexB_1, a, b, meta) && isEqual(aValue, bValue, aKey, bKey, a, b, meta);
166
+ isEqual(aKey, bKey, indexA_1, matchIndexB_1, a, b, meta) &&
167
+ isEqual(aValue, bValue, aKey, bKey, a, b, meta);
147
168
  if (hasMatch_1) {
148
169
  matchedIndices_1[matchIndexB_1] = true;
149
170
  }
@@ -186,7 +207,8 @@ function areObjectsEqual(a, b, isEqual, meta) {
186
207
  return false;
187
208
  }
188
209
  }
189
- if (!hasOwnProperty(b, key) || !isEqual(a[key], b[key], key, key, a, b, meta)) {
210
+ if (!hasOwnProperty(b, key) ||
211
+ !isEqual(a[key], b[key], key, key, a, b, meta)) {
190
212
  return false;
191
213
  }
192
214
  }
@@ -200,15 +222,22 @@ function areObjectsEqual(a, b, isEqual, meta) {
200
222
  * @param b the regExp to test agains
201
223
  * @returns are the regExps equal
202
224
  */
203
- function areRegExpsEqual(a, b) {
204
- return (a.source === b.source &&
205
- a.global === b.global &&
206
- a.ignoreCase === b.ignoreCase &&
207
- a.multiline === b.multiline &&
208
- a.unicode === b.unicode &&
209
- a.sticky === b.sticky &&
210
- a.lastIndex === b.lastIndex);
211
- }
225
+ var areRegExpsEqual = (function () {
226
+ if (/foo/g.flags === 'g') {
227
+ return function areRegExpsEqual(a, b) {
228
+ return a.source === b.source && a.flags === b.flags;
229
+ };
230
+ }
231
+ return function areRegExpsEqualFallback(a, b) {
232
+ return (a.source === b.source &&
233
+ a.global === b.global &&
234
+ a.ignoreCase === b.ignoreCase &&
235
+ a.multiline === b.multiline &&
236
+ a.unicode === b.unicode &&
237
+ a.sticky === b.sticky &&
238
+ a.lastIndex === b.lastIndex);
239
+ };
240
+ })();
212
241
  /**
213
242
  * are the sets equal in value
214
243
  *
@@ -244,6 +273,7 @@ function areSetsEqual(a, b, isEqual, meta) {
244
273
 
245
274
  var HAS_MAP_SUPPORT = typeof Map === 'function';
246
275
  var HAS_SET_SUPPORT = typeof Set === 'function';
276
+ var valueOf = Object.prototype.valueOf;
247
277
  function createComparator(createIsEqual) {
248
278
  var isEqual =
249
279
  /* eslint-disable no-use-before-define */
@@ -299,6 +329,9 @@ function createComparator(createIsEqual) {
299
329
  return aShape === bShape && areSetsEqual(a, b, isEqual, meta);
300
330
  }
301
331
  }
332
+ if (a.valueOf !== valueOf || b.valueOf !== valueOf) {
333
+ return sameValueZeroEqual(a.valueOf(), b.valueOf());
334
+ }
302
335
  return areObjectsEqual(a, b, isEqual, meta);
303
336
  }
304
337
  return a !== a && b !== b;
@@ -1 +1 @@
1
- {"version":3,"file":"fast-equals.cjs.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
+ {"version":3,"file":"fast-equals.cjs.js","sources":["../src/utils.ts","../src/comparator.ts","../src/index.ts"],"sourcesContent":["import type { EqualityComparator, InternalEqualityComparator } from './types';\n\ninterface Cache {\n delete: (key: object) => void;\n get: (key: object) => object | undefined;\n set: (key: object, value: object) => void;\n}\n\nconst HAS_WEAK_MAP_SUPPORT = typeof WeakMap === 'function';\n\nconst { keys } = Object;\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 WeakMap 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 entries: [object, object][] = [];\n\n return {\n delete(key: object) {\n for (let index = 0; index < entries.length; ++index) {\n if (entries[index][0] === key) {\n entries.splice(index, 1);\n return;\n }\n }\n },\n\n get(key: object) {\n for (let index = 0; index < entries.length; ++index) {\n if (entries[index][0] === key) {\n return entries[index][1];\n }\n }\n },\n\n set(key: object, value: object) {\n for (let index = 0; index < entries.length; ++index) {\n if (entries[index][0] === key) {\n entries[index][1] = value;\n return;\n }\n }\n\n entries.push([key, value]);\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 WeakMap();\n };\n }\n\n return getNewCacheFallback;\n})(HAS_WEAK_MAP_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(\n comparator: EqualityComparator,\n ): 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 return false;\n }\n\n if (!isCacheableA && !isCacheableB) {\n return _comparator(a, b, cache);\n }\n\n const cachedA = cache.get(a);\n \n if(cachedA && cache.get(b)) {\n return cachedA === b;\n }\n\n cache.set(a, b);\n cache.set(b, a);\n\n const result = _comparator(a, b, cache);\n\n cache.delete(a);\n cache.delete(b);\n\n return result;\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) &&\n 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 (\n !hasOwnProperty(b, key) ||\n !isEqual(a[key], b[key], key, key, a, b, meta)\n ) {\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 const areRegExpsEqual = (() => {\n if (/foo/g.flags === 'g') {\n return function areRegExpsEqual(a: RegExp, b: RegExp) {\n return a.source === b.source && a.flags === b.flags;\n };\n }\n\n return function areRegExpsEqualFallback(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/**\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 areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areRegExpsEqual,\n areSetsEqual,\n isPlainObject,\n isPromiseLike,\n sameValueZeroEqual,\n} from './utils';\n\nimport type { EqualityComparator, InternalEqualityComparator } from './types';\n\nconst HAS_MAP_SUPPORT = typeof Map === 'function';\nconst HAS_SET_SUPPORT = typeof Set === 'function';\n\nconst { valueOf } = Object.prototype;\n\nexport type EqualityComparatorCreator = (\n fn: EqualityComparator,\n) => InternalEqualityComparator;\n\nexport function createComparator(\n createIsEqual?: EqualityComparatorCreator,\n): EqualityComparator {\n const isEqual: InternalEqualityComparator =\n /* eslint-disable no-use-before-define */\n typeof createIsEqual === 'function'\n ? createIsEqual(comparator)\n : (\n a: any,\n b: any,\n indexOrKeyA: any,\n indexOrKeyB: any,\n parentA: any,\n parentB: any,\n meta: any,\n ) => 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 if (a.valueOf !== valueOf || b.valueOf !== valueOf) {\n return sameValueZeroEqual(a.valueOf(), b.valueOf());\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,4 +1,4 @@
1
- var HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';
1
+ var HAS_WEAK_MAP_SUPPORT = typeof WeakMap === 'function';
2
2
  var keys = Object.keys;
3
3
  /**
4
4
  * are the values passed strictly equal or both NaN
@@ -38,20 +38,38 @@ function isReactElement(value) {
38
38
  return !!(value && value.$$typeof);
39
39
  }
40
40
  /**
41
- * in cases where WeakSet is not supported, creates a new custom
41
+ * in cases where WeakMap is not supported, creates a new custom
42
42
  * object that mimics the necessary API aspects for cache purposes
43
43
  *
44
44
  * @returns the new cache object
45
45
  */
46
46
  function getNewCacheFallback() {
47
- var values = [];
47
+ var entries = [];
48
48
  return {
49
- add: function (value) {
50
- values.push(value);
49
+ delete: function (key) {
50
+ for (var index = 0; index < entries.length; ++index) {
51
+ if (entries[index][0] === key) {
52
+ entries.splice(index, 1);
53
+ return;
54
+ }
55
+ }
51
56
  },
52
- has: function (value) {
53
- return values.indexOf(value) !== -1;
57
+ get: function (key) {
58
+ for (var index = 0; index < entries.length; ++index) {
59
+ if (entries[index][0] === key) {
60
+ return entries[index][1];
61
+ }
62
+ }
54
63
  },
64
+ set: function (key, value) {
65
+ for (var index = 0; index < entries.length; ++index) {
66
+ if (entries[index][0] === key) {
67
+ entries[index][1] = value;
68
+ return;
69
+ }
70
+ }
71
+ entries.push([key, value]);
72
+ }
55
73
  };
56
74
  }
57
75
  /**
@@ -62,11 +80,11 @@ function getNewCacheFallback() {
62
80
  var getNewCache = (function (canUseWeakMap) {
63
81
  if (canUseWeakMap) {
64
82
  return function _getNewCache() {
65
- return new WeakSet();
83
+ return new WeakMap();
66
84
  };
67
85
  }
68
86
  return getNewCacheFallback;
69
- })(HAS_WEAKSET_SUPPORT);
87
+ })(HAS_WEAK_MAP_SUPPORT);
70
88
  /**
71
89
  * create a custom isEqual handler specific to circular objects
72
90
  *
@@ -80,20 +98,22 @@ function createCircularEqualCreator(isEqual) {
80
98
  if (cache === void 0) { cache = getNewCache(); }
81
99
  var isCacheableA = !!a && typeof a === 'object';
82
100
  var isCacheableB = !!b && typeof b === 'object';
83
- if (isCacheableA || isCacheableB) {
84
- var hasA = isCacheableA && cache.has(a);
85
- var hasB = isCacheableB && cache.has(b);
86
- if (hasA || hasB) {
87
- return hasA && hasB;
88
- }
89
- if (isCacheableA) {
90
- cache.add(a);
91
- }
92
- if (isCacheableB) {
93
- cache.add(b);
94
- }
101
+ if (isCacheableA !== isCacheableB) {
102
+ return false;
103
+ }
104
+ if (!isCacheableA && !isCacheableB) {
105
+ return _comparator(a, b, cache);
95
106
  }
96
- return _comparator(a, b, cache);
107
+ var cachedA = cache.get(a);
108
+ if (cachedA && cache.get(b)) {
109
+ return cachedA === b;
110
+ }
111
+ cache.set(a, b);
112
+ cache.set(b, a);
113
+ var result = _comparator(a, b, cache);
114
+ cache.delete(a);
115
+ cache.delete(b);
116
+ return result;
97
117
  };
98
118
  };
99
119
  }
@@ -139,7 +159,8 @@ function areMapsEqual(a, b, isEqual, meta) {
139
159
  b.forEach(function (bValue, bKey) {
140
160
  if (!hasMatch_1 && !matchedIndices_1[matchIndexB_1]) {
141
161
  hasMatch_1 =
142
- isEqual(aKey, bKey, indexA_1, matchIndexB_1, a, b, meta) && isEqual(aValue, bValue, aKey, bKey, a, b, meta);
162
+ isEqual(aKey, bKey, indexA_1, matchIndexB_1, a, b, meta) &&
163
+ isEqual(aValue, bValue, aKey, bKey, a, b, meta);
143
164
  if (hasMatch_1) {
144
165
  matchedIndices_1[matchIndexB_1] = true;
145
166
  }
@@ -182,7 +203,8 @@ function areObjectsEqual(a, b, isEqual, meta) {
182
203
  return false;
183
204
  }
184
205
  }
185
- if (!hasOwnProperty(b, key) || !isEqual(a[key], b[key], key, key, a, b, meta)) {
206
+ if (!hasOwnProperty(b, key) ||
207
+ !isEqual(a[key], b[key], key, key, a, b, meta)) {
186
208
  return false;
187
209
  }
188
210
  }
@@ -196,15 +218,22 @@ function areObjectsEqual(a, b, isEqual, meta) {
196
218
  * @param b the regExp to test agains
197
219
  * @returns are the regExps equal
198
220
  */
199
- function areRegExpsEqual(a, b) {
200
- return (a.source === b.source &&
201
- a.global === b.global &&
202
- a.ignoreCase === b.ignoreCase &&
203
- a.multiline === b.multiline &&
204
- a.unicode === b.unicode &&
205
- a.sticky === b.sticky &&
206
- a.lastIndex === b.lastIndex);
207
- }
221
+ var areRegExpsEqual = (function () {
222
+ if (/foo/g.flags === 'g') {
223
+ return function areRegExpsEqual(a, b) {
224
+ return a.source === b.source && a.flags === b.flags;
225
+ };
226
+ }
227
+ return function areRegExpsEqualFallback(a, b) {
228
+ return (a.source === b.source &&
229
+ a.global === b.global &&
230
+ a.ignoreCase === b.ignoreCase &&
231
+ a.multiline === b.multiline &&
232
+ a.unicode === b.unicode &&
233
+ a.sticky === b.sticky &&
234
+ a.lastIndex === b.lastIndex);
235
+ };
236
+ })();
208
237
  /**
209
238
  * are the sets equal in value
210
239
  *
@@ -240,6 +269,7 @@ function areSetsEqual(a, b, isEqual, meta) {
240
269
 
241
270
  var HAS_MAP_SUPPORT = typeof Map === 'function';
242
271
  var HAS_SET_SUPPORT = typeof Set === 'function';
272
+ var valueOf = Object.prototype.valueOf;
243
273
  function createComparator(createIsEqual) {
244
274
  var isEqual =
245
275
  /* eslint-disable no-use-before-define */
@@ -295,6 +325,9 @@ function createComparator(createIsEqual) {
295
325
  return aShape === bShape && areSetsEqual(a, b, isEqual, meta);
296
326
  }
297
327
  }
328
+ if (a.valueOf !== valueOf || b.valueOf !== valueOf) {
329
+ return sameValueZeroEqual(a.valueOf(), b.valueOf());
330
+ }
298
331
  return areObjectsEqual(a, b, isEqual, meta);
299
332
  }
300
333
  return a !== a && b !== b;
@@ -1 +1 @@
1
- {"version":3,"file":"fast-equals.esm.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
+ {"version":3,"file":"fast-equals.esm.js","sources":["../src/utils.ts","../src/comparator.ts","../src/index.ts"],"sourcesContent":["import type { EqualityComparator, InternalEqualityComparator } from './types';\n\ninterface Cache {\n delete: (key: object) => void;\n get: (key: object) => object | undefined;\n set: (key: object, value: object) => void;\n}\n\nconst HAS_WEAK_MAP_SUPPORT = typeof WeakMap === 'function';\n\nconst { keys } = Object;\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 WeakMap 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 entries: [object, object][] = [];\n\n return {\n delete(key: object) {\n for (let index = 0; index < entries.length; ++index) {\n if (entries[index][0] === key) {\n entries.splice(index, 1);\n return;\n }\n }\n },\n\n get(key: object) {\n for (let index = 0; index < entries.length; ++index) {\n if (entries[index][0] === key) {\n return entries[index][1];\n }\n }\n },\n\n set(key: object, value: object) {\n for (let index = 0; index < entries.length; ++index) {\n if (entries[index][0] === key) {\n entries[index][1] = value;\n return;\n }\n }\n\n entries.push([key, value]);\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 WeakMap();\n };\n }\n\n return getNewCacheFallback;\n})(HAS_WEAK_MAP_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(\n comparator: EqualityComparator,\n ): 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 return false;\n }\n\n if (!isCacheableA && !isCacheableB) {\n return _comparator(a, b, cache);\n }\n\n const cachedA = cache.get(a);\n \n if(cachedA && cache.get(b)) {\n return cachedA === b;\n }\n\n cache.set(a, b);\n cache.set(b, a);\n\n const result = _comparator(a, b, cache);\n\n cache.delete(a);\n cache.delete(b);\n\n return result;\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) &&\n 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 (\n !hasOwnProperty(b, key) ||\n !isEqual(a[key], b[key], key, key, a, b, meta)\n ) {\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 const areRegExpsEqual = (() => {\n if (/foo/g.flags === 'g') {\n return function areRegExpsEqual(a: RegExp, b: RegExp) {\n return a.source === b.source && a.flags === b.flags;\n };\n }\n\n return function areRegExpsEqualFallback(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/**\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 areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areRegExpsEqual,\n areSetsEqual,\n isPlainObject,\n isPromiseLike,\n sameValueZeroEqual,\n} from './utils';\n\nimport type { EqualityComparator, InternalEqualityComparator } from './types';\n\nconst HAS_MAP_SUPPORT = typeof Map === 'function';\nconst HAS_SET_SUPPORT = typeof Set === 'function';\n\nconst { valueOf } = Object.prototype;\n\nexport type EqualityComparatorCreator = (\n fn: EqualityComparator,\n) => InternalEqualityComparator;\n\nexport function createComparator(\n createIsEqual?: EqualityComparatorCreator,\n): EqualityComparator {\n const isEqual: InternalEqualityComparator =\n /* eslint-disable no-use-before-define */\n typeof createIsEqual === 'function'\n ? createIsEqual(comparator)\n : (\n a: any,\n b: any,\n indexOrKeyA: any,\n indexOrKeyB: any,\n parentA: any,\n parentB: any,\n meta: any,\n ) => 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 if (a.valueOf !== valueOf || b.valueOf !== valueOf) {\n return sameValueZeroEqual(a.valueOf(), b.valueOf());\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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"}
@@ -4,7 +4,7 @@
4
4
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["fast-equals"] = {}));
5
5
  })(this, (function (exports) { 'use strict';
6
6
 
7
- var HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';
7
+ var HAS_WEAK_MAP_SUPPORT = typeof WeakMap === 'function';
8
8
  var keys = Object.keys;
9
9
  /**
10
10
  * are the values passed strictly equal or both NaN
@@ -44,20 +44,38 @@
44
44
  return !!(value && value.$$typeof);
45
45
  }
46
46
  /**
47
- * in cases where WeakSet is not supported, creates a new custom
47
+ * in cases where WeakMap is not supported, creates a new custom
48
48
  * object that mimics the necessary API aspects for cache purposes
49
49
  *
50
50
  * @returns the new cache object
51
51
  */
52
52
  function getNewCacheFallback() {
53
- var values = [];
53
+ var entries = [];
54
54
  return {
55
- add: function (value) {
56
- values.push(value);
55
+ delete: function (key) {
56
+ for (var index = 0; index < entries.length; ++index) {
57
+ if (entries[index][0] === key) {
58
+ entries.splice(index, 1);
59
+ return;
60
+ }
61
+ }
57
62
  },
58
- has: function (value) {
59
- return values.indexOf(value) !== -1;
63
+ get: function (key) {
64
+ for (var index = 0; index < entries.length; ++index) {
65
+ if (entries[index][0] === key) {
66
+ return entries[index][1];
67
+ }
68
+ }
60
69
  },
70
+ set: function (key, value) {
71
+ for (var index = 0; index < entries.length; ++index) {
72
+ if (entries[index][0] === key) {
73
+ entries[index][1] = value;
74
+ return;
75
+ }
76
+ }
77
+ entries.push([key, value]);
78
+ }
61
79
  };
62
80
  }
63
81
  /**
@@ -68,11 +86,11 @@
68
86
  var getNewCache = (function (canUseWeakMap) {
69
87
  if (canUseWeakMap) {
70
88
  return function _getNewCache() {
71
- return new WeakSet();
89
+ return new WeakMap();
72
90
  };
73
91
  }
74
92
  return getNewCacheFallback;
75
- })(HAS_WEAKSET_SUPPORT);
93
+ })(HAS_WEAK_MAP_SUPPORT);
76
94
  /**
77
95
  * create a custom isEqual handler specific to circular objects
78
96
  *
@@ -86,20 +104,22 @@
86
104
  if (cache === void 0) { cache = getNewCache(); }
87
105
  var isCacheableA = !!a && typeof a === 'object';
88
106
  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
- }
107
+ if (isCacheableA !== isCacheableB) {
108
+ return false;
109
+ }
110
+ if (!isCacheableA && !isCacheableB) {
111
+ return _comparator(a, b, cache);
101
112
  }
102
- return _comparator(a, b, cache);
113
+ var cachedA = cache.get(a);
114
+ if (cachedA && cache.get(b)) {
115
+ return cachedA === b;
116
+ }
117
+ cache.set(a, b);
118
+ cache.set(b, a);
119
+ var result = _comparator(a, b, cache);
120
+ cache.delete(a);
121
+ cache.delete(b);
122
+ return result;
103
123
  };
104
124
  };
105
125
  }
@@ -145,7 +165,8 @@
145
165
  b.forEach(function (bValue, bKey) {
146
166
  if (!hasMatch_1 && !matchedIndices_1[matchIndexB_1]) {
147
167
  hasMatch_1 =
148
- isEqual(aKey, bKey, indexA_1, matchIndexB_1, a, b, meta) && isEqual(aValue, bValue, aKey, bKey, a, b, meta);
168
+ isEqual(aKey, bKey, indexA_1, matchIndexB_1, a, b, meta) &&
169
+ isEqual(aValue, bValue, aKey, bKey, a, b, meta);
149
170
  if (hasMatch_1) {
150
171
  matchedIndices_1[matchIndexB_1] = true;
151
172
  }
@@ -188,7 +209,8 @@
188
209
  return false;
189
210
  }
190
211
  }
191
- if (!hasOwnProperty(b, key) || !isEqual(a[key], b[key], key, key, a, b, meta)) {
212
+ if (!hasOwnProperty(b, key) ||
213
+ !isEqual(a[key], b[key], key, key, a, b, meta)) {
192
214
  return false;
193
215
  }
194
216
  }
@@ -202,15 +224,22 @@
202
224
  * @param b the regExp to test agains
203
225
  * @returns are the regExps equal
204
226
  */
205
- function areRegExpsEqual(a, b) {
206
- return (a.source === b.source &&
207
- a.global === b.global &&
208
- a.ignoreCase === b.ignoreCase &&
209
- a.multiline === b.multiline &&
210
- a.unicode === b.unicode &&
211
- a.sticky === b.sticky &&
212
- a.lastIndex === b.lastIndex);
213
- }
227
+ var areRegExpsEqual = (function () {
228
+ if (/foo/g.flags === 'g') {
229
+ return function areRegExpsEqual(a, b) {
230
+ return a.source === b.source && a.flags === b.flags;
231
+ };
232
+ }
233
+ return function areRegExpsEqualFallback(a, b) {
234
+ return (a.source === b.source &&
235
+ a.global === b.global &&
236
+ a.ignoreCase === b.ignoreCase &&
237
+ a.multiline === b.multiline &&
238
+ a.unicode === b.unicode &&
239
+ a.sticky === b.sticky &&
240
+ a.lastIndex === b.lastIndex);
241
+ };
242
+ })();
214
243
  /**
215
244
  * are the sets equal in value
216
245
  *
@@ -246,6 +275,7 @@
246
275
 
247
276
  var HAS_MAP_SUPPORT = typeof Map === 'function';
248
277
  var HAS_SET_SUPPORT = typeof Set === 'function';
278
+ var valueOf = Object.prototype.valueOf;
249
279
  function createComparator(createIsEqual) {
250
280
  var isEqual =
251
281
  /* eslint-disable no-use-before-define */
@@ -301,6 +331,9 @@
301
331
  return aShape === bShape && areSetsEqual(a, b, isEqual, meta);
302
332
  }
303
333
  }
334
+ if (a.valueOf !== valueOf || b.valueOf !== valueOf) {
335
+ return sameValueZeroEqual(a.valueOf(), b.valueOf());
336
+ }
304
337
  return areObjectsEqual(a, b, isEqual, meta);
305
338
  }
306
339
  return a !== a && b !== b;
@@ -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\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
+ {"version":3,"file":"fast-equals.js","sources":["../src/utils.ts","../src/comparator.ts","../src/index.ts"],"sourcesContent":["import type { EqualityComparator, InternalEqualityComparator } from './types';\n\ninterface Cache {\n delete: (key: object) => void;\n get: (key: object) => object | undefined;\n set: (key: object, value: object) => void;\n}\n\nconst HAS_WEAK_MAP_SUPPORT = typeof WeakMap === 'function';\n\nconst { keys } = Object;\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 WeakMap 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 entries: [object, object][] = [];\n\n return {\n delete(key: object) {\n for (let index = 0; index < entries.length; ++index) {\n if (entries[index][0] === key) {\n entries.splice(index, 1);\n return;\n }\n }\n },\n\n get(key: object) {\n for (let index = 0; index < entries.length; ++index) {\n if (entries[index][0] === key) {\n return entries[index][1];\n }\n }\n },\n\n set(key: object, value: object) {\n for (let index = 0; index < entries.length; ++index) {\n if (entries[index][0] === key) {\n entries[index][1] = value;\n return;\n }\n }\n\n entries.push([key, value]);\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 WeakMap();\n };\n }\n\n return getNewCacheFallback;\n})(HAS_WEAK_MAP_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(\n comparator: EqualityComparator,\n ): 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 return false;\n }\n\n if (!isCacheableA && !isCacheableB) {\n return _comparator(a, b, cache);\n }\n\n const cachedA = cache.get(a);\n \n if(cachedA && cache.get(b)) {\n return cachedA === b;\n }\n\n cache.set(a, b);\n cache.set(b, a);\n\n const result = _comparator(a, b, cache);\n\n cache.delete(a);\n cache.delete(b);\n\n return result;\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) &&\n 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 (\n !hasOwnProperty(b, key) ||\n !isEqual(a[key], b[key], key, key, a, b, meta)\n ) {\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 const areRegExpsEqual = (() => {\n if (/foo/g.flags === 'g') {\n return function areRegExpsEqual(a: RegExp, b: RegExp) {\n return a.source === b.source && a.flags === b.flags;\n };\n }\n\n return function areRegExpsEqualFallback(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/**\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 areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areRegExpsEqual,\n areSetsEqual,\n isPlainObject,\n isPromiseLike,\n sameValueZeroEqual,\n} from './utils';\n\nimport type { EqualityComparator, InternalEqualityComparator } from './types';\n\nconst HAS_MAP_SUPPORT = typeof Map === 'function';\nconst HAS_SET_SUPPORT = typeof Set === 'function';\n\nconst { valueOf } = Object.prototype;\n\nexport type EqualityComparatorCreator = (\n fn: EqualityComparator,\n) => InternalEqualityComparator;\n\nexport function createComparator(\n createIsEqual?: EqualityComparatorCreator,\n): EqualityComparator {\n const isEqual: InternalEqualityComparator =\n /* eslint-disable no-use-before-define */\n typeof createIsEqual === 'function'\n ? createIsEqual(comparator)\n : (\n a: any,\n b: any,\n indexOrKeyA: any,\n indexOrKeyB: any,\n parentA: any,\n parentB: any,\n meta: any,\n ) => 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 if (a.valueOf !== valueOf || b.valueOf !== valueOf) {\n return sameValueZeroEqual(a.valueOf(), b.valueOf());\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="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})}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["fast-equals"]={})}(this,(function(e){"use strict";var t="function"==typeof WeakMap,n=Object.keys;function r(e,t){return e===t||e!=e&&t!=t}function o(e){return e.constructor===Object||null==e.constructor}function u(e){return!!e&&"function"==typeof e.then}function f(e){return!(!e||!e.$$typeof)}function i(){var e=[];return{delete:function(t){for(var n=0;n<e.length;++n)if(e[n][0]===t)return void e.splice(n,1)},get:function(t){for(var n=0;n<e.length;++n)if(e[n][0]===t)return e[n][1]},set:function(t,n){for(var r=0;r<e.length;++r)if(e[r][0]===t)return void(e[r][1]=n);e.push([t,n])}}}var a=t?function(){return new WeakMap}:i;function c(e){return function(t){var n=e||t;return function(e,t,r,o,u,f,i){void 0===i&&(i=a());var c=!!e&&"object"==typeof e,l=!!t&&"object"==typeof t;if(c!==l)return!1;if(!c&&!l)return n(e,t,i);var s=i.get(e);if(s&&i.get(t))return s===t;i.set(e,t),i.set(t,e);var p=n(e,t,i);return i.delete(e),i.delete(t),p}}}var l=Function.prototype.bind.call(Function.prototype.call,Object.prototype.hasOwnProperty);function s(e,t,r,o){var u=n(e),i=u.length;if(n(t).length!==i)return!1;if(i)for(var a=void 0;i-- >0;){if("_owner"===(a=u[i])){var c=f(e),s=f(t);if((c||s)&&c!==s)return!1}if(!l(t,a)||!r(e[a],t[a],a,a,e,t,o))return!1}return!0}var p="g"===/foo/g.flags?function(e,t){return e.source===t.source&&e.flags===t.flags}:function(e,t){return e.source===t.source&&e.global===t.global&&e.ignoreCase===t.ignoreCase&&e.multiline===t.multiline&&e.unicode===t.unicode&&e.sticky===t.sticky&&e.lastIndex===t.lastIndex};var v="function"==typeof Map,y="function"==typeof Set,g=Object.prototype.valueOf;function d(e){var t="function"==typeof e?e(n):function(e,t,r,o,u,f,i){return n(e,t,i)};function n(e,n,f){if(e===n)return!0;if(e&&n&&"object"==typeof e&&"object"==typeof n){if(o(e)&&o(n))return s(e,n,t,f);var i=Array.isArray(e),a=Array.isArray(n);return i||a?i===a&&function(e,t,n,r){var o=e.length;if(t.length!==o)return!1;for(;o-- >0;)if(!n(e[o],t[o],o,o,e,t,r))return!1;return!0}(e,n,t,f):(i=e instanceof Date,a=n instanceof Date,i||a?i===a&&r(e.getTime(),n.getTime()):(i=e instanceof RegExp,a=n instanceof RegExp,i||a?i===a&&p(e,n):u(e)||u(n)?e===n:v&&(i=e instanceof Map,a=n instanceof Map,i||a)?i===a&&function(e,t,n,r){var o=e.size===t.size;if(o&&e.size){var u={},f=0;e.forEach((function(i,a){if(o){var c=!1,l=0;t.forEach((function(o,s){c||u[l]||(c=n(a,s,f,l,e,t,r)&&n(i,o,a,s,e,t,r))&&(u[l]=!0),l++})),f++,o=c}}))}return o}(e,n,t,f):y&&(i=e instanceof Set,a=n instanceof Set,i||a)?i===a&&function(e,t,n,r){var o=e.size===t.size;if(o&&e.size){var u={};e.forEach((function(f,i){if(o){var a=!1,c=0;t.forEach((function(o,l){a||u[c]||(a=n(f,o,i,l,e,t,r))&&(u[c]=!0),c++})),o=a}}))}return o}(e,n,t,f):e.valueOf!==g||n.valueOf!==g?r(e.valueOf(),n.valueOf()):s(e,n,t,f)))}return e!=e&&n!=n}return n}var h=d(),b=d((function(){return r})),E=d(c()),O=d(c(r));e.circularDeepEqual=E,e.circularShallowEqual=O,e.createCustomEqual=d,e.deepEqual=h,e.sameValueZeroEqual=r,e.shallowEqual=b,Object.defineProperty(e,"__esModule",{value:!0})}));
@@ -1,4 +1,4 @@
1
- var HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';
1
+ var HAS_WEAK_MAP_SUPPORT = typeof WeakMap === 'function';
2
2
  var keys = Object.keys;
3
3
  /**
4
4
  * are the values passed strictly equal or both NaN
@@ -38,20 +38,38 @@ function isReactElement(value) {
38
38
  return !!(value && value.$$typeof);
39
39
  }
40
40
  /**
41
- * in cases where WeakSet is not supported, creates a new custom
41
+ * in cases where WeakMap is not supported, creates a new custom
42
42
  * object that mimics the necessary API aspects for cache purposes
43
43
  *
44
44
  * @returns the new cache object
45
45
  */
46
46
  function getNewCacheFallback() {
47
- var values = [];
47
+ var entries = [];
48
48
  return {
49
- add: function (value) {
50
- values.push(value);
49
+ delete: function (key) {
50
+ for (var index = 0; index < entries.length; ++index) {
51
+ if (entries[index][0] === key) {
52
+ entries.splice(index, 1);
53
+ return;
54
+ }
55
+ }
51
56
  },
52
- has: function (value) {
53
- return values.indexOf(value) !== -1;
57
+ get: function (key) {
58
+ for (var index = 0; index < entries.length; ++index) {
59
+ if (entries[index][0] === key) {
60
+ return entries[index][1];
61
+ }
62
+ }
54
63
  },
64
+ set: function (key, value) {
65
+ for (var index = 0; index < entries.length; ++index) {
66
+ if (entries[index][0] === key) {
67
+ entries[index][1] = value;
68
+ return;
69
+ }
70
+ }
71
+ entries.push([key, value]);
72
+ }
55
73
  };
56
74
  }
57
75
  /**
@@ -62,11 +80,11 @@ function getNewCacheFallback() {
62
80
  var getNewCache = (function (canUseWeakMap) {
63
81
  if (canUseWeakMap) {
64
82
  return function _getNewCache() {
65
- return new WeakSet();
83
+ return new WeakMap();
66
84
  };
67
85
  }
68
86
  return getNewCacheFallback;
69
- })(HAS_WEAKSET_SUPPORT);
87
+ })(HAS_WEAK_MAP_SUPPORT);
70
88
  /**
71
89
  * create a custom isEqual handler specific to circular objects
72
90
  *
@@ -80,20 +98,22 @@ function createCircularEqualCreator(isEqual) {
80
98
  if (cache === void 0) { cache = getNewCache(); }
81
99
  var isCacheableA = !!a && typeof a === 'object';
82
100
  var isCacheableB = !!b && typeof b === 'object';
83
- if (isCacheableA || isCacheableB) {
84
- var hasA = isCacheableA && cache.has(a);
85
- var hasB = isCacheableB && cache.has(b);
86
- if (hasA || hasB) {
87
- return hasA && hasB;
88
- }
89
- if (isCacheableA) {
90
- cache.add(a);
91
- }
92
- if (isCacheableB) {
93
- cache.add(b);
94
- }
101
+ if (isCacheableA !== isCacheableB) {
102
+ return false;
103
+ }
104
+ if (!isCacheableA && !isCacheableB) {
105
+ return _comparator(a, b, cache);
95
106
  }
96
- return _comparator(a, b, cache);
107
+ var cachedA = cache.get(a);
108
+ if (cachedA && cache.get(b)) {
109
+ return cachedA === b;
110
+ }
111
+ cache.set(a, b);
112
+ cache.set(b, a);
113
+ var result = _comparator(a, b, cache);
114
+ cache.delete(a);
115
+ cache.delete(b);
116
+ return result;
97
117
  };
98
118
  };
99
119
  }
@@ -139,7 +159,8 @@ function areMapsEqual(a, b, isEqual, meta) {
139
159
  b.forEach(function (bValue, bKey) {
140
160
  if (!hasMatch_1 && !matchedIndices_1[matchIndexB_1]) {
141
161
  hasMatch_1 =
142
- isEqual(aKey, bKey, indexA_1, matchIndexB_1, a, b, meta) && isEqual(aValue, bValue, aKey, bKey, a, b, meta);
162
+ isEqual(aKey, bKey, indexA_1, matchIndexB_1, a, b, meta) &&
163
+ isEqual(aValue, bValue, aKey, bKey, a, b, meta);
143
164
  if (hasMatch_1) {
144
165
  matchedIndices_1[matchIndexB_1] = true;
145
166
  }
@@ -182,7 +203,8 @@ function areObjectsEqual(a, b, isEqual, meta) {
182
203
  return false;
183
204
  }
184
205
  }
185
- if (!hasOwnProperty(b, key) || !isEqual(a[key], b[key], key, key, a, b, meta)) {
206
+ if (!hasOwnProperty(b, key) ||
207
+ !isEqual(a[key], b[key], key, key, a, b, meta)) {
186
208
  return false;
187
209
  }
188
210
  }
@@ -196,15 +218,22 @@ function areObjectsEqual(a, b, isEqual, meta) {
196
218
  * @param b the regExp to test agains
197
219
  * @returns are the regExps equal
198
220
  */
199
- function areRegExpsEqual(a, b) {
200
- return (a.source === b.source &&
201
- a.global === b.global &&
202
- a.ignoreCase === b.ignoreCase &&
203
- a.multiline === b.multiline &&
204
- a.unicode === b.unicode &&
205
- a.sticky === b.sticky &&
206
- a.lastIndex === b.lastIndex);
207
- }
221
+ var areRegExpsEqual = (function () {
222
+ if (/foo/g.flags === 'g') {
223
+ return function areRegExpsEqual(a, b) {
224
+ return a.source === b.source && a.flags === b.flags;
225
+ };
226
+ }
227
+ return function areRegExpsEqualFallback(a, b) {
228
+ return (a.source === b.source &&
229
+ a.global === b.global &&
230
+ a.ignoreCase === b.ignoreCase &&
231
+ a.multiline === b.multiline &&
232
+ a.unicode === b.unicode &&
233
+ a.sticky === b.sticky &&
234
+ a.lastIndex === b.lastIndex);
235
+ };
236
+ })();
208
237
  /**
209
238
  * are the sets equal in value
210
239
  *
@@ -240,6 +269,7 @@ function areSetsEqual(a, b, isEqual, meta) {
240
269
 
241
270
  var HAS_MAP_SUPPORT = typeof Map === 'function';
242
271
  var HAS_SET_SUPPORT = typeof Set === 'function';
272
+ var valueOf = Object.prototype.valueOf;
243
273
  function createComparator(createIsEqual) {
244
274
  var isEqual =
245
275
  /* eslint-disable no-use-before-define */
@@ -295,6 +325,9 @@ function createComparator(createIsEqual) {
295
325
  return aShape === bShape && areSetsEqual(a, b, isEqual, meta);
296
326
  }
297
327
  }
328
+ if (a.valueOf !== valueOf || b.valueOf !== valueOf) {
329
+ return sameValueZeroEqual(a.valueOf(), b.valueOf());
330
+ }
298
331
  return areObjectsEqual(a, b, isEqual, meta);
299
332
  }
300
333
  return a !== a && b !== b;
@@ -1 +1 @@
1
- {"version":3,"file":"fast-equals.mjs","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
+ {"version":3,"file":"fast-equals.mjs","sources":["../src/utils.ts","../src/comparator.ts","../src/index.ts"],"sourcesContent":["import type { EqualityComparator, InternalEqualityComparator } from './types';\n\ninterface Cache {\n delete: (key: object) => void;\n get: (key: object) => object | undefined;\n set: (key: object, value: object) => void;\n}\n\nconst HAS_WEAK_MAP_SUPPORT = typeof WeakMap === 'function';\n\nconst { keys } = Object;\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 WeakMap 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 entries: [object, object][] = [];\n\n return {\n delete(key: object) {\n for (let index = 0; index < entries.length; ++index) {\n if (entries[index][0] === key) {\n entries.splice(index, 1);\n return;\n }\n }\n },\n\n get(key: object) {\n for (let index = 0; index < entries.length; ++index) {\n if (entries[index][0] === key) {\n return entries[index][1];\n }\n }\n },\n\n set(key: object, value: object) {\n for (let index = 0; index < entries.length; ++index) {\n if (entries[index][0] === key) {\n entries[index][1] = value;\n return;\n }\n }\n\n entries.push([key, value]);\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 WeakMap();\n };\n }\n\n return getNewCacheFallback;\n})(HAS_WEAK_MAP_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(\n comparator: EqualityComparator,\n ): 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 return false;\n }\n\n if (!isCacheableA && !isCacheableB) {\n return _comparator(a, b, cache);\n }\n\n const cachedA = cache.get(a);\n \n if(cachedA && cache.get(b)) {\n return cachedA === b;\n }\n\n cache.set(a, b);\n cache.set(b, a);\n\n const result = _comparator(a, b, cache);\n\n cache.delete(a);\n cache.delete(b);\n\n return result;\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) &&\n 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 (\n !hasOwnProperty(b, key) ||\n !isEqual(a[key], b[key], key, key, a, b, meta)\n ) {\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 const areRegExpsEqual = (() => {\n if (/foo/g.flags === 'g') {\n return function areRegExpsEqual(a: RegExp, b: RegExp) {\n return a.source === b.source && a.flags === b.flags;\n };\n }\n\n return function areRegExpsEqualFallback(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/**\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 areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areRegExpsEqual,\n areSetsEqual,\n isPlainObject,\n isPromiseLike,\n sameValueZeroEqual,\n} from './utils';\n\nimport type { EqualityComparator, InternalEqualityComparator } from './types';\n\nconst HAS_MAP_SUPPORT = typeof Map === 'function';\nconst HAS_SET_SUPPORT = typeof Set === 'function';\n\nconst { valueOf } = Object.prototype;\n\nexport type EqualityComparatorCreator = (\n fn: EqualityComparator,\n) => InternalEqualityComparator;\n\nexport function createComparator(\n createIsEqual?: EqualityComparatorCreator,\n): EqualityComparator {\n const isEqual: InternalEqualityComparator =\n /* eslint-disable no-use-before-define */\n typeof createIsEqual === 'function'\n ? createIsEqual(comparator)\n : (\n a: any,\n b: any,\n indexOrKeyA: any,\n indexOrKeyB: any,\n parentA: any,\n parentB: any,\n meta: any,\n ) => 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 if (a.valueOf !== valueOf || b.valueOf !== valueOf) {\n return sameValueZeroEqual(a.valueOf(), b.valueOf());\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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"}
package/index.d.ts CHANGED
@@ -19,11 +19,8 @@ declare type EqualityComparatorCreator = (
19
19
  export declare function createCustomEqual(
20
20
  createIsEqual?: EqualityComparatorCreator,
21
21
  ): EqualityComparator;
22
- export declare function circularDeepEqual(objectA: any, objectB: any): boolean;
23
- export declare function circularShallowEqual(
24
- objectA: any,
25
- objectB: any,
26
- ): boolean;
27
- export declare function deepEqual(objectA: any, objectB: any): boolean;
28
- export declare function shallowEqual(objectA: any, objectB: any): boolean;
29
- export declare function sameValueZeroEqual(objectA: any, objectB: any): boolean;
22
+ export declare function circularDeepEqual<A, B>(objectA: A, objectB: B): boolean;
23
+ export declare function circularShallowEqual<A, B>(objectA: A, objectB: B): boolean;
24
+ export declare function deepEqual<A, B>(objectA: A, objectB: B): boolean;
25
+ export declare function shallowEqual<A, B>(objectA: A, objectB: B): boolean;
26
+ export declare function sameValueZeroEqual<A, B>(objectA: A, objectB: B): boolean;
package/package.json CHANGED
@@ -83,5 +83,5 @@
83
83
  },
84
84
  "sideEffects": false,
85
85
  "types": "index.d.ts",
86
- "version": "3.0.0"
86
+ "version": "3.0.3"
87
87
  }