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');