diff options
Diffstat (limited to 'node_modules/has-values/index.js')
-rw-r--r-- | node_modules/has-values/index.js | 66 |
1 files changed, 45 insertions, 21 deletions
diff --git a/node_modules/has-values/index.js b/node_modules/has-values/index.js index 6d04ba1fe..9bebb9fcb 100644 --- a/node_modules/has-values/index.js +++ b/node_modules/has-values/index.js @@ -1,36 +1,60 @@ /*! * has-values <https://github.com/jonschlinkert/has-values> * - * Copyright (c) 2014-2015, Jon Schlinkert. - * Licensed under the MIT License. + * Copyright (c) 2014-2015, 2017, Jon Schlinkert. + * Released under the MIT License. */ 'use strict'; -module.exports = function hasValue(o, noZero) { - if (o === null || o === undefined) { - return false; - } - - if (typeof o === 'boolean') { - return true; - } +var typeOf = require('kind-of'); +var isNumber = require('is-number'); - if (typeof o === 'number') { - if (o === 0 && noZero === true) { - return false; - } +module.exports = function hasValue(val) { + // is-number checks for NaN and other edge cases + if (isNumber(val)) { return true; } - if (o.length !== undefined) { - return o.length !== 0; - } - - for (var key in o) { - if (o.hasOwnProperty(key)) { + switch (typeOf(val)) { + case 'null': + case 'boolean': + case 'function': return true; + case 'string': + case 'arguments': + return val.length !== 0; + case 'error': + return val.message !== ''; + case 'array': + var len = val.length; + if (len === 0) { + return false; + } + for (var i = 0; i < len; i++) { + if (hasValue(val[i])) { + return true; + } + } + return false; + case 'file': + case 'map': + case 'set': + return val.size !== 0; + case 'object': + var keys = Object.keys(val); + if (keys.length === 0) { + return false; + } + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (hasValue(val[key])) { + return true; + } + } + return false; + default: { + return false; } } - return false; }; |