UNPKG

underarm

Version:

Transducers for JavaScript with Underscore API and Async extensions

81 lines (72 loc) 1.57 kB
'use strict' // Based on Underscore.js 1.7.0 // http://underscorejs.org // // Which is distributed under MIT License: // Underscore.js > (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors // Underscore.js > Underscore may be freely distributed under the MIT license. var util = require('./util-internal'), isFunction = util.isFunction, isArray = util.isArray, isString = util.isString, isNumber = util.isNumber, identity = util.identity module.exports = function(_r){ var _ = _r._ || {} _r._ = _ _.iteratee = iteratee _.matches = matches _.property = property } function iteratee(value){ var f if(isNull(value)){ f = identity } else if(isFunction(value)){ f = value } else if(isKey(value)){ f = property(value) } else { f = matches(value) } return f } function property(key){ return function(value){ return value[key] } } function matches(attrs){ var ps = pairs(attrs), len = ps.length return function(value){ if(isNull(value)){ return len === 0 } var i = 0, p, k, v for(; i < len; i++){ p = ps[i] k = p[0] v = p[1] if(v !== value[k] || !(k in value)){ return false } } return true } } function isNull(value){ return value === void 0 || value === null } function isKey(value){ return isString(value) || isNumber(value) } function pairs(value){ var key, ps = [] for(key in value){ if(value.hasOwnProperty(key)){ ps.push([key, value[key]]) } } return ps }