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.

index.js 1.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*!
  2. * has-values <https://github.com/jonschlinkert/has-values>
  3. *
  4. * Copyright (c) 2014-2015, 2017, Jon Schlinkert.
  5. * Released under the MIT License.
  6. */
  7. 'use strict';
  8. var typeOf = require('kind-of');
  9. var isNumber = require('is-number');
  10. module.exports = function hasValue(val) {
  11. // is-number checks for NaN and other edge cases
  12. if (isNumber(val)) {
  13. return true;
  14. }
  15. switch (typeOf(val)) {
  16. case 'null':
  17. case 'boolean':
  18. case 'function':
  19. return true;
  20. case 'string':
  21. case 'arguments':
  22. return val.length !== 0;
  23. case 'error':
  24. return val.message !== '';
  25. case 'array':
  26. var len = val.length;
  27. if (len === 0) {
  28. return false;
  29. }
  30. for (var i = 0; i < len; i++) {
  31. if (hasValue(val[i])) {
  32. return true;
  33. }
  34. }
  35. return false;
  36. case 'file':
  37. case 'map':
  38. case 'set':
  39. return val.size !== 0;
  40. case 'object':
  41. var keys = Object.keys(val);
  42. if (keys.length === 0) {
  43. return false;
  44. }
  45. for (var i = 0; i < keys.length; i++) {
  46. var key = keys[i];
  47. if (hasValue(val[key])) {
  48. return true;
  49. }
  50. }
  51. return false;
  52. default: {
  53. return false;
  54. }
  55. }
  56. };