{"version":3,"file":"runtime.mjs","sources":["../../../../../../../packages/utils/vue/props/runtime.ts"],"sourcesContent":["import { warn } from 'vue-demi'\nimport { fromPairs } from 'lodash-unified'\nimport { isObject } from '../../types'\nimport { hasOwn } from '../../objects'\n\nimport type { PropType } from 'vue-demi'\nimport type {\n  EpProp,\n  EpPropConvert,\n  EpPropFinalized,\n  EpPropInput,\n  EpPropMergeType,\n  IfEpProp,\n  IfNativePropType,\n  NativePropType,\n} from './types'\n\nexport const epPropKey = '__epPropKey'\n\nexport const definePropType = <T>(val: any): PropType<T> => val\n\nexport const isEpProp = (val: unknown): val is EpProp<any, any, any> =>\n  isObject(val) && !!(val as any)[epPropKey]\n\n/**\n * @description Build prop. It can better optimize prop types\n * @description 生成 prop，能更好地优化类型\n * @example\n // limited options\n // the type will be PropType<'light' | 'dark'>\n buildProp({\n type: String,\n values: ['light', 'dark'],\n } as const)\n * @example\n // limited options and other types\n // the type will be PropType<'small' | 'large' | number>\n buildProp({\n type: [String, Number],\n values: ['small', 'large'],\n validator: (val: unknown): val is number => typeof val === 'number',\n } as const)\n @link see more: https://github.com/xzx-design/xzx-design/pull/3341\n */\nexport const buildProp = <\n  Type = never,\n  Value = never,\n  Validator = never,\n  Default extends EpPropMergeType<Type, Value, Validator> = never,\n  Required extends boolean = false\n>(\n  prop: EpPropInput<Type, Value, Validator, Default, Required>,\n  key?: string\n): EpPropFinalized<Type, Value, Validator, Default, Required> => {\n  // 过滤原生属性类型和嵌套属性（如 null，undefined）\n  if (!isObject(prop) || isEpProp(prop)) return prop as any\n\n  const { values, required, default: defaultValue, type, validator } = prop\n\n  const _validator =\n    values || validator\n      ? (val: unknown) => {\n          let valid = false\n          let allowedValues: unknown[] = []\n\n          if (values) {\n            allowedValues = Array.from(values)\n            if (hasOwn(prop, 'default')) {\n              allowedValues.push(defaultValue)\n            }\n            valid ||= allowedValues.includes(val)\n          }\n          if (validator) valid ||= validator(val)\n\n          if (!valid && allowedValues.length > 0) {\n            const allowValuesText = [...new Set(allowedValues)]\n              .map((value) => JSON.stringify(value))\n              .join(', ')\n            warn(\n              `Invalid prop: validation failed${\n                key ? ` for prop \"${key}\"` : ''\n              }. Expected one of [${allowValuesText}], got value ${JSON.stringify(\n                val\n              )}.`\n            )\n          }\n          return valid\n        }\n      : undefined\n\n  const epProp: any = {\n    type,\n    required: !!required,\n    validator: _validator,\n    [epPropKey]: true,\n  }\n  if (hasOwn(prop, 'default')) epProp.default = defaultValue\n  return epProp\n}\n\ntype BindPropsReturn<T> = {\n  [K in keyof T]: IfEpProp<\n    T[K],\n    T[K],\n    IfNativePropType<T[K], T[K], EpPropConvert<T[K]>>\n  >\n}\n\nexport const buildProps = <\n  Props extends Record<\n    string,\n    | { [epPropKey]: true }\n    | NativePropType\n    | EpPropInput<any, any, any, any, any>\n  >\n>(\n  props: Props\n): BindPropsReturn<Props> => {\n  return fromPairs(\n    Object.entries(props).map(([key, option]) => [\n      key,\n      buildProp(option as any, key),\n    ])\n  ) as any\n}\n\nexport type Interceptor = (\n  ...args: any[]\n) => Promise<boolean> | boolean | undefined | void\n\nexport const unknownProp = null as unknown as PropType<unknown>\n\nexport const numericProp = [Number, String]\n\nexport const truthProp = {\n  type: Boolean,\n  default: true as const,\n}\n\nexport const makeRequiredProp = <T>(type: T) => ({\n  type,\n  required: true as const,\n})\n\nexport const makeArrayProp = <T>() => ({\n  type: Array as PropType<T[]>,\n  default: () => [],\n})\n\nexport const makeNumberProp = <T>(defaultVal: T) => ({\n  type: Number,\n  default: defaultVal,\n})\n\nexport const makeNumericProp = <T>(defaultVal: T) => ({\n  type: numericProp,\n  default: defaultVal,\n})\n\nexport const makeStringProp = <T>(defaultVal: T) => ({\n  type: String as unknown as PropType<T>,\n  default: defaultVal,\n})\n\nexport const makeObjectProp = <T>(defaultVal: T | null) => ({\n  type: Object as unknown as PropType<T>,\n  default: defaultVal,\n})\n"],"names":[],"mappings":"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"}