From 96e8e99304c739c30a6f28d8f26bf47cb3a83fb4 Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 29 Apr 2024 18:12:27 +0800 Subject: [PATCH 01/13] test: fix test case name --- .../__tests__/transforms/transformExpressions.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts b/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts index 273634dd57b..ffd93d791ca 100644 --- a/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts +++ b/packages/compiler-core/__tests__/transforms/transformExpressions.spec.ts @@ -431,7 +431,7 @@ describe('compiler: expression transform', () => { }) }) - test('should not bail constant on strings w/ ()', () => { + test('should bail constant for global identifiers w/ new or call expressions', () => { const node = parseWithExpressionTransform( `{{ new Date().getFullYear() }}`, ) as InterpolationNode From f750c41b51a61b0719a831d559e83cc4f208f570 Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 29 Apr 2024 18:14:02 +0800 Subject: [PATCH 02/13] chore(workflow): link to minor branch changelog for pre-releases [ci skip] --- .github/workflows/release-tag.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml index 16c6c9c5c10..d93510607a9 100644 --- a/.github/workflows/release-tag.yml +++ b/.github/workflows/release-tag.yml @@ -24,4 +24,5 @@ jobs: with: tag_name: ${{ github.ref }} body: | - Please refer to [CHANGELOG.md](https://github.com/vuejs/core/blob/main/CHANGELOG.md) for details. + For stable releases, please refer to [CHANGELOG.md](https://github.com/vuejs/core/blob/main/CHANGELOG.md) for details. + For pre-releases, please refer to [CHANGELOG.md](https://github.com/vuejs/core/blob/minor/CHANGELOG.md) of the `minor` branch. From ca7d421e8775f6813f8943d32ab485e0c542f98b Mon Sep 17 00:00:00 2001 From: huangcheng <1530844743@qq.com> Date: Mon, 29 Apr 2024 18:55:58 +0800 Subject: [PATCH 03/13] fix(compiler-core): add support for arrow aysnc function with unbracketed (#5789) close #5788 --- .../__tests__/transforms/vOn.spec.ts | 50 +++++++++++++++++++ packages/compiler-core/src/transforms/vOn.ts | 2 +- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/packages/compiler-core/__tests__/transforms/vOn.spec.ts b/packages/compiler-core/__tests__/transforms/vOn.spec.ts index 568fa0b5a8c..b1c37e3f74e 100644 --- a/packages/compiler-core/__tests__/transforms/vOn.spec.ts +++ b/packages/compiler-core/__tests__/transforms/vOn.spec.ts @@ -286,6 +286,23 @@ describe('compiler: transform v-on', () => { }) }) + test('should NOT wrap as function if expression is already function expression (async)', () => { + const { node } = parseWithVOn( + `
`, + ) + expect((node.codegenNode as VNodeCall).props).toMatchObject({ + properties: [ + { + key: { content: `onClick` }, + value: { + type: NodeTypes.SIMPLE_EXPRESSION, + content: `async $event => await foo($event)`, + }, + }, + ], + }) + }) + test('should NOT wrap as function if expression is already function expression (with newlines)', () => { const { node } = parseWithVOn( `
await foo(e)" />`, + { + prefixIdentifiers: true, + cacheHandlers: true, + }, + ) + + expect(root.cached).toBe(1) + const vnodeCall = node.codegenNode as VNodeCall + // should not treat cached handler as dynamicProp, so no flags + expect(vnodeCall.patchFlag).toBeUndefined() + expect( + (vnodeCall.props as ObjectExpression).properties[0].value, + ).toMatchObject({ + type: NodeTypes.JS_CACHE_EXPRESSION, + index: 0, + value: { + type: NodeTypes.COMPOUND_EXPRESSION, + children: [ + `async `, + { content: `e` }, + ` => await `, + { content: `_ctx.foo` }, + `(`, + { content: `e` }, + `)`, + ], + }, + }) + }) + test('inline async function expression handler', () => { const { root, node } = parseWithVOn( `
`, diff --git a/packages/compiler-core/src/transforms/vOn.ts b/packages/compiler-core/src/transforms/vOn.ts index 8c13bdae524..a1631e10db3 100644 --- a/packages/compiler-core/src/transforms/vOn.ts +++ b/packages/compiler-core/src/transforms/vOn.ts @@ -17,7 +17,7 @@ import { hasScopeRef, isMemberExpression } from '../utils' import { TO_HANDLER_KEY } from '../runtimeHelpers' const fnExpRE = - /^\s*([\w$_]+|(async\s*)?\([^)]*?\))\s*(:[^=]+)?=>|^\s*(async\s+)?function(?:\s+[\w$]+)?\s*\(/ + /^\s*(async\s*)?(\([^)]*?\)|[\w$_]+)\s*(:[^=]+)?=>|^\s*(async\s+)?function(?:\s+[\w$]+)?\s*\(/ export interface VOnDirectiveNode extends DirectiveNode { // v-on without arg is handled directly in ./transformElements.ts due to it affecting From c9c9dff805e346a88b02a9c5edb386242e49b8f1 Mon Sep 17 00:00:00 2001 From: Guo <99574369+Plumbiu@users.noreply.github.com> Date: Mon, 29 Apr 2024 18:57:56 +0800 Subject: [PATCH 04/13] refactor(perf): assign value in `if` block (#10836) --- packages/shared/src/normalizeProp.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared/src/normalizeProp.ts b/packages/shared/src/normalizeProp.ts index 07e782d44f1..db6e665d51c 100644 --- a/packages/shared/src/normalizeProp.ts +++ b/packages/shared/src/normalizeProp.ts @@ -51,8 +51,8 @@ export function stringifyStyle( } for (const key in styles) { const value = styles[key] - const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key) if (isString(value) || typeof value === 'number') { + const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key) // only render valid values ret += `${normalizedKey}:${value};` } From 0e3d6178b02d0386d779720ae2cc4eac1d1ec990 Mon Sep 17 00:00:00 2001 From: skirtle <65301168+skirtles-code@users.noreply.github.com> Date: Wed, 1 May 2024 17:03:17 +0100 Subject: [PATCH 05/13] fix(compiler-dom): restrict createStaticVNode usage with option elements (#10846) close #6568 close #7434 --- .../stringifyStatic.spec.ts.snap | 32 +++++++++++++ .../transforms/stringifyStatic.spec.ts | 47 +++++++++++++++++++ .../src/transforms/stringifyStatic.ts | 12 +++++ 3 files changed, 91 insertions(+) diff --git a/packages/compiler-dom/__tests__/transforms/__snapshots__/stringifyStatic.spec.ts.snap b/packages/compiler-dom/__tests__/transforms/__snapshots__/stringifyStatic.spec.ts.snap index 33fb37a58f9..57d880a03f6 100644 --- a/packages/compiler-dom/__tests__/transforms/__snapshots__/stringifyStatic.spec.ts.snap +++ b/packages/compiler-dom/__tests__/transforms/__snapshots__/stringifyStatic.spec.ts.snap @@ -1,5 +1,24 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html +exports[`stringify static html > should bail for