diff --git a/CHANGELOG.md b/CHANGELOG.md index e10e5632c04..44f187edf4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +## [3.4.3](https://github.com/vuejs/core/compare/v3.4.2...v3.4.3) (2023-12-30) + + +### Bug Fixes + +* **compiler-sfc:** respect sfc parse options in cache key ([b8d58ec](https://github.com/vuejs/core/commit/b8d58ec4f42cbeb9443bf06138add46158db9af0)) + + + ## [3.4.2](https://github.com/vuejs/core/compare/v3.4.1...v3.4.2) (2023-12-30) diff --git a/package.json b/package.json index add8eab6e21..339124b3704 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "3.4.2", + "version": "3.4.3", "packageManager": "pnpm@8.12.1", "type": "module", "scripts": { diff --git a/packages/compiler-core/package.json b/packages/compiler-core/package.json index 4bd35266fed..d310ab7f122 100644 --- a/packages/compiler-core/package.json +++ b/packages/compiler-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-core", - "version": "3.4.2", + "version": "3.4.3", "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 1d56d6fdff0..71cdb083256 100644 --- a/packages/compiler-dom/package.json +++ b/packages/compiler-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-dom", - "version": "3.4.2", + "version": "3.4.3", "description": "@vue/compiler-dom", "main": "index.js", "module": "dist/compiler-dom.esm-bundler.js", diff --git a/packages/compiler-sfc/__tests__/parse.spec.ts b/packages/compiler-sfc/__tests__/parse.spec.ts index 3d5ec8604b9..048dab693aa 100644 --- a/packages/compiler-sfc/__tests__/parse.spec.ts +++ b/packages/compiler-sfc/__tests__/parse.spec.ts @@ -367,6 +367,18 @@ h1 { color: red } tag: 'hello', tagType: ElementTypes.ELEMENT, }) + + // test cache invalidation on different options + const { descriptor: d2 } = parse(``, { + templateParseOptions: { + isCustomElement: t => t !== 'hello', + }, + }) + expect(d2.template!.ast!.children[0]).toMatchObject({ + type: NodeTypes.ELEMENT, + tag: 'hello', + tagType: ElementTypes.COMPONENT, + }) }) describe('warnings', () => { diff --git a/packages/compiler-sfc/package.json b/packages/compiler-sfc/package.json index ad85bed3e55..bd174b5f4d2 100644 --- a/packages/compiler-sfc/package.json +++ b/packages/compiler-sfc/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-sfc", - "version": "3.4.2", + "version": "3.4.3", "description": "@vue/compiler-sfc", "main": "dist/compiler-sfc.cjs.js", "module": "dist/compiler-sfc.esm-browser.js", diff --git a/packages/compiler-sfc/src/parse.ts b/packages/compiler-sfc/src/parse.ts index 0acceb1faba..00c97867cd0 100644 --- a/packages/compiler-sfc/src/parse.ts +++ b/packages/compiler-sfc/src/parse.ts @@ -103,9 +103,30 @@ export interface SFCParseResult { export const parseCache = createCache() +function genCacheKey(source: string, options: SFCParseOptions): string { + return ( + source + + JSON.stringify( + { + ...options, + compiler: { parse: options.compiler?.parse }, + }, + (_, val) => (typeof val === 'function' ? val.toString() : val), + ) + ) +} + export function parse( source: string, - { + options: SFCParseOptions = {}, +): SFCParseResult { + const sourceKey = genCacheKey(source, options) + const cache = parseCache.get(sourceKey) + if (cache) { + return cache + } + + const { sourceMap = true, filename = DEFAULT_FILENAME, sourceRoot = '', @@ -114,14 +135,7 @@ export function parse( compiler = CompilerDOM, templateParseOptions = {}, parseExpressions = true, - }: SFCParseOptions = {}, -): SFCParseResult { - const sourceKey = - source + sourceMap + filename + sourceRoot + pad + compiler.parse - const cache = parseCache.get(sourceKey) - if (cache) { - return cache - } + } = options const descriptor: SFCDescriptor = { filename, diff --git a/packages/compiler-ssr/package.json b/packages/compiler-ssr/package.json index 7dd9f551f1f..3ef67c47cca 100644 --- a/packages/compiler-ssr/package.json +++ b/packages/compiler-ssr/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-ssr", - "version": "3.4.2", + "version": "3.4.3", "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 d903c9edf35..618b38c162e 100644 --- a/packages/reactivity/package.json +++ b/packages/reactivity/package.json @@ -1,6 +1,6 @@ { "name": "@vue/reactivity", - "version": "3.4.2", + "version": "3.4.3", "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 a5d6bb12bfe..01a2e70899d 100644 --- a/packages/runtime-core/package.json +++ b/packages/runtime-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-core", - "version": "3.4.2", + "version": "3.4.3", "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 23c92b225c1..cea1db55e8d 100644 --- a/packages/runtime-dom/package.json +++ b/packages/runtime-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-dom", - "version": "3.4.2", + "version": "3.4.3", "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 ee3cc84b936..da1400f6adc 100644 --- a/packages/server-renderer/package.json +++ b/packages/server-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@vue/server-renderer", - "version": "3.4.2", + "version": "3.4.3", "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 7ddc6d58f6d..2cfaf25a648 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@vue/shared", - "version": "3.4.2", + "version": "3.4.3", "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 017879cc718..b99ffb564cc 100644 --- a/packages/vue-compat/package.json +++ b/packages/vue-compat/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compat", - "version": "3.4.2", + "version": "3.4.3", "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 94b2f20c277..8bf44f74bbb 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "vue", - "version": "3.4.2", + "version": "3.4.3", "description": "The progressive JavaScript framework for building modern web UI.", "main": "index.js", "module": "dist/vue.runtime.esm-bundler.js",