import { type IfAny, type LooseRequired, type Prettify, type UnionToIntersection, extend, isArray, isFunction, isPromise, } from '@vue/shared' import { type SetupContext, createSetupContext, getCurrentInstance, setCurrentInstance, unsetCurrentInstance, } from './component' import type { EmitFn, EmitsOptions, ObjectEmitsOptions } from './componentEmits' import type { ComponentOptionsBase, ComponentOptionsMixin, ComputedOptions, MethodOptions, } from './componentOptions' import type { ComponentObjectPropsOptions, ComponentPropsOptions, ExtractPropTypes, PropOptions, } from './componentProps' import { warn } from './warning' import type { SlotsType, StrictUnwrapSlotsType } from './componentSlots' import type { Ref } from '@vue/reactivity' // dev only const warnRuntimeUsage = (method: string) => warn( `${method}() is a compiler-hint helper that is only usable inside ` + `