github.com/e154/smart-home@v0.17.2-0.20240311175135-e530a6e5cd45/static_source/admin/src/utils/is.ts (about)

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