From e396d97f5e5a9b24928b3b6ac181c56cdf84cb5b Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Sat, 3 Jun 2023 00:01:07 +0800 Subject: [PATCH 01/16] sync upstream --- package.json | 2 +- packages/typescript-vue-plugin/src/index.ts | 14 +- packages/vscode-vue/package.json | 2 +- packages/vscode-vue/src/common.ts | 2 +- packages/vue-component-meta/package.json | 2 +- packages/vue-component-meta/src/index.ts | 59 +-- packages/vue-language-core/package.json | 4 +- .../vue-language-core/src/languageModule.ts | 28 +- packages/vue-language-core/src/utils/ts.ts | 7 +- packages/vue-language-plugin-pug/package.json | 2 +- packages/vue-language-server/package.json | 5 +- .../src/languageServerPlugin.ts | 52 ++- packages/vue-language-service/package.json | 16 +- .../tests/utils/createTester.ts | 80 ++-- packages/vue-tsc-eslint-hook/src/index.ts | 6 +- packages/vue-tsc/src/index.ts | 43 +- packages/vue-typescript/package.json | 2 +- packages/vue-typescript/src/index.ts | 5 +- pnpm-lock.yaml | 393 ++++++++++-------- 19 files changed, 381 insertions(+), 343 deletions(-) diff --git a/package.json b/package.json index 6cb827ced..2acee94f1 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ }, "devDependencies": { "@types/node": "latest", - "@volar/language-service": "1.6.9", + "@volar/language-service": "1.7.0", "typescript": "latest", "vite": "latest", "vitest": "latest" diff --git a/packages/typescript-vue-plugin/src/index.ts b/packages/typescript-vue-plugin/src/index.ts index f7265037d..9a65a64b3 100644 --- a/packages/typescript-vue-plugin/src/index.ts +++ b/packages/typescript-vue-plugin/src/index.ts @@ -35,19 +35,9 @@ const init: ts.server.PluginModuleFactory = (modules) => { }; } - const vueTsLsHost: vue.LanguageServiceHost = { - getNewLine: () => info.project.getNewLine(), - useCaseSensitiveFileNames: () => info.project.useCaseSensitiveFileNames(), - readFile: path => info.project.readFile(path), - writeFile: (path, content) => info.project.writeFile(path, content), - fileExists: path => info.project.fileExists(path), - directoryExists: path => info.project.directoryExists(path), - getDirectories: path => info.project.getDirectories(path), - readDirectory: (path, extensions, exclude, include, depth) => info.project.readDirectory(path, extensions, exclude, include, depth), - realpath: info.project.realpath ? path => info.project.realpath!(path) : undefined, + const vueTsLsHost: vue.TypeScriptLanguageHost = { getCompilationSettings: () => info.project.getCompilationSettings(), getCurrentDirectory: () => info.project.getCurrentDirectory(), - getDefaultLibFileName: () => info.project.getDefaultLibFileName(), getProjectVersion: () => info.project.getProjectVersion(), getProjectReferences: () => info.project.getProjectReferences(), getScriptFileNames: () => [ @@ -57,7 +47,7 @@ const init: ts.server.PluginModuleFactory = (modules) => { getScriptVersion: (fileName) => info.project.getScriptVersion(fileName), getScriptSnapshot: (fileName) => info.project.getScriptSnapshot(fileName), }; - const vueTsLs = vueTs.createLanguageService(vueTsLsHost, parsed.vueOptions, ts); + const vueTsLs = vueTs.createLanguageService(vueTsLsHost, parsed.vueOptions, ts, ts.sys); return new Proxy(info.languageService, { get: (target: any, property: keyof ts.LanguageService) => { diff --git a/packages/vscode-vue/package.json b/packages/vscode-vue/package.json index f351addb7..cd0a1f979 100644 --- a/packages/vscode-vue/package.json +++ b/packages/vscode-vue/package.json @@ -732,7 +732,7 @@ "devDependencies": { "@types/semver": "^7.3.13", "@types/vscode": "1.67.0", - "@volar/vscode": "1.6.9", + "@volar/vscode": "1.7.0", "@vue/language-server": "1.7.8", "esbuild": "0.15.18", "esbuild-plugin-copy": "latest", diff --git a/packages/vscode-vue/src/common.ts b/packages/vscode-vue/src/common.ts index ad0abb777..f3abe1f89 100644 --- a/packages/vscode-vue/src/common.ts +++ b/packages/vscode-vue/src/common.ts @@ -134,7 +134,7 @@ async function doActivate(context: vscode.ExtensionContext, createLc: CreateLang ); for (const client of clients) { - activateServerSys(context, client, undefined); + activateServerSys(client); } async function requestReloadVscode() { diff --git a/packages/vue-component-meta/package.json b/packages/vue-component-meta/package.json index e7ab4f043..a7a9395fc 100644 --- a/packages/vue-component-meta/package.json +++ b/packages/vue-component-meta/package.json @@ -13,7 +13,7 @@ "directory": "packages/vue-component-meta" }, "dependencies": { - "@volar/typescript": "1.6.9", + "@volar/typescript": "1.7.0", "@vue/language-core": "1.7.8", "typesafe-path": "^0.2.2", "vue-component-type-helpers": "1.7.8" diff --git a/packages/vue-component-meta/src/index.ts b/packages/vue-component-meta/src/index.ts index a1572e8ad..e5447eaea 100644 --- a/packages/vue-component-meta/src/index.ts +++ b/packages/vue-component-meta/src/index.ts @@ -25,10 +25,12 @@ export function createComponentMetaCheckerByJsonConfig( checkerOptions: MetaCheckerOptions = {}, ts: typeof import('typescript/lib/tsserverlibrary') = require('typescript'), ) { + const rootPath = (root as path.OsPath).replace(/\\/g, '/') as path.PosixPath; return createComponentMetaCheckerWorker( () => vue.createParsedCommandLineByJson(ts, ts.sys, root, json), checkerOptions, - path.join((root as path.OsPath).replace(/\\/g, '/') as path.PosixPath, 'jsconfig.json.global.vue' as path.PosixPath), + rootPath, + path.join(rootPath, 'jsconfig.json.global.vue' as path.PosixPath), ts, ); } @@ -38,10 +40,12 @@ export function createComponentMetaChecker( checkerOptions: MetaCheckerOptions = {}, ts: typeof import('typescript/lib/tsserverlibrary') = require('typescript'), ) { + const tsconfig = (tsconfigPath as path.OsPath).replace(/\\/g, '/') as path.PosixPath; return createComponentMetaCheckerWorker( () => vue.createParsedCommandLine(ts, ts.sys, tsconfigPath), checkerOptions, - (tsconfigPath as path.OsPath).replace(/\\/g, '/') as path.PosixPath + '.global.vue', + path.dirname(tsconfig), + tsconfig + '.global.vue', ts, ); } @@ -49,6 +53,7 @@ export function createComponentMetaChecker( function createComponentMetaCheckerWorker( loadParsedCommandLine: () => vue.ParsedCommandLine, checkerOptions: MetaCheckerOptions, + rootPath: string, globalComponentName: string, ts: typeof import('typescript/lib/tsserverlibrary'), ) { @@ -63,15 +68,15 @@ function createComponentMetaCheckerWorker( const scriptSnapshots = new Map(); const scriptVersions = new Map(); - const _host: vue.LanguageServiceHost = { - ...ts.sys, - getProjectVersion: () => projectVersion.toString(), - getDefaultLibFileName: (options) => ts.getDefaultLibFilePath(options), // should use ts.getDefaultLibFilePath not ts.getDefaultLibFileName - useCaseSensitiveFileNames: () => ts.sys.useCaseSensitiveFileNames, + const _host: vue.TypeScriptLanguageHost = { + getCurrentDirectory: () => rootPath, + getProjectVersion: () => projectVersion, getCompilationSettings: () => parsedCommandLine.options, getScriptFileNames: () => fileNames, getProjectReferences: () => parsedCommandLine.projectReferences, - getScriptVersion: (fileName) => scriptVersions.get(fileName)?.toString() ?? '', + getScriptVersion: (fileName) => { + return scriptVersions.get(fileName)?.toString(); + }, getScriptSnapshot: (fileName) => { if (!scriptSnapshots.has(fileName)) { const fileText = ts.sys.readFile(fileName); @@ -86,12 +91,13 @@ function createComponentMetaCheckerWorker( return { ...baseCreate(_host, parsedCommandLine.vueOptions, checkerOptions, globalComponentName, ts), updateFile(fileName: string, text: string) { + scriptVersions.set(fileName, (scriptVersions.get(fileName) ?? 0) + 1); fileName = (fileName as path.OsPath).replace(/\\/g, '/') as path.PosixPath; scriptSnapshots.set(fileName, ts.ScriptSnapshot.fromString(text)); - scriptVersions.set(fileName, scriptVersions.has(fileName) ? scriptVersions.get(fileName)! + 1 : 1); projectVersion++; }, deleteFile(fileName: string) { + scriptVersions.set(fileName, (scriptVersions.get(fileName) ?? 0) + 1); fileName = (fileName as path.OsPath).replace(/\\/g, '/') as path.PosixPath; fileNames = fileNames.filter(f => f !== fileName); projectVersion++; @@ -102,15 +108,15 @@ function createComponentMetaCheckerWorker( this.clearCache(); }, clearCache() { - scriptSnapshots.clear(); scriptVersions.clear(); + scriptSnapshots.clear(); projectVersion++; }, }; } export function baseCreate( - _host: vue.LanguageServiceHost, + _host: vue.TypeScriptLanguageHost, _vueCompilerOptions: Partial, checkerOptions: MetaCheckerOptions, globalComponentName: string, @@ -119,7 +125,7 @@ export function baseCreate( const vueCompilerOptions = vue.resolveVueCompilerOptions(_vueCompilerOptions); const globalComponentSnapshot = ts.ScriptSnapshot.fromString(''); const metaSnapshots: Record = {}; - const host = new Proxy>({ + const host = new Proxy>({ getScriptFileNames: () => { const names = _host.getScriptFileNames(); return [ @@ -150,33 +156,28 @@ export function baseCreate( } return _host[prop as keyof typeof _host]; }, - }) as vue.LanguageServiceHost; + }) as vue.TypeScriptLanguageHost; const vueLanguages = ts ? vue.createLanguages( host.getCompilationSettings(), vueCompilerOptions, ts, ) : []; - const proxyApis: Partial = checkerOptions.forceUseTs ? { - getScriptKind: (fileName) => { + const core = vue.createLanguageContext(host, vueLanguages); + const tsLs = createLanguageService(core, ts, ts.sys); + + if (checkerOptions.forceUseTs) { + const getScriptKind = tsLs.__internal__.languageServiceHost.getScriptKind; + tsLs.__internal__.languageServiceHost.getScriptKind = (fileName) => { if (fileName.endsWith('.vue.js')) { return ts.ScriptKind.TS; } if (fileName.endsWith('.vue.jsx')) { return ts.ScriptKind.TSX; } - return host.getScriptKind!(fileName); - }, - } : {}; - const proxyHost = new Proxy(host, { - get(target, propKey: keyof ts.LanguageServiceHost) { - if (propKey in proxyApis) { - return proxyApis[propKey]; - } - return target[propKey]; - } - }); - const core = vue.createLanguageContext(proxyHost, vueLanguages); - const tsLs = createLanguageService(core, ts); + return getScriptKind!(fileName); + }; + } + let globalPropNames: string[] | undefined; return { @@ -626,7 +627,7 @@ function createSchemaResolvers( const [virtualFile] = core.virtualFiles.getVirtualFile(fileName); if (virtualFile) { const maps = core.virtualFiles.getMaps(virtualFile); - for (const [source, map] of maps) { + for (const [source, [_, map]] of maps) { const start = map.toSourceOffset(declaration.getStart()); const end = map.toSourceOffset(declaration.getEnd()); if (start && end) { diff --git a/packages/vue-language-core/package.json b/packages/vue-language-core/package.json index c8ce504de..a01208330 100644 --- a/packages/vue-language-core/package.json +++ b/packages/vue-language-core/package.json @@ -13,8 +13,8 @@ "directory": "packages/vue-language-core" }, "dependencies": { - "@volar/language-core": "1.6.9", - "@volar/source-map": "1.6.9", + "@volar/language-core": "1.7.0", + "@volar/source-map": "1.7.0", "@vue/compiler-dom": "^3.3.0", "@vue/reactivity": "^3.3.0", "@vue/shared": "^3.3.0", diff --git a/packages/vue-language-core/src/languageModule.ts b/packages/vue-language-core/src/languageModule.ts index 0292c08a5..45d03759f 100644 --- a/packages/vue-language-core/src/languageModule.ts +++ b/packages/vue-language-core/src/languageModule.ts @@ -12,7 +12,7 @@ export function createLanguage( _vueCompilerOptions: Partial = {}, ts: typeof import('typescript/lib/tsserverlibrary') = require('typescript'), codegenStack: boolean = false, -): Language { +) { const vueCompilerOptions = resolveVueCompilerOptions(_vueCompilerOptions); @@ -24,8 +24,7 @@ export function createLanguage( vueCompilerOptions, codegenStack, ); - const sharedTypesSnapshot = ts.ScriptSnapshot.fromString(sharedTypes.getTypesCode(vueCompilerOptions)); - const languageModule: Language = { + const languageModule: Language = { createVirtualFile(fileName, snapshot, languageId) { if ( languageId === 'vue' @@ -37,35 +36,22 @@ export function createLanguage( return new VueFile(fileName, snapshot, vueCompilerOptions, vueLanguagePlugin, ts, codegenStack); } }, - updateVirtualFile(sourceFile: VueFile, snapshot) { + updateVirtualFile(sourceFile, snapshot) { sourceFile.update(snapshot); }, resolveHost(host) { + const sharedTypesSnapshot = ts.ScriptSnapshot.fromString(sharedTypes.getTypesCode(vueCompilerOptions)); + const sharedTypesFileName = path.join(host.getCurrentDirectory(), sharedTypes.baseName); return { ...host, - fileExists(fileName) { - const basename = path.basename(fileName); - if (basename === sharedTypes.baseName) { - return true; - } - return host.fileExists(fileName); - }, getScriptFileNames() { return [ - path.join(host.getCurrentDirectory(), sharedTypes.baseName), + sharedTypesFileName, ...host.getScriptFileNames(), ]; }, - getScriptVersion(fileName) { - const basename = path.basename(fileName); - if (basename === sharedTypes.baseName) { - return ''; - } - return host.getScriptVersion(fileName); - }, getScriptSnapshot(fileName) { - const basename = path.basename(fileName); - if (basename === sharedTypes.baseName) { + if (fileName === sharedTypesFileName) { return sharedTypesSnapshot; } return host.getScriptSnapshot(fileName); diff --git a/packages/vue-language-core/src/utils/ts.ts b/packages/vue-language-core/src/utils/ts.ts index cf87d2982..021974f63 100644 --- a/packages/vue-language-core/src/utils/ts.ts +++ b/packages/vue-language-core/src/utils/ts.ts @@ -13,9 +13,8 @@ export function createParsedCommandLineByJson( json: any, ): ParsedCommandLine { - const tsConfigPath = path.join(rootDir, 'jsconfig.json'); const proxyHost = proxyParseConfigHostForExtendConfigPaths(parseConfigHost); - ts.parseJsonConfigFileContent(json, proxyHost.host, rootDir, {}, tsConfigPath); + ts.parseJsonConfigFileContent(json, proxyHost.host, rootDir, {}, rootDir + '/jsconfig.json'); let vueOptions: Partial = {}; @@ -31,9 +30,9 @@ export function createParsedCommandLineByJson( const parsed = ts.parseJsonConfigFileContent( json, proxyHost.host, - path.dirname(tsConfigPath), + rootDir, {}, - tsConfigPath, + rootDir + '/jsconfig.json', undefined, (vueOptions.extensions ?? ['.vue']).map(extension => ({ extension: extension.slice(1), diff --git a/packages/vue-language-plugin-pug/package.json b/packages/vue-language-plugin-pug/package.json index 7154463f4..ee88ca8a7 100644 --- a/packages/vue-language-plugin-pug/package.json +++ b/packages/vue-language-plugin-pug/package.json @@ -17,6 +17,6 @@ }, "dependencies": { "@volar/source-map": "1.6.9", - "volar-service-pug": "0.0.4" + "volar-service-pug": "0.0.5" } } diff --git a/packages/vue-language-server/package.json b/packages/vue-language-server/package.json index c154f357a..50a35015f 100644 --- a/packages/vue-language-server/package.json +++ b/packages/vue-language-server/package.json @@ -16,8 +16,9 @@ "directory": "packages/vue-language-server" }, "dependencies": { - "@volar/language-core": "1.6.9", - "@volar/language-server": "1.6.9", + "@volar/language-core": "1.7.0", + "@volar/language-server": "1.7.0", + "@volar/typescript": "1.7.0", "@vue/language-core": "1.7.8", "@vue/language-service": "1.7.8", "vscode-languageserver-protocol": "^3.17.3", diff --git a/packages/vue-language-server/src/languageServerPlugin.ts b/packages/vue-language-server/src/languageServerPlugin.ts index 11728f76c..f1dab2454 100644 --- a/packages/vue-language-server/src/languageServerPlugin.ts +++ b/packages/vue-language-server/src/languageServerPlugin.ts @@ -8,6 +8,7 @@ import { VueServerInitializationOptions } from './types'; import type * as ts from 'typescript/lib/tsserverlibrary'; import * as componentMeta from 'vue-component-meta'; import { VueCompilerOptions } from '@vue/language-core'; +import { createSys } from '@volar/typescript'; export function createServerPlugin(connection: Connection) { @@ -20,7 +21,7 @@ export function createServerPlugin(connection: Connection) { const ts = modules.typescript; const vueFileExtensions: string[] = ['vue']; - const hostToVueOptions = new WeakMap>(); + const hostToVueOptions = new WeakMap>(); if (initOptions.additionalExtensions) { for (const additionalExtension of initOptions.additionalExtensions) { @@ -31,9 +32,9 @@ export function createServerPlugin(connection: Connection) { return { extraFileExtensions: vueFileExtensions.map(ext => ({ extension: ext, isMixedContent: true, scriptKind: ts.ScriptKind.Deferred })), watchFileExtensions: ['js', 'cjs', 'mjs', 'ts', 'cts', 'mts', 'jsx', 'tsx', 'json', ...vueFileExtensions], - resolveConfig(config, ctx) { + async resolveConfig(config, ctx) { - const vueOptions = getVueCompilerOptions(); + const vueOptions = await getVueCompilerOptions(); const vueLanguageServiceSettings = getVueLanguageServiceSettings(); if (ctx) { @@ -49,20 +50,27 @@ export function createServerPlugin(connection: Connection) { initOptions.codegenStack, ); - function getVueCompilerOptions() { + async function getVueCompilerOptions() { const ts = modules.typescript; - let vueOptions: Partial; - - if (typeof ctx?.project.tsConfig === 'string' && ts) { - vueOptions = vue2.createParsedCommandLine(ts, ctx.sys, ctx.project.tsConfig).vueOptions; - } - else if (typeof ctx?.project.tsConfig === 'object' && ts) { - vueOptions = vue2.createParsedCommandLineByJson(ts, ctx.sys, ctx.host.getCurrentDirectory(), ctx.project.tsConfig).vueOptions; - } - else { - vueOptions = {}; + let vueOptions: Partial = {}; + + if (ts && ctx) { + const sys = createSys(undefined, ts, ctx.env); + let sysVersion: number | undefined; + let newSysVersion = await sys.sync(); + + while (sysVersion !== newSysVersion) { + sysVersion = newSysVersion; + if (typeof ctx?.project.tsConfig === 'string' && ts) { + vueOptions = vue2.createParsedCommandLine(ts, sys, ctx.project.tsConfig).vueOptions; + } + else if (typeof ctx?.project.tsConfig === 'object' && ts) { + vueOptions = vue2.createParsedCommandLineByJson(ts, sys, ctx.host.getCurrentDirectory(), ctx.project.tsConfig).vueOptions; + } + newSysVersion = await sys.sync(); + } } vueOptions.extensions = [ @@ -115,14 +123,14 @@ export function createServerPlugin(connection: Connection) { connection.onRequest(GetConvertAttrCasingEditsRequest.type, async params => { const languageService = await getService(params.textDocument.uri); if (languageService) { - const vueOptions = hostToVueOptions.get(languageService.context.core.host); + const vueOptions = hostToVueOptions.get(languageService.context.host); if (vueOptions) { return nameCasing.convertAttrName(ts, languageService.context, params.textDocument.uri, params.casing); } } }); - const checkers = new WeakMap(); + const checkers = new WeakMap(); connection.onRequest(GetComponentMeta.type, async params => { @@ -130,16 +138,18 @@ export function createServerPlugin(connection: Connection) { if (!languageService) return; - let checker = checkers.get(languageService.context.core.host); + const host = languageService.context.host; + + let checker = checkers.get(host); if (!checker) { checker = componentMeta.baseCreate( - languageService.context.core.host, - hostToVueOptions.get(languageService.context.core.host)!, + host, + hostToVueOptions.get(host)!, {}, - languageService.context.core.host.getCurrentDirectory() + '/tsconfig.json.global.vue', + host.getCurrentDirectory() + '/tsconfig.json.global.vue', ts, ); - checkers.set(languageService.context.core.host, checker); + checkers.set(host, checker); } return checker.getComponentMeta(env.uriToFileName(params.uri)); }); diff --git a/packages/vue-language-service/package.json b/packages/vue-language-service/package.json index bbf46ffc6..1929bc0ad 100644 --- a/packages/vue-language-service/package.json +++ b/packages/vue-language-service/package.json @@ -24,14 +24,14 @@ "@vue/language-core": "1.7.8", "@vue/reactivity": "^3.3.0", "@vue/shared": "^3.3.0", - "volar-service-css": "0.0.4", - "volar-service-emmet": "0.0.4", - "volar-service-html": "0.0.4", - "volar-service-json": "0.0.4", - "volar-service-pug": "0.0.4", - "volar-service-pug-beautify": "0.0.4", - "volar-service-typescript": "0.0.4", - "volar-service-typescript-twoslash-queries": "0.0.4", + "volar-service-css": "0.0.5", + "volar-service-emmet": "0.0.5", + "volar-service-html": "0.0.5", + "volar-service-json": "0.0.5", + "volar-service-pug": "0.0.5", + "volar-service-pug-beautify": "0.0.5", + "volar-service-typescript": "0.0.5", + "volar-service-typescript-twoslash-queries": "0.0.5", "vscode-html-languageservice": "^5.0.4", "vscode-languageserver-textdocument": "^1.0.8" }, diff --git a/packages/vue-language-service/tests/utils/createTester.ts b/packages/vue-language-service/tests/utils/createTester.ts index 81deea396..614620712 100644 --- a/packages/vue-language-service/tests/utils/createTester.ts +++ b/packages/vue-language-service/tests/utils/createTester.ts @@ -1,8 +1,9 @@ -import { resolveConfig, LanguageServiceHost } from '../..'; +import { resolveConfig } from '../..'; import * as ts from 'typescript'; +import * as fs from 'fs'; import * as path from 'path'; import { URI } from 'vscode-uri'; -import { createLanguageService } from '@volar/language-service'; +import { FileType, TypeScriptLanguageHost, createLanguageService } from '@volar/language-service'; const uriToFileName = (uri: string) => URI.parse(uri).fsPath.replace(/\\/g, '/'); const fileNameToUri = (fileName: string) => URI.file(fileName).toString(); @@ -24,26 +25,15 @@ function createTester(root: string) { const config = ts.readJsonConfigFile(realTsConfig, ts.sys.readFile); const parsedCommandLine = ts.parseJsonSourceFileConfigFileContent(config, parseConfigHost, path.dirname(realTsConfig), {}, realTsConfig); parsedCommandLine.fileNames = parsedCommandLine.fileNames.map(fileName => fileName.replace(/\\/g, '/')); - const scriptVersions = new Map(); - const scriptSnapshots = new Map(); - const host: LanguageServiceHost = { - // ts - getNewLine: () => ts.sys.newLine, - useCaseSensitiveFileNames: () => ts.sys.useCaseSensitiveFileNames, - readFile: ts.sys.readFile, - writeFile: ts.sys.writeFile, - fileExists: ts.sys.fileExists, - directoryExists: ts.sys.directoryExists, - getDirectories: ts.sys.getDirectories, - readDirectory: ts.sys.readDirectory, - realpath: ts.sys.realpath, - // custom - getDefaultLibFileName: options => ts.getDefaultLibFilePath(options), - getProjectVersion: () => '0', + const scriptSnapshots = new Map(); + const host: TypeScriptLanguageHost = { + getProjectVersion: () => 0, getScriptFileNames: () => parsedCommandLine.fileNames, getCurrentDirectory: () => root, getCompilationSettings: () => parsedCommandLine.options, - getScriptVersion, + getScriptVersion: () => { + return undefined; + }, getScriptSnapshot, }; const defaultVSCodeSettings: any = { @@ -72,12 +62,42 @@ function createTester(root: string) { } return result; }, - onDidChangeConfiguration() { }, - documentContext: { - resolveReference: (ref: any, _base: any) => { - return ref; + fs: { + stat(uri) { + if (uri.startsWith('file://')) { + const stats = fs.statSync(uriToFileName(uri), { throwIfNoEntry: false }); + if (stats) { + return { + type: stats.isFile() ? FileType.File + : stats.isDirectory() ? FileType.Directory + : stats.isSymbolicLink() ? FileType.SymbolicLink + : FileType.Unknown, + ctime: stats.ctimeMs, + mtime: stats.mtimeMs, + size: stats.size, + }; + } + } }, - }, + readFile(uri, encoding) { + if (uri.startsWith('file://')) { + return fs.readFileSync(uriToFileName(uri), { encoding: encoding as 'utf-8' ?? 'utf-8' }); + } + }, + readDirectory(uri) { + if (uri.startsWith('file://')) { + const dirName = uriToFileName(uri); + const files = fs.existsSync(dirName) ? fs.readdirSync(dirName, { withFileTypes: true }) : []; + return files.map<[string, FileType]>(file => { + return [file.name, file.isFile() ? FileType.File + : file.isDirectory() ? FileType.Directory + : file.isSymbolicLink() ? FileType.SymbolicLink + : FileType.Unknown]; + }); + } + return []; + }, + } }, resolveConfig({}), host, @@ -94,19 +114,15 @@ function createTester(root: string) { function setVSCodeSettings(settings: any = undefined) { currentVSCodeSettings = settings; } - function getScriptVersion(fileName: string) { - return scriptVersions.get(fileName) ?? ''; - } function getScriptSnapshot(fileName: string) { - const version = getScriptVersion(fileName); - const cache = scriptSnapshots.get(fileName); - if (cache && cache[0] === version) { - return cache[1]; + const snapshot = scriptSnapshots.get(fileName); + if (snapshot) { + return snapshot; } const text = getScriptText(fileName); if (text !== undefined) { const snapshot = ts.ScriptSnapshot.fromString(text); - scriptSnapshots.set(fileName, [version.toString(), snapshot]); + scriptSnapshots.set(fileName, snapshot); return snapshot; } } diff --git a/packages/vue-tsc-eslint-hook/src/index.ts b/packages/vue-tsc-eslint-hook/src/index.ts index e31596b00..36d052f86 100644 --- a/packages/vue-tsc-eslint-hook/src/index.ts +++ b/packages/vue-tsc-eslint-hook/src/index.ts @@ -13,7 +13,7 @@ export = async function ( baseConfig: resolveConfig(tsProgram), useEslintrc: false, }); - const fileNames = program.__vue.languageServiceHost.getScriptFileNames(); + const fileNames = program.__vue.languageHost.getScriptFileNames(); const mapper = program.__vue.languageService.__internal__.context.virtualFiles; const formatter = await eslint.loadFormatter(); @@ -66,9 +66,9 @@ export = async function ( character: (message.endColumn ?? message.column) - 1, }); - for (const [sourceFileName, map] of mapper.getMaps(embeddedFile)) { + for (const [_, [sourceSnapshot, map]] of mapper.getMaps(embeddedFile)) { - if (sourceFileName !== vueFile.fileName) + if (sourceSnapshot !== vueFile.snapshot) continue; for (const start of map.toSourceOffsets(msgStart)) { diff --git a/packages/vue-tsc/src/index.ts b/packages/vue-tsc/src/index.ts index f892d1406..3bf132a94 100644 --- a/packages/vue-tsc/src/index.ts +++ b/packages/vue-tsc/src/index.ts @@ -10,7 +10,7 @@ export type _Program = ts.Program & { __vue: ProgramContext; }; interface ProgramContext { projectVersion: number, options: ts.CreateProgramOptions, - languageServiceHost: vue.LanguageServiceHost, + languageHost: vue.TypeScriptLanguageHost, vueCompilerOptions: Partial, languageService: ReturnType, } @@ -40,8 +40,8 @@ export function createProgram(options: ts.CreateProgramOptions) { const ctx: ProgramContext = { projectVersion: 0, options, - get languageServiceHost() { - return vueLsHost; + get languageHost() { + return languageHost; }, get vueCompilerOptions() { return vueCompilerOptions; @@ -55,38 +55,32 @@ export function createProgram(options: ts.CreateProgramOptions) { projectVersion: number, modifiedTime: number, scriptSnapshot: ts.IScriptSnapshot, - version: string, }>(); - const vueLsHost = new Proxy({ - // avoid failed with tsc built-in fileExists - resolveModuleNames: undefined, - resolveModuleNameLiterals: undefined, - - writeFile: (fileName, content) => { - if (fileName.indexOf('__VLS_') === -1) { - ctx.options.host!.writeFile(fileName, content, false); - } - }, + const languageHost: vue.TypeScriptLanguageHost = { getCompilationSettings: () => ctx.options.options, getScriptFileNames: () => { return ctx.options.rootNames as string[]; }, - getScriptVersion, + getScriptVersion: (fileName) => { + return ts.sys.getModifiedTime?.(fileName)?.valueOf().toString(); + + }, getScriptSnapshot, getProjectVersion: () => { - return ctx.projectVersion.toString(); + return ctx.projectVersion; }, getProjectReferences: () => ctx.options.projectReferences, - isTsc: true, - }, { - get: (target, property) => { - if (property in target) { - return target[property as keyof vue.LanguageServiceHost]; + getCurrentDirectory: () => ctx.options.host!.getCurrentDirectory(), + getCancellationToken: ctx.options.host!.getCancellationToken ? () => ctx.options.host!.getCancellationToken!() : undefined, + }; + const vueTsLs = vueTs.createLanguageService(languageHost, vueCompilerOptions, ts as any, { + ...ts.sys, + writeFile: (fileName, content) => { + if (fileName.indexOf('__VLS_') === -1) { + ctx.options.host!.writeFile(fileName, content, false); } - return ctx.options.host![property as keyof ts.CompilerHost]; }, }); - const vueTsLs = vueTs.createLanguageService(vueLsHost, vueCompilerOptions, ts as any); program = vueTsLs.getProgram() as (ts.Program & { __vue: ProgramContext; }); program.__vue = ctx; @@ -98,9 +92,6 @@ export function createProgram(options: ts.CreateProgramOptions) { } return {}; } - function getScriptVersion(fileName: string) { - return getScript(fileName)?.version ?? ''; - } function getScriptSnapshot(fileName: string) { return getScript(fileName)?.scriptSnapshot; } diff --git a/packages/vue-typescript/package.json b/packages/vue-typescript/package.json index f0cb57548..804151250 100644 --- a/packages/vue-typescript/package.json +++ b/packages/vue-typescript/package.json @@ -13,7 +13,7 @@ "directory": "packages/vue-typescript" }, "dependencies": { - "@volar/typescript": "1.6.9", + "@volar/typescript": "1.7.0", "@vue/language-core": "1.7.8" } } diff --git a/packages/vue-typescript/src/index.ts b/packages/vue-typescript/src/index.ts index dec1e1ed7..91c2e8f35 100644 --- a/packages/vue-typescript/src/index.ts +++ b/packages/vue-typescript/src/index.ts @@ -1,10 +1,12 @@ import * as base from '@volar/typescript'; import * as vue from '@vue/language-core'; +import type * as ts from 'typescript/lib/tsserverlibrary'; export function createLanguageService( - host: vue.LanguageServiceHost, + host: vue.TypeScriptLanguageHost, vueCompilerOptions: Partial, ts: typeof import('typescript/lib/tsserverlibrary'), + sys: ts.System, ) { const languageService = base.createLanguageService( vue.createLanguageContext( @@ -16,6 +18,7 @@ export function createLanguageService( ), ), ts, + sys, ); const getCompletionsAtPosition = languageService.getCompletionsAtPosition; languageService.getCompletionsAtPosition = (fileName, position, options) => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a1d89bf6d..944090c50 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,19 +16,19 @@ importers: devDependencies: '@types/node': specifier: latest - version: 20.2.3 + version: 20.2.5 '@volar/language-service': - specifier: 1.6.9 - version: 1.6.9 + specifier: 1.7.0 + version: 1.7.0 typescript: specifier: latest - version: 5.0.4 + version: 5.1.3 vite: specifier: latest - version: 4.3.8(@types/node@20.2.3) + version: 4.3.9(@types/node@20.2.5) vitest: specifier: latest - version: 0.31.1 + version: 0.31.4 packages/typescript-vue-plugin: dependencies: @@ -64,8 +64,8 @@ importers: specifier: 1.67.0 version: 1.67.0 '@volar/vscode': - specifier: 1.6.9 - version: 1.6.9 + specifier: 1.7.0 + version: 1.7.0 '@vue/language-server': specifier: 1.7.8 version: link:../vue-language-server @@ -90,9 +90,9 @@ importers: packages/vue-component-meta: dependencies: - '@volar/language-core': - specifier: 1.6.9 - version: 1.6.9 + '@volar/typescript': + specifier: 1.7.0 + version: 1.7.0 '@vue/language-core': specifier: 1.7.8 version: link:../vue-language-core @@ -108,11 +108,11 @@ importers: packages/vue-language-core: dependencies: '@volar/language-core': - specifier: 1.6.9 - version: 1.6.9 + specifier: 1.7.0 + version: 1.7.0 '@volar/source-map': - specifier: 1.6.9 - version: 1.6.9 + specifier: 1.7.0 + version: 1.7.0 '@vue/compiler-dom': specifier: ^3.3.0 version: 3.3.4 @@ -145,8 +145,8 @@ importers: specifier: 1.6.9 version: 1.6.9 volar-service-pug: - specifier: 0.0.4 - version: 0.0.4 + specifier: 0.0.5 + version: 0.0.5 devDependencies: '@vue/language-core': specifier: 1.7.8 @@ -155,11 +155,14 @@ importers: packages/vue-language-server: dependencies: '@volar/language-core': - specifier: 1.6.9 - version: 1.6.9 + specifier: 1.7.0 + version: 1.7.0 '@volar/language-server': - specifier: 1.6.9 - version: 1.6.9 + specifier: 1.7.0 + version: 1.7.0 + '@volar/typescript': + specifier: 1.7.0 + version: 1.7.0 '@vue/language-core': specifier: 1.7.8 version: link:../vue-language-core @@ -181,6 +184,9 @@ importers: '@volar/language-service': specifier: 1.6.9 version: 1.6.9 + '@volar/typescript': + specifier: 1.6.9 + version: 1.6.9 '@vue/compiler-dom': specifier: ^3.3.0 version: 3.3.4 @@ -194,39 +200,39 @@ importers: specifier: ^3.3.0 version: 3.3.4 volar-service-css: - specifier: 0.0.4 - version: 0.0.4 + specifier: 0.0.5 + version: 0.0.5 volar-service-emmet: - specifier: 0.0.4 - version: 0.0.4 + specifier: 0.0.5 + version: 0.0.5 volar-service-html: - specifier: 0.0.4 - version: 0.0.4 + specifier: 0.0.5 + version: 0.0.5 volar-service-json: - specifier: 0.0.4 - version: 0.0.4 + specifier: 0.0.5 + version: 0.0.5 volar-service-pug: - specifier: 0.0.4 - version: 0.0.4 + specifier: 0.0.5 + version: 0.0.5 volar-service-pug-beautify: - specifier: 0.0.4 - version: 0.0.4 + specifier: 0.0.5 + version: 0.0.5 volar-service-typescript: - specifier: 0.0.4 - version: 0.0.4 + specifier: 0.0.5 + version: 0.0.5(@volar/typescript@1.6.9) volar-service-typescript-twoslash-queries: - specifier: 0.0.4 - version: 0.0.4 + specifier: 0.0.5 + version: 0.0.5 vscode-html-languageservice: specifier: ^5.0.4 - version: 5.0.5 + version: 5.0.6 vscode-languageserver-textdocument: specifier: ^1.0.8 version: 1.0.8 devDependencies: '@volar/kit': specifier: 1.6.9 - version: 1.6.9(typescript@5.0.4) + version: 1.6.9(typescript@5.1.3) vscode-languageserver-protocol: specifier: ^3.17.3 version: 3.17.3 @@ -263,7 +269,7 @@ importers: devDependencies: '@types/eslint': specifier: latest - version: 8.37.0 + version: 8.40.0 vue-tsc: specifier: 1.7.8 version: link:../vue-tsc @@ -271,8 +277,8 @@ importers: packages/vue-typescript: dependencies: '@volar/typescript': - specifier: 1.6.9 - version: 1.6.9 + specifier: 1.7.0 + version: 1.7.0 '@vue/language-core': specifier: 1.7.8 version: link:../vue-language-core @@ -305,15 +311,15 @@ packages: dev: false optional: true - /@babel/parser@7.21.8: - resolution: {integrity: sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==} + /@babel/parser@7.22.4: + resolution: {integrity: sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.4 - /@babel/types@7.21.5: - resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==} + /@babel/types@7.22.4: + resolution: {integrity: sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.21.5 @@ -569,7 +575,7 @@ packages: dependencies: string-width: 5.1.2 string-width-cjs: /string-width@4.2.3 - strip-ansi: 7.0.1 + strip-ansi: 7.1.0 strip-ansi-cjs: /strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 @@ -619,7 +625,7 @@ packages: '@lerna-lite/publish': 2.4.0 '@lerna-lite/version': 2.4.0(@lerna-lite/publish@2.4.0) dedent: 0.7.0 - dotenv: 16.0.3 + dotenv: 16.1.3 import-local: 3.1.0 load-json-file: 7.0.1 npmlog: 7.0.1 @@ -644,7 +650,7 @@ packages: fs-extra: 11.1.1 glob-parent: 6.0.2 globby: 13.1.4 - inquirer: 9.2.5 + inquirer: 9.2.6 is-ci: 3.0.1 json5: 2.2.3 load-json-file: 7.0.1 @@ -696,7 +702,7 @@ packages: glob: 10.2.6 has-unicode: 2.0.1 libnpmaccess: 7.0.2 - libnpmpublish: 7.2.0 + libnpmpublish: 7.3.0 normalize-path: 3.0.0 npm-package-arg: 10.1.0 npm-packlist: 7.0.4 @@ -706,7 +712,7 @@ packages: p-pipe: 4.0.0 pacote: 15.2.0 pify: 6.1.0 - read-package-json: 6.0.3 + read-package-json: 6.0.4 semver: 7.5.1 ssri: 10.0.4 tar: 6.1.15 @@ -1148,19 +1154,19 @@ packages: resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} dev: true - /@types/eslint@8.37.0: - resolution: {integrity: sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==} + /@types/eslint@8.40.0: + resolution: {integrity: sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g==} dependencies: '@types/estree': 1.0.1 - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.12 dev: true /@types/estree@1.0.1: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} dev: true - /@types/json-schema@7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + /@types/json-schema@7.0.12: + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} dev: true /@types/minimatch@5.1.2: @@ -1172,8 +1178,8 @@ packages: dev: false optional: true - /@types/node@20.2.3: - resolution: {integrity: sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==} + /@types/node@20.2.5: + resolution: {integrity: sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==} dev: true /@types/normalize-package-data@2.4.1: @@ -1189,53 +1195,53 @@ packages: resolution: {integrity: sha512-GH8BDf8cw9AC9080uneJfulhSa7KHSMI2s/CyKePXoGNos9J486w2V4YKoeNUqIEkW4hKoEAWp6/cXTwyGj47g==} dev: true - /@vitest/expect@0.31.1: - resolution: {integrity: sha512-BV1LyNvhnX+eNYzJxlHIGPWZpwJFZaCcOIzp2CNG0P+bbetenTupk6EO0LANm4QFt0TTit+yqx7Rxd1qxi/SQA==} + /@vitest/expect@0.31.4: + resolution: {integrity: sha512-tibyx8o7GUyGHZGyPgzwiaPaLDQ9MMuCOrc03BYT0nryUuhLbL7NV2r/q98iv5STlwMgaKuFJkgBW/8iPKwlSg==} dependencies: - '@vitest/spy': 0.31.1 - '@vitest/utils': 0.31.1 + '@vitest/spy': 0.31.4 + '@vitest/utils': 0.31.4 chai: 4.3.7 dev: true - /@vitest/runner@0.31.1: - resolution: {integrity: sha512-imWuc82ngOtxdCUpXwtEzZIuc1KMr+VlQ3Ondph45VhWoQWit5yvG/fFcldbnCi8DUuFi+NmNx5ehMUw/cGLUw==} + /@vitest/runner@0.31.4: + resolution: {integrity: sha512-Wgm6UER+gwq6zkyrm5/wbpXGF+g+UBB78asJlFkIOwyse0pz8lZoiC6SW5i4gPnls/zUcPLWS7Zog0LVepXnpg==} dependencies: - '@vitest/utils': 0.31.1 + '@vitest/utils': 0.31.4 concordance: 5.0.4 p-limit: 4.0.0 - pathe: 1.1.0 + pathe: 1.1.1 dev: true - /@vitest/snapshot@0.31.1: - resolution: {integrity: sha512-L3w5uU9bMe6asrNzJ8WZzN+jUTX4KSgCinEJPXyny0o90fG4FPQMV0OWsq7vrCWfQlAilMjDnOF9nP8lidsJ+g==} + /@vitest/snapshot@0.31.4: + resolution: {integrity: sha512-LemvNumL3NdWSmfVAMpXILGyaXPkZbG5tyl6+RQSdcHnTj6hvA49UAI8jzez9oQyE/FWLKRSNqTGzsHuk89LRA==} dependencies: magic-string: 0.30.0 - pathe: 1.1.0 + pathe: 1.1.1 pretty-format: 27.5.1 dev: true - /@vitest/spy@0.31.1: - resolution: {integrity: sha512-1cTpt2m9mdo3hRLDyCG2hDQvRrePTDgEJBFQQNz1ydHHZy03EiA6EpFxY+7ODaY7vMRCie+WlFZBZ0/dQWyssQ==} + /@vitest/spy@0.31.4: + resolution: {integrity: sha512-3ei5ZH1s3aqbEyftPAzSuunGICRuhE+IXOmpURFdkm5ybUADk+viyQfejNk6q8M5QGX8/EVKw+QWMEP3DTJDag==} dependencies: - tinyspy: 2.1.0 + tinyspy: 2.1.1 dev: true - /@vitest/utils@0.31.1: - resolution: {integrity: sha512-yFyRD5ilwojsZfo3E0BnH72pSVSuLg2356cN1tCEe/0RtDzxTPYwOomIC+eQbot7m6DRy4tPZw+09mB7NkbMmA==} + /@vitest/utils@0.31.4: + resolution: {integrity: sha512-DobZbHacWznoGUfYU8XDPY78UubJxXfMNY1+SUdOp1NsI34eopSA6aZMeaGu10waSOeYwE8lxrd/pLfT0RMxjQ==} dependencies: concordance: 5.0.4 loupe: 2.3.6 pretty-format: 27.5.1 dev: true - /@volar/kit@1.6.9(typescript@5.0.4): + /@volar/kit@1.6.9(typescript@5.1.3): resolution: {integrity: sha512-8OZe2CFO8MBSyuhmTPXpAfyULPDd5KsSIoYQxm1Hvya0od+ORHdAkY8MAI+qcRVdGTDU/tSb+391oyQJfnO8bQ==} peerDependencies: typescript: '*' dependencies: '@volar/language-service': 1.6.9 typesafe-path: 0.2.2 - typescript: 5.0.4 + typescript: 5.1.3 vscode-languageserver-textdocument: 1.0.8 vscode-uri: 3.0.7 dev: true @@ -1245,15 +1251,20 @@ packages: dependencies: '@volar/source-map': 1.6.9 - /@volar/language-server@1.6.9: - resolution: {integrity: sha512-YowGO0h0TZ/PWRgssHkbGJidvxophfkqx5df246TFuwTg5W3J3/uPQ37em4n5VnwOAKj+grebG/Iv/gVwTya9w==} + /@volar/language-core@1.7.0: + resolution: {integrity: sha512-ZjuD1bSyPUcWwiCS3wq/BRslMbJ5kU4z4KC3n8epeEFNBo+o2INdASW0wJwG96HSHEbAfO74XFIJ3hQdDGcSAg==} dependencies: - '@volar/language-core': 1.6.9 - '@volar/language-service': 1.6.9 + '@volar/source-map': 1.7.0 + + /@volar/language-server@1.7.0: + resolution: {integrity: sha512-wRojoFbu8rMPIVe3mYb0819VQRTLuX2RrYk3FdU20MwxFtVttwQVGM4S8ayXlw5Af9GVou1SxSpHuECAWdSZTA==} + dependencies: + '@volar/language-core': 1.7.0 + '@volar/language-service': 1.7.0 + '@volar/typescript': 1.7.0 '@vscode/l10n': 0.0.11 request-light: 0.7.0 typesafe-path: 0.2.2 - vscode-html-languageservice: 5.0.5 vscode-languageserver: 8.1.0 vscode-languageserver-protocol: 3.17.3 vscode-languageserver-textdocument: 1.0.8 @@ -1268,21 +1279,39 @@ packages: vscode-languageserver-textdocument: 1.0.8 vscode-uri: 3.0.7 + /@volar/language-service@1.7.0: + resolution: {integrity: sha512-KIHLxj8tS+zUIYU9BQT38p64Yd8yFq/pGdJ2sqvQoX0PMh+ao4MCI99AZOtp4MS5rLzH4acZHTcV+NTLob32mw==} + dependencies: + '@volar/language-core': 1.7.0 + '@volar/source-map': 1.7.0 + vscode-languageserver-textdocument: 1.0.8 + vscode-uri: 3.0.7 + /@volar/source-map@1.6.9: resolution: {integrity: sha512-D+IgnJGxO2Q1tL5qh3vU7iaLHtfGXptpdUDLMwmx292Fz0aVIXlC85mHHawGjBWeg/JhRGtEl4BvfTdn+4Ng/w==} dependencies: muggle-string: 0.3.1 + /@volar/source-map@1.7.0: + resolution: {integrity: sha512-GIBfwyz5svFoTm/HVco2xbUis3Y3nk4AJIBCGMnF7yHxAfcDEf1tccXK9YfgwK+JGj9ovC6FEIYIVSwoi5/1MQ==} + dependencies: + muggle-string: 0.3.1 + /@volar/typescript@1.6.9: resolution: {integrity: sha512-L3WivzKVK5h/esfYdvnMXiE0wcH+wNalgFrpknuYgGraXNw+wGDaizEdVzKxyQYjez4bz/Z+X19YT2vTUGNV7Q==} dependencies: '@volar/language-core': 1.6.9 dev: false - /@volar/vscode@1.6.9: - resolution: {integrity: sha512-Dke53vbJSgVPjoDwFtDnPtaf/KKOJJjz+hhDwqoBECPLiRWtHeZO6FYmFdqsS899OgrIdWuDv4H+RH7zDz7NJw==} + /@volar/typescript@1.7.0: + resolution: {integrity: sha512-yDFBoptoa12GKsvJmNWaNYJcdECwpSKw0e7pp4CUHRX8hSzu49JZQgEmsymHR7dIkLvV9RfwlHux9/4MXnGJBA==} dependencies: - '@volar/language-server': 1.6.9 + '@volar/language-core': 1.7.0 + + /@volar/vscode@1.7.0: + resolution: {integrity: sha512-KX/7zPn8Eea4wBrbN1krsNiVG1jyUnY22au8mGzJCGOnZPcYL9/Ge458k4ojfhvlVo2ram1KuQDQE/aUj6ZfTw==} + dependencies: + '@volar/language-server': 1.7.0 typesafe-path: 0.2.2 vscode-nls: 5.2.0 dev: true @@ -1302,11 +1331,16 @@ packages: /@vscode/l10n@0.0.13: resolution: {integrity: sha512-A3uY356uOU9nGa+TQIT/i3ziWUgJjVMUrGGXSrtRiTwklyCFjGVWIOHoEIHbJpiyhDkJd9kvIWUOfXK1IkK8XQ==} + dev: false + + /@vscode/l10n@0.0.14: + resolution: {integrity: sha512-/yrv59IEnmh655z1oeDnGcvMYwnEzNzHLgeYcQCkhYX0xBvYWrAuefoiLcPBUkMpJsb46bqQ6Yv4pwTTQ4d3Qg==} + dev: false /@vue/compiler-core@3.3.4: resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} dependencies: - '@babel/parser': 7.21.8 + '@babel/parser': 7.22.4 '@vue/shared': 3.3.4 estree-walker: 2.0.2 source-map-js: 1.0.2 @@ -1320,7 +1354,7 @@ packages: /@vue/compiler-sfc@3.3.4: resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} dependencies: - '@babel/parser': 7.21.8 + '@babel/parser': 7.22.4 '@vue/compiler-core': 3.3.4 '@vue/compiler-dom': 3.3.4 '@vue/compiler-ssr': 3.3.4 @@ -1328,7 +1362,7 @@ packages: '@vue/shared': 3.3.4 estree-walker: 2.0.2 magic-string: 0.30.0 - postcss: 8.4.23 + postcss: 8.4.24 source-map-js: 1.0.2 dev: true @@ -1342,7 +1376,7 @@ packages: /@vue/reactivity-transform@3.3.4: resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} dependencies: - '@babel/parser': 7.21.8 + '@babel/parser': 7.22.4 '@vue/compiler-core': 3.3.4 '@vue/shared': 3.3.4 estree-walker: 2.0.2 @@ -2343,8 +2377,8 @@ packages: dev: false optional: true - /dotenv@16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + /dotenv@16.1.3: + resolution: {integrity: sha512-FYssxsmCTtKL72fGBSvb1K9dRz0/VZeWqFme/vSb7r7323x4CRaHu4LvQ5JG3+s6yt2YPbBrkpiEODktfyjI9A==} engines: {node: '>=12'} dev: false optional: true @@ -3315,8 +3349,8 @@ packages: /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - /inquirer@9.2.5: - resolution: {integrity: sha512-Vy3qZFUPKILCgfeg6eEfKSlv4QbwwfGmdoAYqXYGlPEhY4HH0jQv+ynHkEYYE4eBDCDMWKHs77ByfHcy1GyDfA==} + /inquirer@9.2.6: + resolution: {integrity: sha512-y71l237eJJKS4rl7sQcEUiMhrR0pB/ZnRMMTxLpjJhWL4hdWCT03a6jJnC1w6qIPSRZWEozuieGt3v7XaEJYFw==} engines: {node: '>=14.18.0'} dependencies: ansi-escapes: 4.3.2 @@ -3641,8 +3675,8 @@ packages: dev: false optional: true - /libnpmpublish@7.2.0: - resolution: {integrity: sha512-8541kM4954q63VHdYTjCfMic2cAzPgMwktgiK9gcIH9CyhiZdrhVuLit0i3iJMl2NsWKdkR9gGxdtYnMjKoOKg==} + /libnpmpublish@7.3.0: + resolution: {integrity: sha512-fHUxw5VJhZCNSls0KLNEG0mCD2PN1i14gH5elGOgiVnU3VgTcRahagYP2LKI1m0tFCJ+XrAm0zVYyF5RCbXzcg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: ci-info: 3.8.0 @@ -3743,8 +3777,8 @@ packages: dev: false optional: true - /lru-cache@9.1.1: - resolution: {integrity: sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==} + /lru-cache@9.1.2: + resolution: {integrity: sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==} engines: {node: 14 || >=16.14} dev: false optional: true @@ -4069,11 +4103,11 @@ packages: dev: false optional: true - /mlly@1.2.1: - resolution: {integrity: sha512-1aMEByaWgBPEbWV2BOPEMySRrzl7rIHXmQxam4DM8jVjalTQDjpN2ZKOLUrwyhfZQO7IXHml2StcHMhooDeEEQ==} + /mlly@1.3.0: + resolution: {integrity: sha512-HT5mcgIQKkOrZecOjOX3DJorTikWXwsBfpcr/MGBkhfWcjiqvnaL/9ppxvIUXfjT6xt4DVIAsN9fMUz1ev4bIw==} dependencies: acorn: 8.8.2 - pathe: 1.1.0 + pathe: 1.1.1 pkg-types: 1.0.3 ufo: 1.1.2 dev: true @@ -4152,8 +4186,8 @@ packages: dev: false optional: true - /node-abi@3.40.0: - resolution: {integrity: sha512-zNy02qivjjRosswoYmPi8hIKJRr8MpQyeKT6qlcq/OnOgA3Rhoae+IYOqsM9V5+JnHWmxKnWOT2GxvtqdtOCXA==} + /node-abi@3.43.0: + resolution: {integrity: sha512-QB0MMv+tn9Ur2DtJrc8y09n0n6sw88CyDniWSX2cHW10goQXYPK9ZpFJOktDS4ron501edPX6h9i7Pg+RnH5nQ==} engines: {node: '>=10'} dependencies: semver: 7.5.1 @@ -4634,7 +4668,7 @@ packages: npm-registry-fetch: 14.0.5 proc-log: 3.0.0 promise-retry: 2.0.1 - read-package-json: 6.0.3 + read-package-json: 6.0.4 read-package-json-fast: 3.0.2 sigstore: 1.5.2 ssri: 10.0.4 @@ -4753,7 +4787,7 @@ packages: resolution: {integrity: sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 9.1.1 + lru-cache: 9.1.2 minipass: 6.0.2 dev: false optional: true @@ -4770,8 +4804,8 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - /pathe@1.1.0: - resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==} + /pathe@1.1.1: + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} dev: true /pathval@1.1.1: @@ -4820,8 +4854,8 @@ packages: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: jsonc-parser: 3.2.0 - mlly: 1.2.1 - pathe: 1.1.0 + mlly: 1.3.0 + pathe: 1.1.1 dev: true /postcss-selector-parser@6.0.13: @@ -4833,8 +4867,8 @@ packages: dev: false optional: true - /postcss@8.4.23: - resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} + /postcss@8.4.24: + resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.6 @@ -4853,7 +4887,7 @@ packages: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 1.0.2 - node-abi: 3.40.0 + node-abi: 3.43.0 pump: 3.0.0 rc: 1.2.8 simple-get: 4.0.1 @@ -5002,8 +5036,8 @@ packages: dev: false optional: true - /read-package-json@6.0.3: - resolution: {integrity: sha512-4QbpReW4kxFgeBQ0vPAqh2y8sXEB3D4t3jsXbJKIhBiF80KT6XRo45reqwtftju5J6ru1ax06A2Gb/wM1qCOEQ==} + /read-package-json@6.0.4: + resolution: {integrity: sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: glob: 10.2.6 @@ -5178,8 +5212,8 @@ packages: dependencies: glob: 7.2.3 - /rollup@3.22.1: - resolution: {integrity: sha512-ZI+GSAqOkCyTtJPlwyPOaYKa0RqvztN4miRVusVJseMj6BIBT2f6pFeK90IdJsQ86FLMYkxju2whuck3yKPE4Q==} + /rollup@3.23.0: + resolution: {integrity: sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -5462,7 +5496,7 @@ packages: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.0.1 + strip-ansi: 7.1.0 dev: false optional: true @@ -5492,8 +5526,8 @@ packages: dependencies: ansi-regex: 5.0.1 - /strip-ansi@7.0.1: - resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 @@ -5652,8 +5686,8 @@ packages: engines: {node: '>=14.0.0'} dev: true - /tinyspy@2.1.0: - resolution: {integrity: sha512-7eORpyqImoOvkQJCSkL0d0mB4NHHIFAy4b1u8PHdDa7SjGS2njzl6/lyGoZLm+eyYEtlUmFGE0rFj66SWxZgQQ==} + /tinyspy@2.1.1: + resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==} engines: {node: '>=14.0.0'} dev: true @@ -5794,9 +5828,9 @@ packages: dependencies: semver: 7.5.1 - /typescript@5.0.4: - resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} - engines: {node: '>=12.20'} + /typescript@5.1.3: + resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} + engines: {node: '>=14.17'} hasBin: true dev: true @@ -5890,17 +5924,17 @@ packages: dev: false optional: true - /vite-node@0.31.1(@types/node@20.2.3): - resolution: {integrity: sha512-BajE/IsNQ6JyizPzu9zRgHrBwczkAs0erQf/JRpgTIESpKvNj9/Gd0vxX905klLkb0I0SJVCKbdrl5c6FnqYKA==} + /vite-node@0.31.4(@types/node@20.2.5): + resolution: {integrity: sha512-uzL377GjJtTbuc5KQxVbDu2xfU/x0wVjUtXQR2ihS21q/NK6ROr4oG0rsSkBBddZUVCwzfx22in76/0ZZHXgkQ==} engines: {node: '>=v14.18.0'} hasBin: true dependencies: cac: 6.7.14 debug: 4.3.4 - mlly: 1.2.1 - pathe: 1.1.0 + mlly: 1.3.0 + pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.3.8(@types/node@20.2.3) + vite: 4.3.9(@types/node@20.2.5) transitivePeerDependencies: - '@types/node' - less @@ -5911,8 +5945,8 @@ packages: - terser dev: true - /vite@4.3.8(@types/node@20.2.3): - resolution: {integrity: sha512-uYB8PwN7hbMrf4j1xzGDk/lqjsZvCDbt/JC5dyfxc19Pg8kRm14LinK/uq+HSLNswZEoKmweGdtpbnxRtrAXiQ==} + /vite@4.3.9(@types/node@20.2.5): + resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -5936,16 +5970,16 @@ packages: terser: optional: true dependencies: - '@types/node': 20.2.3 + '@types/node': 20.2.5 esbuild: 0.17.19 - postcss: 8.4.23 - rollup: 3.22.1 + postcss: 8.4.24 + rollup: 3.23.0 optionalDependencies: fsevents: 2.3.2 dev: true - /vitest@0.31.1: - resolution: {integrity: sha512-/dOoOgzoFk/5pTvg1E65WVaobknWREN15+HF+0ucudo3dDG/vCZoXTQrjIfEaWvQXmqScwkRodrTbM/ScMpRcQ==} + /vitest@0.31.4: + resolution: {integrity: sha512-GoV0VQPmWrUFOZSg3RpQAPN+LPmHg2/gxlMNJlyxJihkz6qReHDV6b0pPDcqFLNEPya4tWJ1pgwUNP9MLmUfvQ==} engines: {node: '>=v14.18.0'} hasBin: true peerDependencies: @@ -5977,12 +6011,12 @@ packages: dependencies: '@types/chai': 4.3.5 '@types/chai-subset': 1.3.3 - '@types/node': 20.2.3 - '@vitest/expect': 0.31.1 - '@vitest/runner': 0.31.1 - '@vitest/snapshot': 0.31.1 - '@vitest/spy': 0.31.1 - '@vitest/utils': 0.31.1 + '@types/node': 20.2.5 + '@vitest/expect': 0.31.4 + '@vitest/runner': 0.31.4 + '@vitest/snapshot': 0.31.4 + '@vitest/spy': 0.31.4 + '@vitest/utils': 0.31.4 acorn: 8.8.2 acorn-walk: 8.2.0 cac: 6.7.14 @@ -5991,14 +6025,14 @@ packages: debug: 4.3.4 local-pkg: 0.4.3 magic-string: 0.30.0 - pathe: 1.1.0 + pathe: 1.1.1 picocolors: 1.0.0 std-env: 3.3.3 strip-literal: 1.0.1 tinybench: 2.5.0 tinypool: 0.5.0 - vite: 4.3.8(@types/node@20.2.3) - vite-node: 0.31.1(@types/node@20.2.3) + vite: 4.3.9(@types/node@20.2.5) + vite-node: 0.31.4(@types/node@20.2.5) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -6009,60 +6043,66 @@ packages: - terser dev: true - /volar-service-css@0.0.4: - resolution: {integrity: sha512-mDMs+af6wgx/Jw0M0jSL+EFNVmchX5SZOEGJ+YMQJNzAINLpdADqZPdGYZ97TtziQ+RECY4sKHvpvb5eJ7eqjQ==} + /volar-service-css@0.0.5: + resolution: {integrity: sha512-txVmAKvdqR7AJe8k/vQ3d3XQ2alXHoazYxHVpROTpAhNAF+APmIp3FLJtJPgendValB3Bzd9HG4plHhc6RT45Q==} dependencies: - vscode-css-languageservice: 6.2.5 + vscode-css-languageservice: 6.2.6 + vscode-uri: 3.0.7 dev: false - /volar-service-emmet@0.0.4: - resolution: {integrity: sha512-wrvxWkp96QRtzVL+U/sLHfigWBLVC7pVKhVUj/Yhqy/uD9U7MkCclSdMPIhJYOhUk0B+r/E3DsGFT7rS3km0CA==} + /volar-service-emmet@0.0.5: + resolution: {integrity: sha512-epplAyUh1f0F6QHjHGCG1SOADTHoYHt/KWafoPEdIAOLE3i1QN2qa2VoUlg0jSsr6x0UkEBBvNmbiO0MMpvu0Q==} dependencies: '@vscode/emmet-helper': 2.8.8 - volar-service-html: 0.0.4 + volar-service-html: 0.0.5 dev: false - /volar-service-html@0.0.4: - resolution: {integrity: sha512-QGiecZxM5fQLpW8DpSDloe+mMY0DI508Ei8N6nKcpV6DAttCrM01VyZvjiGuov8fDyqL4fCAvvjIo52nPTpKXQ==} + /volar-service-html@0.0.5: + resolution: {integrity: sha512-S4YWxtax6CNytB15ouxLXIouQYMg18NGn0O5ib2akxHrKfpm+a8XtPWmbE7a9TYYdO7i9Czk0Dll4ftbyGk9Qg==} dependencies: - vscode-html-languageservice: 5.0.5 + vscode-html-languageservice: 5.0.6 + vscode-uri: 3.0.7 dev: false - /volar-service-json@0.0.4: - resolution: {integrity: sha512-C7CNL2wCMJcuusbkMjaMxPWZOXEYVZGHd8wFaVUgPz0G0MDRCVyko2JyvTbpyxGp937cVtASjXwwEGu/0oQ8ww==} + /volar-service-json@0.0.5: + resolution: {integrity: sha512-3JOEq5F+hNvboiFiunFYCZQxg1uU5q2Bh7dUwBZvew+PMzUustdeZYDXz8qRWmUwC6+F6CU4WLv8ggm6Wf2aCg==} dependencies: vscode-json-languageservice: 5.3.5 + vscode-uri: 3.0.7 dev: false - /volar-service-pug-beautify@0.0.4: - resolution: {integrity: sha512-RvyOT6TyqJ5fp+SIpJvfbqObzcrM8lI2soL2y0uPYLgvvB3cAyY/hw3d5U6qMBMWt5ePvERZ6X2VzlG7PzbXJQ==} + /volar-service-pug-beautify@0.0.5: + resolution: {integrity: sha512-k8DUqo3LB/3++aOb6K4ftyWVeJgmVPKOFPp8F0YF3Iv1+bmcTNSDJVhX1MNU1S8k/W2+8fxAXeDJDXKi1QWDZA==} dependencies: '@johnsoncodehk/pug-beautify': 0.2.2 dev: false - /volar-service-pug@0.0.4: - resolution: {integrity: sha512-GWEIJBTyJ7SSZbApCyD4Lmvm2XbxTCB8tjK/zcP+f+DSbG5nrkh+yVCGLDdx69FN4K4dOgBm8UfrdOT0WZWMMw==} + /volar-service-pug@0.0.5: + resolution: {integrity: sha512-0cznwurIzGjhRimwbPerwxsOKW9ZqfE2LOLZ1aW7ziNwCaRvchz2qVMjV4T2Sou223DnfVzSRUXHApc9gsjIVA==} dependencies: - '@volar/language-service': 1.6.9 - '@volar/source-map': 1.6.9 + '@volar/language-service': 1.7.0 + '@volar/source-map': 1.7.0 muggle-string: 0.3.1 pug-lexer: 5.0.1 pug-parser: 6.0.0 - volar-service-html: 0.0.4 - vscode-html-languageservice: 5.0.5 + volar-service-html: 0.0.5 + vscode-html-languageservice: 5.0.6 vscode-languageserver-textdocument: 1.0.8 dev: false - /volar-service-typescript-twoslash-queries@0.0.4: - resolution: {integrity: sha512-nAhoOjCjR1bcS+DcO4sSGTjjGdKHUyLrDRsXlcTZ/8dVS95WzwYgkTBGBfosT19IYzDPcDCVSxwaLjESL3eZ7Q==} + /volar-service-typescript-twoslash-queries@0.0.5: + resolution: {integrity: sha512-Dn/xNrl8Mk8MG2LQBoNaHbOMLerMX25njxMDn7qgBZmpyRF/WTaomYcRoTHIelj9tvcuH6gH7nTwaiiRvA8VWg==} dev: false - /volar-service-typescript@0.0.4: - resolution: {integrity: sha512-Ag7H7Lrtz742S3bl8puJ5Ut/w0jx5WwdAskksPZ/bd7DYuNgoUDgZnHCs34WGu7o880Ndq+9IcRwWZ+S1w97eQ==} + /volar-service-typescript@0.0.5(@volar/typescript@1.6.9): + resolution: {integrity: sha512-Y2W8MfGkrZsrUEV30v1D0Dje2ke+TkaQpNNFpcAtBq5btuwgovxNu3/lXPXyLGW/HgpKCRSaToO38EdEVsWnrQ==} + peerDependencies: + '@volar/typescript': '*' dependencies: - jsonc-parser: 3.2.0 - minimatch: 9.0.1 + '@volar/typescript': 1.6.9 semver: 7.5.1 + typescript-auto-import-cache: 0.3.0 + vscode-languageserver-textdocument: 1.0.8 vscode-nls: 5.2.0 vscode-uri: 3.0.7 dev: false @@ -6095,22 +6135,23 @@ packages: yazl: 2.5.1 dev: true - /vscode-css-languageservice@6.2.5: - resolution: {integrity: sha512-/1oyBZK3jfx6A0cA46FCUpy6OlqEsMT47LUIldCIP1YMKRYezJ9No+aNj9IM0AqhRZ92DxZ1DmU5lJ+biuiacA==} + /vscode-css-languageservice@6.2.6: + resolution: {integrity: sha512-SA2WkeOecIpUiEbZnjOsP/fI5CRITZEiQGSHXKiDQDwLApfKcnLhZwMtOBbIifSzESVcQa7b/shX/nbnF4NoCg==} dependencies: - '@vscode/l10n': 0.0.13 + '@vscode/l10n': 0.0.14 vscode-languageserver-textdocument: 1.0.8 vscode-languageserver-types: 3.17.3 vscode-uri: 3.0.7 dev: false - /vscode-html-languageservice@5.0.5: - resolution: {integrity: sha512-7788ZT+I7/UhFoI4+bzaAiGGZEW7X39kTeuytLtw6jJA6W7ez85bWKYoFDcwrPNmywj3n/IkU9Op9asaje44jg==} + /vscode-html-languageservice@5.0.6: + resolution: {integrity: sha512-gCixNg6fjPO7+kwSMBAVXcwDRHdjz1WOyNfI0n5Wx0J7dfHG8ggb3zD1FI8E2daTZrwS1cooOiSoc1Xxph4qRQ==} dependencies: - '@vscode/l10n': 0.0.13 + '@vscode/l10n': 0.0.14 vscode-languageserver-textdocument: 1.0.8 vscode-languageserver-types: 3.17.3 vscode-uri: 3.0.7 + dev: false /vscode-json-languageservice@5.3.5: resolution: {integrity: sha512-DasT+bKtpaS2rTPEB4VMROnvO1WES2KD8RZZxXbumnk9sk5wco10VdB6sJgTlsKQN14tHQLZDXuHnSoSAlE8LQ==} @@ -6279,7 +6320,7 @@ packages: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 - strip-ansi: 7.0.1 + strip-ansi: 7.1.0 dev: false optional: true From a78a48525c35caa9f125c7ba0b4f269fd6d61db5 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Sat, 3 Jun 2023 00:06:18 +0800 Subject: [PATCH 02/16] fix missing bump --- packages/vue-language-plugin-pug/package.json | 2 +- packages/vue-language-service/package.json | 8 +-- pnpm-lock.yaml | 58 ++++++------------- 3 files changed, 22 insertions(+), 46 deletions(-) diff --git a/packages/vue-language-plugin-pug/package.json b/packages/vue-language-plugin-pug/package.json index ee88ca8a7..b56bca22b 100644 --- a/packages/vue-language-plugin-pug/package.json +++ b/packages/vue-language-plugin-pug/package.json @@ -16,7 +16,7 @@ "@vue/language-core": "1.7.8" }, "dependencies": { - "@volar/source-map": "1.6.9", + "@volar/source-map": "1.7.0", "volar-service-pug": "0.0.5" } } diff --git a/packages/vue-language-service/package.json b/packages/vue-language-service/package.json index 1929bc0ad..34076597d 100644 --- a/packages/vue-language-service/package.json +++ b/packages/vue-language-service/package.json @@ -17,9 +17,9 @@ "update-html-data": "node ./scripts/update-html-data.js" }, "dependencies": { - "@volar/language-core": "1.6.9", - "@volar/language-service": "1.6.9", - "@volar/typescript": "1.6.9", + "@volar/language-core": "1.7.0", + "@volar/language-service": "1.7.0", + "@volar/typescript": "1.7.0", "@vue/compiler-dom": "^3.3.0", "@vue/language-core": "1.7.8", "@vue/reactivity": "^3.3.0", @@ -36,7 +36,7 @@ "vscode-languageserver-textdocument": "^1.0.8" }, "devDependencies": { - "@volar/kit": "1.6.9", + "@volar/kit": "1.7.0", "vscode-languageserver-protocol": "^3.17.3", "vscode-uri": "^3.0.7" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 944090c50..e5c91d850 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -142,8 +142,8 @@ importers: packages/vue-language-plugin-pug: dependencies: '@volar/source-map': - specifier: 1.6.9 - version: 1.6.9 + specifier: 1.7.0 + version: 1.7.0 volar-service-pug: specifier: 0.0.5 version: 0.0.5 @@ -179,14 +179,14 @@ importers: packages/vue-language-service: dependencies: '@volar/language-core': - specifier: 1.6.9 - version: 1.6.9 + specifier: 1.7.0 + version: 1.7.0 '@volar/language-service': - specifier: 1.6.9 - version: 1.6.9 + specifier: 1.7.0 + version: 1.7.0 '@volar/typescript': - specifier: 1.6.9 - version: 1.6.9 + specifier: 1.7.0 + version: 1.7.0 '@vue/compiler-dom': specifier: ^3.3.0 version: 3.3.4 @@ -219,7 +219,7 @@ importers: version: 0.0.5 volar-service-typescript: specifier: 0.0.5 - version: 0.0.5(@volar/typescript@1.6.9) + version: 0.0.5(@volar/typescript@1.7.0) volar-service-typescript-twoslash-queries: specifier: 0.0.5 version: 0.0.5 @@ -231,8 +231,8 @@ importers: version: 1.0.8 devDependencies: '@volar/kit': - specifier: 1.6.9 - version: 1.6.9(typescript@5.1.3) + specifier: 1.7.0 + version: 1.7.0(typescript@5.1.3) vscode-languageserver-protocol: specifier: ^3.17.3 version: 3.17.3 @@ -1234,23 +1234,18 @@ packages: pretty-format: 27.5.1 dev: true - /@volar/kit@1.6.9(typescript@5.1.3): - resolution: {integrity: sha512-8OZe2CFO8MBSyuhmTPXpAfyULPDd5KsSIoYQxm1Hvya0od+ORHdAkY8MAI+qcRVdGTDU/tSb+391oyQJfnO8bQ==} + /@volar/kit@1.7.0(typescript@5.1.3): + resolution: {integrity: sha512-aVgt/yD41zHu+ej5dDot1pgI2FpslFvs/aQQK2iWrSGqUxhZTdzkTkqsZDYjJrzVgVZHzP+UQW8QUe1r6YSlIQ==} peerDependencies: typescript: '*' dependencies: - '@volar/language-service': 1.6.9 + '@volar/language-service': 1.7.0 typesafe-path: 0.2.2 typescript: 5.1.3 vscode-languageserver-textdocument: 1.0.8 vscode-uri: 3.0.7 dev: true - /@volar/language-core@1.6.9: - resolution: {integrity: sha512-7v8zsq3VMUBF5fI6FfjZ9pEkOuTiWD+AjxHVI3UXXXPoDeV9RcK3oPUfyQCV4Aj9Dqx4DPPI9Pcphyo6gZ8SAw==} - dependencies: - '@volar/source-map': 1.6.9 - /@volar/language-core@1.7.0: resolution: {integrity: sha512-ZjuD1bSyPUcWwiCS3wq/BRslMbJ5kU4z4KC3n8epeEFNBo+o2INdASW0wJwG96HSHEbAfO74XFIJ3hQdDGcSAg==} dependencies: @@ -1270,15 +1265,6 @@ packages: vscode-languageserver-textdocument: 1.0.8 vscode-uri: 3.0.7 - /@volar/language-service@1.6.9: - resolution: {integrity: sha512-DBdpypXVuRcW3td0l4nezuNqc0RR9NLScjTQ/xtE1vou5gaMyRETphbVaTgo2OnivK474tkCQ8YJTkSaMUizNA==} - dependencies: - '@volar/language-core': 1.6.9 - '@volar/source-map': 1.6.9 - typescript-auto-import-cache: 0.3.0 - vscode-languageserver-textdocument: 1.0.8 - vscode-uri: 3.0.7 - /@volar/language-service@1.7.0: resolution: {integrity: sha512-KIHLxj8tS+zUIYU9BQT38p64Yd8yFq/pGdJ2sqvQoX0PMh+ao4MCI99AZOtp4MS5rLzH4acZHTcV+NTLob32mw==} dependencies: @@ -1287,22 +1273,11 @@ packages: vscode-languageserver-textdocument: 1.0.8 vscode-uri: 3.0.7 - /@volar/source-map@1.6.9: - resolution: {integrity: sha512-D+IgnJGxO2Q1tL5qh3vU7iaLHtfGXptpdUDLMwmx292Fz0aVIXlC85mHHawGjBWeg/JhRGtEl4BvfTdn+4Ng/w==} - dependencies: - muggle-string: 0.3.1 - /@volar/source-map@1.7.0: resolution: {integrity: sha512-GIBfwyz5svFoTm/HVco2xbUis3Y3nk4AJIBCGMnF7yHxAfcDEf1tccXK9YfgwK+JGj9ovC6FEIYIVSwoi5/1MQ==} dependencies: muggle-string: 0.3.1 - /@volar/typescript@1.6.9: - resolution: {integrity: sha512-L3WivzKVK5h/esfYdvnMXiE0wcH+wNalgFrpknuYgGraXNw+wGDaizEdVzKxyQYjez4bz/Z+X19YT2vTUGNV7Q==} - dependencies: - '@volar/language-core': 1.6.9 - dev: false - /@volar/typescript@1.7.0: resolution: {integrity: sha512-yDFBoptoa12GKsvJmNWaNYJcdECwpSKw0e7pp4CUHRX8hSzu49JZQgEmsymHR7dIkLvV9RfwlHux9/4MXnGJBA==} dependencies: @@ -5827,6 +5802,7 @@ packages: resolution: {integrity: sha512-Rq6/q4O9iyqUdjvOoyas7x/Qf9nWUMeqpP3YeTaLA+uECgfy5wOhfOS+SW/+fZ/uI/ZcKaf+2/ZhFzXh8xfofQ==} dependencies: semver: 7.5.1 + dev: false /typescript@5.1.3: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} @@ -6094,12 +6070,12 @@ packages: resolution: {integrity: sha512-Dn/xNrl8Mk8MG2LQBoNaHbOMLerMX25njxMDn7qgBZmpyRF/WTaomYcRoTHIelj9tvcuH6gH7nTwaiiRvA8VWg==} dev: false - /volar-service-typescript@0.0.5(@volar/typescript@1.6.9): + /volar-service-typescript@0.0.5(@volar/typescript@1.7.0): resolution: {integrity: sha512-Y2W8MfGkrZsrUEV30v1D0Dje2ke+TkaQpNNFpcAtBq5btuwgovxNu3/lXPXyLGW/HgpKCRSaToO38EdEVsWnrQ==} peerDependencies: '@volar/typescript': '*' dependencies: - '@volar/typescript': 1.6.9 + '@volar/typescript': 1.7.0 semver: 7.5.1 typescript-auto-import-cache: 0.3.0 vscode-languageserver-textdocument: 1.0.8 From 2a555fa86b738d4054a065b14f29496289a6995f Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Sat, 3 Jun 2023 00:24:46 +0800 Subject: [PATCH 03/16] fix types --- package.json | 3 ++- packages/vue-language-service/rules.d.ts | 15 --------------- packages/vue-language-service/tsconfig.build.json | 2 -- pnpm-lock.yaml | 3 +++ 4 files changed, 5 insertions(+), 18 deletions(-) delete mode 100644 packages/vue-language-service/rules.d.ts diff --git a/package.json b/package.json index 2acee94f1..0a92dc747 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,8 @@ "@volar/language-service": "1.7.0", "typescript": "latest", "vite": "latest", - "vitest": "latest" + "vitest": "latest", + "vscode-languageserver-protocol": "^3.17.3" }, "optionalDependencies": { "@lerna-lite/cli": "latest", diff --git a/packages/vue-language-service/rules.d.ts b/packages/vue-language-service/rules.d.ts deleted file mode 100644 index 626ae5273..000000000 --- a/packages/vue-language-service/rules.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type * as vue from '@vue/language-core'; -import type { TextDocument } from 'vscode-languageserver-textdocument'; -import type * as ts from 'typescript/lib/tsserverlibrary'; -import type { VueLanguagePlugin } from '@vue/language-core'; - -declare module '@volar/language-service' { - interface RuleContext { - vue?: { - sfc: NonNullable; - templateAst: vue.Sfc['templateAst']; - scriptAst: vue.Sfc['scriptAst']; - scriptSetupAst: vue.Sfc['scriptSetupAst']; - }; - } -} diff --git a/packages/vue-language-service/tsconfig.build.json b/packages/vue-language-service/tsconfig.build.json index 936004518..69da4eb08 100644 --- a/packages/vue-language-service/tsconfig.build.json +++ b/packages/vue-language-service/tsconfig.build.json @@ -7,8 +7,6 @@ }, "include": [ "src", - "src/**/*.json", - "rules.d.ts", ], "exclude": [ "node_modules", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e5c91d850..f1c47f12c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: vitest: specifier: latest version: 0.31.4 + vscode-languageserver-protocol: + specifier: ^3.17.3 + version: 3.17.3 packages/typescript-vue-plugin: dependencies: From c793c0bb0cbd8a486bf3e8eb439f24b893d2da4f Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Sun, 4 Jun 2023 10:43:08 +0800 Subject: [PATCH 04/16] fix html data --- packages/vue-language-service/scripts/update-html-data.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/vue-language-service/scripts/update-html-data.js b/packages/vue-language-service/scripts/update-html-data.js index bcbe34aef..9403c817f 100644 --- a/packages/vue-language-service/scripts/update-html-data.js +++ b/packages/vue-language-service/scripts/update-html-data.js @@ -1,6 +1,7 @@ +// @ts-check const fs = require('fs'); const path = require('path'); -const OpenCC = require('opencc'); +const OpenCC = require('opencc').OpenCC; const converter = new OpenCC('s2tw.json'); const langs = [ { @@ -330,6 +331,7 @@ async function templateWorker(lang) { kind: 'markdown', value: lines.slice(1).join('\n'), }, + attributes: [], references: langs.map(lang => ({ name: lang.name, url: `${lang.url}api/built-in-components.html#${normalizeHash(name)}`, @@ -355,6 +357,7 @@ async function templateWorker(lang) { kind: 'markdown', value: lines.slice(1).join('\n'), }, + attributes: [], references: langs.map(lang => ({ name: lang.name, url: `${lang.url}api/built-in-special-elements.html#${normalizeHash(name)}`, From 75f96513cfaee8a289d7d301111bc9bb7eacf08d Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Sun, 4 Jun 2023 11:10:45 +0800 Subject: [PATCH 05/16] remove opencc --- package.json | 3 +- .../data/language-blocks/zh-tw.json | 626 ------------- .../data/model-modifiers/zh-tw.json | 104 --- .../data/template/en.json | 8 + .../data/template/fr.json | 8 + .../data/template/ja.json | 8 + .../data/template/ko.json | 8 + .../data/template/zh-cn.json | 8 + .../data/template/zh-tw.json | 866 ------------------ .../scripts/update-html-data.js | 26 - pnpm-lock.yaml | 266 +----- 11 files changed, 46 insertions(+), 1885 deletions(-) delete mode 100644 packages/vue-language-service/data/language-blocks/zh-tw.json delete mode 100644 packages/vue-language-service/data/model-modifiers/zh-tw.json delete mode 100644 packages/vue-language-service/data/template/zh-tw.json diff --git a/package.json b/package.json index 0a92dc747..e27a8479d 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ }, "optionalDependencies": { "@lerna-lite/cli": "latest", - "@lerna-lite/publish": "latest", - "opencc": "latest" + "@lerna-lite/publish": "latest" } } diff --git a/packages/vue-language-service/data/language-blocks/zh-tw.json b/packages/vue-language-service/data/language-blocks/zh-tw.json deleted file mode 100644 index 67c1551da..000000000 --- a/packages/vue-language-service/data/language-blocks/zh-tw.json +++ /dev/null @@ -1,626 +0,0 @@ -{ - "version": 1.1, - "tags": [ - { - "name": "template", - "attributes": [ - { - "name": "src", - "description": { - "kind": "markdown", - "value": "\n如果你更喜歡將 `*.vue` 組件分散到多個文件中,可以為一個語塊使用 `src` 這個 attribute 來導入一個外部文件:\n\n```vue\n\n\n\n```\n\n請注意 `src` 導入和 JS 模塊導入遵循相同的路徑解析規則,這意味著:\n\n- 相對路徑需要以 `./` 開頭\n- 你也可以從 npm 依賴中導入資源\n\n```vue\n\n\n```\n\n注意對不同預處理器的集成會根據你所使用的工具鏈而有所不同,具體細節請查看相應的工具鏈文檔來確認:\n\n- [Vite](https://cn.vitejs.dev/guide/features.html#css-pre-processors)\n- [Vue CLI](https://cli.vuejs.org/zh/guide/css.html#%E9%A2%84%E5%A4%84%E7%90%86%E5%99%A8)\n- [webpack + vue-loader](https://vue-loader.vuejs.org/zh/guide/pre-processors.html#%E4%BD%BF%E7%94%A8%E9%A2%84%E5%A4%84%E7%90%86%E5%99%A8)\n" - }, - "values": [ - { - "name": "html" - }, - { - "name": "pug" - } - ], - "references": [ - { - "name": "en", - "url": "https://vuejs.org/api/sfc-spec.html#pre-processors" - }, - { - "name": "zh-cn", - "url": "https://cn.vuejs.org/api/sfc-spec.html#pre-processors" - }, - { - "name": "ja", - "url": "https://ja.vuejs.org/api/sfc-spec.html#pre-processors" - }, - { - "name": "ua", - "url": "https://ua.vuejs.org/api/sfc-spec.html#pre-processors" - }, - { - "name": "fr", - "url": "https://fr.vuejs.org/api/sfc-spec.html#pre-processors" - }, - { - "name": "ko", - "url": "https://ko.vuejs.org/api/sfc-spec.html#pre-processors" - } - ] - } - ], - "description": { - "kind": "markdown", - "value": "\n- 每個 `*.vue` 文件最多可以包含一個頂層 `