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.

101 lines
2.4 KiB

  1. /* eslint-disable */
  2. const toString = Object.prototype.toString;
  3. export function is(val: unknown, type: string) {
  4. return toString.call(val) === `[object ${type}]`;
  5. }
  6. export function isDef<T = unknown>(val?: T): val is T {
  7. return typeof val !== "undefined";
  8. }
  9. export function isUnDef<T = unknown>(val?: T): val is T {
  10. return !isDef(val);
  11. }
  12. export function isObject(val: any): val is Record<any, any> {
  13. return val !== null && is(val, "Object");
  14. }
  15. export function isEmpty<T = unknown>(val: T): val is T {
  16. if (isArray(val) || isString(val)) {
  17. return val.length === 0;
  18. }
  19. if (val instanceof Map || val instanceof Set) {
  20. return val.size === 0;
  21. }
  22. if (isObject(val)) {
  23. return Object.keys(val).length === 0;
  24. }
  25. return false;
  26. }
  27. export function isDate(val: unknown): val is Date {
  28. return is(val, "Date");
  29. }
  30. export function isNull(val: unknown): val is null {
  31. return val === null;
  32. }
  33. export function isNullAndUnDef(val: unknown): val is null | undefined {
  34. return isUnDef(val) && isNull(val);
  35. }
  36. export function isNullOrUnDef(val: unknown): val is null | undefined {
  37. return isUnDef(val) || isNull(val);
  38. }
  39. export function isNumber(val: unknown): val is number {
  40. return is(val, "Number");
  41. }
  42. export function isPromise<T = any>(val: unknown): val is Promise<T> {
  43. return (
  44. is(val, "Promise") &&
  45. isObject(val) &&
  46. isFunction(val.then) &&
  47. isFunction(val.catch)
  48. );
  49. }
  50. export function isString(val: unknown): val is string {
  51. return is(val, "String");
  52. }
  53. export function isFunction(val: unknown): val is Function {
  54. return typeof val === "function";
  55. }
  56. export function isBoolean(val: unknown): val is boolean {
  57. return is(val, "Boolean");
  58. }
  59. export function isRegExp(val: unknown): val is RegExp {
  60. return is(val, "RegExp");
  61. }
  62. export function isArray(val: any): val is Array<any> {
  63. return val && Array.isArray(val);
  64. }
  65. export function isWindow(val: any): val is Window {
  66. return typeof window !== "undefined" && is(val, "Window");
  67. }
  68. export function isElement(val: unknown): val is Element {
  69. return isObject(val) && !!val.tagName;
  70. }
  71. export const isServer = typeof window === "undefined";
  72. export const isClient = !isServer;
  73. export function isUrl(path: string): boolean {
  74. const reg =
  75. /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/;
  76. return reg.test(path);
  77. }