Skip to content

Commit e3bfd50

Browse files
committed
Merge branch 'main' of github.com:vuejs/core-vapor into ubugeeei/feat/component-slot
2 parents 60edb08 + 463b47e commit e3bfd50

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+1556
-1060
lines changed

.github/workflows/ci.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
- uses: actions/checkout@v4
2121

2222
- name: Install pnpm
23-
uses: pnpm/action-setup@v2
23+
uses: pnpm/action-setup@v3.0.0
2424

2525
- name: Install Node.js
2626
uses: actions/setup-node@v4
@@ -42,7 +42,7 @@ jobs:
4242
- uses: actions/checkout@v4
4343

4444
- name: Install pnpm
45-
uses: pnpm/action-setup@v2
45+
uses: pnpm/action-setup@v3.0.0
4646

4747
- name: Install Node.js
4848
uses: actions/setup-node@v4
@@ -102,7 +102,7 @@ jobs:
102102
# - uses: actions/checkout@v4
103103

104104
# - name: Install pnpm
105-
# uses: pnpm/action-setup@v2
105+
# uses: pnpm/action-setup@v3.0.0
106106

107107
# - name: Install Node.js
108108
# uses: actions/setup-node@v4

.github/workflows/size-data.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ on:
77
pull_request:
88
branches:
99
- main
10+
- minor
1011

1112
permissions:
1213
contents: read
@@ -22,7 +23,7 @@ jobs:
2223
- uses: actions/checkout@v4
2324

2425
- name: Install pnpm
25-
uses: pnpm/action-setup@v2
26+
uses: pnpm/action-setup@v3.0.0
2627

2728
- name: Install Node.js
2829
uses: actions/setup-node@v4

.github/workflows/size-report.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
- uses: actions/checkout@v4
2525

2626
- name: Install pnpm
27-
uses: pnpm/action-setup@v2
27+
uses: pnpm/action-setup@v3.0.0
2828

2929
- name: Install Node.js
3030
uses: actions/setup-node@v4

package.json

+12-12
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@
5959
"node": ">=18.12.0"
6060
},
6161
"devDependencies": {
62-
"@babel/parser": "^7.23.9",
63-
"@babel/types": "^7.23.9",
62+
"@babel/parser": "^7.24.0",
63+
"@babel/types": "^7.24.0",
6464
"@codspeed/vitest-plugin": "^2.3.1",
6565
"@rollup/plugin-alias": "^5.1.0",
6666
"@rollup/plugin-commonjs": "^25.0.7",
@@ -70,10 +70,10 @@
7070
"@rollup/plugin-terser": "^0.4.4",
7171
"@types/hash-sum": "^1.0.2",
7272
"@types/minimist": "^1.2.5",
73-
"@types/node": "^20.11.20",
73+
"@types/node": "^20.11.25",
7474
"@types/semver": "^7.5.8",
75-
"@typescript-eslint/eslint-plugin": "^7.0.2",
76-
"@typescript-eslint/parser": "^7.0.2",
75+
"@typescript-eslint/eslint-plugin": "^7.1.1",
76+
"@typescript-eslint/parser": "^7.1.1",
7777
"@vitest/coverage-istanbul": "^1.3.1",
7878
"@vitest/ui": "^1.2.2",
7979
"@vue/consolidate": "1.0.0",
@@ -90,30 +90,30 @@
9090
"jsdom": "^24.0.0",
9191
"lint-staged": "^15.2.2",
9292
"lodash": "^4.17.21",
93-
"magic-string": "^0.30.7",
93+
"magic-string": "^0.30.8",
9494
"markdown-table": "^3.0.3",
95-
"marked": "^12.0.0",
95+
"marked": "^12.0.1",
9696
"minimist": "^1.2.8",
9797
"npm-run-all2": "^6.1.2",
9898
"picocolors": "^1.0.0",
9999
"prettier": "^3.2.5",
100100
"pretty-bytes": "^6.1.1",
101101
"pug": "^3.0.2",
102-
"puppeteer": "~22.2.0",
102+
"puppeteer": "~22.4.1",
103103
"rimraf": "^5.0.5",
104-
"rollup": "^4.12.0",
104+
"rollup": "^4.12.1",
105105
"rollup-plugin-dts": "^6.1.0",
106106
"rollup-plugin-esbuild": "^6.1.1",
107107
"rollup-plugin-polyfill-node": "^0.13.0",
108108
"semver": "^7.6.0",
109109
"serve": "^14.2.1",
110-
"simple-git-hooks": "^2.9.0",
111-
"terser": "^5.28.1",
110+
"simple-git-hooks": "^2.10.0",
111+
"terser": "^5.29.1",
112112
"todomvc-app-css": "^2.4.3",
113113
"tslib": "^2.6.2",
114114
"tsx": "^4.7.1",
115115
"typescript": "^5.2.2",
116-
"vite": "^5.1.4",
116+
"vite": "^5.1.5",
117117
"vitest": "^1.3.1"
118118
}
119119
}

