fast-equals 1.6.3 → 2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"fast-equals.js","sources":["../src/constants.js","../src/utils.js","../src/comparator.js","../src/index.js"],"sourcesContent":["/**\n * @constant {boolean} HAS_MAP_SUPPORT\n */\nexport const HAS_MAP_SUPPORT = typeof Map === 'function';\n\n/**\n * @constant {boolean} HAS_SET_SUPPORT\n */\nexport const HAS_SET_SUPPORT = typeof Set === 'function';\n\n/**\n * @constant {boolean} HAS_WEAKSET_SUPPORT\n */\nexport const HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';\n","// constants\nimport {HAS_WEAKSET_SUPPORT} from './constants';\n\nconst keys = Object.keys;\n\n/**\n * @function addObjectToCache\n *\n * @description\n * add object to cache if it is indeed an object\n *\n * @param {any} object the object to potentially add to the cache\n * @param {Object|WeakSet} cache the cache to add to\n * @returns {void}\n */\nexport const addObjectToCache = (object, cache) => object && typeof object === 'object' && cache.add(object);\n\n/**\n *\n * @param {Array<Array<any>>} pairs the pairs to check in\n * @param {Array<any>} pairToMatch the pair to check if exists\n * @param {function} isEqual the equality comparator\n * @param {any} meta the meta item to pass through\n * @returns {boolean} does the pair exist in the pairs\n */\nexport const hasPair = (pairs, pairToMatch, isEqual, meta) => {\n let pair;\n\n for (let index = 0; index < pairs.length; index++) {\n pair = pairs[index];\n\n if (isEqual(pair[0], pairToMatch[0], meta) && isEqual(pair[1], pairToMatch[1], meta)) {\n return true;\n }\n }\n\n return false;\n};\n\n/**\n * @function hasValue\n *\n * @description\n * does the values include the vakye passed\n *\n * @param {Array<any>} values the values to check in\n * @param {any} item the value to locate\n * @param {function} isEqual the equality comparator\n * @param {any} meta the meta item to pass through\n * @returns {boolean} does the value exist in the values\n */\nexport const hasValue = (values, item, isEqual, meta) => {\n for (let index = 0; index < values.length; index++) {\n if (isEqual(values[index], item, meta)) {\n return true;\n }\n }\n\n return false;\n};\n\n/**\n * @function sameValueZeroEqual\n *\n * @description\n * are the objects passed strictly equal or both NaN\n *\n * @param {any} objectA the object to compare against\n * @param {any} objectB the object to test\n * @returns {boolean} are the objects equal by the SameValueZero principle\n */\nexport const sameValueZeroEqual = (objectA, objectB) =>\n objectA === objectB || (objectA !== objectA && objectB !== objectB);\n\n/**\n * @function isPlainObject\n *\n * @description\n * is the object a plain object\n *\n * @param {any} object the object to test\n * @returns {boolean} is the object a plain object\n */\nexport const isPlainObject = (object) => object.constructor === Object;\n\n/**\n * @function isPromiseLike\n *\n * @description\n * is the object promise-like (thenable)\n *\n * @param {any} object the object to test\n * @returns {boolean} is the object promise-like\n */\nexport const isPromiseLike = (object) => typeof object.then === 'function';\n\n/**\n * @function isReactElement\n *\n * @description\n * is the object passed a react element\n *\n * @param {any} object the object to test\n * @returns {boolean} is the object a react element\n */\nexport const isReactElement = (object) => !!(object.$$typeof && object._store);\n\n/**\n * @function getNewCache\n *\n * @description\n * get a new cache object to prevent circular references\n *\n * @returns {Object|Weakset} the new cache object\n */\nexport const getNewCache = () =>\n HAS_WEAKSET_SUPPORT\n ? new WeakSet()\n : Object.create({\n _values: [],\n add(value) {\n this._values.push(value);\n },\n has(value) {\n return !!~this._values.indexOf(value);\n },\n });\n\n/**\n * @function createCircularEqual\n *\n * @description\n * create a custom isEqual handler specific to circular objects\n *\n * @param {funtion} [isEqual] the isEqual comparator to use instead of isDeepEqual\n * @returns {function(any, any): boolean}\n */\nexport const createCircularEqual = (isEqual) => (isDeepEqual) => {\n const comparator = isEqual || isDeepEqual;\n\n return (objectA, objectB, cache = getNewCache()) => {\n const cacheHasA = cache.has(objectA);\n const cacheHasB = cache.has(objectB);\n\n if (cacheHasA || cacheHasB) {\n return cacheHasA && cacheHasB;\n }\n\n addObjectToCache(objectA, cache);\n addObjectToCache(objectB, cache);\n\n return comparator(objectA, objectB, cache);\n };\n};\n\n/**\n * @function toPairs\n *\n * @param {Map} map the map to convert to [key, value] pairs (entries)\n * @returns {Array<Array<*>>} the [key, value] pairs\n */\nexport const toPairs = (map) => {\n const pairs = [];\n\n map.forEach((value, key) => pairs.push([key, value]));\n\n return pairs;\n};\n\n/**\n * @function toValues\n *\n * @param {Set} set the set to convert to values\n * @returns {Array<*>} the values\n */\nexport const toValues = (set) => {\n const values = [];\n\n set.forEach((value) => values.push(value));\n\n return values;\n};\n\n/**\n * @function areArraysEqual\n *\n * @description\n * are the arrays equal in value\n *\n * @param {Array<any>} arrayA the array to test\n * @param {Array<any>} arrayB the array to test against\n * @param {function} isEqual the comparator to determine equality\n * @param {any} meta the meta object to pass through\n * @returns {boolean} are the arrays equal\n */\nexport const areArraysEqual = (arrayA, arrayB, isEqual, meta) => {\n if (arrayA.length !== arrayB.length) {\n return false;\n }\n\n for (let index = 0; index < arrayA.length; index++) {\n if (!isEqual(arrayA[index], arrayB[index], meta)) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * @function areMapsEqual\n *\n * @description\n * are the maps equal in value\n *\n * @param {Map} mapA the map to test\n * @param {Map} mapB the map to test against\n * @param {function} isEqual the comparator to determine equality\n * @param {any} meta the meta map to pass through\n * @returns {boolean} are the maps equal\n */\nexport const areMapsEqual = (mapA, mapB, isEqual, meta) => {\n if (mapA.size !== mapB.size) {\n return false;\n }\n\n const pairsA = toPairs(mapA);\n const pairsB = toPairs(mapB);\n\n for (let index = 0; index < pairsA.length; index++) {\n if (!hasPair(pairsB, pairsA[index], isEqual, meta) || !hasPair(pairsA, pairsB[index], isEqual, meta)) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * @function areObjectsEqual\n *\n * @description\n * are the objects equal in value\n *\n * @param {Object} objectA the object to test\n * @param {Object} objectB the object to test against\n * @param {function} isEqual the comparator to determine equality\n * @param {any} meta the meta object to pass through\n * @returns {boolean} are the objects equal\n */\nexport const areObjectsEqual = (objectA, objectB, isEqual, meta) => {\n const keysA = keys(objectA);\n const keysB = keys(objectB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n let key;\n\n for (let index = 0; index < keysA.length; index++) {\n key = keysA[index];\n\n if (!hasValue(keysB, key, sameValueZeroEqual)) {\n return false;\n }\n\n // if a react element, ignore the \"_owner\" key because its not necessary for equality comparisons\n if (key === '_owner' && isReactElement(objectA) && isReactElement(objectB)) {\n continue;\n }\n\n if (!isEqual(objectA[key], objectB[key], meta)) {\n return false;\n }\n }\n\n return true;\n};\n\n/**\n * @function areRegExpsEqual\n *\n * @description\n * are the regExps equal in value\n *\n * @param {RegExp} regExpA the regExp to test\n * @param {RegExp} regExpB the regExp to test agains\n * @returns {boolean} are the regExps equal\n */\nexport const areRegExpsEqual = (regExpA, regExpB) =>\n regExpA.source === regExpB.source\n && regExpA.global === regExpB.global\n && regExpA.ignoreCase === regExpB.ignoreCase\n && regExpA.multiline === regExpB.multiline\n && regExpA.unicode === regExpB.unicode\n && regExpA.sticky === regExpB.sticky\n && regExpA.lastIndex === regExpB.lastIndex;\n\n/**\n * @function areSetsEqual\n *\n * @description\n * are the sets equal in value\n *\n * @param {Set} setA the set to test\n * @param {Set} setB the set to test against\n * @param {function} isEqual the comparator to determine equality\n * @param {any} meta the meta set to pass through\n * @returns {boolean} are the sets equal\n */\nexport const areSetsEqual = (setA, setB, isEqual, meta) => {\n if (setA.size !== setB.size) {\n return false;\n }\n\n const valuesA = toValues(setA);\n const valuesB = toValues(setB);\n\n for (let index = 0; index < valuesA.length; index++) {\n if (!hasValue(valuesB, valuesA[index], isEqual, meta) || !hasValue(valuesA, valuesB[index], isEqual, meta)) {\n return false;\n }\n }\n\n return true;\n};\n","// constants\nimport {\n HAS_MAP_SUPPORT,\n HAS_SET_SUPPORT,\n} from './constants';\n\n// utils\nimport {\n areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areRegExpsEqual,\n areSetsEqual,\n isPlainObject,\n isPromiseLike,\n sameValueZeroEqual,\n} from './utils';\n\nconst isArray = Array.isArray;\n\nconst createComparator = (createIsEqual) => {\n // eslint-disable-next-line no-use-before-define\n const isEqual = typeof createIsEqual === 'function' ? createIsEqual(comparator) : comparator;\n\n /**\n * @function comparator\n *\n * @description\n * compare the value of the two objects and return true if they are equivalent in values\n *\n * @param {any} objectA the object to test against\n * @param {any} objectB the object to test\n * @param {any} [meta] an optional meta object that is passed through to all equality test calls\n * @returns {boolean} are objectA and objectB equivalent in value\n */\n function comparator(objectA, objectB, meta) {\n if (sameValueZeroEqual(objectA, objectB)) {\n return true;\n }\n\n const typeOfA = typeof objectA;\n\n if (typeOfA !== typeof objectB || typeOfA !== 'object' || !objectA || !objectB) {\n return false;\n }\n\n if (isPlainObject(objectA) && isPlainObject(objectB)) {\n return areObjectsEqual(objectA, objectB, isEqual, meta);\n }\n\n const arrayA = isArray(objectA);\n const arrayB = isArray(objectB);\n\n if (arrayA || arrayB) {\n return arrayA === arrayB && areArraysEqual(objectA, objectB, isEqual, meta);\n }\n\n const dateA = objectA instanceof Date;\n const dateB = objectB instanceof Date;\n\n if (dateA || dateB) {\n return dateA === dateB && sameValueZeroEqual(objectA.getTime(), objectB.getTime());\n }\n\n const regexpA = objectA instanceof RegExp;\n const regexpB = objectB instanceof RegExp;\n\n if (regexpA || regexpB) {\n return regexpA === regexpB && areRegExpsEqual(objectA, objectB);\n }\n\n if (isPromiseLike(objectA) || isPromiseLike(objectB)) {\n return objectA === objectB;\n }\n\n if (HAS_MAP_SUPPORT) {\n const mapA = objectA instanceof Map;\n const mapB = objectB instanceof Map;\n\n if (mapA || mapB) {\n return mapA === mapB && areMapsEqual(objectA, objectB, isEqual, meta);\n }\n }\n\n if (HAS_SET_SUPPORT) {\n const setA = objectA instanceof Set;\n const setB = objectB instanceof Set;\n\n if (setA || setB) {\n return setA === setB && areSetsEqual(objectA, objectB, isEqual, meta);\n }\n }\n\n return areObjectsEqual(objectA, objectB, isEqual, meta);\n }\n\n return comparator;\n};\n\nexport default createComparator;\n","// comparator\nimport createCustomEqual from './comparator';\n\n// utils\nimport {\n createCircularEqual,\n sameValueZeroEqual,\n} from './utils';\n\nexport {\n createCustomEqual, sameValueZeroEqual,\n};\n\nexport const circularDeepEqual = createCustomEqual(createCircularEqual());\nexport const circularShallowEqual = createCustomEqual(createCircularEqual(sameValueZeroEqual));\nexport const deepEqual = createCustomEqual();\nexport const shallowEqual = createCustomEqual(() => sameValueZeroEqual);\n\nexport default {\n circularDeep: circularDeepEqual,\n circularShallow: circularShallowEqual,\n createCustom: createCustomEqual,\n deep: deepEqual,\n sameValueZero: sameValueZeroEqual,\n shallow: shallowEqual,\n};\n"],"names":["HAS_MAP_SUPPORT","Map","HAS_SET_SUPPORT","Set","HAS_WEAKSET_SUPPORT","WeakSet","keys","Object","addObjectToCache","object","cache","add","hasPair","pairs","pairToMatch","isEqual","meta","pair","index","length","hasValue","values","item","sameValueZeroEqual","objectA","objectB","isPlainObject","constructor","isPromiseLike","then","isReactElement","$$typeof","_store","getNewCache","create","_values","value","push","has","indexOf","createCircularEqual","isDeepEqual","comparator","cacheHasA","cacheHasB","toPairs","map","forEach","key","toValues","set","areArraysEqual","arrayA","arrayB","areMapsEqual","mapA","mapB","size","pairsA","pairsB","areObjectsEqual","keysA","keysB","areRegExpsEqual","regExpA","regExpB","source","global","ignoreCase","multiline","unicode","sticky","lastIndex","areSetsEqual","setA","setB","valuesA","valuesB","isArray","Array","createComparator","createIsEqual","typeOfA","dateA","Date","dateB","getTime","regexpA","RegExp","regexpB","circularDeepEqual","createCustomEqual","circularShallowEqual","deepEqual","shallowEqual","circularDeep","circularShallow","createCustom","deep","sameValueZero","shallow"],"mappings":"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"}
1
+ {"version":3,"file":"fast-equals.js","sources":["../src/utils.ts","../src/comparator.ts","../src/index.ts"],"sourcesContent":["const HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';\n\nconst { keys } = Object;\n\ntype Cache = {\n add: (value: any) => void;\n has: (value: any) => boolean;\n};\n\nexport type EqualityComparator = (a: any, b: any, meta?: any) => boolean;\n\n/**\n * are the values passed strictly equal or both NaN\n *\n * @param a the value to compare against\n * @param b the value to test\n * @returns are the values equal by the SameValueZero principle\n */\nexport function sameValueZeroEqual(a: any, b: any) {\n return a === b || (a !== a && b !== b);\n}\n\n/**\n * is the value a plain object\n *\n * @param value the value to test\n * @returns is the value a plain object\n */\nexport function isPlainObject(value: any) {\n return value.constructor === Object || value.constructor == null;\n}\n\n/**\n * is the value promise-like (meaning it is thenable)\n *\n * @param value the value to test\n * @returns is the value promise-like\n */\nexport function isPromiseLike(value: any) {\n return !!value && typeof value.then === 'function';\n}\n\n/**\n * is the value passed a react element\n *\n * @param value the value to test\n * @returns is the value a react element\n */\nexport function isReactElement(value: any) {\n return !!(value && value.$$typeof);\n}\n\n/**\n * in cases where WeakSet is not supported, creates a new custom\n * object that mimics the necessary API aspects for cache purposes\n *\n * @returns the new cache object\n */\nexport function getNewCacheFallback(): Cache {\n const values: any[] = [];\n\n return {\n add(value: any) {\n values.push(value);\n },\n\n has(value: any) {\n return values.indexOf(value) !== -1;\n },\n };\n}\n\n/**\n * get a new cache object to prevent circular references\n *\n * @returns the new cache object\n */\nexport const getNewCache = ((canUseWeakMap: boolean) => {\n if (canUseWeakMap) {\n return function _getNewCache(): Cache {\n return new WeakSet();\n };\n }\n\n return getNewCacheFallback;\n})(HAS_WEAKSET_SUPPORT);\n\n/**\n * create a custom isEqual handler specific to circular objects\n *\n * @param [isEqual] the isEqual comparator to use instead of isDeepEqual\n * @returns the method to create the `isEqual` function\n */\nexport function createCircularEqualCreator(isEqual?: EqualityComparator) {\n return function createCircularEqual(comparator: EqualityComparator) {\n const _comparator = isEqual || comparator;\n\n return function circularEqual(\n a: any,\n b: any,\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: EqualityComparator,\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], 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: EqualityComparator,\n meta: any,\n) {\n let isValueEqual = a.size === b.size;\n\n if (isValueEqual && a.size) {\n a.forEach((aValue, aKey) => {\n if (isValueEqual) {\n isValueEqual = false;\n\n b.forEach((bValue, bKey) => {\n if (!isValueEqual && isEqual(aKey, bKey, meta)) {\n isValueEqual = isEqual(aValue, bValue, meta);\n }\n });\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: EqualityComparator,\n meta: any,\n) {\n const keysA = keys(a);\n\n let index = keysA.length;\n\n if (keys(b).length !== index) {\n return false;\n }\n\n if (index) {\n let key: string;\n\n while (index-- > 0) {\n key = keysA[index];\n\n if (key === OWNER) {\n const reactElementA = isReactElement(a);\n const reactElementB = isReactElement(b);\n\n if (\n (reactElementA || reactElementB) &&\n reactElementA !== reactElementB\n ) {\n return false;\n }\n }\n\n if (!hasOwnProperty(b, key) || !isEqual(a[key], b[key], meta)) {\n return false;\n }\n }\n }\n\n return true;\n}\n\n/**\n * are the regExps equal in value\n *\n * @param a the regExp to test\n * @param b the regExp to test agains\n * @returns are the regExps equal\n */\nexport function areRegExpsEqual(a: RegExp, b: RegExp) {\n return (\n a.source === b.source &&\n a.global === b.global &&\n a.ignoreCase === b.ignoreCase &&\n a.multiline === b.multiline &&\n a.unicode === b.unicode &&\n a.sticky === b.sticky &&\n a.lastIndex === b.lastIndex\n );\n}\n\n/**\n * are the sets equal in value\n *\n * @param a the set to test\n * @param b the set to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta set to pass through\n * @returns are the sets equal\n */\nexport function areSetsEqual(\n a: Set<any>,\n b: Set<any>,\n isEqual: EqualityComparator,\n meta: any,\n) {\n let isValueEqual = a.size === b.size;\n\n if (isValueEqual && a.size) {\n a.forEach((aValue) => {\n if (isValueEqual) {\n isValueEqual = false;\n\n b.forEach((bValue) => {\n if (!isValueEqual) {\n isValueEqual = isEqual(aValue, bValue, meta);\n }\n });\n }\n });\n }\n\n return isValueEqual;\n}\n","import {\n EqualityComparator,\n areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areRegExpsEqual,\n areSetsEqual,\n isPlainObject,\n isPromiseLike,\n sameValueZeroEqual,\n} from './utils';\n\nconst HAS_MAP_SUPPORT = typeof Map === 'function';\nconst HAS_SET_SUPPORT = typeof Set === 'function';\n\ntype EqualityComparatorCreator = (fn: EqualityComparator) => EqualityComparator;\n\nexport function createComparator(createIsEqual?: EqualityComparatorCreator) {\n const isEqual: EqualityComparator =\n /* eslint-disable no-use-before-define */\n typeof createIsEqual === 'function'\n ? createIsEqual(comparator)\n : comparator;\n /* eslint-enable */\n\n /**\n * compare the value of the two objects and return true if they are equivalent in values\n *\n * @param a the value to test against\n * @param b the value to test\n * @param [meta] an optional meta object that is passed through to all equality test calls\n * @returns are a and b equivalent in value\n */\n function comparator(a: any, b: any, meta?: any) {\n if (a === b) {\n return true;\n }\n\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n if (isPlainObject(a) && isPlainObject(b)) {\n return areObjectsEqual(a, b, isEqual, meta);\n }\n\n let aShape = Array.isArray(a);\n let bShape = Array.isArray(b);\n\n if (aShape || bShape) {\n return aShape === bShape && areArraysEqual(a, b, isEqual, meta);\n }\n\n aShape = a instanceof Date;\n bShape = b instanceof Date;\n\n if (aShape || bShape) {\n return (\n aShape === bShape && sameValueZeroEqual(a.getTime(), b.getTime())\n );\n }\n\n aShape = a instanceof RegExp;\n bShape = b instanceof RegExp;\n\n if (aShape || bShape) {\n return aShape === bShape && areRegExpsEqual(a, b);\n }\n\n if (isPromiseLike(a) || isPromiseLike(b)) {\n return a === b;\n }\n\n if (HAS_MAP_SUPPORT) {\n aShape = a instanceof Map;\n bShape = b instanceof Map;\n\n if (aShape || bShape) {\n return aShape === bShape && areMapsEqual(a, b, isEqual, meta);\n }\n }\n\n if (HAS_SET_SUPPORT) {\n aShape = a instanceof Set;\n bShape = b instanceof Set;\n\n if (aShape || bShape) {\n return aShape === bShape && areSetsEqual(a, b, isEqual, meta);\n }\n }\n\n return areObjectsEqual(a, b, isEqual, meta);\n }\n\n return a !== a && b !== b;\n }\n\n return comparator;\n}\n","import { createComparator } from './comparator';\nimport { createCircularEqualCreator, sameValueZeroEqual } from './utils';\n\nexport { createComparator as createCustomEqual, sameValueZeroEqual };\n\nexport const deepEqual = createComparator();\nexport const shallowEqual = createComparator(() => sameValueZeroEqual);\n\nexport const circularDeepEqual = createComparator(createCircularEqualCreator());\nexport const circularShallowEqual = createComparator(\n createCircularEqualCreator(sameValueZeroEqual),\n);\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e=e||self)["fast-equals"]={})}(this,function(e){"use strict";var n="function"==typeof Map,t="function"==typeof Set,r="function"==typeof WeakSet,u=Object.keys,i=function(e,n){return e&&"object"==typeof e&&n.add(e)},f=function(e,n,t,r){for(var u,i=0;i<e.length;i++)if(t((u=e[i])[0],n[0],r)&&t(u[1],n[1],r))return!0;return!1},o=function(e,n,t,r){for(var u=0;u<e.length;u++)if(t(e[u],n,r))return!0;return!1},a=function(e,n){return e===n||e!=e&&n!=n},c=function(e){return e.constructor===Object},s=function(e){return"function"==typeof e.then},l=function(e){return!(!e.$$typeof||!e._store)},p=function(e){return function(n){var t=e||n;return function(e,n,u){void 0===u&&(u=r?new WeakSet:Object.create({_values:[],add:function(e){this._values.push(e)},has:function(e){return!!~this._values.indexOf(e)}}));var f=u.has(e),o=u.has(n);return f||o?f&&o:(i(e,u),i(n,u),t(e,n,u))}}},h=function(e){var n=[];return e.forEach(function(e,t){return n.push([t,e])}),n},v=function(e){var n=[];return e.forEach(function(e){return n.push(e)}),n},d=function(e,n,t,r){if(e.length!==n.length)return!1;for(var u=0;u<e.length;u++)if(!t(e[u],n[u],r))return!1;return!0},g=function(e,n,t,r){if(e.size!==n.size)return!1;for(var u=h(e),i=h(n),o=0;o<u.length;o++)if(!f(i,u[o],t,r)||!f(u,i[o],t,r))return!1;return!0},y=function(e,n,t,r){var i,f=u(e),c=u(n);if(f.length!==c.length)return!1;for(var s=0;s<f.length;s++){if(i=f[s],!o(c,i,a))return!1;if(("_owner"!==i||!l(e)||!l(n))&&!t(e[i],n[i],r))return!1}return!0},m=function(e,n){return e.source===n.source&&e.global===n.global&&e.ignoreCase===n.ignoreCase&&e.multiline===n.multiline&&e.unicode===n.unicode&&e.sticky===n.sticky&&e.lastIndex===n.lastIndex},E=function(e,n,t,r){if(e.size!==n.size)return!1;for(var u=v(e),i=v(n),f=0;f<u.length;f++)if(!o(i,u[f],t,r)||!o(u,i[f],t,r))return!1;return!0},b=Array.isArray,x=function(e){var r="function"==typeof e?e(u):u;function u(e,u,i){if(a(e,u))return!0;var f=typeof e;if(f!==typeof u||"object"!==f||!e||!u)return!1;if(c(e)&&c(u))return y(e,u,r,i);var o=b(e),l=b(u);if(o||l)return o===l&&d(e,u,r,i);var p=e instanceof Date,h=u instanceof Date;if(p||h)return p===h&&a(e.getTime(),u.getTime());var v=e instanceof RegExp,x=u instanceof RegExp;if(v||x)return v===x&&m(e,u);if(s(e)||s(u))return e===u;if(n){var j=e instanceof Map,q=u instanceof Map;if(j||q)return j===q&&g(e,u,r,i)}if(t){var S=e instanceof Set,_=u instanceof Set;if(S||_)return S===_&&E(e,u,r,i)}return y(e,u,r,i)}return u},j=x(p()),q=x(p(a)),S=x(),_=x(function(){return a}),w={circularDeep:j,circularShallow:q,createCustom:x,deep:S,sameValueZero:a,shallow:_};e.circularDeepEqual=j,e.circularShallowEqual=q,e.createCustomEqual=x,e.deepEqual=S,e.default=w,e.sameValueZeroEqual=a,e.shallowEqual=_,Object.defineProperty(e,"__esModule",{value:!0})});
1
+ !function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((n="undefined"!=typeof globalThis?globalThis:n||self)["fast-equals"]={})}(this,(function(n){"use strict";var e="function"==typeof WeakSet,t=Object.keys;function r(n,e){return n===e||n!=n&&e!=e}function o(n){return n.constructor===Object||null==n.constructor}function i(n){return!!n&&"function"==typeof n.then}function u(n){return!(!n||!n.$$typeof)}function f(){var n=[];return{add:function(e){n.push(e)},has:function(e){return-1!==n.indexOf(e)}}}var a=e?function(){return new WeakSet}:f;function c(n){return function(e){var t=n||e;return function(n,e,r){void 0===r&&(r=a());var o=!!n&&"object"==typeof n,i=!!e&&"object"==typeof e;if(o||i){var u=o&&r.has(n),f=i&&r.has(e);if(u||f)return u&&f;o&&r.add(n),i&&r.add(e)}return t(n,e,r)}}}var s=Function.prototype.bind.call(Function.prototype.call,Object.prototype.hasOwnProperty);function l(n,e,r,o){var i=t(n),f=i.length;if(t(e).length!==f)return!1;if(f)for(var a=void 0;f-- >0;){if("_owner"===(a=i[f])){var c=u(n),l=u(e);if((c||l)&&c!==l)return!1}if(!s(e,a)||!r(n[a],e[a],o))return!1}return!0}var p="function"==typeof Map,d="function"==typeof Set;function y(n){var e="function"==typeof n?n(t):t;function t(n,t,u){if(n===t)return!0;if(n&&t&&"object"==typeof n&&"object"==typeof t){if(o(n)&&o(t))return l(n,t,e,u);var f=Array.isArray(n),a=Array.isArray(t);return f||a?f===a&&function(n,e,t,r){var o=n.length;if(e.length!==o)return!1;for(;o-- >0;)if(!t(n[o],e[o],r))return!1;return!0}(n,t,e,u):(f=n instanceof Date,a=t instanceof Date,f||a?f===a&&r(n.getTime(),t.getTime()):(f=n instanceof RegExp,a=t instanceof RegExp,f||a?f===a&&function(n,e){return n.source===e.source&&n.global===e.global&&n.ignoreCase===e.ignoreCase&&n.multiline===e.multiline&&n.unicode===e.unicode&&n.sticky===e.sticky&&n.lastIndex===e.lastIndex}(n,t):i(n)||i(t)?n===t:p&&(f=n instanceof Map,a=t instanceof Map,f||a)?f===a&&function(n,e,t,r){var o=n.size===e.size;return o&&n.size&&n.forEach((function(n,i){o&&(o=!1,e.forEach((function(e,u){!o&&t(i,u,r)&&(o=t(n,e,r))})))})),o}(n,t,e,u):d&&(f=n instanceof Set,a=t instanceof Set,f||a)?f===a&&function(n,e,t,r){var o=n.size===e.size;return o&&n.size&&n.forEach((function(n){o&&(o=!1,e.forEach((function(e){o||(o=t(n,e,r))})))})),o}(n,t,e,u):l(n,t,e,u)))}return n!=n&&t!=t}return t}var v=y(),h=y((function(){return r})),b=y(c()),g=y(c(r));n.circularDeepEqual=b,n.circularShallowEqual=g,n.createCustomEqual=y,n.deepEqual=v,n.sameValueZeroEqual=r,n.shallowEqual=h,Object.defineProperty(n,"__esModule",{value:!0})}));
@@ -0,0 +1,294 @@
1
+ var HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';
2
+ var keys = Object.keys;
3
+ /**
4
+ * are the values passed strictly equal or both NaN
5
+ *
6
+ * @param a the value to compare against
7
+ * @param b the value to test
8
+ * @returns are the values equal by the SameValueZero principle
9
+ */
10
+ function sameValueZeroEqual(a, b) {
11
+ return a === b || (a !== a && b !== b);
12
+ }
13
+ /**
14
+ * is the value a plain object
15
+ *
16
+ * @param value the value to test
17
+ * @returns is the value a plain object
18
+ */
19
+ function isPlainObject(value) {
20
+ return value.constructor === Object || value.constructor == null;
21
+ }
22
+ /**
23
+ * is the value promise-like (meaning it is thenable)
24
+ *
25
+ * @param value the value to test
26
+ * @returns is the value promise-like
27
+ */
28
+ function isPromiseLike(value) {
29
+ return !!value && typeof value.then === 'function';
30
+ }
31
+ /**
32
+ * is the value passed a react element
33
+ *
34
+ * @param value the value to test
35
+ * @returns is the value a react element
36
+ */
37
+ function isReactElement(value) {
38
+ return !!(value && value.$$typeof);
39
+ }
40
+ /**
41
+ * in cases where WeakSet is not supported, creates a new custom
42
+ * object that mimics the necessary API aspects for cache purposes
43
+ *
44
+ * @returns the new cache object
45
+ */
46
+ function getNewCacheFallback() {
47
+ var values = [];
48
+ return {
49
+ add: function (value) {
50
+ values.push(value);
51
+ },
52
+ has: function (value) {
53
+ return values.indexOf(value) !== -1;
54
+ },
55
+ };
56
+ }
57
+ /**
58
+ * get a new cache object to prevent circular references
59
+ *
60
+ * @returns the new cache object
61
+ */
62
+ var getNewCache = (function (canUseWeakMap) {
63
+ if (canUseWeakMap) {
64
+ return function _getNewCache() {
65
+ return new WeakSet();
66
+ };
67
+ }
68
+ return getNewCacheFallback;
69
+ })(HAS_WEAKSET_SUPPORT);
70
+ /**
71
+ * create a custom isEqual handler specific to circular objects
72
+ *
73
+ * @param [isEqual] the isEqual comparator to use instead of isDeepEqual
74
+ * @returns the method to create the `isEqual` function
75
+ */
76
+ function createCircularEqualCreator(isEqual) {
77
+ return function createCircularEqual(comparator) {
78
+ var _comparator = isEqual || comparator;
79
+ return function circularEqual(a, b, cache) {
80
+ if (cache === void 0) { cache = getNewCache(); }
81
+ var isCacheableA = !!a && typeof a === 'object';
82
+ var isCacheableB = !!b && typeof b === 'object';
83
+ if (isCacheableA || isCacheableB) {
84
+ var hasA = isCacheableA && cache.has(a);
85
+ var hasB = isCacheableB && cache.has(b);
86
+ if (hasA || hasB) {
87
+ return hasA && hasB;
88
+ }
89
+ if (isCacheableA) {
90
+ cache.add(a);
91
+ }
92
+ if (isCacheableB) {
93
+ cache.add(b);
94
+ }
95
+ }
96
+ return _comparator(a, b, cache);
97
+ };
98
+ };
99
+ }
100
+ /**
101
+ * are the arrays equal in value
102
+ *
103
+ * @param a the array to test
104
+ * @param b the array to test against
105
+ * @param isEqual the comparator to determine equality
106
+ * @param meta the meta object to pass through
107
+ * @returns are the arrays equal
108
+ */
109
+ function areArraysEqual(a, b, isEqual, meta) {
110
+ var index = a.length;
111
+ if (b.length !== index) {
112
+ return false;
113
+ }
114
+ while (index-- > 0) {
115
+ if (!isEqual(a[index], b[index], meta)) {
116
+ return false;
117
+ }
118
+ }
119
+ return true;
120
+ }
121
+ /**
122
+ * are the maps equal in value
123
+ *
124
+ * @param a the map to test
125
+ * @param b the map to test against
126
+ * @param isEqual the comparator to determine equality
127
+ * @param meta the meta map to pass through
128
+ * @returns are the maps equal
129
+ */
130
+ function areMapsEqual(a, b, isEqual, meta) {
131
+ var isValueEqual = a.size === b.size;
132
+ if (isValueEqual && a.size) {
133
+ a.forEach(function (aValue, aKey) {
134
+ if (isValueEqual) {
135
+ isValueEqual = false;
136
+ b.forEach(function (bValue, bKey) {
137
+ if (!isValueEqual && isEqual(aKey, bKey, meta)) {
138
+ isValueEqual = isEqual(aValue, bValue, meta);
139
+ }
140
+ });
141
+ }
142
+ });
143
+ }
144
+ return isValueEqual;
145
+ }
146
+ var OWNER = '_owner';
147
+ var hasOwnProperty = Function.prototype.bind.call(Function.prototype.call, Object.prototype.hasOwnProperty);
148
+ /**
149
+ * are the objects equal in value
150
+ *
151
+ * @param a the object to test
152
+ * @param b the object to test against
153
+ * @param isEqual the comparator to determine equality
154
+ * @param meta the meta object to pass through
155
+ * @returns are the objects equal
156
+ */
157
+ function areObjectsEqual(a, b, isEqual, meta) {
158
+ var keysA = keys(a);
159
+ var index = keysA.length;
160
+ if (keys(b).length !== index) {
161
+ return false;
162
+ }
163
+ if (index) {
164
+ var key = void 0;
165
+ while (index-- > 0) {
166
+ key = keysA[index];
167
+ if (key === OWNER) {
168
+ var reactElementA = isReactElement(a);
169
+ var reactElementB = isReactElement(b);
170
+ if ((reactElementA || reactElementB) &&
171
+ reactElementA !== reactElementB) {
172
+ return false;
173
+ }
174
+ }
175
+ if (!hasOwnProperty(b, key) || !isEqual(a[key], b[key], meta)) {
176
+ return false;
177
+ }
178
+ }
179
+ }
180
+ return true;
181
+ }
182
+ /**
183
+ * are the regExps equal in value
184
+ *
185
+ * @param a the regExp to test
186
+ * @param b the regExp to test agains
187
+ * @returns are the regExps equal
188
+ */
189
+ function areRegExpsEqual(a, b) {
190
+ return (a.source === b.source &&
191
+ a.global === b.global &&
192
+ a.ignoreCase === b.ignoreCase &&
193
+ a.multiline === b.multiline &&
194
+ a.unicode === b.unicode &&
195
+ a.sticky === b.sticky &&
196
+ a.lastIndex === b.lastIndex);
197
+ }
198
+ /**
199
+ * are the sets equal in value
200
+ *
201
+ * @param a the set to test
202
+ * @param b the set to test against
203
+ * @param isEqual the comparator to determine equality
204
+ * @param meta the meta set to pass through
205
+ * @returns are the sets equal
206
+ */
207
+ function areSetsEqual(a, b, isEqual, meta) {
208
+ var isValueEqual = a.size === b.size;
209
+ if (isValueEqual && a.size) {
210
+ a.forEach(function (aValue) {
211
+ if (isValueEqual) {
212
+ isValueEqual = false;
213
+ b.forEach(function (bValue) {
214
+ if (!isValueEqual) {
215
+ isValueEqual = isEqual(aValue, bValue, meta);
216
+ }
217
+ });
218
+ }
219
+ });
220
+ }
221
+ return isValueEqual;
222
+ }
223
+
224
+ var HAS_MAP_SUPPORT = typeof Map === 'function';
225
+ var HAS_SET_SUPPORT = typeof Set === 'function';
226
+ function createComparator(createIsEqual) {
227
+ var isEqual =
228
+ /* eslint-disable no-use-before-define */
229
+ typeof createIsEqual === 'function'
230
+ ? createIsEqual(comparator)
231
+ : comparator;
232
+ /* eslint-enable */
233
+ /**
234
+ * compare the value of the two objects and return true if they are equivalent in values
235
+ *
236
+ * @param a the value to test against
237
+ * @param b the value to test
238
+ * @param [meta] an optional meta object that is passed through to all equality test calls
239
+ * @returns are a and b equivalent in value
240
+ */
241
+ function comparator(a, b, meta) {
242
+ if (a === b) {
243
+ return true;
244
+ }
245
+ if (a && b && typeof a === 'object' && typeof b === 'object') {
246
+ if (isPlainObject(a) && isPlainObject(b)) {
247
+ return areObjectsEqual(a, b, isEqual, meta);
248
+ }
249
+ var aShape = Array.isArray(a);
250
+ var bShape = Array.isArray(b);
251
+ if (aShape || bShape) {
252
+ return aShape === bShape && areArraysEqual(a, b, isEqual, meta);
253
+ }
254
+ aShape = a instanceof Date;
255
+ bShape = b instanceof Date;
256
+ if (aShape || bShape) {
257
+ return (aShape === bShape && sameValueZeroEqual(a.getTime(), b.getTime()));
258
+ }
259
+ aShape = a instanceof RegExp;
260
+ bShape = b instanceof RegExp;
261
+ if (aShape || bShape) {
262
+ return aShape === bShape && areRegExpsEqual(a, b);
263
+ }
264
+ if (isPromiseLike(a) || isPromiseLike(b)) {
265
+ return a === b;
266
+ }
267
+ if (HAS_MAP_SUPPORT) {
268
+ aShape = a instanceof Map;
269
+ bShape = b instanceof Map;
270
+ if (aShape || bShape) {
271
+ return aShape === bShape && areMapsEqual(a, b, isEqual, meta);
272
+ }
273
+ }
274
+ if (HAS_SET_SUPPORT) {
275
+ aShape = a instanceof Set;
276
+ bShape = b instanceof Set;
277
+ if (aShape || bShape) {
278
+ return aShape === bShape && areSetsEqual(a, b, isEqual, meta);
279
+ }
280
+ }
281
+ return areObjectsEqual(a, b, isEqual, meta);
282
+ }
283
+ return a !== a && b !== b;
284
+ }
285
+ return comparator;
286
+ }
287
+
288
+ var deepEqual = createComparator();
289
+ var shallowEqual = createComparator(function () { return sameValueZeroEqual; });
290
+ var circularDeepEqual = createComparator(createCircularEqualCreator());
291
+ var circularShallowEqual = createComparator(createCircularEqualCreator(sameValueZeroEqual));
292
+
293
+ export { circularDeepEqual, circularShallowEqual, createComparator as createCustomEqual, deepEqual, sameValueZeroEqual, shallowEqual };
294
+ //# sourceMappingURL=fast-equals.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fast-equals.mjs","sources":["../src/utils.ts","../src/comparator.ts","../src/index.ts"],"sourcesContent":["const HAS_WEAKSET_SUPPORT = typeof WeakSet === 'function';\n\nconst { keys } = Object;\n\ntype Cache = {\n add: (value: any) => void;\n has: (value: any) => boolean;\n};\n\nexport type EqualityComparator = (a: any, b: any, meta?: any) => boolean;\n\n/**\n * are the values passed strictly equal or both NaN\n *\n * @param a the value to compare against\n * @param b the value to test\n * @returns are the values equal by the SameValueZero principle\n */\nexport function sameValueZeroEqual(a: any, b: any) {\n return a === b || (a !== a && b !== b);\n}\n\n/**\n * is the value a plain object\n *\n * @param value the value to test\n * @returns is the value a plain object\n */\nexport function isPlainObject(value: any) {\n return value.constructor === Object || value.constructor == null;\n}\n\n/**\n * is the value promise-like (meaning it is thenable)\n *\n * @param value the value to test\n * @returns is the value promise-like\n */\nexport function isPromiseLike(value: any) {\n return !!value && typeof value.then === 'function';\n}\n\n/**\n * is the value passed a react element\n *\n * @param value the value to test\n * @returns is the value a react element\n */\nexport function isReactElement(value: any) {\n return !!(value && value.$$typeof);\n}\n\n/**\n * in cases where WeakSet is not supported, creates a new custom\n * object that mimics the necessary API aspects for cache purposes\n *\n * @returns the new cache object\n */\nexport function getNewCacheFallback(): Cache {\n const values: any[] = [];\n\n return {\n add(value: any) {\n values.push(value);\n },\n\n has(value: any) {\n return values.indexOf(value) !== -1;\n },\n };\n}\n\n/**\n * get a new cache object to prevent circular references\n *\n * @returns the new cache object\n */\nexport const getNewCache = ((canUseWeakMap: boolean) => {\n if (canUseWeakMap) {\n return function _getNewCache(): Cache {\n return new WeakSet();\n };\n }\n\n return getNewCacheFallback;\n})(HAS_WEAKSET_SUPPORT);\n\n/**\n * create a custom isEqual handler specific to circular objects\n *\n * @param [isEqual] the isEqual comparator to use instead of isDeepEqual\n * @returns the method to create the `isEqual` function\n */\nexport function createCircularEqualCreator(isEqual?: EqualityComparator) {\n return function createCircularEqual(comparator: EqualityComparator) {\n const _comparator = isEqual || comparator;\n\n return function circularEqual(\n a: any,\n b: any,\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: EqualityComparator,\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], 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: EqualityComparator,\n meta: any,\n) {\n let isValueEqual = a.size === b.size;\n\n if (isValueEqual && a.size) {\n a.forEach((aValue, aKey) => {\n if (isValueEqual) {\n isValueEqual = false;\n\n b.forEach((bValue, bKey) => {\n if (!isValueEqual && isEqual(aKey, bKey, meta)) {\n isValueEqual = isEqual(aValue, bValue, meta);\n }\n });\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: EqualityComparator,\n meta: any,\n) {\n const keysA = keys(a);\n\n let index = keysA.length;\n\n if (keys(b).length !== index) {\n return false;\n }\n\n if (index) {\n let key: string;\n\n while (index-- > 0) {\n key = keysA[index];\n\n if (key === OWNER) {\n const reactElementA = isReactElement(a);\n const reactElementB = isReactElement(b);\n\n if (\n (reactElementA || reactElementB) &&\n reactElementA !== reactElementB\n ) {\n return false;\n }\n }\n\n if (!hasOwnProperty(b, key) || !isEqual(a[key], b[key], meta)) {\n return false;\n }\n }\n }\n\n return true;\n}\n\n/**\n * are the regExps equal in value\n *\n * @param a the regExp to test\n * @param b the regExp to test agains\n * @returns are the regExps equal\n */\nexport function areRegExpsEqual(a: RegExp, b: RegExp) {\n return (\n a.source === b.source &&\n a.global === b.global &&\n a.ignoreCase === b.ignoreCase &&\n a.multiline === b.multiline &&\n a.unicode === b.unicode &&\n a.sticky === b.sticky &&\n a.lastIndex === b.lastIndex\n );\n}\n\n/**\n * are the sets equal in value\n *\n * @param a the set to test\n * @param b the set to test against\n * @param isEqual the comparator to determine equality\n * @param meta the meta set to pass through\n * @returns are the sets equal\n */\nexport function areSetsEqual(\n a: Set<any>,\n b: Set<any>,\n isEqual: EqualityComparator,\n meta: any,\n) {\n let isValueEqual = a.size === b.size;\n\n if (isValueEqual && a.size) {\n a.forEach((aValue) => {\n if (isValueEqual) {\n isValueEqual = false;\n\n b.forEach((bValue) => {\n if (!isValueEqual) {\n isValueEqual = isEqual(aValue, bValue, meta);\n }\n });\n }\n });\n }\n\n return isValueEqual;\n}\n","import {\n EqualityComparator,\n areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areRegExpsEqual,\n areSetsEqual,\n isPlainObject,\n isPromiseLike,\n sameValueZeroEqual,\n} from './utils';\n\nconst HAS_MAP_SUPPORT = typeof Map === 'function';\nconst HAS_SET_SUPPORT = typeof Set === 'function';\n\ntype EqualityComparatorCreator = (fn: EqualityComparator) => EqualityComparator;\n\nexport function createComparator(createIsEqual?: EqualityComparatorCreator) {\n const isEqual: EqualityComparator =\n /* eslint-disable no-use-before-define */\n typeof createIsEqual === 'function'\n ? createIsEqual(comparator)\n : comparator;\n /* eslint-enable */\n\n /**\n * compare the value of the two objects and return true if they are equivalent in values\n *\n * @param a the value to test against\n * @param b the value to test\n * @param [meta] an optional meta object that is passed through to all equality test calls\n * @returns are a and b equivalent in value\n */\n function comparator(a: any, b: any, meta?: any) {\n if (a === b) {\n return true;\n }\n\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n if (isPlainObject(a) && isPlainObject(b)) {\n return areObjectsEqual(a, b, isEqual, meta);\n }\n\n let aShape = Array.isArray(a);\n let bShape = Array.isArray(b);\n\n if (aShape || bShape) {\n return aShape === bShape && areArraysEqual(a, b, isEqual, meta);\n }\n\n aShape = a instanceof Date;\n bShape = b instanceof Date;\n\n if (aShape || bShape) {\n return (\n aShape === bShape && sameValueZeroEqual(a.getTime(), b.getTime())\n );\n }\n\n aShape = a instanceof RegExp;\n bShape = b instanceof RegExp;\n\n if (aShape || bShape) {\n return aShape === bShape && areRegExpsEqual(a, b);\n }\n\n if (isPromiseLike(a) || isPromiseLike(b)) {\n return a === b;\n }\n\n if (HAS_MAP_SUPPORT) {\n aShape = a instanceof Map;\n bShape = b instanceof Map;\n\n if (aShape || bShape) {\n return aShape === bShape && areMapsEqual(a, b, isEqual, meta);\n }\n }\n\n if (HAS_SET_SUPPORT) {\n aShape = a instanceof Set;\n bShape = b instanceof Set;\n\n if (aShape || bShape) {\n return aShape === bShape && areSetsEqual(a, b, isEqual, meta);\n }\n }\n\n return areObjectsEqual(a, b, isEqual, meta);\n }\n\n return a !== a && b !== b;\n }\n\n return comparator;\n}\n","import { createComparator } from './comparator';\nimport { createCircularEqualCreator, sameValueZeroEqual } from './utils';\n\nexport { createComparator as createCustomEqual, sameValueZeroEqual };\n\nexport const deepEqual = createComparator();\nexport const shallowEqual = createComparator(() => sameValueZeroEqual);\n\nexport const circularDeepEqual = createComparator(createCircularEqualCreator());\nexport const circularShallowEqual = createComparator(\n createCircularEqualCreator(sameValueZeroEqual),\n);\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,19 +1,20 @@
1
- declare type Comparator = (objectA: any, objectB: any, meta: any) => boolean;
1
+ declare type EqualityComparator = (
2
+ objectA: any,
3
+ objectB: any,
4
+ meta?: any,
5
+ ) => boolean;
6
+ declare type EqualityComparatorCreator = (
7
+ comparator: EqualityComparator,
8
+ ) => EqualityComparator;
2
9
 
3
- export declare function createCustomEqual(createIsEqual?: Comparator): Comparator;
10
+ export declare function createCustomEqual(
11
+ createIsEqual?: EqualityComparatorCreator,
12
+ ): EqualityComparator;
4
13
  export declare function circularDeepEqual(objectA: any, objectB: any): boolean;
5
- export declare function circularShallowEqual(objectA: any, objectB: any): boolean;
14
+ export declare function circularShallowEqual(
15
+ objectA: any,
16
+ objectB: any,
17
+ ): boolean;
6
18
  export declare function deepEqual(objectA: any, objectB: any): boolean;
7
19
  export declare function shallowEqual(objectA: any, objectB: any): boolean;
8
20
  export declare function sameValueZeroEqual(objectA: any, objectB: any): boolean;
9
-
10
- type module = {
11
- circularDeep: typeof circularDeepEqual;
12
- circularShallow: typeof circularShallowEqual;
13
- createCustom: typeof createCustomEqual;
14
- deep: typeof deepEqual;
15
- shallow: typeof shallowEqual;
16
- sameValueZero: typeof sameValueZeroEqual;
17
- };
18
-
19
- export default module;
package/package.json CHANGED
@@ -1,61 +1,50 @@
1
1
  {
2
2
  "author": "tony_quetano@planttheidea.com",
3
- "ava": {
4
- "failFast": true,
5
- "files": [
6
- "test/*.js"
7
- ],
8
- "require": [
9
- "@babel/register"
10
- ],
11
- "sources": [
12
- "src/*.js"
13
- ],
14
- "verbose": true
15
- },
16
3
  "browser": "dist/fast-equals.js",
17
4
  "bugs": {
18
5
  "url": "https://github.com/planttheidea/fast-equals/issues"
19
6
  },
20
7
  "description": "A blazing fast equality comparison, either shallow or deep",
21
8
  "devDependencies": {
22
- "@babel/cli": "^7.2.3",
23
- "@babel/core": "^7.0.0",
24
- "@babel/preset-env": "^7.3.1",
25
- "@babel/preset-react": "^7.0.0",
26
- "@babel/register": "^7.0.0",
27
- "ava": "^1.1.0",
28
- "babel-eslint": "^10.0.1",
29
- "babel-loader": "^8.0.5",
30
- "benchee": "^1.0.3",
9
+ "@rollup/plugin-node-resolve": "^11.2.1",
10
+ "@types/jest": "^26.0.23",
11
+ "@types/lodash": "^4.14.121",
12
+ "@types/node": "^15.0.1",
13
+ "@types/ramda": "^0.27.40",
14
+ "@types/react": "^17.0.4",
15
+ "@typescript-eslint/eslint-plugin": "^4.22.0",
16
+ "@typescript-eslint/parser": "^4.22.0",
17
+ "benchee": "^1.1.0",
31
18
  "cli-table2": "^0.2.0",
32
19
  "decircularize": "^1.0.0",
33
20
  "deep-eql": "^4.0.0",
34
- "deep-equal": "^1.0.1",
35
- "eslint": "^5.12.1",
36
- "eslint-config-rapid7": "^3.1.0",
37
- "eslint-friendly-formatter": "^4.0.1",
38
- "eslint-loader": "^2.1.1",
39
- "fast-deep-equal": "^2.0.1",
40
- "fs-extra": "^7.0.1",
41
- "html-webpack-plugin": "^3.2.0",
21
+ "deep-equal": "^2.0.5",
22
+ "eslint": "^7.25.0",
23
+ "eslint-config-airbnb": "^18.2.1",
24
+ "eslint-plugin-import": "^2.17.2",
25
+ "eslint-plugin-jsx-a11y": "^6.2.1",
26
+ "eslint-plugin-react": "^7.23.2",
27
+ "eslint-webpack-plugin": "^2.5.4",
28
+ "fast-deep-equal": "^3.1.3",
29
+ "fs-extra": "^9.1.0",
30
+ "html-webpack-plugin": "^5.3.1",
42
31
  "in-publish": "^2.0.0",
43
- "lodash": "^4.17.11",
32
+ "jest": "^26.6.3",
33
+ "lodash": "^4.17.21",
44
34
  "nano-equal": "^2.0.2",
45
- "nyc": "^13.1.0",
46
- "optimize-js-plugin": "^0.0.4",
47
- "react": "^16.7.0",
48
- "react-dom": "^16.7.0",
49
- "react-fast-compare": "^2.0.4",
50
- "rollup": "^1.1.2",
51
- "rollup-plugin-babel": "^4.3.2",
52
- "rollup-plugin-node-resolve": "^4.0.0",
53
- "rollup-plugin-terser": "^4.0.2",
35
+ "react": "^17.0.2",
36
+ "react-dom": "^17.0.2",
37
+ "react-fast-compare": "^3.2.0",
38
+ "rollup": "^2.46.0",
39
+ "rollup-plugin-terser": "^7.0.2",
40
+ "rollup-plugin-typescript2": "^0.30.0",
54
41
  "shallow-equal-fuzzy": "^0.0.2",
55
- "sinon": "^7.2.3",
56
- "underscore": "^1.9.1",
57
- "webpack": "^4.29.0",
58
- "webpack-cli": "^3.2.1",
42
+ "ts-jest": "^26.5.5",
43
+ "ts-loader": "^9.1.1",
44
+ "typescript": "^4.2.4",
45
+ "underscore": "^1.13.1",
46
+ "webpack": "^5.36.2",
47
+ "webpack-cli": "^4.6.0",
59
48
  "webpack-dev-server": "^3.1.14"
60
49
  },
61
50
  "homepage": "https://github.com/planttheidea/fast-equals#readme",
@@ -75,30 +64,22 @@
75
64
  "url": "git+https://github.com/planttheidea/fast-equals.git"
76
65
  },
77
66
  "scripts": {
78
- "benchmark": "NODE_ENV=production BABEL_ENV=test babel src --out-dir lib --no-comments && node benchmark/index.js",
67
+ "benchmark": "npm run dist && node benchmark/index.js",
79
68
  "build": "NODE_ENV=production rollup -c",
80
- "clean": "npm run clean:es && npm run clean:lib && npm run clean:dist",
81
- "clean:dist": "rimraf dist",
82
- "clean:es": "rimraf es",
83
- "clean:lib": "rimraf lib",
84
- "clean:mjs": "rimraf mjs",
85
- "copy:mjs": "npm run clean:mjs && node ./es-to-mjs.js",
86
- "dev": "NODE_ENV=development webpack-dev-server --colors --progress --config=webpack/webpack.config.dev.js",
87
- "dist": "npm run clean:dist && npm run build",
88
- "lint": "NODE_ENV=test eslint src --max-warnings 0",
89
- "lint:fix": "NODE_ENV=test eslint src --fix",
69
+ "dev": "NODE_ENV=development webpack serve --progress --config=webpack/webpack.config.js",
70
+ "dist": "rimraf dist && npm run build",
71
+ "lint": "eslint src/*.ts",
72
+ "lint:fix": "npm run lint -- --fix",
73
+ "start": "npm run dev",
90
74
  "prepublish": "if in-publish; then npm run prepublish:compile; fi",
91
- "prepublish:compile": "npm run lint && npm run test:coverage && npm run transpile:lib && npm run transpile:es && npm run copy:mjs && npm run dist",
75
+ "prepublish:compile": "npm run lint && npm run test && npm run dist",
92
76
  "release": "release-it",
93
77
  "release:beta": "release-it --config=.release-it.beta.json",
94
- "start": "npm run dev",
95
- "test": "NODE_PATH=. BABEL_ENV=test ava",
96
- "test:coverage": "nyc npm test",
97
- "test:watch": "npm test -- --watch",
98
- "transpile:es": "npm run clean:es && BABEL_ENV=es babel src --out-dir es",
99
- "transpile:lib": "npm run clean:lib && BABEL_ENV=lib babel src --out-dir lib"
78
+ "test": "NODE_PATH=. jest",
79
+ "test:coverage": "npm test -- --coverage",
80
+ "test:watch": "npm test -- --watch"
100
81
  },
101
82
  "sideEffects": false,
102
83
  "types": "index.d.ts",
103
- "version": "1.6.3"
84
+ "version": "2.0.3"
104
85
  }