diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7e66304434..4a2749815f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
> [Join the Insiders Program](https://github.com/vuejs/language-tools/wiki/Get-Insiders-Edition) for more exclusive features and updates.
+## 2.2.8 official, 2.2.9 insiders (2025-03-02)
+
+### Bug Fixes
+
+- revert "fix(language-core): validate `v-model` variable against model type"
+
## 2.2.6 official, 2.2.7 insiders (2025-03-01)
### Features
diff --git a/extensions/vscode/package.json b/extensions/vscode/package.json
index 6240dac0d4..d7359d7a65 100644
--- a/extensions/vscode/package.json
+++ b/extensions/vscode/package.json
@@ -1,7 +1,7 @@
{
"private": true,
"name": "volar",
- "version": "2.2.6",
+ "version": "2.2.8",
"repository": {
"type": "git",
"url": "https://github.com/vuejs/language-tools.git",
@@ -567,9 +567,9 @@
"@types/vscode": "^1.82.0",
"@volar/vscode": "~2.4.11",
"@vscode/vsce": "^3.2.1",
- "@vue/language-core": "2.2.6",
- "@vue/language-server": "2.2.6",
- "@vue/typescript-plugin": "2.2.6",
+ "@vue/language-core": "2.2.8",
+ "@vue/language-server": "2.2.8",
+ "@vue/typescript-plugin": "2.2.8",
"esbuild": "^0.25.0",
"esbuild-visualizer": "^0.7.0",
"reactive-vscode": "^0.2.9",
diff --git a/insiders.json b/insiders.json
index d9cf3b9c98..0cc11b289f 100644
--- a/insiders.json
+++ b/insiders.json
@@ -1,6 +1,14 @@
{
- "latest": "2.2.7",
+ "latest": "2.2.9",
"versions": [
+ {
+ "version": "2.2.9",
+ "date": "2025-03-02",
+ "downloads": {
+ "GitHub": "https://github.com/volarjs/insiders/releases/tag/v2.2.9",
+ "AFDIAN": "https://afdian.com/p/d78b61e8f75011ef812652540025c377"
+ }
+ },
{
"version": "2.2.7",
"date": "2025-03-01",
diff --git a/lerna.json b/lerna.json
index a7e02c83da..d47b2db0b8 100644
--- a/lerna.json
+++ b/lerna.json
@@ -6,5 +6,5 @@
"packages/*",
"test-workspace"
],
- "version": "2.2.6"
+ "version": "2.2.8"
}
diff --git a/packages/component-meta/package.json b/packages/component-meta/package.json
index f633a4dedb..e05e761e16 100644
--- a/packages/component-meta/package.json
+++ b/packages/component-meta/package.json
@@ -1,6 +1,6 @@
{
"name": "vue-component-meta",
- "version": "2.2.6",
+ "version": "2.2.8",
"license": "MIT",
"files": [
"**/*.js",
@@ -14,9 +14,9 @@
},
"dependencies": {
"@volar/typescript": "~2.4.11",
- "@vue/language-core": "2.2.6",
+ "@vue/language-core": "2.2.8",
"path-browserify": "^1.0.1",
- "vue-component-type-helpers": "2.2.6"
+ "vue-component-type-helpers": "2.2.8"
},
"peerDependencies": {
"typescript": "*"
diff --git a/packages/component-type-helpers/package.json b/packages/component-type-helpers/package.json
index 786c44ddb0..5a1e7d1075 100644
--- a/packages/component-type-helpers/package.json
+++ b/packages/component-type-helpers/package.json
@@ -1,6 +1,6 @@
{
"name": "vue-component-type-helpers",
- "version": "2.2.6",
+ "version": "2.2.8",
"license": "MIT",
"files": [
"**/*.js",
diff --git a/packages/language-core/lib/codegen/template/elementEvents.ts b/packages/language-core/lib/codegen/template/elementEvents.ts
index 32175ae2a5..9b7f72a6c5 100644
--- a/packages/language-core/lib/codegen/template/elementEvents.ts
+++ b/packages/language-core/lib/codegen/template/elementEvents.ts
@@ -24,10 +24,9 @@ export function* generateElementEvents(
for (const prop of node.props) {
if (
prop.type === CompilerDOM.NodeTypes.DIRECTIVE
- && (
- prop.name === 'on' && (prop.arg?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION && prop.arg.isStatic)
- || prop.name === 'model' && (!prop.arg || prop.arg.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION && prop.arg.isStatic)
- )
+ && prop.name === 'on'
+ && prop.arg?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION
+ && prop.arg.isStatic
) {
ctx.currentComponent!.used = true;
if (!emitVar) {
@@ -38,33 +37,21 @@ export function* generateElementEvents(
yield `let ${eventsVar}!: __VLS_NormalizeEmits${endOfLine}`;
yield `let ${propsVar}!: __VLS_FunctionalComponentProps${endOfLine}`;
}
-
- let source = prop.arg?.loc.source ?? 'model-value';
- let start = prop.arg?.loc.start.offset;
- let propPrefix = 'on-';
+ let source = prop.arg.loc.source;
+ let start = prop.arg.loc.start.offset;
+ let propPrefix = 'on';
let emitPrefix = '';
- if (prop.name === 'model') {
- propPrefix = 'onUpdate:';
- emitPrefix = 'update:';
- }
- else if (source.startsWith('vue:')) {
+ if (source.startsWith('vue:')) {
source = source.slice('vue:'.length);
- start = start! + 'vue:'.length;
- propPrefix = 'onVnode-';
+ start = start + 'vue:'.length;
+ propPrefix = 'onVnode';
emitPrefix = 'vnode-';
}
-
- yield `(): __VLS_NormalizeComponentEvent => ({${newLine}`;
- if (prop.name === 'on') {
- yield* generateEventArg(ctx, source, start!, propPrefix.slice(0, -1));
- yield `: `;
- yield* generateEventExpression(options, ctx, prop);
- }
- else {
- yield `'${camelize(propPrefix + source)}': `;
- yield* generateModelEventExpression(options, ctx, prop);
- }
- yield `})${endOfLine}`;
+ yield `const ${ctx.getInternalVariable()}: __VLS_NormalizeComponentEvent = {${newLine}`;
+ yield* generateEventArg(ctx, source, start, propPrefix);
+ yield `: `;
+ yield* generateEventExpression(options, ctx, prop);
+ yield `}${endOfLine}`;
}
}
}
@@ -172,29 +159,6 @@ export function* generateEventExpression(
}
}
-export function* generateModelEventExpression(
- options: TemplateCodegenOptions,
- ctx: TemplateCodegenContext,
- prop: CompilerDOM.DirectiveNode
-): Generator {
- if (prop.exp?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) {
- yield `(...[$event]) => (`;
- yield* generateInterpolation(
- options,
- ctx,
- 'template',
- ctx.codeFeatures.verification,
- prop.exp.content,
- prop.exp.loc.start.offset,
- prop.exp.loc
- );
- yield ` = $event)`;
- }
- else {
- yield `() => {}`;
- }
-}
-
export function isCompoundExpression(ts: typeof import('typescript'), ast: ts.SourceFile) {
let result = true;
if (ast.statements.length === 0) {
diff --git a/packages/language-core/package.json b/packages/language-core/package.json
index 9961edaef5..33256cd390 100644
--- a/packages/language-core/package.json
+++ b/packages/language-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@vue/language-core",
- "version": "2.2.6",
+ "version": "2.2.8",
"license": "MIT",
"files": [
"**/*.js",
diff --git a/packages/language-plugin-pug/package.json b/packages/language-plugin-pug/package.json
index e5b74515b4..2cd6d5cb95 100644
--- a/packages/language-plugin-pug/package.json
+++ b/packages/language-plugin-pug/package.json
@@ -1,6 +1,6 @@
{
"name": "@vue/language-plugin-pug",
- "version": "2.2.6",
+ "version": "2.2.8",
"license": "MIT",
"files": [
"**/*.js",
@@ -14,7 +14,7 @@
},
"devDependencies": {
"@types/node": "^22.10.4",
- "@vue/language-core": "2.2.6"
+ "@vue/language-core": "2.2.8"
},
"dependencies": {
"@volar/source-map": "~2.4.11",
diff --git a/packages/language-server/package.json b/packages/language-server/package.json
index 2173136ee1..86ff9005bf 100644
--- a/packages/language-server/package.json
+++ b/packages/language-server/package.json
@@ -1,6 +1,6 @@
{
"name": "@vue/language-server",
- "version": "2.2.6",
+ "version": "2.2.8",
"license": "MIT",
"files": [
"**/*.js",
@@ -19,9 +19,9 @@
"@volar/language-core": "~2.4.11",
"@volar/language-server": "~2.4.11",
"@volar/test-utils": "~2.4.11",
- "@vue/language-core": "2.2.6",
- "@vue/language-service": "2.2.6",
- "@vue/typescript-plugin": "2.2.6",
+ "@vue/language-core": "2.2.8",
+ "@vue/language-service": "2.2.8",
+ "@vue/typescript-plugin": "2.2.8",
"vscode-languageserver-protocol": "^3.17.5",
"vscode-uri": "^3.0.8"
}
diff --git a/packages/language-service/package.json b/packages/language-service/package.json
index 44e18170df..782f789301 100644
--- a/packages/language-service/package.json
+++ b/packages/language-service/package.json
@@ -1,6 +1,6 @@
{
"name": "@vue/language-service",
- "version": "2.2.6",
+ "version": "2.2.8",
"license": "MIT",
"files": [
"data",
@@ -21,9 +21,9 @@
"@volar/language-service": "~2.4.11",
"@volar/typescript": "~2.4.11",
"@vue/compiler-dom": "^3.5.0",
- "@vue/language-core": "2.2.6",
+ "@vue/language-core": "2.2.8",
"@vue/shared": "^3.5.0",
- "@vue/typescript-plugin": "2.2.6",
+ "@vue/typescript-plugin": "2.2.8",
"alien-signals": "^1.0.3",
"path-browserify": "^1.0.1",
"volar-service-css": "0.0.62",
diff --git a/packages/tsc/package.json b/packages/tsc/package.json
index fc8d5f318d..b79fe42484 100644
--- a/packages/tsc/package.json
+++ b/packages/tsc/package.json
@@ -1,6 +1,6 @@
{
"name": "vue-tsc",
- "version": "2.2.6",
+ "version": "2.2.8",
"license": "MIT",
"files": [
"bin",
@@ -21,7 +21,7 @@
},
"dependencies": {
"@volar/typescript": "~2.4.11",
- "@vue/language-core": "2.2.6"
+ "@vue/language-core": "2.2.8"
},
"devDependencies": {
"@types/node": "^22.10.4"
diff --git a/packages/typescript-plugin/package.json b/packages/typescript-plugin/package.json
index 61c9d8e39f..1775e00749 100644
--- a/packages/typescript-plugin/package.json
+++ b/packages/typescript-plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@vue/typescript-plugin",
- "version": "2.2.6",
+ "version": "2.2.8",
"license": "MIT",
"files": [
"**/*.js",
@@ -14,7 +14,7 @@
},
"dependencies": {
"@volar/typescript": "~2.4.11",
- "@vue/language-core": "2.2.6",
+ "@vue/language-core": "2.2.8",
"@vue/shared": "^3.5.0"
},
"devDependencies": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 33dbd703aa..d3891ba3c6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -48,13 +48,13 @@ importers:
specifier: ^3.2.1
version: 3.2.1
'@vue/language-core':
- specifier: 2.2.6
+ specifier: 2.2.8
version: link:../../packages/language-core
'@vue/language-server':
- specifier: 2.2.6
+ specifier: 2.2.8
version: link:../../packages/language-server
'@vue/typescript-plugin':
- specifier: 2.2.6
+ specifier: 2.2.8
version: link:../../packages/typescript-plugin
esbuild:
specifier: ^0.25.0
@@ -81,7 +81,7 @@ importers:
specifier: ~2.4.11
version: 2.4.11
'@vue/language-core':
- specifier: 2.2.6
+ specifier: 2.2.8
version: link:../language-core
path-browserify:
specifier: ^1.0.1
@@ -90,7 +90,7 @@ importers:
specifier: '*'
version: 5.7.2
vue-component-type-helpers:
- specifier: 2.2.6
+ specifier: 2.2.8
version: link:../component-type-helpers
devDependencies:
'@types/node':
@@ -161,7 +161,7 @@ importers:
specifier: ^22.10.4
version: 22.10.4
'@vue/language-core':
- specifier: 2.2.6
+ specifier: 2.2.8
version: link:../language-core
packages/language-server:
@@ -176,13 +176,13 @@ importers:
specifier: ~2.4.11
version: 2.4.11
'@vue/language-core':
- specifier: 2.2.6
+ specifier: 2.2.8
version: link:../language-core
'@vue/language-service':
- specifier: 2.2.6
+ specifier: 2.2.8
version: link:../language-service
'@vue/typescript-plugin':
- specifier: 2.2.6
+ specifier: 2.2.8
version: link:../typescript-plugin
vscode-languageserver-protocol:
specifier: ^3.17.5
@@ -206,13 +206,13 @@ importers:
specifier: ^3.5.0
version: 3.5.13
'@vue/language-core':
- specifier: 2.2.6
+ specifier: 2.2.8
version: link:../language-core
'@vue/shared':
specifier: ^3.5.0
version: 3.5.13
'@vue/typescript-plugin':
- specifier: 2.2.6
+ specifier: 2.2.8
version: link:../typescript-plugin
alien-signals:
specifier: ^1.0.3
@@ -276,7 +276,7 @@ importers:
specifier: ~2.4.11
version: 2.4.11
'@vue/language-core':
- specifier: 2.2.6
+ specifier: 2.2.8
version: link:../language-core
typescript:
specifier: '>=5.0.0'
@@ -292,7 +292,7 @@ importers:
specifier: ~2.4.11
version: 2.4.11
'@vue/language-core':
- specifier: 2.2.6
+ specifier: 2.2.8
version: link:../language-core
'@vue/shared':
specifier: ^3.5.0
@@ -314,7 +314,7 @@ importers:
specifier: ^3.5.0
version: 3.5.13(typescript@5.7.2)
vue-component-type-helpers:
- specifier: 2.2.6
+ specifier: 2.2.8
version: link:../packages/component-type-helpers
vue2:
specifier: npm:vue@2.7.16
diff --git a/test-workspace/package.json b/test-workspace/package.json
index 7d452f168b..db230fb5fd 100644
--- a/test-workspace/package.json
+++ b/test-workspace/package.json
@@ -1,11 +1,11 @@
{
"private": true,
- "version": "2.2.6",
+ "version": "2.2.8",
"devDependencies": {
"typescript-next": "npm:typescript@5.7.0-dev.20240926",
"typescript-stable": "npm:typescript@~5.6.0",
"vue": "^3.5.0",
- "vue-component-type-helpers": "2.2.6",
+ "vue-component-type-helpers": "2.2.8",
"vue2": "npm:vue@2.7.16",
"vue3.4": "npm:vue@3.4.38"
}
diff --git a/test-workspace/tsc/passedFixtures/vue3/#4646/parent.vue b/test-workspace/tsc/passedFixtures/vue3/#4646/parent.vue
index 38b59cfc7d..f42054647f 100644
--- a/test-workspace/tsc/passedFixtures/vue3/#4646/parent.vue
+++ b/test-workspace/tsc/passedFixtures/vue3/#4646/parent.vue
@@ -5,7 +5,7 @@ import child from './child.vue';
import child2 from './child2.vue';
const msg = ref('test');
-const other = ref('test2');
+const other = ref('test2');
diff --git a/test-workspace/tsc/passedFixtures/vue3/#4822/main.vue b/test-workspace/tsc/passedFixtures/vue3/#4822/main.vue
index 2b77561b60..c6f1e69582 100644
--- a/test-workspace/tsc/passedFixtures/vue3/#4822/main.vue
+++ b/test-workspace/tsc/passedFixtures/vue3/#4822/main.vue
@@ -11,7 +11,7 @@ export default defineComponent({