UNPKG

vue-cesium

Version:
1 lines 7.46 kB
{"version":3,"file":"props.mjs","sources":["../../../../packages/utils/props.ts"],"sourcesContent":["import { warn } from 'vue'\nimport { isObject } from './util'\nimport { fromPairs } from 'lodash-unified'\nimport type { ExtractPropTypes, PropType } from 'vue'\nimport type { Mutable } from './types'\n\nconst wrapperKey = Symbol()\nexport type PropWrapper<T> = { [wrapperKey]: T }\n\nexport const propKey = '__vcPropsReservedKey'\n\ntype ResolveProp<T> = ExtractPropTypes<{\n key: { type: T; required: true }\n}>['key']\ntype ResolvePropType<T> = ResolveProp<T> extends { type: infer V } ? V : ResolveProp<T>\ntype ResolvePropTypeWithReadonly<T> = Readonly<T> extends Readonly<Array<infer A>> ? ResolvePropType<A[]> : ResolvePropType<T>\n\ntype IfUnknown<T, V> = [unknown] extends [T] ? V : T\n\nexport type BuildPropOption<T, D extends BuildPropType<T, V, C>, R, V, C> = {\n type?: T\n values?: readonly V[]\n required?: R\n default?: R extends true ? never : D extends Record<string, unknown> | Array<any> ? () => D : (() => D) | D\n validator?: ((val: any) => val is C) | ((val: any) => boolean)\n}\n\ntype _BuildPropType<T, V, C> =\n | (T extends PropWrapper<unknown> ? T[typeof wrapperKey] : [V] extends [never] ? ResolvePropTypeWithReadonly<T> : never)\n | V\n | C\nexport type BuildPropType<T, V, C> = _BuildPropType<IfUnknown<T, never>, IfUnknown<V, never>, IfUnknown<C, never>>\n\ntype _BuildPropDefault<T, D> = [T] extends [\n // eslint-disable-next-line @typescript-eslint/ban-types\n Record<string, unknown> | Array<any> | Function\n]\n ? D\n : D extends () => T\n ? ReturnType<D>\n : D\n\nexport type BuildPropDefault<T, D, R> = R extends true\n ? { readonly default?: undefined }\n : {\n readonly default: Exclude<D, undefined> extends never ? undefined : Exclude<_BuildPropDefault<T, D>, undefined>\n }\nexport type BuildPropReturn<T, D, R, V, C> = {\n readonly type: PropType<BuildPropType<T, V, C>>\n readonly required: IfUnknown<R, false>\n readonly validator: ((val: unknown) => boolean) | undefined\n [propKey]: true\n} & BuildPropDefault<BuildPropType<T, V, C>, IfUnknown<D, never>, IfUnknown<R, false>>\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 function buildProp<T = never, D extends BuildPropType<T, V, C> = never, R extends boolean = false, V = never, C = never>(\n option: BuildPropOption<T, D, R, V, C>,\n key?: string\n): BuildPropReturn<T, D, R, V, C> {\n // filter native prop type and nested prop, e.g `null`, `undefined` (from `buildProps`)\n if (!isObject(option) || !!option[propKey]) return option as any\n\n const { values, required, default: defaultValue, type, validator } = option\n\n const _validator =\n values || validator\n ? (val: unknown) => {\n let valid = false\n let allowedValues: unknown[] = []\n\n if (values) {\n allowedValues = [...values, defaultValue]\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)].map(value => JSON.stringify(value)).join(', ')\n warn(\n `Invalid prop: validation failed${key ? ` for prop \"${key}\"` : ''}. Expected one of [${allowValuesText}], got value ${JSON.stringify(\n val\n )}.`\n )\n }\n return valid\n }\n : undefined\n\n return {\n type: typeof type === 'object' && Object.getOwnPropertySymbols(type).includes(wrapperKey) ? type[wrapperKey] : type,\n required: !!required,\n default: defaultValue,\n validator: _validator,\n [propKey]: true\n } as unknown as BuildPropReturn<T, D, R, V, C>\n}\n\ntype NativePropType = [((...args: any) => any) | { new (...args: any): any } | undefined | null]\n\nexport const buildProps = <\n O extends {\n [K in keyof O]: O[K] extends BuildPropReturn<any, any, any, any, any>\n ? O[K]\n : [O[K]] extends NativePropType\n ? O[K]\n : O[K] extends BuildPropOption<infer T, infer D, infer R, infer V, infer C>\n ? D extends BuildPropType<T, V, C>\n ? BuildPropOption<T, D, R, V, C>\n : never\n : never\n }\n>(\n props: O\n) =>\n fromPairs(Object.entries(props).map(([key, option]) => [key, buildProp(option as any, key)])) as unknown as {\n [K in keyof O]: O[K] extends { [propKey]: boolean }\n ? O[K]\n : [O[K]] extends NativePropType\n ? O[K]\n : O[K] extends BuildPropOption<\n infer T,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n infer _D,\n infer R,\n infer V,\n infer C\n >\n ? BuildPropReturn<T, O[K]['default'], R, V, C>\n : never\n }\n\nexport const definePropType = <T>(val: any) => ({ [wrapperKey]: val } as PropWrapper<T>)\n\nexport const keyOf = <T>(arr: T) => Object.keys(arr) as Array<keyof T>\nexport const mutable = <T extends readonly any[] | Record<string, unknown>>(val: T) => val as Mutable<typeof val>\n"],"names":[],"mappings":";;;;;;AAMA,MAAM,aAAa,MAAO,EAAA,CAAA;AAGnB,MAAM,OAAU,GAAA,uBAAA;AAiEP,SAAA,SAAA,CACd,QACA,GACgC,EAAA;AAEhC,EAAA,IAAI,CAAC,QAAS,CAAA,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO,CAAA;AAAG,IAAO,OAAA,MAAA,CAAA;AAEnD,EAAA,MAAM,EAAE,MAAQ,EAAA,QAAA,EAAU,SAAS,YAAc,EAAA,IAAA,EAAM,WAAc,GAAA,MAAA,CAAA;AAErE,EAAA,MAAM,UACJ,GAAA,MAAA,IAAU,SACN,GAAA,CAAC,GAAiB,KAAA;AAChB,IAAA,IAAI,KAAQ,GAAA,KAAA,CAAA;AACZ,IAAA,IAAI,gBAA2B,EAAC,CAAA;AAEhC,IAAA,IAAI,MAAQ,EAAA;AACV,MAAgB,aAAA,GAAA,CAAC,GAAG,MAAA,EAAQ,YAAY,CAAA,CAAA;AACxC,MAAU,KAAA,KAAA,KAAA,GAAA,aAAA,CAAc,SAAS,GAAG,CAAA,CAAA,CAAA;AAAA,KACtC;AACA,IAAI,IAAA,SAAA;AAAW,MAAA,KAAA,KAAA,KAAA,GAAU,UAAU,GAAG,CAAA,CAAA,CAAA;AAEtC,IAAA,IAAI,CAAC,KAAA,IAAS,aAAc,CAAA,MAAA,GAAS,CAAG,EAAA;AACtC,MAAA,MAAM,kBAAkB,CAAC,GAAG,IAAI,GAAA,CAAI,aAAa,CAAC,CAAA,CAAE,GAAI,CAAA,CAAA,KAAA,KAAS,KAAK,SAAU,CAAA,KAAK,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA,CAAA;AACjG,MAAA,IAAA;AAAA,QACE,CAAA,+BAAA,EAAkC,MAAM,CAAc,WAAA,EAAA,GAAG,MAAM,EAAE,CAAA,mBAAA,EAAsB,eAAe,CAAA,aAAA,EAAgB,IAAK,CAAA,SAAA;AAAA,UACzH,GAAA;AAAA,SACD,CAAA,CAAA,CAAA;AAAA,OACH,CAAA;AAAA,KACF;AACA,IAAO,OAAA,KAAA,CAAA;AAAA,GAET,GAAA,KAAA,CAAA,CAAA;AAEN,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,OAAO,IAAS,KAAA,QAAA,IAAY,MAAO,CAAA,qBAAA,CAAsB,IAAI,CAAA,CAAE,QAAS,CAAA,UAAU,CAAI,GAAA,IAAA,CAAK,UAAU,CAAI,GAAA,IAAA;AAAA,IAC/G,QAAA,EAAU,CAAC,CAAC,QAAA;AAAA,IACZ,OAAS,EAAA,YAAA;AAAA,IACT,SAAW,EAAA,UAAA;AAAA,IACX,CAAC,OAAO,GAAG,IAAA;AAAA,GACb,CAAA;AACF,CAAA;AAIa,MAAA,UAAA,GAAa,CAaxB,KAEA,KAAA,SAAA,CAAU,OAAO,OAAQ,CAAA,KAAK,EAAE,GAAI,CAAA,CAAC,CAAC,GAAK,EAAA,MAAM,MAAM,CAAC,GAAA,EAAK,UAAU,MAAe,EAAA,GAAG,CAAC,CAAC,CAAC,EAAA;AAiBvF,MAAM,iBAAiB,CAAI,GAAA,MAAc,EAAE,CAAC,UAAU,GAAG,GAAI,EAAA,EAAA;AAE7D,MAAM,KAAQ,GAAA,CAAI,GAAW,KAAA,MAAA,CAAO,KAAK,GAAG,EAAA;AACtC,MAAA,OAAA,GAAU,CAAqD,GAAW,KAAA;;;;"}