| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- import type {
- ComponentInjectOptions,
- ComponentOptions,
- ComponentOptionsBase,
- ComponentOptionsMixin,
- ComponentProvideOptions,
- ComputedOptions,
- MethodOptions,
- RenderFunction,
- } from './componentOptions'
- import type {
- AllowedComponentProps,
- Component,
- ComponentCustomProps,
- GlobalComponents,
- GlobalDirectives,
- SetupContext,
- } from './component'
- import type {
- ComponentObjectPropsOptions,
- ComponentPropsOptions,
- ExtractDefaultPropTypes,
- ExtractPropTypes,
- } from './componentProps'
- import type {
- EmitsOptions,
- EmitsToProps,
- TypeEmitsToOptions,
- } from './componentEmits'
- import { extend, isFunction } from '@vue/shared'
- import type { VNodeProps } from './vnode'
- import type {
- ComponentPublicInstanceConstructor,
- CreateComponentPublicInstanceWithMixins,
- } from './componentPublicInstance'
- import type { SlotsType } from './componentSlots'
- import type { Directive } from './directives'
- import type { ComponentTypeEmits } from './apiSetupHelpers'
- export type PublicProps = VNodeProps &
- AllowedComponentProps &
- ComponentCustomProps
- type ResolveProps<PropsOrPropOptions, E extends EmitsOptions> = Readonly<
- PropsOrPropOptions extends ComponentPropsOptions
- ? ExtractPropTypes<PropsOrPropOptions>
- : PropsOrPropOptions
- > &
- ({} extends E ? {} : EmitsToProps<E>)
- export type DefineComponent<
- PropsOrPropOptions = {},
- RawBindings = {},
- D = {},
- C extends ComputedOptions = ComputedOptions,
- M extends MethodOptions = MethodOptions,
- Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,
- Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
- E extends EmitsOptions = {},
- EE extends string = string,
- PP = PublicProps,
- Props = ResolveProps<PropsOrPropOptions, E>,
- Defaults = ExtractDefaultPropTypes<PropsOrPropOptions>,
- S extends SlotsType = {},
- LC extends Record<string, Component> = {},
- Directives extends Record<string, Directive> = {},
- Exposed extends string = string,
- Provide extends ComponentProvideOptions = ComponentProvideOptions,
- MakeDefaultsOptional extends boolean = true,
- TypeRefs extends Record<string, unknown> = {},
- > = ComponentPublicInstanceConstructor<
- CreateComponentPublicInstanceWithMixins<
- Props,
- RawBindings,
- D,
- C,
- M,
- Mixin,
- Extends,
- E,
- PP & Props,
- Defaults,
- MakeDefaultsOptional,
- {},
- S,
- LC & GlobalComponents,
- Directives & GlobalDirectives,
- Exposed,
- TypeRefs
- >
- > &
- ComponentOptionsBase<
- Props,
- RawBindings,
- D,
- C,
- M,
- Mixin,
- Extends,
- E,
- EE,
- Defaults,
- {},
- string,
- S,
- LC & GlobalComponents,
- Directives & GlobalDirectives,
- Exposed,
- Provide
- > &
- PP
- export type DefineSetupFnComponent<
- P extends Record<string, any>,
- E extends EmitsOptions = {},
- S extends SlotsType = SlotsType,
- Props = P & EmitsToProps<E>,
- PP = PublicProps,
- > = new (
- props: Props & PP,
- ) => CreateComponentPublicInstanceWithMixins<
- Props,
- {},
- {},
- {},
- {},
- ComponentOptionsMixin,
- ComponentOptionsMixin,
- E,
- PP,
- {},
- false,
- {},
- S
- >
- // defineComponent is a utility that is primarily used for type inference
- // when declaring components. Type inference is provided in the component
- // options (provided as the argument). The returned value has artificial types
- // for TSX / manual render function / IDE support.
- // overload 1: direct setup function
- // (uses user defined props interface)
- export function defineComponent<
- Props extends Record<string, any>,
- E extends EmitsOptions = {},
- EE extends string = string,
- S extends SlotsType = {},
- >(
- setup: (
- props: Props,
- ctx: SetupContext<E, S>,
- ) => RenderFunction | Promise<RenderFunction>,
- options?: Pick<ComponentOptions, 'name' | 'inheritAttrs'> & {
- props?: (keyof Props)[]
- emits?: E | EE[]
- slots?: S
- },
- ): DefineSetupFnComponent<Props, E, S>
- export function defineComponent<
- Props extends Record<string, any>,
- E extends EmitsOptions = {},
- EE extends string = string,
- S extends SlotsType = {},
- >(
- setup: (
- props: Props,
- ctx: SetupContext<E, S>,
- ) => RenderFunction | Promise<RenderFunction>,
- options?: Pick<ComponentOptions, 'name' | 'inheritAttrs'> & {
- props?: ComponentObjectPropsOptions<Props>
- emits?: E | EE[]
- slots?: S
- },
- ): DefineSetupFnComponent<Props, E, S>
- // overload 2: defineComponent with options object, infer props from options
- export function defineComponent<
- // props
- TypeProps,
- RuntimePropsOptions extends
- ComponentObjectPropsOptions = ComponentObjectPropsOptions,
- RuntimePropsKeys extends string = string,
- // emits
- TypeEmits extends ComponentTypeEmits = {},
- RuntimeEmitsOptions extends EmitsOptions = {},
- RuntimeEmitsKeys extends string = string,
- // other options
- Data = {},
- SetupBindings = {},
- Computed extends ComputedOptions = {},
- Methods extends MethodOptions = {},
- Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,
- Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
- InjectOptions extends ComponentInjectOptions = {},
- InjectKeys extends string = string,
- Slots extends SlotsType = {},
- LocalComponents extends Record<string, Component> = {},
- Directives extends Record<string, Directive> = {},
- Exposed extends string = string,
- Provide extends ComponentProvideOptions = ComponentProvideOptions,
- // resolved types
- ResolvedEmits extends EmitsOptions = {} extends RuntimeEmitsOptions
- ? TypeEmitsToOptions<TypeEmits>
- : RuntimeEmitsOptions,
- InferredProps = unknown extends TypeProps
- ? string extends RuntimePropsKeys
- ? ComponentObjectPropsOptions extends RuntimePropsOptions
- ? {}
- : ExtractPropTypes<RuntimePropsOptions>
- : { [key in RuntimePropsKeys]?: any }
- : TypeProps,
- ResolvedProps = Readonly<InferredProps & EmitsToProps<ResolvedEmits>>,
- TypeRefs extends Record<string, unknown> = {},
- >(
- options: {
- props?: (RuntimePropsOptions & ThisType<void>) | RuntimePropsKeys[]
- /**
- * @private for language-tools use only
- */
- __typeProps?: TypeProps
- /**
- * @private for language-tools use only
- */
- __typeEmits?: TypeEmits
- /**
- * @private for language-tools use only
- */
- __typeRefs?: TypeRefs
- } & ComponentOptionsBase<
- ResolvedProps,
- SetupBindings,
- Data,
- Computed,
- Methods,
- Mixin,
- Extends,
- RuntimeEmitsOptions,
- RuntimeEmitsKeys,
- {}, // Defaults
- InjectOptions,
- InjectKeys,
- Slots,
- LocalComponents,
- Directives,
- Exposed,
- Provide
- > &
- ThisType<
- CreateComponentPublicInstanceWithMixins<
- ResolvedProps,
- SetupBindings,
- Data,
- Computed,
- Methods,
- Mixin,
- Extends,
- ResolvedEmits,
- RuntimeEmitsKeys,
- {},
- false,
- InjectOptions,
- Slots,
- LocalComponents,
- Directives,
- Exposed
- >
- >,
- ): DefineComponent<
- InferredProps,
- SetupBindings,
- Data,
- Computed,
- Methods,
- Mixin,
- Extends,
- ResolvedEmits,
- RuntimeEmitsKeys,
- PublicProps,
- ResolvedProps,
- ExtractDefaultPropTypes<RuntimePropsOptions>,
- Slots,
- LocalComponents,
- Directives,
- Exposed,
- Provide,
- // MakeDefaultsOptional - if TypeProps is provided, set to false to use
- // user props types verbatim
- unknown extends TypeProps ? true : false,
- TypeRefs
- >
- // implementation, close to no-op
- /*! #__NO_SIDE_EFFECTS__ */
- export function defineComponent(
- options: unknown,
- extraOptions?: ComponentOptions,
- ) {
- return isFunction(options)
- ? // #8326: extend call and options.name access are considered side-effects
- // by Rollup, so we have to wrap it in a pure-annotated IIFE.
- /*#__PURE__*/ (() =>
- extend({ name: options.name }, extraOptions, { setup: options }))()
- : options
- }
|