| /*! | 
|  * 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; | 
|     } | 
|   } | 
| }; |