fast-equals 3.0.2 → 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 +4 -0
- package/dist/fast-equals.cjs.js +58 -31
- package/dist/fast-equals.cjs.js.map +1 -1
- package/dist/fast-equals.esm.js +58 -31
- package/dist/fast-equals.esm.js.map +1 -1
- package/dist/fast-equals.js +58 -31
- package/dist/fast-equals.js.map +1 -1
- package/dist/fast-equals.min.js +1 -1
- package/dist/fast-equals.mjs +58 -31
- package/dist/fast-equals.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
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
|
+
|
|
3
7
|
## 3.0.2
|
|
4
8
|
|
|
5
9
|
- Fix [#73](https://github.com/planttheidea/fast-equals/issues/73) - support comparison of primitive wrappers
|
package/dist/fast-equals.cjs.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
+
var HAS_WEAK_MAP_SUPPORT = typeof WeakMap === 'function';
|
|
5
6
|
var keys = Object.keys;
|
|
6
|
-
var HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';
|
|
7
7
|
/**
|
|
8
8
|
* are the values passed strictly equal or both NaN
|
|
9
9
|
*
|
|
@@ -42,20 +42,38 @@ function isReactElement(value) {
|
|
|
42
42
|
return !!(value && value.$$typeof);
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
|
-
* in cases where
|
|
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
|
|
51
|
+
var entries = [];
|
|
52
52
|
return {
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
57
|
-
|
|
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
|
|
87
|
+
return new WeakMap();
|
|
70
88
|
};
|
|
71
89
|
}
|
|
72
90
|
return getNewCacheFallback;
|
|
73
|
-
})(
|
|
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
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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);
|
|
110
|
+
}
|
|
111
|
+
var cachedA = cache.get(a);
|
|
112
|
+
if (cachedA && cache.get(b)) {
|
|
113
|
+
return cachedA === b;
|
|
99
114
|
}
|
|
100
|
-
|
|
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
|
}
|
|
@@ -202,15 +222,22 @@ function areObjectsEqual(a, b, isEqual, meta) {
|
|
|
202
222
|
* @param b the regExp to test agains
|
|
203
223
|
* @returns are the regExps equal
|
|
204
224
|
*/
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
a
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
a.
|
|
213
|
-
|
|
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
|
+
})();
|
|
214
241
|
/**
|
|
215
242
|
* are the sets equal in value
|
|
216
243
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fast-equals.cjs.js","sources":["../src/utils.ts","../src/comparator.ts","../src/index.ts"],"sourcesContent":["import type {\n EqualityComparator,\n InternalEqualityComparator,\n Primitive,\n} from './types';\n\nconst { keys } = Object;\nconst { toString, valueOf } = Object.prototype;\n\nconst HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';\n\ntype Cache = {\n add: (value: any) => void;\n has: (value: any) => boolean;\n};\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\nfunction strictEqual(a: any, b: any) {\n return a === 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(\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 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) &&\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 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 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":";;;;AAMQ,IAAA,IAAI,GAAK,MAAM,KAAX,CAAY;AAGxB,IAAM,mBAAmB,GAAG,OAAO,OAAO,KAAK,UAAU,CAAC;AAO1D;;;;;;;SAOgB,kBAAkB,CAAC,CAAM,EAAE,CAAM;IAC/C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC;AAMD;;;;;;SAMgB,aAAa,CAAC,KAAU;IACtC,OAAO,KAAK,CAAC,WAAW,KAAK,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC;AACnE,CAAC;AAED;;;;;;SAMgB,aAAa,CAAC,KAAU;IACtC,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AACrD,CAAC;AAED;;;;;;SAMgB,cAAc,CAAC,KAAU;IACvC,OAAO,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;SAMgB,mBAAmB;IACjC,IAAM,MAAM,GAAU,EAAE,CAAC;IAEzB,OAAO;QACL,GAAG,EAAH,UAAI,KAAU;YACZ,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACpB;QAED,GAAG,EAAH,UAAI,KAAU;YACZ,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;SACrC;KACF,CAAC;AACJ,CAAC;AAED;;;;;AAKO,IAAM,WAAW,GAAG,CAAC,UAAC,aAAsB;IACjD,IAAI,aAAa,EAAE;QACjB,OAAO,SAAS,YAAY;YAC1B,OAAO,IAAI,OAAO,EAAE,CAAC;SACtB,CAAC;KACH;IAED,OAAO,mBAAmB,CAAC;AAC7B,CAAC,EAAE,mBAAmB,CAAC,CAAC;AAExB;;;;;;SAMgB,0BAA0B,CAAC,OAA4B;IACrE,OAAO,SAAS,mBAAmB,CACjC,UAA8B;QAE9B,IAAM,WAAW,GAAG,OAAO,IAAI,UAAU,CAAC;QAE1C,OAAO,SAAS,aAAa,CAC3B,CAAC,EACD,CAAC,EACD,WAAW,EACX,WAAW,EACX,OAAO,EACP,OAAO,EACP,KAA4B;YAA5B,sBAAA,EAAA,QAAe,WAAW,EAAE;YAE5B,IAAM,YAAY,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC;YAClD,IAAM,YAAY,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC;YAElD,IAAI,YAAY,IAAI,YAAY,EAAE;gBAChC,IAAM,IAAI,GAAG,YAAY,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAM,IAAI,GAAG,YAAY,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAE1C,IAAI,IAAI,IAAI,IAAI,EAAE;oBAChB,OAAO,IAAI,IAAI,IAAI,CAAC;iBACrB;gBAED,IAAI,YAAY,EAAE;oBAChB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBACd;gBAED,IAAI,YAAY,EAAE;oBAChB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBACd;aACF;YAED,OAAO,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;SACjC,CAAC;KACH,CAAC;AACJ,CAAC;AAED;;;;;;;;;SASgB,cAAc,CAC5B,CAAQ,EACR,CAAQ,EACR,OAAmC,EACnC,IAAS;IAET,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;IAErB,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,EAAE;QACtB,OAAO,KAAK,CAAC;KACd;IAED,OAAO,KAAK,EAAE,GAAG,CAAC,EAAE;QAClB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE;YAC1D,OAAO,KAAK,CAAC;SACd;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;SASgB,YAAY,CAC1B,CAAgB,EAChB,CAAgB,EAChB,OAAmC,EACnC,IAAS;IAET,IAAI,YAAY,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC;IAErC,IAAI,YAAY,IAAI,CAAC,CAAC,IAAI,EAAE;QAC1B,IAAM,gBAAc,GAAyB,EAAE,CAAC;QAChD,IAAI,QAAM,GAAG,CAAC,CAAC;QAEf,CAAC,CAAC,OAAO,CAAC,UAAC,MAAM,EAAE,IAAI;YACrB,IAAI,YAAY,EAAE;gBAChB,IAAI,UAAQ,GAAG,KAAK,CAAC;gBACrB,IAAI,aAAW,GAAG,CAAC,CAAC;gBAEpB,CAAC,CAAC,OAAO,CAAC,UAAC,MAAM,EAAE,IAAI;oBACrB,IAAI,CAAC,UAAQ,IAAI,CAAC,gBAAc,CAAC,aAAW,CAAC,EAAE;wBAC7C,UAAQ;4BACN,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,QAAM,EAAE,aAAW,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;gCACpD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;wBAElD,IAAI,UAAQ,EAAE;4BACZ,gBAAc,CAAC,aAAW,CAAC,GAAG,IAAI,CAAC;yBACpC;qBACF;oBAED,aAAW,EAAE,CAAC;iBACf,CAAC,CAAC;gBAEH,QAAM,EAAE,CAAC;gBACT,YAAY,GAAG,UAAQ,CAAC;aACzB;SACF,CAAC,CAAC;KACJ;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAOD,IAAM,KAAK,GAAG,QAAQ,CAAC;AAEvB,IAAM,cAAc,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CACjD,QAAQ,CAAC,SAAS,CAAC,IAAI,EACvB,MAAM,CAAC,SAAS,CAAC,cAAc,CAChC,CAAC;AAEF;;;;;;;;;SASgB,eAAe,CAC7B,CAAkB,EAClB,CAAkB,EAClB,OAAmC,EACnC,IAAS;IAET,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEtB,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IAEzB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,EAAE;QAC5B,OAAO,KAAK,CAAC;KACd;IAED,IAAI,KAAK,EAAE;QACT,IAAI,GAAG,SAAQ,CAAC;QAEhB,OAAO,KAAK,EAAE,GAAG,CAAC,EAAE;YAClB,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAEnB,IAAI,GAAG,KAAK,KAAK,EAAE;gBACjB,IAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBACxC,IAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBAExC,IACE,CAAC,aAAa,IAAI,aAAa;oBAC/B,aAAa,KAAK,aAAa,EAC/B;oBACA,OAAO,KAAK,CAAC;iBACd;aACF;YAED,IACE,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC;gBACvB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAC9C;gBACA,OAAO,KAAK,CAAC;aACd;SACF;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;SAOgB,eAAe,CAAC,CAAS,EAAE,CAAS;IAClD,QACE,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QACrB,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QACrB,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU;QAC7B,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS;QAC3B,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO;QACvB,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QACrB,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,EAC3B;AACJ,CAAC;AAED;;;;;;;;;SASgB,YAAY,CAC1B,CAAW,EACX,CAAW,EACX,OAAmC,EACnC,IAAS;IAET,IAAI,YAAY,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC;IAErC,IAAI,YAAY,IAAI,CAAC,CAAC,IAAI,EAAE;QAC1B,IAAM,gBAAc,GAAyB,EAAE,CAAC;QAEhD,CAAC,CAAC,OAAO,CAAC,UAAC,MAAM,EAAE,IAAI;YACrB,IAAI,YAAY,EAAE;gBAChB,IAAI,UAAQ,GAAG,KAAK,CAAC;gBACrB,IAAI,YAAU,GAAG,CAAC,CAAC;gBAEnB,CAAC,CAAC,OAAO,CAAC,UAAC,MAAM,EAAE,IAAI;oBACrB,IAAI,CAAC,UAAQ,IAAI,CAAC,gBAAc,CAAC,YAAU,CAAC,EAAE;wBAC5C,UAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;wBAE3D,IAAI,UAAQ,EAAE;4BACZ,gBAAc,CAAC,YAAU,CAAC,GAAG,IAAI,CAAC;yBACnC;qBACF;oBAED,YAAU,EAAE,CAAC;iBACd,CAAC,CAAC;gBAEH,YAAY,GAAG,UAAQ,CAAC;aACzB;SACF,CAAC,CAAC;KACJ;IAED,OAAO,YAAY,CAAC;AACtB;;AC/UA,IAAM,eAAe,GAAG,OAAO,GAAG,KAAK,UAAU,CAAC;AAClD,IAAM,eAAe,GAAG,OAAO,GAAG,KAAK,UAAU,CAAC;AAE1C,IAAA,OAAO,GAAK,MAAM,CAAC,SAAS,QAArB,CAAsB;SAMrB,gBAAgB,CAC9B,aAAyC;IAEzC,IAAM,OAAO;;IAEX,OAAO,aAAa,KAAK,UAAU;UAC/B,aAAa,CAAC,UAAU,CAAC;UACzB,UACE,CAAM,EACN,CAAM,EACN,WAAgB,EAChB,WAAgB,EAChB,OAAY,EACZ,OAAY,EACZ,IAAS,IACN,OAAA,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAA,CAAC;;;;;;;;;;IAWlC,SAAS,UAAU,CAAC,CAAM,EAAE,CAAM,EAAE,IAAU;QAC5C,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,IAAI,CAAC;SACb;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YAC5D,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;gBACxC,OAAO,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;aAC7C;YAED,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAE9B,IAAI,MAAM,IAAI,MAAM,EAAE;gBACpB,OAAO,MAAM,KAAK,MAAM,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;aACjE;YAED,MAAM,GAAG,CAAC,YAAY,IAAI,CAAC;YAC3B,MAAM,GAAG,CAAC,YAAY,IAAI,CAAC;YAE3B,IAAI,MAAM,IAAI,MAAM,EAAE;gBACpB,QACE,MAAM,KAAK,MAAM,IAAI,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EACjE;aACH;YAED,MAAM,GAAG,CAAC,YAAY,MAAM,CAAC;YAC7B,MAAM,GAAG,CAAC,YAAY,MAAM,CAAC;YAE7B,IAAI,MAAM,IAAI,MAAM,EAAE;gBACpB,OAAO,MAAM,KAAK,MAAM,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACnD;YAED,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;gBACxC,OAAO,CAAC,KAAK,CAAC,CAAC;aAChB;YAED,IAAI,eAAe,EAAE;gBACnB,MAAM,GAAG,CAAC,YAAY,GAAG,CAAC;gBAC1B,MAAM,GAAG,CAAC,YAAY,GAAG,CAAC;gBAE1B,IAAI,MAAM,IAAI,MAAM,EAAE;oBACpB,OAAO,MAAM,KAAK,MAAM,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;iBAC/D;aACF;YAED,IAAI,eAAe,EAAE;gBACnB,MAAM,GAAG,CAAC,YAAY,GAAG,CAAC;gBAC1B,MAAM,GAAG,CAAC,YAAY,GAAG,CAAC;gBAE1B,IAAI,MAAM,IAAI,MAAM,EAAE;oBACpB,OAAO,MAAM,KAAK,MAAM,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;iBAC/D;aACF;YAED,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,EAAE;gBAClD,OAAO,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;aACrD;YAED,OAAO,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;SAC7C;QAED,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;IAED,OAAO,UAAU,CAAC;AACpB;;IC7Ga,SAAS,GAAG,gBAAgB,GAAG;IAC/B,YAAY,GAAG,gBAAgB,CAAC,cAAM,OAAA,kBAAkB,GAAA,EAAE;IAE1D,iBAAiB,GAAG,gBAAgB,CAAC,0BAA0B,EAAE,EAAE;IACnE,oBAAoB,GAAG,gBAAgB,CAClD,0BAA0B,CAAC,kBAAkB,CAAC;;;;;;;;;"}
|
|
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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"}
|
package/dist/fast-equals.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
var HAS_WEAK_MAP_SUPPORT = typeof WeakMap === 'function';
|
|
1
2
|
var keys = Object.keys;
|
|
2
|
-
var HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';
|
|
3
3
|
/**
|
|
4
4
|
* are the values passed strictly equal or both NaN
|
|
5
5
|
*
|
|
@@ -38,20 +38,38 @@ function isReactElement(value) {
|
|
|
38
38
|
return !!(value && value.$$typeof);
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
41
|
-
* in cases where
|
|
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
|
|
47
|
+
var entries = [];
|
|
48
48
|
return {
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
53
|
-
|
|
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
|
|
83
|
+
return new WeakMap();
|
|
66
84
|
};
|
|
67
85
|
}
|
|
68
86
|
return getNewCacheFallback;
|
|
69
|
-
})(
|
|
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
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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);
|
|
106
|
+
}
|
|
107
|
+
var cachedA = cache.get(a);
|
|
108
|
+
if (cachedA && cache.get(b)) {
|
|
109
|
+
return cachedA === b;
|
|
95
110
|
}
|
|
96
|
-
|
|
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
|
}
|
|
@@ -198,15 +218,22 @@ function areObjectsEqual(a, b, isEqual, meta) {
|
|
|
198
218
|
* @param b the regExp to test agains
|
|
199
219
|
* @returns are the regExps equal
|
|
200
220
|
*/
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
a
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
a.
|
|
209
|
-
|
|
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
|
+
})();
|
|
210
237
|
/**
|
|
211
238
|
* are the sets equal in value
|
|
212
239
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fast-equals.esm.js","sources":["../src/utils.ts","../src/comparator.ts","../src/index.ts"],"sourcesContent":["import type {\n EqualityComparator,\n InternalEqualityComparator,\n Primitive,\n} from './types';\n\nconst { keys } = Object;\nconst { toString, valueOf } = Object.prototype;\n\nconst HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';\n\ntype Cache = {\n add: (value: any) => void;\n has: (value: any) => boolean;\n};\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\nfunction strictEqual(a: any, b: any) {\n return a === 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(\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 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) &&\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 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 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
|
+
{"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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"}
|
package/dist/fast-equals.js
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
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_WEAK_MAP_SUPPORT = typeof WeakMap === 'function';
|
|
7
8
|
var keys = Object.keys;
|
|
8
|
-
var HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';
|
|
9
9
|
/**
|
|
10
10
|
* are the values passed strictly equal or both NaN
|
|
11
11
|
*
|
|
@@ -44,20 +44,38 @@
|
|
|
44
44
|
return !!(value && value.$$typeof);
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
|
-
* in cases where
|
|
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
|
|
53
|
+
var entries = [];
|
|
54
54
|
return {
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
59
|
-
|
|
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
|
|
89
|
+
return new WeakMap();
|
|
72
90
|
};
|
|
73
91
|
}
|
|
74
92
|
return getNewCacheFallback;
|
|
75
|
-
})(
|
|
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
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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);
|
|
112
|
+
}
|
|
113
|
+
var cachedA = cache.get(a);
|
|
114
|
+
if (cachedA && cache.get(b)) {
|
|
115
|
+
return cachedA === b;
|
|
101
116
|
}
|
|
102
|
-
|
|
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
|
}
|
|
@@ -204,15 +224,22 @@
|
|
|
204
224
|
* @param b the regExp to test agains
|
|
205
225
|
* @returns are the regExps equal
|
|
206
226
|
*/
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
a
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
a.
|
|
215
|
-
|
|
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
|
+
})();
|
|
216
243
|
/**
|
|
217
244
|
* are the sets equal in value
|
|
218
245
|
*
|
package/dist/fast-equals.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fast-equals.js","sources":["../src/utils.ts","../src/comparator.ts","../src/index.ts"],"sourcesContent":["import type {\n EqualityComparator,\n InternalEqualityComparator,\n Primitive,\n} from './types';\n\nconst { keys } = Object;\nconst { toString, valueOf } = Object.prototype;\n\nconst HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';\n\ntype Cache = {\n add: (value: any) => void;\n has: (value: any) => boolean;\n};\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\nfunction strictEqual(a: any, b: any) {\n return a === 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(\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 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) &&\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 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 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
|
+
{"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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"}
|
package/dist/fast-equals.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,
|
|
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})}));
|
package/dist/fast-equals.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
var HAS_WEAK_MAP_SUPPORT = typeof WeakMap === 'function';
|
|
1
2
|
var keys = Object.keys;
|
|
2
|
-
var HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';
|
|
3
3
|
/**
|
|
4
4
|
* are the values passed strictly equal or both NaN
|
|
5
5
|
*
|
|
@@ -38,20 +38,38 @@ function isReactElement(value) {
|
|
|
38
38
|
return !!(value && value.$$typeof);
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
41
|
-
* in cases where
|
|
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
|
|
47
|
+
var entries = [];
|
|
48
48
|
return {
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
53
|
-
|
|
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
|
|
83
|
+
return new WeakMap();
|
|
66
84
|
};
|
|
67
85
|
}
|
|
68
86
|
return getNewCacheFallback;
|
|
69
|
-
})(
|
|
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
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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);
|
|
106
|
+
}
|
|
107
|
+
var cachedA = cache.get(a);
|
|
108
|
+
if (cachedA && cache.get(b)) {
|
|
109
|
+
return cachedA === b;
|
|
95
110
|
}
|
|
96
|
-
|
|
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
|
}
|
|
@@ -198,15 +218,22 @@ function areObjectsEqual(a, b, isEqual, meta) {
|
|
|
198
218
|
* @param b the regExp to test agains
|
|
199
219
|
* @returns are the regExps equal
|
|
200
220
|
*/
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
a
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
a.
|
|
209
|
-
|
|
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
|
+
})();
|
|
210
237
|
/**
|
|
211
238
|
* are the sets equal in value
|
|
212
239
|
*
|
package/dist/fast-equals.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fast-equals.mjs","sources":["../src/utils.ts","../src/comparator.ts","../src/index.ts"],"sourcesContent":["import type {\n EqualityComparator,\n InternalEqualityComparator,\n Primitive,\n} from './types';\n\nconst { keys } = Object;\nconst { toString, valueOf } = Object.prototype;\n\nconst HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';\n\ntype Cache = {\n add: (value: any) => void;\n has: (value: any) => boolean;\n};\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\nfunction strictEqual(a: any, b: any) {\n return a === 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(\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 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) &&\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 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 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
|
+
{"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/package.json
CHANGED