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 }