Skip to content
This repository was archived by the owner on Jul 19, 2025. It is now read-only.

Commit 1bb9a0f

Browse files
authored
refactor: drop recordPropMetadata + merge renderEffect (#301)
1 parent a3edc27 commit 1bb9a0f

30 files changed

+772
-394
lines changed

packages/compiler-vapor/__tests__/__snapshots__/compile.spec.ts.snap

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
22

33
exports[`compile > bindings 1`] = `
4-
"import { renderEffect as _renderEffect, setText as _setText, template as _template } from 'vue/vapor';
4+
"import { setText as _setText, renderEffect as _renderEffect, template as _template } from 'vue/vapor';
55
const t0 = _template("<div></div>")
66
77
export function render(_ctx, $props, $emit, $attrs, $slots) {
88
const n0 = t0()
9-
_renderEffect(() => _setText(n0, "count is ", _ctx.count, "."))
9+
let _count
10+
_renderEffect(() => _count !== _ctx.count && _setText(n0, "count is ", (_count = _ctx.count), "."))
1011
return n0
1112
}"
1213
`;
@@ -151,7 +152,7 @@ export function render(_ctx, $props, $emit, $attrs, $slots) {
151152
`;
152153
153154
exports[`compile > directives > v-pre > should not affect siblings after it 1`] = `
154-
"import { resolveComponent as _resolveComponent, createComponent as _createComponent, createTextNode as _createTextNode, insert as _insert, renderEffect as _renderEffect, setDOMProp as _setDOMProp, template as _template } from 'vue/vapor';
155+
"import { resolveComponent as _resolveComponent, createComponent as _createComponent, createTextNode as _createTextNode, insert as _insert, setDOMProp as _setDOMProp, renderEffect as _renderEffect, template as _template } from 'vue/vapor';
155156
const t0 = _template("<div :id=\\"foo\\"><Comp></Comp>{{ bar }}</div>")
156157
const t1 = _template("<div></div>")
157158
@@ -162,7 +163,8 @@ export function render(_ctx, $props, $emit, $attrs, $slots) {
162163
const n1 = _createComponent(_component_Comp)
163164
const n2 = _createTextNode(() => [_ctx.bar])
164165
_insert([n1, n2], n3)
165-
_renderEffect(() => _setDOMProp(n3, "id", _ctx.foo))
166+
let _foo
167+
_renderEffect(() => _foo !== _ctx.foo && _setDOMProp(n3, "id", (_foo = _ctx.foo)))
166168
return [n0, n3]
167169
}"
168170
`;
@@ -177,16 +179,22 @@ export function render(_ctx) {
177179
`;
178180
179181
exports[`compile > dynamic root nodes and interpolation 1`] = `
180-
"import { delegate as _delegate, setInheritAttrs as _setInheritAttrs, renderEffect as _renderEffect, setText as _setText, setDOMProp as _setDOMProp, delegateEvents as _delegateEvents, template as _template } from 'vue/vapor';
182+
"import { delegate as _delegate, setInheritAttrs as _setInheritAttrs, setText as _setText, setDOMProp as _setDOMProp, renderEffect as _renderEffect, delegateEvents as _delegateEvents, template as _template } from 'vue/vapor';
181183
const t0 = _template("<button></button>")
182184
_delegateEvents("click")
183185
184186
export function render(_ctx) {
185187
const n0 = t0()
186188
_delegate(n0, "click", () => _ctx.handleClick)
187189
_setInheritAttrs(["id"])
188-
_renderEffect(() => _setText(n0, _ctx.count, "foo", _ctx.count, "foo", _ctx.count))
189-
_renderEffect(() => _setDOMProp(n0, "id", _ctx.count))
190+
let _count
191+
_renderEffect(() => {
192+
if(_count !== _ctx.count) {
193+
_setText(n0, _ctx.count, "foo", _ctx.count, "foo", _ctx.count)
194+
_setDOMProp(n0, "id", _ctx.count)
195+
_count = _ctx.count
196+
}
197+
})
190198
return n0
191199
}"
192200
`;
@@ -202,7 +210,8 @@ exports[`compile > expression parsing > v-bind 1`] = `
202210
"((_ctx) => {
203211
const n0 = t0()
204212
_setInheritAttrs(true)
205-
_renderEffect(() => _setDynamicProps(n0, [{ [key.value+1]: _unref(foo)[key.value+1]() }], true))
213+
let _key_value, _foo, _key_value_foo
214+
_renderEffect(() => (_key_value !== key.value || _foo !== _unref(foo)) && (_key_value_foo = _setDynamicProps(n0, _key_value_foo, [{ [key.value+1]: _unref(foo)[key.value+1]() }], true)))
206215
return n0
207216
})()"
208217
`;

packages/compiler-vapor/__tests__/compile.spec.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,9 @@ describe('compile', () => {
194194
})
195195
expect(code).matchSnapshot()
196196
expect(code).contains('key.value+1')
197-
expect(code).contains('_unref(foo)[key.value+1]()')
197+
expect(code).contains(
198+
'(_key_value !== key.value || _foo !== _unref(foo)) && (_key_value_foo = _setDynamicProps(n0, _key_value_foo, [{ [key.value+1]: _unref(foo)[key.value+1]() }], true))',
199+
)
198200
})
199201

