You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.2 KiB
60 lines
1.2 KiB
/*! |
|
* 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; |
|
} |
|
} |
|
};
|
|
|