packages/compiler-core/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@
4646
},
4747
"homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/compiler-core#readme",
4848
"dependencies": {
49-
"@babel/parser": "^7.23.9",
49+
"@babel/parser": "^7.24.0",
5050
"@vue/shared": "workspace:*",
5151
"entities": "^4.5.0",
5252
"estree-walker": "^2.0.2",
5353
"source-map-js": "^1.0.2"
5454
},
5555
"devDependencies": {
56-
"@babel/types": "^7.23.9"
56+
"@babel/types": "^7.24.0"
5757
}
5858
}

packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap

+21
Original file line numberDiff line numberDiff line change
@@ -1362,3 +1362,24 @@ return { get foo() { return foo } }
13621362
13631363
}"
13641364
`;
1365+
1366+
exports[`compileScript > should care about runtimeModuleName 1`] = `
1367+
"import { withAsyncContext as _withAsyncContext } from "npm:vue"
1368+
1369+
export default {
1370+
async setup(__props, { expose: __expose }) {
1371+
__expose();
1372+
1373+
let __temp, __restore
1374+
1375+
;(
1376+
([__temp,__restore] = _withAsyncContext(() => Promise.resolve(1))),
1377+
await __temp,
1378+
__restore()
1379+
)
1380+
1381+
return { }
1382+
}
1383+
1384+
}"
1385+
`;

packages/compiler-sfc/__tests__/compileScript.spec.ts

+23
Original file line numberDiff line numberDiff line change
@@ -1472,3 +1472,26 @@ describe('SFC genDefaultAs', () => {
14721472
})
14731473
})
14741474
})
1475+
1476+
describe('compileScript', () => {
1477+
test('should care about runtimeModuleName', () => {
1478+
const { content } = compile(
1479+
`
1480+
<script setup>
1481+
await Promise.resolve(1)
1482+
</script>
1483+
`,
1484+
{
1485+
templateOptions: {
1486+
compilerOptions: {
1487+
runtimeModuleName: 'npm:vue',
1488+
},
1489+
},
1490+
},
1491+
)
1492+
expect(content).toMatch(
1493+
`import { withAsyncContext as _withAsyncContext } from "npm:vue"\n`,
1494+
)
1495+
assertCode(content)
1496+
})
1497+
})

packages/compiler-sfc/package.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,19 @@
4242
},
4343
"homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/compiler-sfc#readme",
4444
"dependencies": {
45-
"@babel/parser": "^7.23.9",
45+
"@babel/parser": "^7.24.0",
4646
"@vue/compiler-core": "workspace:*",
4747
"@vue/compiler-dom": "workspace:*",
4848
"@vue/compiler-ssr": "workspace:*",
4949
"@vue/compiler-vapor": "workspace:*",
5050
"@vue/shared": "workspace:*",
5151
"estree-walker": "^2.0.2",
52-
"magic-string": "^0.30.7",
52+
"magic-string": "^0.30.8",
5353
"postcss": "^8.4.35",
5454
"source-map-js": "^1.0.2"
5555
},
5656
"devDependencies": {
57-
"@babel/types": "^7.23.9",
57+
"@babel/types": "^7.24.0",
5858
"@vue/consolidate": "^1.0.0",
5959
"hash-sum": "^2.0.0",
6060
"lru-cache": "10.1.0",

packages/compiler-sfc/src/compileScript.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -999,10 +999,15 @@ export function compileScript(
999999

10001000
// 11. finalize Vue helper imports
10011001
if (ctx.helperImports.size > 0) {
1002+
const runtimeModuleName =
1003+
options.templateOptions?.compilerOptions?.runtimeModuleName
1004+
const importSrc = runtimeModuleName
1005+
? JSON.stringify(runtimeModuleName)
1006+
: `'vue'`
10021007
ctx.s.prepend(
10031008
`import { ${[...ctx.helperImports]
10041009
.map(h => `${h} as _${h}`)
1005-
.join(', ')} } from 'vue'\n`,
1010+
.join(', ')} } from ${importSrc}\n`,
10061011
)
10071012
}
10081013
if (ctx.vaporHelperImports.size > 0) {

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

+9-8
Original file line numberDiff line numberDiff line change
@@ -120,18 +120,19 @@ export function render(_ctx) {
120120
`;
121121
122122
exports[`compile > directives > v-pre > should not affect siblings after it 1`] = `
123-
"import { createTextNode as _createTextNode, insert as _insert, renderEffect as _renderEffect, setText as _setText, setDynamicProp as _setDynamicProp, template as _template } from 'vue/vapor';
123+
"import { resolveComponent as _resolveComponent, createComponent as _createComponent, createTextNode as _createTextNode, insert as _insert, renderEffect as _renderEffect, setText as _setText, setDynamicProp as _setDynamicProp, template as _template } from 'vue/vapor';
124124
const t0 = _template("<div :id=\\"foo\\"><Comp></Comp>{{ bar }}</div>")
125-
const t1 = _template("<div><Comp></Comp></div>")
125+
const t1 = _template("<div></div>")
126126
127127
export function render(_ctx) {
128128
const n0 = t0()
129-
const n2 = t1()
130-
const n1 = _createTextNode()
131-
_insert(n1, n2)
132-
_renderEffect(() => _setText(n1, _ctx.bar))
133-
_renderEffect(() => _setDynamicProp(n2, "id", _ctx.foo))
134-
return [n0, n2]
129+
const n3 = t1()
130+
const n1 = _createComponent(_resolveComponent("Comp"))
131+
const n2 = _createTextNode()
132+
_insert([n1, n2], n3)
133+
_renderEffect(() => _setText(n2, _ctx.bar))
134+
_renderEffect(() => _setDynamicProp(n3, "id", _ctx.foo))
135+
return [n0, n3]
135136
}"
136137
`;
137138

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

-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ describe('compile', () => {
7272
expect(code).not.contains('effect')
7373
})
7474

75-
// TODO: support multiple root nodes and components
7675
test('should not affect siblings after it', () => {
7776
const code = compile(
7877
`<div v-pre :id="foo"><Comp/>{{ bar }}</div>\n` +

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

+11
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,14 @@ export function render(_ctx) {
7575
return n0
7676
}"
7777
`;
78+
79+
exports[`compiler: element transform > v-on="obj" 1`] = `
80+
"import { renderEffect as _renderEffect, setDynamicEvents as _setDynamicEvents, template as _template } from 'vue/vapor';
81+
const t0 = _template("<div></div>")
82+
83+
export function render(_ctx) {
84+
const n0 = t0()
85+
_renderEffect(() => _setDynamicEvents(n0, _ctx.obj))
86+
return n0
87+
}"
88+
`;

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

+33
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,39 @@ export function render(_ctx) {
8484
}"
8585
`;
8686
87+
exports[`compiler: vModel transform > should support member expression 1`] = `
88+
"import { vModelText as _vModelText, withDirectives as _withDirectives, delegate as _delegate, template as _template } from 'vue/vapor';
89+
const t0 = _template("<input>")
90+
91+
export function render(_ctx) {
92+
const n0 = t0()
93+
const n1 = t0()
94+
const n2 = t0()
95+
_withDirectives(n0, [[_vModelText, () => _ctx.setupRef.child]])
96+
_withDirectives(n1, [[_vModelText, () => _ctx.setupLet.child]])
97+
_withDirectives(n2, [[_vModelText, () => _ctx.setupMaybeRef.child]])
98+
_delegate(n0, "update:modelValue", () => $event => (_ctx.setupRef.child = $event))
99+
_delegate(n1, "update:modelValue", () => $event => (_ctx.setupLet.child = $event))
100+
_delegate(n2, "update:modelValue", () => $event => (_ctx.setupMaybeRef.child = $event))
101+
return [n0, n1, n2]
102+
}"
103+
`;
104+
105+
exports[`compiler: vModel transform > should support member expression w/ inline 1`] = `
106+
"(() => {
107+
const n0 = t0()
108+
const n1 = t0()
109+
const n2 = t0()
110+
_withDirectives(n0, [[_vModelText, () => setupRef.value.child]])
111+
_withDirectives(n1, [[_vModelText, () => _unref(setupLet).child]])
112+
_withDirectives(n2, [[_vModelText, () => _unref(setupMaybeRef).child]])
113+
_delegate(n0, "update:modelValue", () => $event => (setupRef.value.child = $event))
114+
_delegate(n1, "update:modelValue", () => $event => (_unref(setupLet).child = $event))
115+
_delegate(n2, "update:modelValue", () => $event => (_unref(setupMaybeRef).child = $event))
116+
return [n0, n1, n2]
117+
})()"
118+
`;
119+
87120
exports[`compiler: vModel transform > should support select 1`] = `
88121
"import { vModelSelect as _vModelSelect, withDirectives as _withDirectives, delegate as _delegate, template as _template } from 'vue/vapor';
89122
const t0 = _template("<select></select>")

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