200202
// TODO: add more test for expression parsing (v-on, v-slot, v-for)
Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
22

33
exports[`compiler: children transform > children & sibling references 1`] = `
4-
"import { next as _next, createTextNode as _createTextNode, insert as _insert, renderEffect as _renderEffect, setText as _setText, template as _template } from 'vue/vapor';
4+
"import { next as _next, createTextNode as _createTextNode, insert as _insert, setText as _setText, renderEffect as _renderEffect, template as _template } from 'vue/vapor';
55
const t0 = _template("<div><p></p> <!><p></p></div>")
66
77
export function render(_ctx) {
@@ -11,8 +11,11 @@ export function render(_ctx) {
1111
const n2 = n3.nextSibling
1212
const n1 = _createTextNode(() => [_ctx.second, " ", _ctx.third, " "])
1313
_insert(n1, n4, n3)
14-
_renderEffect(() => _setText(n0, _ctx.first))
15-
_renderEffect(() => _setText(n2, _ctx.forth))
14+
let _first, _forth
15+
_renderEffect(() => {
16+
_first !== _ctx.first && _setText(n0, (_first = _ctx.first))
17+
_forth !== _ctx.forth && _setText(n2, (_forth = _ctx.forth))
18+
})
1619
return n4
1720
}"
1821
`;

