diff --git a/CHANGELOG.md b/CHANGELOG.md index 53c83791055..577fb0efd2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +## [3.5.1](https://github.com/vuejs/core/compare/v3.5.0...v3.5.1) (2024-09-04) + + +### Bug Fixes + +* **build:** improve built-in components treeshakability ([4eee630](https://github.com/vuejs/core/commit/4eee630b3122a10d0baf9b91358cfffa92d6fd81)) +* **reactivity:** handle non-array arguments in reactive `concat` method ([#11794](https://github.com/vuejs/core/issues/11794)) ([475977a](https://github.com/vuejs/core/commit/475977a6f76b77392610e0a3ec2b0e076d1e1d59)), closes [#11792](https://github.com/vuejs/core/issues/11792) +* **Transition:** avoid applying transition hooks on comment vnode ([#11788](https://github.com/vuejs/core/issues/11788)) ([51912f8](https://github.com/vuejs/core/commit/51912f8a02e35f172f6d30ed7a2f3a92c1407cf9)), closes [#11782](https://github.com/vuejs/core/issues/11782) +* **types:** avoid using intersection type in `Readonly<...>` to fix JSDoc emit ([#11799](https://github.com/vuejs/core/issues/11799)) ([7518bc1](https://github.com/vuejs/core/commit/7518bc19dc73ba46dcf1eef6e23f9e6e75552675)) +* **useTemplateRef:** fix readonly warning when useTemplateRef has same variable name as template ref ([bc63df0](https://github.com/vuejs/core/commit/bc63df01992fdbf0b6749ad234153725697ed896)), closes [#11795](https://github.com/vuejs/core/issues/11795) [#11802](https://github.com/vuejs/core/issues/11802) [#11804](https://github.com/vuejs/core/issues/11804) + + + # [3.5.0](https://github.com/vuejs/core/compare/v3.5.0-rc.1...v3.5.0) (2024-09-03) ## Aggregated Features List for 3.5 (alpha to stable) diff --git a/package.json b/package.json index 0bde7bb1229..100997cadb9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "3.5.0", + "version": "3.5.1", "packageManager": "pnpm@9.9.0", "type": "module", "scripts": { @@ -92,7 +92,7 @@ "prettier": "^3.3.3", "pretty-bytes": "^6.1.1", "pug": "^3.0.3", - "puppeteer": "~23.0.2", + "puppeteer": "~23.3.0", "rimraf": "^6.0.1", "rollup": "^4.21.2", "rollup-plugin-dts": "^6.1.1", diff --git a/packages/compiler-core/__tests__/transforms/__snapshots__/cacheStatic.spec.ts.snap b/packages/compiler-core/__tests__/transforms/__snapshots__/cacheStatic.spec.ts.snap index 8d0305ee354..375a0c8674a 100644 --- a/packages/compiler-core/__tests__/transforms/__snapshots__/cacheStatic.spec.ts.snap +++ b/packages/compiler-core/__tests__/transforms/__snapshots__/cacheStatic.spec.ts.snap @@ -191,7 +191,7 @@ exports[`compiler: cacheStatic transform > prefixIdentifiers > hoist class with const { createElementVNode: _createElementVNode } = _Vue const _hoisted_1 = { - class: /*#__PURE__*/_normalizeClass({ foo: true }) + class: /*@__PURE__*/_normalizeClass({ foo: true }) } return function render(_ctx, _cache) { diff --git a/packages/compiler-core/package.json b/packages/compiler-core/package.json index f3ff9bcadb0..b474c8bd61e 100644 --- a/packages/compiler-core/package.json +++ b/packages/compiler-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-core", - "version": "3.5.0", + "version": "3.5.1", "description": "@vue/compiler-core", "main": "index.js", "module": "dist/compiler-core.esm-bundler.js", diff --git a/packages/compiler-core/src/codegen.ts b/packages/compiler-core/src/codegen.ts index aafd059a1d2..6b6f24b3a30 100644 --- a/packages/compiler-core/src/codegen.ts +++ b/packages/compiler-core/src/codegen.ts @@ -99,7 +99,7 @@ interface MappingItem { name: string | null } -const PURE_ANNOTATION = `/*#__PURE__*/` +const PURE_ANNOTATION = `/*@__PURE__*/` const aliasHelper = (s: symbol) => `${helperNameMap[s]}: _${helperNameMap[s]}` diff --git a/packages/compiler-core/src/transforms/transformExpression.ts b/packages/compiler-core/src/transforms/transformExpression.ts index 716da46c99b..ec2d4685314 100644 --- a/packages/compiler-core/src/transforms/transformExpression.ts +++ b/packages/compiler-core/src/transforms/transformExpression.ts @@ -44,7 +44,7 @@ import { parseExpression } from '@babel/parser' import { IS_REF, UNREF } from '../runtimeHelpers' import { BindingTypes } from '../options' -const isLiteralWhitelisted = /*#__PURE__*/ makeMap('true,false,null,this') +const isLiteralWhitelisted = /*@__PURE__*/ makeMap('true,false,null,this') export const transformExpression: NodeTransform = (node, context) => { if (node.type === NodeTypes.INTERPOLATION) { diff --git a/packages/compiler-dom/package.json b/packages/compiler-dom/package.json index 8ed20b9fceb..c38c22c6663 100644 --- a/packages/compiler-dom/package.json +++ b/packages/compiler-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-dom", - "version": "3.5.0", + "version": "3.5.1", "description": "@vue/compiler-dom", "main": "index.js", "module": "dist/compiler-dom.esm-bundler.js", diff --git a/packages/compiler-dom/src/transforms/stringifyStatic.ts b/packages/compiler-dom/src/transforms/stringifyStatic.ts index 4bce0f99039..05535a2c312 100644 --- a/packages/compiler-dom/src/transforms/stringifyStatic.ts +++ b/packages/compiler-dom/src/transforms/stringifyStatic.ts @@ -188,7 +188,7 @@ const isStringifiableAttr = (name: string, ns: Namespaces) => { ) } -const isNonStringifiable = /*#__PURE__*/ makeMap( +const isNonStringifiable = /*@__PURE__*/ makeMap( `caption,thead,tr,th,tbody,td,tfoot,colgroup,col`, ) diff --git a/packages/compiler-dom/src/transforms/vOn.ts b/packages/compiler-dom/src/transforms/vOn.ts index 88d2c5db741..335b84a2ed1 100644 --- a/packages/compiler-dom/src/transforms/vOn.ts +++ b/packages/compiler-dom/src/transforms/vOn.ts @@ -17,8 +17,8 @@ import { import { V_ON_WITH_KEYS, V_ON_WITH_MODIFIERS } from '../runtimeHelpers' import { capitalize, makeMap } from '@vue/shared' -const isEventOptionModifier = /*#__PURE__*/ makeMap(`passive,once,capture`) -const isNonKeyModifier = /*#__PURE__*/ makeMap( +const isEventOptionModifier = /*@__PURE__*/ makeMap(`passive,once,capture`) +const isNonKeyModifier = /*@__PURE__*/ makeMap( // event propagation management `stop,prevent,self,` + // system modifiers + exact @@ -27,8 +27,8 @@ const isNonKeyModifier = /*#__PURE__*/ makeMap( `middle`, ) // left & right could be mouse or key modifiers based on event type -const maybeKeyModifier = /*#__PURE__*/ makeMap('left,right') -const isKeyboardEvent = /*#__PURE__*/ makeMap( +const maybeKeyModifier = /*@__PURE__*/ makeMap('left,right') +const isKeyboardEvent = /*@__PURE__*/ makeMap( `onkeyup,onkeydown,onkeypress`, true, ) diff --git a/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap b/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap index e092d83e743..bf40b0529d4 100644 --- a/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap +++ b/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap @@ -20,7 +20,7 @@ exports[`SFC analyze `) assertCode(content) - expect(content).toMatch(`export default /*#__PURE__*/_defineComponent({ + expect(content).toMatch(`export default /*@__PURE__*/_defineComponent({ emits: ['a', 'b'], setup(__props, { expose: __expose, emit: __emit }) {`) expect(content).toMatch('const emit = __emit') diff --git a/packages/compiler-sfc/__tests__/compileScript/defineModel.spec.ts b/packages/compiler-sfc/__tests__/compileScript/defineModel.spec.ts index 4550aa5c4c0..5d696a95d88 100644 --- a/packages/compiler-sfc/__tests__/compileScript/defineModel.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/defineModel.spec.ts @@ -47,7 +47,7 @@ describe('defineModel()', () => { `, ) assertCode(content) - expect(content).toMatch(`props: /*#__PURE__*/_mergeModels({ foo: String }`) + expect(content).toMatch(`props: /*@__PURE__*/_mergeModels({ foo: String }`) expect(content).toMatch(`"modelValue": { default: 0 }`) expect(content).toMatch(`const count = _useModel(__props, "modelValue")`) expect(content).not.toMatch('defineModel') @@ -68,7 +68,7 @@ describe('defineModel()', () => { `, ) assertCode(content) - expect(content).toMatch(`props: /*#__PURE__*/_mergeModels(['foo', 'bar'], { + expect(content).toMatch(`props: /*@__PURE__*/_mergeModels(['foo', 'bar'], { "count": {}, "countModifiers": {}, })`) diff --git a/packages/compiler-sfc/__tests__/compileScript/defineOptions.spec.ts b/packages/compiler-sfc/__tests__/compileScript/defineOptions.spec.ts index dac9ef64188..286f1e11bfd 100644 --- a/packages/compiler-sfc/__tests__/compileScript/defineOptions.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/defineOptions.spec.ts @@ -12,7 +12,7 @@ describe('defineOptions()', () => { expect(content).not.toMatch('defineOptions') // should include context options in default export expect(content).toMatch( - `export default /*#__PURE__*/Object.assign({ name: 'FooApp' }, `, + `export default /*@__PURE__*/Object.assign({ name: 'FooApp' }, `, ) }) diff --git a/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts b/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts index 813cfc9c374..c9ef103c416 100644 --- a/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/defineProps.spec.ts @@ -64,7 +64,7 @@ const props = defineProps({ foo: String }) `) assertCode(content) - expect(content).toMatch(`export default /*#__PURE__*/_defineComponent({ + expect(content).toMatch(`export default /*@__PURE__*/_defineComponent({ props: { foo: String }, setup(__props, { expose: __expose }) {`) }) diff --git a/packages/compiler-sfc/__tests__/compileScript/definePropsDestructure.spec.ts b/packages/compiler-sfc/__tests__/compileScript/definePropsDestructure.spec.ts index 27900750325..6202f427b52 100644 --- a/packages/compiler-sfc/__tests__/compileScript/definePropsDestructure.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/definePropsDestructure.spec.ts @@ -78,7 +78,7 @@ describe('sfc reactive props destructure', () => { // function // functions need to be marked with a skip marker expect(content) - .toMatch(`props: /*#__PURE__*/_mergeDefaults(['foo', 'bar', 'baz'], { + .toMatch(`props: /*@__PURE__*/_mergeDefaults(['foo', 'bar', 'baz'], { foo: 1, bar: () => ({}), func: () => {}, __skip_func: true @@ -98,7 +98,7 @@ describe('sfc reactive props destructure', () => { // safely infer whether runtime type is Function (e.g. if the runtime decl // is imported, or spreads another object) expect(content) - .toMatch(`props: /*#__PURE__*/_mergeDefaults({ foo: Number, bar: Object, func: Function, ext: null }, { + .toMatch(`props: /*@__PURE__*/_mergeDefaults({ foo: Number, bar: Object, func: Function, ext: null }, { foo: 1, bar: () => ({}), func: () => {}, __skip_func: true, @@ -122,7 +122,7 @@ describe('sfc reactive props destructure', () => { }) expect(content).toMatch(` - props: /*#__PURE__*/_mergeDefaults(['foo', 'foo:bar'], { + props: /*@__PURE__*/_mergeDefaults(['foo', 'foo:bar'], { foo: 1, "foo:bar": 'foo-bar' }),`) diff --git a/packages/compiler-sfc/package.json b/packages/compiler-sfc/package.json index 7afb8cab3ba..41fbfdcf1da 100644 --- a/packages/compiler-sfc/package.json +++ b/packages/compiler-sfc/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-sfc", - "version": "3.5.0", + "version": "3.5.1", "description": "@vue/compiler-sfc", "main": "dist/compiler-sfc.cjs.js", "module": "dist/compiler-sfc.esm-browser.js", diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index f3eef6544f6..fee05beed96 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -979,7 +979,7 @@ export function compileScript( (definedOptions ? `\n ...${definedOptions},` : '') ctx.s.prependLeft( startOffset, - `\n${genDefaultAs} /*#__PURE__*/${ctx.helper( + `\n${genDefaultAs} /*@__PURE__*/${ctx.helper( `defineComponent`, )}({${def}${runtimeOptions}\n ${ hasAwait ? `async ` : `` @@ -992,7 +992,7 @@ export function compileScript( // export default Object.assign(__default__, { ... }) ctx.s.prependLeft( startOffset, - `\n${genDefaultAs} /*#__PURE__*/Object.assign(${ + `\n${genDefaultAs} /*@__PURE__*/Object.assign(${ defaultExport ? `${normalScriptDefaultVar}, ` : '' }${definedOptions ? `${definedOptions}, ` : ''}{${runtimeOptions}\n ` + `${hasAwait ? `async ` : ``}setup(${args}) {\n${exposeCall}`, diff --git a/packages/compiler-sfc/src/script/defineEmits.ts b/packages/compiler-sfc/src/script/defineEmits.ts index 526a55dc8a1..e4e6bdabf36 100644 --- a/packages/compiler-sfc/src/script/defineEmits.ts +++ b/packages/compiler-sfc/src/script/defineEmits.ts @@ -62,7 +62,7 @@ export function genRuntimeEmits(ctx: ScriptCompileContext): string | undefined { .map(n => JSON.stringify(`update:${n}`)) .join(', ')}]` emitsDecl = emitsDecl - ? `/*#__PURE__*/${ctx.helper( + ? `/*@__PURE__*/${ctx.helper( 'mergeModels', )}(${emitsDecl}, ${modelEmitsDecl})` : modelEmitsDecl diff --git a/packages/compiler-sfc/src/script/defineProps.ts b/packages/compiler-sfc/src/script/defineProps.ts index 9e6b0d86d64..6e2032c415a 100644 --- a/packages/compiler-sfc/src/script/defineProps.ts +++ b/packages/compiler-sfc/src/script/defineProps.ts @@ -147,7 +147,7 @@ export function genRuntimeProps(ctx: ScriptCompileContext): string | undefined { ) } if (defaults.length) { - propsDecls = `/*#__PURE__*/${ctx.helper( + propsDecls = `/*@__PURE__*/${ctx.helper( `mergeDefaults`, )}(${propsDecls}, {\n ${defaults.join(',\n ')}\n})` } @@ -159,7 +159,7 @@ export function genRuntimeProps(ctx: ScriptCompileContext): string | undefined { const modelsDecls = genModelProps(ctx) if (propsDecls && modelsDecls) { - return `/*#__PURE__*/${ctx.helper( + return `/*@__PURE__*/${ctx.helper( 'mergeModels', )}(${propsDecls}, ${modelsDecls})` } else { @@ -191,7 +191,7 @@ export function extractRuntimeProps( ${propStrings.join(',\n ')}\n }` if (ctx.propsRuntimeDefaults && !hasStaticDefaults) { - propsDecls = `/*#__PURE__*/${ctx.helper( + propsDecls = `/*@__PURE__*/${ctx.helper( 'mergeDefaults', )}(${propsDecls}, ${ctx.getString(ctx.propsRuntimeDefaults)})` } diff --git a/packages/compiler-ssr/package.json b/packages/compiler-ssr/package.json index 8466740c1ad..29b7c49f14b 100644 --- a/packages/compiler-ssr/package.json +++ b/packages/compiler-ssr/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-ssr", - "version": "3.5.0", + "version": "3.5.1", "description": "@vue/compiler-ssr", "main": "dist/compiler-ssr.cjs.js", "types": "dist/compiler-ssr.d.ts", diff --git a/packages/reactivity/__tests__/reactiveArray.spec.ts b/packages/reactivity/__tests__/reactiveArray.spec.ts index 3d97660e428..ebb4a926acd 100644 --- a/packages/reactivity/__tests__/reactiveArray.spec.ts +++ b/packages/reactivity/__tests__/reactiveArray.spec.ts @@ -303,19 +303,35 @@ describe('reactivity/reactive/Array', () => { const a2 = reactive([{ val: 3 }]) const a3 = [4, 5] - let result = computed(() => a1.concat(a2, a3)) - expect(result.value).toStrictEqual([1, { val: 2 }, { val: 3 }, 4, 5]) + let result = computed(() => a1.concat(a2, a3, 6, { val: 7 })) + expect(result.value).toStrictEqual([ + 1, + { val: 2 }, + { val: 3 }, + 4, + 5, + 6, + { val: 7 }, + ]) expect(isReactive(result.value[1])).toBe(false) expect(isReactive(result.value[2])).toBe(true) + expect(isReactive(result.value[6])).toBe(false) a1.shift() - expect(result.value).toStrictEqual([{ val: 2 }, { val: 3 }, 4, 5]) + expect(result.value).toStrictEqual([ + { val: 2 }, + { val: 3 }, + 4, + 5, + 6, + { val: 7 }, + ]) a2.pop() - expect(result.value).toStrictEqual([{ val: 2 }, 4, 5]) + expect(result.value).toStrictEqual([{ val: 2 }, 4, 5, 6, { val: 7 }]) a3.pop() - expect(result.value).toStrictEqual([{ val: 2 }, 4, 5]) + expect(result.value).toStrictEqual([{ val: 2 }, 4, 5, 6, { val: 7 }]) }) test('entries', () => { diff --git a/packages/reactivity/__tests__/watch.spec.ts b/packages/reactivity/__tests__/watch.spec.ts index 7a4078166b7..c8d48543fb1 100644 --- a/packages/reactivity/__tests__/watch.spec.ts +++ b/packages/reactivity/__tests__/watch.spec.ts @@ -13,7 +13,7 @@ const queue: (() => void)[] = [] // a simple scheduler for testing purposes let isFlushPending = false -const resolvedPromise = /*#__PURE__*/ Promise.resolve() as Promise +const resolvedPromise = /*@__PURE__*/ Promise.resolve() as Promise const nextTick = (fn?: () => any) => fn ? resolvedPromise.then(fn) : resolvedPromise diff --git a/packages/reactivity/package.json b/packages/reactivity/package.json index 3b873313d9b..a9586b34304 100644 --- a/packages/reactivity/package.json +++ b/packages/reactivity/package.json @@ -1,6 +1,6 @@ { "name": "@vue/reactivity", - "version": "3.5.0", + "version": "3.5.1", "description": "@vue/reactivity", "main": "index.js", "module": "dist/reactivity.esm-bundler.js", diff --git a/packages/reactivity/src/arrayInstrumentations.ts b/packages/reactivity/src/arrayInstrumentations.ts index 6a15e2a184a..e031df4fe10 100644 --- a/packages/reactivity/src/arrayInstrumentations.ts +++ b/packages/reactivity/src/arrayInstrumentations.ts @@ -2,6 +2,7 @@ import { TrackOpTypes } from './constants' import { endBatch, pauseTracking, resetTracking, startBatch } from './effect' import { isProxy, isShallow, toRaw, toReactive } from './reactive' import { ARRAY_ITERATE_KEY, track } from './dep' +import { isArray } from '@vue/shared' /** * Track array iteration and return: @@ -30,9 +31,9 @@ export const arrayInstrumentations: Record = { return iterator(this, Symbol.iterator, toReactive) }, - concat(...args: unknown[][]) { + concat(...args: unknown[]) { return reactiveReadArray(this).concat( - ...args.map(x => reactiveReadArray(x)), + ...args.map(x => (isArray(x) ? reactiveReadArray(x) : x)), ) }, diff --git a/packages/reactivity/src/baseHandlers.ts b/packages/reactivity/src/baseHandlers.ts index 5916c0b5d81..4155c708846 100644 --- a/packages/reactivity/src/baseHandlers.ts +++ b/packages/reactivity/src/baseHandlers.ts @@ -25,10 +25,10 @@ import { import { isRef } from './ref' import { warn } from './warning' -const isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`) +const isNonTrackableKeys = /*@__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`) const builtInSymbols = new Set( - /*#__PURE__*/ + /*@__PURE__*/ Object.getOwnPropertyNames(Symbol) // ios10.x Object.getOwnPropertyNames(Symbol) can enumerate 'arguments' and 'caller' // but accessing them on Symbol leads to TypeError because Symbol is a strict mode @@ -240,16 +240,16 @@ class ReadonlyReactiveHandler extends BaseReactiveHandler { } export const mutableHandlers: ProxyHandler = - /*#__PURE__*/ new MutableReactiveHandler() + /*@__PURE__*/ new MutableReactiveHandler() export const readonlyHandlers: ProxyHandler = - /*#__PURE__*/ new ReadonlyReactiveHandler() + /*@__PURE__*/ new ReadonlyReactiveHandler() export const shallowReactiveHandlers: MutableReactiveHandler = - /*#__PURE__*/ new MutableReactiveHandler(true) + /*@__PURE__*/ new MutableReactiveHandler(true) // Props handlers are special in the sense that it should not unwrap top-level // refs (in order to allow refs to be explicitly passed down), but should // retain the reactivity of the normal readonly object. export const shallowReadonlyHandlers: ReadonlyReactiveHandler = - /*#__PURE__*/ new ReadonlyReactiveHandler(true) + /*@__PURE__*/ new ReadonlyReactiveHandler(true) diff --git a/packages/reactivity/src/collectionHandlers.ts b/packages/reactivity/src/collectionHandlers.ts index 0b7d93be663..cf8ceae1b7d 100644 --- a/packages/reactivity/src/collectionHandlers.ts +++ b/packages/reactivity/src/collectionHandlers.ts @@ -332,7 +332,7 @@ const [ readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations, -] = /* #__PURE__*/ createInstrumentations() +] = /* @__PURE__*/ createInstrumentations() function createInstrumentationGetter(isReadonly: boolean, shallow: boolean) { const instrumentations = shallow @@ -367,20 +367,20 @@ function createInstrumentationGetter(isReadonly: boolean, shallow: boolean) { } export const mutableCollectionHandlers: ProxyHandler = { - get: /*#__PURE__*/ createInstrumentationGetter(false, false), + get: /*@__PURE__*/ createInstrumentationGetter(false, false), } export const shallowCollectionHandlers: ProxyHandler = { - get: /*#__PURE__*/ createInstrumentationGetter(false, true), + get: /*@__PURE__*/ createInstrumentationGetter(false, true), } export const readonlyCollectionHandlers: ProxyHandler = { - get: /*#__PURE__*/ createInstrumentationGetter(true, false), + get: /*@__PURE__*/ createInstrumentationGetter(true, false), } export const shallowReadonlyCollectionHandlers: ProxyHandler = { - get: /*#__PURE__*/ createInstrumentationGetter(true, true), + get: /*@__PURE__*/ createInstrumentationGetter(true, true), } function checkIdentityKeys( diff --git a/packages/runtime-core/__tests__/helpers/useTemplateRef.spec.ts b/packages/runtime-core/__tests__/helpers/useTemplateRef.spec.ts index 9e4137da80f..10de6f48353 100644 --- a/packages/runtime-core/__tests__/helpers/useTemplateRef.spec.ts +++ b/packages/runtime-core/__tests__/helpers/useTemplateRef.spec.ts @@ -82,4 +82,25 @@ describe('useTemplateRef', () => { expect(`useTemplateRef('foo') already exists.`).toHaveBeenWarned() }) + + // #11795 + test('should work when variable name is same as key', () => { + let tRef + const key = 'refKey' + const Comp = { + setup() { + tRef = useTemplateRef(key) + return { + [key]: tRef, + } + }, + render() { + return h('div', { ref: key }) + }, + } + const root = nodeOps.createElement('div') + render(h(Comp), root) + + expect('target is readonly').not.toHaveBeenWarned() + }) }) diff --git a/packages/runtime-core/package.json b/packages/runtime-core/package.json index fe24f850de4..195c10cb3e4 100644 --- a/packages/runtime-core/package.json +++ b/packages/runtime-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-core", - "version": "3.5.0", + "version": "3.5.1", "description": "@vue/runtime-core", "main": "index.js", "module": "dist/runtime-core.esm-bundler.js", diff --git a/packages/runtime-core/src/apiDefineComponent.ts b/packages/runtime-core/src/apiDefineComponent.ts index 760689eeb2e..0a58954526c 100644 --- a/packages/runtime-core/src/apiDefineComponent.ts +++ b/packages/runtime-core/src/apiDefineComponent.ts @@ -210,7 +210,8 @@ export function defineComponent< : ExtractPropTypes : { [key in RuntimePropsKeys]?: any } : TypeProps, - ResolvedProps = Readonly>, + ResolvedProps = Readonly & + Readonly>, TypeRefs extends Record = {}, >( options: { @@ -299,7 +300,7 @@ export function defineComponent( return isFunction(options) ? // #8236: extend call and options.name access are considered side-effects // by Rollup, so we have to wrap it in a pure-annotated IIFE. - /*#__PURE__*/ (() => + /*@__PURE__*/ (() => extend({ name: options.name }, extraOptions, { setup: options }))() : options } diff --git a/packages/runtime-core/src/compat/compatConfig.ts b/packages/runtime-core/src/compat/compatConfig.ts index be0fd3dccca..de62873ff02 100644 --- a/packages/runtime-core/src/compat/compatConfig.ts +++ b/packages/runtime-core/src/compat/compatConfig.ts @@ -509,7 +509,7 @@ export function configureCompat(config: CompatConfig): void { extend(globalCompatConfig, config) } -const seenConfigObjects = /*#__PURE__*/ new WeakSet() +const seenConfigObjects = /*@__PURE__*/ new WeakSet() const warnedInvalidKeys: Record = {} // dev only diff --git a/packages/runtime-core/src/compat/instanceEventEmitter.ts b/packages/runtime-core/src/compat/instanceEventEmitter.ts index cdf2d798864..2c99e6c53b4 100644 --- a/packages/runtime-core/src/compat/instanceEventEmitter.ts +++ b/packages/runtime-core/src/compat/instanceEventEmitter.ts @@ -8,7 +8,7 @@ interface EventRegistry { [event: string]: Function[] | undefined } -const eventRegistryMap = /*#__PURE__*/ new WeakMap< +const eventRegistryMap = /*@__PURE__*/ new WeakMap< ComponentInternalInstance, EventRegistry >() diff --git a/packages/runtime-core/src/compat/renderFn.ts b/packages/runtime-core/src/compat/renderFn.ts index 044b20d3ff3..49646eda487 100644 --- a/packages/runtime-core/src/compat/renderFn.ts +++ b/packages/runtime-core/src/compat/renderFn.ts @@ -172,7 +172,7 @@ export function compatH( } } -const skipLegacyRootLevelProps = /*#__PURE__*/ makeMap( +const skipLegacyRootLevelProps = /*@__PURE__*/ makeMap( 'staticStyle,staticClass,directives,model,hook', ) diff --git a/packages/runtime-core/src/compat/renderHelpers.ts b/packages/runtime-core/src/compat/renderHelpers.ts index f85d24e6402..ac810087772 100644 --- a/packages/runtime-core/src/compat/renderHelpers.ts +++ b/packages/runtime-core/src/compat/renderHelpers.ts @@ -114,7 +114,7 @@ function mapKeyToName(slots: LegacyScopedSlotsData) { return slots as any } -const staticCacheMap = /*#__PURE__*/ new WeakMap< +const staticCacheMap = /*@__PURE__*/ new WeakMap< ComponentInternalInstance, any[] >() diff --git a/packages/runtime-core/src/component.ts b/packages/runtime-core/src/component.ts index 556d158a244..cccb7280fd4 100644 --- a/packages/runtime-core/src/component.ts +++ b/packages/runtime-core/src/component.ts @@ -774,7 +774,7 @@ export const unsetCurrentInstance = (): void => { internalSetCurrentInstance(null) } -const isBuiltInTag = /*#__PURE__*/ makeMap('slot,component') +const isBuiltInTag = /*@__PURE__*/ makeMap('slot,component') export function validateComponentName( name: string, diff --git a/packages/runtime-core/src/componentOptions.ts b/packages/runtime-core/src/componentOptions.ts index 2a39f45b685..f864f39e419 100644 --- a/packages/runtime-core/src/componentOptions.ts +++ b/packages/runtime-core/src/componentOptions.ts @@ -1279,7 +1279,9 @@ export type ComponentOptionsWithObjectProps< Directives extends Record = {}, Exposed extends string = string, Provide extends ComponentProvideOptions = ComponentProvideOptions, - Props = Prettify & EmitsToProps>>, + Props = Prettify< + Readonly> & Readonly> + >, Defaults = ExtractDefaultPropTypes, > = ComponentOptionsBase< Props, diff --git a/packages/runtime-core/src/componentProps.ts b/packages/runtime-core/src/componentProps.ts index 830bfbc3fcd..c864ba15535 100644 --- a/packages/runtime-core/src/componentProps.ts +++ b/packages/runtime-core/src/componentProps.ts @@ -707,7 +707,7 @@ function validateProp( } } -const isSimpleType = /*#__PURE__*/ makeMap( +const isSimpleType = /*@__PURE__*/ makeMap( 'String,Number,Boolean,Function,Symbol,BigInt', ) diff --git a/packages/runtime-core/src/componentPublicInstance.ts b/packages/runtime-core/src/componentPublicInstance.ts index 39935427f47..5ba7c34cdfc 100644 --- a/packages/runtime-core/src/componentPublicInstance.ts +++ b/packages/runtime-core/src/componentPublicInstance.ts @@ -362,7 +362,7 @@ const getPublicInstance = ( export const publicPropertiesMap: PublicPropertiesMap = // Move PURE marker to new line to workaround compiler discarding it // due to type annotation - /*#__PURE__*/ extend(Object.create(null), { + /*@__PURE__*/ extend(Object.create(null), { $: i => i, $el: i => i.vnode.el, $data: i => i.data, @@ -614,7 +614,7 @@ if (__DEV__ && !__TEST__) { } export const RuntimeCompiledPublicInstanceProxyHandlers: ProxyHandler = - /*#__PURE__*/ extend({}, PublicInstanceProxyHandlers, { + /*@__PURE__*/ extend({}, PublicInstanceProxyHandlers, { get(target: ComponentRenderContext, key: string) { // fast path for unscopables when using `with` block if ((key as any) === Symbol.unscopables) { diff --git a/packages/runtime-core/src/components/BaseTransition.ts b/packages/runtime-core/src/components/BaseTransition.ts index a31f28b2388..37534ad699f 100644 --- a/packages/runtime-core/src/components/BaseTransition.ts +++ b/packages/runtime-core/src/components/BaseTransition.ts @@ -193,7 +193,10 @@ const BaseTransitionImpl: ComponentOptions = { // #11061, ensure enterHooks is fresh after clone hooks => (enterHooks = hooks), ) - setTransitionHooks(innerChild, enterHooks) + + if (innerChild.type !== Comment) { + setTransitionHooks(innerChild, enterHooks) + } const oldChild = instance.subTree const oldInnerChild = oldChild && getInnerChild(oldChild) diff --git a/packages/runtime-core/src/components/KeepAlive.ts b/packages/runtime-core/src/components/KeepAlive.ts index f897f40375f..a87f44cc8fa 100644 --- a/packages/runtime-core/src/components/KeepAlive.ts +++ b/packages/runtime-core/src/components/KeepAlive.ts @@ -362,13 +362,16 @@ const KeepAliveImpl: ComponentOptions = { }, } -if (__COMPAT__) { - KeepAliveImpl.__isBuildIn = true +const decorate = (t: typeof KeepAliveImpl) => { + t.__isBuiltIn = true + return t } // export the public type for h/tsx inference // also to avoid inline import() in generated d.ts files -export const KeepAlive = KeepAliveImpl as any as { +export const KeepAlive = (__COMPAT__ + ? /*@__PURE__*/ decorate(KeepAliveImpl) + : KeepAliveImpl) as any as { __isKeepAlive: true new (): { $props: VNodeProps & KeepAliveProps diff --git a/packages/runtime-core/src/devtools.ts b/packages/runtime-core/src/devtools.ts index 3e472d868b5..9ac4c433ac1 100644 --- a/packages/runtime-core/src/devtools.ts +++ b/packages/runtime-core/src/devtools.ts @@ -101,12 +101,12 @@ export function devtoolsUnmountApp(app: App): void { } export const devtoolsComponentAdded: DevtoolsComponentHook = - /*#__PURE__*/ createDevtoolsComponentHook(DevtoolsHooks.COMPONENT_ADDED) + /*@__PURE__*/ createDevtoolsComponentHook(DevtoolsHooks.COMPONENT_ADDED) export const devtoolsComponentUpdated: DevtoolsComponentHook = - /*#__PURE__*/ createDevtoolsComponentHook(DevtoolsHooks.COMPONENT_UPDATED) + /*@__PURE__*/ createDevtoolsComponentHook(DevtoolsHooks.COMPONENT_UPDATED) -const _devtoolsComponentRemoved = /*#__PURE__*/ createDevtoolsComponentHook( +const _devtoolsComponentRemoved = /*@__PURE__*/ createDevtoolsComponentHook( DevtoolsHooks.COMPONENT_REMOVED, ) @@ -141,10 +141,10 @@ function createDevtoolsComponentHook( } export const devtoolsPerfStart: DevtoolsPerformanceHook = - /*#__PURE__*/ createDevtoolsPerformanceHook(DevtoolsHooks.PERFORMANCE_START) + /*@__PURE__*/ createDevtoolsPerformanceHook(DevtoolsHooks.PERFORMANCE_START) export const devtoolsPerfEnd: DevtoolsPerformanceHook = - /*#__PURE__*/ createDevtoolsPerformanceHook(DevtoolsHooks.PERFORMANCE_END) + /*@__PURE__*/ createDevtoolsPerformanceHook(DevtoolsHooks.PERFORMANCE_END) type DevtoolsPerformanceHook = ( component: ComponentInternalInstance, diff --git a/packages/runtime-core/src/rendererTemplateRef.ts b/packages/runtime-core/src/rendererTemplateRef.ts index 647ce1fb42f..c7b15fe4022 100644 --- a/packages/runtime-core/src/rendererTemplateRef.ts +++ b/packages/runtime-core/src/rendererTemplateRef.ts @@ -63,12 +63,18 @@ export function setRef( const oldRef = oldRawRef && (oldRawRef as VNodeNormalizedRefAtom).r const refs = owner.refs === EMPTY_OBJ ? (owner.refs = {}) : owner.refs const setupState = owner.setupState + const canSetSetupRef = + setupState === EMPTY_OBJ + ? () => false + : (key: string) => + hasOwn(setupState, key) && + !(Object.getOwnPropertyDescriptor(refs, key) || EMPTY_OBJ).get // dynamic ref changed. unset old ref if (oldRef != null && oldRef !== ref) { if (isString(oldRef)) { refs[oldRef] = null - if (hasOwn(setupState, oldRef)) { + if (canSetSetupRef(oldRef)) { setupState[oldRef] = null } } else if (isRef(oldRef)) { @@ -81,11 +87,12 @@ export function setRef( } else { const _isString = isString(ref) const _isRef = isRef(ref) + if (_isString || _isRef) { const doSet = () => { if (rawRef.f) { const existing = _isString - ? hasOwn(setupState, ref) + ? canSetSetupRef(ref) ? setupState[ref] : refs[ref] : ref.value @@ -95,7 +102,7 @@ export function setRef( if (!isArray(existing)) { if (_isString) { refs[ref] = [refValue] - if (hasOwn(setupState, ref)) { + if (canSetSetupRef(ref)) { setupState[ref] = refs[ref] } } else { @@ -108,7 +115,7 @@ export function setRef( } } else if (_isString) { refs[ref] = value - if (hasOwn(setupState, ref)) { + if (canSetSetupRef(ref)) { setupState[ref] = value } } else if (_isRef) { diff --git a/packages/runtime-core/src/scheduler.ts b/packages/runtime-core/src/scheduler.ts index aa12b6896a7..7f52a77bd50 100644 --- a/packages/runtime-core/src/scheduler.ts +++ b/packages/runtime-core/src/scheduler.ts @@ -50,7 +50,7 @@ const pendingPostFlushCbs: SchedulerJob[] = [] let activePostFlushCbs: SchedulerJob[] | null = null let postFlushIndex = 0 -const resolvedPromise = /*#__PURE__*/ Promise.resolve() as Promise +const resolvedPromise = /*@__PURE__*/ Promise.resolve() as Promise let currentFlushPromise: Promise | null = null const RECURSION_LIMIT = 100 diff --git a/packages/runtime-dom/package.json b/packages/runtime-dom/package.json index b0c0bcd8541..3ecb3b683a9 100644 --- a/packages/runtime-dom/package.json +++ b/packages/runtime-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-dom", - "version": "3.5.0", + "version": "3.5.1", "description": "@vue/runtime-dom", "main": "index.js", "module": "dist/runtime-dom.esm-bundler.js", diff --git a/packages/runtime-dom/src/components/Transition.ts b/packages/runtime-dom/src/components/Transition.ts index f549a9318ef..32a16f1d17c 100644 --- a/packages/runtime-dom/src/components/Transition.ts +++ b/packages/runtime-dom/src/components/Transition.ts @@ -42,19 +42,6 @@ export interface ElementWithTransition extends HTMLElement { [vtcKey]?: Set } -// DOM Transition is a higher-order-component based on the platform-agnostic -// base Transition component, with DOM-specific logic. -export const Transition: FunctionalComponent = ( - props, - { slots }, -) => h(BaseTransition, resolveTransitionProps(props), slots) - -Transition.displayName = 'Transition' - -if (__COMPAT__) { - Transition.__isBuiltIn = true -} - const DOMTransitionPropsValidators = { name: String, type: String, @@ -74,12 +61,33 @@ const DOMTransitionPropsValidators = { leaveToClass: String, } -export const TransitionPropsValidators: any = (Transition.props = - /*#__PURE__*/ extend( - {}, - BaseTransitionPropsValidators as any, - DOMTransitionPropsValidators, - )) +export const TransitionPropsValidators: any = /*@__PURE__*/ extend( + {}, + BaseTransitionPropsValidators as any, + DOMTransitionPropsValidators, +) + +/** + * Wrap logic that attaches extra properties to Transition in a function + * so that it can be annotated as pure + */ +const decorate = (t: typeof Transition) => { + t.displayName = 'Transition' + t.props = TransitionPropsValidators + if (__COMPAT__) { + t.__isBuiltIn = true + } + return t +} + +/** + * DOM Transition is a higher-order-component based on the platform-agnostic + * base Transition component, with DOM-specific logic. + */ +export const Transition: FunctionalComponent = + /*@__PURE__*/ decorate((props, { slots }) => + h(BaseTransition, resolveTransitionProps(props), slots), + ) /** * #3227 Incoming hooks may be merged into arrays when wrapping Transition diff --git a/packages/runtime-dom/src/components/TransitionGroup.ts b/packages/runtime-dom/src/components/TransitionGroup.ts index 763b7a98b24..ba1e2bdf01e 100644 --- a/packages/runtime-dom/src/components/TransitionGroup.ts +++ b/packages/runtime-dom/src/components/TransitionGroup.ts @@ -32,15 +32,30 @@ const positionMap = new WeakMap() const newPositionMap = new WeakMap() const moveCbKey = Symbol('_moveCb') const enterCbKey = Symbol('_enterCb') + export type TransitionGroupProps = Omit & { tag?: string moveClass?: string } -const TransitionGroupImpl: ComponentOptions = { +/** + * Wrap logic that modifies TransitionGroup properties in a function + * so that it can be annotated as pure + */ +const decorate = (t: typeof TransitionGroupImpl) => { + // TransitionGroup does not support "mode" so we need to remove it from the + // props declarations, but direct delete operation is considered a side effect + delete t.props.mode + if (__COMPAT__) { + t.__isBuiltIn = true + } + return t +} + +const TransitionGroupImpl: ComponentOptions = /*@__PURE__*/ decorate({ name: 'TransitionGroup', - props: /*#__PURE__*/ extend({}, TransitionPropsValidators, { + props: /*@__PURE__*/ extend({}, TransitionPropsValidators, { tag: String, moveClass: String, }), @@ -152,20 +167,7 @@ const TransitionGroupImpl: ComponentOptions = { return createVNode(tag, null, children) } }, -} - -if (__COMPAT__) { - TransitionGroupImpl.__isBuiltIn = true -} - -/** - * TransitionGroup does not support "mode" so we need to remove it from the - * props declarations, but direct delete operation is considered a side effect - * and will make the entire transition feature non-tree-shakeable, so we do it - * in a function and mark the function's invocation as pure. - */ -const removeMode = (props: any) => delete props.mode -/*#__PURE__*/ removeMode(TransitionGroupImpl.props) +}) export const TransitionGroup = TransitionGroupImpl as unknown as { new (): { diff --git a/packages/runtime-dom/src/index.ts b/packages/runtime-dom/src/index.ts index 64bfacef22f..ca9a307dd98 100644 --- a/packages/runtime-dom/src/index.ts +++ b/packages/runtime-dom/src/index.ts @@ -63,7 +63,7 @@ declare module '@vue/runtime-core' { } } -const rendererOptions = /*#__PURE__*/ extend({ patchProp }, nodeOps) +const rendererOptions = /*@__PURE__*/ extend({ patchProp }, nodeOps) // lazy create the renderer - this makes core renderer logic tree-shakable // in case the user only imports reactivity utilities from Vue. diff --git a/packages/runtime-dom/src/modules/attrs.ts b/packages/runtime-dom/src/modules/attrs.ts index 1403d0cc19a..95e0a14854a 100644 --- a/packages/runtime-dom/src/modules/attrs.ts +++ b/packages/runtime-dom/src/modules/attrs.ts @@ -48,7 +48,7 @@ export function patchAttr( // 2.x compat const isEnumeratedAttr = __COMPAT__ - ? /*#__PURE__*/ makeMap('contenteditable,draggable,spellcheck') + ? /*@__PURE__*/ makeMap('contenteditable,draggable,spellcheck') : NOOP export function compatCoerceAttr( diff --git a/packages/runtime-dom/src/modules/events.ts b/packages/runtime-dom/src/modules/events.ts index 49547e16246..600b0840cde 100644 --- a/packages/runtime-dom/src/modules/events.ts +++ b/packages/runtime-dom/src/modules/events.ts @@ -86,7 +86,7 @@ function parseName(name: string): [string, EventListenerOptions | undefined] { // To avoid the overhead of repeatedly calling Date.now(), we cache // and use the same timestamp for all event listeners attached in the same tick. let cachedNow: number = 0 -const p = /*#__PURE__*/ Promise.resolve() +const p = /*@__PURE__*/ Promise.resolve() const getNow = () => cachedNow || (p.then(() => (cachedNow = 0)), (cachedNow = Date.now())) diff --git a/packages/runtime-dom/src/nodeOps.ts b/packages/runtime-dom/src/nodeOps.ts index d7422bf6164..70c61078751 100644 --- a/packages/runtime-dom/src/nodeOps.ts +++ b/packages/runtime-dom/src/nodeOps.ts @@ -15,7 +15,7 @@ const tt = if (tt) { try { - policy = /*#__PURE__*/ tt.createPolicy('vue', { + policy = /*@__PURE__*/ tt.createPolicy('vue', { createHTML: val => val, }) } catch (e: unknown) { @@ -39,7 +39,7 @@ export const mathmlNS = 'http://www.w3.org/1998/Math/MathML' const doc = (typeof document !== 'undefined' ? document : null) as Document -const templateContainer = doc && /*#__PURE__*/ doc.createElement('template') +const templateContainer = doc && /*@__PURE__*/ doc.createElement('template') export const nodeOps: Omit, 'patchProp'> = { insert: (child, parent, anchor) => { diff --git a/packages/server-renderer/package.json b/packages/server-renderer/package.json index 9467813add8..4dd6718c66d 100644 --- a/packages/server-renderer/package.json +++ b/packages/server-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@vue/server-renderer", - "version": "3.5.0", + "version": "3.5.1", "description": "@vue/server-renderer", "main": "index.js", "module": "dist/server-renderer.esm-bundler.js", diff --git a/packages/server-renderer/src/helpers/ssrRenderAttrs.ts b/packages/server-renderer/src/helpers/ssrRenderAttrs.ts index 55ab0b1e408..9689b4185c6 100644 --- a/packages/server-renderer/src/helpers/ssrRenderAttrs.ts +++ b/packages/server-renderer/src/helpers/ssrRenderAttrs.ts @@ -17,7 +17,7 @@ import { } from '@vue/shared' // leading comma for empty string "" -const shouldIgnoreProp = /*#__PURE__*/ makeMap( +const shouldIgnoreProp = /*@__PURE__*/ makeMap( `,key,ref,innerHTML,textContent,ref_key,ref_for`, ) diff --git a/packages/shared/package.json b/packages/shared/package.json index 04cabcb6475..753dbe9322e 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@vue/shared", - "version": "3.5.0", + "version": "3.5.1", "description": "internal utils shared across @vue packages", "main": "index.js", "module": "dist/shared.esm-bundler.js", diff --git a/packages/shared/src/domAttrConfig.ts b/packages/shared/src/domAttrConfig.ts index 04156b9752f..e62a3c2ef49 100644 --- a/packages/shared/src/domAttrConfig.ts +++ b/packages/shared/src/domAttrConfig.ts @@ -13,12 +13,12 @@ import { makeMap } from './makeMap' */ const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly` export const isSpecialBooleanAttr: (key: string) => boolean = - /*#__PURE__*/ makeMap(specialBooleanAttrs) + /*@__PURE__*/ makeMap(specialBooleanAttrs) /** * The full list is needed during SSR to produce the correct initial markup. */ -export const isBooleanAttr: (key: string) => boolean = /*#__PURE__*/ makeMap( +export const isBooleanAttr: (key: string) => boolean = /*@__PURE__*/ makeMap( specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` + `inert,loop,open,required,reversed,scoped,seamless,` + @@ -60,7 +60,7 @@ export const propsToAttrMap: Record = { * Don't also forget to allow `data-*` and `aria-*`! * Generated from https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes */ -export const isKnownHtmlAttr: (key: string) => boolean = /*#__PURE__*/ makeMap( +export const isKnownHtmlAttr: (key: string) => boolean = /*@__PURE__*/ makeMap( `accept,accept-charset,accesskey,action,align,allow,alt,async,` + `autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,` + `border,buffered,capture,challenge,charset,checked,cite,class,code,` + @@ -81,7 +81,7 @@ export const isKnownHtmlAttr: (key: string) => boolean = /*#__PURE__*/ makeMap( /** * Generated from https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute */ -export const isKnownSvgAttr: (key: string) => boolean = /*#__PURE__*/ makeMap( +export const isKnownSvgAttr: (key: string) => boolean = /*@__PURE__*/ makeMap( `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,` + `arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,` + `baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,` + diff --git a/packages/shared/src/domTagConfig.ts b/packages/shared/src/domTagConfig.ts index 95b9c0443c5..7f9d198e569 100644 --- a/packages/shared/src/domTagConfig.ts +++ b/packages/shared/src/domTagConfig.ts @@ -43,22 +43,22 @@ const VOID_TAGS = * Do NOT use in runtime code paths unless behind `__DEV__` flag. */ export const isHTMLTag: (key: string) => boolean = - /*#__PURE__*/ makeMap(HTML_TAGS) + /*@__PURE__*/ makeMap(HTML_TAGS) /** * Compiler only. * Do NOT use in runtime code paths unless behind `__DEV__` flag. */ export const isSVGTag: (key: string) => boolean = - /*#__PURE__*/ makeMap(SVG_TAGS) + /*@__PURE__*/ makeMap(SVG_TAGS) /** * Compiler only. * Do NOT use in runtime code paths unless behind `__DEV__` flag. */ export const isMathMLTag: (key: string) => boolean = - /*#__PURE__*/ makeMap(MATH_TAGS) + /*@__PURE__*/ makeMap(MATH_TAGS) /** * Compiler only. * Do NOT use in runtime code paths unless behind `__DEV__` flag. */ export const isVoidTag: (key: string) => boolean = - /*#__PURE__*/ makeMap(VOID_TAGS) + /*@__PURE__*/ makeMap(VOID_TAGS) diff --git a/packages/shared/src/general.ts b/packages/shared/src/general.ts index 36b7232b49c..552b447064c 100644 --- a/packages/shared/src/general.ts +++ b/packages/shared/src/general.ts @@ -80,7 +80,7 @@ export const isIntegerKey = (key: unknown): boolean => key[0] !== '-' && '' + parseInt(key, 10) === key -export const isReservedProp: (key: string) => boolean = /*#__PURE__*/ makeMap( +export const isReservedProp: (key: string) => boolean = /*@__PURE__*/ makeMap( // the leading comma is intentional so empty string "" is also included ',key,ref,ref_for,ref_key,' + 'onVnodeBeforeMount,onVnodeMounted,' + @@ -89,7 +89,7 @@ export const isReservedProp: (key: string) => boolean = /*#__PURE__*/ makeMap( ) export const isBuiltInDirective: (key: string) => boolean = - /*#__PURE__*/ makeMap( + /*@__PURE__*/ makeMap( 'bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo', ) diff --git a/packages/shared/src/globalsAllowList.ts b/packages/shared/src/globalsAllowList.ts index e467a825ade..3b584cc1a24 100644 --- a/packages/shared/src/globalsAllowList.ts +++ b/packages/shared/src/globalsAllowList.ts @@ -6,7 +6,7 @@ const GLOBALS_ALLOWED = 'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol' export const isGloballyAllowed: (key: string) => boolean = - /*#__PURE__*/ makeMap(GLOBALS_ALLOWED) + /*@__PURE__*/ makeMap(GLOBALS_ALLOWED) /** @deprecated use `isGloballyAllowed` instead */ export const isGloballyWhitelisted: (key: string) => boolean = isGloballyAllowed diff --git a/packages/vue-compat/package.json b/packages/vue-compat/package.json index 9b7b4ff95b1..fa24c0e41a6 100644 --- a/packages/vue-compat/package.json +++ b/packages/vue-compat/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compat", - "version": "3.5.0", + "version": "3.5.1", "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 29af7da0335..c74dfc61f11 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "vue", - "version": "3.5.0", + "version": "3.5.1", "description": "The progressive JavaScript framework for building modern web UI.", "main": "index.js", "module": "dist/vue.runtime.esm-bundler.js", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a05dc0c544f..d991f78d431 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -132,8 +132,8 @@ importers: specifier: ^3.0.3 version: 3.0.3 puppeteer: - specifier: ~23.0.2 - version: 23.0.2(typescript@5.5.4) + specifier: ~23.3.0 + version: 23.3.0(typescript@5.5.4) rimraf: specifier: ^6.0.1 version: 6.0.1 @@ -852,8 +852,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@puppeteer/browsers@2.3.0': - resolution: {integrity: sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==} + '@puppeteer/browsers@2.4.0': + resolution: {integrity: sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g==} engines: {node: '>=18'} hasBin: true @@ -1524,8 +1524,8 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chromium-bidi@0.6.4: - resolution: {integrity: sha512-8zoq6ogmhQQkAKZVKO2ObFTl4uOkqoX1PlKQX3hZQ5E9cbUotcAb7h4pTNVAGGv8Z36PF3CtdOriEp/Rz82JqQ==} + chromium-bidi@0.6.5: + resolution: {integrity: sha512-RuLrmzYrxSb0s9SgpB+QN5jJucPduZQ/9SIe76MDxYJuecPW5mxMdacJ1f4EtgiV+R0p3sCkznTMvH0MPGFqjA==} peerDependencies: devtools-protocol: '*' @@ -1755,8 +1755,8 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - devtools-protocol@0.0.1312386: - resolution: {integrity: sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==} + devtools-protocol@0.0.1330662: + resolution: {integrity: sha512-pzh6YQ8zZfz3iKlCvgzVCu22NdpZ8hNmwU6WnQjNVquh0A9iVosPtNLWDwaWVGyrntQlltPFztTMK5Cg6lfCuw==} dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} @@ -2835,12 +2835,12 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@23.0.2: - resolution: {integrity: sha512-MvOHn+g1TYkAR2oVd/bf/YWXKqFTJmkhyyurYgxkrjh8rBOL1ZH5VyOsLJi0bLO7/yoipAmk1gFZEx9HUJnaoA==} + puppeteer-core@23.3.0: + resolution: {integrity: sha512-sB2SsVMFs4gKad5OCdv6w5vocvtEUrRl0zQqSyRPbo/cj1Ktbarmhxy02Zyb9R9HrssBcJDZbkrvBnbaesPyYg==} engines: {node: '>=18'} - puppeteer@23.0.2: - resolution: {integrity: sha512-I/l1P8s8brcLG+oW9AwF8hUaOSGGJcGKMflXRgULUH0S3ABptlLI9ZKjqWDo8ipY6v789ZKd+bNKtcCwpTh5Ww==} + puppeteer@23.3.0: + resolution: {integrity: sha512-e2jY8cdWSUGsrLxqGm3hIbJq/UIk1uOY8XY7SM51leXkH7shrIyE91lK90Q9byX6tte+cyL3HKqlWBEd6TjWTA==} engines: {node: '>=18'} hasBin: true @@ -3241,6 +3241,9 @@ packages: resolution: {integrity: sha512-spAaHzc6qre0TlZQQ2aA/nGMe+2Z/wyGk5Z+Ru2VUfdNwT6kWO6TjevOlpebsATEG1EIQ2sOiDszud3lO5mt/Q==} engines: {node: '>=16'} + typed-query-selector@2.12.0: + resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + typescript-eslint@8.4.0: resolution: {integrity: sha512-67qoc3zQZe3CAkO0ua17+7aCLI0dU+sSQd1eKPGq06QE4rfQjstVXR6woHO5qQvGUa550NfGckT4tzh3b3c8Pw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3739,7 +3742,7 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@puppeteer/browsers@2.3.0': + '@puppeteer/browsers@2.4.0': dependencies: debug: 4.3.6 extract-zip: 2.0.1 @@ -4382,9 +4385,9 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chromium-bidi@0.6.4(devtools-protocol@0.0.1312386): + chromium-bidi@0.6.5(devtools-protocol@0.0.1330662): dependencies: - devtools-protocol: 0.0.1312386 + devtools-protocol: 0.0.1330662 mitt: 3.0.1 urlpattern-polyfill: 10.0.0 zod: 3.23.8 @@ -4612,7 +4615,7 @@ snapshots: delayed-stream@1.0.0: {} - devtools-protocol@0.0.1312386: {} + devtools-protocol@0.0.1330662: {} dir-glob@3.0.1: dependencies: @@ -5797,25 +5800,27 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@23.0.2: + puppeteer-core@23.3.0: dependencies: - '@puppeteer/browsers': 2.3.0 - chromium-bidi: 0.6.4(devtools-protocol@0.0.1312386) + '@puppeteer/browsers': 2.4.0 + chromium-bidi: 0.6.5(devtools-protocol@0.0.1330662) debug: 4.3.6 - devtools-protocol: 0.0.1312386 + devtools-protocol: 0.0.1330662 + typed-query-selector: 2.12.0 ws: 8.18.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - puppeteer@23.0.2(typescript@5.5.4): + puppeteer@23.3.0(typescript@5.5.4): dependencies: - '@puppeteer/browsers': 2.3.0 - chromium-bidi: 0.6.4(devtools-protocol@0.0.1312386) + '@puppeteer/browsers': 2.4.0 + chromium-bidi: 0.6.5(devtools-protocol@0.0.1330662) cosmiconfig: 9.0.0(typescript@5.5.4) - devtools-protocol: 0.0.1312386 - puppeteer-core: 23.0.2 + devtools-protocol: 0.0.1330662 + puppeteer-core: 23.3.0 + typed-query-selector: 2.12.0 transitivePeerDependencies: - bufferutil - supports-color @@ -6258,6 +6263,8 @@ snapshots: type-fest@4.24.0: {} + typed-query-selector@2.12.0: {} + typescript-eslint@8.4.0(eslint@9.9.1)(typescript@5.5.4): dependencies: '@typescript-eslint/eslint-plugin': 8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1)(typescript@5.5.4) diff --git a/rollup.config.js b/rollup.config.js index a9f9b17f3df..1d6f0da4c6a 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -223,10 +223,10 @@ function createConfig(format, output, plugins = []) { if (isProductionBuild && isBrowserBuild) { Object.assign(replacements, { - 'context.onError(': `/*#__PURE__*/ context.onError(`, - 'emitError(': `/*#__PURE__*/ emitError(`, - 'createCompilerError(': `/*#__PURE__*/ createCompilerError(`, - 'createDOMCompilerError(': `/*#__PURE__*/ createDOMCompilerError(`, + 'context.onError(': `/*@__PURE__*/ context.onError(`, + 'emitError(': `/*@__PURE__*/ emitError(`, + 'createCompilerError(': `/*@__PURE__*/ createCompilerError(`, + 'createDOMCompilerError(': `/*@__PURE__*/ createDOMCompilerError(`, }) }