+28
Original file line numberDiff line numberDiff line change
@@ -344,4 +344,32 @@ describe('compiler: element transform', () => {
344344
},
345345
])
346346
})
347+
348+
test('v-on="obj"', () => {
349+
const { code, ir } = compileWithElementTransform(`<div v-on="obj" />`)
350+
expect(code).toMatchSnapshot()
351+
expect(ir.block.effect).toMatchObject([
352+
{
353+
expressions: [
354+
{
355+
type: NodeTypes.SIMPLE_EXPRESSION,
356+
content: 'obj',
357+
isStatic: false,
358+
},
359+
],
360+
operations: [
361+
{
362+
type: IRNodeTypes.SET_DYNAMIC_EVENTS,
363+
element: 0,
364+
event: {
365+
type: NodeTypes.SIMPLE_EXPRESSION,
366+
content: 'obj',
367+
isStatic: false,
368+
},
369+
},
370+
],
371+
},
372+
])
373+
expect(code).contains('_setDynamicEvents(n0, _ctx.obj)')
374+
})
347375
})

packages/compiler-vapor/__tests__/transforms/vModel.spec.ts

+32-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { makeCompile } from './_utils'
22
import { transformChildren, transformElement, transformVModel } from '../../src'
3-
import { DOMErrorCodes } from '@vue/compiler-dom'
3+
import { BindingTypes, DOMErrorCodes } from '@vue/compiler-dom'
44

