import { DebuggerEvent, ShallowUnwrapRef, UnwrapNestedRefs } from './v3-generated' import { UnionToIntersection } from './common' import { Vue, VueConstructor } from './vue' import { ComputedOptions, MethodOptions, ExtractComputedReturns, ComponentOptionsMixin, ComponentOptionsBase } from './v3-component-options' import { EmitFn, EmitsOptions } from './v3-setup-context' /** * Custom properties added to component instances in any way and can be accessed through `this` * * @example * ```ts * import { Router } from 'vue-router' * * declare module 'vue' { * interface ComponentCustomProperties { * $router: Router * } * } * ``` */ export interface ComponentCustomProperties {} export type ComponentInstance = InstanceType export type OptionTypesKeys = 'P' | 'B' | 'D' | 'C' | 'M' | 'Defaults' export type OptionTypesType< P = {}, B = {}, D = {}, C extends ComputedOptions = {}, M extends MethodOptions = {}, Defaults = {} > = { P: P B: B D: D C: C M: M Defaults: Defaults } type IsDefaultMixinComponent = T extends ComponentOptionsMixin ? ComponentOptionsMixin extends T ? true : false : false type MixinToOptionTypes = T extends ComponentOptionsBase< infer P, infer B, infer D, infer C, infer M, infer Mixin, infer Extends, any, any, infer Defaults > ? OptionTypesType

& IntersectionMixin & IntersectionMixin : never // ExtractMixin(map type) is used to resolve circularly references type ExtractMixin = { Mixin: MixinToOptionTypes }[T extends ComponentOptionsMixin ? 'Mixin' : never] export type IntersectionMixin = IsDefaultMixinComponent extends true ? OptionTypesType<{}, {}, {}, {}, {}, {}> : UnionToIntersection> export type UnwrapMixinsType< T, Type extends OptionTypesKeys > = T extends OptionTypesType ? T[Type] : never type EnsureNonVoid = T extends void ? {} : T export type CreateComponentPublicInstance< P = {}, B = {}, D = {}, C extends ComputedOptions = {}, M extends MethodOptions = {}, Mixin extends ComponentOptionsMixin = ComponentOptionsMixin, Extends extends ComponentOptionsMixin = ComponentOptionsMixin, E extends EmitsOptions = {}, PublicProps = P, Defaults = {}, MakeDefaultsOptional extends boolean = false, PublicMixin = IntersectionMixin & IntersectionMixin, PublicP = UnwrapMixinsType & EnsureNonVoid

, PublicB = UnwrapMixinsType & EnsureNonVoid, PublicD = UnwrapMixinsType & EnsureNonVoid, PublicC extends ComputedOptions = UnwrapMixinsType & EnsureNonVoid, PublicM extends MethodOptions = UnwrapMixinsType & EnsureNonVoid, PublicDefaults = UnwrapMixinsType & EnsureNonVoid > = ComponentPublicInstance< PublicP, PublicB, PublicD, PublicC, PublicM, E, PublicProps, PublicDefaults, MakeDefaultsOptional > // public properties exposed on the proxy, which is used as the render context // in templates (as `this` in the render option) export type ComponentPublicInstance< P = {}, // props type extracted from props option B = {}, // raw bindings returned from setup() D = {}, // return from data() C extends ComputedOptions = {}, M extends MethodOptions = {}, E extends EmitsOptions = {}, PublicProps = P, Defaults = {}, MakeDefaultsOptional extends boolean = false, Options = ComponentOptionsBase< any, any, any, any, any, any, any, any, any, any > > = Vue3Instance< D, P, PublicProps, E, Defaults, MakeDefaultsOptional, Options > & Readonly

& ShallowUnwrapRef & UnwrapNestedRefs & ExtractComputedReturns & M & ComponentCustomProperties interface Vue3Instance< D, P, PublicProps, E, Defaults, MakeDefaultsOptional, Options > extends Vue< D, Readonly< MakeDefaultsOptional extends true ? Partial & Omit

: P & PublicProps >, ComponentPublicInstance, Options & MergedComponentOptionsOverride, EmitFn > {} type MergedHook void> = T | T[] export type MergedComponentOptionsOverride = { beforeCreate?: MergedHook created?: MergedHook beforeMount?: MergedHook mounted?: MergedHook beforeUpdate?: MergedHook updated?: MergedHook activated?: MergedHook deactivated?: MergedHook /** @deprecated use `beforeUnmount` instead */ beforeDestroy?: MergedHook beforeUnmount?: MergedHook /** @deprecated use `unmounted` instead */ destroyed?: MergedHook unmounted?: MergedHook renderTracked?: MergedHook renderTriggered?: MergedHook errorCaptured?: MergedHook } export type DebuggerHook = (e: DebuggerEvent) => void export type ErrorCapturedHook = ( err: TError, instance: ComponentPublicInstance | null, info: string ) => boolean | void export type ComponentPublicInstanceConstructor< T extends ComponentPublicInstance< Props, RawBindings, D, C, M > = ComponentPublicInstance, Props = any, RawBindings = any, D = any, C extends ComputedOptions = ComputedOptions, M extends MethodOptions = MethodOptions > = { new (...args: any[]): T }