index.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. function getType(payload) {
  2. return Object.prototype.toString.call(payload).slice(8, -1);
  3. }
  4. function isAnyObject(payload) {
  5. return getType(payload) === "Object";
  6. }
  7. function isArray(payload) {
  8. return getType(payload) === "Array";
  9. }
  10. function isBlob(payload) {
  11. return getType(payload) === "Blob";
  12. }
  13. function isBoolean(payload) {
  14. return getType(payload) === "Boolean";
  15. }
  16. function isDate(payload) {
  17. return getType(payload) === "Date" && !isNaN(payload);
  18. }
  19. function isEmptyArray(payload) {
  20. return isArray(payload) && payload.length === 0;
  21. }
  22. function isPlainObject(payload) {
  23. if (getType(payload) !== "Object")
  24. return false;
  25. const prototype = Object.getPrototypeOf(payload);
  26. return !!prototype && prototype.constructor === Object && prototype === Object.prototype;
  27. }
  28. function isEmptyObject(payload) {
  29. return isPlainObject(payload) && Object.keys(payload).length === 0;
  30. }
  31. function isEmptyString(payload) {
  32. return payload === "";
  33. }
  34. function isError(payload) {
  35. return getType(payload) === "Error" || payload instanceof Error;
  36. }
  37. function isFile(payload) {
  38. return getType(payload) === "File";
  39. }
  40. function isFullArray(payload) {
  41. return isArray(payload) && payload.length > 0;
  42. }
  43. function isFullObject(payload) {
  44. return isPlainObject(payload) && Object.keys(payload).length > 0;
  45. }
  46. function isString(payload) {
  47. return getType(payload) === "String";
  48. }
  49. function isFullString(payload) {
  50. return isString(payload) && payload !== "";
  51. }
  52. function isFunction(payload) {
  53. return typeof payload === "function";
  54. }
  55. function isType(payload, type) {
  56. if (!(type instanceof Function)) {
  57. throw new TypeError("Type must be a function");
  58. }
  59. if (!Object.prototype.hasOwnProperty.call(type, "prototype")) {
  60. throw new TypeError("Type is not a class");
  61. }
  62. const name = type.name;
  63. return getType(payload) === name || Boolean(payload && payload.constructor === type);
  64. }
  65. function isInstanceOf(value, classOrClassName) {
  66. if (typeof classOrClassName === "function") {
  67. for (let p = value; p; p = Object.getPrototypeOf(p)) {
  68. if (isType(p, classOrClassName)) {
  69. return true;
  70. }
  71. }
  72. return false;
  73. } else {
  74. for (let p = value; p; p = Object.getPrototypeOf(p)) {
  75. if (getType(p) === classOrClassName) {
  76. return true;
  77. }
  78. }
  79. return false;
  80. }
  81. }
  82. function isMap(payload) {
  83. return getType(payload) === "Map";
  84. }
  85. function isNaNValue(payload) {
  86. return getType(payload) === "Number" && isNaN(payload);
  87. }
  88. function isNumber(payload) {
  89. return getType(payload) === "Number" && !isNaN(payload);
  90. }
  91. function isNegativeNumber(payload) {
  92. return isNumber(payload) && payload < 0;
  93. }
  94. function isNull(payload) {
  95. return getType(payload) === "Null";
  96. }
  97. function isOneOf(a, b, c, d, e) {
  98. return (value) => a(value) || b(value) || !!c && c(value) || !!d && d(value) || !!e && e(value);
  99. }
  100. function isUndefined(payload) {
  101. return getType(payload) === "Undefined";
  102. }
  103. const isNullOrUndefined = isOneOf(isNull, isUndefined);
  104. function isObject(payload) {
  105. return isPlainObject(payload);
  106. }
  107. function isObjectLike(payload) {
  108. return isAnyObject(payload);
  109. }
  110. function isPositiveNumber(payload) {
  111. return isNumber(payload) && payload > 0;
  112. }
  113. function isSymbol(payload) {
  114. return getType(payload) === "Symbol";
  115. }
  116. function isPrimitive(payload) {
  117. return isBoolean(payload) || isNull(payload) || isUndefined(payload) || isNumber(payload) || isString(payload) || isSymbol(payload);
  118. }
  119. function isPromise(payload) {
  120. return getType(payload) === "Promise";
  121. }
  122. function isRegExp(payload) {
  123. return getType(payload) === "RegExp";
  124. }
  125. function isSet(payload) {
  126. return getType(payload) === "Set";
  127. }
  128. function isWeakMap(payload) {
  129. return getType(payload) === "WeakMap";
  130. }
  131. function isWeakSet(payload) {
  132. return getType(payload) === "WeakSet";
  133. }
  134. export { getType, isAnyObject, isArray, isBlob, isBoolean, isDate, isEmptyArray, isEmptyObject, isEmptyString, isError, isFile, isFullArray, isFullObject, isFullString, isFunction, isInstanceOf, isMap, isNaNValue, isNegativeNumber, isNull, isNullOrUndefined, isNumber, isObject, isObjectLike, isOneOf, isPlainObject, isPositiveNumber, isPrimitive, isPromise, isRegExp, isSet, isString, isSymbol, isType, isUndefined, isWeakMap, isWeakSet };