var baseIsMatch = require('./_baseIsMatch'),

getMatchData = require('./_getMatchData'),
matchesStrictComparable = require('./_matchesStrictComparable');

/**

* The base implementation of `_.matches` which doesn't clone `source`.
*
* @private
* @param {Object} source The object of property values to match.
* @returns {Function} Returns the new spec function.
*/

function baseMatches(source) {

var matchData = getMatchData(source);
if (matchData.length == 1 && matchData[0][2]) {
  return matchesStrictComparable(matchData[0][0], matchData[0][1]);
}
return function(object) {
  return object === source || baseIsMatch(object, source, matchData);
};

}

module.exports = baseMatches;