|                                                                                   |  | var Stack = require('./_Stack'),    equalArrays = require('./_equalArrays'),    equalByTag = require('./_equalByTag'),    equalObjects = require('./_equalObjects'),    getTag = require('./_getTag'),    isArray = require('./isArray'),    isBuffer = require('./isBuffer'),    isTypedArray = require('./isTypedArray');
/** Used to compose bitmasks for value comparisons. */var COMPARE_PARTIAL_FLAG = 1;
/** `Object#toString` result references. */var argsTag = '[object Arguments]',    arrayTag = '[object Array]',    objectTag = '[object Object]';
/** Used for built-in method references. */var objectProto = Object.prototype;
/** Used to check objects for own properties. */var hasOwnProperty = objectProto.hasOwnProperty;
/** * A specialized version of `baseIsEqual` for arrays and objects which performs * deep comparisons and tracks traversed objects enabling objects with circular * references to be compared. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} [stack] Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {  var objIsArr = isArray(object),      othIsArr = isArray(other),      objTag = objIsArr ? arrayTag : getTag(object),      othTag = othIsArr ? arrayTag : getTag(other);
  objTag = objTag == argsTag ? objectTag : objTag;  othTag = othTag == argsTag ? objectTag : othTag;
  var objIsObj = objTag == objectTag,      othIsObj = othTag == objectTag,      isSameTag = objTag == othTag;
  if (isSameTag && isBuffer(object)) {    if (!isBuffer(other)) {      return false;    }    objIsArr = true;    objIsObj = false;  }  if (isSameTag && !objIsObj) {    stack || (stack = new Stack);    return (objIsArr || isTypedArray(object))      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);  }  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
    if (objIsWrapped || othIsWrapped) {      var objUnwrapped = objIsWrapped ? object.value() : object,          othUnwrapped = othIsWrapped ? other.value() : other;
      stack || (stack = new Stack);      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);    }  }  if (!isSameTag) {    return false;  }  stack || (stack = new Stack);  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);}
module.exports = baseIsEqualDeep;
 |