packages/compiler-vapor/__tests__/transforms/__snapshots__/transformElement.spec.ts.snap

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -297,13 +297,14 @@ export function render(_ctx) {
297297
`;
298298
299299
exports[`compiler: element transform > props merging: class 1`] = `
300-
"import { setInheritAttrs as _setInheritAttrs, renderEffect as _renderEffect, setClass as _setClass, template as _template } from 'vue/vapor';
300+
"import { setInheritAttrs as _setInheritAttrs, setClass as _setClass, renderEffect as _renderEffect, template as _template } from 'vue/vapor';
301301
const t0 = _template("<div></div>")
302302
303303
export function render(_ctx) {
304304
const n0 = t0()
305305
_setInheritAttrs(["class"])
306-
_renderEffect(() => _setClass(n0, ["foo", { bar: _ctx.isBar }], true))
306+
let _isBar
307+
_renderEffect(() => _isBar !== _ctx.isBar && _setClass(n0, ["foo", { bar: (_isBar = _ctx.isBar) }], true))
307308
return n0
308309
}"
309310
`;
@@ -326,7 +327,7 @@ export function render(_ctx) {
326327
`;
327328
328329
exports[`compiler: element transform > props merging: style 1`] = `
329-
"import { setInheritAttrs as _setInheritAttrs, renderEffect as _renderEffect, setStyle as _setStyle, template as _template } from 'vue/vapor';
330+
"import { setInheritAttrs as _setInheritAttrs, setStyle as _setStyle, renderEffect as _renderEffect, template as _template } from 'vue/vapor';
330331
const t0 = _template("<div></div>")
331332
332333
export function render(_ctx) {
@@ -349,55 +350,59 @@ export function render(_ctx) {
349350
`;
350351
351352
exports[`compiler: element transform > v-bind="obj" 1`] = `
352-
"import { setInheritAttrs as _setInheritAttrs, renderEffect as _renderEffect, setDynamicProps as _setDynamicProps, template as _template } from 'vue/vapor';
353+
"import { setInheritAttrs as _setInheritAttrs, setDynamicProps as _setDynamicProps, renderEffect as _renderEffect, template as _template } from 'vue/vapor';
353354
const t0 = _template("<div></div>")
354355
355356
export function render(_ctx) {
356357
const n0 = t0()
357358
_setInheritAttrs(true)
358-
_renderEffect(() => _setDynamicProps(n0, [_ctx.obj], true))
359+
let _obj
360+
_renderEffect(() => _obj !== _ctx.obj && (_obj = _setDynamicProps(n0, _obj, [_ctx.obj], true)))
359361
return n0
360362
}"
361363
`;
362364
363365
exports[`compiler: element transform > v-bind="obj" after static prop 1`] = `
364-
"import { setInheritAttrs as _setInheritAttrs, renderEffect as _renderEffect, setDynamicProps as _setDynamicProps, template as _template } from 'vue/vapor';
366+
"import { setInheritAttrs as _setInheritAttrs, setDynamicProps as _setDynamicProps, renderEffect as _renderEffect, template as _template } from 'vue/vapor';
365367
const t0 = _template("<div></div>")
366368
367369
export function render(_ctx) {
368370
const n0 = t0()
369371
_setInheritAttrs(true)
370-
_renderEffect(() => _setDynamicProps(n0, [{ id: "foo" }, _ctx.obj], true))
372+
let _obj
373+
_renderEffect(() => _obj !== _ctx.obj && (_obj = _setDynamicProps(n0, _obj, [{ id: "foo" }, _ctx.obj], true)))
371374
return n0
372375
}"
373376
`;
374377
375378
exports[`compiler: element transform > v-bind="obj" before static prop 1`] = `
376-
"import { setInheritAttrs as _setInheritAttrs, renderEffect as _renderEffect, setDynamicProps as _setDynamicProps, template as _template } from 'vue/vapor';
379+
"import { setInheritAttrs as _setInheritAttrs, setDynamicProps as _setDynamicProps, renderEffect as _renderEffect, template as _template } from 'vue/vapor';
377380
const t0 = _template("<div></div>")
378381
379382
export function render(_ctx) {
380383
const n0 = t0()
381384
_setInheritAttrs(true)
382-
_renderEffect(() => _setDynamicProps(n0, [_ctx.obj, { id: "foo" }], true))
385+
let _obj
386+
_renderEffect(() => _obj !== _ctx.obj && (_obj = _setDynamicProps(n0, _obj, [_ctx.obj, { id: "foo" }], true)))
383387
return n0
384388
}"
385389
`;
386390
387391
exports[`compiler: element transform > v-bind="obj" between static props 1`] = `
388-
"import { setInheritAttrs as _setInheritAttrs, renderEffect as _renderEffect, setDynamicProps as _setDynamicProps, template as _template } from 'vue/vapor';
392+
"import { setInheritAttrs as _setInheritAttrs, setDynamicProps as _setDynamicProps, renderEffect as _renderEffect, template as _template } from 'vue/vapor';
389393
const t0 = _template("<div></div>")
390394
391395
export function render(_ctx) {
392396
const n0 = t0()
393397
_setInheritAttrs(true)
394-
_renderEffect(() => _setDynamicProps(n0, [{ id: "foo" }, _ctx.obj, { class: "bar" }], true))
398+
let _obj
399+
_renderEffect(() => _obj !== _ctx.obj && (_obj = _setDynamicProps(n0, _obj, [{ id: "foo" }, _ctx.obj, { class: "bar" }], true)))
395400
return n0
396401
}"
397402
`;
398403
399404
exports[`compiler: element transform > v-on="obj" 1`] = `
400-
"import { renderEffect as _renderEffect, setDynamicEvents as _setDynamicEvents, template as _template } from 'vue/vapor';
405+
"import { setDynamicEvents as _setDynamicEvents, renderEffect as _renderEffect, template as _template } from 'vue/vapor';
401406
const t0 = _template("<div></div>")
402407
403408
export function render(_ctx) {

packages/compiler-vapor/__tests__/transforms/__snapshots__/transformTemplateRef.spec.ts.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
22

33
exports[`compiler: template ref transform > dynamic ref 1`] = `
4-
"import { renderEffect as _renderEffect, setRef as _setRef, template as _template } from 'vue/vapor';
4+
"import { setRef as _setRef, renderEffect as _renderEffect, template as _template } from 'vue/vapor';
55
const t0 = _template("<div></div>")
66
77
export function render(_ctx) {

0 commit comments

Comments
 (0)