You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							83 lines
						
					
					
						
							2.9 KiB
						
					
					
				
			
		
		
	
	
							83 lines
						
					
					
						
							2.9 KiB
						
					
					
				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;
 | 
						|
 |