diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index effb552e4d..c7fb7857f9 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1 @@ github: johnsoncodehk -open_collective: volarjs diff --git a/.github/sponsors/365talents.png b/.github/sponsors/365talents.png deleted file mode 100644 index 296e2f552a..0000000000 Binary files a/.github/sponsors/365talents.png and /dev/null differ diff --git a/.github/sponsors/StackBlitz.png b/.github/sponsors/StackBlitz.png deleted file mode 100644 index aaf7200669..0000000000 Binary files a/.github/sponsors/StackBlitz.png and /dev/null differ diff --git a/.github/sponsors/nuxt.svg b/.github/sponsors/nuxt.svg deleted file mode 100644 index 8e6541e777..0000000000 --- a/.github/sponsors/nuxt.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/.github/sponsors/prefect.svg b/.github/sponsors/prefect.svg deleted file mode 100644 index f60f88c40e..0000000000 --- a/.github/sponsors/prefect.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/.github/sponsors/volta.svg b/.github/sponsors/volta.svg deleted file mode 100644 index c3a5182226..0000000000 --- a/.github/sponsors/volta.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.github/sponsors/vue.png b/.github/sponsors/vue.png deleted file mode 100644 index 60e17006ad..0000000000 Binary files a/.github/sponsors/vue.png and /dev/null differ diff --git a/CHANGELOG.md b/CHANGELOG.md index 3517ef5d2f..55fb576af4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,71 @@ # Changelog +## 2.1.0-insiders.8 (2024/5/1) + +Download Pages: [GitHub Releases](https://github.com/volarjs/insiders/releases/tag/v2.1.0-insiders.8), [爱发电电圈](https://afdian.net/p/f45436ca076d11ef9b7352540025c377) + +> [Join the Insiders Program](https://github.com/vuejs/language-tools/wiki/Get-Insiders-Edition) for more exclusive features and updates. + +### Other Changes + +- Merged [v2.0.16](https://github.com/vuejs/language-tools/blob/master/CHANGELOG.md#2016-202451). + +## 2.0.16 (2024/5/1) + +### Bug Fixes + +- **language-core:** virtual document language ID is not updated when changing SFC style block lang +- **language-core:** correct logic for `defineSlots` destructuring (#4326) - Thanks @zhiyuanzmj +- **language-core:** ObjectDirective does not work with `defineSlots` (#4327) +- **language-service:** emmet not working in postcss style block (https://github.com/volarjs/volar.js/issues/169) + +### Other Changes + +- Upgrade to [Volar 2.2](https://github.com/volarjs/volar.js/releases/tag/v2.2.0) +- **language-core:** export `VueEmbeddedCode` (#4265) - Thanks @zhiyuanzmj +- **typescript-plugin:** expose `FileRegistry` to `project.program` (#3963) - Thanks @zcf0508 +- **vscode:** remove outdated formatters section (#4243) - Thanks @BBboy01 + +## 2.1.0-insiders.7 (2024/4/30) + +Download Pages: [GitHub Releases](https://github.com/volarjs/insiders/releases/tag/v2.1.0-insiders.7), [爱发电电圈](https://afdian.net/p/84db515c069b11ef9eaf52540025c377) + +> [Join the Insiders Program](https://github.com/vuejs/language-tools/wiki/Get-Insiders-Edition) for more exclusive features and updates. + +### Other Changes + +- Merged [v2.0.15](https://github.com/vuejs/language-tools/blob/master/CHANGELOG.md#2015-2024430). + +## 2.0.15 (2024/4/30) + +### Features + +- Redesign additional extensions, VitePress, PetiteVue support (#4321) + - Fix custom file extensions not working in Hybrid Mode (#4251) +- **vscode:** prompt when Hybrid Mode is explicitly enabled but known incompatible extensions are installed +- **language-core:** use internal options for directly exposing user props/emits types ([vuejs/core#10801](https://github.com/vuejs/core/pull/10801)) +- **language-core:** support defineSlots destructuring (#4312) - Thanks @zhiyuanzmj + +### Bug Fixes + +- **vscode:** when enabled VitePress support, extension not activated when opening markdown files +- **language-core:** auto-complete not working in v-bind + +### Performance + +- **language-service:** emmet completion should not be blocked by TS type evaluation (#4298) +- **language-core:** simplify virtual code for intrinsic elements + +### Other Changes + +- Upgrade Volar from `v2.2.0-alpha.10` to `v2.2.0-alpha.12`: + - Avoid extension crash when workspace TSDK does not exist + - Fix template variables cannot be renamed at the first character in Hybrid Mode (#4297) + - Fix template virtual code mapping is misaligned in Windows in Hybrid Mode (#4297) +- Add `svelte.svelte-vscode` (>=108.4.0) to Hybrid Mode compatibility whitelist ([sveltejs/language-tools#2317](https://github.com/sveltejs/language-tools/pull/2317)) +- **component-meta:** convert source code to TS +- **language-core:** export `allCodeFeatures` (#4320) - Thanks @zhiyuanzmj + ## 2.1.0-insiders.6 (2024/4/25) Download Pages: [GitHub Releases](https://github.com/volarjs/insiders/releases/tag/v2.1.0-insiders.6), [爱发电电圈](https://afdian.net/p/f73a772602ab11efa33652540025c377) diff --git a/README.md b/README.md index 12d55b132c..2bcb0b6c9f 100644 --- a/README.md +++ b/README.md @@ -319,7 +319,7 @@ flowchart LR

- +

Boot a fresh environment in milliseconds.

