Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
9be697b
wip: save
edison1105 Mar 20, 2025
2571388
wip: save
edison1105 Mar 21, 2025
c0cd7fc
wip: add tests
edison1105 Mar 21, 2025
b945079
wip: update tests
edison1105 Mar 21, 2025
dd18528
wip: save
edison1105 Mar 21, 2025
5c8f7ed
wip: save
edison1105 Mar 21, 2025
17317c5
wip: port tests
edison1105 Mar 24, 2025
b232e45
wip: remove unnecessary tests
edison1105 Mar 24, 2025
97e6174
wip: handle vapor teleport
edison1105 Mar 24, 2025
33830a0
wip: save
edison1105 Mar 24, 2025
098f50d
wip: handing teleport hmr updating
edison1105 Mar 24, 2025
51ca617
test: add e2e tests for vdom interop
edison1105 Mar 24, 2025
90c2e20
wip: hmr updating
edison1105 Mar 25, 2025
ec76aec
wip: test hmr updating
edison1105 Mar 25, 2025
f315423
test: remove vapor mark
edison1105 Mar 25, 2025
16b30d8
test: port more tests
edison1105 Mar 26, 2025
b646856
wip: save
edison1105 Mar 26, 2025
b474ce0
wip: fix teleport root component hmr reload
edison1105 Mar 26, 2025
c1547b5
wip: save
edison1105 Mar 26, 2025
5b933f5
wip: extract VaporFragment into a separate file
edison1105 Mar 26, 2025
ba6577f
wip: add more hmr tests + refactor
edison1105 Mar 27, 2025
7ab1a30
wip: refactor
edison1105 Mar 27, 2025
fd6f163
wip: save
edison1105 Mar 27, 2025
4de819c
wip: refactor
edison1105 Mar 27, 2025
177c6a6
wip: save
edison1105 Mar 27, 2025
5574fbf
wip: refactor
edison1105 Mar 27, 2025
ba9db34
test: add e2e tests for vdom teleport vapor interop
edison1105 Mar 27, 2025
43d2799
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 27, 2025
9ab8e4c
chore: update lockfile
edison1105 Apr 1, 2025
1033d2b
Merge branch 'vapor' into edison/feat/vaporTeleport
edison1105 Apr 2, 2025
016596c
chore: update
edison1105 Apr 7, 2025
d9772db
chore: update
edison1105 Apr 10, 2025
fed71cb
chore: Merge branch 'vapor' into edison/feat/vaporTeleport
edison1105 Jun 20, 2025
f82ca3e
chore: Merge branch 'minor' into edison/feat/vaporTeleport
edison1105 Jul 16, 2025
e01189f
fix: update SchedulerJob export
edison1105 Jul 16, 2025
4f34696
chore: Merge branch 'minor' into edison/feat/vaporTeleport
edison1105 Sep 10, 2025
99c3828
refactor: teleport
edison1105 Sep 10, 2025
cec32be
chore: remove teleport e2e tests
edison1105 Sep 10, 2025
5443a24
[autofix.ci] apply automated fixes
autofix-ci[bot] Sep 10, 2025
7ca7ef0
Merge branch 'minor' into edison/feat/vaporTeleport
edison1105 Sep 10, 2025
dd189d4
wip: refactor
edison1105 Sep 11, 2025
96088ed
chore: update
edison1105 Sep 11, 2025
0dc8963
chore: update
edison1105 Sep 12, 2025
e5e6ee5
test: add hydration benchmark for Vapor and VDOM
edison1105 Sep 15, 2025
e69259a
chore: remove hydration bench
edison1105 Sep 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion packages-private/vapor-e2e-test/interop/VaporComp.vue
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ const slotProp = ref('slot prop')
change slot prop
</button>
<div class="vdom-slot-in-vapor-default">
#default: <slot :foo="slotProp" />
#default:
<slot :foo="slotProp" />
</div>
<div class="vdom-slot-in-vapor-test">
#test: <slot name="test">fallback content</slot>
Expand Down
10 changes: 9 additions & 1 deletion packages/compiler-vapor/src/generators/component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import { genEventHandler } from './event'
import { genDirectiveModifiers, genDirectivesForElement } from './directive'
import { genBlock } from './block'
import { genModelHandler } from './vModel'
import { isBuiltInComponent } from '../utils'

