@@ -83,7 +83,12 @@ import {
8383 type TeleportVNode ,
8484} from './components/Teleport'
8585import { type KeepAliveContext , isKeepAlive } from './components/KeepAlive'
86- import { isHmrUpdating , registerHMR , unregisterHMR } from './hmr'
86+ import {
87+ hmrDirtyComponentsMode ,
88+ isHmrUpdating ,
89+ registerHMR ,
90+ unregisterHMR ,
91+ } from './hmr'
8792import { type RootHydrateFunction , createHydrationFunctions } from './hydration'
8893import { invokeDirectiveHook } from './directives'
8994import { endMeasure , startMeasure } from './profiling'
@@ -2177,7 +2182,7 @@ function baseCreateRenderer(
21772182 ) => {
21782183 const { el, type, transition, children, shapeFlag } = vnode
21792184 if ( shapeFlag & ShapeFlags . COMPONENT ) {
2180- if ( ( type as ConcreteComponent ) . __vapor ) {
2185+ if ( isVaporComponent ( type as ConcreteComponent ) ) {
21812186 getVaporInterface ( parentComponent , vnode ) . move ( vnode , container , anchor )
21822187 } else {
21832188 move (
@@ -2309,7 +2314,7 @@ function baseCreateRenderer(
23092314 }
23102315
23112316 if ( shapeFlag & ShapeFlags . COMPONENT_SHOULD_KEEP_ALIVE ) {
2312- if ( ( vnode . type as ConcreteComponent ) . __vapor ) {
2317+ if ( isVaporComponent ( vnode . type as ConcreteComponent ) ) {
23132318 getVaporInterface ( parentComponent ! , vnode ) . deactivate (
23142319 vnode ,
23152320 ( parentComponent ! . ctx as KeepAliveContext ) . getStorageContainer ( ) ,
@@ -2332,7 +2337,7 @@ function baseCreateRenderer(
23322337 }
23332338
23342339 if ( shapeFlag & ShapeFlags . COMPONENT ) {
2335- if ( ( type as ConcreteComponent ) . __vapor ) {
2340+ if ( isVaporComponent ( type as ConcreteComponent ) ) {
23362341 getVaporInterface ( parentComponent , vnode ) . unmount ( vnode , doRemove )
23372342 return
23382343 } else {
@@ -2539,7 +2544,7 @@ function baseCreateRenderer(
25392544
25402545 const getNextHostNode : NextFn = vnode => {
25412546 if ( vnode . shapeFlag & ShapeFlags . COMPONENT ) {
2542- if ( ( vnode . type as ConcreteComponent ) . __vapor ) {
2547+ if ( isVaporComponent ( vnode . type as ConcreteComponent ) ) {
25432548 return hostNextSibling ( vnode . anchor ! )
25442549 }
25452550 return getNextHostNode ( vnode . component ! . subTree )
@@ -2828,6 +2833,13 @@ export function getVaporInterface(
28282833 return res !
28292834}
28302835
2836+ export function isVaporComponent ( type : ConcreteComponent ) : boolean | undefined {
2837+ if ( __DEV__ && isHmrUpdating && hmrDirtyComponentsMode . has ( type ) ) {
2838+ return hmrDirtyComponentsMode . get ( type )
2839+ }
2840+ return type . __vapor
2841+ }
2842+
28312843/**
28322844 * shared between vdom and vapor
28332845 */
0 commit comments