1var baseIsEqual = require('./_baseIsEqual'), 2 get = require('./get'), 3 hasIn = require('./hasIn'), 4 isKey = require('./_isKey'), 5 isStrictComparable = require('./_isStrictComparable'), 6 matchesStrictComparable = require('./_matchesStrictComparable'), 7 toKey = require('./_toKey'); 8 9/** Used to compose bitmasks for value comparisons. */ 10var COMPARE_PARTIAL_FLAG = 1, 11 COMPARE_UNORDERED_FLAG = 2; 12 13/** 14 * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. 15 * 16 * @private 17 * @param {string} path The path of the property to get. 18 * @param {*} srcValue The value to match. 19 * @returns {Function} Returns the new spec function. 20 */ 21function baseMatchesProperty(path, srcValue) { 22 if (isKey(path) && isStrictComparable(srcValue)) { 23 return matchesStrictComparable(toKey(path), srcValue); 24 } 25 return function(object) { 26 var objValue = get(object, path); 27 return (objValue === undefined && objValue === srcValue) 28 ? hasIn(object, path) 29 : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); 30 }; 31} 32 33module.exports = baseMatchesProperty; 34