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/.github/workflows/auto-fix.yml b/.github/workflows/auto-fix.yml index cd8ad9f5cd..d1577f6bbd 100644 --- a/.github/workflows/auto-fix.yml +++ b/.github/workflows/auto-fix.yml @@ -12,8 +12,6 @@ jobs: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v2 - with: - version: latest - uses: actions/setup-node@v4 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 25bac53823..7c873bbd2d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,8 +13,6 @@ jobs: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v2 - with: - version: latest - uses: actions/setup-node@v4 with: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 34f325a278..0dd74156bd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,8 +15,6 @@ jobs: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v2 - with: - version: latest - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 diff --git a/.github/workflows/update-html-data.yml b/.github/workflows/update-html-data.yml index d763590f8c..edb3b03aa4 100644 --- a/.github/workflows/update-html-data.yml +++ b/.github/workflows/update-html-data.yml @@ -12,8 +12,6 @@ jobs: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v2 - with: - version: latest - uses: actions/setup-node@v4 with: diff --git a/CHANGELOG.md b/CHANGELOG.md index 901d81fb4b..3db4bf45a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,59 @@ # Changelog +## 2.0.17 (2024/5/10) + +### Features + +- **language-core:** add JSDod support for component (#2377) +- **language-core:** add JSDoc support for script setup binding variables (#3409) +- **language-core:** add class component support (#4354) +- **language-service:** re-support scoped class links in template (#4357) +- **typescript-plugin:** create script setup block when auto import if needed +- **typescript-plugin:** add JSDoc support for events in template (#4365) +- **component-meta:** add JSDoc tags support for events +- **language-core:** support defineOptions (#4362) - Thanks @zhiyuanzmj + +### Bug Fixes + +- **language-core:** hover not working for intrinsic element event name +- **language-core:** showing false _declared but not used_ errors for functions used in `v-on="{}"` (#4333) +- **language-core:** fix nameless event expression formatting +- **language-core:** types imported in the `\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/data/template/zh-cn.json b/packages/language-service/data/template/zh-cn.json index e0a9e04bdf..eac0a18393 100644 --- a/packages/language-service/data/template/zh-cn.json +++ b/packages/language-service/data/template/zh-cn.json @@ -237,7 +237,7 @@ "name": "Suspense", "description": { "kind": "markdown", - "value": "\n用于协调对组件树中嵌套的异步依赖的处理。\n\n- **Props**\n\n ```ts\n interface SuspenseProps {\n timeout?: string | number\n }\n ```\n\n- **事件**\n\n - `@resolve`\n - `@pending`\n - `@fallback`\n\n- **详细信息**\n\n `` 接受两个插槽:`#default` 和 `#fallback`。它将在内存中渲染默认插槽的同时展示后备插槽内容。\n\n 如果在渲染时遇到异步依赖项 ([异步组件](https://cn.vuejs.org/guide/components/async.html)和具有 [`async setup()`](https://cn.vuejs.org/guide/built-ins/suspense.html#async-setup) 的组件),它将等到所有异步依赖项解析完成时再显示默认插槽。\n\n- **参考**[指南 - Suspense](https://cn.vuejs.org/guide/built-ins/suspense.html)\n" + "value": "\n用于协调对组件树中嵌套的异步依赖的处理。\n\n- **Props**\n\n ```ts\n interface SuspenseProps {\n timeout?: string | number\n suspensible?: boolean\n }\n ```\n\n- **事件**\n\n - `@resolve`\n - `@pending`\n - `@fallback`\n\n- **详细信息**\n\n `` 接受两个插槽:`#default` 和 `#fallback`。它将在内存中渲染默认插槽的同时展示后备插槽内容。\n\n 如果在渲染时遇到异步依赖项 ([异步组件](https://cn.vuejs.org/guide/components/async.html)和具有 [`async setup()`](https://cn.vuejs.org/guide/built-ins/suspense.html#async-setup) 的组件),它将等到所有异步依赖项解析完成时再显示默认插槽。\n\n 通过将 Suspense 设置为 `suspensible`,所有的异步依赖将由父级 Suspense 处理。请参阅[实现细节](https://github.com/vuejs/core/pull/6736)\n\n- **参考**[指南 - Suspense](https://cn.vuejs.org/guide/built-ins/suspense.html)\n" }, "attributes": [], "references": [ @@ -1156,7 +1156,7 @@ "name": "v-once", "description": { "kind": "markdown", - "value": "\n仅渲染元素和组件一次,并跳过之后的更新。\n\n- **无需传入**\n\n- **详细信息**\n\n 在随后的重新渲染,元素/组件及其所有子项将被当作静态内容并跳过渲染。这可以用来优化更新时的性能。\n\n ```html\n \n This will never change: {{msg}}\n \n
\n

comment

\n

{{msg}}

\n
\n \n \n \n
    \n
  • {{i}}
  • \n
\n ```\n\n 从 3.2 起,你也可以搭配 [`v-memo`](#v-memo) 的无效条件来缓存部分模板。\n\n- **参考**\n - [数据绑定语法 - 插值](https://cn.vuejs.org/guide/essentials/template-syntax.html#text-interpolation)\n - [v-memo](#v-memo)\n" + "value": "\n仅渲染元素和组件一次,并跳过之后的更新。\n\n- **无需传入**\n\n- **详细信息**\n\n 在随后的重新渲染,元素/组件及其所有子项将被当作静态内容并跳过渲染。这可以用来优化更新时的性能。\n\n ```html\n \n This will never change: {{msg}}\n \n
\n

Comment

\n

{{msg}}

\n
\n \n \n \n
    \n
  • {{i}}
  • \n
