Skip to content

Commit 004285d

Browse files
committed
perf(runtime-vapor): tree-shake transition operations from non-transition bundles
1 parent 0bb3df6 commit 004285d

4 files changed

Lines changed: 64 additions & 10 deletions

File tree

packages/runtime-vapor/src/block.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,14 @@ import {
1212
type TransitionHooks,
1313
type TransitionProps,
1414
type TransitionState,
15-
performTransitionEnter,
16-
performTransitionLeave,
1715
} from '@vue/runtime-dom'
1816
import {
1917
type DynamicFragment,
2018
type VaporFragment,
2119
isFragment,
2220
} from './fragment'
2321
import { isTeleportFragment } from './components/Teleport'
22+
import { runTransitionEnter, runTransitionLeave } from './transition'
2423

2524
export interface VaporTransitionHooks extends TransitionHooks {
2625
state: TransitionState
@@ -105,9 +104,9 @@ export function insert(
105104
(block as TransitionBlock).$transition &&
106105
!(block as TransitionBlock).$transition!.disabled
107106
) {
108-
performTransitionEnter(
107+
runTransitionEnter(
109108
block,
110-
(block as TransitionBlock).$transition as TransitionHooks,
109+
(block as TransitionBlock).$transition as VaporTransitionHooks,
111110
() => parent.insertBefore(block, anchor as Node),
112111
parentSuspense,
113112
)
@@ -157,17 +156,17 @@ export function move(
157156
moveType !== MoveType.REORDER
158157
) {
159158
if (moveType === MoveType.ENTER) {
160-
performTransitionEnter(
159+
runTransitionEnter(
161160
block,
162-
(block as TransitionBlock).$transition as TransitionHooks,
161+
(block as TransitionBlock).$transition as VaporTransitionHooks,
163162
() => parent.insertBefore(block, anchor as Node),
164163
parentSuspense,
165164
true,
166165
)
167166
} else {
168-
performTransitionLeave(
167+
runTransitionLeave(
169168
block,
170-
(block as TransitionBlock).$transition as TransitionHooks,
169+
(block as TransitionBlock).$transition as VaporTransitionHooks,
171170
() => {
172171
// if the component is unmounted after leave finish, remove the block
173172
// to avoid retaining a detached node.
@@ -241,9 +240,9 @@ export function prepend(parent: ParentNode, ...blocks: Block[]): void {
241240
export function remove(block: Block, parent?: ParentNode): void {
242241
if (block instanceof Node) {
243242
if ((block as TransitionBlock).$transition && block instanceof Element) {
244-
performTransitionLeave(
243+
runTransitionLeave(
245244
block,
246-
(block as TransitionBlock).$transition as TransitionHooks,
245+
(block as TransitionBlock).$transition as VaporTransitionHooks,
247246
() => parent && parent.removeChild(block),
248247
)
249248
} else {

packages/runtime-vapor/src/components/Transition.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import {
1717
isTemplateNode,
1818
leaveCbKey,
1919
onBeforeMount,
20+
performTransitionEnter,
21+
performTransitionLeave,
2022
queuePostFlushCb,
2123
resolveTransitionProps,
2224
useTransitionState,
@@ -66,6 +68,8 @@ export const ensureTransitionHooksRegistered = (): void => {
6668
registerTransitionHooks(
6769
applyTransitionHooksImpl,
6870
applyTransitionLeaveHooksImpl,
71+
performTransitionEnter,
72+
performTransitionLeave,
6973
)
7074
}
7175
}

packages/runtime-vapor/src/transition.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,36 @@ type ApplyTransitionLeaveHooksFn = (
1212
enterHooks: VaporTransitionHooks,
1313
afterLeaveCb: () => void,
1414
) => void
15+
type RunTransitionEnterFn = (
16+
el: Element,
17+
hooks: VaporTransitionHooks,
18+
insert: () => void,
19+
parentSuspense?: any,
20+
force?: boolean,
21+
) => void
22+
type RunTransitionLeaveFn = (
23+
el: Element,
24+
hooks: VaporTransitionHooks,
25+
remove: () => void,
26+
isElement?: boolean,
27+
force?: boolean,
28+
) => void
1529

1630
let _applyTransitionHooks: ApplyTransitionHooksFn | undefined
1731
let _applyTransitionLeaveHooks: ApplyTransitionLeaveHooksFn | undefined
32+
let _runTransitionEnter: RunTransitionEnterFn | undefined
33+
let _runTransitionLeave: RunTransitionLeaveFn | undefined
1834

1935
export function registerTransitionHooks(
2036
applyHooks: ApplyTransitionHooksFn,
2137
applyLeaveHooks: ApplyTransitionLeaveHooksFn,
38+
runEnter: RunTransitionEnterFn,
39+
runLeave: RunTransitionLeaveFn,
2240
): void {
2341
_applyTransitionHooks = applyHooks
2442
_applyTransitionLeaveHooks = applyLeaveHooks
43+
_runTransitionEnter = runEnter
44+
_runTransitionLeave = runLeave
2545
}
2646

2747
export function applyTransitionHooks(
@@ -39,3 +59,31 @@ export function applyTransitionLeaveHooks(
3959
_applyTransitionLeaveHooks &&
4060
_applyTransitionLeaveHooks(block, enterHooks, afterLeaveCb)
4161
}
62+
63+
export function runTransitionEnter(
64+
el: Element,
65+
hooks: VaporTransitionHooks,
66+
insert: () => void,
67+
parentSuspense?: any,
68+
force?: boolean,
69+
): void {
70+
if (_runTransitionEnter) {
71+
_runTransitionEnter(el, hooks, insert, parentSuspense, force)
72+
} else {
73+
insert()
74+
}
75+
}
76+
77+
export function runTransitionLeave(
78+
el: Element,
79+
hooks: VaporTransitionHooks,
80+
remove: () => void,
81+
isElement?: boolean,
82+
force?: boolean,
83+
): void {
84+
if (_runTransitionLeave) {
85+
_runTransitionLeave(el, hooks, remove, isElement, force)
86+
} else {
87+
remove()
88+
}
89+
}

packages/runtime-vapor/src/vdomInterop.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ import {
111111
} from './fragment'
112112
import type { NodeRef } from './apiTemplateRef'
113113
import {
114+
ensureTransitionHooksRegistered,
114115
getVNodeKey,
115116
setTransitionHooks as setVaporTransitionHooks,
116117
} from './components/Transition'
@@ -201,6 +202,7 @@ const vaporInteropImpl: Omit<
201202
instance.shapeFlag = vnode.shapeFlag
202203

203204
if (vnode.transition) {
205+
ensureTransitionHooksRegistered()
204206
setVaporTransitionHooks(
205207
instance,
206208
vnode.transition as VaporTransitionHooks,
@@ -434,6 +436,7 @@ const vaporInteropImpl: Omit<
434436
},
435437

436438
setTransitionHooks(component, hooks) {
439+
ensureTransitionHooksRegistered()
437440
setVaporTransitionHooks(component as any, hooks as VaporTransitionHooks)
438441
},
439442

0 commit comments

Comments
 (0)