UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 5.25 kB
{"version":3,"file":"runtime.mjs","sources":["../../../../../../packages/utils/vue/props/runtime.ts"],"sourcesContent":["import { warn } from 'vue'\nimport { fromPairs } from 'lodash-unified'\nimport { isObject } from '../../types'\nimport { hasOwn } from '../../objects'\n\nimport type { PropType } from 'vue'\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/element-plus/element-plus/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 // filter native prop type and nested prop, e.g `null`, `undefined` (from `buildProps`)\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\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): {\n [K in keyof Props]: IfEpProp<\n Props[K],\n Props[K],\n IfNativePropType<Props[K], Props[K], EpPropConvert<Props[K]>>\n >\n} =>\n fromPairs(\n Object.entries(props).map(([key, option]) => [\n key,\n buildProp(option as any, key),\n ])\n ) as any\n"],"names":[],"mappings":";;;;AAiBO,MAAM,SAAA,GAAY;AAElB,MAAM,cAAA,GAAiB,CAAI,GAAA,KAA0B;AAErD,MAAM,QAAA,GAAW,CAAC,GAAA,KACvB,QAAA,CAAS,GAAG,CAAA,IAAK,CAAC,CAAE,GAAA,CAAY,SAAS;AAsBpC,MAAM,SAAA,GAAY,CAOvB,IAAA,EACA,GAAA,KAC+D;AAE/D,EAAA,IAAI,CAAC,QAAA,CAAS,IAAI,KAAK,QAAA,CAAS,IAAI,GAAG,OAAO,IAAA;AAE9C,EAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,EAAU,SAAS,YAAA,EAAc,IAAA,EAAM,WAAU,GAAI,IAAA;AAErE,EAAA,MAAM,UAAA,GACJ,MAAA,IAAU,SAAA,GACN,CAAC,GAAA,KAAiB;AAChB,IAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,IAAA,IAAI,gBAA2B,EAAC;AAEhC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,aAAA,GAAgB,KAAA,CAAM,KAAK,MAAM,CAAA;AACjC,MAAA,IAAI,MAAA,CAAO,IAAA,EAAM,SAAS,CAAA,EAAG;AAC3B,QAAA,aAAA,CAAc,KAAK,YAAY,CAAA;AAAA,MACjC;AACA,MAAA,KAAA,KAAA,KAAA,GAAU,aAAA,CAAc,SAAS,GAAG,CAAA,CAAA;AAAA,IACtC;AACA,IAAA,IAAI,SAAA,EAAW,KAAA,KAAA,KAAA,GAAU,SAAA,CAAU,GAAG,CAAA,CAAA;AAEtC,IAAA,IAAI,CAAC,KAAA,IAAS,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG;AACtC,MAAA,MAAM,kBAAkB,CAAC,GAAG,IAAI,GAAA,CAAI,aAAa,CAAC,CAAA,CAC/C,GAAA,CAAI,CAAC,UAAU,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA,CACpC,KAAK,IAAI,CAAA;AACZ,MAAA,IAAA;AAAA,QACE,CAAA,+BAAA,EACE,MAAM,CAAA,WAAA,EAAc,GAAG,MAAM,EAC/B,CAAA,mBAAA,EAAsB,eAAe,CAAA,aAAA,EAAgB,IAAA,CAAK,SAAA;AAAA,UACxD;AAAA,SACD,CAAA,CAAA;AAAA,OACH;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,GACA,MAAA;AAEN,EAAA,MAAM,MAAA,GAAc;AAAA,IAClB,IAAA;AAAA,IACA,QAAA,EAAU,CAAC,CAAC,QAAA;AAAA,IACZ,SAAA,EAAW,UAAA;AAAA,IACX,CAAC,SAAS,GAAG;AAAA,GACf;AACA,EAAA,IAAI,MAAA,CAAO,IAAA,EAAM,SAAS,CAAA,SAAU,OAAA,GAAU,YAAA;AAC9C,EAAA,OAAO,MAAA;AACT;AAEO,MAAM,UAAA,GAAa,CAQxB,KAAA,KAQA,SAAA;AAAA,EACE,MAAA,CAAO,QAAQ,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,MAAM,CAAA,KAAM;AAAA,IAC3C,GAAA;AAAA,IACA,SAAA,CAAU,QAAe,GAAG;AAAA,GAC7B;AACH;;;;"}