From 7c8b12620aad4969b8dc4944d4fc486d16c3033c Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 14 Jun 2024 15:18:51 +0200 Subject: [PATCH 01/10] fix(custom-element): support same direct setup function signature in defineCustomElement close #11116 --- .../__tests__/customElement.spec.ts | 17 ++++++++++++ packages/runtime-dom/src/apiCustomElement.ts | 27 ++++++++++++++----- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/packages/runtime-dom/__tests__/customElement.spec.ts b/packages/runtime-dom/__tests__/customElement.spec.ts index a8bdec775..276536c2c 100644 --- a/packages/runtime-dom/__tests__/customElement.spec.ts +++ b/packages/runtime-dom/__tests__/customElement.spec.ts @@ -338,6 +338,23 @@ describe('defineCustomElement', () => { expect(el.maxAge).toBe(50) expect(el.shadowRoot.innerHTML).toBe('max age: 50/type: number') }) + + test('support direct setup function syntax with extra options', () => { + const E = defineCustomElement( + props => { + return () => props.text + }, + { + props: { + text: String, + }, + }, + ) + customElements.define('my-el-setup-with-props', E) + container.innerHTML = `` + const e = container.childNodes[0] as VueElement + expect(e.shadowRoot!.innerHTML).toBe('hello') + }) }) describe('attrs', () => { diff --git a/packages/runtime-dom/src/apiCustomElement.ts b/packages/runtime-dom/src/apiCustomElement.ts index 938230277..d3d8b5b6e 100644 --- a/packages/runtime-dom/src/apiCustomElement.ts +++ b/packages/runtime-dom/src/apiCustomElement.ts @@ -35,10 +35,16 @@ export type VueElementConstructor

