Skip to content

Commit f8f37d9

Browse files
authored
Merge branch 'main' into feat/app-effect-scope
2 parents a519233 + 70773d0 commit f8f37d9

Some content is hidden

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

74 files changed

+1673
-759
lines changed

.github/workflows/autofix.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
- uses: actions/checkout@v4
1515

1616
- name: Install pnpm
17-
uses: pnpm/action-setup@v3.0.0
17+
uses: pnpm/action-setup@v4.0.0
1818

1919
- name: Set node version to 18
2020
uses: actions/setup-node@v4

.github/workflows/canary-minor.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
ref: minor
1818

1919
- name: Install pnpm
20-
uses: pnpm/action-setup@v3.0.0
20+
uses: pnpm/action-setup@v4.0.0
2121

2222
- name: Set node version to 18
2323
uses: actions/setup-node@v4

.github/workflows/canary.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
- uses: actions/checkout@v4
1616

1717
- name: Install pnpm
18-
uses: pnpm/action-setup@v3.0.0
18+
uses: pnpm/action-setup@v4.0.0
1919

2020
- name: Install Node.js
2121
uses: actions/setup-node@v4

.github/workflows/ci.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
- uses: actions/checkout@v4
2222

2323
- name: Install pnpm
24-
uses: pnpm/action-setup@v3.0.0
24+
uses: pnpm/action-setup@v4.0.0
2525

2626
- name: Install Node.js
2727
uses: actions/setup-node@v4
@@ -43,7 +43,7 @@ jobs:
4343
- uses: actions/checkout@v4
4444

4545
- name: Install pnpm
46-
uses: pnpm/action-setup@v3.0.0
46+
uses: pnpm/action-setup@v4.0.0
4747

4848
- name: Install Node.js
4949
uses: actions/setup-node@v4
@@ -72,7 +72,7 @@ jobs:
7272
key: chromium-${{ hashFiles('pnpm-lock.yaml') }}
7373

7474
- name: Install pnpm
75-
uses: pnpm/action-setup@v3.0.0
75+
uses: pnpm/action-setup@v4.0.0
7676

7777
- name: Install Node.js
7878
uses: actions/setup-node@v4
@@ -98,7 +98,7 @@ jobs:
9898
- uses: actions/checkout@v4
9999

100100
- name: Install pnpm
101-
uses: pnpm/action-setup@v3.0.0
101+
uses: pnpm/action-setup@v4.0.0
102102

103103
- name: Install Node.js
104104
uses: actions/setup-node@v4

.github/workflows/size-data.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
- uses: actions/checkout@v4
2424

2525
- name: Install pnpm
26-
uses: pnpm/action-setup@v3.0.0
26+
uses: pnpm/action-setup@v4.0.0
2727

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

.github/workflows/size-report.yml

Lines changed: 3 additions & 3 deletions
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@v3.0.0
27+
uses: pnpm/action-setup@v4.0.0
2828

2929
- name: Install Node.js
3030
uses: actions/setup-node@v4
@@ -36,14 +36,14 @@ jobs:
3636
run: pnpm install
3737

3838
- name: Download Size Data
39-
uses: dawidd6/action-download-artifact@v3
39+
uses: dawidd6/action-download-artifact@v4
4040
with:
4141
name: size-data
4242
run_id: ${{ github.event.workflow_run.id }}
4343
path: temp/size
4444

4545
- name: Download Previous Size Data
46-
uses: dawidd6/action-download-artifact@v3
46+
uses: dawidd6/action-download-artifact@v4
4747
with:
4848
branch: main
4949
workflow: size-data.yml

