Skip to content

perf(vapor): reduce codegen size for single DOM bindings#14845

Draft
edison1105 wants to merge 8 commits into
minorfrom
edison/perf/singleOperationCodegen
Draft

perf(vapor): reduce codegen size for single DOM bindings#14845
edison1105 wants to merge 8 commits into
minorfrom
edison/perf/singleOperationCodegen

Conversation

@edison1105
Copy link
Copy Markdown
Member

@edison1105 edison1105 commented May 18, 2026

Lower single-operation Vapor DOM updates to dedicated binding helpers, including
text, props, html, class/style/value, and event bindings. The helpers reuse
RenderEffect lifecycle and scheduling semantics while avoiding the extra
renderEffect wrapper in generated code.

Keep multi-operation effects and shared-expression cases on the existing
renderEffect path to preserve batching and cached expression behavior. Add
compiler snapshots, runtime coverage, and binding benchmarks for the new paths.

Summary by CodeRabbit

  • New Features

    • Introduced new DOM binding helper functions that enable efficient reactive updates to properties, attributes, text, HTML, styles, classes, and dynamic event listeners.
  • Improvements

    • Enhanced compiler code generation and optimization to reduce render overhead by using specialized binding effect handling instead of render effects.
  • Tests

    • Added comprehensive test coverage and performance benchmarks for DOM binding helper functionality.

Review Change Stack

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 18, 2026

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 5b2fbf68-75c5-4798-888a-d9044ad4c9b3

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR introduces reactive DOM binding effect helpers to Vue's Vapor compiler and runtime. It refactors the compiler to emit specialized set*Binding calls for property, HTML, text, event, and dynamic updates instead of wrapping individual setters with renderEffect. The runtime implements corresponding RenderEffect subclasses for each binding type with getter-based reactivity, enabling more efficient change tracking. Tests validate compiler lowering logic and runtime binding correctness across all DOM update scenarios.

Changes

DOM Binding Effects Implementation