export function genCreateComponent(
operation: CreateComponentIRNode,
Expand Down Expand Up @@ -92,8 +93,15 @@ export function genCreateComponent(
} else if (operation.asset) {
return toValidAssetId(operation.tag, 'component')
} else {
const { tag } = operation
const builtInTag = isBuiltInComponent(tag)
if (builtInTag) {
// @ts-expect-error
helper(builtInTag)
return `_${builtInTag}`
}
return genExpression(
extend(createSimpleExpression(operation.tag, false), { ast: null }),
extend(createSimpleExpression(tag, false), { ast: null }),
context,
)
}
Expand Down
8 changes: 7 additions & 1 deletion packages/compiler-vapor/src/transforms/transformElement.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import {
type VaporDirectiveNode,
} from '../ir'
import { EMPTY_EXPRESSION } from './utils'
import { findProp } from '../utils'
import { findProp, isBuiltInComponent } from '../utils'

export const isReservedProp: (key: string) => boolean = /*#__PURE__*/ makeMap(
// the leading comma is intentional so empty string "" is also included
Expand Down Expand Up @@ -122,6 +122,12 @@ function transformComponentElement(
asset = false
}

const builtInTag = isBuiltInComponent(tag)
if (builtInTag) {
tag = builtInTag
asset = false
}

const dotIndex = tag.indexOf('.')
if (dotIndex > 0) {
const ns = resolveSetupReference(tag.slice(0, dotIndex), context)
Expand Down
11 changes: 11 additions & 0 deletions packages/compiler-vapor/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,14 @@ export function getLiteralExpressionValue(
}
return exp.isStatic ? exp.content : null
}

export function isTeleportTag(tag: string): boolean {
tag = tag.toLowerCase()
return tag === 'teleport' || tag === 'vaporteleport'
}

export function isBuiltInComponent(tag: string): string | undefined {
if (isTeleportTag(tag)) {
return 'VaporTeleport'
}
}
6 changes: 3 additions & 3 deletions packages/runtime-core/src/components/Teleport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ export const TeleportEndKey: unique symbol = Symbol('_vte')

export const isTeleport = (type: any): boolean => type.__isTeleport

const isTeleportDisabled = (props: VNode['props']): boolean =>
export const isTeleportDisabled = (props: VNode['props']): boolean =>
props && (props.disabled || props.disabled === '')

const isTeleportDeferred = (props: VNode['props']): boolean =>
export const isTeleportDeferred = (props: VNode['props']): boolean =>
props && (props.defer || props.defer === '')

const isTargetSVG = (target: RendererElement): boolean =>
Expand All @@ -39,7 +39,7 @@ const isTargetSVG = (target: RendererElement): boolean =>
const isTargetMathML = (target: RendererElement): boolean =>
typeof MathMLElement === 'function' && target instanceof MathMLElement

const resolveTarget = <T = RendererElement>(
export const resolveTarget = <T = RendererElement>(
props: TeleportProps | null,
select: RendererOptions['querySelector'],
): T | null => {
Expand Down
11 changes: 10 additions & 1 deletion packages/runtime-core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,7 @@ export type {
HydrationStrategyFactory,
} from './hydrationStrategies'
export type { HMRRuntime } from './hmr'
export type { SchedulerJob } from './scheduler'

// Internal API ----------------------------------------------------------------

Expand Down Expand Up @@ -521,7 +522,7 @@ export { baseEmit, isEmitListener } from './componentEmits'
/**
* @internal
*/
export { type SchedulerJob, queueJob, flushOnAppMount } from './scheduler'
export { queueJob, flushOnAppMount } from './scheduler'
/**
* @internal
*/
Expand Down Expand Up @@ -558,6 +559,14 @@ export { startMeasure, endMeasure } from './profiling'
* @internal
*/
export { initFeatureFlags } from './featureFlags'
/**
* @internal
*/
export {
resolveTarget as resolveTeleportTarget,
isTeleportDisabled,
isTeleportDeferred,
} from './components/Teleport'
/**
* @internal
*/
Expand Down
9 changes: 2 additions & 7 deletions packages/runtime-vapor/__tests__/block.spec.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
import {
VaporFragment,
insert,
normalizeBlock,
prepend,
remove,
} from '../src/block'
import { insert, normalizeBlock, prepend, remove } from '../src/block'
import { VaporFragment } from '../src/fragment'

const node1 = document.createTextNode('node1')
const node2 = document.createTextNode('node2')
Expand Down
Loading
Loading