package.json

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"private": true,
33
"version": "3.4.27",
4-
"packageManager": "pnpm@9.1.2",
4+
"packageManager": "pnpm@9.2.0",
55
"type": "module",
66
"scripts": {
77
"dev": "node scripts/dev.js",
@@ -59,8 +59,8 @@
5959
"node": ">=18.12.0"
6060
},
6161
"devDependencies": {
62-
"@babel/parser": "^7.24.6",
63-
"@babel/types": "^7.24.6",
62+
"@babel/parser": "^7.24.7",
63+
"@babel/types": "^7.24.7",
6464
"@codspeed/vitest-plugin": "^3.1.0",
6565
"@rollup/plugin-alias": "^5.1.0",
6666
"@rollup/plugin-commonjs": "^25.0.8",
@@ -70,19 +70,19 @@
7070
"@rollup/plugin-terser": "^0.4.4",
7171
"@types/hash-sum": "^1.0.2",
7272
"@types/minimist": "^1.2.5",
73-
"@types/node": "^20.12.12",
73+
"@types/node": "^20.14.2",
7474
"@types/semver": "^7.5.8",
7575
"@vitest/coverage-istanbul": "^1.5.2",
7676
"@vue/consolidate": "1.0.0",
7777
"conventional-changelog-cli": "^4.1.0",
7878
"enquirer": "^2.4.1",
79-
"esbuild": "^0.21.4",
79+
"esbuild": "^0.21.5",
8080
"esbuild-plugin-polyfill-node": "^0.3.0",
81-
"eslint": "^9.3.0",
81+
"eslint": "^9.4.0",
8282
"eslint-plugin-import-x": "^0.5.1",
8383
"eslint-plugin-vitest": "^0.5.4",
8484
"estree-walker": "^2.0.2",
85-
"execa": "^8.0.1",
85+
"execa": "^9.2.0",
8686
"jsdom": "^24.0.0",
8787
"lint-staged": "^15.2.5",
8888
"lodash": "^4.17.21",
@@ -92,7 +92,7 @@
9292
"minimist": "^1.2.8",
9393
"npm-run-all2": "^6.2.0",
9494
"picocolors": "^1.0.1",
95-
"prettier": "^3.2.5",
95+
"prettier": "^3.3.1",
9696
"pretty-bytes": "^6.1.1",
9797
"pug": "^3.0.3",
9898
"puppeteer": "~22.7.1",
@@ -104,13 +104,13 @@
104104
"semver": "^7.6.2",
105105
"serve": "^14.2.3",
106106
"simple-git-hooks": "^2.11.1",
107-
"terser": "^5.31.0",
107+
"terser": "^5.31.1",
108108
"todomvc-app-css": "^2.4.3",
109-
"tslib": "^2.6.2",
110-
"tsx": "^4.11.0",
109+
"tslib": "^2.6.3",
110+
"tsx": "^4.15.1",
111111
"typescript": "~5.4.5",
112-
"typescript-eslint": "^7.10.0",
113-
"vite": "^5.2.11",
112+
"typescript-eslint": "^7.12.0",
113+
"vite": "^5.2.13",
114114
"vitest": "^1.5.2"
115115
},
116116
"pnpm": {

packages/compiler-core/__tests__/transforms/vFor.spec.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {
1818
import { ErrorCodes } from '../../src/errors'
1919
import { type CompilerOptions, generate } from '../../src'
2020
import { FRAGMENT, RENDER_LIST, RENDER_SLOT } from '../../src/runtimeHelpers'
21-
import { PatchFlags } from '@vue/shared'
21+
import { PatchFlagNames, PatchFlags } from '@vue/shared'
2222
import { createObjectMatcher, genFlagText } from '../testUtils'
2323

2424
export function parseWithForTransform(
@@ -1043,5 +1043,33 @@ describe('compiler: v-for', () => {
10431043
})
10441044
expect(generate(root).code).toMatchSnapshot()
10451045
})
1046+
1047+
test('template v-for key w/ :key shorthand on div', () => {
1048+
const {
1049+
node: { codegenNode },
1050+
} = parseWithForTransform('<div v-for="key in keys" :key>test</div>')
1051+
expect(codegenNode.patchFlag).toBe(
1052+
`${PatchFlags.KEYED_FRAGMENT} /* ${PatchFlagNames[PatchFlags.KEYED_FRAGMENT]} */`,
1053+
)
1054+
})
1055+
1056+
test('template v-for key w/ :key shorthand on template injected to the child', () => {
1057+
const {
1058+
node: { codegenNode },
1059+
} = parseWithForTransform(
1060+
'<template v-for="key in keys" :key><div>test</div></template>',
1061+
)
1062+
expect(assertSharedCodegen(codegenNode, true)).toMatchObject({
1063+
source: { content: `keys` },
1064+
params: [{ content: `key` }],
1065+
innerVNodeCall: {
1066+
type: NodeTypes.VNODE_CALL,
1067+
tag: `"div"`,
1068+
props: createObjectMatcher({
1069+
key: '[key]',
1070+
}),
1071+
},
1072+
})
1073+
})
10461074
})
10471075
})

