basant307/AI_Governance_Project
045
1import getAllKeys from './_getAllKeys.js';2 3/** Used to compose bitmasks for value comparisons. */4var COMPARE_PARTIAL_FLAG = 1;5 6/** Used for built-in method references. */7var objectProto = Object.prototype;8 9/** Used to check objects for own properties. */10var hasOwnProperty = objectProto.hasOwnProperty;11 12/**13 * A specialized version of `baseIsEqualDeep` for objects with support for14 * partial deep comparisons.15 *16 * @private17 * @param {Object} object The object to compare.18 * @param {Object} other The other object to compare.19 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.20 * @param {Function} customizer The function to customize comparisons.21 * @param {Function} equalFunc The function to determine equivalents of values.22 * @param {Object} stack Tracks traversed `object` and `other` objects.23 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.24 */25function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {26 var isPartial = bitmask & COMPARE_PARTIAL_FLAG,27 objProps = getAllKeys(object),28 objLength = objProps.length,29 othProps = getAllKeys(other),30 othLength = othProps.length;31 32 if (objLength != othLength && !isPartial) {33 return false;34 }35 var index = objLength;36 while (index--) {37 var key = objProps[index];38 if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {39 return false;40 }41 }42 // Check that cyclic values are equal.43 var objStacked = stack.get(object);44 var othStacked = stack.get(other);45 if (objStacked && othStacked) {46 return objStacked == other && othStacked == object;47 }48 var result = true;49 stack.set(object, other);50 stack.set(other, object);51 52 var skipCtor = isPartial;53 while (++index < objLength) {54 key = objProps[index];55 var objValue = object[key],56 othValue = other[key];57 58 if (customizer) {59 var compared = isPartial60 ? customizer(othValue, objValue, key, other, object, stack)61 : customizer(objValue, othValue, key, object, other, stack);62 }63 // Recursively compare objects (susceptible to call stack limits).64 if (!(compared === undefined65 ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))66 : compared67 )) {68 result = false;69 break;70 }71 skipCtor || (skipCtor = key == 'constructor');72 }73 if (result && !skipCtor) {74 var objCtor = object.constructor,75 othCtor = other.constructor;76 77 // Non `Object` object instances with different constructors are not equal.78 if (objCtor != othCtor &&79 ('constructor' in object && 'constructor' in other) &&80 !(typeof objCtor == 'function' && objCtor instanceof objCtor &&81 typeof othCtor == 'function' && othCtor instanceof othCtor)) {82 result = false;83 }84 }85 stack['delete'](object);86 stack['delete'](other);87 return result;88}89 90export default equalObjects;91 