From b8a6af34d30df1ec4493ea8b66648d457d726d98 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Mon, 8 Jul 2024 18:02:46 +0800 Subject: [PATCH] feat: Update to Volar 2.4 alpha (#879) * Upgrade to Volar 2.3 * Fix tests * bump * Remove updateVirtualCode hooks * Update Volar * Update client.ts * Update Volar * Update to 2.3.0 * Fix tests * Add muggle-string * chore: bump Volar * chore: bump Volar * Update init.test.ts * chore: bump Volar * chore: bump Volar * Update to Volar 3.4 alpha * Update pnpm-lock.yaml * Fix tests * Update init.test.ts * getVueLanguageModule -> getVueLanguagePlugin * chore: changeset --------- Co-authored-by: Princesseuh <3019731+Princesseuh@users.noreply.github.com> --- .changeset/wild-rings-bow.md | 8 + packages/astro-check/src/index.ts | 4 +- packages/language-server/package.json | 27 +- packages/language-server/src/buildMappings.ts | 21 ++ packages/language-server/src/check.ts | 24 +- packages/language-server/src/core/index.ts | 41 +-- packages/language-server/src/core/parseCSS.ts | 10 +- packages/language-server/src/core/parseJS.ts | 10 +- packages/language-server/src/core/svelte.ts | 27 +- packages/language-server/src/core/vue.ts | 27 +- .../src/languageServerPlugin.ts | 51 +-- packages/language-server/src/nodeServer.ts | 12 +- packages/language-server/src/plugins/astro.ts | 18 +- packages/language-server/src/plugins/html.ts | 31 +- .../src/plugins/typescript-addons/index.ts | 8 +- .../src/plugins/typescript/codeActions.ts | 14 +- .../src/plugins/typescript/completions.ts | 7 +- .../src/plugins/typescript/index.ts | 3 +- .../language-server/test/misc/init.test.ts | 131 ++++--- packages/language-server/test/server.ts | 1 + .../test/typescript/organize-imports.test.ts | 9 +- packages/ts-plugin/package.json | 4 +- packages/ts-plugin/src/index.ts | 6 +- packages/ts-plugin/src/language.ts | 25 +- packages/vscode/package.json | 4 +- packages/vscode/src/client.ts | 13 +- pnpm-lock.yaml | 335 +++++++++++------- 27 files changed, 478 insertions(+), 393 deletions(-) create mode 100644 .changeset/wild-rings-bow.md create mode 100644 packages/language-server/src/buildMappings.ts diff --git a/.changeset/wild-rings-bow.md b/.changeset/wild-rings-bow.md new file mode 100644 index 00000000..8cde743e --- /dev/null +++ b/.changeset/wild-rings-bow.md @@ -0,0 +1,8 @@ +--- +"@astrojs/language-server": minor +"@astrojs/check": minor +"@astrojs/ts-plugin": minor +"astro-vscode": minor +--- + +Upgrades to the latest version of Volar, the underlying framework powering the Astro language server. This update should fix some of the recent issues regarding intellisense inside script tags. diff --git a/packages/astro-check/src/index.ts b/packages/astro-check/src/index.ts index 7db08194..7070aff8 100644 --- a/packages/astro-check/src/index.ts +++ b/packages/astro-check/src/index.ts @@ -40,9 +40,7 @@ export async function check(flags: Partial): Promise { // Dynamically get the list of extensions to watch from the files already included in the project const checkedExtensions = Array.from( new Set( - checker.linter.language - .typescript!.projectHost.getScriptFileNames() - .map((fileName) => path.extname(fileName)) + checker.linter.projectHost.getScriptFileNames().map((fileName) => path.extname(fileName)) ) ); createWatcher(workspaceRoot, checkedExtensions) diff --git a/packages/language-server/package.json b/packages/language-server/package.json index 48635479..80fa8b0b 100644 --- a/packages/language-server/package.json +++ b/packages/language-server/package.json @@ -23,32 +23,33 @@ "dependencies": { "@astrojs/compiler": "^2.7.0", "@jridgewell/sourcemap-codec": "^1.4.15", - "@volar/kit": "~2.2.3", - "@volar/language-core": "~2.2.3", - "@volar/language-server": "~2.2.3", - "@volar/language-service": "~2.2.3", - "@volar/typescript": "~2.2.3", + "@volar/kit": "~2.4.0-alpha.15", + "@volar/language-core": "~2.4.0-alpha.15", + "@volar/language-server": "~2.4.0-alpha.15", + "@volar/language-service": "~2.4.0-alpha.15", + "@volar/typescript": "~2.4.0-alpha.15", "fast-glob": "^3.2.12", - "volar-service-css": "0.0.45", - "volar-service-emmet": "0.0.45", - "volar-service-html": "0.0.45", - "volar-service-prettier": "0.0.45", - "volar-service-typescript": "0.0.45", - "volar-service-typescript-twoslash-queries": "0.0.45", + "muggle-string": "^0.4.1", + "volar-service-css": "volar-2.4", + "volar-service-emmet": "volar-2.4", + "volar-service-html": "volar-2.4", + "volar-service-prettier": "volar-2.4", + "volar-service-typescript": "volar-2.4", + "volar-service-typescript-twoslash-queries": "volar-2.4", "vscode-html-languageservice": "^5.2.0", "vscode-uri": "^3.0.8" }, "devDependencies": { - "svelte": "^4.2.10", "@astrojs/svelte": "^5.0.3", "@astrojs/vue": "^4.0.8", "@types/chai": "^4.3.5", "@types/mocha": "^10.0.1", "@types/node": "^18.17.8", - "@volar/test-utils": "~2.2.3", + "@volar/test-utils": "~2.4.0-alpha.15", "astro": "^4.3.5", "chai": "^4.3.7", "mocha": "^10.2.0", + "svelte": "^4.2.10", "tsx": "^3.12.7", "typescript": "^5.2.2", "vscode-languageserver-protocol": "^3.17.5", diff --git a/packages/language-server/src/buildMappings.ts b/packages/language-server/src/buildMappings.ts new file mode 100644 index 00000000..71931010 --- /dev/null +++ b/packages/language-server/src/buildMappings.ts @@ -0,0 +1,21 @@ +import type { Mapping } from '@volar/language-core'; +import type { Segment } from 'muggle-string'; + +export function buildMappings(chunks: Segment[]) { + let length = 0; + const mappings: Mapping[] = []; + for (const segment of chunks) { + if (typeof segment === 'string') { + length += segment.length; + } else { + mappings.push({ + sourceOffsets: [segment[2]], + generatedOffsets: [length], + lengths: [segment[0].length], + data: segment[3]!, + }); + length += segment[0].length; + } + } + return mappings; +} diff --git a/packages/language-server/src/check.ts b/packages/language-server/src/check.ts index 63fc6ac0..fe158c6c 100644 --- a/packages/language-server/src/check.ts +++ b/packages/language-server/src/check.ts @@ -5,9 +5,9 @@ import { pathToFileURL } from 'node:url'; import * as kit from '@volar/kit'; import { Diagnostic, DiagnosticSeverity } from '@volar/language-server'; import fg from 'fast-glob'; -import { getLanguageModule } from './core/index.js'; -import { getSvelteLanguageModule } from './core/svelte.js'; -import { getVueLanguageModule } from './core/vue.js'; +import { getAstroLanguagePlugin } from './core/index.js'; +import { getSvelteLanguagePlugin } from './core/svelte.js'; +import { getVueLanguagePlugin } from './core/vue.js'; import { getAstroInstall } from './utils.js'; import { create as createAstroService } from './plugins/astro.js'; @@ -62,9 +62,7 @@ export class AstroCheck { | undefined; }): Promise { let files = ( - fileNames !== undefined - ? fileNames - : this.linter.language.typescript!.projectHost.getScriptFileNames() + fileNames !== undefined ? fileNames : this.linter.projectHost.getScriptFileNames() ).filter((file) => { // We don't have the same understanding of Svelte and Vue files as their own respective tools (vue-tsc, svelte-check) // So we don't want to check them here @@ -106,7 +104,7 @@ export class AstroCheck { console.info(errorText); } - const fileSnapshot = this.linter.language.typescript!.projectHost.getScriptSnapshot(file); + const fileSnapshot = this.linter.projectHost.getScriptSnapshot(file); const fileContent = fileSnapshot?.getText(0, fileSnapshot.getLength()); result.fileResult.push({ @@ -139,17 +137,17 @@ export class AstroCheck { const tsconfigPath = this.getTsconfig(); const astroInstall = getAstroInstall([this.workspacePath]); - const languages = [ - getLanguageModule(typeof astroInstall === 'string' ? undefined : astroInstall, this.ts), - getSvelteLanguageModule(), - getVueLanguageModule(), + const languagePlugins = [ + getAstroLanguagePlugin(typeof astroInstall === 'string' ? undefined : astroInstall, this.ts), + getSvelteLanguagePlugin(), + getVueLanguagePlugin(), ]; const services = [...createTypeScriptServices(this.ts), createAstroService(this.ts)]; if (tsconfigPath) { - this.linter = kit.createTypeScriptChecker(languages, services, tsconfigPath); + this.linter = kit.createTypeScriptChecker(languagePlugins, services, tsconfigPath); } else { - this.linter = kit.createTypeScriptInferredChecker(languages, services, () => { + this.linter = kit.createTypeScriptInferredChecker(languagePlugins, services, () => { return fg.sync('**/*.astro', { cwd: this.workspacePath, ignore: ['node_modules'], diff --git a/packages/language-server/src/core/index.ts b/packages/language-server/src/core/index.ts index 5acdb4e7..beb83808 100644 --- a/packages/language-server/src/core/index.ts +++ b/packages/language-server/src/core/index.ts @@ -2,14 +2,14 @@ import * as path from 'node:path'; import type { DiagnosticMessage } from '@astrojs/compiler/types'; import { type CodeMapping, - type ExtraServiceScript, type LanguagePlugin, type VirtualCode, forEachEmbeddedCode, } from '@volar/language-core'; +import type { TypeScriptExtraServiceScript } from '@volar/typescript'; import type ts from 'typescript'; import type { HTMLDocument } from 'vscode-html-languageservice'; -import { URI } from 'vscode-uri'; +import type { URI } from 'vscode-uri'; import { type AstroInstall, getLanguageServerTypesDir } from '../utils.js'; import { astro2tsx } from './astro2tsx'; import { AstroMetadata, getAstroMetadata } from './parseAstro'; @@ -17,28 +17,22 @@ import { extractStylesheets } from './parseCSS'; import { parseHTML } from './parseHTML'; import { extractScriptTags } from './parseJS.js'; -export function getLanguageModule( +export function getAstroLanguagePlugin( astroInstall: AstroInstall | undefined, ts: typeof import('typescript') -): LanguagePlugin { +): LanguagePlugin { return { - getLanguageId(scriptId) { - if (scriptId.endsWith('.astro')) { + getLanguageId(uri) { + if (uri.path.endsWith('.astro')) { return 'astro'; } }, - createVirtualCode(scriptId, languageId, snapshot) { + createVirtualCode(uri, languageId, snapshot) { if (languageId === 'astro') { - const fileName = scriptId.includes('://') - ? URI.parse(scriptId).fsPath.replace(/\\/g, '/') - : scriptId; + const fileName = uri.fsPath.replace(/\\/g, '/'); return new AstroVirtualCode(fileName, snapshot); } }, - updateVirtualCode(_scriptId, astroCode, snapshot) { - astroCode.update(snapshot); - return astroCode; - }, typescript: { extraFileExtensions: [{ extension: 'astro', isMixedContent: true, scriptKind: 7 }], getServiceScript(astroCode) { @@ -54,7 +48,7 @@ export function getLanguageModule( return undefined; }, getExtraServiceScripts(fileName, astroCode) { - const result: ExtraServiceScript[] = []; + const result: TypeScriptExtraServiceScript[] = []; for (const code of forEachEmbeddedCode(astroCode)) { if (code.id.endsWith('.mjs') || code.id.endsWith('.mts')) { const fileExtension = code.id.endsWith('.mjs') ? '.mjs' : '.mts'; @@ -150,19 +144,6 @@ export class AstroVirtualCode implements VirtualCode { public fileName: string, public snapshot: ts.IScriptSnapshot ) { - this.onSnapshotUpdated(); - } - - get hasCompilationErrors(): boolean { - return this.compilerDiagnostics.filter((diag) => diag.severity === 1).length > 0; - } - - public update(newSnapshot: ts.IScriptSnapshot) { - this.snapshot = newSnapshot; - this.onSnapshotUpdated(); - } - - onSnapshotUpdated() { this.mappings = [ { sourceOffsets: [0], @@ -220,4 +201,8 @@ export class AstroVirtualCode implements VirtualCode { this.compilerDiagnostics.push(...tsx.diagnostics); this.embeddedCodes.push(tsx.virtualCode); } + + get hasCompilationErrors(): boolean { + return this.compilerDiagnostics.filter((diag) => diag.severity === 1).length > 0; + } } diff --git a/packages/language-server/src/core/parseCSS.ts b/packages/language-server/src/core/parseCSS.ts index 977f227e..fabb1fbc 100644 --- a/packages/language-server/src/core/parseCSS.ts +++ b/packages/language-server/src/core/parseCSS.ts @@ -1,14 +1,10 @@ import type { ParentNode, ParseResult } from '@astrojs/compiler/types'; import { is } from '@astrojs/compiler/utils'; -import { - type CodeInformation, - Segment, - type VirtualCode, - buildMappings, - toString, -} from '@volar/language-core'; +import type { CodeInformation, VirtualCode } from '@volar/language-core'; +import { Segment, toString } from 'muggle-string'; import type ts from 'typescript'; import type { HTMLDocument, Node } from 'vscode-html-languageservice'; +import { buildMappings } from '../buildMappings.js'; import type { AttributeNodeWithPosition } from './compilerUtils.js'; export function extractStylesheets( diff --git a/packages/language-server/src/core/parseJS.ts b/packages/language-server/src/core/parseJS.ts index 57bd4683..f4a6e4c9 100644 --- a/packages/language-server/src/core/parseJS.ts +++ b/packages/language-server/src/core/parseJS.ts @@ -1,14 +1,10 @@ import type { ParentNode, ParseResult } from '@astrojs/compiler/types'; import { is } from '@astrojs/compiler/utils'; -import { - type CodeInformation, - type Segment, - type VirtualCode, - buildMappings, - toString, -} from '@volar/language-core'; +import type { CodeInformation, VirtualCode } from '@volar/language-core'; +import { Segment, toString } from 'muggle-string'; import type ts from 'typescript'; import type { HTMLDocument, Node } from 'vscode-html-languageservice'; +import { buildMappings } from '../buildMappings'; export function extractScriptTags( snapshot: ts.IScriptSnapshot, diff --git a/packages/language-server/src/core/svelte.ts b/packages/language-server/src/core/svelte.ts index e22ae379..2243a3c8 100644 --- a/packages/language-server/src/core/svelte.ts +++ b/packages/language-server/src/core/svelte.ts @@ -6,28 +6,22 @@ import { forEachEmbeddedCode, } from '@volar/language-core'; import type ts from 'typescript'; -import { URI } from 'vscode-uri'; +import type { URI } from 'vscode-uri'; import { framework2tsx } from './utils.js'; -export function getSvelteLanguageModule(): LanguagePlugin { +export function getSvelteLanguagePlugin(): LanguagePlugin { return { - getLanguageId(scriptId) { - if (scriptId.endsWith('.svelte')) { + getLanguageId(uri) { + if (uri.path.endsWith('.svelte')) { return 'svelte'; } }, - createVirtualCode(scriptId, languageId, snapshot) { + createVirtualCode(uri, languageId, snapshot) { if (languageId === 'svelte') { - const fileName = scriptId.includes('://') - ? URI.parse(scriptId).fsPath.replace(/\\/g, '/') - : scriptId; + const fileName = uri.fsPath.replace(/\\/g, '/'); return new SvelteVirtualCode(fileName, snapshot); } }, - updateVirtualCode(_scriptId, svelteCode, snapshot) { - svelteCode.update(snapshot); - return svelteCode; - }, typescript: { extraFileExtensions: [{ extension: 'svelte', isMixedContent: true, scriptKind: 7 }], getServiceScript(svelteCode) { @@ -56,15 +50,6 @@ class SvelteVirtualCode implements VirtualCode { public fileName: string, public snapshot: ts.IScriptSnapshot ) { - this.onSnapshotUpdated(); - } - - public update(newSnapshot: ts.IScriptSnapshot) { - this.snapshot = newSnapshot; - this.onSnapshotUpdated(); - } - - private onSnapshotUpdated() { this.mappings = []; this.embeddedCodes = []; diff --git a/packages/language-server/src/core/vue.ts b/packages/language-server/src/core/vue.ts index 34bcb247..8c026adf 100644 --- a/packages/language-server/src/core/vue.ts +++ b/packages/language-server/src/core/vue.ts @@ -6,28 +6,22 @@ import { forEachEmbeddedCode, } from '@volar/language-core'; import type ts from 'typescript'; -import { URI } from 'vscode-uri'; +import type { URI } from 'vscode-uri'; import { framework2tsx } from './utils.js'; -export function getVueLanguageModule(): LanguagePlugin { +export function getVueLanguagePlugin(): LanguagePlugin { return { - getLanguageId(scriptId) { - if (scriptId.endsWith('.vue')) { + getLanguageId(uri) { + if (uri.path.endsWith('.vue')) { return 'vue'; } }, - createVirtualCode(scriptId, languageId, snapshot) { + createVirtualCode(uri, languageId, snapshot) { if (languageId === 'vue') { - const fileName = scriptId.includes('://') - ? URI.parse(scriptId).fsPath.replace(/\\/g, '/') - : scriptId; + const fileName = uri.fsPath.replace(/\\/g, '/'); return new VueVirtualCode(fileName, snapshot); } }, - updateVirtualCode(_scriptId, vueCode, snapshot) { - vueCode.update(snapshot); - return vueCode; - }, typescript: { extraFileExtensions: [{ extension: 'vue', isMixedContent: true, scriptKind: 7 }], getServiceScript(vueCode) { @@ -56,15 +50,6 @@ class VueVirtualCode implements VirtualCode { public fileName: string, public snapshot: ts.IScriptSnapshot ) { - this.onSnapshotUpdated(); - } - - public update(newSnapshot: ts.IScriptSnapshot) { - this.snapshot = newSnapshot; - this.onSnapshotUpdated(); - } - - private onSnapshotUpdated() { this.mappings = []; this.embeddedCodes = []; diff --git a/packages/language-server/src/languageServerPlugin.ts b/packages/language-server/src/languageServerPlugin.ts index b355809f..993d8f59 100644 --- a/packages/language-server/src/languageServerPlugin.ts +++ b/packages/language-server/src/languageServerPlugin.ts @@ -1,15 +1,14 @@ import { Connection, LanguagePlugin, + LanguageServiceEnvironment, MessageType, - ServiceEnvironment, ShowMessageNotification, - VirtualCode, } from '@volar/language-server/node'; import { URI } from 'vscode-uri'; -import { getLanguageModule } from './core'; -import { getSvelteLanguageModule } from './core/svelte.js'; -import { getVueLanguageModule } from './core/vue.js'; +import { getAstroLanguagePlugin } from './core'; +import { getSvelteLanguagePlugin } from './core/svelte.js'; +import { getVueLanguagePlugin } from './core/vue.js'; import { getPrettierPluginPath, importPrettier } from './importPackage.js'; import { getAstroInstall } from './utils.js'; @@ -27,17 +26,17 @@ import { create as createTypeScriptServices } from './plugins/typescript/index.j export function getLanguagePlugins( connection: Connection, ts: typeof import('typescript'), - serviceEnv: ServiceEnvironment, + serviceEnv: LanguageServiceEnvironment, tsconfig: string | undefined ) { - const languagePlugins: LanguagePlugin[] = [ - getVueLanguageModule(), - getSvelteLanguageModule(), + const languagePlugins: LanguagePlugin[] = [ + getVueLanguagePlugin(), + getSvelteLanguagePlugin(), ]; const rootPath = tsconfig ? tsconfig.split('/').slice(0, -1).join('/') - : serviceEnv.typescript!.uriToFileName(serviceEnv.workspaceFolder); + : serviceEnv.workspaceFolders[0]!.fsPath; const nearestPackageJson = ts.findConfigFile(rootPath, ts.sys.fileExists, 'package.json'); const astroInstall = getAstroInstall([rootPath], { @@ -53,7 +52,7 @@ export function getLanguagePlugins( } languagePlugins.unshift( - getLanguageModule(typeof astroInstall === 'string' ? undefined : astroInstall, ts) + getAstroLanguagePlugin(typeof astroInstall === 'string' ? undefined : astroInstall, ts) ); return languagePlugins; @@ -77,26 +76,28 @@ export function getLanguageServicePlugins(connection: Connection, ts: typeof imp return createPrettierService( (context) => { - const workspaceUri = URI.parse(context.env.workspaceFolder); - if (workspaceUri.scheme === 'file') { - prettier = importPrettier(workspaceUri.fsPath); - prettierPluginPath = getPrettierPluginPath(workspaceUri.fsPath); - if ((!prettier || !prettierPluginPath) && !hasShownNotification) { - connection.sendNotification(ShowMessageNotification.type, { - message: - "Couldn't load `prettier` or `prettier-plugin-astro`. Formatting will not work. Please make sure those two packages are installed into your project and restart the language server.", - type: MessageType.Warning, - }); - hasShownNotification = true; + for (const workspaceFolder of context.env.workspaceFolders) { + if (workspaceFolder.scheme === 'file') { + prettier = importPrettier(workspaceFolder.fsPath); + prettierPluginPath = getPrettierPluginPath(workspaceFolder.fsPath); + if ((!prettier || !prettierPluginPath) && !hasShownNotification) { + connection.sendNotification(ShowMessageNotification.type, { + message: + "Couldn't load `prettier` or `prettier-plugin-astro`. Formatting will not work. Please make sure those two packages are installed into your project and restart the language server.", + type: MessageType.Warning, + }); + hasShownNotification = true; + } + return prettier; } - return prettier; } }, { documentSelector: ['astro'], getFormattingOptions: async (prettierInstance, document, formatOptions, context) => { - const documentUri = context.decodeEmbeddedDocumentUri(document.uri)?.[0] ?? document.uri; - const filePath = URI.parse(documentUri).fsPath; + const uri = URI.parse(document.uri); + const documentUri = context.decodeEmbeddedDocumentUri(uri)?.[0] ?? uri; + const filePath = documentUri.fsPath; if (!filePath) { return {}; diff --git a/packages/language-server/src/nodeServer.ts b/packages/language-server/src/nodeServer.ts index bb873ce6..a62421d1 100644 --- a/packages/language-server/src/nodeServer.ts +++ b/packages/language-server/src/nodeServer.ts @@ -1,7 +1,7 @@ import { createConnection, createServer, - createTypeScriptProjectProvider, + createTypeScriptProject, loadTsdkByPath, } from '@volar/language-server/node'; import { getLanguagePlugins, getLanguageServicePlugins } from './languageServerPlugin.js'; @@ -24,10 +24,14 @@ connection.onInitialize((params) => { return server.initialize( params, + createTypeScriptProject(typescript, diagnosticMessages, ({ env, configFileName }) => { + return { + languagePlugins: getLanguagePlugins(connection, typescript, env, configFileName), + setup() {}, + }; + }), getLanguageServicePlugins(connection, typescript), - createTypeScriptProjectProvider(typescript, diagnosticMessages, (env, project) => - getLanguagePlugins(connection, typescript, env, project.configFileName) - ) + { pullModelDiagnostics: params.initializationOptions?.pullModelDiagnostics } ); }); diff --git a/packages/language-server/src/plugins/astro.ts b/packages/language-server/src/plugins/astro.ts index cb3b5a62..600ca560 100644 --- a/packages/language-server/src/plugins/astro.ts +++ b/packages/language-server/src/plugins/astro.ts @@ -15,19 +15,26 @@ import { import fg from 'fast-glob'; import type { Provide } from 'volar-service-typescript'; import type { TextDocument } from 'vscode-html-languageservice'; +import { URI } from 'vscode-uri'; import { AstroVirtualCode } from '../core/index.js'; import { isJSDocument } from './utils.js'; export const create = (ts: typeof import('typescript')): LanguageServicePlugin => { return { - triggerCharacters: ['-'], + capabilities: { + completionProvider: { + triggerCharacters: ['-'], + }, + diagnosticProvider: {}, + codeLensProvider: {}, + }, create(context): LanguageServicePluginInstance { return { provideCompletionItems(document, position, completionContext, token) { if (token.isCancellationRequested) return null; let items: CompletionItem[] = []; - const decoded = context.decodeEmbeddedDocumentUri(document.uri); + const decoded = context.decodeEmbeddedDocumentUri(URI.parse(document.uri)); const sourceScript = decoded && context.language.scripts.get(decoded[0]); const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]); if (!(virtualCode instanceof AstroVirtualCode)) return; @@ -45,7 +52,7 @@ export const create = (ts: typeof import('typescript')): LanguageServicePlugin = provideSemanticDiagnostics(document, token) { if (token.isCancellationRequested) return []; - const decoded = context.decodeEmbeddedDocumentUri(document.uri); + const decoded = context.decodeEmbeddedDocumentUri(URI.parse(document.uri)); const sourceScript = decoded && context.language.scripts.get(decoded[0]); const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]); if (!(virtualCode instanceof AstroVirtualCode)) return; @@ -68,6 +75,9 @@ export const create = (ts: typeof import('typescript')): LanguageServicePlugin = if (token.isCancellationRequested) return; if (!isJSDocument(document.languageId)) return; + if (!context.project.typescript) return; + + const { uriConverter } = context.project.typescript; const languageService = context.inject( 'typescript/languageService' ); @@ -88,7 +98,7 @@ export const create = (ts: typeof import('typescript')): LanguageServicePlugin = globcodeLens.push( getGlobResultAsCodeLens( globArgument.getText().slice(1, -1), - dirname(context.env.typescript!.uriToFileName(document.uri)), + dirname(uriConverter.asFileName(URI.parse(document.uri))), document.positionAt(node.arguments.pos) ) ); diff --git a/packages/language-server/src/plugins/html.ts b/packages/language-server/src/plugins/html.ts index 5d732786..c51ba534 100644 --- a/packages/language-server/src/plugins/html.ts +++ b/packages/language-server/src/plugins/html.ts @@ -11,19 +11,22 @@ import { astroAttributes, astroElements, classListAttribute } from './html-data. import { isInComponentStartTag } from './utils.js'; export const create = (): LanguageServicePlugin => { - const htmlServicePlugin = createHtmlService({ + const htmlPlugin = createHtmlService({ getCustomData: async (context) => { const customData: string[] = (await context.env.getConfiguration?.('html.customData')) ?? []; const newData: html.IHTMLDataProvider[] = []; for (const customDataPath of customData) { - const uri = Utils.resolvePath(URI.parse(context.env.workspaceFolder), customDataPath); - const json = await context.env.fs?.readFile?.(uri.toString()); - if (json) { - try { - const data = JSON.parse(json); - newData.push(html.newHTMLDataProvider(customDataPath, data)); - } catch (error) { - console.error(error); + for (const workspaceFolder of context.env.workspaceFolders) { + const uri = Utils.resolvePath(workspaceFolder, customDataPath); + const json = await context.env.fs?.readFile?.(uri); + if (json) { + try { + const data = JSON.parse(json); + newData.push(html.newHTMLDataProvider(customDataPath, data)); + } catch (error) { + console.error(error); + } + break; } } } @@ -31,16 +34,16 @@ export const create = (): LanguageServicePlugin => { }, }); return { - ...htmlServicePlugin, + ...htmlPlugin, create(context): LanguageServicePluginInstance { - const htmlPlugin = htmlServicePlugin.create(context); + const htmlPluginInstance = htmlPlugin.create(context); return { - ...htmlPlugin, + ...htmlPluginInstance, async provideCompletionItems(document, position, completionContext, token) { if (document.languageId !== 'html') return; - const decoded = context.decodeEmbeddedDocumentUri(document.uri); + const decoded = context.decodeEmbeddedDocumentUri(URI.parse(document.uri)); const sourceScript = decoded && context.language.scripts.get(decoded[0]); const root = sourceScript?.generated?.root; if (!(root instanceof AstroVirtualCode)) return; @@ -50,7 +53,7 @@ export const create = (): LanguageServicePlugin => { return null; } - const completions = await htmlPlugin.provideCompletionItems!( + const completions = await htmlPluginInstance.provideCompletionItems!( document, position, completionContext, diff --git a/packages/language-server/src/plugins/typescript-addons/index.ts b/packages/language-server/src/plugins/typescript-addons/index.ts index d5225f95..ced90573 100644 --- a/packages/language-server/src/plugins/typescript-addons/index.ts +++ b/packages/language-server/src/plugins/typescript-addons/index.ts @@ -3,12 +3,18 @@ import type { LanguageServicePlugin, LanguageServicePluginInstance, } from '@volar/language-server'; +import { URI } from 'vscode-uri'; import { AstroVirtualCode } from '../../core/index.js'; import { isInsideFrontmatter, isJSDocument } from '../utils.js'; import { getSnippetCompletions } from './snippets.js'; export const create = (): LanguageServicePlugin => { return { + capabilities: { + completionProvider: { + resolveProvider: true, + }, + }, create(context): LanguageServicePluginInstance { return { isAdditionalCompletion: true, @@ -27,7 +33,7 @@ export const create = (): LanguageServicePlugin => { ) return null; - const decoded = context.decodeEmbeddedDocumentUri(document.uri); + const decoded = context.decodeEmbeddedDocumentUri(URI.parse(document.uri)); const sourceScript = decoded && context.language.scripts.get(decoded[0]); const root = sourceScript?.generated?.root; if (!(root instanceof AstroVirtualCode)) return undefined; diff --git a/packages/language-server/src/plugins/typescript/codeActions.ts b/packages/language-server/src/plugins/typescript/codeActions.ts index 907df017..ec269993 100644 --- a/packages/language-server/src/plugins/typescript/codeActions.ts +++ b/packages/language-server/src/plugins/typescript/codeActions.ts @@ -1,13 +1,17 @@ import { TextDocumentEdit } from '@volar/language-server'; -import type { CodeAction, ServiceContext } from '@volar/language-service'; +import type { CodeAction, LanguageServiceContext } from '@volar/language-service'; +import { URI } from 'vscode-uri'; import { AstroVirtualCode } from '../../core/index.js'; import { mapEdit } from './utils.js'; -export function enhancedProvideCodeActions(codeActions: CodeAction[], context: ServiceContext) { +export function enhancedProvideCodeActions( + codeActions: CodeAction[], + context: LanguageServiceContext +) { return codeActions.map((codeAction) => mapCodeAction(codeAction, context)); } -export function enhancedResolveCodeAction(codeAction: CodeAction, context: ServiceContext) { +export function enhancedResolveCodeAction(codeAction: CodeAction, context: LanguageServiceContext) { /** * TypeScript code actions don't come through here, as they're considered to be already fully resolved * A lot of the code actions we'll encounter here are more tricky ones, such as fixAll or refactor @@ -16,12 +20,12 @@ export function enhancedResolveCodeAction(codeAction: CodeAction, context: Servi return mapCodeAction(codeAction, context); } -function mapCodeAction(codeAction: CodeAction, context: ServiceContext) { +function mapCodeAction(codeAction: CodeAction, context: LanguageServiceContext) { if (!codeAction.edit || !codeAction.edit.documentChanges) return codeAction; codeAction.edit.documentChanges = codeAction.edit.documentChanges.map((change) => { if (TextDocumentEdit.is(change)) { - const decoded = context.decodeEmbeddedDocumentUri(change.textDocument.uri); + const decoded = context.decodeEmbeddedDocumentUri(URI.parse(change.textDocument.uri)); const sourceScript = decoded && context.language.scripts.get(decoded[0]); const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]); const root = sourceScript?.generated?.root; diff --git a/packages/language-server/src/plugins/typescript/completions.ts b/packages/language-server/src/plugins/typescript/completions.ts index 96f656bb..331ba98f 100644 --- a/packages/language-server/src/plugins/typescript/completions.ts +++ b/packages/language-server/src/plugins/typescript/completions.ts @@ -2,8 +2,9 @@ import { CompletionItem, CompletionItemKind, CompletionList, - ServiceContext, + LanguageServiceContext, } from '@volar/language-server'; +import { URI } from 'vscode-uri'; import { AstroVirtualCode } from '../../core/index.js'; import { mapEdit } from './utils.js'; @@ -33,7 +34,7 @@ export function enhancedProvideCompletionItems(completions: CompletionList): Com export function enhancedResolveCompletionItem( resolvedCompletion: CompletionItem, - context: ServiceContext + context: LanguageServiceContext ): CompletionItem { // Make sure we keep our icons even when the completion is resolved if (resolvedCompletion.data.isComponent) { @@ -44,7 +45,7 @@ export function enhancedResolveCompletionItem( } if (resolvedCompletion.additionalTextEdits) { - const decoded = context.decodeEmbeddedDocumentUri(resolvedCompletion.data.uri); + const decoded = context.decodeEmbeddedDocumentUri(URI.parse(resolvedCompletion.data.uri)); const sourceScript = decoded && context.language.scripts.get(decoded[0]); const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]); const root = sourceScript?.generated?.root; diff --git a/packages/language-server/src/plugins/typescript/index.ts b/packages/language-server/src/plugins/typescript/index.ts index 7527871b..9b17d950 100644 --- a/packages/language-server/src/plugins/typescript/index.ts +++ b/packages/language-server/src/plugins/typescript/index.ts @@ -1,5 +1,6 @@ import type { LanguageServicePlugin, LanguageServicePluginInstance } from '@volar/language-server'; import { create as createTypeScriptServices } from 'volar-service-typescript'; +import { URI } from 'vscode-uri'; import { AstroVirtualCode } from '../../core/index.js'; import { enhancedProvideCodeActions, enhancedResolveCodeAction } from './codeActions.js'; import { enhancedProvideCompletionItems, enhancedResolveCompletionItem } from './completions.js'; @@ -56,7 +57,7 @@ export const create = (ts: typeof import('typescript')): LanguageServicePlugin[] return enhancedResolveCodeAction(resolvedCodeAction, context); }, async provideSemanticDiagnostics(document, token) { - const decoded = context.decodeEmbeddedDocumentUri(document.uri); + const decoded = context.decodeEmbeddedDocumentUri(URI.parse(document.uri)); const sourceScript = decoded && context.language.scripts.get(decoded[0]); const root = sourceScript?.generated?.root; diff --git a/packages/language-server/test/misc/init.test.ts b/packages/language-server/test/misc/init.test.ts index 968d3238..de299d0b 100644 --- a/packages/language-server/test/misc/init.test.ts +++ b/packages/language-server/test/misc/init.test.ts @@ -18,33 +18,25 @@ describe('Initialize', async () => { it('Has proper capabilities', async () => { const capabilities: ServerCapabilities = { - textDocumentSync: 2, - workspace: { - workspaceFolders: { - changeNotifications: true, - supported: true, - }, + callHierarchyProvider: true, + codeActionProvider: { + codeActionKinds: [ + '', + 'quickfix', + 'refactor', + 'refactor.extract', + 'refactor.inline', + 'refactor.rewrite', + 'source', + 'source.fixAll', + 'source.organizeImports', + ], + resolveProvider: true, }, - selectionRangeProvider: true, - foldingRangeProvider: true, - linkedEditingRangeProvider: true, + codeLensProvider: {}, colorProvider: true, - documentSymbolProvider: true, - documentFormattingProvider: true, - documentRangeFormattingProvider: true, - documentOnTypeFormattingProvider: { - firstTriggerCharacter: ';', - moreTriggerCharacter: ['}', '\n'], - }, - referencesProvider: true, - implementationProvider: true, - definitionProvider: true, - typeDefinitionProvider: true, - callHierarchyProvider: true, - hoverProvider: true, - renameProvider: { prepareProvider: true }, - signatureHelpProvider: { triggerCharacters: ['(', ',', '<'], retriggerCharacters: [')'] }, completionProvider: { + resolveProvider: true, triggerCharacters: [ '.', ':', @@ -70,70 +62,77 @@ describe('Initialize', async () => { '`', ' ', ], - resolveProvider: true, }, + definitionProvider: true, + diagnosticProvider: { + interFileDependencies: true, + workspaceDiagnostics: false, + }, + documentFormattingProvider: true, documentHighlightProvider: true, - documentLinkProvider: { resolveProvider: true }, - codeLensProvider: { resolveProvider: true }, + documentLinkProvider: {}, + documentOnTypeFormattingProvider: { + firstTriggerCharacter: ';', + moreTriggerCharacter: ['}', '\n'], + }, + documentRangeFormattingProvider: true, + documentSymbolProvider: true, + experimental: { + autoInsertionProvider: { + configurationSections: [ + ['html.autoCreateQuotes'], + ['html.autoClosingTags', 'javascript.autoClosingTags', 'typescript.autoClosingTags'], + ['html.autoClosingTags'], + ], + triggerCharacters: ['=', '>', '/'], + }, + fileReferencesProvider: true, + fileRenameProvider: true, + }, + foldingRangeProvider: true, + hoverProvider: true, + implementationProvider: true, + inlayHintProvider: {}, + linkedEditingRangeProvider: true, + referencesProvider: true, + renameProvider: { + prepareProvider: true, + }, + selectionRangeProvider: true, semanticTokensProvider: { - range: true, full: false, legend: { + tokenModifiers: ['declaration', 'readonly', 'static', 'async', 'defaultLibrary', 'local'], tokenTypes: [ 'namespace', 'class', 'enum', 'interface', - 'struct', 'typeParameter', 'type', 'parameter', 'variable', 'property', 'enumMember', - 'decorator', - 'event', 'function', 'method', - 'macro', - 'label', - 'comment', - 'string', - 'keyword', - 'number', - 'regexp', - 'operator', - ], - tokenModifiers: [ - 'declaration', - 'definition', - 'readonly', - 'static', - 'deprecated', - 'abstract', - 'async', - 'modification', - 'documentation', - 'defaultLibrary', ], }, + range: true, }, - codeActionProvider: { - codeActionKinds: [ - '', - 'quickfix', - 'refactor', - 'refactor.extract', - 'refactor.inline', - 'refactor.rewrite', - 'source', - 'source.fixAll', - 'source.organizeImports', - ], - resolveProvider: true, + signatureHelpProvider: { + retriggerCharacters: [')'], + triggerCharacters: ['(', ',', '<'], + }, + textDocumentSync: 2, + typeDefinitionProvider: true, + workspace: { + workspaceFolders: { + changeNotifications: true, + supported: true, + }, }, - inlayHintProvider: { resolveProvider: true }, - workspaceSymbolProvider: true, + workspaceSymbolProvider: {}, }; expect(initializeResult.capabilities).to.deep.equal(capabilities); diff --git a/packages/language-server/test/server.ts b/packages/language-server/test/server.ts index e2572d69..9eabbafd 100644 --- a/packages/language-server/test/server.ts +++ b/packages/language-server/test/server.ts @@ -35,6 +35,7 @@ export async function getLanguageServer(): Promise { 'lib' ), }, + pullModelDiagnostics: true, } ); // Ensure that our first test does not suffer from a TypeScript overhead diff --git a/packages/language-server/test/typescript/organize-imports.test.ts b/packages/language-server/test/typescript/organize-imports.test.ts index a17ed8e3..91fdc967 100644 --- a/packages/language-server/test/typescript/organize-imports.test.ts +++ b/packages/language-server/test/typescript/organize-imports.test.ts @@ -1,6 +1,7 @@ import { Range } from '@volar/language-server'; import { expect } from 'chai'; import { describe } from 'mocha'; +import { URI } from 'vscode-uri'; import { type LanguageServer, getLanguageServer } from '../server.js'; describe('TypeScript - Organize & Sort Imports', () => { @@ -41,14 +42,18 @@ describe('TypeScript - Organize & Sort Imports', () => { }, ], textDocument: { - uri: `volar-embedded-content://tsx/${encodeURIComponent(document.uri)}`, + uri: URI.from({ + scheme: 'volar-embedded-content', + authority: 'tsx', + path: '/' + encodeURIComponent(document.uri), + }).toString(), version: null, }, }, ], }, }, - serviceIndex: 3, + pluginIndex: 3, uri: document.uri, version: (organizeEdits?.[0] as any).data.version, }, diff --git a/packages/ts-plugin/package.json b/packages/ts-plugin/package.json index 94d9cfbd..83b5ebd8 100644 --- a/packages/ts-plugin/package.json +++ b/packages/ts-plugin/package.json @@ -19,8 +19,8 @@ "author": "withastro", "license": "MIT", "dependencies": { - "@volar/language-core": "~2.2.3", - "@volar/typescript": "~2.2.3", + "@volar/language-core": "~2.4.0-alpha.15", + "@volar/typescript": "~2.4.0-alpha.15", "@astrojs/compiler": "^2.7.0", "@jridgewell/sourcemap-codec": "^1.4.15", "semver": "^7.3.8", diff --git a/packages/ts-plugin/src/index.ts b/packages/ts-plugin/src/index.ts index c4dccba4..4b817be4 100644 --- a/packages/ts-plugin/src/index.ts +++ b/packages/ts-plugin/src/index.ts @@ -1,4 +1,6 @@ import { createLanguageServicePlugin } from '@volar/typescript/lib/quickstart/createLanguageServicePlugin.js'; -import { getLanguageModule } from './language.js'; +import { getLanguagePlugin } from './language.js'; -export = createLanguageServicePlugin(() => [getLanguageModule()]); +export = createLanguageServicePlugin(() => ({ + languagePlugins: [getLanguagePlugin()], +})); diff --git a/packages/ts-plugin/src/language.ts b/packages/ts-plugin/src/language.ts index 73133de7..265e8b96 100644 --- a/packages/ts-plugin/src/language.ts +++ b/packages/ts-plugin/src/language.ts @@ -1,3 +1,5 @@ +/// + import { type CodeMapping, type LanguagePlugin, @@ -7,24 +9,18 @@ import { import type ts from 'typescript'; import { astro2tsx } from './astro2tsx.js'; -export function getLanguageModule(): LanguagePlugin { +export function getLanguagePlugin(): LanguagePlugin { return { - getLanguageId(scriptId) { - if (scriptId.endsWith('.astro')) { + getLanguageId(fileName) { + if (fileName.endsWith('.astro')) { return 'astro'; } }, - createVirtualCode(scriptId, languageId, snapshot) { + createVirtualCode(fileName, languageId, snapshot) { if (languageId === 'astro') { - // scriptId will never be a uri in ts plugin - const fileName = scriptId; return new AstroVirtualCode(fileName, snapshot); } }, - updateVirtualCode(_scriptId, astroFile, snapshot) { - astroFile.update(snapshot); - return astroFile; - }, typescript: { extraFileExtensions: [{ extension: 'astro', isMixedContent: true, scriptKind: 7 }], getServiceScript(astroCode) { @@ -53,15 +49,6 @@ export class AstroVirtualCode implements VirtualCode { public fileName: string, public snapshot: ts.IScriptSnapshot ) { - this.onSnapshotUpdated(); - } - - public update(newSnapshot: ts.IScriptSnapshot) { - this.snapshot = newSnapshot; - this.onSnapshotUpdated(); - } - - onSnapshotUpdated() { this.mappings = [ { sourceOffsets: [0], diff --git a/packages/vscode/package.json b/packages/vscode/package.json index 08ae123c..481e79c6 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -207,8 +207,8 @@ "@types/mocha": "^10.0.1", "@types/node": "^18.17.8", "@types/vscode": "^1.82.0", - "@volar/language-server": "~2.2.3", - "@volar/vscode": "~2.2.3", + "@volar/language-server": "~2.4.0-alpha.15", + "@volar/vscode": "~2.4.0-alpha.15", "@vscode/test-electron": "^2.3.2", "@vscode/vsce": "latest", "esbuild": "^0.17.19", diff --git a/packages/vscode/src/client.ts b/packages/vscode/src/client.ts index 7bb239e5..297a3046 100644 --- a/packages/vscode/src/client.ts +++ b/packages/vscode/src/client.ts @@ -1,5 +1,4 @@ import * as path from 'node:path'; -import type { InitializationOptions } from '@volar/language-server'; import * as protocol from '@volar/language-server/protocol'; import { LabsInfo, @@ -16,7 +15,7 @@ import * as lsp from 'vscode-languageclient/node'; let client: lsp.BaseLanguageClient; -type InitOptions = InitializationOptions & { +type InitOptions = { typescript: { tsdk: string; }; @@ -64,7 +63,7 @@ export async function activate(context: vscode.ExtensionContext): Promise text - ); + activateTsVersionStatusItem('astro', 'astro.selectTypescriptVersion', context, (text) => text); const volarLabs = createLabsInfo(protocol); volarLabs.addLanguageClient(client); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 51400d7e..7e048bdb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -82,41 +82,44 @@ importers: specifier: ^1.4.15 version: 1.4.15 '@volar/kit': - specifier: ~2.2.3 - version: 2.2.3(typescript@5.2.2) + specifier: ~2.4.0-alpha.15 + version: 2.4.0-alpha.15(typescript@5.2.2) '@volar/language-core': - specifier: ~2.2.3 - version: 2.2.3 + specifier: ~2.4.0-alpha.15 + version: 2.4.0-alpha.15 '@volar/language-server': - specifier: ~2.2.3 - version: 2.2.3 + specifier: ~2.4.0-alpha.15 + version: 2.4.0-alpha.15 '@volar/language-service': - specifier: ~2.2.3 - version: 2.2.3 + specifier: ~2.4.0-alpha.15 + version: 2.4.0-alpha.15 '@volar/typescript': - specifier: ~2.2.3 - version: 2.2.3 + specifier: ~2.4.0-alpha.15 + version: 2.4.0-alpha.15 fast-glob: specifier: ^3.2.12 version: 3.2.12 + muggle-string: + specifier: ^0.4.1 + version: 0.4.1 volar-service-css: - specifier: 0.0.45 - version: 0.0.45(@volar/language-service@2.2.3) + specifier: volar-2.4 + version: 0.0.59(@volar/language-service@2.4.0-alpha.15) volar-service-emmet: - specifier: 0.0.45 - version: 0.0.45(@volar/language-service@2.2.3) + specifier: volar-2.4 + version: 0.0.59(@volar/language-service@2.4.0-alpha.15) volar-service-html: - specifier: 0.0.45 - version: 0.0.45(@volar/language-service@2.2.3) + specifier: volar-2.4 + version: 0.0.59(@volar/language-service@2.4.0-alpha.15) volar-service-prettier: - specifier: 0.0.45 - version: 0.0.45(@volar/language-service@2.2.3)(prettier@3.2.5) + specifier: volar-2.4 + version: 0.0.59(@volar/language-service@2.4.0-alpha.15)(prettier@3.2.5) volar-service-typescript: - specifier: 0.0.45 - version: 0.0.45(@volar/language-service@2.2.3) + specifier: volar-2.4 + version: 0.0.59(@volar/language-service@2.4.0-alpha.15) volar-service-typescript-twoslash-queries: - specifier: 0.0.45 - version: 0.0.45(@volar/language-service@2.2.3) + specifier: volar-2.4 + version: 0.0.59(@volar/language-service@2.4.0-alpha.15) vscode-html-languageservice: specifier: ^5.2.0 version: 5.2.0 @@ -140,8 +143,8 @@ importers: specifier: ^18.17.8 version: 18.17.8 '@volar/test-utils': - specifier: ~2.2.3 - version: 2.2.3 + specifier: ~2.4.0-alpha.15 + version: 2.4.0-alpha.15 astro: specifier: ^4.3.5 version: 4.3.5(@types/node@18.17.8)(typescript@5.2.2) @@ -182,11 +185,11 @@ importers: specifier: ^1.4.15 version: 1.4.15 '@volar/language-core': - specifier: ~2.2.3 - version: 2.2.3 + specifier: ~2.4.0-alpha.15 + version: 2.4.0-alpha.15 '@volar/typescript': - specifier: ~2.2.3 - version: 2.2.3 + specifier: ~2.4.0-alpha.15 + version: 2.4.0-alpha.15 semver: specifier: ^7.3.8 version: 7.5.4 @@ -247,17 +250,17 @@ importers: specifier: ^1.82.0 version: 1.83.0 '@volar/language-server': - specifier: ~2.2.3 - version: 2.2.3 + specifier: ~2.4.0-alpha.15 + version: 2.4.0-alpha.15 '@volar/vscode': - specifier: ~2.2.3 - version: 2.2.3 + specifier: ~2.4.0-alpha.15 + version: 2.4.0-alpha.15 '@vscode/test-electron': specifier: ^2.3.2 version: 2.3.2 '@vscode/vsce': specifier: latest - version: 2.26.1 + version: 2.29.0 esbuild: specifier: ^0.17.19 version: 0.17.19 @@ -1715,15 +1718,6 @@ packages: resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} dev: true - /@johnsoncodehk/vscode-html-languageservice@5.2.0-34a5462: - resolution: {integrity: sha512-etqLfpSJ5zaw76KUNF603be6d6QsiQPmaHr9FKEp4zhLZJzWCCMH6Icak7MtLUFLZLMpL761mZNImi/joBo1ZA==} - dependencies: - '@vscode/l10n': 0.0.18 - vscode-languageserver-textdocument: 1.0.11 - vscode-languageserver-types: 3.17.5 - vscode-uri: 3.0.8 - dev: false - /@jridgewell/gen-mapping@0.1.1: resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} engines: {node: '>=6.0.0'} @@ -2264,32 +2258,31 @@ packages: optional: true dev: true - /@volar/kit@2.2.3(typescript@5.2.2): - resolution: {integrity: sha512-+l9NsI9oTcLhhjLT+iwbSIST4ivKwGEezVxVvxIcKghI5gwZSbh1as5eZNQEoi1+Ia0bw23QB3VofspxPuCuRw==} + /@volar/kit@2.4.0-alpha.15(typescript@5.2.2): + resolution: {integrity: sha512-ZCBErTebCVdzpSo/0wBlrjnZfqQfVIaHUJa3kOQe3TbVR/8Ny/3mij9gSkBTUcSyVtlUFpJpJo/B8aQp0xt/mQ==} peerDependencies: typescript: '*' dependencies: - '@volar/language-service': 2.2.3 - '@volar/typescript': 2.2.3 + '@volar/language-service': 2.4.0-alpha.15 + '@volar/typescript': 2.4.0-alpha.15 typesafe-path: 0.2.2 typescript: 5.2.2 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 dev: false - /@volar/language-core@2.2.3: - resolution: {integrity: sha512-8GT6QiWJMdiU4k/PStcGYLGYjoaQnN/hbFNtHvturzdIiK2tJRmZuub4tBrwGS4AeklhkvA32E6fPdGMQkMPLA==} + /@volar/language-core@2.4.0-alpha.15: + resolution: {integrity: sha512-mt8z4Fm2WxfQYoQHPcKVjLQV6PgPqyKLbkCVY2cr5RSaamqCHjhKEpsFX66aL4D/7oYguuaUw9Bx03Vt0TpIIA==} dependencies: - '@volar/source-map': 2.2.3 + '@volar/source-map': 2.4.0-alpha.15 - /@volar/language-server@2.2.3: - resolution: {integrity: sha512-BubmmAJBXIe8KcvHDL729KQoKB3cyy8hT0lhLxHaqMnGLj87rbYzjJm0cgnf13XFz4qrcN5Wjes3wSIGQ3MbXw==} + /@volar/language-server@2.4.0-alpha.15: + resolution: {integrity: sha512-epaF7Rllb29nr25F8hX5bq7ivgStNZzXGkhuPlHCUM+Ij/aQnsBeYQsfm7EttPqqO3abCctpRWyd+icklFEBoQ==} dependencies: - '@volar/language-core': 2.2.3 - '@volar/language-service': 2.2.3 - '@volar/snapshot-document': 2.2.3 - '@volar/typescript': 2.2.3 - '@vscode/l10n': 0.0.16 + '@volar/language-core': 2.4.0-alpha.15 + '@volar/language-service': 2.4.0-alpha.15 + '@volar/snapshot-document': 2.4.0-alpha.15 + '@volar/typescript': 2.4.0-alpha.15 path-browserify: 1.0.1 request-light: 0.7.0 vscode-languageserver: 9.0.1 @@ -2297,51 +2290,50 @@ packages: vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - /@volar/language-service@2.2.3: - resolution: {integrity: sha512-hqIUdrODcmyddHsK6hqqcBJc6pJN6BZ86uD7r+ka77iN70zcVMNdymqlMeSPCPSPkC2Ar2rhCGhNoVvEDyim/g==} + /@volar/language-service@2.4.0-alpha.15: + resolution: {integrity: sha512-H5T5JvvqvWhG0PvvKPTM0nczTbTKQ+U87a8r0eahlH/ySi2HvIHO/7PiNKLxKqLNsiT8SX4U3QcGC8ZaNcC07g==} dependencies: - '@volar/language-core': 2.2.3 + '@volar/language-core': 2.4.0-alpha.15 vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 - /@volar/snapshot-document@2.2.3: - resolution: {integrity: sha512-cs6+QYFFVD1BiWiHpwnuxvA+F56qsQrP4XzeTLah9BznrcLBXQBSquwF5m3g9TkgTBMDkdillKo9TWlUeg/05A==} + /@volar/snapshot-document@2.4.0-alpha.15: + resolution: {integrity: sha512-8lnX0eZ7/lM+hakO5kspWABi4nijppxTy9XU0f9ns2lZ/JCE0t9EurNNiOaw4MWFO9USr0H72Ut0LCB9o4rpqA==} dependencies: vscode-languageserver-protocol: 3.17.5 vscode-languageserver-textdocument: 1.0.11 - /@volar/source-map@2.2.3: - resolution: {integrity: sha512-Be1rBnC0yvLprcCaoNxU+hLUguYQt4jp/IBnwdMbCXLDWIU0fXHgPPIBWmYSiGe0uu0ns5cQMEqzNsGwiX/mGw==} - dependencies: - muggle-string: 0.4.0 + /@volar/source-map@2.4.0-alpha.15: + resolution: {integrity: sha512-8Htngw5TmBY4L3ClDqBGyfLhsB8EmoEXUH1xydyEtEoK0O6NX5ur4Jw8jgvscTlwzizyl/wsN1vn0cQXVbbXYg==} - /@volar/test-utils@2.2.3: - resolution: {integrity: sha512-88R9CitNA5AdRlxiNeooa7pbdVSim0DpuQeB3oJknyzRACPklryOV0FPmayBDVaUOVh/GvD6hC5GivdimY5tpw==} + /@volar/test-utils@2.4.0-alpha.15: + resolution: {integrity: sha512-FLjMGlA/HOVZ/XhqgJtUhBlvZDAXm4HV+7m0J8b3BEKpK6dR1/qloOyB7uVET+hoyrtmZ3BuVTZt01SsQKq1XQ==} dependencies: - '@volar/language-core': 2.2.3 - '@volar/language-server': 2.2.3 + '@volar/language-core': 2.4.0-alpha.15 + '@volar/language-server': 2.4.0-alpha.15 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 dev: true - /@volar/typescript@2.2.3: - resolution: {integrity: sha512-/0zAf1Rn5x0Pw5kKJp1n522CRp6ptPhvECH3250d3NBo0qwxP183brcVO+0ourqGWQy39vcfB3VwQnze6w4mgQ==} + /@volar/typescript@2.4.0-alpha.15: + resolution: {integrity: sha512-U3StRBbDuxV6Woa4hvGS4kz3XcOzrWUKgFdEFN+ba1x3eaYg7+ytau8ul05xgA+UNGLXXsKur7fTUhDFyISk0w==} dependencies: - '@volar/language-core': 2.2.3 + '@volar/language-core': 2.4.0-alpha.15 path-browserify: 1.0.1 + vscode-uri: 3.0.8 - /@volar/vscode@2.2.3: - resolution: {integrity: sha512-lHZ2xTM1lGHijc1w0EPkQqaEArGI359Nlw81yvo3n0/zCa5xDptU9WztMPdElYwTX8nd/MwBBhiNBJIx/lVisA==} + /@volar/vscode@2.4.0-alpha.15: + resolution: {integrity: sha512-apzZqZrCKO9tDWRzsy4EWUgywMzlVhIqDWP3HrXIjDuRKCFG7x8tgfqoDHOSs5M8aIo2BHk1akzCinobLkpFbw==} dependencies: - '@volar/language-server': 2.2.3 + '@volar/language-server': 2.4.0-alpha.15 path-browserify: 1.0.1 vscode-languageclient: 9.0.1 vscode-nls: 5.2.0 dev: true - /@vscode/emmet-helper@2.9.2: - resolution: {integrity: sha512-MaGuyW+fa13q3aYsluKqclmh62Hgp0BpKIqS66fCxfOaBcVQ1OnMQxRRgQUYnCkxFISAQlkJ0qWWPyXjro1Qrg==} + /@vscode/emmet-helper@2.9.3: + resolution: {integrity: sha512-rB39LHWWPQYYlYfpv9qCoZOVioPCftKXXqrsyqN1mTWZM6dTnONT63Db+03vgrBbHzJN45IrgS/AGxw9iiqfEw==} dependencies: emmet: 2.4.4 jsonc-parser: 2.3.1 @@ -2350,9 +2342,6 @@ packages: vscode-uri: 2.1.2 dev: false - /@vscode/l10n@0.0.16: - resolution: {integrity: sha512-JT5CvrIYYCrmB+dCana8sUqJEcGB1ZDXNLMQ2+42bW995WmNoenijWMUdZfwmuQUTQcEVVIa2OecZzTYWUW9Cg==} - /@vscode/l10n@0.0.18: resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} dev: false @@ -2369,12 +2358,100 @@ packages: - supports-color dev: true - /@vscode/vsce@2.26.1: - resolution: {integrity: sha512-QOG6Ht7V93nhwcBxPWcG33UK0qDGEoJdg0xtVeaTN27W6PGdMJUJGTPhB/sNHUIFKwvwzv/zMAHvDgMNXbcwlA==} + /@vscode/vsce-sign-alpine-arm64@2.0.2: + resolution: {integrity: sha512-E80YvqhtZCLUv3YAf9+tIbbqoinWLCO/B3j03yQPbjT3ZIHCliKZlsy1peNc4XNZ5uIb87Jn0HWx/ZbPXviuAQ==} + cpu: [arm64] + os: [alpine] + requiresBuild: true + dev: true + optional: true + + /@vscode/vsce-sign-alpine-x64@2.0.2: + resolution: {integrity: sha512-n1WC15MSMvTaeJ5KjWCzo0nzjydwxLyoHiMJHu1Ov0VWTZiddasmOQHekA47tFRycnt4FsQrlkSCTdgHppn6bw==} + cpu: [x64] + os: [alpine] + requiresBuild: true + dev: true + optional: true + + /@vscode/vsce-sign-darwin-arm64@2.0.2: + resolution: {integrity: sha512-rz8F4pMcxPj8fjKAJIfkUT8ycG9CjIp888VY/6pq6cuI2qEzQ0+b5p3xb74CJnBbSC0p2eRVoe+WgNCAxCLtzQ==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@vscode/vsce-sign-darwin-x64@2.0.2: + resolution: {integrity: sha512-MCjPrQ5MY/QVoZ6n0D92jcRb7eYvxAujG/AH2yM6lI0BspvJQxp0o9s5oiAM9r32r9tkLpiy5s2icsbwefAQIw==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@vscode/vsce-sign-linux-arm64@2.0.2: + resolution: {integrity: sha512-Ybeu7cA6+/koxszsORXX0OJk9N0GgfHq70Wqi4vv2iJCZvBrOWwcIrxKjvFtwyDgdeQzgPheH5nhLVl5eQy7WA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@vscode/vsce-sign-linux-arm@2.0.2: + resolution: {integrity: sha512-Fkb5jpbfhZKVw3xwR6t7WYfwKZktVGNXdg1m08uEx1anO0oUPUkoQRsNm4QniL3hmfw0ijg00YA6TrxCRkPVOQ==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@vscode/vsce-sign-linux-x64@2.0.2: + resolution: {integrity: sha512-NsPPFVtLaTlVJKOiTnO8Cl78LZNWy0Q8iAg+LlBiCDEgC12Gt4WXOSs2pmcIjDYzj2kY4NwdeN1mBTaujYZaPg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@vscode/vsce-sign-win32-arm64@2.0.2: + resolution: {integrity: sha512-wPs848ymZ3Ny+Y1Qlyi7mcT6VSigG89FWQnp2qRYCyMhdJxOpA4lDwxzlpL8fG6xC8GjQjGDkwbkWUcCobvksQ==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@vscode/vsce-sign-win32-x64@2.0.2: + resolution: {integrity: sha512-pAiRN6qSAhDM5SVOIxgx+2xnoVUePHbRNC7OD2aOR3WltTKxxF25OfpK8h8UQ7A0BuRkSgREbB59DBlFk4iAeg==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@vscode/vsce-sign@2.0.4: + resolution: {integrity: sha512-0uL32egStKYfy60IqnynAChMTbL0oqpqk0Ew0YHiIb+fayuGZWADuIPHWUcY1GCnAA+VgchOPDMxnc2R3XGWEA==} + requiresBuild: true + optionalDependencies: + '@vscode/vsce-sign-alpine-arm64': 2.0.2 + '@vscode/vsce-sign-alpine-x64': 2.0.2 + '@vscode/vsce-sign-darwin-arm64': 2.0.2 + '@vscode/vsce-sign-darwin-x64': 2.0.2 + '@vscode/vsce-sign-linux-arm': 2.0.2 + '@vscode/vsce-sign-linux-arm64': 2.0.2 + '@vscode/vsce-sign-linux-x64': 2.0.2 + '@vscode/vsce-sign-win32-arm64': 2.0.2 + '@vscode/vsce-sign-win32-x64': 2.0.2 + dev: true + + /@vscode/vsce@2.29.0: + resolution: {integrity: sha512-63+aEO8SpjE6qKiIh2Cqy/P9zC7+USElGwpEdkyPp89xIBDBr5IqeNS3zkD3mp3wZqbvHIpJsCCNu74WQirYCg==} engines: {node: '>= 16'} hasBin: true dependencies: '@azure/identity': 4.2.0 + '@vscode/vsce-sign': 2.0.4 azure-devops-node-api: 12.5.0 chalk: 2.4.2 cheerio: 1.0.0-rc.12 @@ -4838,7 +4915,7 @@ packages: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.5.4 + semver: 7.6.2 dev: true /jszip@3.10.1: @@ -5656,8 +5733,9 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - /muggle-string@0.4.0: - resolution: {integrity: sha512-ymN6exGtXrNnDb0ae4VP34y5bSKmBm6+TMGHmKoFDE5saXxtszv1EHs4Tt3glo61rCA/Zum4AwM19pCOGAjjRQ==} + /muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + dev: false /mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} @@ -6548,6 +6626,11 @@ packages: dependencies: lru-cache: 6.0.0 + /semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + engines: {node: '>=10'} + hasBin: true + /serialize-javascript@6.0.0: resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} dependencies: @@ -7234,10 +7317,10 @@ packages: resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==} dev: false - /typescript-auto-import-cache@0.3.2: - resolution: {integrity: sha512-+laqe5SFL1vN62FPOOJSUDTZxtgsoOXjneYOXIpx5rQ4UMiN89NAtJLpqLqyebv9fgQ/IMeeTX+mQyRnwvJzvg==} + /typescript-auto-import-cache@0.3.3: + resolution: {integrity: sha512-ojEC7+Ci1ij9eE6hp8Jl9VUNnsEKzztktP5gtYNRMrTmfXVwA1PITYYAkpxCvvupdSYa/Re51B6KMcv1CTZEUA==} dependencies: - semver: 7.5.4 + semver: 7.6.2 dev: false /typescript@5.2.2: @@ -7490,52 +7573,53 @@ packages: vite: 5.0.12(@types/node@18.17.8) dev: true - /volar-service-css@0.0.45(@volar/language-service@2.2.3): - resolution: {integrity: sha512-f+AlUI1+kESbcZSVaNJVAnK0c/9Da5StoxzPqA5/8VqUHJWNdubWNnwG5xpFVTfgh6pgTcey3UBhBfHytFaIOg==} + /volar-service-css@0.0.59(@volar/language-service@2.4.0-alpha.15): + resolution: {integrity: sha512-gLNjJnECbalPvQB7qeJjhkDN8sR5M3ItbVYjnyio61aHaWptIiXm/HfDahcQ2ApwmvWidkMWWegjGq5L0BENDA==} peerDependencies: - '@volar/language-service': ~2.2.3 + '@volar/language-service': ~2.4.0-alpha.12 peerDependenciesMeta: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.2.3 - vscode-css-languageservice: 6.2.10 + '@volar/language-service': 2.4.0-alpha.15 + vscode-css-languageservice: 6.3.0 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 dev: false - /volar-service-emmet@0.0.45(@volar/language-service@2.2.3): - resolution: {integrity: sha512-9nLXSDkR1vA/3fQkFEsSXAu3XovQxOpTkVG2jilQgfek/K1ZLkaA/WMhN/TtmPmQg4NxE9Ni6mA5udBQ5gVXIA==} + /volar-service-emmet@0.0.59(@volar/language-service@2.4.0-alpha.15): + resolution: {integrity: sha512-6EynHcuMwMBETpK29TbZvIMmvzdVG+Tkokk9VWfZeI+SwDptk2tgdhEqiXXvIkqYNgbuu73Itp66lpH76cAU+Q==} peerDependencies: - '@volar/language-service': ~2.2.3 + '@volar/language-service': ~2.4.0-alpha.12 peerDependenciesMeta: '@volar/language-service': optional: true dependencies: '@emmetio/css-parser': 0.4.0 '@emmetio/html-matcher': 1.3.0 - '@volar/language-service': 2.2.3 - '@vscode/emmet-helper': 2.9.2 + '@volar/language-service': 2.4.0-alpha.15 + '@vscode/emmet-helper': 2.9.3 + vscode-uri: 3.0.8 dev: false - /volar-service-html@0.0.45(@volar/language-service@2.2.3): - resolution: {integrity: sha512-tLTJqfy1v5C4nmeAsfekFIKPl4r4qDMyL0L9MWywr/EApZzPCsbeUGxCqdzxSMC2q7PMCfX2i167txDo+J0LVA==} + /volar-service-html@0.0.59(@volar/language-service@2.4.0-alpha.15): + resolution: {integrity: sha512-hEXOsYpILDlITZxnqRLV9OepVWD63GZBsyjMxszwdzlxvGZjzbGcBBinJGGJRwFIV8djdJwnt91bkdg1V5tj6Q==} peerDependencies: - '@volar/language-service': ~2.2.3 + '@volar/language-service': ~2.4.0-alpha.12 peerDependenciesMeta: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.2.3 - vscode-html-languageservice: /@johnsoncodehk/vscode-html-languageservice@5.2.0-34a5462 + '@volar/language-service': 2.4.0-alpha.15 + vscode-html-languageservice: 5.3.0 vscode-languageserver-textdocument: 1.0.11 vscode-uri: 3.0.8 dev: false - /volar-service-prettier@0.0.45(@volar/language-service@2.2.3)(prettier@3.2.5): - resolution: {integrity: sha512-+mBS2EsDgp/kunKEBnHvhBwIQm5v2ahw4NKpKdg4sTpXy3UxqHt+Fq/wRYQ7Z8LlNVNRVfp75ThjM+w2zaZBAw==} + /volar-service-prettier@0.0.59(@volar/language-service@2.4.0-alpha.15)(prettier@3.2.5): + resolution: {integrity: sha512-FmBR4lsgFRGR3V0LnxZZal0WqdOJjuLL6mQSj4p57M15APtQwuocG/FiF+ONGFnwRXMOIBDBTCARdth+TKgL3A==} peerDependencies: - '@volar/language-service': ~2.2.3 + '@volar/language-service': ~2.4.0-alpha.12 prettier: ^2.2 || ^3.0 peerDependenciesMeta: '@volar/language-service': @@ -7543,42 +7627,44 @@ packages: prettier: optional: true dependencies: - '@volar/language-service': 2.2.3 + '@volar/language-service': 2.4.0-alpha.15 prettier: 3.2.5 vscode-uri: 3.0.8 dev: false - /volar-service-typescript-twoslash-queries@0.0.45(@volar/language-service@2.2.3): - resolution: {integrity: sha512-KrPUUvKggZgV9mrDpstCzmf20irgv0ooMv+FGDzIIQUkya+d2+nSS8Mx2h9FvsYgLccUVw5jU3Rhwhd3pv/7qg==} + /volar-service-typescript-twoslash-queries@0.0.59(@volar/language-service@2.4.0-alpha.15): + resolution: {integrity: sha512-skm8e6yhCIkqLwJB6S9MqT5lO9LNFuMD3dYxKpmOZs1CKbXmCZZTmLfEaD5VkJae1xdleEDZFFTHl2O5HLjOGQ==} peerDependencies: - '@volar/language-service': ~2.2.3 + '@volar/language-service': ~2.4.0-alpha.12 peerDependenciesMeta: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.2.3 + '@volar/language-service': 2.4.0-alpha.15 + vscode-uri: 3.0.8 dev: false - /volar-service-typescript@0.0.45(@volar/language-service@2.2.3): - resolution: {integrity: sha512-i/mMIIAMastJ2kgPo3qvX0Rrl7NyxhIYZ0ug/B4ambZcLPI1vzBgS2fmvyWX3jhBYHh8NmbAotFj+0Y9JtN47A==} + /volar-service-typescript@0.0.59(@volar/language-service@2.4.0-alpha.15): + resolution: {integrity: sha512-VCOpfiu+lUo5lapWLB5L5vmQGtwzmNWn5MueV915eku7blpphmE+Z7hCNcL1NApn7AetXWhiblv8ZhmUx/dGIA==} peerDependencies: - '@volar/language-service': ~2.2.3 + '@volar/language-service': ~2.4.0-alpha.12 peerDependenciesMeta: '@volar/language-service': optional: true dependencies: - '@volar/language-service': 2.2.3 + '@volar/language-service': 2.4.0-alpha.15 path-browserify: 1.0.1 - semver: 7.5.4 - typescript-auto-import-cache: 0.3.2 + semver: 7.6.2 + typescript-auto-import-cache: 0.3.3 vscode-languageserver-textdocument: 1.0.11 vscode-nls: 5.2.0 + vscode-uri: 3.0.8 dev: false - /vscode-css-languageservice@6.2.10: - resolution: {integrity: sha512-sYUZPku4mQ06AWGCbMyjv2tdR6juBW6hTbVPFwbJvNVzdtEfBioQOgkdXg7yMJNWnXkvWSU1FL2kb4Vxu5Cdyw==} + /vscode-css-languageservice@6.3.0: + resolution: {integrity: sha512-nU92imtkgzpCL0xikrIb8WvedV553F2BENzgz23wFuok/HLN5BeQmroMy26pUwFxV2eV8oNRmYCUv8iO7kSMhw==} dependencies: - '@vscode/l10n': 0.0.16 + '@vscode/l10n': 0.0.18 vscode-languageserver-textdocument: 1.0.11 vscode-languageserver-types: 3.17.5 vscode-uri: 3.0.8 @@ -7593,6 +7679,15 @@ packages: vscode-uri: 3.0.8 dev: false + /vscode-html-languageservice@5.3.0: + resolution: {integrity: sha512-C4Z3KsP5Ih+fjHpiBc5jxmvCl+4iEwvXegIrzu2F5pktbWvQaBT3YkVPk8N+QlSSMk8oCG6PKtZ/Sq2YHb5e8g==} + dependencies: + '@vscode/l10n': 0.0.18 + vscode-languageserver-textdocument: 1.0.11 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.0.8 + dev: false + /vscode-jsonrpc@8.2.0: resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} engines: {node: '>=14.0.0'}