Skip to content

fix(runtime-vapor): pass vdom components plain object vnode props - #15738

Open
ValentinYoushkevich wants to merge 1 commit into
vuejs:minorfrom
ValentinYoushkevich:fix/vapor-plain-vdom-vnode-props
Open

ValentinYoushkevich wants to merge 1 commit into
vuejs:minorfrom
ValentinYoushkevich:fix/vapor-plain-vdom-vnode-props

Conversation

@ValentinYoushkevich

Copy link
Copy Markdown

Since #15708, a VDOM component rendered by a Vapor parent gets the parent's raw props record as vnode.props. That record is created with Object.create(null), so VDOM code that calls Object.prototype methods on it throws. Vuetify's useProxiedModel does exactly this: vm.vnode.props?.hasOwnProperty(prop) (source). Every v-model component built on it (VTextField, VCheckbox, VBtnToggle...) breaks in a Vapor template with TypeError: vm.vnode.props?.hasOwnProperty is not a function (playground).

This hands the vnode a plain object copy, the same as before #15708 and as in #13382. The raw record itself stays prototype-less for Vapor.

@coderabbitai

coderabbitai Bot commented Oct 1, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

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: Advanced

Run ID: e7df86a0-265a-494b-944f-95d85b840566

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
  • Autopilot 路 Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

鉂わ笍 Share

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

@pkg-pr-new

pkg-pr-new Bot commented Oct 1, 2026

Copy link
Copy Markdown

Open in StackBlitz

@vue/compiler-core

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

@vue/compiler-dom

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

@vue/compiler-sfc

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

@vue/compiler-ssr

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

@vue/compiler-vapor

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

@vue/reactivity

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

@vue/runtime-core

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

@vue/runtime-dom

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

@vue/runtime-vapor

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

@vue/server-renderer

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

@vue/shared

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

vue

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

@vue/compat

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

commit: a5a08b6

@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown

Size Report

Bundles

File Size Gzip Brotli
compiler-dom.global.prod.js 87.2 kB (+1 B) 30.6 kB (+1 B) 26.9 kB (-42 B)
runtime-dom.global.prod.js 117 kB (+125 B) 43.9 kB (+54 B) 39.3 kB (+54 B)
vue.global.prod.js 177 kB (+125 B) 64 kB (+63 B) 57 kB (+46 B)

Usages

Name Size Gzip Brotli
createApp (CAPI only) 53.2 kB (+106 B) 20.7 kB (+45 B) 18.9 kB (+20 B)
createApp 62 kB (+106 B) 23.9 kB (+42 B) 21.8 kB (+27 B)
createApp + vaporInteropPlugin 129 kB (+6.68 kB) 46.5 kB (+2.36 kB) 41.9 kB (+2.07 kB)
createVaporApp 34.1 kB (+3.3 kB) 13.1 kB (+1.26 kB) 12 kB (+1.15 kB)
createSSRApp 67 kB (+106 B) 26 kB (+48 B) 23.6 kB (+31 B)
createVaporSSRApp 40.8 kB (+3.73 kB) 15.5 kB (+1.43 kB) 14.2 kB (+1.3 kB)
defineCustomElement 68.5 kB (+106 B) 25.9 kB (+47 B) 23.6 kB (+57 B)
defineVaporCustomElement 48.6 kB (+2.44 kB) 17.7 kB (+925 B) 16.3 kB (+876 B)
overall 77.5 kB (+106 B) 29.5 kB (+46 B) 26.7 kB (+98 B)

@edison1105 edison1105 added the scope: vapor related to vapor mode label Oct 1, 2026

This branch has not been deployed

No deployments
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.

2 participants