Layer / File(s) Summary
Runtime binding effect infrastructure
packages/runtime-vapor/src/dom/bindingEffect.ts, packages/runtime-vapor/src/index.ts
Introduces RenderEffect subclasses for text, HTML, class, style, attribute, property, dynamic props, and event bindings. Each subclass stores target node references and getter functions, running reactively via effect.run(). Exports 15+ set*Binding functions that apply updates immediately in v-once slots or reactively via the corresponding RenderEffect instance. Includes support for merged dynamic props with before/getter/after composition.
Compiler expression-getter helper
packages/compiler-vapor/src/generators/expression.ts
Adds genExpressionGetter to wrap expressions in arrow-function getter form, with Babel AST and syntax-based detection for object expressions to preserve correct parsing. Enables binding codegen to generate callback-style binding arguments.
Compiler text and HTML binding codegen
packages/compiler-vapor/src/generators/text.ts, packages/compiler-vapor/src/generators/html.ts
Implements genSetTextBinding, genSetBlockTextBinding, and genSetHtmlBinding code generators that emit runtime binding calls with getter-wrapped values, routing dynamic DOM content through binding effect infrastructure instead of renderEffect + direct setter.
Compiler event binding codegen
packages/compiler-vapor/src/generators/event.ts
Refactors event code generation to extract reusable helpers (genEventName, genEventOptions), introduces genSetEventBinding for static event names with reactive listener handling, and adds genSetDynamicEventsBinding for computed event objects. Removes the prior genSetDynamicEvents in favor of expression-getter-based binding.
Compiler property binding codegen
packages/compiler-vapor/src/generators/prop.ts
Adds binding-aware property setters via canSetPropBinding/genSetPropBinding using a bindingHelpers mapping that routes props through *Binding variants. Introduces genSetClassNameBinding for class-flag binding with getter wrapping. Centralizes dynamic-prop value shaping and adds genPropValueGetter for arrow-function wrapping.
Compiler dynamic props and merged binding codegen
packages/compiler-vapor/src/generators/prop.ts (continued)
Implements genDynamicPropsBinding for array-style dynamic prop binding and genMergedDynamicPropsBinding for mixed static/dynamic scenarios, resolving before/getter/after sources and wrapping getters to preserve object-literal syntax.
Compiler operation/effect lowering
packages/compiler-vapor/src/generators/operation.ts
Introduces resolveSingleOperationBinding to detect single-operation-single-effect patterns and lower them to specialized binding calls. Includes SET_TEXT folding to absorb trailing GET_TEXT_CHILD operations when compatible. Parameterizes operation emission via withInsertionState flag. Adds optional processedExpressions parameter to genEffects for fast-path re-use.
Compiler block emission refactoring
packages/compiler-vapor/src/generators/block.ts
Refactors genBlockContent and flushPendingOperations to use unified genOperationsAndEffects pipeline. Advances operationIndex and effectIndex in lockstep instead of separate passes. Consolidates tail emission logic into single conditional call.
Compiler test updates
packages/compiler-vapor/__tests__/compile.spec.ts, packages/compiler-vapor/__tests__/transforms/transformChildren.spec.ts, packages/compiler-vapor/__tests__/transforms/transformElement.spec.ts, packages/compiler-vapor/__tests__/transforms/vBind.spec.ts, packages/compiler-vapor/__tests__/transforms/vHtml.spec.ts, packages/compiler-vapor/__tests__/transforms/vOn.spec.ts, packages/compiler-vapor/__tests__/transforms/vOnce.spec.ts, packages/compiler-vapor/__tests__/transforms/vText.spec.ts
Updates test expectations across all directive codegen to verify *Binding helper calls with getter arguments, absence of renderEffect in binding scenarios, binding lowering behaviors for mixed text, merged dynamic props, event modifier handling, class/style normalization, and helper alias uniqueness.
Runtime binding effect tests
packages/runtime-vapor/__tests__/renderEffect.spec.ts, packages/runtime-vapor/__tests__/componentSlots.spec.ts
Adds comprehensive tests validating setTextBinding with lifecycle hooks and scope isolation, DOM binding helper coordination across multiple types with reactive attribute/style/class/value/event updates, merged dynamic props behavior with nullish sources, event binding option preservation, and option object immutability. Demonstrates merged dynamic props binding in v-once scenario.
Benchmark suite
packages/runtime-vapor/__tests__/bench/domBinding.bench.ts, packages/runtime-vapor/__tests__/bench/textBinding.bench.ts
Adds comprehensive benchmarks comparing renderEffect + setter vs dedicated *Binding helpers across text, props, attributes, DOM props, classes, styles, events, and dynamic bindings in initialization and update scenarios. Includes many-bindings load testing and merged dynamic props binding strategy comparison.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

  • vuejs/core#14803: Both PRs change Vapor's class handling in packages/compiler-vapor/src/generators/prop.ts (main PR introduces setClassNameBinding lowering, while the other adds a setClassName flag-based fast path), so the changes intersect at the same class-codegen area.
  • vuejs/core#14856: Both PRs touch Vue Vapor's event codegen/tests—packages/compiler-vapor/src/generators/event.ts and vOn.spec.ts—to change how event handlers are generated/wrapped (invoker wrapping vs new setEventBinding-based dynamic arg lowering).
  • vuejs/core#14854: Both PRs modify the compiler-vapor event codegen (notably src/generators/event.ts's genSetEvent and its event-options/onBinding behavior), so the changes overlap at the same event-binding generation level.

Suggested labels

scope: compiler

Suggested reviewers

  • sxzz
  • baiwusanyu-c
  • KazariEX

Poem

🐰 A binding so fine, reactive and true,
Getters dance lightly, no renderEffect crew,
From text unto props, each element sings,
The Vapor takes flight on effect's swift wings! ✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 2.53% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the main change: introducing binding helpers to reduce codegen size for single DOM bindings in the Vapor compiler.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch edison/perf/singleOperationCodegen

Comment @coderabbitai help to get the list of available commands and usage tips.

@edison1105 edison1105 added the scope: vapor related to vapor mode label May 18, 2026
@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new Bot commented May 18, 2026

Open in StackBlitz

@vue/compiler-core

pnpm add https://pkg.pr.new/@vue/compiler-core@14845
npm i https://pkg.pr.new/@vue/compiler-core@14845
yarn add https://pkg.pr.new/@vue/compiler-core@14845.tgz

@vue/compiler-dom

pnpm add https://pkg.pr.new/@vue/compiler-dom@14845
npm i https://pkg.pr.new/@vue/compiler-dom@14845
yarn add https://pkg.pr.new/@vue/compiler-dom@14845.tgz

@vue/compiler-sfc

pnpm add https://pkg.pr.new/@vue/compiler-sfc@14845
npm i https://pkg.pr.new/@vue/compiler-sfc@14845
yarn add https://pkg.pr.new/@vue/compiler-sfc@14845.tgz

@vue/compiler-ssr

pnpm add https://pkg.pr.new/@vue/compiler-ssr@14845
npm i https://pkg.pr.new/@vue/compiler-ssr@14845
yarn add https://pkg.pr.new/@vue/compiler-ssr@14845.tgz

