| /*! |
| * has-values <https://github.com/jonschlinkert/has-values> |
| * |
| * Copyright (c) 2014-2015, 2017, Jon Schlinkert. |
| * Released under the MIT License. |
| */ |
| |
| 'use strict'; |
| |
| var typeOf = require('kind-of'); |
| var isNumber = require('is-number'); |
| |
| module.exports = function hasValue(val) { |
| // is-number checks for NaN and other edge cases |
| if (isNumber(val)) { |
| return true; |
| } |
| |
| 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; |
| } |
| } |
| }; |