= { // overload 1: direct setup function export function defineCustomElement( - setup: ( - props: Readonly, - ctx: SetupContext, - ) => RawBindings | RenderFunction, + setup: (props: Props, ctx: SetupContext) => RawBindings | RenderFunction, + options?: Pick & { + props?: (keyof Props)[] + }, +): VueElementConstructor +export function defineCustomElement( + setup: (props: Props, ctx: SetupContext) => RawBindings | RenderFunction, + options?: Pick & { + props?: ComponentObjectPropsOptions + }, ): VueElementConstructor // overload 2: object format with no props @@ -143,9 +149,13 @@ export function defineCustomElement

( /*! #__NO_SIDE_EFFECTS__ */ export function defineCustomElement( options: any, + extraOptions?: ComponentOptions, + /** + * @internal + */ hydrate?: RootHydrateFunction, ): VueElementConstructor { - const Comp = defineComponent(options) as any + const Comp = defineComponent(options, extraOptions) as any class VueCustomElement extends VueElement { static def = Comp constructor(initialProps?: Record) { @@ -157,9 +167,12 @@ export function defineCustomElement( } /*! #__NO_SIDE_EFFECTS__ */ -export const defineSSRCustomElement = ((options: any) => { +export const defineSSRCustomElement = (( + options: any, + extraOptions?: ComponentOptions, +) => { // @ts-expect-error - return defineCustomElement(options, hydrate) + return defineCustomElement(options, extraOptions, hydrate) }) as typeof defineCustomElement const BaseClass = ( From bda5ff1d3fa98988762d81257e332cc5d196b353 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 14 Jun 2024 16:04:04 +0200 Subject: [PATCH 02/10] chore: fix missing type import --- packages/runtime-dom/src/apiCustomElement.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/runtime-dom/src/apiCustomElement.ts b/packages/runtime-dom/src/apiCustomElement.ts index d3d8b5b6e..2a96cafa0 100644 --- a/packages/runtime-dom/src/apiCustomElement.ts +++ b/packages/runtime-dom/src/apiCustomElement.ts @@ -1,6 +1,7 @@ import { type ComponentInjectOptions, type ComponentInternalInstance, + type ComponentObjectPropsOptions, type ComponentOptions, type ComponentOptionsMixin, type ComponentOptionsWithArrayProps, From 11cc12b915edfe0e4d3175e57464f73bc2c1cb04 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 14 Jun 2024 16:13:18 +0200 Subject: [PATCH 03/10] fix(build): fix accidental inclusion of runtime-core in server-renderer cjs build close #11137 --- .../server-renderer/src/helpers/ssrGetDirectiveProps.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/server-renderer/src/helpers/ssrGetDirectiveProps.ts b/packages/server-renderer/src/helpers/ssrGetDirectiveProps.ts index 877c01d36..c3cb428ab 100644 --- a/packages/server-renderer/src/helpers/ssrGetDirectiveProps.ts +++ b/packages/server-renderer/src/helpers/ssrGetDirectiveProps.ts @@ -1,8 +1,4 @@ -import { - type ComponentPublicInstance, - type Directive, - ssrUtils, -} from '@vue/runtime-core' +import { type ComponentPublicInstance, type Directive, ssrUtils } from 'vue' export function ssrGetDirectiveProps( instance: ComponentPublicInstance, From 4ec387b100985b008cdcc4cd883a5b6328c05766 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 14 Jun 2024 16:46:26 +0200 Subject: [PATCH 04/10] fix(compiler-sfc): fix missing scope for extends error message --- packages/compiler-sfc/src/script/resolveType.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/compiler-sfc/src/script/resolveType.ts b/packages/compiler-sfc/src/script/resolveType.ts index c1204a4cd..4e6c6826d 100644 --- a/packages/compiler-sfc/src/script/resolveType.ts +++ b/packages/compiler-sfc/src/script/resolveType.ts @@ -439,6 +439,7 @@ function resolveInterfaceMembers( `Note: both in 3.2 or with the ignore, the properties in the base ` + `type are treated as fallthrough attrs at runtime.`, ext, + scope, ) } } From a476692ed2d7308f2742d8ff3554cf97a392b0b7 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 14 Jun 2024 16:47:24 +0200 Subject: [PATCH 05/10] fix(compiler-sfc): fix parsing of mts, d.mts, and mtsx files --- packages/compiler-sfc/src/script/context.ts | 4 ++-- packages/compiler-sfc/src/script/resolveType.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/compiler-sfc/src/script/context.ts b/packages/compiler-sfc/src/script/context.ts index f74adee60..43209d4a0 100644 --- a/packages/compiler-sfc/src/script/context.ts +++ b/packages/compiler-sfc/src/script/context.ts @@ -175,14 +175,14 @@ export function resolveParserPlugins( ) { plugins.push('importAttributes') } - if (lang === 'jsx' || lang === 'tsx') { + if (lang === 'jsx' || lang === 'tsx' || lang === 'mtsx') { plugins.push('jsx') } else if (userPlugins) { // If don't match the case of adding jsx // should remove the jsx from user options userPlugins = userPlugins.filter(p => p !== 'jsx') } - if (lang === 'ts' || lang === 'tsx') { + if (lang === 'ts' || lang === 'mts' || lang === 'tsx' || lang === 'mtsx') { plugins.push(['typescript', { dts }], 'explicitResourceManagement') if (!userPlugins || !userPlugins.includes('decorators')) { plugins.push('decorators-legacy') diff --git a/packages/compiler-sfc/src/script/resolveType.ts b/packages/compiler-sfc/src/script/resolveType.ts index 4e6c6826d..ce0be1742 100644 --- a/packages/compiler-sfc/src/script/resolveType.ts +++ b/packages/compiler-sfc/src/script/resolveType.ts @@ -1139,12 +1139,12 @@ function parseFile( parserPlugins?: SFCScriptCompileOptions['babelParserPlugins'], ): Statement[] { const ext = extname(filename) - if (ext === '.ts' || ext === '.tsx') { + if (ext === '.ts' || ext === '.mts' || ext === '.tsx' || ext === '.mtsx') { return babelParse(content, { plugins: resolveParserPlugins( ext.slice(1), parserPlugins, - filename.endsWith('.d.ts'), + /\.d\.m?ts$/.test(filename), ), sourceType: 'module', }).program.body From a23e99bedf1d65841d162951f10ce35b907a5680 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 14 Jun 2024 17:46:50 +0200 Subject: [PATCH 06/10] fix(compiler-sfc): support @vue-ignore comment on more type sources --- .../__tests__/compileScript/resolveType.spec.ts | 12 ++++++++++++ packages/compiler-sfc/src/script/resolveType.ts | 12 ++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts index 608549de6..0b5549cc4 100644 --- a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts @@ -137,6 +137,18 @@ describe('resolveType', () => { }) }) + test('intersection type with ignore', () => { + expect( + resolve(` + type Foo = { foo: number } + type Bar = { bar: string } + defineProps() + `).props, + ).toStrictEqual({ + foo: ['Number'], + }) + }) + // #7553 test('union type', () => { expect( diff --git a/packages/compiler-sfc/src/script/resolveType.ts b/packages/compiler-sfc/src/script/resolveType.ts index ce0be1742..5a4c84b4a 100644 --- a/packages/compiler-sfc/src/script/resolveType.ts +++ b/packages/compiler-sfc/src/script/resolveType.ts @@ -165,6 +165,12 @@ function innerResolveTypeElements( scope: TypeScope, typeParameters?: Record, ): ResolvedElements { + if ( + node.leadingComments && + node.leadingComments.some(c => c.value.includes('@vue-ignore')) + ) { + return { props: {} } + } switch (node.type) { case 'TSTypeLiteral': return typeElementsToMap(ctx, node.members, scope, typeParameters) @@ -414,12 +420,6 @@ function resolveInterfaceMembers( ) if (node.extends) { for (const ext of node.extends) { - if ( - ext.leadingComments && - ext.leadingComments.some(c => c.value.includes('@vue-ignore')) - ) { - continue - } try { const { props, calls } = resolveTypeElements(ctx, ext, scope) for (const key in props) { From 8296e19855e369a7826f5ea26540a6da01dc7093 Mon Sep 17 00:00:00 2001 From: Doctor Wu Date: Fri, 14 Jun 2024 23:51:19 +0800 Subject: [PATCH 07/10] fix(reactivity): avoid infinite loop when render access a side effect computed (#11135) close #11121 --- .../reactivity/__tests__/computed.spec.ts | 101 ++++++++++++++++-- packages/reactivity/src/computed.ts | 5 +- packages/reactivity/src/constants.ts | 11 +- packages/reactivity/src/effect.ts | 24 +++++ 4 files changed, 129 insertions(+), 12 deletions(-) diff --git a/packages/reactivity/__tests__/computed.spec.ts b/packages/reactivity/__tests__/computed.spec.ts index 10c09109f..0122f4e43 100644 --- a/packages/reactivity/__tests__/computed.spec.ts +++ b/packages/reactivity/__tests__/computed.spec.ts @@ -456,6 +456,78 @@ describe('reactivity/computed', () => { expect(fnSpy).toBeCalledTimes(2) }) + it('should mark dirty as MaybeDirty_ComputedSideEffect_Origin', () => { + const v = ref(1) + const c = computed(() => { + v.value += 1 + return v.value + }) + + c.value + expect(c.effect._dirtyLevel).toBe( + DirtyLevels.MaybeDirty_ComputedSideEffect_Origin, + ) + expect(COMPUTED_SIDE_EFFECT_WARN).toHaveBeenWarned() + }) + + it('should not infinite re-run effect when effect access original side effect computed', async () => { + const spy = vi.fn() + const v = ref(0) + const c = computed(() => { + v.value += 1 + return v.value + }) + const Comp = { + setup: () => { + return () => { + spy() + return v.value + c.value + } + }, + } + const root = nodeOps.createElement('div') + + render(h(Comp), root) + expect(spy).toBeCalledTimes(1) + await nextTick() + expect(c.effect._dirtyLevel).toBe( + DirtyLevels.MaybeDirty_ComputedSideEffect_Origin, + ) + expect(serializeInner(root)).toBe('2') + expect(COMPUTED_SIDE_EFFECT_WARN).toHaveBeenWarned() + }) + + it('should not infinite re-run effect when effect access chained side effect computed', async () => { + const spy = vi.fn() + const v = ref(0) + const c1 = computed(() => { + v.value += 1 + return v.value + }) + const c2 = computed(() => v.value + c1.value) + const Comp = { + setup: () => { + return () => { + spy() + return v.value + c1.value + c2.value + } + }, + } + const root = nodeOps.createElement('div') + + render(h(Comp), root) + expect(spy).toBeCalledTimes(1) + await nextTick() + expect(c1.effect._dirtyLevel).toBe( + DirtyLevels.MaybeDirty_ComputedSideEffect_Origin, + ) + expect(c2.effect._dirtyLevel).toBe( + DirtyLevels.MaybeDirty_ComputedSideEffect, + ) + expect(serializeInner(root)).toBe('4') + expect(COMPUTED_SIDE_EFFECT_WARN).toHaveBeenWarned() + }) + it('should chained recurse effects clear dirty after trigger', () => { const v = ref(1) const c1 = computed(() => v.value) @@ -482,7 +554,9 @@ describe('reactivity/computed', () => { c3.value - expect(c1.effect._dirtyLevel).toBe(DirtyLevels.Dirty) + expect(c1.effect._dirtyLevel).toBe( + DirtyLevels.MaybeDirty_ComputedSideEffect_Origin, + ) expect(c2.effect._dirtyLevel).toBe( DirtyLevels.MaybeDirty_ComputedSideEffect, ) @@ -502,7 +576,9 @@ describe('reactivity/computed', () => { }) const c2 = computed(() => v.value + c1.value) expect(c2.value).toBe('0foo') - expect(c2.effect._dirtyLevel).toBe(DirtyLevels.Dirty) + expect(c2.effect._dirtyLevel).toBe( + DirtyLevels.MaybeDirty_ComputedSideEffect, + ) expect(c2.value).toBe('1foo') expect(COMPUTED_SIDE_EFFECT_WARN).toHaveBeenWarned() }) @@ -523,8 +599,12 @@ describe('reactivity/computed', () => { c2.value }) expect(fnSpy).toBeCalledTimes(1) - expect(c1.effect._dirtyLevel).toBe(DirtyLevels.Dirty) - expect(c2.effect._dirtyLevel).toBe(DirtyLevels.Dirty) + expect(c1.effect._dirtyLevel).toBe( + DirtyLevels.MaybeDirty_ComputedSideEffect_Origin, + ) + expect(c2.effect._dirtyLevel).toBe( + DirtyLevels.MaybeDirty_ComputedSideEffect, + ) v.value = 2 expect(fnSpy).toBeCalledTimes(2) expect(COMPUTED_SIDE_EFFECT_WARN).toHaveBeenWarned() @@ -557,7 +637,9 @@ describe('reactivity/computed', () => { expect(c3.effect._dirtyLevel).toBe(DirtyLevels.MaybeDirty) c3.value - expect(c1.effect._dirtyLevel).toBe(DirtyLevels.Dirty) + expect(c1.effect._dirtyLevel).toBe( + DirtyLevels.MaybeDirty_ComputedSideEffect_Origin, + ) expect(c2.effect._dirtyLevel).toBe( DirtyLevels.MaybeDirty_ComputedSideEffect, ) @@ -611,11 +693,18 @@ describe('reactivity/computed', () => { render(h(Comp), root) await nextTick() + expect(c.effect._dirtyLevel).toBe( + DirtyLevels.MaybeDirty_ComputedSideEffect_Origin, + ) expect(serializeInner(root)).toBe('Hello World') v.value += ' World' + expect(c.effect._dirtyLevel).toBe(DirtyLevels.Dirty) await nextTick() - expect(serializeInner(root)).toBe('Hello World World World World') + expect(c.effect._dirtyLevel).toBe( + DirtyLevels.MaybeDirty_ComputedSideEffect_Origin, + ) + expect(serializeInner(root)).toBe('Hello World World World') expect(COMPUTED_SIDE_EFFECT_WARN).toHaveBeenWarned() }) diff --git a/packages/reactivity/src/computed.ts b/packages/reactivity/src/computed.ts index da63fe847..91eac3601 100644 --- a/packages/reactivity/src/computed.ts +++ b/packages/reactivity/src/computed.ts @@ -78,7 +78,10 @@ export class ComputedRefImpl { triggerRefValue(self, DirtyLevels.Dirty) } trackRefValue(self) - if (self.effect._dirtyLevel >= DirtyLevels.MaybeDirty_ComputedSideEffect) { + if ( + self.effect._dirtyLevel >= + DirtyLevels.MaybeDirty_ComputedSideEffect_Origin + ) { if (__DEV__ && (__TEST__ || this._warnRecursive)) { warn(COMPUTED_SIDE_EFFECT_WARN, `\n\ngetter: `, this.getter) } diff --git a/packages/reactivity/src/constants.ts b/packages/reactivity/src/constants.ts index baa75d616..4898d6917 100644 --- a/packages/reactivity/src/constants.ts +++ b/packages/reactivity/src/constants.ts @@ -23,9 +23,10 @@ export enum ReactiveFlags { } export enum DirtyLevels { - NotDirty = 0, - QueryingDirty = 1, - MaybeDirty_ComputedSideEffect = 2, - MaybeDirty = 3, - Dirty = 4, + NotDirty, + QueryingDirty, + MaybeDirty_ComputedSideEffect_Origin, + MaybeDirty_ComputedSideEffect, + MaybeDirty, + Dirty, } diff --git a/packages/reactivity/src/effect.ts b/packages/reactivity/src/effect.ts index 1528f4b1d..727513fc6 100644 --- a/packages/reactivity/src/effect.ts +++ b/packages/reactivity/src/effect.ts @@ -76,6 +76,9 @@ export class ReactiveEffect { } public get dirty() { + // treat original side effect computed as not dirty to avoid infinite loop + if (this._dirtyLevel === DirtyLevels.MaybeDirty_ComputedSideEffect_Origin) + return false if ( this._dirtyLevel === DirtyLevels.MaybeDirty_ComputedSideEffect || this._dirtyLevel === DirtyLevels.MaybeDirty @@ -85,6 +88,13 @@ export class ReactiveEffect { for (let i = 0; i < this._depsLength; i++) { const dep = this.deps[i] if (dep.computed) { + // treat chained side effect computed as dirty to force it re-run + // since we know the original side effect computed is dirty + if ( + dep.computed.effect._dirtyLevel === + DirtyLevels.MaybeDirty_ComputedSideEffect_Origin + ) + return true triggerComputed(dep.computed) if (this._dirtyLevel >= DirtyLevels.Dirty) { break @@ -296,6 +306,12 @@ export function triggerEffects( ) { pauseScheduling() for (const effect of dep.keys()) { + if (!dep.computed && effect.computed) { + if (dep.get(effect) === effect._trackId && effect._runnings > 0) { + effect._dirtyLevel = DirtyLevels.MaybeDirty_ComputedSideEffect_Origin + continue + } + } // dep.get(effect) is very expensive, we need to calculate it lazily and reuse the result let tracking: boolean | undefined if ( @@ -303,6 +319,14 @@ export function triggerEffects( (tracking ??= dep.get(effect) === effect._trackId) ) { effect._shouldSchedule ||= effect._dirtyLevel === DirtyLevels.NotDirty + // always schedule if the computed is original side effect + // since we know it is actually dirty + if ( + effect.computed && + effect._dirtyLevel === DirtyLevels.MaybeDirty_ComputedSideEffect_Origin + ) { + effect._shouldSchedule = true + } effect._dirtyLevel = dirtyLevel } if ( From 1e42f24d8f212efdcc9dbdbe5b66b899f690c255 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 14 Jun 2024 17:59:12 +0200 Subject: [PATCH 08/10] workflow: improve release script ci status check --- scripts/release.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/release.js b/scripts/release.js index d34f26d4b..4a0c968e2 100644 --- a/scripts/release.js +++ b/scripts/release.js @@ -352,8 +352,11 @@ async function getCIResult() { `https://api.github.com/repos/vuejs/core/actions/runs?head_sha=${sha}` + `&status=success&exclude_pull_requests=true`, ) + /** @type {{ workflow_runs: ({ name: string, conclusion: string })[] }} */ const data = await res.json() - return data.workflow_runs.length > 0 + return data.workflow_runs.some(({ name, conclusion }) => { + return name === 'ci' && conclusion === 'success' + }) } catch { console.error('Failed to get CI status for current commit.') return false From cc04fd2b4f920f59fb1faad213887be7c035c779 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 14 Jun 2024 17:59:30 +0200 Subject: [PATCH 09/10] chore: exclude sfc local proxy files from tsconfig --- tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 6ba420775..5c0dac990 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -36,5 +36,6 @@ "packages/vue/jsx-runtime", "scripts/*", "rollup.*.js" - ] + ], + "exclude": ["packages/sfc-playground/src/vue-dev-proxy*"] } From e5ca13a3affdac396996cc8d30037f537d092744 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 14 Jun 2024 18:02:36 +0200 Subject: [PATCH 10/10] release: v3.4.29 --- CHANGELOG.md | 14 ++++++++++++++ package.json | 2 +- packages/compiler-core/package.json | 2 +- packages/compiler-dom/package.json | 2 +- packages/compiler-sfc/package.json | 2 +- packages/compiler-ssr/package.json | 2 +- packages/reactivity/package.json | 2 +- packages/runtime-core/package.json | 2 +- packages/runtime-dom/package.json | 2 +- packages/server-renderer/package.json | 2 +- packages/shared/package.json | 2 +- packages/vue-compat/package.json | 2 +- packages/vue/package.json | 2 +- 13 files changed, 26 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e21e93908..6c63fa09a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +## [3.4.29](https://github.com/vuejs/core/compare/v3.4.28...v3.4.29) (2024-06-14) + + +### Bug Fixes + +* **build:** fix accidental inclusion of runtime-core in server-renderer cjs build ([11cc12b](https://github.com/vuejs/core/commit/11cc12b915edfe0e4d3175e57464f73bc2c1cb04)), closes [#11137](https://github.com/vuejs/core/issues/11137) +* **compiler-sfc:** fix missing scope for extends error message ([4ec387b](https://github.com/vuejs/core/commit/4ec387b100985b008cdcc4cd883a5b6328c05766)) +* **compiler-sfc:** fix parsing of mts, d.mts, and mtsx files ([a476692](https://github.com/vuejs/core/commit/a476692ed2d7308f2742d8ff3554cf97a392b0b7)) +* **compiler-sfc:** support [@vue-ignore](https://github.com/vue-ignore) comment on more type sources ([a23e99b](https://github.com/vuejs/core/commit/a23e99bedf1d65841d162951f10ce35b907a5680)) +* **custom-element:** support same direct setup function signature in defineCustomElement ([7c8b126](https://github.com/vuejs/core/commit/7c8b12620aad4969b8dc4944d4fc486d16c3033c)), closes [#11116](https://github.com/vuejs/core/issues/11116) +* **reactivity:** avoid infinite loop when render access a side effect computed ([#11135](https://github.com/vuejs/core/issues/11135)) ([8296e19](https://github.com/vuejs/core/commit/8296e19855e369a7826f5ea26540a6da01dc7093)), closes [#11121](https://github.com/vuejs/core/issues/11121) + + + ## [3.4.28](https://github.com/vuejs/core/compare/v3.4.27...v3.4.28) (2024-06-14) diff --git a/package.json b/package.json index 6b6050d23..ca8efc683 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "3.4.28", + "version": "3.4.29", "packageManager": "pnpm@9.2.0", "type": "module", "scripts": { diff --git a/packages/compiler-core/package.json b/packages/compiler-core/package.json index 27802c6e1..051e8a9ae 100644 --- a/packages/compiler-core/package.json +++ b/packages/compiler-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-core", - "version": "3.4.28", + "version": "3.4.29", "description": "@vue/compiler-core", "main": "index.js", "module": "dist/compiler-core.esm-bundler.js", diff --git a/packages/compiler-dom/package.json b/packages/compiler-dom/package.json index b47a475c3..5c89f7277 100644 --- a/packages/compiler-dom/package.json +++ b/packages/compiler-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-dom", - "version": "3.4.28", + "version": "3.4.29", "description": "@vue/compiler-dom", "main": "index.js", "module": "dist/compiler-dom.esm-bundler.js", diff --git a/packages/compiler-sfc/package.json b/packages/compiler-sfc/package.json index ecf1eb762..a8ef09e1f 100644 --- a/packages/compiler-sfc/package.json +++ b/packages/compiler-sfc/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-sfc", - "version": "3.4.28", + "version": "3.4.29", "description": "@vue/compiler-sfc", "main": "dist/compiler-sfc.cjs.js", "module": "dist/compiler-sfc.esm-browser.js", diff --git a/packages/compiler-ssr/package.json b/packages/compiler-ssr/package.json index f2da7ea62..4b89007e0 100644 --- a/packages/compiler-ssr/package.json +++ b/packages/compiler-ssr/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-ssr", - "version": "3.4.28", + "version": "3.4.29", "description": "@vue/compiler-ssr", "main": "dist/compiler-ssr.cjs.js", "types": "dist/compiler-ssr.d.ts", diff --git a/packages/reactivity/package.json b/packages/reactivity/package.json index 2dcaec135..bb71dfb12 100644 --- a/packages/reactivity/package.json +++ b/packages/reactivity/package.json @@ -1,6 +1,6 @@ { "name": "@vue/reactivity", - "version": "3.4.28", + "version": "3.4.29", "description": "@vue/reactivity", "main": "index.js", "module": "dist/reactivity.esm-bundler.js", diff --git a/packages/runtime-core/package.json b/packages/runtime-core/package.json index 6b5e84e51..8045a0995 100644 --- a/packages/runtime-core/package.json +++ b/packages/runtime-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-core", - "version": "3.4.28", + "version": "3.4.29", "description": "@vue/runtime-core", "main": "index.js", "module": "dist/runtime-core.esm-bundler.js", diff --git a/packages/runtime-dom/package.json b/packages/runtime-dom/package.json index 7483ab703..56c93506a 100644 --- a/packages/runtime-dom/package.json +++ b/packages/runtime-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-dom", - "version": "3.4.28", + "version": "3.4.29", "description": "@vue/runtime-dom", "main": "index.js", "module": "dist/runtime-dom.esm-bundler.js", diff --git a/packages/server-renderer/package.json b/packages/server-renderer/package.json index 9c052130a..83b05ec34 100644 --- a/packages/server-renderer/package.json +++ b/packages/server-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@vue/server-renderer", - "version": "3.4.28", + "version": "3.4.29", "description": "@vue/server-renderer", "main": "index.js", "module": "dist/server-renderer.esm-bundler.js", diff --git a/packages/shared/package.json b/packages/shared/package.json index 129ba3819..28b77767f 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@vue/shared", - "version": "3.4.28", + "version": "3.4.29", "description": "internal utils shared across @vue packages", "main": "index.js", "module": "dist/shared.esm-bundler.js", diff --git a/packages/vue-compat/package.json b/packages/vue-compat/package.json index 66346af46..79baadd59 100644 --- a/packages/vue-compat/package.json +++ b/packages/vue-compat/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compat", - "version": "3.4.28", + "version": "3.4.29", "description": "Vue 3 compatibility build for Vue 2", "main": "index.js", "module": "dist/vue.runtime.esm-bundler.js", diff --git a/packages/vue/package.json b/packages/vue/package.json index 098aea7ea..cdf8f14e2 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "vue", - "version": "3.4.28", + "version": "3.4.29", "description": "The progressive JavaScript framework for building modern web UI.", "main": "index.js", "module": "dist/vue.runtime.esm-bundler.js",