55
const compileWithVModel = makeCompile({
66
nodeTransforms: [transformElement, transformChildren],
@@ -171,4 +171,35 @@ describe('compiler: vModel transform', () => {
171171
expect(code).toMatchSnapshot()
172172
})
173173
})
174+
175+
test('should support member expression', () => {
176+
const { code } = compileWithVModel(
177+
'<input v-model="setupRef.child" /><input v-model="setupLet.child" /><input v-model="setupMaybeRef.child" />',
178+
{
179+
bindingMetadata: {
180+
setupRef: BindingTypes.SETUP_REF,
181+
setupLet: BindingTypes.SETUP_LET,
182+
setupMaybeRef: BindingTypes.SETUP_MAYBE_REF,
183+
},
184+
},
185+
)
186+
187+
expect(code).toMatchSnapshot()
188+
})
189+
190+
test('should support member expression w/ inline', () => {
191+
const { code } = compileWithVModel(
192+
'<input v-model="setupRef.child" /><input v-model="setupLet.child" /><input v-model="setupMaybeRef.child" />',
193+
{
194+
bindingMetadata: {
195+
setupRef: BindingTypes.SETUP_REF,
196+
setupLet: BindingTypes.SETUP_LET,
197+
setupMaybeRef: BindingTypes.SETUP_MAYBE_REF,
198+
},
199+
inline: true,
200+
},
201+
)
202+
203+
expect(code).toMatchSnapshot()
204+
})
174205
})

0 commit comments

Comments
 (0)