Initial commit
[yaffs-website] / node_modules / sass-graph / node_modules / lodash / _baseIsMatch.js
1 var Stack = require('./_Stack'),
2     baseIsEqual = require('./_baseIsEqual');
3
4 /** Used to compose bitmasks for value comparisons. */
5 var COMPARE_PARTIAL_FLAG = 1,
6     COMPARE_UNORDERED_FLAG = 2;
7
8 /**
9  * The base implementation of `_.isMatch` without support for iteratee shorthands.
10  *
11  * @private
12  * @param {Object} object The object to inspect.
13  * @param {Object} source The object of property values to match.
14  * @param {Array} matchData The property names, values, and compare flags to match.
15  * @param {Function} [customizer] The function to customize comparisons.
16  * @returns {boolean} Returns `true` if `object` is a match, else `false`.
17  */
18 function baseIsMatch(object, source, matchData, customizer) {
19   var index = matchData.length,
20       length = index,
21       noCustomizer = !customizer;
22
23   if (object == null) {
24     return !length;
25   }
26   object = Object(object);
27   while (index--) {
28     var data = matchData[index];
29     if ((noCustomizer && data[2])
30           ? data[1] !== object[data[0]]
31           : !(data[0] in object)
32         ) {
33       return false;
34     }
35   }
36   while (++index < length) {
37     data = matchData[index];
38     var key = data[0],
39         objValue = object[key],
40         srcValue = data[1];
41
42     if (noCustomizer && data[2]) {
43       if (objValue === undefined && !(key in object)) {
44         return false;
45       }
46     } else {
47       var stack = new Stack;
48       if (customizer) {
49         var result = customizer(objValue, srcValue, key, object, source, stack);
50       }
51       if (!(result === undefined
52             ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
53             : result
54           )) {
55         return false;
56       }
57     }
58   }
59   return true;
60 }
61
62 module.exports = baseIsMatch;