UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 8.54 kB
{"version":3,"file":"util.mjs","sources":["../../../../packages/utils/util.ts"],"sourcesContent":["import { getCurrentInstance } from 'vue'\nimport {\n camelize,\n capitalize,\n extend,\n hasOwn,\n hyphenate,\n isArray,\n isObject,\n isString,\n isFunction,\n looseEqual,\n toRawType,\n} from '@vue/shared'\nimport isEqualWith from 'lodash/isEqualWith'\nimport isServer from './isServer'\nimport { debugWarn, throwError } from './error'\n\nimport type { ComponentPublicInstance, CSSProperties, Ref } from 'vue'\nimport type { TimeoutHandle, Nullable } from './types'\n\nexport const SCOPE = 'Util'\n\nexport function toObject<T>(arr: Array<T>): Record<string, T> {\n const res = {}\n for (let i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i])\n }\n }\n return res\n}\n\nexport const getValueByPath = (obj, paths = ''): unknown => {\n let ret: unknown = obj\n paths.split('.').map((path) => {\n ret = ret?.[path]\n })\n return ret\n}\n\nexport function getPropByPath(\n obj: any,\n path: string,\n strict: boolean\n): {\n o: unknown\n k: string\n v: Nullable<unknown>\n} {\n let tempObj = obj\n let key, value\n\n if (obj && hasOwn(obj, path)) {\n key = path\n value = tempObj?.[path]\n } else {\n path = path.replace(/\\[(\\w+)\\]/g, '.$1')\n path = path.replace(/^\\./, '')\n\n const keyArr = path.split('.')\n let i = 0\n for (i; i < keyArr.length - 1; i++) {\n if (!tempObj && !strict) break\n const key = keyArr[i]\n\n if (key in tempObj) {\n tempObj = tempObj[key]\n } else {\n if (strict) {\n throwError(SCOPE, 'Please transfer a valid prop path to form item!')\n }\n break\n }\n }\n key = keyArr[i]\n value = tempObj?.[keyArr[i]]\n }\n return {\n o: tempObj,\n k: key,\n v: value,\n }\n}\n\n/**\n * Generate random number in range [0, 1000]\n * Maybe replace with [uuid](https://www.npmjs.com/package/uuid)\n */\nexport const generateId = (): number => Math.floor(Math.random() * 10000)\n\n// use isEqual instead\n// export const valueEquals\n\nexport const escapeRegexpString = (value = ''): string =>\n String(value).replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\n// Use native Array.find, Array.findIndex instead\n\n// coerce truthy value to array\nexport const coerceTruthyValueToArray = (arr) => {\n if (!arr && arr !== 0) {\n return []\n }\n return Array.isArray(arr) ? arr : [arr]\n}\n\n// drop IE and (Edge < 79) support\n// export const isIE\n// export const isEdge\n\nexport const isFirefox = function (): boolean {\n return !isServer && !!window.navigator.userAgent.match(/firefox/i)\n}\n\nexport const autoprefixer = function (style: CSSProperties): CSSProperties {\n const rules = ['transform', 'transition', 'animation']\n const prefixes = ['ms-', 'webkit-']\n rules.forEach((rule) => {\n const value = style[rule]\n if (rule && value) {\n prefixes.forEach((prefix) => {\n style[prefix + rule] = value\n })\n }\n })\n return style\n}\n\nexport const kebabCase = hyphenate\n\n// reexport from lodash & vue shared\nexport { isVNode } from 'vue'\nexport {\n hasOwn,\n // isEmpty,\n // isEqual,\n isObject,\n isArray,\n isString,\n capitalize,\n camelize,\n looseEqual,\n extend,\n}\n\nexport const isBool = (val: unknown): val is boolean => typeof val === 'boolean'\nexport const isNumber = (val: unknown): val is number => typeof val === 'number'\nexport const isHTMLElement = (val: unknown) => toRawType(val).startsWith('HTML')\n\nexport function rafThrottle<T extends (...args: any) => any>(fn: T): T {\n let locked = false\n return function (this: ThisParameterType<T>, ...args: any[]) {\n if (locked) return\n locked = true\n\n window.requestAnimationFrame(() => {\n Reflect.apply(fn, this, args)\n locked = false\n })\n } as T\n}\n\nexport const clearTimer = (timer: Ref<TimeoutHandle>) => {\n clearTimeout(timer.value)\n timer.value = null\n}\n\n/**\n * Generating a random int in range (0, max - 1)\n * @param max {number}\n */\nexport function getRandomInt(max: number) {\n return Math.floor(Math.random() * Math.floor(max))\n}\n\nexport function isUndefined(val: any): val is undefined {\n return val === undefined\n}\n\nexport function useGlobalConfig() {\n const vm: any = getCurrentInstance()\n if ('$ELEMENT' in vm.proxy) {\n return vm.proxy.$ELEMENT\n }\n return {}\n}\n\nexport function isEmpty(val: unknown) {\n if (\n (!val && val !== 0) ||\n (isArray(val) && !val.length) ||\n (isObject(val) && !Object.keys(val).length)\n )\n return true\n\n return false\n}\n\nexport function arrayFlat(arr: unknown[]) {\n return arr.reduce((acm: unknown[], item) => {\n const val = Array.isArray(item) ? arrayFlat(item) : item\n return acm.concat(val)\n }, [])\n}\n\nexport function deduplicate<T>(arr: T[]) {\n return Array.from(new Set(arr))\n}\n\nexport function addUnit(value: string | number) {\n if (isString(value)) {\n return value\n } else if (isNumber(value)) {\n return `${value}px`\n }\n debugWarn(SCOPE, 'binding value must be a string or number')\n return ''\n}\n\n/**\n * Enhance `lodash.isEqual` for it always return false even two functions have completely same statements.\n * @param obj The value to compare\n * @param other The other value to compare\n * @returns Returns `true` if the values are equivalent, else `false`.\n * @example\n * lodash.isEqual(() => 1, () => 1) // false\n * isEqualWith(() => 1, () => 1) // true\n */\nexport function isEqualWithFunction(obj: any, other: any) {\n return isEqualWith(obj, other, (objVal, otherVal) => {\n return isFunction(objVal) && isFunction(otherVal)\n ? `${objVal}` === `${otherVal}`\n : undefined\n })\n}\n\n/**\n * Generate function for attach ref for the h renderer\n * @param ref Ref<HTMLElement | ComponentPublicInstance>\n * @returns (val: T) => void\n */\n\nexport const refAttacher = <T extends HTMLElement | ComponentPublicInstance>(\n ref: Ref<T>\n) => {\n return (val: T) => {\n ref.value = val\n }\n}\n"],"names":[],"mappings":"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"}