\n ```\n\n 从 3.2 起,你也可以搭配 [`v-memo`](#v-memo) 的无效条件来缓存部分模板。\n\n- **参考**\n - [数据绑定语法 - 插值](https://cn.vuejs.org/guide/essentials/template-syntax.html#text-interpolation)\n - [v-memo](#v-memo)\n" }, "references": [ { diff --git a/packages/language-service/index.ts b/packages/language-service/index.ts index e2183f401a..f1d89fd69f 100644 --- a/packages/language-service/index.ts +++ b/packages/language-service/index.ts @@ -3,7 +3,7 @@ export * from '@vue/language-core'; export * from './lib/ideFeatures/nameCasing'; export * from './lib/types'; -import type { ServiceContext, ServiceEnvironment, LanguageServicePlugin } from '@volar/language-service'; +import type { LanguageServicePlugin, ServiceContext, ServiceEnvironment } from '@volar/language-service'; import type { VueCompilerOptions } from './lib/types'; import { create as createEmmetPlugin } from 'volar-service-emmet'; @@ -17,9 +17,9 @@ import { create as createCssPlugin } from './lib/plugins/css'; import { create as createVueAutoDotValuePlugin } from './lib/plugins/vue-autoinsert-dotvalue'; import { create as createVueAutoWrapParenthesesPlugin } from './lib/plugins/vue-autoinsert-parentheses'; import { create as createVueAutoAddSpacePlugin } from './lib/plugins/vue-autoinsert-space'; -import { create as createVueReferencesCodeLensPlugin } from './lib/plugins/vue-codelens-references'; import { create as createVueDirectiveCommentsPlugin } from './lib/plugins/vue-directive-comments'; import { create as createVueDocumentDropPlugin } from './lib/plugins/vue-document-drop'; +import { create as createVueDocumentLinksPlugin } from './lib/plugins/vue-document-links'; import { create as createVueExtractFilePlugin } from './lib/plugins/vue-extract-file'; import { create as createVueSfcPlugin } from './lib/plugins/vue-sfc'; import { create as createVueTemplatePlugin } from './lib/plugins/vue-template'; @@ -55,7 +55,7 @@ export function getVueLanguageServicePlugins( } const languageService = (created.provide as import('volar-service-typescript').Provide)['typescript/languageService'](); const vueOptions = getVueOptions(context.env); - decorateLanguageServiceForVue(context.language, languageService, vueOptions, ts, false); + decorateLanguageServiceForVue(context.language, languageService, vueOptions, ts, false, fileName => context.env.typescript!.fileNameToUri(fileName)); return created; }, }; @@ -78,8 +78,8 @@ export function getVueLanguageServicePlugins( createVueTemplatePlugin('pug', ts, getVueOptions, getTsPluginClient), createVueSfcPlugin(), createVueTwoslashQueriesPlugin(ts, getTsPluginClient), - createVueReferencesCodeLensPlugin(), - createVueDocumentDropPlugin(ts, getTsPluginClient), + createVueDocumentLinksPlugin(), + createVueDocumentDropPlugin(ts, getVueOptions, getTsPluginClient), createVueAutoDotValuePlugin(ts, getTsPluginClient), createVueAutoWrapParenthesesPlugin(ts), createVueAutoAddSpacePlugin(), diff --git a/packages/language-service/lib/plugins/vue-codelens-references.ts b/packages/language-service/lib/plugins/vue-codelens-references.ts deleted file mode 100644 index 14ad82a0a3..0000000000 --- a/packages/language-service/lib/plugins/vue-codelens-references.ts +++ /dev/null @@ -1,51 +0,0 @@ -import type { LanguageServicePlugin, LanguageServicePluginInstance } from '@volar/language-service'; -import { SourceScript, VirtualCode, VueCodeInformation, VueVirtualCode } from '@vue/language-core'; -import type * as vscode from 'vscode-languageserver-protocol'; - -export function create(): LanguageServicePlugin { - return { - name: 'vue-codelens-references', - create(context): LanguageServicePluginInstance { - return { - provideReferencesCodeLensRanges(document) { - - return worker(document.uri, virtualCode => { - - const result: vscode.Range[] = []; - - for (const map of context.documents.getMaps(virtualCode) ?? []) { - for (const mapping of map.map.mappings) { - - if (!(mapping.data as VueCodeInformation).__referencesCodeLens) { - continue; - } - - result.push({ - start: document.positionAt(mapping.generatedOffsets[0]), - end: document.positionAt( - mapping.generatedOffsets[mapping.generatedOffsets.length - 1] - + mapping.lengths[mapping.lengths.length - 1] - ), - }); - } - } - - return result; - }); - }, - }; - - function worker(uri: string, callback: (vueFile: VirtualCode, sourceScript: SourceScript) => T) { - - const decoded = context.decodeEmbeddedDocumentUri(uri); - const sourceScript = decoded && context.language.scripts.get(decoded[0]); - const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]); - if (!virtualCode || !(sourceScript?.generated?.root instanceof VueVirtualCode) || !sourceScript) { - return; - } - - return callback(virtualCode, sourceScript); - } - }, - }; -} diff --git a/packages/language-service/lib/plugins/vue-document-drop.ts b/packages/language-service/lib/plugins/vue-document-drop.ts index eaeb32a0e6..1c6f720a9f 100644 --- a/packages/language-service/lib/plugins/vue-document-drop.ts +++ b/packages/language-service/lib/plugins/vue-document-drop.ts @@ -1,13 +1,14 @@ -import { VueVirtualCode, forEachEmbeddedCode } from '@vue/language-core'; +import { VueCompilerOptions, VueVirtualCode, forEachEmbeddedCode } from '@vue/language-core'; import { camelize, capitalize, hyphenate } from '@vue/shared'; import * as path from 'path-browserify'; import type * as vscode from 'vscode-languageserver-protocol'; import { createAddComponentToOptionEdit, getLastImportNode } from '../plugins/vue-extract-file'; -import { LanguageServicePlugin, LanguageServicePluginInstance, ServiceContext, TagNameCasing } from '../types'; +import { LanguageServicePlugin, LanguageServicePluginInstance, ServiceContext, ServiceEnvironment, TagNameCasing } from '../types'; import { getUserPreferences } from 'volar-service-typescript/lib/configs/getUserPreferences'; export function create( ts: typeof import('typescript'), + getVueOptions: (env: ServiceEnvironment) => VueCompilerOptions, getTsPluginClient?: (context: ServiceContext) => typeof import('@vue/typescript-plugin/lib/client') | undefined, ): LanguageServicePlugin { return { @@ -17,6 +18,7 @@ export function create( let casing = TagNameCasing.Pascal as TagNameCasing; // TODO const tsPluginClient = getTsPluginClient?.(context); + const vueCompilerOptions = getVueOptions(context.env); return { async provideDocumentDropEdits(document, _position, dataTransfer) { @@ -39,7 +41,7 @@ export function create( importUri = item.value as string; } } - if (!importUri?.endsWith('.vue')) { + if (!importUri || !vueCompilerOptions.extensions.some(ext => importUri.endsWith(ext))) { return; } diff --git a/packages/language-service/lib/plugins/vue-document-links.ts b/packages/language-service/lib/plugins/vue-document-links.ts new file mode 100644 index 0000000000..2bbe224bdd --- /dev/null +++ b/packages/language-service/lib/plugins/vue-document-links.ts @@ -0,0 +1,74 @@ +import type { LanguageServicePlugin, LanguageServicePluginInstance } from '@volar/language-service'; +import { Sfc, VueVirtualCode } from '@vue/language-core'; +import { tsCodegen } from '@vue/language-core/lib/plugins/vue-tsx'; +import type * as vscode from 'vscode-languageserver-protocol'; + +export function create(): LanguageServicePlugin { + return { + name: 'vue-document-links', + create(context): LanguageServicePluginInstance { + return { + provideDocumentLinks(document) { + + const decoded = context.decodeEmbeddedDocumentUri(document.uri); + const sourceScript = decoded && context.language.scripts.get(decoded[0]); + const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]); + + if (sourceScript?.generated?.root instanceof VueVirtualCode && virtualCode?.id === 'template') { + + const result: vscode.DocumentLink[] = []; + const codegen = tsCodegen.get(sourceScript.generated.root.sfc); + const scopedClasses = codegen?.generatedTemplate()?.scopedClasses ?? []; + const styleClasses = new Map(); + const option = sourceScript.generated.root.vueCompilerOptions.experimentalResolveStyleCssClasses; + + for (let i = 0; i < sourceScript.generated.root.sfc.styles.length; i++) { + const style = sourceScript.generated.root.sfc.styles[i]; + if (option === 'always' || (option === 'scoped' && style.scoped)) { + for (const className of style.classNames) { + if (!styleClasses.has(className.text.substring(1))) { + styleClasses.set(className.text.substring(1), []); + } + styleClasses.get(className.text.substring(1))!.push({ + index: i, + style, + classOffset: className.offset, + }); + } + } + } + + for (const { className, offset } of scopedClasses) { + const styles = styleClasses.get(className); + if (styles) { + for (const style of styles) { + const styleDocumentUri = context.encodeEmbeddedDocumentUri(decoded![0], 'style_' + style.index); + const styleVirtualCode = sourceScript.generated.embeddedCodes.get('style_' + style.index); + if (!styleVirtualCode) { + continue; + } + const styleDocument = context.documents.get(styleDocumentUri, styleVirtualCode.languageId, styleVirtualCode.snapshot); + const start = styleDocument.positionAt(style.classOffset); + const end = styleDocument.positionAt(style.classOffset + className.length + 1); + result.push({ + range: { + start: document.positionAt(offset), + end: document.positionAt(offset + className.length), + }, + target: context.encodeEmbeddedDocumentUri(decoded![0], 'style_' + style.index) + `#L${start.line + 1},${start.character + 1}-L${end.line + 1},${end.character + 1}`, + }); + } + } + } + + return result; + } + }, + }; + }, + }; +} diff --git a/packages/language-service/lib/plugins/vue-sfc.ts b/packages/language-service/lib/plugins/vue-sfc.ts index 3fe001d4a6..831af9c965 100644 --- a/packages/language-service/lib/plugins/vue-sfc.ts +++ b/packages/language-service/lib/plugins/vue-sfc.ts @@ -1,4 +1,4 @@ -import type { LanguageServicePlugin, LanguageServicePluginInstance } from '@volar/language-service'; +import type { LanguageServicePlugin, LanguageServicePluginInstance, ServiceContext } from '@volar/language-service'; import * as vue from '@vue/language-core'; import { create as createHtmlService } from 'volar-service-html'; import * as html from 'vscode-html-languageservice'; @@ -13,52 +13,56 @@ export interface Provide { } export function create(): LanguageServicePlugin { - return { - name: 'vue-sfc', - create(context): LanguageServicePluginInstance { - const htmlPlugin = createHtmlService({ - documentSelector: ['vue'], - useDefaultDataProvider: false, - getCustomData(context) { - sfcDataProvider ??= html.newHTMLDataProvider('vue', loadLanguageBlocks(context.env.locale ?? 'en')); - return [sfcDataProvider]; - }, - async getFormattingOptions(document, options, context) { - return await worker(document, async vueCode => { + const htmlPlugin = createHtmlService({ + documentSelector: ['vue'], + useDefaultDataProvider: false, + getCustomData(context) { + sfcDataProvider ??= html.newHTMLDataProvider('vue', loadLanguageBlocks(context.env.locale ?? 'en')); + return [sfcDataProvider]; + }, + async getFormattingOptions(document, options, context) { + return await worker(document, context, async vueCode => { - const formatSettings = await context.env.getConfiguration?.('html.format') ?? {}; - const blockTypes = ['template', 'script', 'style']; + const formatSettings = await context.env.getConfiguration?.('html.format') ?? {}; + const blockTypes = ['template', 'script', 'style']; - for (const customBlock of vueCode.sfc.customBlocks) { - blockTypes.push(customBlock.type); - } + for (const customBlock of vueCode.sfc.customBlocks) { + blockTypes.push(customBlock.type); + } - return { - ...options, - ...formatSettings, - wrapAttributes: await context.env.getConfiguration?.('vue.format.wrapAttributes') ?? 'auto', - unformatted: '', - contentUnformatted: blockTypes.join(','), - endWithNewline: options.insertFinalNewline ? true - : options.trimFinalNewlines ? false - : document.getText().endsWith('\n'), - }; - }) ?? {}; - }, - }).create(context); + return { + ...options, + ...formatSettings, + wrapAttributes: await context.env.getConfiguration?.('vue.format.wrapAttributes') ?? 'auto', + unformatted: '', + contentUnformatted: blockTypes.join(','), + endWithNewline: options.insertFinalNewline ? true + : options.trimFinalNewlines ? false + : document.getText().endsWith('\n'), + }; + }) ?? {}; + }, + }); + return { + ...htmlPlugin, + name: 'vue-sfc', + create(context): LanguageServicePluginInstance { + const htmlPluginInstance = htmlPlugin.create(context); return { - ...htmlPlugin, + ...htmlPluginInstance, provide: { 'vue/vueFile': document => { - return worker(document, vueFile => { + return worker(document, context, vueFile => { return vueFile; }); }, }, + provideDocumentLinks: undefined, + async resolveEmbeddedCodeFormattingOptions(sourceScript, virtualCode, options) { if (sourceScript.generated?.root instanceof vue.VueVirtualCode) { if (virtualCode.id === 'scriptFormat' || virtualCode.id === 'scriptSetupFormat') { @@ -80,10 +84,8 @@ export function create(): LanguageServicePlugin { return options; }, - provideDocumentLinks: undefined, - provideDocumentSymbols(document) { - return worker(document, vueSourceFile => { + return worker(document, context, vueSourceFile => { const result: vscode.DocumentSymbol[] = []; const descriptor = vueSourceFile.sfc; @@ -170,15 +172,15 @@ export function create(): LanguageServicePlugin { }); }, }; - - function worker(document: TextDocument, callback: (vueSourceFile: vue.VueVirtualCode) => T) { - const decoded = context.decodeEmbeddedDocumentUri(document.uri); - const sourceScript = decoded && context.language.scripts.get(decoded[0]); - const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]); - if (virtualCode instanceof vue.VueVirtualCode) { - return callback(virtualCode); - } - } }, }; + + function worker(document: TextDocument, context: ServiceContext, callback: (vueSourceFile: vue.VueVirtualCode) => T) { + const decoded = context.decodeEmbeddedDocumentUri(document.uri); + const sourceScript = decoded && context.language.scripts.get(decoded[0]); + const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]); + if (virtualCode instanceof vue.VueVirtualCode) { + return callback(virtualCode); + } + } } diff --git a/packages/language-service/package.json b/packages/language-service/package.json index 8591f271c9..133f9664fd 100644 --- a/packages/language-service/package.json +++ b/packages/language-service/package.json @@ -1,6 +1,6 @@ { "name": "@vue/language-service", - "version": "2.0.16", + "version": "2.0.17", "license": "MIT", "files": [ "data", @@ -16,23 +16,23 @@ "update-html-data": "node ./scripts/update-html-data.js" }, "dependencies": { - "@volar/language-core": "~2.2.0", - "@volar/language-service": "~2.2.0", - "@volar/typescript": "~2.2.0", + "@volar/language-core": "~2.2.2", + "@volar/language-service": "~2.2.2", + "@volar/typescript": "~2.2.2", "@vue/compiler-dom": "^3.4.0", - "@vue/language-core": "2.0.16", + "@vue/language-core": "2.0.17", "@vue/shared": "^3.4.0", - "@vue/typescript-plugin": "2.0.16", + "@vue/typescript-plugin": "2.0.17", "computeds": "^0.0.1", "path-browserify": "^1.0.1", - "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", + "volar-service-css": "0.0.44", + "volar-service-emmet": "0.0.44", + "volar-service-html": "0.0.44", + "volar-service-json": "0.0.44", + "volar-service-pug": "0.0.44", + "volar-service-pug-beautify": "0.0.44", + "volar-service-typescript": "0.0.44", + "volar-service-typescript-twoslash-queries": "0.0.44", "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", + "@volar/kit": "~2.2.2", "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/format.ts b/packages/language-service/tests/utils/format.ts index 88780a5078..f12f066cc1 100644 --- a/packages/language-service/tests/utils/format.ts +++ b/packages/language-service/tests/utils/format.ts @@ -6,7 +6,7 @@ import { createVueLanguagePlugin, getVueLanguageServicePlugins, resolveVueCompil const resolvedVueOptions = resolveVueCompilerOptions({}); const vueLanguagePlugin = createVueLanguagePlugin( ts, - fileId => formatter.env.typescript!.uriToFileName(fileId), + scriptId => formatter.env.typescript!.uriToFileName(scriptId), false, () => '', () => [], diff --git a/packages/tsc/package.json b/packages/tsc/package.json index f6b70dd4f1..e62eb926a0 100644 --- a/packages/tsc/package.json +++ b/packages/tsc/package.json @@ -1,6 +1,6 @@ { "name": "vue-tsc", - "version": "2.0.16", + "version": "2.0.17", "license": "MIT", "files": [ "bin", @@ -16,8 +16,8 @@ "vue-tsc": "./bin/vue-tsc.js" }, "dependencies": { - "@volar/typescript": "~2.2.0", - "@vue/language-core": "2.0.16", + "@volar/typescript": "~2.2.2", + "@vue/language-core": "2.0.17", "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 67094f61fe..d9c9f94ec2 100644 --- a/packages/tsc/tests/__snapshots__/dts.spec.ts.snap +++ b/packages/tsc/tests/__snapshots__/dts.spec.ts.snap @@ -75,7 +75,9 @@ type __VLS_Prettify = { exports[`vue-tsc-dts > Input: generic/component.vue, Output: generic/component.vue.d.ts 1`] = ` "declare const _default: (__VLS_props: { + "onUpdate:title"?: (title: string) => any; onBar?: (data: number) => any; + title?: string; foo: number; } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, __VLS_ctx?: { slots: Readonly<{ @@ -88,12 +90,14 @@ exports[`vue-tsc-dts > Input: generic/component.vue, Output: generic/component.v }): any; }; attrs: any; - emit: (e: 'bar', data: number) => void; + emit: ((e: 'bar', data: number) => void) & ((evt: "update:title", title: string) => void); }, __VLS_expose?: (exposed: import("vue").ShallowUnwrapRef<{ baz: number; }>) => void, __VLS_setup?: Promise<{ props: { + "onUpdate:title"?: (title: string) => any; onBar?: (data: number) => any; + title?: string; foo: number; } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps; expose(exposed: import("vue").ShallowUnwrapRef<{ @@ -109,13 +113,15 @@ exports[`vue-tsc-dts > Input: generic/component.vue, Output: generic/component.v foo: number; }): any; }; - emit: (e: 'bar', data: number) => void; + emit: ((e: 'bar', data: number) => void) & ((evt: "update:title", title: string) => void); }>) => import("vue").VNode & { __ctx?: { props: { + "onUpdate:title"?: (title: string) => any; onBar?: (data: number) => any; + title?: string; foo: number; } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps; expose(exposed: import("vue").ShallowUnwrapRef<{ @@ -131,7 +137,7 @@ exports[`vue-tsc-dts > Input: generic/component.vue, Output: generic/component.v foo: number; }): any; }; - emit: (e: 'bar', data: number) => void; + emit: ((e: 'bar', data: number) => void) & ((evt: "update:title", title: string) => void); }; }; export default _default; @@ -143,7 +149,9 @@ type __VLS_Prettify = { exports[`vue-tsc-dts > Input: generic/custom-extension-component.cext, Output: generic/custom-extension-component.cext.d.ts 1`] = ` "declare const _default: (__VLS_props: { + "onUpdate:title"?: (title: string) => any; onBar?: (data: number) => any; + title?: string; foo: number; } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, __VLS_ctx?: { slots: Readonly<{ @@ -156,12 +164,14 @@ exports[`vue-tsc-dts > Input: generic/custom-extension-component.cext, Output: g }): any; }; attrs: any; - emit: (e: 'bar', data: number) => void; + emit: ((e: 'bar', data: number) => void) & ((evt: "update:title", title: string) => void); }, __VLS_expose?: (exposed: import("vue").ShallowUnwrapRef<{ baz: number; }>) => void, __VLS_setup?: Promise<{ props: { + "onUpdate:title"?: (title: string) => any; onBar?: (data: number) => any; + title?: string; foo: number; } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps; expose(exposed: import("vue").ShallowUnwrapRef<{ @@ -177,13 +187,15 @@ exports[`vue-tsc-dts > Input: generic/custom-extension-component.cext, Output: g foo: number; }): any; }; - emit: (e: 'bar', data: number) => void; + emit: ((e: 'bar', data: number) => void) & ((evt: "update:title", title: string) => void); }>) => import("vue").VNode & { __ctx?: { props: { + "onUpdate:title"?: (title: string) => any; onBar?: (data: number) => any; + title?: string; foo: number; } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps; expose(exposed: import("vue").ShallowUnwrapRef<{ @@ -199,7 +211,7 @@ exports[`vue-tsc-dts > Input: generic/custom-extension-component.cext, Output: g foo: number; }): any; }; - emit: (e: 'bar', data: number) => void; + emit: ((e: 'bar', data: number) => void) & ((evt: "update:title", title: string) => void); }; }; export default _default; @@ -209,6 +221,12 @@ type __VLS_Prettify = { " `; +exports[`vue-tsc-dts > Input: generic/main.vue, Output: generic/main.vue.d.ts 1`] = ` +"declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly>, {}, {}>; +export default _default; +" +`; + exports[`vue-tsc-dts > Input: non-component/component.ts, Output: non-component/component.d.ts 1`] = ` "declare const _default: {}; export default _default; diff --git a/packages/typescript-plugin/index.ts b/packages/typescript-plugin/index.ts index 1bea049499..6bdf407992 100644 --- a/packages/typescript-plugin/index.ts +++ b/packages/typescript-plugin/index.ts @@ -64,7 +64,7 @@ function createLanguageServicePlugin(): ts.server.PluginModuleFactory { projects.set(info.project, { info, language, vueOptions }); decorateLanguageService(language, info.languageService); - decorateLanguageServiceForVue(language, info.languageService, vueOptions, ts, true); + decorateLanguageServiceForVue(language, info.languageService, vueOptions, ts, true, fileName => fileName); decorateLanguageServiceHost(ts, language, info.languageServiceHost); startNamedPipeServer(ts, info.project.projectKind, info.project.getCurrentDirectory()); diff --git a/packages/typescript-plugin/lib/common.ts b/packages/typescript-plugin/lib/common.ts index 8b2f83f0b5..b66dbecf4a 100644 --- a/packages/typescript-plugin/lib/common.ts +++ b/packages/typescript-plugin/lib/common.ts @@ -9,12 +9,14 @@ export function decorateLanguageServiceForVue( vueOptions: vue.VueCompilerOptions, ts: typeof import('typescript'), isTsPlugin: boolean, + getScriptId: (fileName: string) => string, ) { const { getCompletionsAtPosition, getCompletionEntryDetails, getCodeFixesAtPosition, getEncodedSemanticClassifications, + getQuickInfoAtPosition, } = languageService; languageService.getCompletionsAtPosition = (fileName, position, options, formattingSettings) => { @@ -49,6 +51,12 @@ export function decorateLanguageServiceForVue( break; } } + if (item.data) { + // @ts-expect-error + item.data.__isAutoImport = { + fileName, + }; + } } } } @@ -69,6 +77,27 @@ export function decorateLanguageServiceForVue( } } } + // @ts-expect-error + if (args[6]?.__isAutoImport) { + // @ts-expect-error + const { fileName } = args[6]?.__isAutoImport; + const sourceScript = language.scripts.get(getScriptId(fileName)); + if (sourceScript?.generated?.root instanceof vue.VueVirtualCode) { + const sfc = sourceScript.generated.root.getVueSfc(); + if (!sfc?.descriptor.script && !sfc?.descriptor.scriptSetup) { + for (const codeAction of details?.codeActions ?? []) { + for (const change of codeAction.changes) { + for (const textChange of change.textChanges) { + textChange.newText = `\n\n`; + break; + } + break; + } + break; + } + } + } + } return details; }; languageService.getCodeFixesAtPosition = (...args) => { @@ -77,10 +106,50 @@ export function decorateLanguageServiceForVue( result = result.filter(entry => entry.description.indexOf('__VLS_') === -1); return result; }; + languageService.getQuickInfoAtPosition = (...args) => { + const result = getQuickInfoAtPosition(...args); + if (result && result.documentation?.length === 1 && result.documentation[0].text.startsWith('__VLS_emit,')) { + const [_, emitVarName, eventName] = result.documentation[0].text.split(','); + const program = languageService.getProgram()!; + const typeChecker = program.getTypeChecker(); + const sourceFile = program.getSourceFile(args[0]); + + result.documentation = undefined; + + let symbolNode: ts.Identifier | undefined; + + sourceFile?.forEachChild(function visit(node) { + if (ts.isIdentifier(node) && node.text === emitVarName) { + symbolNode = node; + } + if (symbolNode) { + return; + } + ts.forEachChild(node, visit); + }); + + if (symbolNode) { + const emitSymbol = typeChecker.getSymbolAtLocation(symbolNode); + if (emitSymbol) { + const type = typeChecker.getTypeOfSymbolAtLocation(emitSymbol, symbolNode); + const calls = type.getCallSignatures(); + for (const call of calls) { + const callEventName = (typeChecker.getTypeOfSymbolAtLocation(call.parameters[0], symbolNode) as ts.StringLiteralType).value; + call.getJsDocTags(); + if (callEventName === eventName) { + result.documentation = call.getDocumentationComment(typeChecker); + result.tags = call.getJsDocTags(); + } + } + } + } + } + return result; + }; if (isTsPlugin) { languageService.getEncodedSemanticClassifications = (fileName, span, format) => { const result = getEncodedSemanticClassifications(fileName, span, format); - const file = language.scripts.get(fileName); + const file = language.scripts.get(getScriptId(fileName)); if (file?.generated?.root instanceof vue.VueVirtualCode) { const { template } = file.generated.root.sfc; if (template) { diff --git a/packages/typescript-plugin/lib/requests/collectExtractProps.ts b/packages/typescript-plugin/lib/requests/collectExtractProps.ts index 0ebdf05a89..c90b4544d3 100644 --- a/packages/typescript-plugin/lib/requests/collectExtractProps.ts +++ b/packages/typescript-plugin/lib/requests/collectExtractProps.ts @@ -1,14 +1,9 @@ -import { Language, VueVirtualCode, isSemanticTokensEnabled } from '@vue/language-core'; +import { VueVirtualCode, isSemanticTokensEnabled } from '@vue/language-core'; import type * as ts from 'typescript'; +import type { RequestContext } from './types'; export function collectExtractProps( - this: { - typescript: typeof import('typescript'); - languageService: ts.LanguageService; - language: Language; - isTsPlugin: boolean, - getFileId: (fileName: string) => string, - }, + this: RequestContext, fileName: string, templateCodeRange: [number, number], ) { diff --git a/packages/typescript-plugin/lib/requests/componentInfos.ts b/packages/typescript-plugin/lib/requests/componentInfos.ts index c216ed8694..24155a9f0a 100644 --- a/packages/typescript-plugin/lib/requests/componentInfos.ts +++ b/packages/typescript-plugin/lib/requests/componentInfos.ts @@ -1,14 +1,10 @@ import * as vue from '@vue/language-core'; import { camelize, capitalize } from '@vue/shared'; import type * as ts from 'typescript'; +import type { RequestContext } from './types'; export function getComponentProps( - this: { - typescript: typeof import('typescript'); - languageService: ts.LanguageService; - language: vue.Language; - getFileId: (fileName: string) => string, - }, + this: RequestContext, fileName: string, tag: string, requiredOnly = false, diff --git a/packages/typescript-plugin/lib/requests/getImportPathForFile.ts b/packages/typescript-plugin/lib/requests/getImportPathForFile.ts index d88909f2a5..00c7afa428 100644 --- a/packages/typescript-plugin/lib/requests/getImportPathForFile.ts +++ b/packages/typescript-plugin/lib/requests/getImportPathForFile.ts @@ -1,11 +1,8 @@ import type * as ts from 'typescript'; +import type { RequestContext } from './types'; export function getImportPathForFile( - this: { - typescript: typeof import('typescript'); - languageService: ts.LanguageService; - languageServiceHost: ts.LanguageServiceHost; - }, + this: RequestContext, fileName: string, incomingFileName: string, preferences: ts.UserPreferences, diff --git a/packages/typescript-plugin/lib/requests/getPropertiesAtLocation.ts b/packages/typescript-plugin/lib/requests/getPropertiesAtLocation.ts index 33ea95488f..952bf0fbd8 100644 --- a/packages/typescript-plugin/lib/requests/getPropertiesAtLocation.ts +++ b/packages/typescript-plugin/lib/requests/getPropertiesAtLocation.ts @@ -1,14 +1,9 @@ -import { Language, isCompletionEnabled } from '@vue/language-core'; +import { isCompletionEnabled } from '@vue/language-core'; import type * as ts from 'typescript'; +import type { RequestContext } from './types'; export function getPropertiesAtLocation( - this: { - typescript: typeof import('typescript'); - languageService: ts.LanguageService; - language: Language; - isTsPlugin: boolean, - getFileId: (fileName: string) => string, - }, + this: RequestContext, fileName: string, position: number, ) { diff --git a/packages/typescript-plugin/lib/requests/getQuickInfoAtPosition.ts b/packages/typescript-plugin/lib/requests/getQuickInfoAtPosition.ts index d4c3162bbc..1583551e45 100644 --- a/packages/typescript-plugin/lib/requests/getQuickInfoAtPosition.ts +++ b/packages/typescript-plugin/lib/requests/getQuickInfoAtPosition.ts @@ -1,8 +1,7 @@ -import type * as ts from 'typescript'; +import type { RequestContext } from './types'; + export function getQuickInfoAtPosition( - this: { - languageService: ts.LanguageService; - }, + this: RequestContext, fileName: string, position: number, ) { diff --git a/packages/typescript-plugin/lib/requests/types.ts b/packages/typescript-plugin/lib/requests/types.ts new file mode 100644 index 0000000000..b29478b4b2 --- /dev/null +++ b/packages/typescript-plugin/lib/requests/types.ts @@ -0,0 +1,11 @@ +import type { Language } from '@vue/language-core'; +import type * as ts from 'typescript'; + +export interface RequestContext { + typescript: typeof import('typescript'); + languageService: ts.LanguageService; + languageServiceHost: ts.LanguageServiceHost; + language: Language; + isTsPlugin: boolean; + getFileId: (fileName: string) => string; +} diff --git a/packages/typescript-plugin/lib/server.ts b/packages/typescript-plugin/lib/server.ts index d8fc0983b1..632d7ec658 100644 --- a/packages/typescript-plugin/lib/server.ts +++ b/packages/typescript-plugin/lib/server.ts @@ -1,3 +1,4 @@ +import type { Language, VueCompilerOptions } from '@vue/language-core'; import * as fs from 'fs'; import * as net from 'net'; import type * as ts from 'typescript'; @@ -6,8 +7,8 @@ import { getComponentEvents, getComponentNames, getComponentProps, getElementAtt import { getImportPathForFile } from './requests/getImportPathForFile'; import { getPropertiesAtLocation } from './requests/getPropertiesAtLocation'; import { getQuickInfoAtPosition } from './requests/getQuickInfoAtPosition'; +import type { RequestContext } from './requests/types'; import { NamedPipeServer, connect, readPipeTable, updatePipeTable } from './utils'; -import type { Language, VueCompilerOptions } from '@vue/language-core'; export interface Request { type: 'projectInfoForFile' @@ -58,12 +59,11 @@ export function startNamedPipeServer( ); } else if (project) { - const requestContext = { + const requestContext: RequestContext = { typescript: ts, languageService: project.info.languageService, languageServiceHost: project.info.languageServiceHost, language: project.language, - vueOptions: project.vueOptions, isTsPlugin: true, getFileId: (fileName: string) => fileName, }; diff --git a/packages/typescript-plugin/package.json b/packages/typescript-plugin/package.json index 802379e039..3a8b4ae5df 100644 --- a/packages/typescript-plugin/package.json +++ b/packages/typescript-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@vue/typescript-plugin", - "version": "2.0.16", + "version": "2.0.17", "license": "MIT", "files": [ "**/*.js", @@ -12,8 +12,8 @@ "directory": "packages/typescript-plugin" }, "dependencies": { - "@volar/typescript": "~2.2.0", - "@vue/language-core": "2.0.16", + "@volar/typescript": "~2.2.2", + "@vue/language-core": "2.0.17", "@vue/shared": "^3.4.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6d100e0c8d..3f14132949 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 - version: 2.2.0 + specifier: ~2.2.2 + version: 2.2.2 '@volar/tsl-config': specifier: latest version: 0.0.0-20240315.2(tsl@0.0.10(typescript@5.4.5)) @@ -28,10 +28,10 @@ importers: version: 5.4.5 vite: specifier: latest - version: 5.2.10(@types/node@20.12.7) + version: 5.2.11(@types/node@20.12.11) vitest: specifier: latest - version: 1.5.3(@types/node@20.12.7) + version: 1.6.0(@types/node@20.12.11) extensions/vscode: devDependencies: @@ -42,23 +42,23 @@ importers: specifier: ^1.82.0 version: 1.88.0 '@volar/vscode': - specifier: ~2.2.0 - version: 2.2.0 + specifier: ~2.2.2 + version: 2.2.2 '@vue/language-core': - specifier: 2.0.16 + specifier: 2.0.17 version: link:../../packages/language-core '@vue/language-server': - specifier: 2.0.16 + specifier: 2.0.17 version: link:../../packages/language-server '@vue/typescript-plugin': - specifier: 2.0.16 + specifier: 2.0.17 version: link:../../packages/typescript-plugin esbuild: specifier: latest - version: 0.20.2 + version: 0.21.1 esbuild-plugin-copy: specifier: latest - version: 2.1.1(esbuild@0.20.2) + version: 2.1.1(esbuild@0.21.1) esbuild-visualizer: specifier: latest version: 0.6.0 @@ -72,10 +72,10 @@ importers: packages/component-meta: dependencies: '@volar/typescript': - specifier: ~2.2.0 - version: 2.2.0 + specifier: ~2.2.2 + version: 2.2.2 '@vue/language-core': - specifier: 2.0.16 + specifier: 2.0.17 version: link:../language-core path-browserify: specifier: ^1.0.1 @@ -84,12 +84,12 @@ importers: specifier: '*' version: 5.4.5 vue-component-type-helpers: - specifier: 2.0.16 + specifier: 2.0.17 version: link:../component-type-helpers devDependencies: '@types/node': specifier: latest - version: 20.12.7 + version: 20.12.11 '@types/path-browserify': specifier: latest version: 1.0.2 @@ -99,8 +99,8 @@ importers: packages/language-core: dependencies: '@volar/language-core': - specifier: ~2.2.0 - version: 2.2.0 + specifier: ~2.2.2 + version: 2.2.2 '@vue/compiler-dom': specifier: ^3.4.0 version: 3.4.26 @@ -128,7 +128,7 @@ importers: version: 5.1.2 '@types/node': specifier: latest - version: 20.12.7 + version: 20.12.11 '@types/path-browserify': specifier: ^1.0.1 version: 1.0.2 @@ -139,35 +139,35 @@ importers: packages/language-plugin-pug: dependencies: '@volar/source-map': - specifier: ~2.2.0 - version: 2.2.0 + specifier: ~2.2.2 + version: 2.2.2 volar-service-pug: - specifier: 0.0.42 - version: 0.0.42 + specifier: 0.0.44 + version: 0.0.44 devDependencies: '@types/node': specifier: latest - version: 20.12.7 + version: 20.12.11 '@vue/language-core': - specifier: 2.0.16 + specifier: 2.0.17 version: link:../language-core packages/language-server: dependencies: '@volar/language-core': - specifier: ~2.2.0 - version: 2.2.0 + specifier: ~2.2.2 + version: 2.2.2 '@volar/language-server': - specifier: ~2.2.0 - version: 2.2.0 + specifier: ~2.2.2 + version: 2.2.2 '@vue/language-core': - specifier: 2.0.16 + specifier: 2.0.17 version: link:../language-core '@vue/language-service': - specifier: 2.0.16 + specifier: 2.0.17 version: link:../language-service '@vue/typescript-plugin': - specifier: 2.0.16 + specifier: 2.0.17 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 - version: 2.2.0 + specifier: ~2.2.2 + version: 2.2.2 '@volar/language-service': - specifier: ~2.2.0 - version: 2.2.0 + specifier: ~2.2.2 + version: 2.2.2 '@volar/typescript': - specifier: ~2.2.0 - version: 2.2.0 + specifier: ~2.2.2 + version: 2.2.2 '@vue/compiler-dom': specifier: ^3.4.0 version: 3.4.26 '@vue/language-core': - specifier: 2.0.16 + specifier: 2.0.17 version: link:../language-core '@vue/shared': specifier: ^3.4.0 version: 3.4.26 '@vue/typescript-plugin': - specifier: 2.0.16 + specifier: 2.0.17 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.42 - version: 0.0.42(@volar/language-service@2.2.0) + specifier: 0.0.44 + version: 0.0.44(@volar/language-service@2.2.2) volar-service-emmet: - specifier: 0.0.42 - version: 0.0.42(@volar/language-service@2.2.0) + specifier: 0.0.44 + version: 0.0.44(@volar/language-service@2.2.2) volar-service-html: - specifier: 0.0.42 - version: 0.0.42(@volar/language-service@2.2.0) + specifier: 0.0.44 + version: 0.0.44(@volar/language-service@2.2.2) volar-service-json: - specifier: 0.0.42 - version: 0.0.42(@volar/language-service@2.2.0) + specifier: 0.0.44 + version: 0.0.44(@volar/language-service@2.2.2) volar-service-pug: - specifier: 0.0.42 - version: 0.0.42 + specifier: 0.0.44 + version: 0.0.44 volar-service-pug-beautify: - specifier: 0.0.42 - version: 0.0.42(@volar/language-service@2.2.0) + specifier: 0.0.44 + version: 0.0.44(@volar/language-service@2.2.2) volar-service-typescript: - specifier: 0.0.42 - version: 0.0.42(@volar/language-service@2.2.0) + specifier: 0.0.44 + version: 0.0.44(@volar/language-service@2.2.2) volar-service-typescript-twoslash-queries: - specifier: 0.0.42 - version: 0.0.42(@volar/language-service@2.2.0) + specifier: 0.0.44 + version: 0.0.44(@volar/language-service@2.2.2) vscode-html-languageservice: specifier: npm:@johnsoncodehk/vscode-html-languageservice@5.2.0-34a5462 version: '@johnsoncodehk/vscode-html-languageservice@5.2.0-34a5462' @@ -238,13 +238,13 @@ importers: devDependencies: '@types/node': specifier: latest - version: 20.12.7 + version: 20.12.11 '@types/path-browserify': specifier: latest version: 1.0.2 '@volar/kit': - specifier: ~2.2.0 - version: 2.2.0(typescript@5.4.5) + specifier: ~2.2.2 + version: 2.2.2(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 - version: 2.2.0 + specifier: ~2.2.2 + version: 2.2.2 '@vue/language-core': - specifier: 2.0.16 + specifier: 2.0.17 version: link:../language-core semver: specifier: ^7.5.4 @@ -266,15 +266,15 @@ importers: devDependencies: '@types/node': specifier: latest - version: 20.12.7 + version: 20.12.11 packages/typescript-plugin: dependencies: '@volar/typescript': - specifier: ~2.2.0 - version: 2.2.0 + specifier: ~2.2.2 + version: 2.2.2 '@vue/language-core': - specifier: 2.0.16 + specifier: 2.0.17 version: link:../language-core '@vue/shared': specifier: ^3.4.0 @@ -282,7 +282,7 @@ importers: devDependencies: '@types/node': specifier: latest - version: 20.12.7 + version: 20.12.11 test-workspace: devDependencies: @@ -290,7 +290,7 @@ importers: specifier: ^3.4.0 version: 3.4.26(typescript@5.4.5) vue-component-type-helpers: - specifier: 2.0.16 + specifier: 2.0.17 version: link:../packages/component-type-helpers vue2: specifier: npm:vue@2.7.16 @@ -352,6 +352,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.21.1': + resolution: {integrity: sha512-O7yppwipkXvnEPjzkSXJRk2g4bS8sUx9p9oXHq9MU/U7lxUzZVsnFZMDTmeeX9bfQxrFcvOacl/ENgOh0WP9pA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.19.12': resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} engines: {node: '>=12'} @@ -364,6 +370,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.21.1': + resolution: {integrity: sha512-jXhccq6es+onw7x8MxoFnm820mz7sGa9J14kLADclmiEUH4fyj+FjR6t0M93RgtlI/awHWhtF0Wgfhqgf9gDZA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.19.12': resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} engines: {node: '>=12'} @@ -376,6 +388,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.21.1': + resolution: {integrity: sha512-hh3jKWikdnTtHCglDAeVO3Oyh8MaH8xZUaWMiCCvJ9/c3NtPqZq+CACOlGTxhddypXhl+8B45SeceYBfB/e8Ow==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.19.12': resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} engines: {node: '>=12'} @@ -388,6 +406,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.21.1': + resolution: {integrity: sha512-NPObtlBh4jQHE01gJeucqEhdoD/4ya2owSIS8lZYS58aR0x7oZo9lB2lVFxgTANSa5MGCBeoQtr+yA9oKCGPvA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.19.12': resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} engines: {node: '>=12'} @@ -400,6 +424,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.21.1': + resolution: {integrity: sha512-BLT7TDzqsVlQRmJfO/FirzKlzmDpBWwmCUlyggfzUwg1cAxVxeA4O6b1XkMInlxISdfPAOunV9zXjvh5x99Heg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.19.12': resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} engines: {node: '>=12'} @@ -412,6 +442,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.21.1': + resolution: {integrity: sha512-D3h3wBQmeS/vp93O4B+SWsXB8HvRDwMyhTNhBd8yMbh5wN/2pPWRW5o/hM3EKgk9bdKd9594lMGoTCTiglQGRQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.19.12': resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} engines: {node: '>=12'} @@ -424,6 +460,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.21.1': + resolution: {integrity: sha512-/uVdqqpNKXIxT6TyS/oSK4XE4xWOqp6fh4B5tgAwozkyWdylcX+W4YF2v6SKsL4wCQ5h1bnaSNjWPXG/2hp8AQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.19.12': resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} engines: {node: '>=12'} @@ -436,6 +478,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.21.1': + resolution: {integrity: sha512-paAkKN1n1jJitw+dAoR27TdCzxRl1FOEITx3h201R6NoXUojpMzgMLdkXVgCvaCSCqwYkeGLoe9UVNRDKSvQgw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.19.12': resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} engines: {node: '>=12'} @@ -448,6 +496,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.21.1': + resolution: {integrity: sha512-G65d08YoH00TL7Xg4LaL3gLV21bpoAhQ+r31NUu013YB7KK0fyXIt05VbsJtpqh/6wWxoLJZOvQHYnodRrnbUQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.19.12': resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} engines: {node: '>=12'} @@ -460,6 +514,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.21.1': + resolution: {integrity: sha512-tRHnxWJnvNnDpNVnsyDhr1DIQZUfCXlHSCDohbXFqmg9W4kKR7g8LmA3kzcwbuxbRMKeit8ladnCabU5f2traA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.19.12': resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} engines: {node: '>=12'} @@ -472,6 +532,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.21.1': + resolution: {integrity: sha512-tt/54LqNNAqCz++QhxoqB9+XqdsaZOtFD/srEhHYwBd3ZUOepmR1Eeot8bS+Q7BiEvy9vvKbtpHf+r6q8hF5UA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.19.12': resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} engines: {node: '>=12'} @@ -484,6 +550,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.21.1': + resolution: {integrity: sha512-MhNalK6r0nZD0q8VzUBPwheHzXPr9wronqmZrewLfP7ui9Fv1tdPmg6e7A8lmg0ziQCziSDHxh3cyRt4YMhGnQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.19.12': resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} engines: {node: '>=12'} @@ -496,6 +568,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.21.1': + resolution: {integrity: sha512-YCKVY7Zen5rwZV+nZczOhFmHaeIxR4Zn3jcmNH53LbgF6IKRwmrMywqDrg4SiSNApEefkAbPSIzN39FC8VsxPg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.19.12': resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} engines: {node: '>=12'} @@ -508,6 +586,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.21.1': + resolution: {integrity: sha512-bw7bcQ+270IOzDV4mcsKAnDtAFqKO0jVv3IgRSd8iM0ac3L8amvCrujRVt1ajBTJcpDaFhIX+lCNRKteoDSLig==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.19.12': resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} engines: {node: '>=12'} @@ -520,6 +604,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.21.1': + resolution: {integrity: sha512-ARmDRNkcOGOm1AqUBSwRVDfDeD9hGYRfkudP2QdoonBz1ucWVnfBPfy7H4JPI14eYtZruRSczJxyu7SRYDVOcg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.19.12': resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} engines: {node: '>=12'} @@ -532,6 +622,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.21.1': + resolution: {integrity: sha512-o73TcUNMuoTZlhwFdsgr8SfQtmMV58sbgq6gQq9G1xUiYnHMTmJbwq65RzMx89l0iya69lR4bxBgtWiiOyDQZA==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.19.12': resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} engines: {node: '>=12'} @@ -544,6 +640,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.21.1': + resolution: {integrity: sha512-da4/1mBJwwgJkbj4fMH7SOXq2zapgTo0LKXX1VUZ0Dxr+e8N0WbS80nSZ5+zf3lvpf8qxrkZdqkOqFfm57gXwA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-x64@0.19.12': resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} engines: {node: '>=12'} @@ -556,6 +658,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.21.1': + resolution: {integrity: sha512-CPWs0HTFe5woTJN5eKPvgraUoRHrCtzlYIAv9wBC+FAyagBSaf+UdZrjwYyTGnwPGkThV4OCI7XibZOnPvONVw==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-x64@0.19.12': resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} engines: {node: '>=12'} @@ -568,6 +676,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.21.1': + resolution: {integrity: sha512-xxhTm5QtzNLc24R0hEkcH+zCx/o49AsdFZ0Cy5zSd/5tOj4X2g3/2AJB625NoadUuc4A8B3TenLJoYdWYOYCew==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + '@esbuild/sunos-x64@0.19.12': resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} engines: {node: '>=12'} @@ -580,6 +694,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.21.1': + resolution: {integrity: sha512-CWibXszpWys1pYmbr9UiKAkX6x+Sxw8HWtw1dRESK1dLW5fFJ6rMDVw0o8MbadusvVQx1a8xuOxnHXT941Hp1A==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.19.12': resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} engines: {node: '>=12'} @@ -592,6 +712,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.21.1': + resolution: {integrity: sha512-jb5B4k+xkytGbGUS4T+Z89cQJ9DJ4lozGRSV+hhfmCPpfJ3880O31Q1srPCimm+V6UCbnigqD10EgDNgjvjerQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.19.12': resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} engines: {node: '>=12'} @@ -604,6 +730,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.21.1': + resolution: {integrity: sha512-PgyFvjJhXqHn1uxPhyN1wZ6dIomKjiLUQh1LjFvjiV1JmnkZ/oMPrfeEAZg5R/1ftz4LZWZr02kefNIQ5SKREQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.19.12': resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} engines: {node: '>=12'} @@ -616,6 +748,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.21.1': + resolution: {integrity: sha512-W9NttRZQR5ehAiqHGDnvfDaGmQOm6Fi4vSlce8mjM75x//XKuVAByohlEX6N17yZnVXxQFuh4fDRunP8ca6bfA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@hutson/parse-repository-url@5.0.0': resolution: {integrity: sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==} engines: {node: '>=10.13.0'} @@ -940,8 +1078,8 @@ packages: '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/node@20.12.7': - resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + '@types/node@20.12.11': + resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -955,51 +1093,51 @@ packages: '@types/vscode@1.88.0': resolution: {integrity: sha512-rWY+Bs6j/f1lvr8jqZTyp5arRMfovdxolcqGi+//+cPDOh8SBvzXH90e7BiSXct5HJ9HGW6jATchbRTpTJpEkw==} - '@vitest/expect@1.5.3': - resolution: {integrity: sha512-y+waPz31pOFr3rD7vWTbwiLe5+MgsMm40jTZbQE8p8/qXyBX3CQsIXRx9XK12IbY7q/t5a5aM/ckt33b4PxK2g==} + '@vitest/expect@1.6.0': + resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==} - '@vitest/runner@1.5.3': - resolution: {integrity: sha512-7PlfuReN8692IKQIdCxwir1AOaP5THfNkp0Uc4BKr2na+9lALNit7ub9l3/R7MP8aV61+mHKRGiqEKRIwu6iiQ==} + '@vitest/runner@1.6.0': + resolution: {integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==} - '@vitest/snapshot@1.5.3': - resolution: {integrity: sha512-K3mvIsjyKYBhNIDujMD2gfQEzddLe51nNOAf45yKRt/QFJcUIeTQd2trRvv6M6oCBHNVnZwFWbQ4yj96ibiDsA==} + '@vitest/snapshot@1.6.0': + resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==} - '@vitest/spy@1.5.3': - resolution: {integrity: sha512-Llj7Jgs6lbnL55WoshJUUacdJfjU2honvGcAJBxhra5TPEzTJH8ZuhI3p/JwqqfnTr4PmP7nDmOXP53MS7GJlg==} + '@vitest/spy@1.6.0': + resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==} - '@vitest/utils@1.5.3': - resolution: {integrity: sha512-rE9DTN1BRhzkzqNQO+kw8ZgfeEBCLXiHJwetk668shmNBpSagQxneT5eSqEBLP+cqSiAeecvQmbpFfdMyLcIQA==} + '@vitest/utils@1.6.0': + resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} - '@volar/kit@2.2.0': - resolution: {integrity: sha512-ZI6caoD7f7WSJC9lLOFGgp+idR8gzlK9+GzDV2urWAj4gTx0MzyB21uKZlo3hfZp72LpUmOvQBJ3n303gDE8FQ==} + '@volar/kit@2.2.2': + resolution: {integrity: sha512-mIPWV7sjuJPNL+TLnpQwFD6hW+D5tF4Axg+nv0wHjdxrik+ilWT5DnBomMftoekUF4+SxUqxMjU8kd7caOuT5Q==} peerDependencies: typescript: '*' - '@volar/language-core@2.2.0': - resolution: {integrity: sha512-a8WG9+4OdeNDW4ywABZIM6S6UN7em8uIlM/BZ2pWQUYrVmX+m8sj/X+QadvO+Li/t/LjAqbWJQtVgxdpEWLALQ==} + '@volar/language-core@2.2.2': + resolution: {integrity: sha512-GuvEL4JdxbnLVhPLICncCGT+tVW4cIz9GxXNeDofNnJ4iNTKhr5suGVsA1GLOne9PbraSjn8PlLt+pvLxuRVeQ==} - '@volar/language-server@2.2.0': - resolution: {integrity: sha512-JqUxv+YoCLWpGJLIsDp45WmEx8kNAWh+RsJ1sswjJZrezVFKcyjOfLPnKy/D0VV0myME5i3CUQTW6K/nnshBzg==} + '@volar/language-server@2.2.2': + resolution: {integrity: sha512-9KwlCDNeFCoxTIhYOJNtpQA7M0JP0DHvvwXrqN8qNNEMJT1Oe0cic0C2tUCa/poCgkiXDbUxRldwamyuTZ6ZQg==} - '@volar/language-service@2.2.0': - resolution: {integrity: sha512-hLtIFpsOcfHJ7kllUDRU2Ap1IBGEnADyE7Ea3kPwvUHM43Qn+7lvpKXxX/UL2zVcQQrvHr0348Tfi9BF1aKD5A==} + '@volar/language-service@2.2.2': + resolution: {integrity: sha512-uxooJqRhtESXaPAGs+YFJGAtZQuRO1KLG4LPPGrHHO1ZTkx0TfQPym6WNnBfVCcBXwnSlyFVv+IbAndR5oKz1w==} - '@volar/snapshot-document@2.2.0': - resolution: {integrity: sha512-CUOxMlPy3UBqzjmat0eVaCyYJqbhOEDYBZbsm1gbuQLW6kUxQs3+8eD2x6EyfaPHiZMxNuLBjSRvXfLANcYbHQ==} + '@volar/snapshot-document@2.2.2': + resolution: {integrity: sha512-JKj3aRpfoJZ84EeFN62PFw3jwKo2WTQnaemhWu/S4QNlw7q+IoDI1jNcgxZwblfBl0X5YGlRI1zYbwr8WidBTA==} - '@volar/source-map@2.2.0': - resolution: {integrity: sha512-HQlPRlHOVqCCHK8wI76ZldHkEwKsjp7E6idUc36Ekni+KJDNrqgSqPvyHQixybXPHNU7CI9Uxd9/IkxO7LuNBw==} + '@volar/source-map@2.2.2': + resolution: {integrity: sha512-vUwvZuSW6iN4JI9QRinh9EjFasx1TUtnaWMKwgWx08xz1PyYuNkLlWlrZXBZ5GGBhML0u230M/7X+AHY2h9yKg==} '@volar/tsl-config@0.0.0-20240315.2': resolution: {integrity: sha512-bv57xhmegLkfjW0/FZL/sberfmUch7yLAkXlRXj5KxHPYCjIU4T1ciPuLWrtVzCa+o0q7ykQ6aR+Q/z7MSMf6w==} peerDependencies: tsl: '*' - '@volar/typescript@2.2.0': - resolution: {integrity: sha512-wC6l4zLiiCLxF+FGaHCbWlQYf4vMsnRxYhcI6WgvaNppOD6r1g+Ef1RKRJUApALWU46Yy/JDU/TbdV6w/X6Liw==} + '@volar/typescript@2.2.2': + resolution: {integrity: sha512-WcwOREz7+uOrpjUrKhOMaOKKmyPdtqF95HWX7SE0d9hhBB1KkfahxhaAex5U9Bn43LfINHlycLoYCNEtfeKm0g==} - '@volar/vscode@2.2.0': - resolution: {integrity: sha512-WQEnvv7tDfYN7NrHRPvtnu3fZ+Uc4IVYYt/i728gaql/0StkITMdh7K1i+43MsDlY/gSwh82XrDstaxAloTJ6Q==} + '@volar/vscode@2.2.2': + resolution: {integrity: sha512-PwacgTed2Jh7bDjnScB2QBkHcAKP5FExsqmdK022lY72mTiDQVPStD6BbjcncYtfciS8I8R+6+TVRJN1uZifbA==} '@vscode/emmet-helper@2.9.3': resolution: {integrity: sha512-rB39LHWWPQYYlYfpv9qCoZOVioPCftKXXqrsyqN1mTWZM6dTnONT63Db+03vgrBbHzJN45IrgS/AGxw9iiqfEw==} @@ -1531,6 +1669,11 @@ packages: engines: {node: '>=12'} hasBin: true + esbuild@0.21.1: + resolution: {integrity: sha512-GPqx+FX7mdqulCeQ4TsGZQ3djBJkx5k7zBGtqt9ycVlWNg8llJ4RO9n2vciu8BN2zAEs6lPbPl0asZsAh7oWzg==} + engines: {node: '>=12'} + hasBin: true + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -2924,13 +3067,13 @@ packages: resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - vite-node@1.5.3: - resolution: {integrity: sha512-axFo00qiCpU/JLd8N1gu9iEYL3xTbMbMrbe5nDp9GL0nb6gurIdZLkkFogZXWnE8Oyy5kfSLwNVIcVsnhE7lgQ==} + vite-node@1.6.0: + resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite@5.2.10: - resolution: {integrity: sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==} + vite@5.2.11: + resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -2957,15 +3100,15 @@ packages: terser: optional: true - vitest@1.5.3: - resolution: {integrity: sha512-2oM7nLXylw3mQlW6GXnRriw+7YvZFk/YNV8AxIC3Z3MfFbuziLGWP9GPxxu/7nRlXhqyxBikpamr+lEEj1sUEw==} + vitest@1.6.0: + resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==} 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.3 - '@vitest/ui': 1.5.3 + '@vitest/browser': 1.6.0 + '@vitest/ui': 1.6.0 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -2982,59 +3125,59 @@ packages: jsdom: optional: true - volar-service-css@0.0.42: - resolution: {integrity: sha512-vx3kbSNiIfoyuHaygDFykI1TFkpbkIO2qJWeKNnGHlMZKy1PFLfCRmPAjkfdDvijLPnHqyKmvWwhkUht+Wiq6Q==} + volar-service-css@0.0.44: + resolution: {integrity: sha512-M3yQMlwEvtaL0F5nQj9g2qqHKeqK6fAtDS79YCDBpbxADrpG3q9I4OnbtGTw0m5W8eTn9NOVm4KkAh0OyFwp6Q==} peerDependencies: '@volar/language-service': ~2.2.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-emmet@0.0.42: - resolution: {integrity: sha512-agB2XZTS14o6+oUnIQHd7nIU08i2exZ+WYY20DjKj0NFLgbYSWIFB5Uf8mSIouMHzs28JcAMGS7ClT9Amkp6RQ==} + volar-service-emmet@0.0.44: + resolution: {integrity: sha512-qDwhfRRg9hgZF8DpWblWYV2FvY1wzhozbiiFRghQK8hEUY977G51rkQvBWRMK9BKDSUEOa7P8r9i75vgL1A2Ww==} peerDependencies: '@volar/language-service': ~2.2.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-html@0.0.42: - resolution: {integrity: sha512-6KMjwB3VMrpQgqm4gM73tDO91xJcga09vi4oyI9zayILhlUPuQW4KPjAN3NvLK4fOkcDTn20k/4gGm335ETKVw==} + volar-service-html@0.0.44: + resolution: {integrity: sha512-I6xSeixpZG0xbt1+EvuyDSLvEt8yM4B5S/oYgJo9lFa3wVVJN9Vjty5G1GFZav+FaYzUBe4VynvOPiYRwHlFUQ==} peerDependencies: '@volar/language-service': ~2.2.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-json@0.0.42: - resolution: {integrity: sha512-+wweRNbzobAG5y2UbMoI4cXRBVG5kf2J/H1Pbp6Ek+A+MOMT3xKbV+H5aKkdEoNGzKv5V2QmwpdVI2ukfOy2EQ==} + volar-service-json@0.0.44: + resolution: {integrity: sha512-CY8ARpENPdMNqovm+aCWhN3m8z+rZ2dL6kCUl7SCOebtnZ0niym1AYtWT+QQbYM8PoPXtlTZxuJ5G9CUly2Iuw==} peerDependencies: '@volar/language-service': ~2.2.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-pug-beautify@0.0.42: - resolution: {integrity: sha512-XxK9Njb2E/+uIyh12wKAZVSfaLegH+piv2pCZKDyVMH5aN/prBFseUzZZofwyHCZ+vaviAxXxgIhoiH83tImsw==} + volar-service-pug-beautify@0.0.44: + resolution: {integrity: sha512-TjJfrkqUQyoQAOkgU6nXjZ3te8lmZeUO7ZOqozF2Nk60+gYoHCUYxGqAtGEsWNn8riu8To6xULGwVPZW25KR9g==} peerDependencies: '@volar/language-service': ~2.2.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-pug@0.0.42: - resolution: {integrity: sha512-p+ESdsxkyHbRXjEhRitvovOypD7deYAlaiEgfQZo9so68mX1rDlQTHuWVVIkPUq9Umba8d8zTjwkp+L513G5Aw==} + volar-service-pug@0.0.44: + resolution: {integrity: sha512-iawFuax+vUfd8msZ0dvQKjw2A5pLNvf/Mq9umXe7Aoz1cuuIfYQX8hFQYFdwEagPjWha6QBeQnwxrAfSXNeZaA==} - volar-service-typescript-twoslash-queries@0.0.42: - resolution: {integrity: sha512-aZpN9Szu3m0y1VieKZoH7UVZsB3OD2PJ+BY6EXQ+KxlshMQhkWIEAFBYxA8ixIh0mCev3Bu4qhVbgdeD2DoXWg==} + volar-service-typescript-twoslash-queries@0.0.44: + resolution: {integrity: sha512-O2gbDMsK9yEtIz+w0CPgkece5/au+eSRf5ssx7AsVbyyZjyNogNfs30yeVDFSb4xlOIR1hnq2N1PZqUPFWZgAg==} peerDependencies: '@volar/language-service': ~2.2.0 peerDependenciesMeta: '@volar/language-service': optional: true - volar-service-typescript@0.0.42: - resolution: {integrity: sha512-INJHXZvIZjsbctXcEjITpj4DFJ6SCGbgpdUUo3vyJ+WwBeuAfncvUVZ4pvid3o8ZCDZhtpOVjFSO+4HYsZfyrg==} + volar-service-typescript@0.0.44: + resolution: {integrity: sha512-7aD43TXt7ou7boK2ytBYdleLRKKH9tQ4WFKWfMfxDjYZ+MNAg8Obx41ysCdHj00H2VkthXLaEH3czr2FLTm8YA==} peerDependencies: '@volar/language-service': ~2.2.0 peerDependenciesMeta: @@ -3244,138 +3387,207 @@ snapshots: '@esbuild/aix-ppc64@0.20.2': optional: true + '@esbuild/aix-ppc64@0.21.1': + optional: true + '@esbuild/android-arm64@0.19.12': optional: true '@esbuild/android-arm64@0.20.2': optional: true + '@esbuild/android-arm64@0.21.1': + optional: true + '@esbuild/android-arm@0.19.12': optional: true '@esbuild/android-arm@0.20.2': optional: true + '@esbuild/android-arm@0.21.1': + optional: true + '@esbuild/android-x64@0.19.12': optional: true '@esbuild/android-x64@0.20.2': optional: true + '@esbuild/android-x64@0.21.1': + optional: true + '@esbuild/darwin-arm64@0.19.12': optional: true '@esbuild/darwin-arm64@0.20.2': optional: true + '@esbuild/darwin-arm64@0.21.1': + optional: true + '@esbuild/darwin-x64@0.19.12': optional: true '@esbuild/darwin-x64@0.20.2': optional: true + '@esbuild/darwin-x64@0.21.1': + optional: true + '@esbuild/freebsd-arm64@0.19.12': optional: true '@esbuild/freebsd-arm64@0.20.2': optional: true + '@esbuild/freebsd-arm64@0.21.1': + optional: true + '@esbuild/freebsd-x64@0.19.12': optional: true '@esbuild/freebsd-x64@0.20.2': optional: true + '@esbuild/freebsd-x64@0.21.1': + optional: true + '@esbuild/linux-arm64@0.19.12': optional: true '@esbuild/linux-arm64@0.20.2': optional: true + '@esbuild/linux-arm64@0.21.1': + optional: true + '@esbuild/linux-arm@0.19.12': optional: true '@esbuild/linux-arm@0.20.2': optional: true + '@esbuild/linux-arm@0.21.1': + optional: true + '@esbuild/linux-ia32@0.19.12': optional: true '@esbuild/linux-ia32@0.20.2': optional: true + '@esbuild/linux-ia32@0.21.1': + optional: true + '@esbuild/linux-loong64@0.19.12': optional: true '@esbuild/linux-loong64@0.20.2': optional: true + '@esbuild/linux-loong64@0.21.1': + optional: true + '@esbuild/linux-mips64el@0.19.12': optional: true '@esbuild/linux-mips64el@0.20.2': optional: true + '@esbuild/linux-mips64el@0.21.1': + optional: true + '@esbuild/linux-ppc64@0.19.12': optional: true '@esbuild/linux-ppc64@0.20.2': optional: true + '@esbuild/linux-ppc64@0.21.1': + optional: true + '@esbuild/linux-riscv64@0.19.12': optional: true '@esbuild/linux-riscv64@0.20.2': optional: true + '@esbuild/linux-riscv64@0.21.1': + optional: true + '@esbuild/linux-s390x@0.19.12': optional: true '@esbuild/linux-s390x@0.20.2': optional: true + '@esbuild/linux-s390x@0.21.1': + optional: true + '@esbuild/linux-x64@0.19.12': optional: true '@esbuild/linux-x64@0.20.2': optional: true + '@esbuild/linux-x64@0.21.1': + optional: true + '@esbuild/netbsd-x64@0.19.12': optional: true '@esbuild/netbsd-x64@0.20.2': optional: true + '@esbuild/netbsd-x64@0.21.1': + optional: true + '@esbuild/openbsd-x64@0.19.12': optional: true '@esbuild/openbsd-x64@0.20.2': optional: true + '@esbuild/openbsd-x64@0.21.1': + optional: true + '@esbuild/sunos-x64@0.19.12': optional: true '@esbuild/sunos-x64@0.20.2': optional: true + '@esbuild/sunos-x64@0.21.1': + optional: true + '@esbuild/win32-arm64@0.19.12': optional: true '@esbuild/win32-arm64@0.20.2': optional: true + '@esbuild/win32-arm64@0.21.1': + optional: true + '@esbuild/win32-ia32@0.19.12': optional: true '@esbuild/win32-ia32@0.20.2': optional: true + '@esbuild/win32-ia32@0.21.1': + optional: true + '@esbuild/win32-x64@0.19.12': optional: true '@esbuild/win32-x64@0.20.2': optional: true + '@esbuild/win32-x64@0.21.1': + optional: true + '@hutson/parse-repository-url@5.0.0': {} '@inquirer/figures@1.0.1': {} @@ -3816,7 +4028,7 @@ snapshots: '@types/minimatch@5.1.2': {} - '@types/node@20.12.7': + '@types/node@20.12.11': dependencies: undici-types: 5.26.5 @@ -3828,54 +4040,54 @@ snapshots: '@types/vscode@1.88.0': {} - '@vitest/expect@1.5.3': + '@vitest/expect@1.6.0': dependencies: - '@vitest/spy': 1.5.3 - '@vitest/utils': 1.5.3 + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 chai: 4.4.1 - '@vitest/runner@1.5.3': + '@vitest/runner@1.6.0': dependencies: - '@vitest/utils': 1.5.3 + '@vitest/utils': 1.6.0 p-limit: 5.0.0 pathe: 1.1.2 - '@vitest/snapshot@1.5.3': + '@vitest/snapshot@1.6.0': dependencies: magic-string: 0.30.10 pathe: 1.1.2 pretty-format: 29.7.0 - '@vitest/spy@1.5.3': + '@vitest/spy@1.6.0': dependencies: tinyspy: 2.2.1 - '@vitest/utils@1.5.3': + '@vitest/utils@1.6.0': 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(typescript@5.4.5)': + '@volar/kit@2.2.2(typescript@5.4.5)': dependencies: - '@volar/language-service': 2.2.0 - '@volar/typescript': 2.2.0 + '@volar/language-service': 2.2.2 + '@volar/typescript': 2.2.2 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': + '@volar/language-core@2.2.2': dependencies: - '@volar/source-map': 2.2.0 + '@volar/source-map': 2.2.2 - '@volar/language-server@2.2.0': + '@volar/language-server@2.2.2': dependencies: - '@volar/language-core': 2.2.0 - '@volar/language-service': 2.2.0 - '@volar/snapshot-document': 2.2.0 - '@volar/typescript': 2.2.0 + '@volar/language-core': 2.2.2 + '@volar/language-service': 2.2.2 + '@volar/snapshot-document': 2.2.2 + '@volar/typescript': 2.2.2 '@vscode/l10n': 0.0.16 path-browserify: 1.0.1 request-light: 0.7.0 @@ -3884,19 +4096,19 @@ snapshots: vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - '@volar/language-service@2.2.0': + '@volar/language-service@2.2.2': dependencies: - '@volar/language-core': 2.2.0 + '@volar/language-core': 2.2.2 vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - '@volar/snapshot-document@2.2.0': + '@volar/snapshot-document@2.2.2': dependencies: vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.11 - '@volar/source-map@2.2.0': + '@volar/source-map@2.2.2': dependencies: muggle-string: 0.4.1 @@ -3904,14 +4116,14 @@ snapshots: dependencies: tsl: 0.0.10(typescript@5.4.5) - '@volar/typescript@2.2.0': + '@volar/typescript@2.2.2': dependencies: - '@volar/language-core': 2.2.0 + '@volar/language-core': 2.2.2 path-browserify: 1.0.1 - '@volar/vscode@2.2.0': + '@volar/vscode@2.2.2': dependencies: - '@volar/language-server': 2.2.0 + '@volar/language-server': 2.2.2 path-browserify: 1.0.1 vscode-languageclient: 9.0.1 vscode-nls: 5.2.0 @@ -4452,11 +4664,11 @@ snapshots: es-errors@1.3.0: {} - esbuild-plugin-copy@2.1.1(esbuild@0.20.2): + esbuild-plugin-copy@2.1.1(esbuild@0.21.1): dependencies: chalk: 4.1.2 chokidar: 3.6.0 - esbuild: 0.20.2 + esbuild: 0.21.1 fs-extra: 10.1.0 globby: 11.1.0 @@ -4518,6 +4730,32 @@ snapshots: '@esbuild/win32-ia32': 0.20.2 '@esbuild/win32-x64': 0.20.2 + esbuild@0.21.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.1 + '@esbuild/android-arm': 0.21.1 + '@esbuild/android-arm64': 0.21.1 + '@esbuild/android-x64': 0.21.1 + '@esbuild/darwin-arm64': 0.21.1 + '@esbuild/darwin-x64': 0.21.1 + '@esbuild/freebsd-arm64': 0.21.1 + '@esbuild/freebsd-x64': 0.21.1 + '@esbuild/linux-arm': 0.21.1 + '@esbuild/linux-arm64': 0.21.1 + '@esbuild/linux-ia32': 0.21.1 + '@esbuild/linux-loong64': 0.21.1 + '@esbuild/linux-mips64el': 0.21.1 + '@esbuild/linux-ppc64': 0.21.1 + '@esbuild/linux-riscv64': 0.21.1 + '@esbuild/linux-s390x': 0.21.1 + '@esbuild/linux-x64': 0.21.1 + '@esbuild/netbsd-x64': 0.21.1 + '@esbuild/openbsd-x64': 0.21.1 + '@esbuild/sunos-x64': 0.21.1 + '@esbuild/win32-arm64': 0.21.1 + '@esbuild/win32-ia32': 0.21.1 + '@esbuild/win32-x64': 0.21.1 + escalade@3.1.2: {} escape-string-regexp@1.0.5: {} @@ -5980,13 +6218,13 @@ snapshots: dependencies: builtins: 5.1.0 - vite-node@1.5.3(@types/node@20.12.7): + vite-node@1.6.0(@types/node@20.12.11): dependencies: cac: 6.7.14 debug: 4.3.4 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.2.10(@types/node@20.12.7) + vite: 5.2.11(@types/node@20.12.11) transitivePeerDependencies: - '@types/node' - less @@ -5997,22 +6235,22 @@ snapshots: - supports-color - terser - vite@5.2.10(@types/node@20.12.7): + vite@5.2.11(@types/node@20.12.11): dependencies: esbuild: 0.20.2 postcss: 8.4.38 rollup: 4.17.1 optionalDependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.11 fsevents: 2.3.3 - vitest@1.5.3(@types/node@20.12.7): + vitest@1.6.0(@types/node@20.12.11): dependencies: - '@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 + '@vitest/expect': 1.6.0 + '@vitest/runner': 1.6.0 + '@vitest/snapshot': 1.6.0 + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 acorn-walk: 8.3.2 chai: 4.4.1 debug: 4.3.4 @@ -6025,11 +6263,11 @@ snapshots: strip-literal: 2.1.0 tinybench: 2.8.0 tinypool: 0.8.4 - vite: 5.2.10(@types/node@20.12.7) - vite-node: 1.5.3(@types/node@20.12.7) + vite: 5.2.11(@types/node@20.12.11) + vite-node: 1.6.0(@types/node@20.12.11) why-is-node-running: 2.2.2 optionalDependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.11 transitivePeerDependencies: - less - lightningcss @@ -6039,56 +6277,56 @@ snapshots: - supports-color - terser - volar-service-css@0.0.42(@volar/language-service@2.2.0): + volar-service-css@0.0.44(@volar/language-service@2.2.2): dependencies: vscode-css-languageservice: 6.2.14 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 optionalDependencies: - '@volar/language-service': 2.2.0 + '@volar/language-service': 2.2.2 - volar-service-emmet@0.0.42(@volar/language-service@2.2.0): + volar-service-emmet@0.0.44(@volar/language-service@2.2.2): 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 + '@volar/language-service': 2.2.2 - volar-service-html@0.0.42(@volar/language-service@2.2.0): + volar-service-html@0.0.44(@volar/language-service@2.2.2): 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 + '@volar/language-service': 2.2.2 - volar-service-json@0.0.42(@volar/language-service@2.2.0): + volar-service-json@0.0.44(@volar/language-service@2.2.2): dependencies: vscode-json-languageservice: 5.3.11 vscode-uri: 3.0.8 optionalDependencies: - '@volar/language-service': 2.2.0 + '@volar/language-service': 2.2.2 - volar-service-pug-beautify@0.0.42(@volar/language-service@2.2.0): + volar-service-pug-beautify@0.0.44(@volar/language-service@2.2.2): dependencies: '@johnsoncodehk/pug-beautify': 0.2.2 optionalDependencies: - '@volar/language-service': 2.2.0 + '@volar/language-service': 2.2.2 - volar-service-pug@0.0.42: + volar-service-pug@0.0.44: dependencies: - '@volar/language-service': 2.2.0 + '@volar/language-service': 2.2.2 pug-lexer: 5.0.1 pug-parser: 6.0.0 - volar-service-html: 0.0.42(@volar/language-service@2.2.0) + volar-service-html: 0.0.44(@volar/language-service@2.2.2) vscode-html-languageservice: '@johnsoncodehk/vscode-html-languageservice@5.2.0-34a5462' vscode-languageserver-textdocument: 1.0.11 - volar-service-typescript-twoslash-queries@0.0.42(@volar/language-service@2.2.0): + volar-service-typescript-twoslash-queries@0.0.44(@volar/language-service@2.2.2): optionalDependencies: - '@volar/language-service': 2.2.0 + '@volar/language-service': 2.2.2 - volar-service-typescript@0.0.42(@volar/language-service@2.2.0): + volar-service-typescript@0.0.44(@volar/language-service@2.2.2): dependencies: path-browserify: 1.0.1 semver: 7.6.0 @@ -6096,7 +6334,7 @@ snapshots: vscode-languageserver-textdocument: 1.0.11 vscode-nls: 5.2.0 optionalDependencies: - '@volar/language-service': 2.2.0 + '@volar/language-service': 2.2.2 vsce@2.15.0: dependencies: diff --git a/test-workspace/component-meta/generic/component.vue b/test-workspace/component-meta/generic/component.vue index 39664c35ac..d5b2eebe11 100644 --- a/test-workspace/component-meta/generic/component.vue +++ b/test-workspace/component-meta/generic/component.vue @@ -3,4 +3,5 @@ defineProps<{ foo: number }>(); defineEmits<{ (e: 'bar', data: number): void }>(); defineExpose({ baz: {} as number }); defineSlots<{ default?(data: { foo: number }): any }>(); +defineModel('title'); diff --git a/test-workspace/component-meta/generic/custom-extension-component.cext b/test-workspace/component-meta/generic/custom-extension-component.cext index 39664c35ac..d5b2eebe11 100644 --- a/test-workspace/component-meta/generic/custom-extension-component.cext +++ b/test-workspace/component-meta/generic/custom-extension-component.cext @@ -3,4 +3,5 @@ defineProps<{ foo: number }>(); defineEmits<{ (e: 'bar', data: number): void }>(); defineExpose({ baz: {} as number }); defineSlots<{ default?(data: { foo: number }): any }>(); +defineModel('title'); diff --git a/test-workspace/component-meta/generic/main.vue b/test-workspace/component-meta/generic/main.vue new file mode 100644 index 0000000000..3da133f0d5 --- /dev/null +++ b/test-workspace/component-meta/generic/main.vue @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/test-workspace/package.json b/test-workspace/package.json index 0e2483a50a..7c6b1d300a 100644 --- a/test-workspace/package.json +++ b/test-workspace/package.json @@ -1,9 +1,9 @@ { "private": true, - "version": "2.0.16", + "version": "2.0.17", "devDependencies": { "vue": "^3.4.0", - "vue-component-type-helpers": "2.0.16", + "vue-component-type-helpers": "2.0.17", "vue2": "npm:vue@2.7.16" } } diff --git a/test-workspace/tsc/#4353/main.vue b/test-workspace/tsc/#4353/main.vue new file mode 100644 index 0000000000..48998976fa --- /dev/null +++ b/test-workspace/tsc/#4353/main.vue @@ -0,0 +1,8 @@ + + + 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 @@ + + + diff --git a/test-workspace/tsc/vue3/#997/main.vue b/test-workspace/tsc/vue3/#997/main.vue new file mode 100644 index 0000000000..0dd0c9b3a9 --- /dev/null +++ b/test-workspace/tsc/vue3/#997/main.vue @@ -0,0 +1,9 @@ + + + diff --git a/test-workspace/tsc/vue3/defineOptions/child.vue b/test-workspace/tsc/vue3/defineOptions/child.vue new file mode 100644 index 0000000000..b76bef2528 --- /dev/null +++ b/test-workspace/tsc/vue3/defineOptions/child.vue @@ -0,0 +1,17 @@ + + + diff --git a/test-workspace/tsc/vue3/defineProp_B/main.vue b/test-workspace/tsc/vue3/defineProp_B/main.vue index 5f8b0e80ca..9f2733aa2a 100644 --- a/test-workspace/tsc/vue3/defineProp_B/main.vue +++ b/test-workspace/tsc/vue3/defineProp_B/main.vue @@ -31,7 +31,7 @@ declare const ScriptSetupGenericExact: ( } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, attrs: any, slots: {}, - emit: any, + emit: {}, expose(_exposed: {}): void, }> ) => import('vue').VNode & { __ctx?: Awaited; };