@vue/compiler-vapor

pnpm add https://pkg.pr.new/@vue/compiler-vapor@14845
npm i https://pkg.pr.new/@vue/compiler-vapor@14845
yarn add https://pkg.pr.new/@vue/compiler-vapor@14845.tgz

@vue/reactivity

pnpm add https://pkg.pr.new/@vue/reactivity@14845
npm i https://pkg.pr.new/@vue/reactivity@14845
yarn add https://pkg.pr.new/@vue/reactivity@14845.tgz

@vue/runtime-core

pnpm add https://pkg.pr.new/@vue/runtime-core@14845
npm i https://pkg.pr.new/@vue/runtime-core@14845
yarn add https://pkg.pr.new/@vue/runtime-core@14845.tgz

@vue/runtime-dom

pnpm add https://pkg.pr.new/@vue/runtime-dom@14845
npm i https://pkg.pr.new/@vue/runtime-dom@14845
yarn add https://pkg.pr.new/@vue/runtime-dom@14845.tgz

@vue/runtime-vapor

pnpm add https://pkg.pr.new/@vue/runtime-vapor@14845
npm i https://pkg.pr.new/@vue/runtime-vapor@14845
yarn add https://pkg.pr.new/@vue/runtime-vapor@14845.tgz

@vue/server-renderer

pnpm add https://pkg.pr.new/@vue/server-renderer@14845
npm i https://pkg.pr.new/@vue/server-renderer@14845
yarn add https://pkg.pr.new/@vue/server-renderer@14845.tgz

@vue/shared

pnpm add https://pkg.pr.new/@vue/shared@14845
npm i https://pkg.pr.new/@vue/shared@14845
yarn add https://pkg.pr.new/@vue/shared@14845.tgz

vue

pnpm add https://pkg.pr.new/vue@14845
npm i https://pkg.pr.new/vue@14845
yarn add https://pkg.pr.new/vue@14845.tgz

@vue/compat

pnpm add https://pkg.pr.new/@vue/compat@14845
npm i https://pkg.pr.new/@vue/compat@14845
yarn add https://pkg.pr.new/@vue/compat@14845.tgz

commit: db36d88

@github-actions
Copy link
Copy Markdown

Size Report

Bundles

File Size Gzip Brotli
compiler-dom.global.prod.js 86.5 kB 30.3 kB 26.6 kB
runtime-dom.global.prod.js 113 kB 42.6 kB 38.1 kB
vue.global.prod.js 172 kB 62.4 kB 55.6 kB

Usages

Name Size Gzip Brotli
createApp (CAPI only) 51.5 kB 20.1 kB 18.3 kB
createApp 60.5 kB 23.4 kB 21.3 kB
createApp + vaporInteropPlugin 103 kB 37.3 kB 33.7 kB
createVaporApp 27.6 kB 10.7 kB 9.83 kB
createSSRApp 65 kB 25.2 kB 22.9 kB
createVaporSSRApp 33.9 kB 13 kB 11.9 kB
defineCustomElement 67.1 kB 25.4 kB 23.2 kB
defineVaporCustomElement 39.8 kB 14.3 kB 13.1 kB
overall 75.8 kB 28.9 kB 26.2 kB

@edison1105 edison1105 force-pushed the edison/perf/singleOperationCodegen branch from efd4800 to 0e9c26a Compare May 18, 2026 13:27
@edison1105 edison1105 changed the title perf(vapor): reduce single text binding codegen size perf(vapor): reduce codegen size for single DOM bindings May 18, 2026
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
packages/runtime-vapor/__tests__/bench/domBinding.bench.ts (1)

247-258: ⚡ Quick win

Make setEvent benchmark paths allocation-equivalent

The old path creates a new invoker every reactive run (Line 248), while the binding path creates it once. That biases the comparison beyond codegen-wrapper cost.

