{"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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"}