packages/compiler-core/package.json

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

packages/compiler-core/src/transforms/vBind.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import type { DirectiveTransform } from '../transform'
1+
import type { DirectiveTransform, TransformContext } from '../transform'
22
import {
3+
type DirectiveNode,
34
type ExpressionNode,
45
NodeTypes,
56
type SimpleExpressionNode,
@@ -56,11 +57,8 @@ export const transformBind: DirectiveTransform = (dir, _node, context) => {
5657
}
5758
}
5859

59-
const propName = camelize((arg as SimpleExpressionNode).content)
60-
exp = dir.exp = createSimpleExpression(propName, false, arg.loc)
61-
if (!__BROWSER__) {
62-
exp = dir.exp = processExpression(exp, context)
63-
}
60+
transformBindShorthand(dir, context)
61+
exp = dir.exp!
6462
}
6563

6664
if (arg.type !== NodeTypes.SIMPLE_EXPRESSION) {
@@ -98,6 +96,19 @@ export const transformBind: DirectiveTransform = (dir, _node, context) => {
9896
}
9997
}
10098

99+
export const transformBindShorthand = (
100+
dir: DirectiveNode,
101+
context: TransformContext,
102+
) => {
103+
const arg = dir.arg!
104+
105+
const propName = camelize((arg as SimpleExpressionNode).content)
106+
dir.exp = createSimpleExpression(propName, false, arg.loc)
107+
if (!__BROWSER__) {
108+
dir.exp = processExpression(dir.exp, context)
109+
}
110+
}
111+
101112
const injectPrefix = (arg: ExpressionNode, prefix: string) => {
102113
if (arg.type === NodeTypes.SIMPLE_EXPRESSION) {
103114
if (arg.isStatic) {

packages/compiler-core/src/transforms/vFor.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import {
4747
import { processExpression } from './transformExpression'
4848
import { validateBrowserExpression } from '../validateExpression'
4949
import { PatchFlagNames, PatchFlags } from '@vue/shared'
50+
import { transformBindShorthand } from './vBind'
5051

5152
export const transformFor = createStructuralDirectiveTransform(
5253
'for',
@@ -60,13 +61,20 @@ export const transformFor = createStructuralDirectiveTransform(
6061
]) as ForRenderListExpression
6162
const isTemplate = isTemplateNode(node)
6263
const memo = findDir(node, 'memo')
63-
const keyProp = findProp(node, `key`)
64+
const keyProp = findProp(node, `key`, false, true)
65+
if (keyProp && keyProp.type === NodeTypes.DIRECTIVE && !keyProp.exp) {
66+
// resolve :key shorthand #10882
67+
transformBindShorthand(keyProp, context)
68+
}
6469
const keyExp =
6570
keyProp &&
6671
(keyProp.type === NodeTypes.ATTRIBUTE
67-
? createSimpleExpression(keyProp.value!.content, true)
68-
: keyProp.exp!)
69-
const keyProperty = keyProp ? createObjectProperty(`key`, keyExp!) : null
72+
? keyProp.value
73+
? createSimpleExpression(keyProp.value.content, true)
74+
: undefined
75+
: keyProp.exp)
76+
const keyProperty =
77+
keyProp && keyExp ? createObjectProperty(`key`, keyExp) : null
7078

7179
if (!__BROWSER__ && isTemplate) {
7280
// #2085 / #5288 process :key and v-memo expressions need to be

0 commit comments

Comments
 (0)