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",