Proposed fix
   benchBinding(
     'setEvent',
     createDiv,
     (el, source) => {
+      const invoker = createInvoker(noop)
       renderEffect(() =>
-        on(el, source.value & 1 ? 'click' : 'mouseover', createInvoker(noop), {
+        on(el, source.value & 1 ? 'click' : 'mouseover', invoker, {
           effect: true,
         }),
       )
     },
     (el, source) => {
+      const invoker = createInvoker(noop)
       setEventBinding(
         el,
         () => (source.value & 1 ? 'click' : 'mouseover'),
-        createInvoker(noop),
+        invoker,
       )
     },
   )
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/runtime-vapor/__tests__/bench/domBinding.bench.ts` around lines 247
- 258, The benchmark currently allocates a new invoker inside the reactive run
for the "old path" (renderEffect -> on(..., createInvoker(noop), ...)) while the
"binding path" reuses a single invoker, biasing results; fix by creating the
invoker once outside the reactive/run scope (use a local const inv =
createInvoker(noop)) and pass that same inv to both renderEffect/on and
setEventBinding calls (referencing renderEffect, on, setEventBinding,
createInvoker, and noop) so both paths have allocation-equivalent behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/runtime-vapor/src/dom/bindingEffect.ts`:
- Around line 418-424: toEventBindingOptions currently mutates the
caller-provided options by assigning effect = true to the passed-in object;
instead create and return a new EventBindingOptions object so callers' objects
are not modified. In the toEventBindingOptions function, copy the incoming
AddEventListenerOptions into a fresh object (e.g. via object spread or
Object.assign) and set effect: true on that new object, then return it; keep the
return type EventBindingOptions and handle the undefined case by returning an
object with only effect: true when no options were provided.

---

Nitpick comments:
In `@packages/runtime-vapor/__tests__/bench/domBinding.bench.ts`:
- Around line 247-258: The benchmark currently allocates a new invoker inside
the reactive run for the "old path" (renderEffect -> on(...,
createInvoker(noop), ...)) while the "binding path" reuses a single invoker,
biasing results; fix by creating the invoker once outside the reactive/run scope
(use a local const inv = createInvoker(noop)) and pass that same inv to both
renderEffect/on and setEventBinding calls (referencing renderEffect, on,
setEventBinding, createInvoker, and noop) so both paths have
allocation-equivalent behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 4f6b9d9e-cdd6-48e0-9359-6af5ea3e033e

📥 Commits

Reviewing files that changed from the base of the PR and between 6578719 and 0e9c26a.

⛔ Files ignored due to path filters (14)
  • packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/__snapshots__/staticTemplate.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/expression.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/transformChildren.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/transformElement.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/transformKey.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/vBind.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/vFor.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/vHtml.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/vIf.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/vModel.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/vOn.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/vSlot.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/vText.spec.ts.snap is excluded by !**/*.snap
📒 Files selected for processing (19)
  • packages/compiler-vapor/__tests__/compile.spec.ts
  • packages/compiler-vapor/__tests__/transforms/transformChildren.spec.ts
  • packages/compiler-vapor/__tests__/transforms/transformElement.spec.ts
  • packages/compiler-vapor/__tests__/transforms/vBind.spec.ts
  • packages/compiler-vapor/__tests__/transforms/vHtml.spec.ts
  • packages/compiler-vapor/__tests__/transforms/vOn.spec.ts
  • packages/compiler-vapor/__tests__/transforms/vText.spec.ts
  • packages/compiler-vapor/src/generators/block.ts
  • packages/compiler-vapor/src/generators/event.ts
  • packages/compiler-vapor/src/generators/expression.ts
  • packages/compiler-vapor/src/generators/html.ts
  • packages/compiler-vapor/src/generators/operation.ts
  • packages/compiler-vapor/src/generators/prop.ts
  • packages/compiler-vapor/src/generators/text.ts
  • packages/runtime-vapor/__tests__/bench/domBinding.bench.ts
  • packages/runtime-vapor/__tests__/bench/textBinding.bench.ts
  • packages/runtime-vapor/__tests__/renderEffect.spec.ts
  • packages/runtime-vapor/src/dom/bindingEffect.ts
  • packages/runtime-vapor/src/index.ts

Comment thread packages/runtime-vapor/src/dom/bindingEffect.ts Outdated
@edison1105 edison1105 force-pushed the edison/perf/singleOperationCodegen branch 2 times, most recently from e8d5bbf to 4dd2c1a Compare May 19, 2026 02:15
Lower single-operation Vapor DOM updates to dedicated binding helpers, including
text, props, html, class/style/value, and event bindings. The helpers reuse
RenderEffect lifecycle and scheduling semantics while avoiding the extra
renderEffect wrapper in generated code.

Keep multi-operation effects and shared-expression cases on the existing
renderEffect path to preserve batching and cached expression behavior. Add
compiler snapshots, runtime coverage, and binding benchmarks for the new paths.
@edison1105 edison1105 force-pushed the edison/perf/singleOperationCodegen branch from 4dd2c1a to b64fc28 Compare May 19, 2026 08:18
@edison1105 edison1105 force-pushed the edison/perf/singleOperationCodegen branch from 7cf03b6 to 58bc177 Compare May 21, 2026 02:40
…erationCodegen

# Conflicts:
#	packages/compiler-vapor/__tests__/transforms/__snapshots__/vSlot.spec.ts.snap
@edison1105 edison1105 marked this pull request as ready for review May 21, 2026 02:54
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
packages/runtime-vapor/src/dom/bindingEffect.ts (1)

506-511: ⚡ Quick win

Use setDynamicEvents in once-slot path for behavior parity and nullish safety.

Line 507–510 manually iterates getter(); this can throw on nullish values and may diverge from setDynamicEvents semantics. Reusing the shared helper keeps one behavior surface.

Suggested fix
 export function setDynamicEventsBinding(
   el: HTMLElement,
   getter: () => Record<string, (...args: any[]) => any>,
 ): void {
   if (inOnceSlot) {
-    const events = getter()
-    for (const name in events) {
-      on(el, name, events[name])
-    }
+    setDynamicEvents(el, getter())
     return
   }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/runtime-vapor/src/dom/bindingEffect.ts` around lines 506 - 511,
Replace the manual for-loop in the inOnceSlot branch with the shared helper
setDynamicEvents to keep behavior parity and nullish-safety: instead of calling
getter() and iterating with on(el, name, ...), call setDynamicEvents(el,
getter() ?? null) (or pass the raw getter() if setDynamicEvents accepts
null/undefined) and remove the for-loop and on calls so the once-slot path uses
the same event-install semantics as the non-once path.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@packages/runtime-vapor/src/dom/bindingEffect.ts`:
- Around line 506-511: Replace the manual for-loop in the inOnceSlot branch with
the shared helper setDynamicEvents to keep behavior parity and nullish-safety:
instead of calling getter() and iterating with on(el, name, ...), call
setDynamicEvents(el, getter() ?? null) (or pass the raw getter() if
setDynamicEvents accepts null/undefined) and remove the for-loop and on calls so
the once-slot path uses the same event-install semantics as the non-once path.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: abc19f9a-92cd-4cf2-87f7-b47331d9653d

📥 Commits

Reviewing files that changed from the base of the PR and between 4dd2c1a and 06735bc.

⛔ Files ignored due to path filters (16)
  • packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/__snapshots__/staticTemplate.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/expression.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/logicalIndex.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/transformChildren.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/transformElement.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/transformKey.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/vBind.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/vFor.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/vHtml.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/vIf.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/vModel.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/vOn.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/vOnce.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/vSlot.spec.ts.snap is excluded by !**/*.snap
  • packages/compiler-vapor/__tests__/transforms/__snapshots__/vText.spec.ts.snap is excluded by !**/*.snap
📒 Files selected for processing (21)
  • packages/compiler-vapor/__tests__/compile.spec.ts
  • packages/compiler-vapor/__tests__/transforms/transformChildren.spec.ts
  • packages/compiler-vapor/__tests__/transforms/transformElement.spec.ts
  • packages/compiler-vapor/__tests__/transforms/vBind.spec.ts
  • packages/compiler-vapor/__tests__/transforms/vHtml.spec.ts
  • packages/compiler-vapor/__tests__/transforms/vOn.spec.ts
  • packages/compiler-vapor/__tests__/transforms/vOnce.spec.ts
  • packages/compiler-vapor/__tests__/transforms/vText.spec.ts
  • packages/compiler-vapor/src/generators/block.ts
  • packages/compiler-vapor/src/generators/event.ts
  • packages/compiler-vapor/src/generators/expression.ts
  • packages/compiler-vapor/src/generators/html.ts
  • packages/compiler-vapor/src/generators/operation.ts
  • packages/compiler-vapor/src/generators/prop.ts
  • packages/compiler-vapor/src/generators/text.ts
  • packages/runtime-vapor/__tests__/bench/domBinding.bench.ts
  • packages/runtime-vapor/__tests__/bench/textBinding.bench.ts
  • packages/runtime-vapor/__tests__/componentSlots.spec.ts
  • packages/runtime-vapor/__tests__/renderEffect.spec.ts
  • packages/runtime-vapor/src/dom/bindingEffect.ts
  • packages/runtime-vapor/src/index.ts
✅ Files skipped from review due to trivial changes (1)
  • packages/compiler-vapor/tests/transforms/vText.spec.ts

@edison1105 edison1105 marked this pull request as draft May 21, 2026 03:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

scope: vapor related to vapor mode

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant