{"version":3,"file":"objects.mjs","sources":["../../../../../packages/utils/objects.ts"],"sourcesContent":["import { get, set } from 'lodash-unified'\nimport type { Entries } from 'type-fest'\nimport type { Arrayable } from '.'\n\nexport const keysOf = <T>(arr: T) => Object.keys(arr as any) as Array<keyof T>\nexport const entriesOf = <T>(arr: T) => Object.entries(arr as any) as Entries<T>\nexport { hasOwn } from '@vue/shared'\n\nexport const getProp = <T = any>(\n  obj: Record<string, any>,\n  path: Arrayable<string>,\n  defaultValue?: any\n): { value: T } => {\n  return {\n    get value() {\n      return get(obj, path, defaultValue)\n    },\n    set value(val: any) {\n      set(obj, path, val)\n    },\n  }\n}\n\n/**\n * 分离对象中的 on 和 props，并重命名 onXxx 为 xxx\n * @param obj\n * @returns { on: {}, props: {} }\n */\nexport function separateOnAndProps<T extends Record<string, any>>(obj: T) {\n  const on: Record<string, any> = {}\n  const props: Record<string, any> = {}\n\n  // 正则表达式：匹配以 \"on\" 开头，且后面紧跟大写字母的属性\n  const eventPattern = /^on[A-Z][a-zA-Z]*$/\n\n  // 遍历对象，分离符合 onXxx 格式的事件和其他属性\n  Object.entries(obj).forEach(([key, value]) => {\n    if (eventPattern.test(key)) {\n      // 将 onXxx 转换为 xxx 格式，并转为小写\n      const eventName = key.replace(/^on([A-Z])/, (_, letter) =>\n        letter.toLowerCase()\n      )\n      on[eventName] = value\n    } else {\n      // 其他属性放入 props 对象中\n      props[key] = value\n    }\n  })\n\n  return { on, props }\n}\n\nexport type Writeable<T> = { -readonly [P in keyof T]: T[P] }\n\nexport function pick<T, U extends keyof T>(\n  obj: T,\n  keys: ReadonlyArray<U>,\n  ignoreUndefined?: boolean\n) {\n  return keys.reduce((ret, key) => {\n    if (!ignoreUndefined || obj[key] !== undefined) {\n      ret[key] = obj[key]\n    }\n    return ret\n  }, {} as Writeable<Pick<T, U>>)\n}\n\nexport const flat = <T>(arr: Array<T | T[]>) =>\n  arr.reduce<T[]>((acc, val) => acc.concat(val), [])\n\nexport const isSameValue = (newValue: unknown, oldValue: unknown) =>\n  JSON.stringify(newValue) === JSON.stringify(oldValue)\n"],"names":[],"mappings":";;;AAIO,MAAM,MAAS,GAAA,CAAI,GAAW,KAAA,MAAA,CAAO,KAAK,GAAU,EAAA;AACpD,MAAM,SAAY,GAAA,CAAI,GAAW,KAAA,MAAA,CAAO,QAAQ,GAAU,EAAA;AAG1D,MAAM,OAAU,GAAA,CACrB,GACA,EAAA,IAAA,EACA,YACiB,KAAA;AACjB,EAAO,OAAA;AAAA,IACL,IAAI,KAAQ,GAAA;AACV,MAAO,OAAA,GAAA,CAAI,GAAK,EAAA,IAAA,EAAM,YAAY,CAAA,CAAA;AAAA,KACpC;AAAA,IACA,IAAI,MAAM,GAAU,EAAA;AAClB,MAAI,GAAA,CAAA,GAAA,EAAK,MAAM,GAAG,CAAA,CAAA;AAAA,KACpB;AAAA,GACF,CAAA;AACF,EAAA;AAOO,SAAS,mBAAkD,GAAQ,EAAA;AACxE,EAAA,MAAM,KAA0B,EAAC,CAAA;AACjC,EAAA,MAAM,QAA6B,EAAC,CAAA;AAGpC,EAAA,MAAM,YAAe,GAAA,oBAAA,CAAA;AAGrB,EAAO,MAAA,CAAA,OAAA,CAAQ,GAAG,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAM,KAAA;AAC5C,IAAI,IAAA,YAAA,CAAa,IAAK,CAAA,GAAG,CAAG,EAAA;AAE1B,MAAA,MAAM,YAAY,GAAI,CAAA,OAAA;AAAA,QAAQ,YAAA;AAAA,QAAc,CAAC,CAAA,EAAG,MAC9C,KAAA,MAAA,CAAO,WAAY,EAAA;AAAA,OACrB,CAAA;AACA,MAAA,EAAA,CAAG,SAAa,CAAA,GAAA,KAAA,CAAA;AAAA,KACX,MAAA;AAEL,MAAA,KAAA,CAAM,GAAO,CAAA,GAAA,KAAA,CAAA;AAAA,KACf;AAAA,GACD,CAAA,CAAA;AAED,EAAO,OAAA,EAAE,IAAI,KAAM,EAAA,CAAA;AACrB,CAAA;AAIgB,SAAA,IAAA,CACd,GACA,EAAA,IAAA,EACA,eACA,EAAA;AACA,EAAA,OAAO,IAAK,CAAA,MAAA,CAAO,CAAC,GAAA,EAAK,GAAQ,KAAA;AAC/B,IAAA,IAAI,CAAC,eAAA,IAAmB,GAAI,CAAA,GAAA,CAAA,KAAS,KAAW,CAAA,EAAA;AAC9C,MAAA,GAAA,CAAI,OAAO,GAAI,CAAA,GAAA,CAAA,CAAA;AAAA,KACjB;AACA,IAAO,OAAA,GAAA,CAAA;AAAA,GACT,EAAG,EAA2B,CAAA,CAAA;AAChC,CAAA;AAEO,MAAM,IAAO,GAAA,CAAI,GACtB,KAAA,GAAA,CAAI,MAAY,CAAA,CAAC,GAAK,EAAA,GAAA,KAAQ,GAAI,CAAA,MAAA,CAAO,GAAG,CAAA,EAAG,EAAE,EAAA;AAEtC,MAAA,WAAA,GAAc,CAAC,QAAA,EAAmB,QAC7C,KAAA,IAAA,CAAK,UAAU,QAAQ,CAAA,KAAM,IAAK,CAAA,SAAA,CAAU,QAAQ;;;;"}