From fc89cd12b9d90b90e7d9664016ca71938d6176b0 Mon Sep 17 00:00:00 2001 From: KazariEX Date: Sun, 23 Nov 2025 21:11:26 +0800 Subject: [PATCH 01/11] chore: update vue to v3.5.24 --- extensions/vscode/package.json | 2 +- packages/language-core/package.json | 6 +- packages/language-plugin-pug/package.json | 2 +- packages/language-service/package.json | 4 +- packages/typescript-plugin/package.json | 2 +- pnpm-lock.yaml | 164 +++++++++++----------- 6 files changed, 90 insertions(+), 90 deletions(-) diff --git a/extensions/vscode/package.json b/extensions/vscode/package.json index ac44e9ecd0..344601dd01 100644 --- a/extensions/vscode/package.json +++ b/extensions/vscode/package.json @@ -464,7 +464,7 @@ "@volar/typescript": "2.4.23", "@volar/vscode": "2.4.23", "@vscode/vsce": "^3.2.1", - "@vue/compiler-sfc": "^3.5.0", + "@vue/compiler-sfc": "^3.5.24", "@vue/language-core": "3.1.5", "@vue/language-server": "3.1.5", "@vue/typescript-plugin": "3.1.5", diff --git a/packages/language-core/package.json b/packages/language-core/package.json index 3507b9286b..8fc8654283 100644 --- a/packages/language-core/package.json +++ b/packages/language-core/package.json @@ -14,8 +14,8 @@ }, "dependencies": { "@volar/language-core": "2.4.23", - "@vue/compiler-dom": "^3.5.0", - "@vue/shared": "^3.5.0", + "@vue/compiler-dom": "^3.5.24", + "@vue/shared": "^3.5.24", "alien-signals": "^3.0.0", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1", @@ -26,7 +26,7 @@ "@types/path-browserify": "^1.0.1", "@types/picomatch": "^4.0.0", "@volar/typescript": "2.4.23", - "@vue/compiler-sfc": "^3.5.0" + "@vue/compiler-sfc": "^3.5.24" }, "peerDependencies": { "typescript": "*" diff --git a/packages/language-plugin-pug/package.json b/packages/language-plugin-pug/package.json index 11779b475b..65d11f6920 100644 --- a/packages/language-plugin-pug/package.json +++ b/packages/language-plugin-pug/package.json @@ -18,7 +18,7 @@ }, "devDependencies": { "@types/node": "^22.10.4", - "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-dom": "^3.5.24", "@vue/language-core": "3.1.5" } } diff --git a/packages/language-service/package.json b/packages/language-service/package.json index de768c4acb..be341de84c 100644 --- a/packages/language-service/package.json +++ b/packages/language-service/package.json @@ -19,7 +19,7 @@ "dependencies": { "@volar/language-service": "2.4.23", "@vue/language-core": "3.1.5", - "@vue/shared": "^3.5.0", + "@vue/shared": "^3.5.24", "path-browserify": "^1.0.1", "volar-service-css": "0.0.67", "volar-service-emmet": "0.0.67", @@ -36,7 +36,7 @@ "@types/path-browserify": "^1.0.1", "@volar/kit": "2.4.23", "@volar/typescript": "2.4.23", - "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-dom": "^3.5.24", "@vue/typescript-plugin": "3.1.5", "vscode-css-languageservice": "^6.3.1" } diff --git a/packages/typescript-plugin/package.json b/packages/typescript-plugin/package.json index b5379a9a75..390f6e8d0a 100644 --- a/packages/typescript-plugin/package.json +++ b/packages/typescript-plugin/package.json @@ -15,7 +15,7 @@ "dependencies": { "@volar/typescript": "2.4.23", "@vue/language-core": "3.1.5", - "@vue/shared": "^3.5.0", + "@vue/shared": "^3.5.24", "path-browserify": "^1.0.1" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2ee59e202b..762afaa65b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,8 +57,8 @@ importers: specifier: ^3.2.1 version: 3.3.2 '@vue/compiler-sfc': - specifier: ^3.5.0 - version: 3.5.13 + specifier: ^3.5.24 + version: 3.5.24 '@vue/language-core': specifier: 3.1.5 version: link:../../packages/language-core @@ -120,11 +120,11 @@ importers: specifier: 2.4.23 version: 2.4.23 '@vue/compiler-dom': - specifier: ^3.5.0 - version: 3.5.13 + specifier: ^3.5.24 + version: 3.5.24 '@vue/shared': - specifier: ^3.5.0 - version: 3.5.13 + specifier: ^3.5.24 + version: 3.5.24 alien-signals: specifier: ^3.0.0 version: 3.0.0 @@ -154,8 +154,8 @@ importers: specifier: 2.4.23 version: 2.4.23 '@vue/compiler-sfc': - specifier: ^3.5.0 - version: 3.5.13 + specifier: ^3.5.24 + version: 3.5.24 packages/language-plugin-pug: dependencies: @@ -170,8 +170,8 @@ importers: specifier: ^22.10.4 version: 22.15.2 '@vue/compiler-dom': - specifier: ^3.5.0 - version: 3.5.13 + specifier: ^3.5.24 + version: 3.5.24 '@vue/language-core': specifier: 3.1.5 version: link:../language-core @@ -213,8 +213,8 @@ importers: specifier: 3.1.5 version: link:../language-core '@vue/shared': - specifier: ^3.5.0 - version: 3.5.13 + specifier: ^3.5.24 + version: 3.5.24 path-browserify: specifier: ^1.0.1 version: 1.0.1 @@ -259,8 +259,8 @@ importers: specifier: 2.4.23 version: 2.4.23 '@vue/compiler-dom': - specifier: ^3.5.0 - version: 3.5.13 + specifier: ^3.5.24 + version: 3.5.24 '@vue/typescript-plugin': specifier: 3.1.5 version: link:../typescript-plugin @@ -293,8 +293,8 @@ importers: specifier: 3.1.5 version: link:../language-core '@vue/shared': - specifier: ^3.5.0 - version: 3.5.13 + specifier: ^3.5.24 + version: 3.5.24 path-browserify: specifier: ^1.0.1 version: 1.0.1 @@ -374,21 +374,21 @@ packages: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} - '@babel/parser@7.27.0': - resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/types@7.27.0': - resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} '@clack/core@0.3.5': @@ -763,8 +763,8 @@ packages: '@johnsoncodehk/pug-beautify@0.2.2': resolution: {integrity: sha512-qqNS/YD0Nck5wtQLCPHAfGVgWbbGafxSPjNh0ekYPFSNNqnDH2kamnduzYly8IiADmeVx/MfAE1njMEjVeHTMA==} - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} '@lerna-lite/cli@4.1.2': resolution: {integrity: sha512-Pf3tlXxVCro5x+6eEFtnlYTnIB3Bl/EAjNmcaTQOKURWTycc+/qhZb66Cj6qtwObfy4faYAlpYMbl5IEhW+BPQ==} @@ -1389,8 +1389,8 @@ packages: '@vue/compiler-core@3.4.38': resolution: {integrity: sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A==} - '@vue/compiler-core@3.5.13': - resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + '@vue/compiler-core@3.5.24': + resolution: {integrity: sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==} '@vue/compiler-core@https://pkg.pr.new/vuejs/core/@vue/compiler-core@e1bc0eb02e22bc0c236e1471c11d96a368764b72': resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/compiler-core@e1bc0eb02e22bc0c236e1471c11d96a368764b72} @@ -1399,8 +1399,8 @@ packages: '@vue/compiler-dom@3.4.38': resolution: {integrity: sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ==} - '@vue/compiler-dom@3.5.13': - resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + '@vue/compiler-dom@3.5.24': + resolution: {integrity: sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==} '@vue/compiler-dom@https://pkg.pr.new/vuejs/core/@vue/compiler-dom@e1bc0eb02e22bc0c236e1471c11d96a368764b72': resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/compiler-dom@e1bc0eb02e22bc0c236e1471c11d96a368764b72} @@ -1409,8 +1409,8 @@ packages: '@vue/compiler-sfc@3.4.38': resolution: {integrity: sha512-s5QfZ+9PzPh3T5H4hsQDJtI8x7zdJaew/dCGgqZ2630XdzaZ3AD8xGZfBqpT8oaD/p2eedd+pL8tD5vvt5ZYJQ==} - '@vue/compiler-sfc@3.5.13': - resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + '@vue/compiler-sfc@3.5.24': + resolution: {integrity: sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g==} '@vue/compiler-sfc@https://pkg.pr.new/vuejs/core/@vue/compiler-sfc@e1bc0eb02e22bc0c236e1471c11d96a368764b72': resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/compiler-sfc@e1bc0eb02e22bc0c236e1471c11d96a368764b72} @@ -1419,8 +1419,8 @@ packages: '@vue/compiler-ssr@3.4.38': resolution: {integrity: sha512-YXznKFQ8dxYpAz9zLuVvfcXhc31FSPFDcqr0kyujbOwNhlmaNvL2QfIy+RZeJgSn5Fk54CWoEUeW+NVBAogGaw==} - '@vue/compiler-ssr@3.5.13': - resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + '@vue/compiler-ssr@3.5.24': + resolution: {integrity: sha512-trOvMWNBMQ/odMRHW7Ae1CdfYx+7MuiQu62Jtu36gMLXcaoqKvAyh+P73sYG9ll+6jLB6QPovqoKGGZROzkFFg==} '@vue/compiler-ssr@https://pkg.pr.new/vuejs/core/@vue/compiler-ssr@e1bc0eb02e22bc0c236e1471c11d96a368764b72': resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/compiler-ssr@e1bc0eb02e22bc0c236e1471c11d96a368764b72} @@ -1462,8 +1462,8 @@ packages: '@vue/shared@3.4.38': resolution: {integrity: sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==} - '@vue/shared@3.5.13': - resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + '@vue/shared@3.5.24': + resolution: {integrity: sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==} '@vue/shared@https://pkg.pr.new/vuejs/core/@vue/shared@e1bc0eb02e22bc0c236e1471c11d96a368764b72': resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/shared@e1bc0eb02e22bc0c236e1471c11d96a368764b72} @@ -2576,8 +2576,8 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} make-dir@5.0.0: resolution: {integrity: sha512-G0yBotnlWVonPClw+tq+xi4K7DZC9n96HjGTBDdHkstAVsDkfZhi1sTvZypXLpyQTbISBkDtK0E5XlUqDsShQg==} @@ -2967,8 +2967,8 @@ packages: resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} engines: {node: '>=4'} - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} prebuild-install@7.1.3: @@ -3854,22 +3854,22 @@ snapshots: '@babel/code-frame@7.26.2': dependencies: - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-validator-identifier@7.28.5': {} - '@babel/parser@7.27.0': + '@babel/parser@7.28.5': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.28.5 - '@babel/types@7.27.0': + '@babel/types@7.28.5': dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 '@clack/core@0.3.5': dependencies: @@ -4156,7 +4156,7 @@ snapshots: '@johnsoncodehk/pug-beautify@0.2.2': {} - '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.5': {} '@lerna-lite/cli@4.1.2(@lerna-lite/publish@4.1.2(@types/node@22.15.2)(conventional-commits-filter@5.0.0)(typescript@5.9.3))(@lerna-lite/version@4.1.2(@lerna-lite/publish@4.1.2(@types/node@22.15.2)(conventional-commits-filter@5.0.0)(typescript@5.9.3))(@types/node@22.15.2)(conventional-commits-filter@5.0.0)(typescript@5.9.3))(@types/node@22.15.2)(typescript@5.9.3)': dependencies: @@ -4854,7 +4854,7 @@ snapshots: dependencies: '@vitest/spy': 3.1.3 estree-walker: 3.0.3 - magic-string: 0.30.17 + magic-string: 0.30.21 optionalDependencies: vite: 5.4.18(@types/node@22.15.2) @@ -4870,7 +4870,7 @@ snapshots: '@vitest/snapshot@3.1.3': dependencies: '@vitest/pretty-format': 3.1.3 - magic-string: 0.30.17 + magic-string: 0.30.21 pathe: 2.0.3 '@vitest/spy@3.1.3': @@ -5020,23 +5020,23 @@ snapshots: '@vue/compiler-core@3.4.38': dependencies: - '@babel/parser': 7.27.0 + '@babel/parser': 7.28.5 '@vue/shared': 3.4.38 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-core@3.5.13': + '@vue/compiler-core@3.5.24': dependencies: - '@babel/parser': 7.27.0 - '@vue/shared': 3.5.13 + '@babel/parser': 7.28.5 + '@vue/shared': 3.5.24 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 '@vue/compiler-core@https://pkg.pr.new/vuejs/core/@vue/compiler-core@e1bc0eb02e22bc0c236e1471c11d96a368764b72': dependencies: - '@babel/parser': 7.27.0 + '@babel/parser': 7.28.5 '@vue/shared': https://pkg.pr.new/vuejs/core/@vue/shared@e1bc0eb02e22bc0c236e1471c11d96a368764b72 entities: 4.5.0 estree-walker: 2.0.2 @@ -5047,10 +5047,10 @@ snapshots: '@vue/compiler-core': 3.4.38 '@vue/shared': 3.4.38 - '@vue/compiler-dom@3.5.13': + '@vue/compiler-dom@3.5.24': dependencies: - '@vue/compiler-core': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/compiler-core': 3.5.24 + '@vue/shared': 3.5.24 '@vue/compiler-dom@https://pkg.pr.new/vuejs/core/@vue/compiler-dom@e1bc0eb02e22bc0c236e1471c11d96a368764b72': dependencies: @@ -5059,38 +5059,38 @@ snapshots: '@vue/compiler-sfc@3.4.38': dependencies: - '@babel/parser': 7.27.0 + '@babel/parser': 7.28.5 '@vue/compiler-core': 3.4.38 '@vue/compiler-dom': 3.4.38 '@vue/compiler-ssr': 3.4.38 '@vue/shared': 3.4.38 estree-walker: 2.0.2 - magic-string: 0.30.17 - postcss: 8.5.3 + magic-string: 0.30.21 + postcss: 8.5.6 source-map-js: 1.2.1 - '@vue/compiler-sfc@3.5.13': + '@vue/compiler-sfc@3.5.24': dependencies: - '@babel/parser': 7.27.0 - '@vue/compiler-core': 3.5.13 - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-ssr': 3.5.13 - '@vue/shared': 3.5.13 + '@babel/parser': 7.28.5 + '@vue/compiler-core': 3.5.24 + '@vue/compiler-dom': 3.5.24 + '@vue/compiler-ssr': 3.5.24 + '@vue/shared': 3.5.24 estree-walker: 2.0.2 - magic-string: 0.30.17 - postcss: 8.5.3 + magic-string: 0.30.21 + postcss: 8.5.6 source-map-js: 1.2.1 '@vue/compiler-sfc@https://pkg.pr.new/vuejs/core/@vue/compiler-sfc@e1bc0eb02e22bc0c236e1471c11d96a368764b72': dependencies: - '@babel/parser': 7.27.0 + '@babel/parser': 7.28.5 '@vue/compiler-core': https://pkg.pr.new/vuejs/core/@vue/compiler-core@e1bc0eb02e22bc0c236e1471c11d96a368764b72 '@vue/compiler-dom': https://pkg.pr.new/vuejs/core/@vue/compiler-dom@e1bc0eb02e22bc0c236e1471c11d96a368764b72 '@vue/compiler-ssr': https://pkg.pr.new/vuejs/core/@vue/compiler-ssr@e1bc0eb02e22bc0c236e1471c11d96a368764b72 '@vue/shared': https://pkg.pr.new/vuejs/core/@vue/shared@e1bc0eb02e22bc0c236e1471c11d96a368764b72 estree-walker: 2.0.2 - magic-string: 0.30.17 - postcss: 8.5.3 + magic-string: 0.30.21 + postcss: 8.5.6 source-map-js: 1.2.1 '@vue/compiler-ssr@3.4.38': @@ -5098,10 +5098,10 @@ snapshots: '@vue/compiler-dom': 3.4.38 '@vue/shared': 3.4.38 - '@vue/compiler-ssr@3.5.13': + '@vue/compiler-ssr@3.5.24': dependencies: - '@vue/compiler-dom': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/compiler-dom': 3.5.24 + '@vue/shared': 3.5.24 '@vue/compiler-ssr@https://pkg.pr.new/vuejs/core/@vue/compiler-ssr@e1bc0eb02e22bc0c236e1471c11d96a368764b72': dependencies: @@ -5154,7 +5154,7 @@ snapshots: '@vue/shared@3.4.38': {} - '@vue/shared@3.5.13': {} + '@vue/shared@3.5.24': {} '@vue/shared@https://pkg.pr.new/vuejs/core/@vue/shared@e1bc0eb02e22bc0c236e1471c11d96a368764b72': {} @@ -6301,9 +6301,9 @@ snapshots: dependencies: yallist: 4.0.0 - magic-string@0.30.17: + magic-string@0.30.21: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 make-dir@5.0.0: {} @@ -6718,7 +6718,7 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.5.3: + postcss@8.5.6: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 @@ -7265,7 +7265,7 @@ snapshots: vite@5.4.18(@types/node@22.15.2): dependencies: esbuild: 0.21.5 - postcss: 8.5.3 + postcss: 8.5.6 rollup: 4.40.0 optionalDependencies: '@types/node': 22.15.2 @@ -7283,7 +7283,7 @@ snapshots: chai: 5.2.0 debug: 4.4.0 expect-type: 1.2.1 - magic-string: 0.30.17 + magic-string: 0.30.21 pathe: 2.0.3 std-env: 3.9.0 tinybench: 2.9.0 From f65fe5b3634207fdfeebcee84ca312126567491b Mon Sep 17 00:00:00 2001 From: KazariEX Date: Mon, 24 Nov 2025 00:27:05 +0800 Subject: [PATCH 02/11] refactor: rewrite a subset of template node transforms --- packages/language-core/index.ts | 1 + .../lib/codegen/template/templateChild.ts | 85 +--------------- .../lib/codegen/template/vFor.ts | 36 +------ .../language-core/lib/codegen/template/vIf.ts | 6 +- packages/language-core/lib/languagePlugin.ts | 2 + .../lib/plugins/vue-template-html.ts | 12 +-- .../lib/plugins/vue-template-inline-ts.ts | 4 - .../language-core/lib/template/compile.ts | 29 ++++++ .../template/transforms/transformElement.ts | 7 ++ .../lib/template/transforms/transformText.ts | 45 +++++++++ .../lib/template/transforms/vFor.ts | 36 +++++++ .../lib/template/transforms/vIf.ts | 96 +++++++++++++++++++ packages/language-core/lib/template/utils.ts | 43 +++++++++ packages/language-core/lib/types.ts | 3 +- .../lib/utils/forEachTemplateNode.ts | 3 - .../lib/virtualFile/computedSfc.ts | 5 +- packages/language-plugin-pug/index.ts | 8 +- .../tsc/passedFixtures/vue3/#5492/main.vue | 16 ++++ 18 files changed, 287 insertions(+), 150 deletions(-) create mode 100644 packages/language-core/lib/template/compile.ts create mode 100644 packages/language-core/lib/template/transforms/transformElement.ts create mode 100644 packages/language-core/lib/template/transforms/transformText.ts create mode 100644 packages/language-core/lib/template/transforms/vFor.ts create mode 100644 packages/language-core/lib/template/transforms/vIf.ts create mode 100644 packages/language-core/lib/template/utils.ts create mode 100644 test-workspace/tsc/passedFixtures/vue3/#5492/main.vue diff --git a/packages/language-core/index.ts b/packages/language-core/index.ts index 993c326573..3e091240a2 100644 --- a/packages/language-core/index.ts +++ b/packages/language-core/index.ts @@ -4,6 +4,7 @@ export * from './lib/compilerOptions'; export * from './lib/languagePlugin'; export * from './lib/parsers/scriptSetupRanges'; export * from './lib/plugins'; +export * from './lib/template/compile'; export * from './lib/types'; export * from './lib/utils/collectBindings'; export * from './lib/utils/forEachTemplateNode'; diff --git a/packages/language-core/lib/codegen/template/templateChild.ts b/packages/language-core/lib/codegen/template/templateChild.ts index 9d0d4211fd..a0bb92c6c3 100644 --- a/packages/language-core/lib/codegen/template/templateChild.ts +++ b/packages/language-core/lib/codegen/template/templateChild.ts @@ -13,22 +13,6 @@ import { generateVFor } from './vFor'; import { generateVIf } from './vIf'; import { generateVSlot } from './vSlot'; -// @ts-ignore -const transformContext: CompilerDOM.TransformContext = { - onError: () => {}, - helperString: str => str.toString(), - replaceNode: () => {}, - cacheHandlers: false, - prefixIdentifiers: false, - scopes: { - vFor: 0, - vOnce: 0, - vPre: 0, - vSlot: 0, - }, - expressionPlugins: ['typescript'], -}; - export function* generateTemplateChild( options: TemplateCodegenOptions, ctx: TemplateCodegenContext, @@ -39,11 +23,6 @@ export function* generateTemplateChild( return; } - const cur = node as CompilerDOM.ElementNode | CompilerDOM.IfNode | CompilerDOM.ForNode; - if (cur.codegenNode?.type === CompilerDOM.NodeTypes.JS_CACHE_EXPRESSION) { - cur.codegenNode = cur.codegenNode.value as any; - } - if (node.type === CompilerDOM.NodeTypes.ROOT) { for (const item of collectSingleRootNodes(options, node.children)) { ctx.singleRootNodes.add(item); @@ -51,15 +30,7 @@ export function* generateTemplateChild( yield* generateElementChildren(options, ctx, node.children); } else if (node.type === CompilerDOM.NodeTypes.ELEMENT) { - const vForNode = getVForNode(node); - const vIfNode = getVIfNode(node); - if (vForNode) { - yield* generateVFor(options, ctx, vForNode); - } - else if (vIfNode) { - yield* generateVIf(options, ctx, vIfNode); - } - else if (node.tagType === CompilerDOM.ElementTypes.SLOT) { + if (node.tagType === CompilerDOM.ElementTypes.SLOT) { yield* generateSlotOutlet(options, ctx, node); } else { @@ -86,10 +57,6 @@ export function* generateTemplateChild( } } } - else if (node.type === CompilerDOM.NodeTypes.TEXT_CALL) { - // {{ var }} - yield* generateTemplateChild(options, ctx, node.content, false); - } else if (node.type === CompilerDOM.NodeTypes.COMPOUND_EXPRESSION) { // {{ ... }} {{ ... }} yield* generateElementChildren(options, ctx, node.children.filter(child => typeof child === 'object'), false); @@ -116,9 +83,6 @@ export function* generateTemplateChild( // v-for yield* generateVFor(options, ctx, node); } - else if (node.type === CompilerDOM.NodeTypes.TEXT) { - // not needed progress - } if (enterNode) { yield* ctx.exit(); @@ -158,53 +122,6 @@ function* collectSingleRootNodes( } } -// TODO: track https://github.com/vuejs/vue-next/issues/3498 -export function getVForNode(node: CompilerDOM.ElementNode) { - const forDirective = node.props.find( - (prop): prop is CompilerDOM.DirectiveNode => - prop.type === CompilerDOM.NodeTypes.DIRECTIVE - && prop.name === 'for', - ); - if (forDirective) { - let forNode: CompilerDOM.ForNode | undefined; - CompilerDOM.processFor(node, forDirective, transformContext, _forNode => { - forNode = { ..._forNode }; - return undefined; - }); - if (forNode) { - forNode.children = [{ - ...node, - props: node.props.filter(prop => prop !== forDirective), - }]; - return forNode; - } - } -} - -function getVIfNode(node: CompilerDOM.ElementNode) { - const ifDirective = node.props.find( - (prop): prop is CompilerDOM.DirectiveNode => - prop.type === CompilerDOM.NodeTypes.DIRECTIVE - && prop.name === 'if', - ); - if (ifDirective) { - let ifNode: CompilerDOM.IfNode | undefined; - CompilerDOM.processIf(node, ifDirective, transformContext, _ifNode => { - ifNode = { ..._ifNode }; - return undefined; - }); - if (ifNode) { - for (const branch of ifNode.branches) { - branch.children = [{ - ...node, - props: node.props.filter(prop => prop !== ifDirective), - }]; - } - return ifNode; - } - } -} - export function parseInterpolationNode(node: CompilerDOM.InterpolationNode, template: string) { let start = node.content.loc.start.offset; let end = node.content.loc.end.offset; diff --git a/packages/language-core/lib/codegen/template/vFor.ts b/packages/language-core/lib/codegen/template/vFor.ts index a90d02658d..91dc33ea90 100644 --- a/packages/language-core/lib/codegen/template/vFor.ts +++ b/packages/language-core/lib/codegen/template/vFor.ts @@ -2,7 +2,7 @@ import * as CompilerDOM from '@vue/compiler-dom'; import type { Code } from '../../types'; import { collectBindingNames } from '../../utils/collectBindings'; import { codeFeatures } from '../codeFeatures'; -import { createTsAst, endOfLine, newLine } from '../utils'; +import { createTsAst, newLine } from '../utils'; import type { TemplateCodegenContext } from './context'; import { generateElementChildren } from './elementChildren'; import type { TemplateCodegenOptions } from './index'; @@ -48,41 +48,9 @@ export function* generateVFor( } yield `) {${newLine}`; - let isFragment = true; - for (const argument of node.codegenNode?.children.arguments ?? []) { - if ( - argument.type === CompilerDOM.NodeTypes.JS_FUNCTION_EXPRESSION - && argument.returns?.type === CompilerDOM.NodeTypes.VNODE_CALL - && argument.returns.props?.type === CompilerDOM.NodeTypes.JS_OBJECT_EXPRESSION - ) { - if (argument.returns.tag !== CompilerDOM.FRAGMENT) { - isFragment = false; - continue; - } - for (const prop of argument.returns.props.properties) { - if ( - prop.value.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION - && !prop.value.isStatic - ) { - yield* generateInterpolation( - options, - ctx, - 'template', - codeFeatures.all, - prop.value.content, - prop.value.loc.start.offset, - `(`, - `)`, - ); - yield endOfLine; - } - } - } - } - const { inVFor } = ctx; ctx.inVFor = true; - yield* generateElementChildren(options, ctx, node.children, isFragment); + yield* generateElementChildren(options, ctx, node.children, false); ctx.inVFor = inVFor; yield `}${newLine}`; diff --git a/packages/language-core/lib/codegen/template/vIf.ts b/packages/language-core/lib/codegen/template/vIf.ts index 500ea2ae95..7d3f19ba29 100644 --- a/packages/language-core/lib/codegen/template/vIf.ts +++ b/packages/language-core/lib/codegen/template/vIf.ts @@ -14,10 +14,6 @@ export function* generateVIf( node: CompilerDOM.IfNode, ): Generator { const originalBlockConditionsLength = ctx.blockConditions.length; - const isFragment = node.codegenNode - && 'consequent' in node.codegenNode - && 'tag' in node.codegenNode.consequent - && node.codegenNode.consequent.tag === CompilerDOM.FRAGMENT; for (let i = 0; i < node.branches.length; i++) { const branch = node.branches[i]!; @@ -52,7 +48,7 @@ export function* generateVIf( } yield `{${newLine}`; - yield* generateElementChildren(options, ctx, branch.children, i !== 0 || isFragment); + yield* generateElementChildren(options, ctx, branch.children, i !== 0); yield `}${newLine}`; if (addedBlockCondition) { diff --git a/packages/language-core/lib/languagePlugin.ts b/packages/language-core/lib/languagePlugin.ts index 9a191bafb8..254adf40a4 100644 --- a/packages/language-core/lib/languagePlugin.ts +++ b/packages/language-core/lib/languagePlugin.ts @@ -3,6 +3,7 @@ import { forEachEmbeddedCode, type LanguagePlugin } from '@volar/language-core'; import * as CompilerDOM from '@vue/compiler-dom'; import type * as ts from 'typescript'; +import * as LanguageCore from '../index'; import { createPlugins } from './plugins'; import type { VueCompilerOptions, VueLanguagePlugin, VueLanguagePluginReturn } from './types'; import { VueVirtualCode } from './virtualFile/vueFile'; @@ -39,6 +40,7 @@ export function createVueLanguagePlugin( const pluginContext: Parameters[0] = { modules: { '@vue/compiler-dom': CompilerDOM, + '@vue/language-core': LanguageCore, typescript: ts, }, compilerOptions, diff --git a/packages/language-core/lib/plugins/vue-template-html.ts b/packages/language-core/lib/plugins/vue-template-html.ts index f4d8ac3bbf..30cbc9ac0c 100644 --- a/packages/language-core/lib/plugins/vue-template-html.ts +++ b/packages/language-core/lib/plugins/vue-template-html.ts @@ -1,4 +1,5 @@ import type * as CompilerDOM from '@vue/compiler-dom'; +import { compileTemplate } from '../template/compile'; import type { VueLanguagePlugin } from '../types'; interface Loc { @@ -31,11 +32,7 @@ const plugin: VueLanguagePlugin = ({ modules }) => { addedSuffix = true; } - const ast = CompilerDOM.parse(template, { - ...options, - comments: true, - }); - CompilerDOM.transform(ast, options); + const ast = compileTemplate(template, options); return { ast, @@ -122,11 +119,6 @@ const plugin: VueLanguagePlugin = ({ modules }) => { return false; } } - else if (node.type === CompilerDOM.NodeTypes.TEXT_CALL) { - if (!tryUpdateNode(node.content)) { - return false; - } - } else if (node.type === CompilerDOM.NodeTypes.COMPOUND_EXPRESSION) { for (const childNode of node.children) { if (typeof childNode === 'object') { diff --git a/packages/language-core/lib/plugins/vue-template-inline-ts.ts b/packages/language-core/lib/plugins/vue-template-inline-ts.ts index 3c920f31d3..cf37d39766 100644 --- a/packages/language-core/lib/plugins/vue-template-inline-ts.ts +++ b/packages/language-core/lib/plugins/vue-template-inline-ts.ts @@ -199,10 +199,6 @@ const plugin: VueLanguagePlugin = ctx => { visit(child); } } - else if (node.type === CompilerDOM.NodeTypes.TEXT_CALL) { - // {{ var }} - visit(node.content); - } else if (node.type === CompilerDOM.NodeTypes.COMPOUND_EXPRESSION) { // {{ ... }} {{ ... }} for (const childNode of node.children) { diff --git a/packages/language-core/lib/template/compile.ts b/packages/language-core/lib/template/compile.ts new file mode 100644 index 0000000000..8635f2ad61 --- /dev/null +++ b/packages/language-core/lib/template/compile.ts @@ -0,0 +1,29 @@ +import { type CompilerOptions, getBaseTransformPreset, parse, transform } from '@vue/compiler-dom'; +import { transformElement } from './transforms/transformElement'; +import { transformText } from './transforms/transformText'; +import { transformFor } from './transforms/vFor'; +import { transformIf } from './transforms/vIf'; + +export function compileTemplate(source: string, options: CompilerOptions) { + const [nodeTransforms, directiveTransforms] = getBaseTransformPreset(); + const resolvedOptions: CompilerOptions = { + ...options, + comments: true, + nodeTransforms: [ + nodeTransforms[0]!, // transformVBindShorthand + transformIf, + transformFor, + transformElement, + transformText, + ...options.nodeTransforms || [], + ], + directiveTransforms: { + ...directiveTransforms, + ...options.directiveTransforms, + }, + }; + + const ast = parse(source, resolvedOptions); + transform(ast, resolvedOptions); + return ast; +} diff --git a/packages/language-core/lib/template/transforms/transformElement.ts b/packages/language-core/lib/template/transforms/transformElement.ts new file mode 100644 index 0000000000..ff86dd09a4 --- /dev/null +++ b/packages/language-core/lib/template/transforms/transformElement.ts @@ -0,0 +1,7 @@ +import { ElementTypes, type NodeTransform, NodeTypes } from '@vue/compiler-dom'; + +export const transformElement: NodeTransform = (node, context) => { + if (node.type === NodeTypes.ELEMENT && node.tagType === ElementTypes.COMPONENT) { + context.components.add(node.tag); + } +}; diff --git a/packages/language-core/lib/template/transforms/transformText.ts b/packages/language-core/lib/template/transforms/transformText.ts new file mode 100644 index 0000000000..c620133c1b --- /dev/null +++ b/packages/language-core/lib/template/transforms/transformText.ts @@ -0,0 +1,45 @@ +import { + type CompoundExpressionNode, + createCompoundExpression, + isText, + type NodeTransform, + NodeTypes, +} from '@vue/compiler-dom'; + +export const transformText: NodeTransform = node => { + if ( + node.type === NodeTypes.ROOT + || node.type === NodeTypes.ELEMENT + || node.type === NodeTypes.FOR + || node.type === NodeTypes.IF_BRANCH + ) { + return () => { + const children = node.children; + let currentContainer: CompoundExpressionNode | undefined = undefined; + + for (let i = 0; i < children.length; i++) { + const child = children[i]!; + if (isText(child)) { + for (let j = i + 1; j < children.length; j++) { + const next = children[j]!; + if (isText(next)) { + if (!currentContainer) { + currentContainer = children[i] = createCompoundExpression( + [child], + child.loc, + ); + } + currentContainer.children.push(` + `, next); + children.splice(j, 1); + j--; + } + else { + currentContainer = undefined; + break; + } + } + } + } + }; + } +}; diff --git a/packages/language-core/lib/template/transforms/vFor.ts b/packages/language-core/lib/template/transforms/vFor.ts new file mode 100644 index 0000000000..9683d0b9a8 --- /dev/null +++ b/packages/language-core/lib/template/transforms/vFor.ts @@ -0,0 +1,36 @@ +import { createCompilerError, ErrorCodes, type ForNode, NodeTypes } from '@vue/compiler-dom'; +import { createStructuralDirectiveTransform } from '../utils'; + +export const transformFor = createStructuralDirectiveTransform( + 'for', + (node, dir, context) => { + if (!dir.exp) { + context.onError( + createCompilerError(ErrorCodes.X_V_FOR_NO_EXPRESSION, dir.loc), + ); + return; + } + + const parseResult = dir.forParseResult; + if (!parseResult) { + context.onError( + createCompilerError(ErrorCodes.X_V_FOR_MALFORMED_EXPRESSION, dir.loc), + ); + return; + } + + const { source, value, key, index } = parseResult; + const forNode: ForNode = { + type: NodeTypes.FOR, + loc: dir.loc, + source, + valueAlias: value, + keyAlias: key, + objectIndexAlias: index, + parseResult, + children: [node], + }; + + context.replaceNode(forNode); + }, +); diff --git a/packages/language-core/lib/template/transforms/vIf.ts b/packages/language-core/lib/template/transforms/vIf.ts new file mode 100644 index 0000000000..426d4abadd --- /dev/null +++ b/packages/language-core/lib/template/transforms/vIf.ts @@ -0,0 +1,96 @@ +import { + createCompilerError, + createSimpleExpression, + type DirectiveNode, + type ElementNode, + ElementTypes, + ErrorCodes, + type IfBranchNode, + type IfNode, + NodeTypes, + type SimpleExpressionNode, + traverseNode, +} from '@vue/compiler-dom'; +import { cloneLoc, createStructuralDirectiveTransform } from '../utils'; + +export const transformIf = createStructuralDirectiveTransform( + /^(?:if|else-if|else)$/, + (node, dir, context) => { + if ( + dir.name !== 'else' + && (!dir.exp || !(dir.exp as SimpleExpressionNode).content.trim()) + ) { + const loc = dir.exp ? dir.exp.loc : node.loc; + context.onError( + createCompilerError(ErrorCodes.X_V_IF_NO_EXPRESSION, dir.loc), + ); + dir.exp = createSimpleExpression('', false, loc); + } + + if (dir.name === 'if') { + const branch = createIfBranch(node, dir); + const ifNode: IfNode = { + type: NodeTypes.IF, + loc: cloneLoc(node.loc), + branches: [branch], + }; + context.replaceNode(ifNode); + } + else { + const siblings = context.parent!.children; + const comments = []; + let i = siblings.indexOf(node); + while (i-- >= -1) { + const sibling = siblings[i]; + if (sibling?.type === NodeTypes.COMMENT) { + context.removeNode(sibling); + comments.unshift(sibling); + continue; + } + + if (sibling?.type === NodeTypes.TEXT && !sibling.content.trim().length) { + context.removeNode(sibling); + continue; + } + + if (sibling?.type === NodeTypes.IF) { + if ( + (dir.name === 'else-if' || dir.name === 'else') + && !sibling.branches.at(-1)!.condition + ) { + context.onError( + createCompilerError(ErrorCodes.X_V_ELSE_NO_ADJACENT_IF, node.loc), + ); + } + + context.removeNode(); + const branch = createIfBranch(node, dir); + if (comments.length) { + branch.children.unshift(...comments); + } + + sibling.branches.push(branch); + traverseNode(branch, context); + context.currentNode = null; + } + else { + context.onError( + createCompilerError(ErrorCodes.X_V_ELSE_NO_ADJACENT_IF, node.loc), + ); + } + break; + } + } + }, +); + +function createIfBranch(node: ElementNode, dir: DirectiveNode): IfBranchNode { + const isTemplateIf = node.tagType === ElementTypes.TEMPLATE; + return { + type: NodeTypes.IF_BRANCH, + loc: node.loc, + condition: dir.name === 'else' ? undefined : dir.exp, + children: [node], + isTemplateIf, + }; +} diff --git a/packages/language-core/lib/template/utils.ts b/packages/language-core/lib/template/utils.ts new file mode 100644 index 0000000000..cf95014dcc --- /dev/null +++ b/packages/language-core/lib/template/utils.ts @@ -0,0 +1,43 @@ +import { + type NodeTransform, + NodeTypes, + type SourceLocation, + type StructuralDirectiveTransform, +} from '@vue/compiler-dom'; +import { isString } from '@vue/shared'; + +export function createStructuralDirectiveTransform( + name: string | RegExp, + fn: StructuralDirectiveTransform, +): NodeTransform { + const matches = isString(name) + ? (n: string) => n === name + : (n: string) => name.test(n); + + return (node, context) => { + if (node.type === NodeTypes.ELEMENT) { + const { props } = node; + const exitFns = []; + for (let i = 0; i < props.length; i++) { + const prop = props[i]!; + if (prop.type === NodeTypes.DIRECTIVE && matches(prop.name)) { + props.splice(i, 1); + i--; + const onExit = fn(node, prop, context); + if (onExit) { + exitFns.push(onExit); + } + } + } + return exitFns; + } + }; +} + +export function cloneLoc(loc: SourceLocation): SourceLocation { + return { + start: { ...loc.start }, + end: { ...loc.end }, + source: loc.source, + }; +} diff --git a/packages/language-core/lib/types.ts b/packages/language-core/lib/types.ts index 14c205bceb..0ed3b57db2 100644 --- a/packages/language-core/lib/types.ts +++ b/packages/language-core/lib/types.ts @@ -110,8 +110,9 @@ export type VueLanguagePluginReturn = { export type VueLanguagePlugin = (ctx: { modules: { - typescript: typeof ts; '@vue/compiler-dom': typeof CompilerDOM; + '@vue/language-core': typeof import('../index'); + typescript: typeof ts; }; compilerOptions: ts.CompilerOptions; vueCompilerOptions: VueCompilerOptions; diff --git a/packages/language-core/lib/utils/forEachTemplateNode.ts b/packages/language-core/lib/utils/forEachTemplateNode.ts index 9b127b8e05..ddf4175ee6 100644 --- a/packages/language-core/lib/utils/forEachTemplateNode.ts +++ b/packages/language-core/lib/utils/forEachTemplateNode.ts @@ -41,9 +41,6 @@ export function* forEachInterpolationNode( yield* forEachInterpolationNode(child); } } - else if (node.type === CompilerDOM.NodeTypes.TEXT_CALL) { - yield* forEachInterpolationNode(node.content); - } else if (node.type === CompilerDOM.NodeTypes.COMPOUND_EXPRESSION) { for (const child of node.children) { if (typeof child === 'object') { diff --git a/packages/language-core/lib/virtualFile/computedSfc.ts b/packages/language-core/lib/virtualFile/computedSfc.ts index 75f18ea935..7fb03d8848 100644 --- a/packages/language-core/lib/virtualFile/computedSfc.ts +++ b/packages/language-core/lib/virtualFile/computedSfc.ts @@ -1,4 +1,4 @@ -import * as CompilerDOM from '@vue/compiler-dom'; +import type * as CompilerDOM from '@vue/compiler-dom'; import type { SFCBlock, SFCParseResult } from '@vue/compiler-sfc'; import { computed, setActiveSub } from 'alien-signals'; import type * as ts from 'typescript'; @@ -281,13 +281,10 @@ export function computedSfc( const errors: CompilerDOM.CompilerError[] = []; const warnings: CompilerDOM.CompilerError[] = []; - const [nodeTransforms, directiveTransforms] = CompilerDOM.getBaseTransformPreset(); let options: CompilerDOM.CompilerOptions = { onError: err => errors.push(err), onWarn: err => warnings.push(err), expressionPlugins: ['typescript'], - nodeTransforms, - directiveTransforms, }; for (const plugin of plugins) { diff --git a/packages/language-plugin-pug/index.ts b/packages/language-plugin-pug/index.ts index 6b32d47357..1ca574803e 100644 --- a/packages/language-plugin-pug/index.ts +++ b/packages/language-plugin-pug/index.ts @@ -6,8 +6,6 @@ import * as pug from 'volar-service-pug/lib/languageService'; const classRegex = /^class\s*=/; const plugin: VueLanguagePlugin = ({ modules }) => { - const CompilerDOM = modules['@vue/compiler-dom']; - return { name: require('./package.json').name, @@ -47,6 +45,8 @@ const plugin: VueLanguagePlugin = ({ modules }) => { compileSFCTemplate(lang, template, options) { if (lang === 'pug') { + const { compileTemplate } = modules['@vue/language-core']; + let pugFile: ReturnType; let baseOffset = 0; @@ -63,9 +63,8 @@ const plugin: VueLanguagePlugin = ({ modules }) => { } const map = new SourceMap(pugFile.mappings); - const ast = CompilerDOM.parse(pugFile.htmlCode, { + const ast = compileTemplate(pugFile.htmlCode, { ...options, - comments: true, onWarn(warning) { options.onWarn?.(createProxyObject(warning)); }, @@ -80,7 +79,6 @@ const plugin: VueLanguagePlugin = ({ modules }) => { options.onError?.(createProxyObject(error)); }, }); - CompilerDOM.transform(ast, options); return { ast: createProxyObject(ast), diff --git a/test-workspace/tsc/passedFixtures/vue3/#5492/main.vue b/test-workspace/tsc/passedFixtures/vue3/#5492/main.vue new file mode 100644 index 0000000000..749923b9ee --- /dev/null +++ b/test-workspace/tsc/passedFixtures/vue3/#5492/main.vue @@ -0,0 +1,16 @@ + + +