diff --git a/extensions/vscode/README.md b/extensions/vscode/README.md index a9fbde6a94..c26404c94e 100644 --- a/extensions/vscode/README.md +++ b/extensions/vscode/README.md @@ -254,8 +254,3 @@ Finally you need to make VS Code recognize your new extension and automatically - [angular](https://github.com/angular/angular) shows how TS server plugin working with language service. - Syntax highlight is rewritten base on [vue-syntax-highlight](https://github.com/vuejs/vue-syntax-highlight). - [vscode-fenced-code-block-grammar-injection-example](https://github.com/mjbvz/vscode-fenced-code-block-grammar-injection-example) shows how to inject vue syntax highlight to markdown. -- Out of the box formatting working by (If you would like to use other formatters, checkout https://github.com/vuejs/language-tools-plugins): - - [vscode-html-languageservice](https://github.com/microsoft/vscode-html-languageservice): html - - [vscode-css-languageservice](https://github.com/microsoft/vscode-css-languageservice): css, less, scss, postcss - - [pug-beautify](https://github.com/vingorius/pug-beautify): pug - - [typescript](https://github.com/microsoft/TypeScript): js, ts, jsx, tsx diff --git a/extensions/vscode/package.json b/extensions/vscode/package.json index 9566246842..1f5f100e5c 100644 --- a/extensions/vscode/package.json +++ b/extensions/vscode/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "volar", - "version": "2.0.14", + "version": "2.0.16", "repository": { "type": "git", "url": "https://github.com/vuejs/language-tools.git", @@ -515,10 +515,10 @@ "devDependencies": { "@types/semver": "^7.5.3", "@types/vscode": "^1.82.0", - "@volar/vscode": "2.2.0-alpha.10", - "@vue/language-core": "2.0.14", - "@vue/language-server": "2.0.14", - "@vue/typescript-plugin": "2.0.14", + "@volar/vscode": "~2.2.0", + "@vue/language-core": "2.0.16", + "@vue/language-server": "2.0.16", + "@vue/typescript-plugin": "2.0.16", "esbuild": "latest", "esbuild-plugin-copy": "latest", "esbuild-visualizer": "latest", diff --git a/extensions/vscode/src/common.ts b/extensions/vscode/src/common.ts index ffbb8312b1..b843ac0215 100644 --- a/extensions/vscode/src/common.ts +++ b/extensions/vscode/src/common.ts @@ -1,14 +1,14 @@ -import { DiagnosticModel, VueInitializationOptions } from '@vue/language-server'; -import * as vscode from 'vscode'; import * as lsp from '@volar/vscode'; +import { quickPick } from '@volar/vscode/lib/common'; +import type { VueInitializationOptions } from '@vue/language-server'; +import * as fs from 'fs'; +import * as path from 'path'; +import * as semver from 'semver'; +import * as vscode from 'vscode'; import { config } from './config'; import * as doctor from './features/doctor'; import * as nameCasing from './features/nameCasing'; import * as splitEditors from './features/splitEditors'; -import * as semver from 'semver'; -import * as fs from 'fs'; -import * as path from 'path'; -import { quickPick } from '@volar/vscode/lib/common'; let client: lsp.BaseLanguageClient; @@ -437,13 +437,8 @@ async function getInitializationOptions( hybridMode: boolean, ): Promise { return { - diagnosticModel: enabledHybridMode ? DiagnosticModel.Pull : DiagnosticModel.Push, typescript: { tsdk: (await lsp.getTsdk(context)).tsdk }, maxFileSize: config.server.maxFileSize, - semanticTokensLegend: { - tokenTypes: [], - tokenModifiers: [], - }, vue: { hybridMode, }, diff --git a/insiders.json b/insiders.json index 09abf085e9..e113b6e054 100644 --- a/insiders.json +++ b/insiders.json @@ -1,6 +1,22 @@ { - "latest": "2.1.0-insiders.6", + "latest": "2.1.0-insiders.8", "versions": [ + { + "version": "2.1.0-insiders.8", + "date": "2024-5-1", + "downloads": { + "GitHub": "https://github.com/volarjs/insiders/releases/tag/v2.1.0-insiders.8", + "AFDIAN": "https://afdian.net/p/f45436ca076d11ef9b7352540025c377" + } + }, + { + "version": "2.1.0-insiders.7", + "date": "2024-4-30", + "downloads": { + "GitHub": "https://github.com/volarjs/insiders/releases/tag/v2.1.0-insiders.7", + "AFDIAN": "https://afdian.net/p/84db515c069b11ef9eaf52540025c377" + } + }, { "version": "2.1.0-insiders.6", "date": "2024-4-25", diff --git a/lerna.json b/lerna.json index b14f8bcfde..b0d4bc020c 100644 --- a/lerna.json +++ b/lerna.json @@ -6,5 +6,5 @@ "packages/*", "test-workspace" ], - "version": "2.0.14" + "version": "2.0.16" } diff --git a/package.json b/package.json index 544f0582b9..d4fa2a380c 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "devDependencies": { "@lerna-lite/cli": "latest", "@lerna-lite/publish": "latest", - "@volar/language-service": "2.2.0-alpha.10", + "@volar/language-service": "~2.2.0", "@volar/tsl-config": "latest", "tsl": "latest", "typescript": "latest", diff --git a/packages/component-meta/lib/base.ts b/packages/component-meta/lib/base.ts index cba4b852ea..e4ec9154e9 100644 --- a/packages/component-meta/lib/base.ts +++ b/packages/component-meta/lib/base.ts @@ -88,18 +88,6 @@ function createCheckerWorker( } return scriptSnapshots.get(fileName); }, - getLanguageId: fileName => { - if (parsedCommandLine.vueOptions.extensions.some(ext => fileName.endsWith(ext))) { - return 'vue'; - } - if (parsedCommandLine.vueOptions.vitePressExtensions.some(ext => fileName.endsWith(ext))) { - return 'markdown'; - } - if (parsedCommandLine.vueOptions.petiteVueExtensions.some(ext => fileName.endsWith(ext))) { - return 'html'; - } - return vue.resolveCommonLanguageId(fileName); - }, scriptIdToFileName: id => id, fileNameToScriptId: id => id, }; diff --git a/packages/component-meta/package.json b/packages/component-meta/package.json index ab81419bca..a21e5483d0 100644 --- a/packages/component-meta/package.json +++ b/packages/component-meta/package.json @@ -1,6 +1,6 @@ { "name": "vue-component-meta", - "version": "2.0.14", + "version": "2.0.16", "license": "MIT", "files": [ "**/*.js", @@ -12,10 +12,10 @@ "directory": "packages/component-meta" }, "dependencies": { - "@volar/typescript": "2.2.0-alpha.10", - "@vue/language-core": "2.0.14", + "@volar/typescript": "~2.2.0", + "@vue/language-core": "2.0.16", "path-browserify": "^1.0.1", - "vue-component-type-helpers": "2.0.14" + "vue-component-type-helpers": "2.0.16" }, "peerDependencies": { "typescript": "*" diff --git a/packages/component-type-helpers/package.json b/packages/component-type-helpers/package.json index 7798ee34c6..5bb1c368b4 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.0.14", + "version": "2.0.16", "license": "MIT", "files": [ "**/*.js", diff --git a/packages/language-core/lib/codegen/script/component.ts b/packages/language-core/lib/codegen/script/component.ts index 27b9caa457..c4d3d0095a 100644 --- a/packages/language-core/lib/codegen/script/component.ts +++ b/packages/language-core/lib/codegen/script/component.ts @@ -117,10 +117,10 @@ export function* generateScriptSetupOptions( if (options.vueCompilerOptions.target >= 3.5) { // https://github.com/vuejs/core/pull/10801 if (scriptSetupRanges.props.define?.typeArg) { - yield `__typeProps: typeof __VLS_typeProps,${newLine}`; + yield `__typeProps: __VLS_typeProps,${newLine}`; } if (scriptSetupRanges.emits.define?.typeArg) { - yield `__typeEmits: typeof ${scriptSetupRanges.emits.name ?? '__VLS_emit'},${newLine}`; + yield `__typeEmits: ${scriptSetupRanges.emits.name ?? '__VLS_emit'},${newLine}`; } } } diff --git a/packages/language-core/lib/codegen/script/scriptSetup.ts b/packages/language-core/lib/codegen/script/scriptSetup.ts index 8be76b06ca..1a56775093 100644 --- a/packages/language-core/lib/codegen/script/scriptSetup.ts +++ b/packages/language-core/lib/codegen/script/scriptSetup.ts @@ -162,8 +162,16 @@ function* generateSetupFunction( } } } - if (scriptSetupRanges.slots.define && !scriptSetupRanges.slots.name) { - setupCodeModifies.push([[`const __VLS_slots = `], scriptSetupRanges.slots.define.start, scriptSetupRanges.slots.define.start]); + if (scriptSetupRanges.slots.define) { + if (scriptSetupRanges.slots.isObjectBindingPattern) { + setupCodeModifies.push([ + [`__VLS_slots;\nconst __VLS_slots = `], + scriptSetupRanges.slots.define.start, + scriptSetupRanges.slots.define.start, + ]); + } else if (!scriptSetupRanges.slots.name) { + setupCodeModifies.push([[`const __VLS_slots = `], scriptSetupRanges.slots.define.start, scriptSetupRanges.slots.define.start]); + } } if (scriptSetupRanges.emits.define && !scriptSetupRanges.emits.name) { setupCodeModifies.push([[`const __VLS_emit = `], scriptSetupRanges.emits.define.start, scriptSetupRanges.emits.define.start]); diff --git a/packages/language-core/lib/codegen/template/elementChildren.ts b/packages/language-core/lib/codegen/template/elementChildren.ts index d931eb29fd..e7ee82c361 100644 --- a/packages/language-core/lib/codegen/template/elementChildren.ts +++ b/packages/language-core/lib/codegen/template/elementChildren.ts @@ -22,7 +22,8 @@ export function* generateElementChildren( // fix https://github.com/vuejs/language-tools/issues/932 if ( - !ctx.hasSlotElements.has(node) + componentCtxVar + && !ctx.hasSlotElements.has(node) && node.children.length && node.tagType !== CompilerDOM.ElementTypes.ELEMENT && node.tagType !== CompilerDOM.ElementTypes.TEMPLATE diff --git a/packages/language-core/lib/codegen/template/elementEvents.ts b/packages/language-core/lib/codegen/template/elementEvents.ts index eafa4d9d2b..ee0644f47d 100644 --- a/packages/language-core/lib/codegen/template/elementEvents.ts +++ b/packages/language-core/lib/codegen/template/elementEvents.ts @@ -30,7 +30,7 @@ export function* generateElementEvents( yield `let ${eventVar} = { '${prop.arg.loc.source}': __VLS_pickEvent(`; yield `${eventsVar}['${prop.arg.loc.source}'], `; yield `({} as __VLS_FunctionalComponentProps)`; - yield* generateEventArg(options, ctx, prop.arg, true); + yield* generateEventArg(options, ctx, prop.arg, true, false); yield `) }${endOfLine}`; yield `${eventVar} = { `; if (prop.arg.loc.source.startsWith('[') && prop.arg.loc.source.endsWith(']')) { @@ -105,7 +105,14 @@ export function* generateEventArg( ctx: TemplateCodegenContext, arg: CompilerDOM.SimpleExpressionNode, access: boolean, + enableHover: boolean, ): Generator { + const features = enableHover + ? { + ...ctx.codeFeatures.withoutHighlightAndCompletion, + ...eventArgFeatures, + } + : eventArgFeatures; if (arg.loc.source.startsWith('[') && arg.loc.source.endsWith(']')) { yield `[`; yield* generateInterpolation( @@ -124,7 +131,7 @@ export function* generateEventArg( if (access) { yield `.`; } - yield ['', 'template', arg.loc.start.offset, eventArgFeatures]; + yield ['', 'template', arg.loc.start.offset, features]; yield `on`; yield* generateCamelized( capitalize(arg.loc.source), @@ -139,7 +146,7 @@ export function* generateEventArg( yield* wrapWith( arg.loc.start.offset, arg.loc.end.offset, - eventArgFeatures, + features, `'`, ['', 'template', arg.loc.start.offset, combineLastMapping], 'on', diff --git a/packages/language-core/lib/codegen/template/elementProps.ts b/packages/language-core/lib/codegen/template/elementProps.ts index e1e4ba00cc..2ed1454590 100644 --- a/packages/language-core/lib/codegen/template/elementProps.ts +++ b/packages/language-core/lib/codegen/template/elementProps.ts @@ -37,7 +37,25 @@ export function* generateElementProps( classAttrNum++; } - if (!isIntrinsicElement) { + if (isIntrinsicElement) { + for (const prop of props) { + if ( + prop.type === CompilerDOM.NodeTypes.DIRECTIVE + && prop.name === 'on' + ) { + if (prop.arg?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) { + yield* generateEventArg(options, ctx, prop.arg, false, true); + yield `: `; + yield* generateEventExpression(options, ctx, prop); + yield `,${newLine}`; + } + else if (prop.exp?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) { + propsFailedExps?.push(prop.exp); + } + } + } + } + else { let generatedEvent = false; for (const prop of props) { if ( @@ -59,20 +77,6 @@ export function* generateElementProps( yield `}, `; } } - else { - for (const prop of props) { - if ( - prop.type === CompilerDOM.NodeTypes.DIRECTIVE - && prop.name === 'on' - && prop.arg?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION - ) { - yield* generateEventArg(options, ctx, prop.arg, false); - yield `: `; - yield* generateEventExpression(options, ctx, prop); - yield `,${newLine}`; - } - } - } for (const prop of props) { if ( diff --git a/packages/language-core/lib/codegen/template/slotOutlet.ts b/packages/language-core/lib/codegen/template/slotOutlet.ts index dfefcf332b..07a76905da 100644 --- a/packages/language-core/lib/codegen/template/slotOutlet.ts +++ b/packages/language-core/lib/codegen/template/slotOutlet.ts @@ -58,55 +58,54 @@ export function* generateSlotOutlet( `}`, ); yield `)${endOfLine}`; - return; } else { yield `var ${varSlot} = {${newLine}`; yield* generateElementProps(options, ctx, node, node.props.filter(prop => prop !== nameProp), true); yield `}${endOfLine}`; - } - if ( - nameProp?.type === CompilerDOM.NodeTypes.ATTRIBUTE - && nameProp.value - ) { - ctx.slots.push({ - name: nameProp.value.content, - loc: nameProp.loc.start.offset + nameProp.loc.source.indexOf(nameProp.value.content, nameProp.name.length), - tagRange: [startTagOffset, startTagOffset + node.tag.length], - varName: varSlot, - nodeLoc: node.loc, - }); - } - else if ( - nameProp?.type === CompilerDOM.NodeTypes.DIRECTIVE - && nameProp.exp?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION - ) { - const slotExpVar = ctx.getInternalVariable(); - yield `var ${slotExpVar} = `; - yield* generateInterpolation( - options, - ctx, - nameProp.exp.content, - nameProp.exp, - nameProp.exp.loc.start.offset, - ctx.codeFeatures.all, - '(', - ')', - ); - yield ` as const${endOfLine}`; - ctx.dynamicSlots.push({ - expVar: slotExpVar, - varName: varSlot, - }); - } - else { - ctx.slots.push({ - name: 'default', - tagRange: [startTagOffset, startTagOffset + node.tag.length], - varName: varSlot, - nodeLoc: node.loc, - }); + if ( + nameProp?.type === CompilerDOM.NodeTypes.ATTRIBUTE + && nameProp.value + ) { + ctx.slots.push({ + name: nameProp.value.content, + loc: nameProp.loc.start.offset + nameProp.loc.source.indexOf(nameProp.value.content, nameProp.name.length), + tagRange: [startTagOffset, startTagOffset + node.tag.length], + varName: varSlot, + nodeLoc: node.loc, + }); + } + else if ( + nameProp?.type === CompilerDOM.NodeTypes.DIRECTIVE + && nameProp.exp?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION + ) { + const slotExpVar = ctx.getInternalVariable(); + yield `var ${slotExpVar} = `; + yield* generateInterpolation( + options, + ctx, + nameProp.exp.content, + nameProp.exp, + nameProp.exp.loc.start.offset, + ctx.codeFeatures.all, + '(', + ')', + ); + yield ` as const${endOfLine}`; + ctx.dynamicSlots.push({ + expVar: slotExpVar, + varName: varSlot, + }); + } + else { + ctx.slots.push({ + name: 'default', + tagRange: [startTagOffset, startTagOffset + node.tag.length], + varName: varSlot, + nodeLoc: node.loc, + }); + } } yield* ctx.generateAutoImportCompletion(); yield* generateElementChildren(options, ctx, node, currentComponent, componentCtxVar); diff --git a/packages/language-core/lib/languageModule.ts b/packages/language-core/lib/languageModule.ts index 6d5c65b0e3..29b7a62d7b 100644 --- a/packages/language-core/lib/languageModule.ts +++ b/packages/language-core/lib/languageModule.ts @@ -51,7 +51,7 @@ function getFileRegistryKey( return JSON.stringify(values); } -interface _Plugin extends LanguagePlugin { +export interface _Plugin extends LanguagePlugin { getCanonicalFileName: (fileName: string) => string; pluginContext: Parameters[0]; } @@ -93,14 +93,19 @@ export function createVueLanguagePlugin( return { getCanonicalFileName, pluginContext, + getLanguageId(scriptId) { + if (vueCompilerOptions.extensions.some(ext => scriptId.endsWith(ext))) { + return 'vue'; + } + if (vueCompilerOptions.vitePressExtensions.some(ext => scriptId.endsWith(ext))) { + return 'markdown'; + } + if (vueCompilerOptions.petiteVueExtensions.some(ext => scriptId.endsWith(ext))) { + return 'html'; + } + }, createVirtualCode(fileId, languageId, snapshot) { - const isVueFile = vueCompilerOptions.extensions.some(ext => fileId.endsWith(ext)) - || (vueCompilerOptions.extensions.length && languageId === 'vue'); - const isVitePressFile = vueCompilerOptions.vitePressExtensions.some(ext => fileId.endsWith(ext)) - || (vueCompilerOptions.vitePressExtensions.length && languageId === 'markdown'); - const isPetiteVueFile = vueCompilerOptions.petiteVueExtensions.some(ext => fileId.endsWith(ext)) - || (vueCompilerOptions.petiteVueExtensions.length && languageId === 'html'); - if (isVueFile || isVitePressFile || isPetiteVueFile) { + if (languageId === 'vue' || languageId === 'markdown' || languageId === 'html') { const fileName = getFileName(fileId); const projectVersion = getProjectVersion(); if (projectVersion !== canonicalRootFileNamesVersion) { @@ -122,9 +127,9 @@ export function createVueLanguagePlugin( languageId, snapshot, vueCompilerOptions, - isPetiteVueFile + languageId === 'html' ? [petiteVueSfcPlugin, ...basePlugins] - : isVitePressFile + : languageId === 'markdown' ? [vitePressSfcPlugin, ...basePlugins] : [vueSfcPlugin, ...basePlugins], ts, diff --git a/packages/language-core/lib/parsers/scriptSetupRanges.ts b/packages/language-core/lib/parsers/scriptSetupRanges.ts index 8f34d3bf00..3a9c111823 100644 --- a/packages/language-core/lib/parsers/scriptSetupRanges.ts +++ b/packages/language-core/lib/parsers/scriptSetupRanges.ts @@ -24,6 +24,7 @@ export function parseScriptSetupRanges( } = {}; const slots: { name?: string; + isObjectBindingPattern?: boolean; define?: ReturnType; } = {}; const emits: { @@ -186,7 +187,12 @@ export function parseScriptSetupRanges( else if (vueCompilerOptions.macros.defineSlots.includes(callText)) { slots.define = parseDefineFunction(node); if (ts.isVariableDeclaration(parent)) { - slots.name = getNodeText(ts, parent.name, ast); + if (ts.isIdentifier(parent.name)) { + slots.name = getNodeText(ts, parent.name, ast); + } + else { + slots.isObjectBindingPattern = ts.isObjectBindingPattern(parent.name); + } } } else if (vueCompilerOptions.macros.defineEmits.includes(callText)) { diff --git a/packages/language-core/lib/plugins.ts b/packages/language-core/lib/plugins.ts index 6cbdaa247d..dc1b91b804 100644 --- a/packages/language-core/lib/plugins.ts +++ b/packages/language-core/lib/plugins.ts @@ -8,6 +8,8 @@ import useVueTemplateInlineTsPlugin from './plugins/vue-template-inline-ts'; import useVueTsx from './plugins/vue-tsx'; import { pluginVersion, type VueLanguagePlugin } from './types'; +export * from './plugins/shared' + export function getBasePlugins(pluginContext: Parameters[0]) { const plugins: VueLanguagePlugin[] = [ 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 0501f8884e..781f4d118f 100644 --- a/packages/language-core/lib/plugins/vue-template-inline-ts.ts +++ b/packages/language-core/lib/plugins/vue-template-inline-ts.ts @@ -92,7 +92,7 @@ const plugin: VueLanguagePlugin = ctx => { prop.exp?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION && prop.exp.constType !== CompilerDOM.ConstantTypes.CAN_STRINGIFY // style='z-index: 2' will compile to {'z-index':'2'} ) { - if (prop.name === 'on') { + if (prop.name === 'on' && prop.arg?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) { const ast = createTsAst(ctx.modules.typescript, prop.exp, prop.exp.content); addFormatCodes( prop.exp.content, diff --git a/packages/language-core/lib/types.ts b/packages/language-core/lib/types.ts index 1c4efd6b05..4bbac75e07 100644 --- a/packages/language-core/lib/types.ts +++ b/packages/language-core/lib/types.ts @@ -6,6 +6,8 @@ import type { CodeInformation, Segment } from '@volar/language-core'; export type { SFCParseResult } from '@vue/compiler-sfc'; +export { VueEmbeddedCode }; + export type RawVueCompilerOptions = Partial> & { target?: 'auto' | 2 | 2.7 | 3 | 3.3; plugins?: string[]; diff --git a/packages/language-core/lib/virtualFile/computedFiles.ts b/packages/language-core/lib/virtualFile/computedFiles.ts index ea59ec3599..5ad441ecd3 100644 --- a/packages/language-core/lib/virtualFile/computedFiles.ts +++ b/packages/language-core/lib/virtualFile/computedFiles.ts @@ -1,4 +1,4 @@ -import { VirtualCode, buildMappings, resolveCommonLanguageId, toString } from '@volar/language-core'; +import { VirtualCode, buildMappings, toString } from '@volar/language-core'; import { computed } from 'computeds'; import type * as ts from 'typescript'; import type { Code, Sfc, SfcBlock, VueLanguagePlugin } from '../types'; @@ -29,7 +29,7 @@ export function computedFiles( } return blocks; }); - const pluginsResult = plugins.map(plugin => computedPluginFiles(plugins, plugin, fileName, sfc, nameToBlock)); + const pluginsResult = plugins.map(plugin => computedPluginEmbeddedCodes(plugins, plugin, fileName, sfc, nameToBlock)); const flatResult = computed(() => pluginsResult.map(r => r()).flat()); const structuredResult = computed(() => { @@ -45,20 +45,20 @@ export function computedFiles( } } - for (const { file } of remain) { - console.error('Unable to resolve embedded: ' + file.parentCodeId + ' -> ' + file.id); + for (const { code } of remain) { + console.error('Unable to resolve embedded: ' + code.parentCodeId + ' -> ' + code.id); } return embeddedCodes; function consumeRemain() { for (let i = remain.length - 1; i >= 0; i--) { - const { file, snapshot, mappings } = remain[i]; - if (!file.parentCodeId) { + const { code, snapshot, mappings } = remain[i]; + if (!code.parentCodeId) { embeddedCodes.push({ - id: file.id, - languageId: resolveCommonLanguageId(`/dummy.${file.lang}`), - linkedCodeMappings: file.linkedCodeMappings, + id: code.id, + languageId: resolveCommonLanguageId(code.lang), + linkedCodeMappings: code.linkedCodeMappings, snapshot, mappings, embeddedCodes: [], @@ -66,13 +66,13 @@ export function computedFiles( remain.splice(i, 1); } else { - const parent = findParentStructure(file.parentCodeId, embeddedCodes); + const parent = findParentStructure(code.parentCodeId, embeddedCodes); if (parent) { parent.embeddedCodes ??= []; parent.embeddedCodes.push({ - id: file.id, - languageId: resolveCommonLanguageId(`/dummy.${file.lang}`), - linkedCodeMappings: file.linkedCodeMappings, + id: code.id, + languageId: resolveCommonLanguageId(code.lang), + linkedCodeMappings: code.linkedCodeMappings, snapshot, mappings, embeddedCodes: [], @@ -98,42 +98,46 @@ export function computedFiles( return structuredResult; } -function computedPluginFiles( +function computedPluginEmbeddedCodes( plugins: ReturnType[], plugin: ReturnType, fileName: string, sfc: Sfc, nameToBlock: () => Record, ) { - const embeddedFiles: Record { file: VueEmbeddedCode; snapshot: ts.IScriptSnapshot; }> = {}; - const files = computed(() => { + const computeds = new Map { code: VueEmbeddedCode; snapshot: ts.IScriptSnapshot; }>(); + const getComputedKey = (code: { + id: string; + lang: string; + }) => code.id + '__' + code.lang; + const codes = computed(() => { try { if (!plugin.getEmbeddedCodes) { - return Object.values(embeddedFiles); + return [...computeds.values()]; } - const fileInfos = plugin.getEmbeddedCodes(fileName, sfc); - for (const oldId of Object.keys(embeddedFiles)) { - if (!fileInfos.some(file => file.id === oldId)) { - delete embeddedFiles[oldId]; + const embeddedCodeInfos = plugin.getEmbeddedCodes(fileName, sfc); + for (const oldId of computeds.keys()) { + if (!embeddedCodeInfos.some(code => getComputedKey(code) === oldId)) { + computeds.delete(oldId); } } - for (const fileInfo of fileInfos) { - if (!embeddedFiles[fileInfo.id]) { - embeddedFiles[fileInfo.id] = computed(() => { + for (const codeInfo of embeddedCodeInfos) { + if (!computeds.has(getComputedKey(codeInfo))) { + computeds.set(getComputedKey(codeInfo), computed(() => { const content: Code[] = []; - const file = new VueEmbeddedCode(fileInfo.id, fileInfo.lang, content); + const code = new VueEmbeddedCode(codeInfo.id, codeInfo.lang, content); for (const plugin of plugins) { if (!plugin.resolveEmbeddedCode) { continue; } try { - plugin.resolveEmbeddedCode(fileName, sfc, file); + plugin.resolveEmbeddedCode(fileName, sfc, code); } catch (e) { console.error(e); } } - const newText = toString(file.content); + const newText = toString(code.content); const changeRanges = new Map(); const snapshot: ts.IScriptSnapshot = { getText: (start, end) => newText.slice(start, end), @@ -151,24 +155,24 @@ function computedPluginFiles( }, }; return { - file, + code, snapshot, }; - }); + })); } } } catch (e) { console.error(e); } - return Object.values(embeddedFiles); + return [...computeds.values()]; }); return computed(() => { - return files().map(_file => { + return codes().map(_file => { - const { file, snapshot } = _file(); - const mappings = buildMappings(file.content); + const { code, snapshot } = _file(); + const mappings = buildMappings(code.content); const newMappings: typeof mappings = []; let lastValidMapping: typeof mappings[number] | undefined; @@ -207,7 +211,7 @@ function computedPluginFiles( } return { - file, + code, snapshot, mappings: newMappings, }; @@ -238,3 +242,19 @@ function fullDiffTextChangeRange(oldText: string, newText: string): ts.TextChang } } } + +export function resolveCommonLanguageId(lang: string) { + switch (lang) { + case 'js': return 'javascript'; + case 'cjs': return 'javascript'; + case 'mjs': return 'javascript'; + case 'ts': return 'typescript'; + case 'cts': return 'typescript'; + case 'mts': return 'typescript'; + case 'jsx': return 'javascriptreact'; + case 'tsx': return 'typescriptreact'; + case 'pug': return 'jade'; + case 'md': return 'markdown'; + } + return lang; +} diff --git a/packages/language-core/package.json b/packages/language-core/package.json index e4789fea4b..165857aa57 100644 --- a/packages/language-core/package.json +++ b/packages/language-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/language-core", - "version": "2.0.14", + "version": "2.0.16", "license": "MIT", "files": [ "**/*.js", @@ -12,7 +12,7 @@ "directory": "packages/language-core" }, "dependencies": { - "@volar/language-core": "2.2.0-alpha.10", + "@volar/language-core": "~2.2.0", "@vue/compiler-dom": "^3.4.0", "@vue/shared": "^3.4.0", "computeds": "^0.0.1", diff --git a/packages/language-plugin-pug/package.json b/packages/language-plugin-pug/package.json index aae78e60f3..3df2a50692 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.0.14", + "version": "2.0.16", "license": "MIT", "files": [ "**/*.js", @@ -13,10 +13,10 @@ }, "devDependencies": { "@types/node": "latest", - "@vue/language-core": "2.0.14" + "@vue/language-core": "2.0.16" }, "dependencies": { - "@volar/source-map": "2.2.0-alpha.10", - "volar-service-pug": "0.0.40" + "@volar/source-map": "~2.2.0", + "volar-service-pug": "0.0.42" } } diff --git a/packages/language-server/lib/hybridModeProject.ts b/packages/language-server/lib/hybridModeProject.ts index d4b39db977..4052c03bcc 100644 --- a/packages/language-server/lib/hybridModeProject.ts +++ b/packages/language-server/lib/hybridModeProject.ts @@ -1,126 +1,127 @@ -import type { LanguagePlugin, LanguageServicePlugin, ServerProject, ServerProjectProviderFactory } from '@volar/language-server'; +import type { LanguagePlugin, ProviderResult, ServerBase, ServerProject, ServerProjectProvider, TypeScriptProjectHost } from '@volar/language-server'; import { createSimpleServerProject } from '@volar/language-server/lib/project/simpleProject'; import { createServiceEnvironment, getWorkspaceFolder } from '@volar/language-server/lib/project/simpleProjectProvider'; -import type { ServerContext } from '@volar/language-server/lib/server'; import { FileMap, createLanguage } from '@vue/language-core'; -import { LanguageService, ServiceEnvironment, createLanguageService } from '@vue/language-service'; +import { Disposable, LanguageService, ServiceEnvironment, createLanguageService } from '@vue/language-service'; import { searchNamedPipeServerForFile } from '@vue/typescript-plugin/lib/utils'; import type * as ts from 'typescript'; -export function createHybridModeProjectProviderFactory(sys: ts.System): ServerProjectProviderFactory { - return (context, servicePlugins, getLanguagePlugins) => { - const serviceEnvs = new FileMap(sys.useCaseSensitiveFileNames); - const tsconfigProjects = new FileMap>(sys.useCaseSensitiveFileNames); - const simpleProjects = new FileMap>(sys.useCaseSensitiveFileNames); - context.onDidChangeWatchedFiles(({ changes }) => { +export type GetLanguagePlugin = ( + serviceEnv: ServiceEnvironment, + configFileName?: string, + host?: TypeScriptProjectHost, + sys?: ts.System & { + version: number; + sync(): Promise; + } & Disposable, +) => ProviderResult; + +export function createHybridModeProjectProviderFactory( + sys: ts.System, + getLanguagePlugins: GetLanguagePlugin, +): ServerProjectProvider { + let initialized = false; + + const serviceEnvs = new FileMap(sys.useCaseSensitiveFileNames); + const tsconfigProjects = new FileMap>(sys.useCaseSensitiveFileNames); + const simpleProjects = new FileMap>(sys.useCaseSensitiveFileNames); + + return { + async get(uri): Promise { + if (!initialized) { + initialized = true; + initialize(this); + } + const workspaceFolder = getWorkspaceFolder(uri, this.workspaceFolders); + let serviceEnv = serviceEnvs.get(workspaceFolder); + if (!serviceEnv) { + serviceEnv = createServiceEnvironment(this, workspaceFolder); + serviceEnvs.set(workspaceFolder, serviceEnv); + } + const fileName = serviceEnv.typescript!.uriToFileName(uri); + const projectInfo = (await searchNamedPipeServerForFile(fileName))?.projectInfo; + if (projectInfo?.kind === 1) { + const tsconfig = projectInfo.name; + const tsconfigUri = serviceEnv.typescript!.fileNameToUri(tsconfig); + if (!tsconfigProjects.has(tsconfigUri)) { + tsconfigProjects.set(tsconfigUri, (async () => { + const languagePlugins = await getLanguagePlugins(serviceEnv, tsconfig, undefined, { + ...sys, + version: 0, + async sync() { + return 0; + }, + dispose() { }, + }); + return createTSConfigProject(this, serviceEnv, languagePlugins); + })()); + } + return await tsconfigProjects.get(tsconfigUri)!; + } + else { + if (!simpleProjects.has(workspaceFolder)) { + simpleProjects.set(workspaceFolder, (async () => { + const languagePlugins = await getLanguagePlugins(serviceEnv); + return createSimpleServerProject(this, serviceEnv, languagePlugins); + })()); + } + return await simpleProjects.get(workspaceFolder)!; + } + }, + async all() { + return Promise.all([ + ...tsconfigProjects.values(), + ...simpleProjects.values(), + ]); + }, + }; + + function initialize(server: ServerBase) { + server.onDidChangeWatchedFiles(({ changes }) => { for (const change of changes) { if (tsconfigProjects.has(change.uri)) { tsconfigProjects.get(change.uri)?.then(project => project.dispose()); tsconfigProjects.delete(change.uri); - context.reloadDiagnostics(); + server.clearPushDiagnostics(); } } }); - return { - async getProject(uri): Promise { - const workspaceFolder = getWorkspaceFolder(uri, context.workspaceFolders); - let serviceEnv = serviceEnvs.get(workspaceFolder); - if (!serviceEnv) { - serviceEnv = createServiceEnvironment(context, workspaceFolder); - serviceEnvs.set(workspaceFolder, serviceEnv); - } - const fileName = serviceEnv.typescript!.uriToFileName(uri); - const projectInfo = (await searchNamedPipeServerForFile(fileName))?.projectInfo; - if (projectInfo?.kind === 1) { - const tsconfig = projectInfo.name; - const tsconfigUri = serviceEnv.typescript!.fileNameToUri(tsconfig); - if (!tsconfigProjects.has(tsconfigUri)) { - tsconfigProjects.set(tsconfigUri, (async () => { - const languagePlugins = await getLanguagePlugins(serviceEnv, { - typescript: { - configFileName: tsconfig, - host: { - getScriptFileNames() { - return []; - }, - } as any, - sys: { - ...sys, - version: 0, - async sync() { - return 0; - }, - dispose() { }, - }, - }, - }); - return createTSConfigProject(context, serviceEnv, languagePlugins, servicePlugins); - })()); - } - return await tsconfigProjects.get(tsconfigUri)!; - } - else { - if (!simpleProjects.has(workspaceFolder)) { - simpleProjects.set(workspaceFolder, (() => { - return createSimpleServerProject(context, serviceEnv, servicePlugins, getLanguagePlugins); - })()); - } - return await simpleProjects.get(workspaceFolder)!; - } - }, - async getProjects() { - return Promise.all([ - ...tsconfigProjects.values(), - ...simpleProjects.values(), - ]); - }, - async reloadProjects() { - for (const project of [ - ...tsconfigProjects.values(), - ...simpleProjects.values(), - ]) { - (await project).dispose(); - } - tsconfigProjects.clear(); - }, - }; + } - function createTSConfigProject( - context: ServerContext, - serviceEnv: ServiceEnvironment, - languagePlugins: LanguagePlugin[], - servicePlugins: LanguageServicePlugin[], - ): ServerProject { + function createTSConfigProject( + server: ServerBase, + serviceEnv: ServiceEnvironment, + languagePlugins: LanguagePlugin[], + ): ServerProject { - let languageService: LanguageService | undefined; + let languageService: LanguageService | undefined; - return { - getLanguageService, - getLanguageServiceDontCreate: () => languageService, - dispose() { - languageService?.dispose(); - }, - }; + return { + getLanguageService, + getLanguageServiceDontCreate: () => languageService, + dispose() { + languageService?.dispose(); + }, + }; - function getLanguageService() { - if (!languageService) { - const language = createLanguage(languagePlugins, false, uri => { - const script = context.documents.get(uri); - if (script) { - language.scripts.set(uri, script.languageId, script.getSnapshot()); - } - else { - language.scripts.delete(uri); - } - }); - languageService = createLanguageService( - language, - servicePlugins, - serviceEnv, - ); - } - return languageService; + function getLanguageService() { + if (!languageService) { + const language = createLanguage(languagePlugins, false, uri => { + const document = server.documents.get(uri); + if (document) { + language.scripts.set(uri, document.getSnapshot(), document.languageId); + } + else { + language.scripts.delete(uri); + } + }); + languageService = createLanguageService( + language, + server.languageServicePlugins, + serviceEnv, + ); } + return languageService; } - }; + } } diff --git a/packages/language-server/node.ts b/packages/language-server/node.ts index 3714d01032..19e0dd5dcd 100644 --- a/packages/language-server/node.ts +++ b/packages/language-server/node.ts @@ -1,29 +1,79 @@ import type { Connection } from '@volar/language-server'; -import { createConnection, createServer, createTypeScriptProjectProviderFactory, loadTsdkByPath } from '@volar/language-server/node'; -import { ParsedCommandLine, VueCompilerOptions, createParsedCommandLine, createVueLanguagePlugin, parse, resolveCommonLanguageId, resolveVueCompilerOptions } from '@vue/language-core'; -import { ServiceEnvironment, convertAttrName, convertTagName, createDefaultGetTsPluginClient, createVueServicePlugins, detect } from '@vue/language-service'; +import { createConnection, createServer, createTypeScriptProjectProvider, loadTsdkByPath } from '@volar/language-server/node'; +import { ParsedCommandLine, VueCompilerOptions, createParsedCommandLine, createVueLanguagePlugin, parse, resolveVueCompilerOptions } from '@vue/language-core'; +import { ServiceEnvironment, convertAttrName, convertTagName, createDefaultGetTsPluginClient, detect, getVueLanguageServicePlugins } from '@vue/language-service'; import * as tsPluginClient from '@vue/typescript-plugin/lib/client'; import { searchNamedPipeServerForFile } from '@vue/typescript-plugin/lib/utils'; -import { createHybridModeProjectProviderFactory } from './lib/hybridModeProject'; +import { GetLanguagePlugin, createHybridModeProjectProviderFactory } from './lib/hybridModeProject'; import { DetectNameCasingRequest, GetConnectedNamedPipeServerRequest, GetConvertAttrCasingEditsRequest, GetConvertTagCasingEditsRequest, ParseSFCRequest } from './lib/protocol'; import type { VueInitializationOptions } from './lib/types'; +let tsdk: ReturnType; +let hybridMode: boolean; +let getTsPluginClient: ReturnType; + +const envToVueOptions = new WeakMap(); +const watchedExtensions = new Set(); + export const connection: Connection = createConnection(); export const server = createServer(connection); -const envToVueOptions = new WeakMap(); +export const getLanguagePlugins: GetLanguagePlugin = async (serviceEnv, configFileName, host, sys) => { + const commandLine = await parseCommandLine(); + const vueOptions = commandLine?.vueOptions ?? resolveVueCompilerOptions({}); + const vueLanguagePlugin = createVueLanguagePlugin( + tsdk.typescript, + serviceEnv.typescript!.uriToFileName, + sys?.useCaseSensitiveFileNames ?? false, + () => host?.getProjectVersion?.() ?? '', + () => host?.getScriptFileNames() ?? [], + commandLine?.options ?? {}, + vueOptions, + ); + if (!hybridMode) { + const extensions = [ + 'js', 'cjs', 'mjs', 'ts', 'cts', 'mts', 'jsx', 'tsx', 'json', + ...vueOptions.extensions.map(ext => ext.slice(1)), + ...vueOptions.vitePressExtensions.map(ext => ext.slice(1)), + ...vueOptions.petiteVueExtensions.map(ext => ext.slice(1)), + ]; + const newExtensions = extensions.filter(ext => !watchedExtensions.has(ext)); + if (newExtensions.length) { + for (const ext of newExtensions) { + watchedExtensions.add(ext); + } + server.watchFiles(['**/*.{' + newExtensions.join(',') + '}']); + } + } -let tsdk: ReturnType; -let getTsPluginClient: ReturnType; + envToVueOptions.set(serviceEnv, vueOptions); -connection.listen(); + return [vueLanguagePlugin]; -connection.onInitialize(async params => { + async function parseCommandLine() { + let commandLine: ParsedCommandLine | undefined; + let sysVersion: number | undefined; + if (sys) { + let newSysVersion = await sys.sync(); + while (sysVersion !== newSysVersion) { + sysVersion = newSysVersion; + if (configFileName) { + commandLine = createParsedCommandLine(tsdk.typescript, sys, configFileName); + } + newSysVersion = await sys.sync(); + } + } + return commandLine; + } +}; +connection.listen(); + +connection.onInitialize(params => { const options: VueInitializationOptions = params.initializationOptions; - const hybridMode = options.vue?.hybridMode ?? true; + hybridMode = options.vue?.hybridMode ?? true; tsdk = loadTsdkByPath(options.typescript.tsdk, params.locale); if (hybridMode) { @@ -33,74 +83,25 @@ connection.onInitialize(async params => { getTsPluginClient = createDefaultGetTsPluginClient(tsdk.typescript, env => envToVueOptions.get(env)!); } - const result = await server.initialize( + const result = server.initialize( params, + getVueLanguageServicePlugins( + tsdk.typescript, + env => envToVueOptions.get(env)!, + getTsPluginClient, + hybridMode, + ), hybridMode - ? createHybridModeProjectProviderFactory(tsdk.typescript.sys) - : createTypeScriptProjectProviderFactory(tsdk.typescript, tsdk.diagnosticMessages), + ? createHybridModeProjectProviderFactory(tsdk.typescript.sys, getLanguagePlugins) + : createTypeScriptProjectProvider(tsdk.typescript, tsdk.diagnosticMessages, (env, ctx) => getLanguagePlugins(env, ctx.configFileName, ctx.host, ctx.sys)), { - // TODO: Dynamically register file watcher for vue, vitepress, petitevue extensions - watchFileExtensions: hybridMode - ? undefined - : ['js', 'cjs', 'mjs', 'ts', 'cts', 'mts', 'jsx', 'tsx', 'json', 'vue'], - // TODO: remove it - getLanguageId: resolveCommonLanguageId, - getServicePlugins() { - return createVueServicePlugins( - tsdk.typescript, - env => envToVueOptions.get(env)!, - getTsPluginClient, - hybridMode, - ); - }, - async getLanguagePlugins(serviceEnv, projectContext) { - const commandLine = await parseCommandLine(); - const vueOptions = commandLine?.vueOptions ?? resolveVueCompilerOptions({}); - const vueLanguagePlugin = createVueLanguagePlugin( - tsdk.typescript, - serviceEnv.typescript!.uriToFileName, - projectContext.typescript?.sys.useCaseSensitiveFileNames ?? false, - () => projectContext.typescript?.host.getProjectVersion?.() ?? '', - () => projectContext.typescript?.host.getScriptFileNames() ?? [], - commandLine?.options ?? {}, - vueOptions, - ); - - envToVueOptions.set(serviceEnv, vueOptions); - - return [vueLanguagePlugin]; - - async function parseCommandLine() { - - let commandLine: ParsedCommandLine | undefined; - - if (projectContext.typescript) { - - const { sys } = projectContext.typescript; - - let sysVersion: number | undefined; - let newSysVersion = await sys.sync(); - - while (sysVersion !== newSysVersion) { - sysVersion = newSysVersion; - if (projectContext.typescript.configFileName) { - commandLine = createParsedCommandLine(tsdk.typescript, sys, projectContext.typescript.configFileName); - } - newSysVersion = await sys.sync(); - } - } - - return commandLine; - } - }, + pullModelDiagnostics: hybridMode, }, ); - if (hybridMode) { - // handle by tsserver + @vue/typescript-plugin + // provided by tsserver + @vue/typescript-plugin result.capabilities.semanticTokensProvider = undefined; } - return result; }); @@ -145,5 +146,5 @@ connection.onRequest(GetConnectedNamedPipeServerRequest.type, async fileName => }); async function getService(uri: string) { - return (await server.projects.getProject(uri)).getLanguageService(); + return (await server.projects.get.call(server, uri)).getLanguageService(); } diff --git a/packages/language-server/package.json b/packages/language-server/package.json index 22009294fc..6a2b8ca501 100644 --- a/packages/language-server/package.json +++ b/packages/language-server/package.json @@ -1,6 +1,6 @@ { "name": "@vue/language-server", - "version": "2.0.14", + "version": "2.0.16", "license": "MIT", "files": [ "**/*.js", @@ -15,11 +15,11 @@ "directory": "packages/language-server" }, "dependencies": { - "@volar/language-core": "2.2.0-alpha.10", - "@volar/language-server": "2.2.0-alpha.10", - "@vue/language-core": "2.0.14", - "@vue/language-service": "2.0.14", - "@vue/typescript-plugin": "2.0.14", + "@volar/language-core": "~2.2.0", + "@volar/language-server": "~2.2.0", + "@vue/language-core": "2.0.16", + "@vue/language-service": "2.0.16", + "@vue/typescript-plugin": "2.0.16", "vscode-languageserver-protocol": "^3.17.5" } } diff --git a/packages/language-service/data/language-blocks/ru.json b/packages/language-service/data/language-blocks/ru.json index 48c1e1389a..60751352af 100644 --- a/packages/language-service/data/language-blocks/ru.json +++ b/packages/language-service/data/language-blocks/ru.json @@ -688,7 +688,7 @@ "valueSet": "v", "description": { "kind": "markdown", - "value": "\nСекция `\n```\n\nПолученные классы хэшируются во избежание коллизий, что позволяет добиться того же эффекта, что и при выборе CSS с ограниченной областью действия только для текущего компонента.\n\nОбратитесь к [спецификации CSS модулей](https://github.com/css-modules/css-modules) для получения более подробной информации, такой как [глобальные исключения](https://github.com/css-modules/css-modules#exceptions) и [композиция](https://github.com/css-modules/css-modules#composition).\n\n### Внедрение пользовательского имени \n\nМожно настроить ключ свойства объекта внедряемых классов, указав значение атрибуту `module`:\n\n```vue\n\n\n\n```\n\n### Использование с Composition API \n\nДоступ к внедряемым классам можно получить в `setup()` и `\n\n \n ```\n\n При использовании на обычном DOM-элементе ссылка будет указывать на этот элемент; при использовании на дочернем компоненте ссылка будет указывать на экземпляр дочернего компонента.\n\n В качестве альтернативы `ref` может принимать функцию, что даёт полный контроль над тем, где хранить ссылку:\n\n ```html\n child = el\" />\n ```\n\n Важное замечание о времени регистрации ref-ссылок: поскольку эти ссылки создаются render-функцией, нужно подождать, пока компонент будет смонтирован, прежде чем обращаться к ним.\n\n Так же свойство `this.$refs` не реактивно, поэтому не следует использовать его в шаблонах для привязки данных.\n\n- **См. также**\n - [Руководство — Ссылки на элементы шаблона](https://ru.vuejs.org/guide/essentials/template-refs.html)\n - [Guide - Typing Template Refs](https://ru.vuejs.org/guide/typescript/composition-api.html#typing-template-refs) \n - [Guide - Typing Component Template Refs](https://ru.vuejs.org/guide/typescript/composition-api.html#typing-component-template-refs) \n" + "value": "\nОзначает [ссылку на элементы шаблона](https://ru.vuejs.org/guide/essentials/template-refs.html).\n\n- **Ожидает** `string | Function`\n\n- **Подробности**\n\n Атрибут `ref` используется для регистрации ссылки на элемент или дочерний компонент.\n\n В Options API, ссылка будет зарегистрирована в объекте компонента `this.$refs`:\n\n ```html\n \n

hello

\n ```\n\n В Composition API, ссылка будет храниться в ref с соответствующим именем:\n\n ```vue\n \n\n \n ```\n\n При использовании на обычном DOM-элементе ссылка будет указывать на этот элемент; при использовании на дочернем компоненте ссылка будет указывать на экземпляр дочернего компонента.\n\n В качестве альтернативы `ref` может принимать функцию, что даёт полный контроль над тем, где хранить ссылку:\n\n ```html\n child = el\" />\n ```\n\n Важное замечание о времени регистрации ref-ссылок: поскольку эти ссылки создаются render-функцией, нужно подождать, пока компонент будет смонтирован, прежде чем обращаться к ним.\n\n Так же свойство `this.$refs` не реактивно, поэтому не следует использовать его в шаблонах для привязки данных.\n\n- **См. также**\n - [Руководство — Ссылки на элементы шаблона](https://ru.vuejs.org/guide/essentials/template-refs.html)\n - [Руководство - Типизация ссылок на шаблоны](https://ru.vuejs.org/guide/typescript/composition-api.html#typing-template-refs) \n - [Руководство - Типизация ссылок на шаблоны компонентов](https://ru.vuejs.org/guide/typescript/composition-api.html#typing-component-template-refs) \n" }, "references": [ { diff --git a/packages/language-service/index.ts b/packages/language-service/index.ts index 4c0edbf14f..e2183f401a 100644 --- a/packages/language-service/index.ts +++ b/packages/language-service/index.ts @@ -34,7 +34,7 @@ import { getImportPathForFile } from '@vue/typescript-plugin/lib/requests/getImp import { getPropertiesAtLocation } from '@vue/typescript-plugin/lib/requests/getPropertiesAtLocation'; import { getQuickInfoAtPosition } from '@vue/typescript-plugin/lib/requests/getQuickInfoAtPosition'; -export function createVueServicePlugins( +export function getVueLanguageServicePlugins( ts: typeof import('typescript'), getVueOptions: (env: ServiceEnvironment) => VueCompilerOptions, getTsPluginClient = createDefaultGetTsPluginClient(ts, getVueOptions), @@ -87,7 +87,12 @@ export function createVueServicePlugins( createVueDirectiveCommentsPlugin(), createVueExtractFilePlugin(ts, getTsPluginClient), createVueToggleVBindPlugin(ts), - createEmmetPlugin(), + createEmmetPlugin({ + mappedModes: { + 'vue': 'html', + 'postcss': 'scss', + }, + }), ); return plugins; } diff --git a/packages/language-service/package.json b/packages/language-service/package.json index b3ddac180a..8591f271c9 100644 --- a/packages/language-service/package.json +++ b/packages/language-service/package.json @@ -1,6 +1,6 @@ { "name": "@vue/language-service", - "version": "2.0.14", + "version": "2.0.16", "license": "MIT", "files": [ "data", @@ -16,23 +16,23 @@ "update-html-data": "node ./scripts/update-html-data.js" }, "dependencies": { - "@volar/language-core": "2.2.0-alpha.10", - "@volar/language-service": "2.2.0-alpha.10", - "@volar/typescript": "2.2.0-alpha.10", + "@volar/language-core": "~2.2.0", + "@volar/language-service": "~2.2.0", + "@volar/typescript": "~2.2.0", "@vue/compiler-dom": "^3.4.0", - "@vue/language-core": "2.0.14", + "@vue/language-core": "2.0.16", "@vue/shared": "^3.4.0", - "@vue/typescript-plugin": "2.0.14", + "@vue/typescript-plugin": "2.0.16", "computeds": "^0.0.1", "path-browserify": "^1.0.1", - "volar-service-css": "0.0.40", - "volar-service-emmet": "0.0.40", - "volar-service-html": "0.0.40", - "volar-service-json": "0.0.40", - "volar-service-pug": "0.0.40", - "volar-service-pug-beautify": "0.0.40", - "volar-service-typescript": "0.0.40", - "volar-service-typescript-twoslash-queries": "0.0.40", + "volar-service-css": "0.0.42", + "volar-service-emmet": "0.0.42", + "volar-service-html": "0.0.42", + "volar-service-json": "0.0.42", + "volar-service-pug": "0.0.42", + "volar-service-pug-beautify": "0.0.42", + "volar-service-typescript": "0.0.42", + "volar-service-typescript-twoslash-queries": "0.0.42", "vscode-html-languageservice": "npm:@johnsoncodehk/vscode-html-languageservice@5.2.0-34a5462", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" @@ -40,7 +40,7 @@ "devDependencies": { "@types/node": "latest", "@types/path-browserify": "latest", - "@volar/kit": "2.2.0-alpha.10", + "@volar/kit": "~2.2.0", "vscode-languageserver-protocol": "^3.17.5" } } diff --git a/packages/language-service/tests/format/4333.spec.ts b/packages/language-service/tests/format/4333.spec.ts new file mode 100644 index 0000000000..03b8a21eb1 --- /dev/null +++ b/packages/language-service/tests/format/4333.spec.ts @@ -0,0 +1,14 @@ +import { defineFormatTest } from '../utils/format'; + +defineFormatTest({ + title: '#' + __filename.split('.')[0], + languageId: 'vue', + input: ` + + `.trim(), + settings: { + 'typescript.format.semicolons': 'insert', + } +}); diff --git a/packages/language-service/tests/utils/createTester.ts b/packages/language-service/tests/utils/createTester.ts index 746c6633ff..9ba6b75b0a 100644 --- a/packages/language-service/tests/utils/createTester.ts +++ b/packages/language-service/tests/utils/createTester.ts @@ -1,9 +1,9 @@ -import { TypeScriptProjectHost, createLanguageService, resolveCommonLanguageId } from '@volar/language-service'; +import { TypeScriptProjectHost, createLanguageService } from '@volar/language-service'; import { createTypeScriptLanguage } from '@volar/typescript'; import * as path from 'path'; import * as ts from 'typescript'; import { URI } from 'vscode-uri'; -import { createParsedCommandLine, createVueLanguagePlugin, createVueServicePlugins } from '../..'; +import { createParsedCommandLine, createVueLanguagePlugin, getVueLanguageServicePlugins } from '../..'; import { createMockServiceEnv } from './mockEnv'; export const rootUri = URI.file(path.resolve(__dirname, '../../../../test-workspace/language-service')).toString(); @@ -25,7 +25,6 @@ function createTester(rootUri: string) { getScriptFileNames: () => parsedCommandLine.fileNames, getCompilationSettings: () => parsedCommandLine.options, getScriptSnapshot, - getLanguageId: resolveCommonLanguageId, scriptIdToFileName: serviceEnv.typescript!.uriToFileName, fileNameToScriptId: serviceEnv.typescript!.fileNameToUri, }; @@ -38,7 +37,7 @@ function createTester(rootUri: string) { parsedCommandLine.options, parsedCommandLine.vueOptions, ); - const vueServicePlugins = createVueServicePlugins(ts, () => parsedCommandLine.vueOptions); + const vueServicePlugins = getVueLanguageServicePlugins(ts, () => parsedCommandLine.vueOptions); const defaultVSCodeSettings: any = { 'typescript.preferences.quoteStyle': 'single', 'javascript.preferences.quoteStyle': 'single', diff --git a/packages/language-service/tests/utils/format.ts b/packages/language-service/tests/utils/format.ts index be4d218d09..88780a5078 100644 --- a/packages/language-service/tests/utils/format.ts +++ b/packages/language-service/tests/utils/format.ts @@ -1,7 +1,7 @@ import * as kit from '@volar/kit'; import * as ts from 'typescript'; import { describe, expect, it } from 'vitest'; -import { createVueLanguagePlugin, createVueServicePlugins, resolveVueCompilerOptions } from '../..'; +import { createVueLanguagePlugin, getVueLanguageServicePlugins, resolveVueCompilerOptions } from '../..'; const resolvedVueOptions = resolveVueCompilerOptions({}); const vueLanguagePlugin = createVueLanguagePlugin( @@ -13,7 +13,7 @@ const vueLanguagePlugin = createVueLanguagePlugin( {}, resolvedVueOptions, ); -const vueServicePLugins = createVueServicePlugins(ts, () => resolvedVueOptions); +const vueServicePLugins = getVueLanguageServicePlugins(ts, () => resolvedVueOptions); const formatter = kit.createFormatter([vueLanguagePlugin], vueServicePLugins); export function defineFormatTest(options: { diff --git a/packages/tsc/index.ts b/packages/tsc/index.ts index 11753e2b5f..41ff9fc9af 100644 --- a/packages/tsc/index.ts +++ b/packages/tsc/index.ts @@ -45,12 +45,6 @@ export function run() { throw extensionsChangedException; } }, - fileName => { - if (runExtensions.some(ext => fileName.endsWith(ext))) { - return 'vue'; - } - return vue.resolveCommonLanguageId(fileName); - }, ); try { diff --git a/packages/tsc/package.json b/packages/tsc/package.json index eef9b98771..f6b70dd4f1 100644 --- a/packages/tsc/package.json +++ b/packages/tsc/package.json @@ -1,6 +1,6 @@ { "name": "vue-tsc", - "version": "2.0.14", + "version": "2.0.16", "license": "MIT", "files": [ "bin", @@ -16,8 +16,8 @@ "vue-tsc": "./bin/vue-tsc.js" }, "dependencies": { - "@volar/typescript": "2.2.0-alpha.10", - "@vue/language-core": "2.0.14", + "@volar/typescript": "~2.2.0", + "@vue/language-core": "2.0.16", "semver": "^7.5.4" }, "peerDependencies": { diff --git a/packages/tsc/tests/__snapshots__/dts.spec.ts.snap b/packages/tsc/tests/__snapshots__/dts.spec.ts.snap index 01f1312db9..67094f61fe 100644 --- a/packages/tsc/tests/__snapshots__/dts.spec.ts.snap +++ b/packages/tsc/tests/__snapshots__/dts.spec.ts.snap @@ -742,6 +742,25 @@ type __VLS_WithTemplateSlots = T & { " `; +exports[`vue-tsc-dts > Input: template-slots/component-destructuring.vue, Output: template-slots/component-destructuring.vue.d.ts 1`] = ` +"declare const _default: __VLS_WithTemplateSlots>, {}, {}>, Readonly<{ + bottom: (props: { + num: number; + }) => any[]; +}> & { + bottom: (props: { + num: number; + }) => any[]; +}>; +export default _default; +type __VLS_WithTemplateSlots = T & { + new (): { + $slots: S; + }; +}; +" +`; + exports[`vue-tsc-dts > Input: template-slots/component-no-script.vue, Output: template-slots/component-no-script.vue.d.ts 1`] = ` "declare const _default: __VLS_WithTemplateSlots>, {}, {}>, { "no-bind"?(_: {}): any; diff --git a/packages/tsc/tests/dts.spec.ts b/packages/tsc/tests/dts.spec.ts index 9aeb0d80e8..54daae201d 100644 --- a/packages/tsc/tests/dts.spec.ts +++ b/packages/tsc/tests/dts.spec.ts @@ -41,17 +41,6 @@ describe('vue-tsc-dts', () => { vueOptions, ); return [vueLanguagePlugin]; - }, fileName => { - if (vueOptions.extensions.some(ext => fileName.endsWith(ext))) { - return 'vue'; - } - if (vueOptions.vitePressExtensions.some(ext => fileName.endsWith(ext))) { - return 'markdown'; - } - if (vueOptions.petiteVueExtensions.some(ext => fileName.endsWith(ext))) { - return 'html'; - } - return vue.resolveCommonLanguageId(fileName); }); const program = createProgram(options); diff --git a/packages/typescript-plugin/index.ts b/packages/typescript-plugin/index.ts index 064676f27a..1bea049499 100644 --- a/packages/typescript-plugin/index.ts +++ b/packages/typescript-plugin/index.ts @@ -38,14 +38,21 @@ function createLanguageServicePlugin(): ts.server.PluginModuleFactory { ); const extensions = languagePlugin.typescript?.extraFileExtensions.map(ext => '.' + ext.extension) ?? []; const getScriptSnapshot = info.languageServiceHost.getScriptSnapshot.bind(info.languageServiceHost); + const getScriptVersion = info.languageServiceHost.getScriptVersion.bind(info.languageServiceHost); + const syncedScriptVersions = new vue.FileMap(ts.sys.useCaseSensitiveFileNames); const language = createLanguage( [languagePlugin], ts.sys.useCaseSensitiveFileNames, fileName => { + const version = getScriptVersion(fileName); + if (syncedScriptVersions.get(fileName) === version) { + return; + } + syncedScriptVersions.set(fileName, version); + const snapshot = getScriptSnapshot(fileName); if (snapshot) { - // @ts-expect-error - language.scripts.set(fileName, undefined, snapshot); + language.scripts.set(fileName, snapshot); } else { language.scripts.delete(fileName); @@ -60,6 +67,14 @@ function createLanguageServicePlugin(): ts.server.PluginModuleFactory { decorateLanguageServiceForVue(language, info.languageService, vueOptions, ts, true); decorateLanguageServiceHost(ts, language, info.languageServiceHost); startNamedPipeServer(ts, info.project.projectKind, info.project.getCurrentDirectory()); + + // #3963 + const timer = setInterval(() => { + if (info.project['program']) { + clearInterval(timer); + (info.project['program'] as any).__vue__ = { language }; + } + }, 50); } return info.languageService; diff --git a/packages/typescript-plugin/package.json b/packages/typescript-plugin/package.json index 03f232777e..802379e039 100644 --- a/packages/typescript-plugin/package.json +++ b/packages/typescript-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@vue/typescript-plugin", - "version": "2.0.14", + "version": "2.0.16", "license": "MIT", "files": [ "**/*.js", @@ -12,8 +12,8 @@ "directory": "packages/typescript-plugin" }, "dependencies": { - "@volar/typescript": "2.2.0-alpha.10", - "@vue/language-core": "2.0.14", + "@volar/typescript": "~2.2.0", + "@vue/language-core": "2.0.16", "@vue/shared": "^3.4.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 92f1350b6d..6d100e0c8d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,8 +15,8 @@ importers: specifier: latest version: 3.3.3(typescript@5.4.5) '@volar/language-service': - specifier: 2.2.0-alpha.10 - version: 2.2.0-alpha.10 + specifier: ~2.2.0 + version: 2.2.0 '@volar/tsl-config': specifier: latest version: 0.0.0-20240315.2(tsl@0.0.10(typescript@5.4.5)) @@ -31,7 +31,7 @@ importers: version: 5.2.10(@types/node@20.12.7) vitest: specifier: latest - version: 1.5.0(@types/node@20.12.7) + version: 1.5.3(@types/node@20.12.7) extensions/vscode: devDependencies: @@ -42,16 +42,16 @@ importers: specifier: ^1.82.0 version: 1.88.0 '@volar/vscode': - specifier: 2.2.0-alpha.10 - version: 2.2.0-alpha.10 + specifier: ~2.2.0 + version: 2.2.0 '@vue/language-core': - specifier: 2.0.14 + specifier: 2.0.16 version: link:../../packages/language-core '@vue/language-server': - specifier: 2.0.14 + specifier: 2.0.16 version: link:../../packages/language-server '@vue/typescript-plugin': - specifier: 2.0.14 + specifier: 2.0.16 version: link:../../packages/typescript-plugin esbuild: specifier: latest @@ -72,10 +72,10 @@ importers: packages/component-meta: dependencies: '@volar/typescript': - specifier: 2.2.0-alpha.10 - version: 2.2.0-alpha.10 + specifier: ~2.2.0 + version: 2.2.0 '@vue/language-core': - specifier: 2.0.14 + specifier: 2.0.16 version: link:../language-core path-browserify: specifier: ^1.0.1 @@ -84,7 +84,7 @@ importers: specifier: '*' version: 5.4.5 vue-component-type-helpers: - specifier: 2.0.14 + specifier: 2.0.16 version: link:../component-type-helpers devDependencies: '@types/node': @@ -99,14 +99,14 @@ importers: packages/language-core: dependencies: '@volar/language-core': - specifier: 2.2.0-alpha.10 - version: 2.2.0-alpha.10 + specifier: ~2.2.0 + version: 2.2.0 '@vue/compiler-dom': specifier: ^3.4.0 - version: 3.4.23 + version: 3.4.26 '@vue/shared': specifier: ^3.4.0 - version: 3.4.23 + version: 3.4.26 computeds: specifier: ^0.0.1 version: 0.0.1 @@ -134,40 +134,40 @@ importers: version: 1.0.2 '@vue/compiler-sfc': specifier: ^3.4.0 - version: 3.4.23 + version: 3.4.26 packages/language-plugin-pug: dependencies: '@volar/source-map': - specifier: 2.2.0-alpha.10 - version: 2.2.0-alpha.10 + specifier: ~2.2.0 + version: 2.2.0 volar-service-pug: - specifier: 0.0.40 - version: 0.0.40 + specifier: 0.0.42 + version: 0.0.42 devDependencies: '@types/node': specifier: latest version: 20.12.7 '@vue/language-core': - specifier: 2.0.14 + specifier: 2.0.16 version: link:../language-core packages/language-server: dependencies: '@volar/language-core': - specifier: 2.2.0-alpha.10 - version: 2.2.0-alpha.10 + specifier: ~2.2.0 + version: 2.2.0 '@volar/language-server': - specifier: 2.2.0-alpha.10 - version: 2.2.0-alpha.10 + specifier: ~2.2.0 + version: 2.2.0 '@vue/language-core': - specifier: 2.0.14 + specifier: 2.0.16 version: link:../language-core '@vue/language-service': - specifier: 2.0.14 + specifier: 2.0.16 version: link:../language-service '@vue/typescript-plugin': - specifier: 2.0.14 + specifier: 2.0.16 version: link:../typescript-plugin vscode-languageserver-protocol: specifier: ^3.17.5 @@ -176,25 +176,25 @@ importers: packages/language-service: dependencies: '@volar/language-core': - specifier: 2.2.0-alpha.10 - version: 2.2.0-alpha.10 + specifier: ~2.2.0 + version: 2.2.0 '@volar/language-service': - specifier: 2.2.0-alpha.10 - version: 2.2.0-alpha.10 + specifier: ~2.2.0 + version: 2.2.0 '@volar/typescript': - specifier: 2.2.0-alpha.10 - version: 2.2.0-alpha.10 + specifier: ~2.2.0 + version: 2.2.0 '@vue/compiler-dom': specifier: ^3.4.0 - version: 3.4.23 + version: 3.4.26 '@vue/language-core': - specifier: 2.0.14 + specifier: 2.0.16 version: link:../language-core '@vue/shared': specifier: ^3.4.0 - version: 3.4.23 + version: 3.4.26 '@vue/typescript-plugin': - specifier: 2.0.14 + specifier: 2.0.16 version: link:../typescript-plugin computeds: specifier: ^0.0.1 @@ -203,29 +203,29 @@ importers: specifier: ^1.0.1 version: 1.0.1 volar-service-css: - specifier: 0.0.40 - version: 0.0.40(@volar/language-service@2.2.0-alpha.10) + specifier: 0.0.42 + version: 0.0.42(@volar/language-service@2.2.0) volar-service-emmet: - specifier: 0.0.40 - version: 0.0.40(@volar/language-service@2.2.0-alpha.10) + specifier: 0.0.42 + version: 0.0.42(@volar/language-service@2.2.0) volar-service-html: - specifier: 0.0.40 - version: 0.0.40(@volar/language-service@2.2.0-alpha.10) + specifier: 0.0.42 + version: 0.0.42(@volar/language-service@2.2.0) volar-service-json: - specifier: 0.0.40 - version: 0.0.40(@volar/language-service@2.2.0-alpha.10) + specifier: 0.0.42 + version: 0.0.42(@volar/language-service@2.2.0) volar-service-pug: - specifier: 0.0.40 - version: 0.0.40 + specifier: 0.0.42 + version: 0.0.42 volar-service-pug-beautify: - specifier: 0.0.40 - version: 0.0.40(@volar/language-service@2.2.0-alpha.10) + specifier: 0.0.42 + version: 0.0.42(@volar/language-service@2.2.0) volar-service-typescript: - specifier: 0.0.40 - version: 0.0.40(@volar/language-service@2.2.0-alpha.10) + specifier: 0.0.42 + version: 0.0.42(@volar/language-service@2.2.0) volar-service-typescript-twoslash-queries: - specifier: 0.0.40 - version: 0.0.40(@volar/language-service@2.2.0-alpha.10) + specifier: 0.0.42 + version: 0.0.42(@volar/language-service@2.2.0) vscode-html-languageservice: specifier: npm:@johnsoncodehk/vscode-html-languageservice@5.2.0-34a5462 version: '@johnsoncodehk/vscode-html-languageservice@5.2.0-34a5462' @@ -243,8 +243,8 @@ importers: specifier: latest version: 1.0.2 '@volar/kit': - specifier: 2.2.0-alpha.10 - version: 2.2.0-alpha.10(typescript@5.4.5) + specifier: ~2.2.0 + version: 2.2.0(typescript@5.4.5) vscode-languageserver-protocol: specifier: ^3.17.5 version: 3.17.5 @@ -252,10 +252,10 @@ importers: packages/tsc: dependencies: '@volar/typescript': - specifier: 2.2.0-alpha.10 - version: 2.2.0-alpha.10 + specifier: ~2.2.0 + version: 2.2.0 '@vue/language-core': - specifier: 2.0.14 + specifier: 2.0.16 version: link:../language-core semver: specifier: ^7.5.4 @@ -271,14 +271,14 @@ importers: packages/typescript-plugin: dependencies: '@volar/typescript': - specifier: 2.2.0-alpha.10 - version: 2.2.0-alpha.10 + specifier: ~2.2.0 + version: 2.2.0 '@vue/language-core': - specifier: 2.0.14 + specifier: 2.0.16 version: link:../language-core '@vue/shared': specifier: ^3.4.0 - version: 3.4.23 + version: 3.4.26 devDependencies: '@types/node': specifier: latest @@ -288,9 +288,9 @@ importers: devDependencies: vue: specifier: ^3.4.0 - version: 3.4.23(typescript@5.4.5) + version: 3.4.26(typescript@5.4.5) vue-component-type-helpers: - specifier: 2.0.14 + specifier: 2.0.16 version: link:../packages/component-type-helpers vue2: specifier: npm:vue@2.7.16 @@ -306,21 +306,21 @@ packages: resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.22.20': - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + '@babel/helper-validator-identifier@7.24.5': + resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.2': - resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + '@babel/highlight@7.24.5': + resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.4': - resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} + '@babel/parser@7.24.5': + resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/types@7.24.0': - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + '@babel/types@7.24.5': + resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} engines: {node: '>=6.9.0'} '@clack/core@0.3.4': @@ -710,8 +710,8 @@ packages: resolution: {integrity: sha512-4x/182sKXmQkf0EtXxT26GEsaOATpD7WVtza5hrYivWZeo6QefC6xq9KAXrnjtFKBZ4rZwR7aX/zClYYXgtwLw==} engines: {node: ^16.14.0 || >=18.0.0} - '@npmcli/installed-package-contents@2.0.2': - resolution: {integrity: sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==} + '@npmcli/installed-package-contents@2.1.0': + resolution: {integrity: sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true @@ -719,8 +719,8 @@ packages: resolution: {integrity: sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - '@npmcli/package-json@5.0.3': - resolution: {integrity: sha512-cgsjCvld2wMqkUqvY+SZI+1ZJ7umGBYc9IAKfqJRKJCcs7hCQYxScUgdsyrRINk3VmdCYf9TXiLBHQ6ECTxhtg==} + '@npmcli/package-json@5.1.0': + resolution: {integrity: sha512-1aL4TuVrLS9sf8quCLerU3H9J4vtCtgu8VauYozrmEyU57i/EdKleCnsQ7vpnABIH6c9mnTxcH5sFkO3BlV8wQ==} engines: {node: ^16.14.0 || >=18.0.0} '@npmcli/promise-spawn@7.0.1': @@ -754,8 +754,8 @@ packages: '@octokit/openapi-types@20.0.0': resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==} - '@octokit/openapi-types@22.1.0': - resolution: {integrity: sha512-pGUdSP+eEPfZiQHNkZI0U01HLipxncisdJQB4G//OAmfeO8sqTQ9KRa0KF03TUPCziNsoXUrTg4B2Q1EX++T0Q==} + '@octokit/openapi-types@22.2.0': + resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} '@octokit/plugin-enterprise-rest@6.0.1': resolution: {integrity: sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==} @@ -793,90 +793,90 @@ packages: '@octokit/types@12.6.0': resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==} - '@octokit/types@13.4.1': - resolution: {integrity: sha512-Y73oOAzRBAUzR/iRAbGULzpNkX8vaxKCqEtg6K74Ff3w9f5apFnWtE/2nade7dMWWW3bS5Kkd6DJS4HF04xreg==} + '@octokit/types@13.5.0': + resolution: {integrity: sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@rollup/rollup-android-arm-eabi@4.16.1': - resolution: {integrity: sha512-92/y0TqNLRYOTXpm6Z7mnpvKAG9P7qmK7yJeRJSdzElNCUnsgbpAsGqerUboYRIQKzgfq4pWu9xVkgpWLfmNsw==} + '@rollup/rollup-android-arm-eabi@4.17.1': + resolution: {integrity: sha512-P6Wg856Ou/DLpR+O0ZLneNmrv7QpqBg+hK4wE05ijbC/t349BRfMfx+UFj5Ha3fCFopIa6iSZlpdaB4agkWp2Q==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.16.1': - resolution: {integrity: sha512-ttWB6ZCfRLuDIUiE0yiu5gcqOsYjA5F7kEV1ggHMj20FwLZ8A1FMeahZJFl/pnOmcnD2QL0z4AcDuo27utGU8A==} + '@rollup/rollup-android-arm64@4.17.1': + resolution: {integrity: sha512-piwZDjuW2WiHr05djVdUkrG5JbjnGbtx8BXQchYCMfib/nhjzWoiScelZ+s5IJI7lecrwSxHCzW026MWBL+oJQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.16.1': - resolution: {integrity: sha512-QLDvPLetbqjHojTGFw9+nuSP3YY/iz2k1cep6crYlr97sS+ZJ0W43b8Z0zC00+lnFZj6JSNxiA4DjboNQMuh1A==} + '@rollup/rollup-darwin-arm64@4.17.1': + resolution: {integrity: sha512-LsZXXIsN5Q460cKDT4Y+bzoPDhBmO5DTr7wP80d+2EnYlxSgkwdPfE3hbE+Fk8dtya+8092N9srjBTJ0di8RIA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.16.1': - resolution: {integrity: sha512-TAUK/D8khRrRIa1KwRzo8JNKk3tcqaeXWdtsiLgA8zmACWwlWLjPCJ4DULGHQrMkeBjp1Cd3Yuwx04lZgFx5Vg==} + '@rollup/rollup-darwin-x64@4.17.1': + resolution: {integrity: sha512-S7TYNQpWXB9APkxu/SLmYHezWwCoZRA9QLgrDeml+SR2A1LLPD2DBUdUlvmCF7FUpRMKvbeeWky+iizQj65Etw==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.16.1': - resolution: {integrity: sha512-KO+WGZjrh6zyFTD1alIFkfdtxf8B4BC+hqd3kBZHscPLvE5FR/6QKsyuCT0JlERxxYBSUKNUQ/UHyX5uwO1x2A==} + '@rollup/rollup-linux-arm-gnueabihf@4.17.1': + resolution: {integrity: sha512-Lq2JR5a5jsA5um2ZoLiXXEaOagnVyCpCW7xvlcqHC7y46tLwTEgUSTM3a2TfmmTMmdqv+jknUioWXlmxYxE9Yw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.16.1': - resolution: {integrity: sha512-NqxbllzIB1WoAo4ThUXVtd21iiM5IHMTTXmXySKBLVcZvkU0HIZmatlP7hLzb5yQubcmdIeWmncd2NdsjocEiw==} + '@rollup/rollup-linux-arm-musleabihf@4.17.1': + resolution: {integrity: sha512-9BfzwyPNV0IizQoR+5HTNBGkh1KXE8BqU0DBkqMngmyFW7BfuIZyMjQ0s6igJEiPSBvT3ZcnIFohZ19OqjhDPg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.16.1': - resolution: {integrity: sha512-snma5NvV8y7IECQ5rq0sr0f3UUu+92NVmG/913JXJMcXo84h9ak9TA5UI9Cl2XRM9j3m37QwDBtEYnJzRkSmxA==} + '@rollup/rollup-linux-arm64-gnu@4.17.1': + resolution: {integrity: sha512-e2uWaoxo/rtzA52OifrTSXTvJhAXb0XeRkz4CdHBK2KtxrFmuU/uNd544Ogkpu938BzEfvmWs8NZ8Axhw33FDw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.16.1': - resolution: {integrity: sha512-KOvqGprlD84ueivhCi2flvcUwDRD20mAsE3vxQNVEI2Di9tnPGAfEu6UcrSPZbM+jG2w1oSr43hrPo0RNg6GGg==} + '@rollup/rollup-linux-arm64-musl@4.17.1': + resolution: {integrity: sha512-ekggix/Bc/d/60H1Mi4YeYb/7dbal1kEDZ6sIFVAE8pUSx7PiWeEh+NWbL7bGu0X68BBIkgF3ibRJe1oFTksQQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.16.1': - resolution: {integrity: sha512-/gsNwtiGLqYwN4vP+EIdUC6Q6LTlpupWqokqIndvZcjn9ig/5P01WyaYCU2wvfL/2Z82jp5kX8c1mDBOvCP3zg==} + '@rollup/rollup-linux-powerpc64le-gnu@4.17.1': + resolution: {integrity: sha512-UGV0dUo/xCv4pkr/C8KY7XLFwBNnvladt8q+VmdKrw/3RUd3rD0TptwjisvE2TTnnlENtuY4/PZuoOYRiGp8Gw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.16.1': - resolution: {integrity: sha512-uU8zuGkQfGqfD9w6VRJZI4IuG4JIfNxxJgEmLMAmPVHREKGsxFVfgHy5c6CexQF2vOfgjB33OsET3Vdn2lln9A==} + '@rollup/rollup-linux-riscv64-gnu@4.17.1': + resolution: {integrity: sha512-gEYmYYHaehdvX46mwXrU49vD6Euf1Bxhq9pPb82cbUU9UT2NV+RSckQ5tKWOnNXZixKsy8/cPGtiUWqzPuAcXQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.16.1': - resolution: {integrity: sha512-lsjLtDgtcGFEuBP6yrXwkRN5/wKlvUZtfbKZZu0yaoNpiBL4epgnO21osAALIspVRnl4qZgyLFd8xjCYYWgwfw==} + '@rollup/rollup-linux-s390x-gnu@4.17.1': + resolution: {integrity: sha512-xeae5pMAxHFp6yX5vajInG2toST5lsCTrckSRUFwNgzYqnUjNBcQyqk1bXUxX5yhjWFl2Mnz3F8vQjl+2FRIcw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.16.1': - resolution: {integrity: sha512-N2ZizKhUryqqrMfdCnjhJhZRgv61C6gK+hwVtCIKC8ts8J+go+vqENnGexwg21nHIOvLN5mBM8a7DI2vlyIOPg==} + '@rollup/rollup-linux-x64-gnu@4.17.1': + resolution: {integrity: sha512-AsdnINQoDWfKpBzCPqQWxSPdAWzSgnYbrJYtn6W0H2E9It5bZss99PiLA8CgmDRfvKygt20UpZ3xkhFlIfX9zQ==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.16.1': - resolution: {integrity: sha512-5ICeMxqg66FrOA2AbnBQ2TJVxfvZsKLxmof0ibvPLaYtbsJqnTUtJOofgWb46Gjd4uZcA4rdsp4JCxegzQPqCg==} + '@rollup/rollup-linux-x64-musl@4.17.1': + resolution: {integrity: sha512-KoB4fyKXTR+wYENkIG3fFF+5G6N4GFvzYx8Jax8BR4vmddtuqSb5oQmYu2Uu067vT/Fod7gxeQYKupm8gAcMSQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.16.1': - resolution: {integrity: sha512-1vIP6Ce02L+qWD7uZYRiFiuAJo3m9kARatWmFSnss0gZnVj2Id7OPUU9gm49JPGasgcR3xMqiH3fqBJ8t00yVg==} + '@rollup/rollup-win32-arm64-msvc@4.17.1': + resolution: {integrity: sha512-J0d3NVNf7wBL9t4blCNat+d0PYqAx8wOoY+/9Q5cujnafbX7BmtYk3XvzkqLmFECaWvXGLuHmKj/wrILUinmQg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.16.1': - resolution: {integrity: sha512-Y3M92DcVsT6LoP+wrKpoUWPaazaP1fzbNkp0a0ZSj5Y//+pQVfVe/tQdsYQQy7dwXR30ZfALUIc9PCh9Izir6w==} + '@rollup/rollup-win32-ia32-msvc@4.17.1': + resolution: {integrity: sha512-xjgkWUwlq7IbgJSIxvl516FJ2iuC/7ttjsAxSPpC9kkI5iQQFHKyEN5BjbhvJ/IXIZ3yIBcW5QDlWAyrA+TFag==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.16.1': - resolution: {integrity: sha512-x0fvpHMuF7fK5r8oZxSi8VYXkrVmRgubXpO/wcf15Lk3xZ4Jvvh5oG+u7Su1776A7XzVKZhD2eRc4t7H50gL3w==} + '@rollup/rollup-win32-x64-msvc@4.17.1': + resolution: {integrity: sha512-0QbCkfk6cnnVKWqqlC0cUrrUMDMfu5ffvYMTUHf+qMN2uAb3MKP31LPcwiMXBNsvoFGs/kYdFOsuLmvppCopXA==} cpu: [x64] os: [win32] @@ -955,51 +955,51 @@ packages: '@types/vscode@1.88.0': resolution: {integrity: sha512-rWY+Bs6j/f1lvr8jqZTyp5arRMfovdxolcqGi+//+cPDOh8SBvzXH90e7BiSXct5HJ9HGW6jATchbRTpTJpEkw==} - '@vitest/expect@1.5.0': - resolution: {integrity: sha512-0pzuCI6KYi2SIC3LQezmxujU9RK/vwC1U9R0rLuGlNGcOuDWxqWKu6nUdFsX9tH1WU0SXtAxToOsEjeUn1s3hA==} + '@vitest/expect@1.5.3': + resolution: {integrity: sha512-y+waPz31pOFr3rD7vWTbwiLe5+MgsMm40jTZbQE8p8/qXyBX3CQsIXRx9XK12IbY7q/t5a5aM/ckt33b4PxK2g==} - '@vitest/runner@1.5.0': - resolution: {integrity: sha512-7HWwdxXP5yDoe7DTpbif9l6ZmDwCzcSIK38kTSIt6CFEpMjX4EpCgT6wUmS0xTXqMI6E/ONmfgRKmaujpabjZQ==} + '@vitest/runner@1.5.3': + resolution: {integrity: sha512-7PlfuReN8692IKQIdCxwir1AOaP5THfNkp0Uc4BKr2na+9lALNit7ub9l3/R7MP8aV61+mHKRGiqEKRIwu6iiQ==} - '@vitest/snapshot@1.5.0': - resolution: {integrity: sha512-qpv3fSEuNrhAO3FpH6YYRdaECnnRjg9VxbhdtPwPRnzSfHVXnNzzrpX4cJxqiwgRMo7uRMWDFBlsBq4Cr+rO3A==} + '@vitest/snapshot@1.5.3': + resolution: {integrity: sha512-K3mvIsjyKYBhNIDujMD2gfQEzddLe51nNOAf45yKRt/QFJcUIeTQd2trRvv6M6oCBHNVnZwFWbQ4yj96ibiDsA==} - '@vitest/spy@1.5.0': - resolution: {integrity: sha512-vu6vi6ew5N5MMHJjD5PoakMRKYdmIrNJmyfkhRpQt5d9Ewhw9nZ5Aqynbi3N61bvk9UvZ5UysMT6ayIrZ8GA9w==} + '@vitest/spy@1.5.3': + resolution: {integrity: sha512-Llj7Jgs6lbnL55WoshJUUacdJfjU2honvGcAJBxhra5TPEzTJH8ZuhI3p/JwqqfnTr4PmP7nDmOXP53MS7GJlg==} - '@vitest/utils@1.5.0': - resolution: {integrity: sha512-BDU0GNL8MWkRkSRdNFvCUCAVOeHaUlVJ9Tx0TYBZyXaaOTmGtUFObzchCivIBrIwKzvZA7A9sCejVhXM2aY98A==} + '@vitest/utils@1.5.3': + resolution: {integrity: sha512-rE9DTN1BRhzkzqNQO+kw8ZgfeEBCLXiHJwetk668shmNBpSagQxneT5eSqEBLP+cqSiAeecvQmbpFfdMyLcIQA==} - '@volar/kit@2.2.0-alpha.10': - resolution: {integrity: sha512-BzH8+ferzp05gyBvnZKr+ZlG2fCGEU5m3ZFx4JJ0ZqtXU6BM5V/sQR/VheWHYAjmSLdW3GaM8azfgP//EpmKXA==} + '@volar/kit@2.2.0': + resolution: {integrity: sha512-ZI6caoD7f7WSJC9lLOFGgp+idR8gzlK9+GzDV2urWAj4gTx0MzyB21uKZlo3hfZp72LpUmOvQBJ3n303gDE8FQ==} peerDependencies: typescript: '*' - '@volar/language-core@2.2.0-alpha.10': - resolution: {integrity: sha512-njVJLtpu0zMvDaEk7K5q4BRpOgbyEUljU++un9TfJoJNhxG0z/hWwpwgTRImO42EKvwIxF3XUzeMk+qatAFy7Q==} + '@volar/language-core@2.2.0': + resolution: {integrity: sha512-a8WG9+4OdeNDW4ywABZIM6S6UN7em8uIlM/BZ2pWQUYrVmX+m8sj/X+QadvO+Li/t/LjAqbWJQtVgxdpEWLALQ==} - '@volar/language-server@2.2.0-alpha.10': - resolution: {integrity: sha512-PpmgXRvgTN0R5539X5XjBY3zYt/NCoz/LPLw2dFcL8O1lBssYufVPAtSov8mogJLx0PejQFIWLBbdDpCKJT6qw==} + '@volar/language-server@2.2.0': + resolution: {integrity: sha512-JqUxv+YoCLWpGJLIsDp45WmEx8kNAWh+RsJ1sswjJZrezVFKcyjOfLPnKy/D0VV0myME5i3CUQTW6K/nnshBzg==} - '@volar/language-service@2.2.0-alpha.10': - resolution: {integrity: sha512-gnAEPGGfjl/DFFJGzAKV6kZ/GrG3qrVhn95eLtC1rB832ehQNwcq20rAk2F9I05yhves0VjstfDL2/2RrTNp5g==} + '@volar/language-service@2.2.0': + resolution: {integrity: sha512-hLtIFpsOcfHJ7kllUDRU2Ap1IBGEnADyE7Ea3kPwvUHM43Qn+7lvpKXxX/UL2zVcQQrvHr0348Tfi9BF1aKD5A==} - '@volar/snapshot-document@2.2.0-alpha.10': - resolution: {integrity: sha512-d5rK7cfRdDTJ6JA/+Oc99rV0yRCSE1j9mFn4SqDduzGwKVQFR4gmjLPNKeT8iRI17PjmUZCUMdH0PM1u89G9fA==} + '@volar/snapshot-document@2.2.0': + resolution: {integrity: sha512-CUOxMlPy3UBqzjmat0eVaCyYJqbhOEDYBZbsm1gbuQLW6kUxQs3+8eD2x6EyfaPHiZMxNuLBjSRvXfLANcYbHQ==} - '@volar/source-map@2.2.0-alpha.10': - resolution: {integrity: sha512-nrdWApVkP5cksAnDEyy1JD9rKdwOJsEq1B+seWO4vNXmZNcxQQCx4DULLBvKt7AzRUAQiAuw5aQkb9RBaSqdVA==} + '@volar/source-map@2.2.0': + resolution: {integrity: sha512-HQlPRlHOVqCCHK8wI76ZldHkEwKsjp7E6idUc36Ekni+KJDNrqgSqPvyHQixybXPHNU7CI9Uxd9/IkxO7LuNBw==} '@volar/tsl-config@0.0.0-20240315.2': resolution: {integrity: sha512-bv57xhmegLkfjW0/FZL/sberfmUch7yLAkXlRXj5KxHPYCjIU4T1ciPuLWrtVzCa+o0q7ykQ6aR+Q/z7MSMf6w==} peerDependencies: tsl: '*' - '@volar/typescript@2.2.0-alpha.10': - resolution: {integrity: sha512-GCa0vTVVdA9ULUsu2Rx7jwsIuyZQPvPVT9o3NrANTbYv+523Ao1gv3glC5vzNSDPM6bUl37r94HbCj7KINQr+g==} + '@volar/typescript@2.2.0': + resolution: {integrity: sha512-wC6l4zLiiCLxF+FGaHCbWlQYf4vMsnRxYhcI6WgvaNppOD6r1g+Ef1RKRJUApALWU46Yy/JDU/TbdV6w/X6Liw==} - '@volar/vscode@2.2.0-alpha.10': - resolution: {integrity: sha512-ws4GrTJira5QV3KTgF36cs+FLTrf1JbIWW2nHuO8ZeZ1av7ghG8aSYsJ+FpuRtt7sAxj654P2PrjDqUMFvFZsQ==} + '@volar/vscode@2.2.0': + resolution: {integrity: sha512-WQEnvv7tDfYN7NrHRPvtnu3fZ+Uc4IVYYt/i728gaql/0StkITMdh7K1i+43MsDlY/gSwh82XrDstaxAloTJ6Q==} '@vscode/emmet-helper@2.9.3': resolution: {integrity: sha512-rB39LHWWPQYYlYfpv9qCoZOVioPCftKXXqrsyqN1mTWZM6dTnONT63Db+03vgrBbHzJN45IrgS/AGxw9iiqfEw==} @@ -1010,37 +1010,37 @@ packages: '@vscode/l10n@0.0.18': resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} - '@vue/compiler-core@3.4.23': - resolution: {integrity: sha512-HAFmuVEwNqNdmk+w4VCQ2pkLk1Vw4XYiiyxEp3z/xvl14aLTUBw2OfVH3vBcx+FtGsynQLkkhK410Nah1N2yyQ==} + '@vue/compiler-core@3.4.26': + resolution: {integrity: sha512-N9Vil6Hvw7NaiyFUFBPXrAyETIGlQ8KcFMkyk6hW1Cl6NvoqvP+Y8p1Eqvx+UdqsnrnI9+HMUEJegzia3mhXmQ==} - '@vue/compiler-dom@3.4.23': - resolution: {integrity: sha512-t0b9WSTnCRrzsBGrDd1LNR5HGzYTr7LX3z6nNBG+KGvZLqrT0mY6NsMzOqlVMBKKXKVuusbbB5aOOFgTY+senw==} + '@vue/compiler-dom@3.4.26': + resolution: {integrity: sha512-4CWbR5vR9fMg23YqFOhr6t6WB1Fjt62d6xdFPyj8pxrYub7d+OgZaObMsoxaF9yBUHPMiPFK303v61PwAuGvZA==} '@vue/compiler-sfc@2.7.16': resolution: {integrity: sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==} - '@vue/compiler-sfc@3.4.23': - resolution: {integrity: sha512-fSDTKTfzaRX1kNAUiaj8JB4AokikzStWgHooMhaxyjZerw624L+IAP/fvI4ZwMpwIh8f08PVzEnu4rg8/Npssw==} + '@vue/compiler-sfc@3.4.26': + resolution: {integrity: sha512-It1dp+FAOCgluYSVYlDn5DtZBxk1NCiJJfu2mlQqa/b+k8GL6NG/3/zRbJnHdhV2VhxFghaDq5L4K+1dakW6cw==} - '@vue/compiler-ssr@3.4.23': - resolution: {integrity: sha512-hb6Uj2cYs+tfqz71Wj6h3E5t6OKvb4MVcM2Nl5i/z1nv1gjEhw+zYaNOV+Xwn+SSN/VZM0DgANw5TuJfxfezPg==} + '@vue/compiler-ssr@3.4.26': + resolution: {integrity: sha512-FNwLfk7LlEPRY/g+nw2VqiDKcnDTVdCfBREekF8X74cPLiWHUX6oldktf/Vx28yh4STNy7t+/yuLoMBBF7YDiQ==} - '@vue/reactivity@3.4.23': - resolution: {integrity: sha512-GlXR9PL+23fQ3IqnbSQ8OQKLodjqCyoCrmdLKZk3BP7jN6prWheAfU7a3mrltewTkoBm+N7qMEb372VHIkQRMQ==} + '@vue/reactivity@3.4.26': + resolution: {integrity: sha512-E/ynEAu/pw0yotJeLdvZEsp5Olmxt+9/WqzvKff0gE67tw73gmbx6tRkiagE/eH0UCubzSlGRebCbidB1CpqZQ==} - '@vue/runtime-core@3.4.23': - resolution: {integrity: sha512-FeQ9MZEXoFzFkFiw9MQQ/FWs3srvrP+SjDKSeRIiQHIhtkzoj0X4rWQlRNHbGuSwLra6pMyjAttwixNMjc/xLw==} + '@vue/runtime-core@3.4.26': + resolution: {integrity: sha512-AFJDLpZvhT4ujUgZSIL9pdNcO23qVFh7zWCsNdGQBw8ecLNxOOnPcK9wTTIYCmBJnuPHpukOwo62a2PPivihqw==} - '@vue/runtime-dom@3.4.23': - resolution: {integrity: sha512-RXJFwwykZWBkMiTPSLEWU3kgVLNAfActBfWFlZd0y79FTUxexogd0PLG4HH2LfOktjRxV47Nulygh0JFXe5f9A==} + '@vue/runtime-dom@3.4.26': + resolution: {integrity: sha512-UftYA2hUXR2UOZD/Fc3IndZuCOOJgFxJsWOxDkhfVcwLbsfh2CdXE2tG4jWxBZuDAs9J9PzRTUFt1PgydEtItw==} - '@vue/server-renderer@3.4.23': - resolution: {integrity: sha512-LDwGHtnIzvKFNS8dPJ1SSU5Gvm36p2ck8wCZc52fc3k/IfjKcwCyrWEf0Yag/2wTFUBXrqizfhK9c/mC367dXQ==} + '@vue/server-renderer@3.4.26': + resolution: {integrity: sha512-xoGAqSjYDPGAeRWxeoYwqJFD/gw7mpgzOvSxEmjWaFO2rE6qpbD1PC172YRpvKhrihkyHJkNDADFXTfCyVGhKw==} peerDependencies: - vue: 3.4.23 + vue: 3.4.26 - '@vue/shared@3.4.23': - resolution: {integrity: sha512-wBQ0gvf+SMwsCQOyusNw/GoXPV47WGd1xB5A1Pgzy0sQ3Bi5r5xm3n+92y3gCnB3MWqnRDdvfkRGxhKtbBRNgg==} + '@vue/shared@3.4.26': + resolution: {integrity: sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==} JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} @@ -1821,8 +1821,8 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - inquirer@9.2.19: - resolution: {integrity: sha512-WpxOT71HGsFya6/mj5PUue0sWwbpbiPfAR+332zLj/siB0QA1PZM8v3GepegFV1Op189UxHUCF6y8AySdtOMVA==} + inquirer@9.2.20: + resolution: {integrity: sha512-SFwJJPS+Ms75NV+wzFBHjirG4z3tzvis31h+9NyH1tqjIu2c7vCavlXILZ73q/nPYy8/aw4W+DNzLH5MjfYXiA==} engines: {node: '>=18'} ip-address@9.0.5: @@ -1983,12 +1983,12 @@ packages: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} - libnpmaccess@8.0.3: - resolution: {integrity: sha512-0dU2ZZ8eWrI3JcPIEA5wnQ5s+OGeNtjrg0MHz1vcs06hRLDhZeXBWthuXG47jV1GO5ogClQi7RAFNAWVEjViWw==} + libnpmaccess@8.0.4: + resolution: {integrity: sha512-Q5REi1IhNAWk2vMc1x0bgltJkjC6t+bxjDpvQqfdFDzc9rl/ZwW5zgyVvt0ZrGCBqYbDnUeKopwFwxxIgAKYww==} engines: {node: ^16.14.0 || >=18.0.0} - libnpmpublish@9.0.5: - resolution: {integrity: sha512-MSKHZN2NXmp8GafDMy2eH/FK6c0BjpCbuJ4vJU4xPqCguy0w805VoRnsCwxyrvzCC13MB2tU6VOAX08GioINBA==} + libnpmpublish@9.0.6: + resolution: {integrity: sha512-FoNMQGgGzFBKIrztFTlup26zAh3bUff8ZfOYkUrgNK+f08jG9TbCqDPgXOezKy0X0ZL42BldChBgf4HtmK7hsw==} engines: {node: ^16.14.0 || >=18.0.0} lines-and-columns@1.2.4: @@ -2027,8 +2027,8 @@ packages: loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} - lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} lru-cache@6.0.0: @@ -2181,8 +2181,8 @@ packages: resolution: {integrity: sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-abi@3.60.0: - resolution: {integrity: sha512-zcGgwoXbzw9NczqbGzAWL/ToDYAxv1V8gL1D67ClbdkIfeeDBbY0GelZtC25ayLvVjr2q2cloHeQV1R0QAWqRQ==} + node-abi@3.62.0: + resolution: {integrity: sha512-CPMcGa+y33xuL1E0TcNIu4YyaZCxnnvkVaEXrsosR3FxN+fV8xvb7Mzpb7IgKler10qeMkE6+Dp8qJhpzdq35g==} engines: {node: '>=10'} node-addon-api@4.3.0: @@ -2509,8 +2509,8 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true - react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} read-package-json-fast@3.0.2: resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} @@ -2575,8 +2575,8 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup@4.16.1: - resolution: {integrity: sha512-5CaD3MPDlPKfhqzRvWXK96G6ELJfPZNb3LHiZxTHgDdC6jvwfGz2E8nY+9g1ONk4ttHsK1WaFP19Js4PSr1E3g==} + rollup@4.17.1: + resolution: {integrity: sha512-0gG94inrUtg25sB2V/pApwiv1lUb0bQ25FPNuzO89Baa+B+c0ccaaBKM5zkZV/12pUUdH+lWCSm9wmHqyocuVQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2850,8 +2850,8 @@ packages: resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} engines: {node: '>=14.16'} - type-fest@4.15.0: - resolution: {integrity: sha512-tB9lu0pQpX5KJq54g+oHOLumOx+pMep4RaM6liXh2PKmVRFF+/vAtUP0ZaJ0kOySfVNjF6doBWPHhBhISKdlIA==} + type-fest@4.18.0: + resolution: {integrity: sha512-+dbmiyliDY/2TTcjCS7NpI9yV2iEFlUDk5TKnsbkN7ZoRu5s7bT+zvYtNFhFXC2oLwURGT2frACAZvbbyNBI+w==} engines: {node: '>=16'} typed-rest-client@1.8.11: @@ -2924,8 +2924,8 @@ packages: resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - vite-node@1.5.0: - resolution: {integrity: sha512-tV8h6gMj6vPzVCa7l+VGq9lwoJjW8Y79vst8QZZGiuRAfijU+EEWuc0kFpmndQrWhMMhet1jdSF+40KSZUqIIw==} + vite-node@1.5.3: + resolution: {integrity: sha512-axFo00qiCpU/JLd8N1gu9iEYL3xTbMbMrbe5nDp9GL0nb6gurIdZLkkFogZXWnE8Oyy5kfSLwNVIcVsnhE7lgQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -2957,15 +2957,15 @@ packages: terser: optional: true - vitest@1.5.0: - resolution: {integrity: sha512-d8UKgR0m2kjdxDWX6911uwxout6GHS0XaGH1cksSIVVG8kRlE7G7aBw7myKQCvDI5dT4j7ZMa+l706BIORMDLw==} + vitest@1.5.3: + resolution: {integrity: sha512-2oM7nLXylw3mQlW6GXnRriw+7YvZFk/YNV8AxIC3Z3MfFbuziLGWP9GPxxu/7nRlXhqyxBikpamr+lEEj1sUEw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 1.5.0 - '@vitest/ui': 1.5.0 + '@vitest/browser': 1.5.3 + '@vitest/ui': 1.5.3 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -2982,61 +2982,61 @@ packages: jsdom: optional: true - volar-service-css@0.0.40: - resolution: {integrity: sha512-XDUjQacXhSt5OjF3IKkj5cCKe6xnoEVODFv6LT5AZLD2l2PGYNy2Ve6oFqP0gkemFYCkQPQj/vi7RlPVduxXsQ==} + volar-service-css@0.0.42: + resolution: {integrity: sha512-vx3kbSNiIfoyuHaygDFykI1TFkpbkIO2qJWeKNnGHlMZKy1PFLfCRmPAjkfdDvijLPnHqyKmvWwhkUht+Wiq6Q==} peerDependencies: - '@volar/language-service': ~2.2.0-alpha.4 + '@volar/language-service': ~2.2.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-emmet@0.0.40: - resolution: {integrity: sha512-1OVmW1KF7rQKL37U8pMgZzPs9qC8VmPMbEepUHucg/igmAi3pyf5aPpOPLl3DXoKQuFds+m92HCErVGJXKhulw==} + volar-service-emmet@0.0.42: + resolution: {integrity: sha512-agB2XZTS14o6+oUnIQHd7nIU08i2exZ+WYY20DjKj0NFLgbYSWIFB5Uf8mSIouMHzs28JcAMGS7ClT9Amkp6RQ==} peerDependencies: - '@volar/language-service': ~2.2.0-alpha.4 + '@volar/language-service': ~2.2.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-html@0.0.40: - resolution: {integrity: sha512-gSxVXDtUwQr+TRjGfc4iPSexqwlbMb0Rzcn3LWb4+mC1MyYB6+uN+to8okL8gFjVHHuYjFvNY53KWEJ2e4iHWw==} + volar-service-html@0.0.42: + resolution: {integrity: sha512-6KMjwB3VMrpQgqm4gM73tDO91xJcga09vi4oyI9zayILhlUPuQW4KPjAN3NvLK4fOkcDTn20k/4gGm335ETKVw==} peerDependencies: - '@volar/language-service': ~2.2.0-alpha.4 + '@volar/language-service': ~2.2.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-json@0.0.40: - resolution: {integrity: sha512-3vrvfbU6r9fPXqMKEffE5/JseicWeWGh4qfBa1bhKy5Tsz/ibNGGUsWLmXNZV+OYqtLTlTOYloA1LI605WQ6Tg==} + volar-service-json@0.0.42: + resolution: {integrity: sha512-+wweRNbzobAG5y2UbMoI4cXRBVG5kf2J/H1Pbp6Ek+A+MOMT3xKbV+H5aKkdEoNGzKv5V2QmwpdVI2ukfOy2EQ==} peerDependencies: - '@volar/language-service': ~2.2.0-alpha.4 + '@volar/language-service': ~2.2.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-pug-beautify@0.0.40: - resolution: {integrity: sha512-uuIWu7PQrXiDCDEIIPAwIEfR80w2GL/x+MJaE9cdBAx+s3xX3go25tA+GObIsevKHyT2gVYdM1T+pOBqKd8NlQ==} + volar-service-pug-beautify@0.0.42: + resolution: {integrity: sha512-XxK9Njb2E/+uIyh12wKAZVSfaLegH+piv2pCZKDyVMH5aN/prBFseUzZZofwyHCZ+vaviAxXxgIhoiH83tImsw==} peerDependencies: - '@volar/language-service': ~2.2.0-alpha.4 + '@volar/language-service': ~2.2.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-pug@0.0.40: - resolution: {integrity: sha512-r22Ay+rjqH5ERAgBeckXJWwFMXIOkZlu6xdWIUY5tq8Xw0BLQ7/2Zibz1MSfvClb/tcFjVXx/y23hXjvJg/awQ==} + volar-service-pug@0.0.42: + resolution: {integrity: sha512-p+ESdsxkyHbRXjEhRitvovOypD7deYAlaiEgfQZo9so68mX1rDlQTHuWVVIkPUq9Umba8d8zTjwkp+L513G5Aw==} - volar-service-typescript-twoslash-queries@0.0.40: - resolution: {integrity: sha512-IGYW62FeEkbRtToJSseDgDJBIEQ1+jxNZ4n8EDgr2wttP4iD/zG4kcyk2tSL4GrkxHJSi72F2c8WMsYq2Ia3YQ==} + volar-service-typescript-twoslash-queries@0.0.42: + resolution: {integrity: sha512-aZpN9Szu3m0y1VieKZoH7UVZsB3OD2PJ+BY6EXQ+KxlshMQhkWIEAFBYxA8ixIh0mCev3Bu4qhVbgdeD2DoXWg==} peerDependencies: - '@volar/language-service': ~2.2.0-alpha.4 + '@volar/language-service': ~2.2.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-typescript@0.0.40: - resolution: {integrity: sha512-GL9y8FpQt+wtW+mQnT1Kp5l1BJRu7gb9ioxuwe1QM+fqC0VJaXI6sl0fgk+tlycfbxh1IUU8ZjzV9GMrYlE6IQ==} + volar-service-typescript@0.0.42: + resolution: {integrity: sha512-INJHXZvIZjsbctXcEjITpj4DFJ6SCGbgpdUUo3vyJ+WwBeuAfncvUVZ4pvid3o8ZCDZhtpOVjFSO+4HYsZfyrg==} peerDependencies: - '@volar/language-service': ~2.2.0-alpha.4 + '@volar/language-service': ~2.2.0 peerDependenciesMeta: '@volar/language-service': optional: true @@ -3047,11 +3047,11 @@ packages: deprecated: vsce has been renamed to @vscode/vsce. Install using @vscode/vsce instead. hasBin: true - vscode-css-languageservice@6.2.13: - resolution: {integrity: sha512-2rKWXfH++Kxd9Z4QuEgd1IF7WmblWWU7DScuyf1YumoGLkY9DW6wF/OTlhOyO2rN63sWHX2dehIpKBbho4ZwvA==} + vscode-css-languageservice@6.2.14: + resolution: {integrity: sha512-5UPQ9Y1sUTnuMyaMBpO7LrBkqjhEJb5eAwdUlDp+Uez8lry+Tspnk3+3p2qWS4LlNsr4p3v9WkZxUf1ltgFpgw==} - vscode-json-languageservice@5.3.10: - resolution: {integrity: sha512-KlbUYaer3DAnsVyRtgg/MhXOu4TTwY8TjaZYRY7Mt80zSpmvbmd58YT4Wq2ZiqHzdioD6lAvRSxhSCL0DvVY8Q==} + vscode-json-languageservice@5.3.11: + resolution: {integrity: sha512-WYS72Ymria3dn8ZbjtBbt5K71m05wY1Q6hpXV5JxUT0q75Ts0ljLmnZJAVpx8DjPgYbFD+Z8KHpWh2laKLUCtQ==} vscode-jsonrpc@8.2.0: resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} @@ -3090,8 +3090,8 @@ packages: resolution: {integrity: sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==} deprecated: Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details. - vue@3.4.23: - resolution: {integrity: sha512-X1y6yyGJ28LMUBJ0k/qIeKHstGd+BlWQEOT40x3auJFTmpIhpbKLgN7EFsqalnJXq1Km5ybDEsp6BhuWKciUDg==} + vue@3.4.26: + resolution: {integrity: sha512-bUIq/p+VB+0xrJubaemrfhk1/FiW9iX+pDV+62I/XJ6EkspAO9/DXEjbDFoe8pIfOZBqfk45i9BMc41ptP/uRg==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -3193,28 +3193,28 @@ snapshots: '@babel/code-frame@7.24.2': dependencies: - '@babel/highlight': 7.24.2 + '@babel/highlight': 7.24.5 picocolors: 1.0.0 '@babel/helper-string-parser@7.24.1': {} - '@babel/helper-validator-identifier@7.22.20': {} + '@babel/helper-validator-identifier@7.24.5': {} - '@babel/highlight@7.24.2': + '@babel/highlight@7.24.5': dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.5 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.0 - '@babel/parser@7.24.4': + '@babel/parser@7.24.5': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 - '@babel/types@7.24.0': + '@babel/types@7.24.5': dependencies: '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.5 to-fast-properties: 2.0.0 '@clack/core@0.3.4': @@ -3435,7 +3435,7 @@ snapshots: fs-extra: 11.2.0 glob-parent: 6.0.2 globby: 14.0.1 - inquirer: 9.2.19 + inquirer: 9.2.20 is-ci: 3.0.1 json5: 2.2.3 load-json-file: 7.0.1 @@ -3480,8 +3480,8 @@ snapshots: fs-extra: 11.2.0 glob: 10.3.12 has-unicode: 2.0.1 - libnpmaccess: 8.0.3 - libnpmpublish: 9.0.5 + libnpmaccess: 8.0.4 + libnpmpublish: 9.0.6 normalize-path: 3.0.0 npm-package-arg: 11.0.2 npm-packlist: 5.1.3 @@ -3572,7 +3572,7 @@ snapshots: agent-base: 7.1.1 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.4 - lru-cache: 10.2.0 + lru-cache: 10.2.2 socks-proxy-agent: 8.0.3 transitivePeerDependencies: - supports-color @@ -3584,7 +3584,7 @@ snapshots: '@npmcli/git@5.0.6': dependencies: '@npmcli/promise-spawn': 7.0.1 - lru-cache: 10.2.0 + lru-cache: 10.2.2 npm-pick-manifest: 9.0.0 proc-log: 4.2.0 promise-inflight: 1.0.1 @@ -3594,14 +3594,14 @@ snapshots: transitivePeerDependencies: - bluebird - '@npmcli/installed-package-contents@2.0.2': + '@npmcli/installed-package-contents@2.1.0': dependencies: npm-bundled: 3.0.0 npm-normalize-package-bin: 3.0.1 '@npmcli/node-gyp@3.0.0': {} - '@npmcli/package-json@5.0.3': + '@npmcli/package-json@5.1.0': dependencies: '@npmcli/git': 5.0.6 glob: 10.3.12 @@ -3622,7 +3622,7 @@ snapshots: '@npmcli/run-script@7.0.4': dependencies: '@npmcli/node-gyp': 3.0.0 - '@npmcli/package-json': 5.0.3 + '@npmcli/package-json': 5.1.0 '@npmcli/promise-spawn': 7.0.1 node-gyp: 10.1.0 which: 4.0.0 @@ -3638,24 +3638,24 @@ snapshots: '@octokit/graphql': 7.1.0 '@octokit/request': 8.4.0 '@octokit/request-error': 5.1.0 - '@octokit/types': 13.4.1 + '@octokit/types': 13.5.0 before-after-hook: 2.2.3 universal-user-agent: 6.0.1 '@octokit/endpoint@9.0.5': dependencies: - '@octokit/types': 13.4.1 + '@octokit/types': 13.5.0 universal-user-agent: 6.0.1 '@octokit/graphql@7.1.0': dependencies: '@octokit/request': 8.4.0 - '@octokit/types': 13.4.1 + '@octokit/types': 13.5.0 universal-user-agent: 6.0.1 '@octokit/openapi-types@20.0.0': {} - '@octokit/openapi-types@22.1.0': {} + '@octokit/openapi-types@22.2.0': {} '@octokit/plugin-enterprise-rest@6.0.1': {} @@ -3675,7 +3675,7 @@ snapshots: '@octokit/request-error@5.1.0': dependencies: - '@octokit/types': 13.4.1 + '@octokit/types': 13.5.0 deprecation: 2.3.1 once: 1.4.0 @@ -3683,7 +3683,7 @@ snapshots: dependencies: '@octokit/endpoint': 9.0.5 '@octokit/request-error': 5.1.0 - '@octokit/types': 13.4.1 + '@octokit/types': 13.5.0 universal-user-agent: 6.0.1 '@octokit/rest@20.1.0': @@ -3697,59 +3697,59 @@ snapshots: dependencies: '@octokit/openapi-types': 20.0.0 - '@octokit/types@13.4.1': + '@octokit/types@13.5.0': dependencies: - '@octokit/openapi-types': 22.1.0 + '@octokit/openapi-types': 22.2.0 '@pkgjs/parseargs@0.11.0': optional: true - '@rollup/rollup-android-arm-eabi@4.16.1': + '@rollup/rollup-android-arm-eabi@4.17.1': optional: true - '@rollup/rollup-android-arm64@4.16.1': + '@rollup/rollup-android-arm64@4.17.1': optional: true - '@rollup/rollup-darwin-arm64@4.16.1': + '@rollup/rollup-darwin-arm64@4.17.1': optional: true - '@rollup/rollup-darwin-x64@4.16.1': + '@rollup/rollup-darwin-x64@4.17.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.16.1': + '@rollup/rollup-linux-arm-gnueabihf@4.17.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.16.1': + '@rollup/rollup-linux-arm-musleabihf@4.17.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.16.1': + '@rollup/rollup-linux-arm64-gnu@4.17.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.16.1': + '@rollup/rollup-linux-arm64-musl@4.17.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.16.1': + '@rollup/rollup-linux-powerpc64le-gnu@4.17.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.16.1': + '@rollup/rollup-linux-riscv64-gnu@4.17.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.16.1': + '@rollup/rollup-linux-s390x-gnu@4.17.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.16.1': + '@rollup/rollup-linux-x64-gnu@4.17.1': optional: true - '@rollup/rollup-linux-x64-musl@4.16.1': + '@rollup/rollup-linux-x64-musl@4.17.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.16.1': + '@rollup/rollup-win32-arm64-msvc@4.17.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.16.1': + '@rollup/rollup-win32-ia32-msvc@4.17.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.16.1': + '@rollup/rollup-win32-x64-msvc@4.17.1': optional: true '@sec-ant/readable-stream@0.4.1': {} @@ -3828,54 +3828,54 @@ snapshots: '@types/vscode@1.88.0': {} - '@vitest/expect@1.5.0': + '@vitest/expect@1.5.3': dependencies: - '@vitest/spy': 1.5.0 - '@vitest/utils': 1.5.0 + '@vitest/spy': 1.5.3 + '@vitest/utils': 1.5.3 chai: 4.4.1 - '@vitest/runner@1.5.0': + '@vitest/runner@1.5.3': dependencies: - '@vitest/utils': 1.5.0 + '@vitest/utils': 1.5.3 p-limit: 5.0.0 pathe: 1.1.2 - '@vitest/snapshot@1.5.0': + '@vitest/snapshot@1.5.3': dependencies: magic-string: 0.30.10 pathe: 1.1.2 pretty-format: 29.7.0 - '@vitest/spy@1.5.0': + '@vitest/spy@1.5.3': dependencies: tinyspy: 2.2.1 - '@vitest/utils@1.5.0': + '@vitest/utils@1.5.3': dependencies: diff-sequences: 29.6.3 estree-walker: 3.0.3 loupe: 2.3.7 pretty-format: 29.7.0 - '@volar/kit@2.2.0-alpha.10(typescript@5.4.5)': + '@volar/kit@2.2.0(typescript@5.4.5)': dependencies: - '@volar/language-service': 2.2.0-alpha.10 - '@volar/typescript': 2.2.0-alpha.10 + '@volar/language-service': 2.2.0 + '@volar/typescript': 2.2.0 typesafe-path: 0.2.2 typescript: 5.4.5 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - '@volar/language-core@2.2.0-alpha.10': + '@volar/language-core@2.2.0': dependencies: - '@volar/source-map': 2.2.0-alpha.10 + '@volar/source-map': 2.2.0 - '@volar/language-server@2.2.0-alpha.10': + '@volar/language-server@2.2.0': dependencies: - '@volar/language-core': 2.2.0-alpha.10 - '@volar/language-service': 2.2.0-alpha.10 - '@volar/snapshot-document': 2.2.0-alpha.10 - '@volar/typescript': 2.2.0-alpha.10 + '@volar/language-core': 2.2.0 + '@volar/language-service': 2.2.0 + '@volar/snapshot-document': 2.2.0 + '@volar/typescript': 2.2.0 '@vscode/l10n': 0.0.16 path-browserify: 1.0.1 request-light: 0.7.0 @@ -3884,19 +3884,19 @@ snapshots: vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - '@volar/language-service@2.2.0-alpha.10': + '@volar/language-service@2.2.0': dependencies: - '@volar/language-core': 2.2.0-alpha.10 + '@volar/language-core': 2.2.0 vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - '@volar/snapshot-document@2.2.0-alpha.10': + '@volar/snapshot-document@2.2.0': dependencies: vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.11 - '@volar/source-map@2.2.0-alpha.10': + '@volar/source-map@2.2.0': dependencies: muggle-string: 0.4.1 @@ -3904,14 +3904,14 @@ snapshots: dependencies: tsl: 0.0.10(typescript@5.4.5) - '@volar/typescript@2.2.0-alpha.10': + '@volar/typescript@2.2.0': dependencies: - '@volar/language-core': 2.2.0-alpha.10 + '@volar/language-core': 2.2.0 path-browserify: 1.0.1 - '@volar/vscode@2.2.0-alpha.10': + '@volar/vscode@2.2.0': dependencies: - '@volar/language-server': 2.2.0-alpha.10 + '@volar/language-server': 2.2.0 path-browserify: 1.0.1 vscode-languageclient: 9.0.1 vscode-nls: 5.2.0 @@ -3928,66 +3928,66 @@ snapshots: '@vscode/l10n@0.0.18': {} - '@vue/compiler-core@3.4.23': + '@vue/compiler-core@3.4.26': dependencies: - '@babel/parser': 7.24.4 - '@vue/shared': 3.4.23 + '@babel/parser': 7.24.5 + '@vue/shared': 3.4.26 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.0 - '@vue/compiler-dom@3.4.23': + '@vue/compiler-dom@3.4.26': dependencies: - '@vue/compiler-core': 3.4.23 - '@vue/shared': 3.4.23 + '@vue/compiler-core': 3.4.26 + '@vue/shared': 3.4.26 '@vue/compiler-sfc@2.7.16': dependencies: - '@babel/parser': 7.24.4 + '@babel/parser': 7.24.5 postcss: 8.4.38 source-map: 0.6.1 optionalDependencies: prettier: 2.8.8 - '@vue/compiler-sfc@3.4.23': + '@vue/compiler-sfc@3.4.26': dependencies: - '@babel/parser': 7.24.4 - '@vue/compiler-core': 3.4.23 - '@vue/compiler-dom': 3.4.23 - '@vue/compiler-ssr': 3.4.23 - '@vue/shared': 3.4.23 + '@babel/parser': 7.24.5 + '@vue/compiler-core': 3.4.26 + '@vue/compiler-dom': 3.4.26 + '@vue/compiler-ssr': 3.4.26 + '@vue/shared': 3.4.26 estree-walker: 2.0.2 magic-string: 0.30.10 postcss: 8.4.38 source-map-js: 1.2.0 - '@vue/compiler-ssr@3.4.23': + '@vue/compiler-ssr@3.4.26': dependencies: - '@vue/compiler-dom': 3.4.23 - '@vue/shared': 3.4.23 + '@vue/compiler-dom': 3.4.26 + '@vue/shared': 3.4.26 - '@vue/reactivity@3.4.23': + '@vue/reactivity@3.4.26': dependencies: - '@vue/shared': 3.4.23 + '@vue/shared': 3.4.26 - '@vue/runtime-core@3.4.23': + '@vue/runtime-core@3.4.26': dependencies: - '@vue/reactivity': 3.4.23 - '@vue/shared': 3.4.23 + '@vue/reactivity': 3.4.26 + '@vue/shared': 3.4.26 - '@vue/runtime-dom@3.4.23': + '@vue/runtime-dom@3.4.26': dependencies: - '@vue/runtime-core': 3.4.23 - '@vue/shared': 3.4.23 + '@vue/runtime-core': 3.4.26 + '@vue/shared': 3.4.26 csstype: 3.1.3 - '@vue/server-renderer@3.4.23(vue@3.4.23(typescript@5.4.5))': + '@vue/server-renderer@3.4.26(vue@3.4.26(typescript@5.4.5))': dependencies: - '@vue/compiler-ssr': 3.4.23 - '@vue/shared': 3.4.23 - vue: 3.4.23(typescript@5.4.5) + '@vue/compiler-ssr': 3.4.26 + '@vue/shared': 3.4.26 + vue: 3.4.26(typescript@5.4.5) - '@vue/shared@3.4.23': {} + '@vue/shared@3.4.26': {} JSONStream@1.3.5: dependencies: @@ -4108,7 +4108,7 @@ snapshots: '@npmcli/fs': 3.1.0 fs-minipass: 3.0.3 glob: 10.3.12 - lru-cache: 10.2.0 + lru-cache: 10.2.2 minipass: 7.0.4 minipass-collect: 2.0.1 minipass-flush: 1.0.5 @@ -4773,7 +4773,7 @@ snapshots: hosted-git-info@7.0.1: dependencies: - lru-cache: 10.2.0 + lru-cache: 10.2.2 htmlparser2@8.0.2: dependencies: @@ -4846,7 +4846,7 @@ snapshots: ini@1.3.8: {} - inquirer@9.2.19: + inquirer@9.2.20: dependencies: '@inquirer/figures': 1.0.1 '@ljharb/through': 2.3.13 @@ -4988,20 +4988,20 @@ snapshots: leven@3.1.0: {} - libnpmaccess@8.0.3: + libnpmaccess@8.0.4: dependencies: npm-package-arg: 11.0.2 npm-registry-fetch: 16.2.1 transitivePeerDependencies: - supports-color - libnpmpublish@9.0.5: + libnpmpublish@9.0.6: dependencies: ci-info: 4.0.0 normalize-package-data: 6.0.0 npm-package-arg: 11.0.2 npm-registry-fetch: 16.2.1 - proc-log: 3.0.0 + proc-log: 4.2.0 semver: 7.6.0 sigstore: 2.3.0 ssri: 10.0.5 @@ -5042,7 +5042,7 @@ snapshots: dependencies: get-func-name: 2.0.2 - lru-cache@10.2.0: {} + lru-cache@10.2.2: {} lru-cache@6.0.0: dependencies: @@ -5188,7 +5188,7 @@ snapshots: dependencies: type-fest: 2.19.0 - node-abi@3.60.0: + node-abi@3.62.0: dependencies: semver: 7.6.0 @@ -5377,7 +5377,7 @@ snapshots: pacote@17.0.7: dependencies: '@npmcli/git': 5.0.6 - '@npmcli/installed-package-contents': 2.0.2 + '@npmcli/installed-package-contents': 2.1.0 '@npmcli/promise-spawn': 7.0.1 '@npmcli/run-script': 7.0.4 cacache: 18.0.2 @@ -5421,7 +5421,7 @@ snapshots: dependencies: '@babel/code-frame': 7.24.2 index-to-position: 0.1.2 - type-fest: 4.15.0 + type-fest: 4.18.0 parse-path@7.0.0: dependencies: @@ -5458,7 +5458,7 @@ snapshots: path-scurry@1.10.2: dependencies: - lru-cache: 10.2.0 + lru-cache: 10.2.2 minipass: 7.0.4 path-type@4.0.0: {} @@ -5501,7 +5501,7 @@ snapshots: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 1.0.2 - node-abi: 3.60.0 + node-abi: 3.62.0 pump: 3.0.0 rc: 1.2.8 simple-get: 4.0.1 @@ -5515,7 +5515,7 @@ snapshots: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 18.2.0 + react-is: 18.3.1 proc-log@3.0.0: {} @@ -5563,7 +5563,7 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-is@18.2.0: {} + react-is@18.3.1: {} read-package-json-fast@3.0.2: dependencies: @@ -5581,21 +5581,21 @@ snapshots: dependencies: find-up: 6.3.0 read-pkg: 8.1.0 - type-fest: 4.15.0 + type-fest: 4.18.0 read-pkg@8.1.0: dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.0 parse-json: 7.1.1 - type-fest: 4.15.0 + type-fest: 4.18.0 read-pkg@9.0.1: dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.0 parse-json: 8.1.0 - type-fest: 4.15.0 + type-fest: 4.18.0 unicorn-magic: 0.1.0 read@1.0.7: @@ -5633,26 +5633,26 @@ snapshots: reusify@1.0.4: {} - rollup@4.16.1: + rollup@4.17.1: dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.16.1 - '@rollup/rollup-android-arm64': 4.16.1 - '@rollup/rollup-darwin-arm64': 4.16.1 - '@rollup/rollup-darwin-x64': 4.16.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.16.1 - '@rollup/rollup-linux-arm-musleabihf': 4.16.1 - '@rollup/rollup-linux-arm64-gnu': 4.16.1 - '@rollup/rollup-linux-arm64-musl': 4.16.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.16.1 - '@rollup/rollup-linux-riscv64-gnu': 4.16.1 - '@rollup/rollup-linux-s390x-gnu': 4.16.1 - '@rollup/rollup-linux-x64-gnu': 4.16.1 - '@rollup/rollup-linux-x64-musl': 4.16.1 - '@rollup/rollup-win32-arm64-msvc': 4.16.1 - '@rollup/rollup-win32-ia32-msvc': 4.16.1 - '@rollup/rollup-win32-x64-msvc': 4.16.1 + '@rollup/rollup-android-arm-eabi': 4.17.1 + '@rollup/rollup-android-arm64': 4.17.1 + '@rollup/rollup-darwin-arm64': 4.17.1 + '@rollup/rollup-darwin-x64': 4.17.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.17.1 + '@rollup/rollup-linux-arm-musleabihf': 4.17.1 + '@rollup/rollup-linux-arm64-gnu': 4.17.1 + '@rollup/rollup-linux-arm64-musl': 4.17.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.17.1 + '@rollup/rollup-linux-riscv64-gnu': 4.17.1 + '@rollup/rollup-linux-s390x-gnu': 4.17.1 + '@rollup/rollup-linux-x64-gnu': 4.17.1 + '@rollup/rollup-linux-x64-musl': 4.17.1 + '@rollup/rollup-win32-arm64-msvc': 4.17.1 + '@rollup/rollup-win32-ia32-msvc': 4.17.1 + '@rollup/rollup-win32-x64-msvc': 4.17.1 fsevents: 2.3.3 run-async@3.0.0: {} @@ -5920,7 +5920,7 @@ snapshots: type-fest@3.13.1: {} - type-fest@4.15.0: {} + type-fest@4.18.0: {} typed-rest-client@1.8.11: dependencies: @@ -5980,7 +5980,7 @@ snapshots: dependencies: builtins: 5.1.0 - vite-node@1.5.0(@types/node@20.12.7): + vite-node@1.5.3(@types/node@20.12.7): dependencies: cac: 6.7.14 debug: 4.3.4 @@ -6001,18 +6001,18 @@ snapshots: dependencies: esbuild: 0.20.2 postcss: 8.4.38 - rollup: 4.16.1 + rollup: 4.17.1 optionalDependencies: '@types/node': 20.12.7 fsevents: 2.3.3 - vitest@1.5.0(@types/node@20.12.7): + vitest@1.5.3(@types/node@20.12.7): dependencies: - '@vitest/expect': 1.5.0 - '@vitest/runner': 1.5.0 - '@vitest/snapshot': 1.5.0 - '@vitest/spy': 1.5.0 - '@vitest/utils': 1.5.0 + '@vitest/expect': 1.5.3 + '@vitest/runner': 1.5.3 + '@vitest/snapshot': 1.5.3 + '@vitest/spy': 1.5.3 + '@vitest/utils': 1.5.3 acorn-walk: 8.3.2 chai: 4.4.1 debug: 4.3.4 @@ -6026,7 +6026,7 @@ snapshots: tinybench: 2.8.0 tinypool: 0.8.4 vite: 5.2.10(@types/node@20.12.7) - vite-node: 1.5.0(@types/node@20.12.7) + vite-node: 1.5.3(@types/node@20.12.7) why-is-node-running: 2.2.2 optionalDependencies: '@types/node': 20.12.7 @@ -6039,56 +6039,56 @@ snapshots: - supports-color - terser - volar-service-css@0.0.40(@volar/language-service@2.2.0-alpha.10): + volar-service-css@0.0.42(@volar/language-service@2.2.0): dependencies: - vscode-css-languageservice: 6.2.13 + vscode-css-languageservice: 6.2.14 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 optionalDependencies: - '@volar/language-service': 2.2.0-alpha.10 + '@volar/language-service': 2.2.0 - volar-service-emmet@0.0.40(@volar/language-service@2.2.0-alpha.10): + volar-service-emmet@0.0.42(@volar/language-service@2.2.0): dependencies: '@vscode/emmet-helper': 2.9.3 vscode-html-languageservice: '@johnsoncodehk/vscode-html-languageservice@5.2.0-34a5462' optionalDependencies: - '@volar/language-service': 2.2.0-alpha.10 + '@volar/language-service': 2.2.0 - volar-service-html@0.0.40(@volar/language-service@2.2.0-alpha.10): + volar-service-html@0.0.42(@volar/language-service@2.2.0): dependencies: vscode-html-languageservice: '@johnsoncodehk/vscode-html-languageservice@5.2.0-34a5462' vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 optionalDependencies: - '@volar/language-service': 2.2.0-alpha.10 + '@volar/language-service': 2.2.0 - volar-service-json@0.0.40(@volar/language-service@2.2.0-alpha.10): + volar-service-json@0.0.42(@volar/language-service@2.2.0): dependencies: - vscode-json-languageservice: 5.3.10 + vscode-json-languageservice: 5.3.11 vscode-uri: 3.0.8 optionalDependencies: - '@volar/language-service': 2.2.0-alpha.10 + '@volar/language-service': 2.2.0 - volar-service-pug-beautify@0.0.40(@volar/language-service@2.2.0-alpha.10): + volar-service-pug-beautify@0.0.42(@volar/language-service@2.2.0): dependencies: '@johnsoncodehk/pug-beautify': 0.2.2 optionalDependencies: - '@volar/language-service': 2.2.0-alpha.10 + '@volar/language-service': 2.2.0 - volar-service-pug@0.0.40: + volar-service-pug@0.0.42: dependencies: - '@volar/language-service': 2.2.0-alpha.10 + '@volar/language-service': 2.2.0 pug-lexer: 5.0.1 pug-parser: 6.0.0 - volar-service-html: 0.0.40(@volar/language-service@2.2.0-alpha.10) + volar-service-html: 0.0.42(@volar/language-service@2.2.0) vscode-html-languageservice: '@johnsoncodehk/vscode-html-languageservice@5.2.0-34a5462' vscode-languageserver-textdocument: 1.0.11 - volar-service-typescript-twoslash-queries@0.0.40(@volar/language-service@2.2.0-alpha.10): + volar-service-typescript-twoslash-queries@0.0.42(@volar/language-service@2.2.0): optionalDependencies: - '@volar/language-service': 2.2.0-alpha.10 + '@volar/language-service': 2.2.0 - volar-service-typescript@0.0.40(@volar/language-service@2.2.0-alpha.10): + volar-service-typescript@0.0.42(@volar/language-service@2.2.0): dependencies: path-browserify: 1.0.1 semver: 7.6.0 @@ -6096,7 +6096,7 @@ snapshots: vscode-languageserver-textdocument: 1.0.11 vscode-nls: 5.2.0 optionalDependencies: - '@volar/language-service': 2.2.0-alpha.10 + '@volar/language-service': 2.2.0 vsce@2.15.0: dependencies: @@ -6121,14 +6121,14 @@ snapshots: yauzl: 2.10.0 yazl: 2.5.1 - vscode-css-languageservice@6.2.13: + vscode-css-languageservice@6.2.14: dependencies: '@vscode/l10n': 0.0.18 vscode-languageserver-textdocument: 1.0.11 vscode-languageserver-types: 3.17.5 vscode-uri: 3.0.8 - vscode-json-languageservice@5.3.10: + vscode-json-languageservice@5.3.11: dependencies: '@vscode/l10n': 0.0.18 jsonc-parser: 3.2.1 @@ -6173,13 +6173,13 @@ snapshots: '@vue/compiler-sfc': 2.7.16 csstype: 3.1.3 - vue@3.4.23(typescript@5.4.5): + vue@3.4.26(typescript@5.4.5): dependencies: - '@vue/compiler-dom': 3.4.23 - '@vue/compiler-sfc': 3.4.23 - '@vue/runtime-dom': 3.4.23 - '@vue/server-renderer': 3.4.23(vue@3.4.23(typescript@5.4.5)) - '@vue/shared': 3.4.23 + '@vue/compiler-dom': 3.4.26 + '@vue/compiler-sfc': 3.4.26 + '@vue/runtime-dom': 3.4.26 + '@vue/server-renderer': 3.4.26(vue@3.4.26(typescript@5.4.5)) + '@vue/shared': 3.4.26 optionalDependencies: typescript: 5.4.5 @@ -6252,7 +6252,7 @@ snapshots: deepmerge-ts: 5.1.0 read-pkg: 9.0.1 sort-keys: 5.0.0 - type-fest: 4.15.0 + type-fest: 4.18.0 write-json-file: 5.0.0 xml2js@0.4.23: diff --git a/test-workspace/component-meta/template-slots/component-destructuring.vue b/test-workspace/component-meta/template-slots/component-destructuring.vue new file mode 100644 index 0000000000..5f5c360109 --- /dev/null +++ b/test-workspace/component-meta/template-slots/component-destructuring.vue @@ -0,0 +1,13 @@ + + + diff --git a/test-workspace/package.json b/test-workspace/package.json index 9d6e6091e5..0e2483a50a 100644 --- a/test-workspace/package.json +++ b/test-workspace/package.json @@ -1,9 +1,9 @@ { "private": true, - "version": "2.0.14", + "version": "2.0.16", "devDependencies": { "vue": "^3.4.0", - "vue-component-type-helpers": "2.0.14", + "vue-component-type-helpers": "2.0.16", "vue2": "npm:vue@2.7.16" } } diff --git a/test-workspace/tsc/vue2/tsconfig.json b/test-workspace/tsc/vue2/tsconfig.json index b5c07b027b..58dd2edb4c 100644 --- a/test-workspace/tsc/vue2/tsconfig.json +++ b/test-workspace/tsc/vue2/tsconfig.json @@ -17,6 +17,7 @@ "../vue3/#3615", "../vue3/#3656", "../vue3/#3672", + "../vue3/#4327", "../vue3/components", "../vue3/defineEmits", "../vue3/defineModel", diff --git a/test-workspace/tsc/vue3/#4326/main.vue b/test-workspace/tsc/vue3/#4326/main.vue new file mode 100644 index 0000000000..9a921fc2b0 --- /dev/null +++ b/test-workspace/tsc/vue3/#4326/main.vue @@ -0,0 +1,11 @@ + diff --git a/test-workspace/tsc/vue3/#4327/main.vue b/test-workspace/tsc/vue3/#4327/main.vue new file mode 100644 index 0000000000..f1d57d40b5 --- /dev/null +++ b/test-workspace/tsc/vue3/#4327/main.vue @@ -0,0 +1,17 @@ + + + diff --git a/test-workspace/tsc/vue3/#4333/main.vue b/test-workspace/tsc/vue3/#4333/main.vue new file mode 100644 index 0000000000..a9b63be066 --- /dev/null +++ b/test-workspace/tsc/vue3/#4333/main.vue @@ -0,0 +1,7 @@ + + +