import { type ContextualRenderFn, withCtx } from './componentRenderContext'
import { isHmrUpdating } from './hmr'
import { DeprecationTypes, isCompatEnabled } from './compat/compatConfig'
-import { toRaw } from '@vue/reactivity'
-import { trigger } from '@vue/reactivity'
-import { TriggerOpTypes } from '@vue/reactivity'
+import { TriggerOpTypes, trigger } from '@vue/reactivity'
import { createInternalObject } from './internalObject'
export type Slot<T extends any = any> = (
instance: ComponentInternalInstance,
children: VNodeNormalizedChildren,
) => {
+ const slots = (instance.slots = createInternalObject())
if (instance.vnode.shapeFlag & ShapeFlags.SLOTS_CHILDREN) {
const type = (children as RawSlots)._
if (type) {
- // users can get the shallow readonly version of the slots object through `this.$slots`,
- // we should avoid the proxy object polluting the slots of the internal instance
- instance.slots = toRaw(children as InternalSlots)
+ extend(slots, children as InternalSlots)
// make compiler marker non-enumerable
- def(instance.slots, '_', type)
+ def(slots, '_', type)
} else {
- normalizeObjectSlots(
- children as RawSlots,
- (instance.slots = createInternalObject()),
- instance,
- )
- }
- } else {
- instance.slots = createInternalObject()
- if (children) {
- normalizeVNodeSlots(instance, children)
+ normalizeObjectSlots(children as RawSlots, slots, instance)
}
+ } else if (children) {
+ normalizeVNodeSlots(instance, children)
}
}