@volar/language-service
Advanced tools
Comparing version 1.3.0-alpha.0 to 1.3.0-alpha.1
@@ -1,7 +0,6 @@ | ||
import { LanguageServiceHost } from '@volar/language-core'; | ||
import { Config, LanguageServicePluginContext } from './types'; | ||
import { LanguageServicePluginContext, LanguageServiceOptions } from './types'; | ||
import type * as ts from 'typescript/lib/tsserverlibrary'; | ||
import type * as _ from 'vscode-languageserver-protocol'; | ||
export type LanguageService = ReturnType<typeof createLanguageService>; | ||
export declare function createLanguageService(host: LanguageServiceHost, config: Config, env: LanguageServicePluginContext['env'], documentRegistry?: ts.DocumentRegistry): { | ||
export declare function createLanguageService(ctx: LanguageServiceOptions, documentRegistry?: ts.DocumentRegistry): { | ||
triggerCharacters: string[]; | ||
@@ -8,0 +7,0 @@ format: (uri: string, options: _.FormattingOptions, range?: _.Range | undefined, onTypeParams?: { |
@@ -37,12 +37,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); | ||
const selectionRanges = require("./documentFeatures/selectionRanges"); | ||
function createLanguageService(host, config, env, documentRegistry) { | ||
function createLanguageService(ctx, documentRegistry) { | ||
var _a; | ||
const languageContext = (0, language_core_1.createLanguageContext)(host, Object.values((_a = config.languages) !== null && _a !== void 0 ? _a : {}).filter(shared.notEmpty)); | ||
const context = createLanguageServiceContext(host, languageContext, config, env, documentRegistry); | ||
const languageContext = (0, language_core_1.createLanguageContext)(ctx.host, Object.values((_a = ctx.config.languages) !== null && _a !== void 0 ? _a : {}).filter(shared.notEmpty)); | ||
const context = createLanguageServiceContext(ctx, languageContext, documentRegistry); | ||
return createLanguageServiceBase(context); | ||
} | ||
exports.createLanguageService = createLanguageService; | ||
function createLanguageServiceContext(host, languageContext, config, env, documentRegistry) { | ||
var _a; | ||
const ts = (_a = host.getTypeScriptModule) === null || _a === void 0 ? void 0 : _a.call(host); | ||
function createLanguageServiceContext(ctx, languageContext, documentRegistry) { | ||
var _a, _b, _c, _d; | ||
const ts = (_b = (_a = ctx.host).getTypeScriptModule) === null || _b === void 0 ? void 0 : _b.call(_a); | ||
const tsLs = ts === null || ts === void 0 ? void 0 : ts.createLanguageService(languageContext.typescript.languageServiceHost, documentRegistry); | ||
@@ -52,43 +52,25 @@ if (ts && tsLs) { | ||
} | ||
let plugins; | ||
const textDocumentMapper = (0, documents_1.createDocumentsAndSourceMaps)(languageContext.virtualFiles); | ||
const textDocumentMapper = (0, documents_1.createDocumentsAndSourceMaps)(ctx, languageContext.virtualFiles); | ||
const documents = new WeakMap(); | ||
const documentVersions = new Map(); | ||
const context = { | ||
uriToFileName: shared.uriToFileName, | ||
fileNameToUri: shared.fileNameToUri, | ||
host, | ||
core: languageContext, | ||
env: env, | ||
get plugins() { | ||
var _a, _b; | ||
if (!plugins) { | ||
plugins = {}; // avoid infinite loop | ||
for (const pluginId in (_a = config.plugins) !== null && _a !== void 0 ? _a : {}) { | ||
const plugin = (_b = config.plugins) === null || _b === void 0 ? void 0 : _b[pluginId]; | ||
if (plugin instanceof Function) { | ||
const _plugin = plugin(this); | ||
plugins[pluginId] = _plugin; | ||
} | ||
else if (plugin) { | ||
plugins[pluginId] = plugin; | ||
} | ||
} | ||
} | ||
return plugins; | ||
}, | ||
config, | ||
typescript: ts && tsLs ? { | ||
const context = Object.assign(Object.assign({}, ctx), { core: languageContext, plugins: {}, typescript: ts && tsLs ? { | ||
module: ts, | ||
languageServiceHost: languageContext.typescript.languageServiceHost, | ||
languageService: tsLs, | ||
} : undefined, | ||
documents: textDocumentMapper, | ||
getTextDocument, | ||
}; | ||
} : undefined, documents: textDocumentMapper, getTextDocument }); | ||
for (const pluginId in (_c = ctx.config.plugins) !== null && _c !== void 0 ? _c : {}) { | ||
const plugin = (_d = ctx.config.plugins) === null || _d === void 0 ? void 0 : _d[pluginId]; | ||
if (plugin instanceof Function) { | ||
const _plugin = plugin(context); | ||
context.plugins[pluginId] = _plugin; | ||
} | ||
else if (plugin) { | ||
context.plugins[pluginId] = plugin; | ||
} | ||
} | ||
return context; | ||
function getTextDocument(uri) { | ||
var _a; | ||
const fileName = shared.uriToFileName(uri); | ||
const scriptSnapshot = host.getScriptSnapshot(fileName); | ||
const fileName = ctx.uriToFileName(uri); | ||
const scriptSnapshot = ctx.host.getScriptSnapshot(fileName); | ||
if (scriptSnapshot) { | ||
@@ -95,0 +77,0 @@ let document = documents.get(scriptSnapshot); |
@@ -14,3 +14,2 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument"); | ||
const shared = require("@volar/shared"); | ||
const common_1 = require("../utils/common"); | ||
@@ -30,3 +29,3 @@ function register(context) { | ||
} | ||
const initialIndentLanguageId = (_b = yield ((_a = context.env.configurationHost) === null || _a === void 0 ? void 0 : _a.getConfiguration('volar.format.initialIndent'))) !== null && _b !== void 0 ? _b : { html: true }; | ||
const initialIndentLanguageId = (_b = yield ((_a = context.configurationHost) === null || _a === void 0 ? void 0 : _a.getConfiguration('volar.format.initialIndent'))) !== null && _b !== void 0 ? _b : { html: true }; | ||
const originalSnapshot = source.snapshot; | ||
@@ -86,3 +85,3 @@ const rootVirtualFile = source.root; | ||
document = vscode_languageserver_textdocument_1.TextDocument.create(document.uri, document.languageId, document.version + 1, newText); | ||
context.core.virtualFiles.updateSource(shared.uriToFileName(document.uri), (0, common_1.stringToSnapshot)(document.getText()), undefined); | ||
context.core.virtualFiles.updateSource(context.uriToFileName(document.uri), (0, common_1.stringToSnapshot)(document.getText()), undefined); | ||
edited = true; | ||
@@ -131,3 +130,3 @@ } | ||
document = vscode_languageserver_textdocument_1.TextDocument.create(document.uri, document.languageId, document.version + 1, newText); | ||
context.core.virtualFiles.updateSource(shared.uriToFileName(document.uri), (0, common_1.stringToSnapshot)(document.getText()), undefined); | ||
context.core.virtualFiles.updateSource(context.uriToFileName(document.uri), (0, common_1.stringToSnapshot)(document.getText()), undefined); | ||
edited = true; | ||
@@ -141,3 +140,3 @@ } | ||
// recover | ||
context.core.virtualFiles.updateSource(shared.uriToFileName(document.uri), originalSnapshot, undefined); | ||
context.core.virtualFiles.updateSource(context.uriToFileName(document.uri), originalSnapshot, undefined); | ||
} | ||
@@ -144,0 +143,0 @@ if (document.getText() === originalDocument.getText()) |
@@ -6,2 +6,3 @@ import { VirtualFiles, VirtualFile, FileRangeCapabilities, MirrorBehaviorCapabilities, MirrorMap } from '@volar/language-core'; | ||
import type * as ts from 'typescript/lib/tsserverlibrary'; | ||
import { LanguageServiceOptions } from './types'; | ||
export type DocumentsAndSourceMaps = ReturnType<typeof createDocumentsAndSourceMaps>; | ||
@@ -33,3 +34,3 @@ export declare class SourceMapWithDocuments<Data = any> { | ||
} | ||
export declare function createDocumentsAndSourceMaps(mapper: VirtualFiles): { | ||
export declare function createDocumentsAndSourceMaps(ctx: LanguageServiceOptions, mapper: VirtualFiles): { | ||
getSourceByUri(sourceFileUri: string): import("@volar/language-core").Source | undefined; | ||
@@ -36,0 +37,0 @@ hasVirtualFileByUri(virtualFileUri: string): boolean; |
@@ -119,3 +119,3 @@ Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.MirrorMapWithDocument = MirrorMapWithDocument; | ||
function createDocumentsAndSourceMaps(mapper) { | ||
function createDocumentsAndSourceMaps(ctx, mapper) { | ||
let version = 0; | ||
@@ -127,12 +127,12 @@ const _maps = new WeakMap(); | ||
getSourceByUri(sourceFileUri) { | ||
return mapper.getSource(shared.uriToFileName(sourceFileUri)); | ||
return mapper.getSource(ctx.uriToFileName(sourceFileUri)); | ||
}, | ||
hasVirtualFileByUri(virtualFileUri) { | ||
return mapper.hasVirtualFile(shared.uriToFileName(virtualFileUri)); | ||
return mapper.hasVirtualFile(ctx.uriToFileName(virtualFileUri)); | ||
}, | ||
getVirtualFileByUri(virtualFileUri) { | ||
return mapper.getVirtualFile(shared.uriToFileName(virtualFileUri)); | ||
return mapper.getVirtualFile(ctx.uriToFileName(virtualFileUri)); | ||
}, | ||
getMirrorMapByUri(virtualFileUri) { | ||
const fileName = shared.uriToFileName(virtualFileUri); | ||
const fileName = ctx.uriToFileName(virtualFileUri); | ||
const [virtualFile] = mapper.getVirtualFile(fileName); | ||
@@ -150,3 +150,3 @@ if (virtualFile) { | ||
getMapsBySourceFileUri(uri) { | ||
return this.getMapsBySourceFileName(shared.uriToFileName(uri)); | ||
return this.getMapsBySourceFileName(ctx.uriToFileName(uri)); | ||
}, | ||
@@ -179,3 +179,3 @@ getMapsBySourceFileName(fileName) { | ||
getMapsByVirtualFileUri(virtualFileUri) { | ||
return this.getMapsByVirtualFileName(shared.uriToFileName(virtualFileUri)); | ||
return this.getMapsByVirtualFileName(ctx.uriToFileName(virtualFileUri)); | ||
}, | ||
@@ -200,3 +200,3 @@ *getMapsByVirtualFileName(virtualFileName) { | ||
getDocumentByUri(snapshot, uri) { | ||
return this.getDocumentByFileName(snapshot, shared.uriToFileName(uri)); | ||
return this.getDocumentByFileName(snapshot, ctx.uriToFileName(uri)); | ||
}, | ||
@@ -211,3 +211,3 @@ getDocumentByFileName, | ||
if (!map.has(fileName)) { | ||
map.set(fileName, vscode_languageserver_textdocument_1.TextDocument.create(shared.fileNameToUri(fileName), shared.syntaxToLanguageId(fileName.substring(fileName.lastIndexOf('.') + 1)), version++, snapshot.getText(0, snapshot.getLength()))); | ||
map.set(fileName, vscode_languageserver_textdocument_1.TextDocument.create(ctx.fileNameToUri(fileName), shared.syntaxToLanguageId(fileName.substring(fileName.lastIndexOf('.') + 1)), version++, snapshot.getText(0, snapshot.getLength()))); | ||
} | ||
@@ -214,0 +214,0 @@ return map.get(fileName); |
@@ -134,3 +134,3 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
const vueRanges = tsRanges.map(tsRange => map.toSourceRange(tsRange)).filter(shared.notEmpty); | ||
const vueItem = Object.assign(Object.assign({}, tsItem), { name: tsItem.name === path_1.posix.basename(shared.uriToFileName(map.virtualFileDocument.uri)) ? path_1.posix.basename(shared.uriToFileName(map.sourceFileDocument.uri)) : tsItem.name, uri: map.sourceFileDocument.uri, | ||
const vueItem = Object.assign(Object.assign({}, tsItem), { name: tsItem.name === path_1.posix.basename(context.uriToFileName(map.virtualFileDocument.uri)) ? path_1.posix.basename(context.uriToFileName(map.sourceFileDocument.uri)) : tsItem.name, uri: map.sourceFileDocument.uri, | ||
// TS Bug: `range: range` not works | ||
@@ -137,0 +137,0 @@ range: { |
@@ -18,3 +18,3 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
var _a, _b, _c; | ||
const referencesCodeLendsEnabled = (_b = yield ((_a = context.env.configurationHost) === null || _a === void 0 ? void 0 : _a.getConfiguration('volar.codeLens.references'))) !== null && _b !== void 0 ? _b : true; | ||
const referencesCodeLendsEnabled = (_b = yield ((_a = context.configurationHost) === null || _a === void 0 ? void 0 : _a.getConfiguration('volar.codeLens.references'))) !== null && _b !== void 0 ? _b : true; | ||
return (_c = yield (0, featureWorkers_1.languageFeatureWorker)(context, uri, undefined, (arg) => [arg], (plugin, document) => __awaiter(this, void 0, void 0, function* () { | ||
@@ -21,0 +21,0 @@ var _d, _e, _f, _g; |
@@ -114,3 +114,3 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
}).get(uri); | ||
const newSnapshot = context.host.getScriptSnapshot(shared.uriToFileName(uri)); | ||
const newSnapshot = context.host.getScriptSnapshot(context.uriToFileName(uri)); | ||
let updateCacheRangeFailed = false; | ||
@@ -117,0 +117,0 @@ let errorsUpdated = false; |
@@ -10,4 +10,15 @@ import { LanguageContext, LanguageModule, LanguageServiceHost } from '@volar/language-core'; | ||
export * from 'vscode-languageserver-protocol'; | ||
export interface LanguageServicePluginContext { | ||
export interface LanguageServiceOptions { | ||
host: LanguageServiceHost; | ||
config: Config; | ||
uriToFileName(uri: string): string; | ||
fileNameToUri(fileName: string): string; | ||
rootUri: URI; | ||
locale?: string; | ||
configurationHost?: ConfigurationHost; | ||
documentContext?: DocumentContext; | ||
fileSystemProvider?: FileSystemProvider; | ||
schemaRequestService?: SchemaRequestService; | ||
} | ||
export interface LanguageServicePluginContext extends LanguageServiceOptions { | ||
typescript: { | ||
@@ -18,15 +29,3 @@ module: typeof import('typescript/lib/tsserverlibrary'); | ||
} | undefined; | ||
env: { | ||
rootUri: URI; | ||
locale?: string; | ||
configurationHost?: ConfigurationHost; | ||
documentContext?: DocumentContext; | ||
fileSystemProvider?: FileSystemProvider; | ||
schemaRequestService?: SchemaRequestService; | ||
}; | ||
uriToFileName(uri: string): string; | ||
fileNameToUri(fileName: string): string; | ||
/** @private */ | ||
host: LanguageServiceHost; | ||
/** @private */ | ||
core: LanguageContext; | ||
@@ -33,0 +32,0 @@ /** @private */ |
@@ -8,1 +8,2 @@ import type { TextDocument } from 'vscode-languageserver-textdocument'; | ||
export declare function ruleWorker<T>(context: LanguageServicePluginContext, api: 'onSyntax' | 'onSemantic' | 'onFormat', uri: string, isValidSourceMap: (file: VirtualFile) => boolean, worker: (ruleName: string, rule: Rule, ruleCtx: RuleContext) => T, transform: (result: NonNullable<Awaited<T>>, sourceMap: SourceMapWithDocuments<FileRangeCapabilities> | undefined) => Awaited<T> | undefined, combineResult?: (results: NonNullable<Awaited<T>>[]) => NonNullable<Awaited<T>>, reportProgress?: (result: NonNullable<Awaited<T>>) => void): Promise<NonNullable<Awaited<T>> | undefined>; | ||
export declare function safeCall<T>(cb: () => Promise<T> | T, errorMsg?: string): Promise<T | undefined>; |
@@ -11,5 +11,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.ruleWorker = exports.languageFeatureWorker = exports.documentFeatureWorker = void 0; | ||
exports.safeCall = exports.ruleWorker = exports.languageFeatureWorker = exports.documentFeatureWorker = void 0; | ||
const definePlugin_1 = require("./definePlugin"); | ||
const shared = require("@volar/shared"); | ||
function documentFeatureWorker(context, uri, isValidSourceMap, worker, transform, combineResult) { | ||
@@ -35,4 +34,4 @@ return __awaiter(this, void 0, void 0, function* () { | ||
for (const mappedArg of transformArg(arg, map, file)) { | ||
for (const plugin of Object.values(context.plugins)) { | ||
const embeddedResult = yield worker(plugin, map.virtualFileDocument, mappedArg, map, file); | ||
for (const [pluginId, plugin] of Object.entries(context.plugins)) { | ||
const embeddedResult = yield safeCall(() => worker(plugin, map.virtualFileDocument, mappedArg, map, file), 'plugin ' + pluginId + ' crashed on ' + map.virtualFileDocument.uri); | ||
if (!embeddedResult) | ||
@@ -56,4 +55,4 @@ continue; | ||
else if (document) { | ||
for (const plugin of Object.values(context.plugins)) { | ||
const embeddedResult = yield worker(plugin, document, arg, undefined, undefined); | ||
for (const [pluginId, plugin] of Object.entries(context.plugins)) { | ||
const embeddedResult = yield safeCall(() => worker(plugin, document, arg, undefined, undefined), 'plugin ' + pluginId + ' crashed on ' + uri); | ||
if (!embeddedResult) | ||
@@ -97,8 +96,8 @@ continue; | ||
modules: { typescript: (_l = context.typescript) === null || _l === void 0 ? void 0 : _l.module }, | ||
uriToFileName: shared.uriToFileName, | ||
fileNameToUri: shared.fileNameToUri, | ||
rootUri: context.env.rootUri, | ||
locale: context.env.locale, | ||
getConfiguration: (_m = context.env.configurationHost) === null || _m === void 0 ? void 0 : _m.getConfiguration, | ||
onDidChangeConfiguration: (_o = context.env.configurationHost) === null || _o === void 0 ? void 0 : _o.onDidChangeConfiguration, | ||
uriToFileName: context.uriToFileName, | ||
fileNameToUri: context.fileNameToUri, | ||
rootUri: context.rootUri, | ||
locale: context.locale, | ||
getConfiguration: (_m = context.configurationHost) === null || _m === void 0 ? void 0 : _m.getConfiguration, | ||
onDidChangeConfiguration: (_o = context.configurationHost) === null || _o === void 0 ? void 0 : _o.onDidChangeConfiguration, | ||
settings: (_q = (_p = context.config.lint) === null || _p === void 0 ? void 0 : _p.settings) !== null && _q !== void 0 ? _q : {}, | ||
@@ -112,7 +111,12 @@ // document context | ||
const fn = (_r = plugin.rules) === null || _r === void 0 ? void 0 : _r[api]; | ||
if (fn) { | ||
ruleCtx = yield fn(ruleCtx); | ||
try { | ||
if (fn) { | ||
ruleCtx = yield fn(ruleCtx); | ||
} | ||
else if ((_s = plugin.rules) === null || _s === void 0 ? void 0 : _s.onAny) { | ||
ruleCtx = yield plugin.rules.onAny(ruleCtx); | ||
} | ||
} | ||
else if ((_s = plugin.rules) === null || _s === void 0 ? void 0 : _s.onAny) { | ||
ruleCtx = yield plugin.rules.onAny(ruleCtx); | ||
catch (err) { | ||
console.warn('plugin rule context setup crashed on ' + map.virtualFileDocument.uri + ': ' + err); | ||
} | ||
@@ -126,3 +130,3 @@ } | ||
ruleCtx.ruleId = ruleName; | ||
const embeddedResult = yield worker(ruleName, rule, ruleCtx); | ||
const embeddedResult = yield safeCall(() => worker(ruleName, rule, ruleCtx), 'rule ' + ruleName + ' crashed on ' + map.virtualFileDocument.uri); | ||
if (!embeddedResult) | ||
@@ -148,8 +152,8 @@ continue; | ||
modules: { typescript: (_b = context.typescript) === null || _b === void 0 ? void 0 : _b.module }, | ||
uriToFileName: shared.uriToFileName, | ||
fileNameToUri: shared.fileNameToUri, | ||
rootUri: context.env.rootUri, | ||
locale: context.env.locale, | ||
getConfiguration: (_c = context.env.configurationHost) === null || _c === void 0 ? void 0 : _c.getConfiguration, | ||
onDidChangeConfiguration: (_d = context.env.configurationHost) === null || _d === void 0 ? void 0 : _d.onDidChangeConfiguration, | ||
uriToFileName: context.uriToFileName, | ||
fileNameToUri: context.fileNameToUri, | ||
rootUri: context.rootUri, | ||
locale: context.locale, | ||
getConfiguration: (_c = context.configurationHost) === null || _c === void 0 ? void 0 : _c.getConfiguration, | ||
onDidChangeConfiguration: (_d = context.configurationHost) === null || _d === void 0 ? void 0 : _d.onDidChangeConfiguration, | ||
settings: (_f = (_e = context.config.lint) === null || _e === void 0 ? void 0 : _e.settings) !== null && _f !== void 0 ? _f : {}, | ||
@@ -163,7 +167,12 @@ // document context | ||
const fn = (_g = plugin.rules) === null || _g === void 0 ? void 0 : _g[api]; | ||
if (fn) { | ||
ruleCtx = yield fn(ruleCtx); | ||
try { | ||
if (fn) { | ||
ruleCtx = yield fn(ruleCtx); | ||
} | ||
else if ((_h = plugin.rules) === null || _h === void 0 ? void 0 : _h.onAny) { | ||
ruleCtx = yield plugin.rules.onAny(ruleCtx); | ||
} | ||
} | ||
else if ((_h = plugin.rules) === null || _h === void 0 ? void 0 : _h.onAny) { | ||
ruleCtx = yield plugin.rules.onAny(ruleCtx); | ||
catch (err) { | ||
console.warn('plugin rule context setup crashed on ' + document.uri + ': ' + err); | ||
} | ||
@@ -177,3 +186,3 @@ } | ||
ruleCtx.ruleId = ruleName; | ||
const embeddedResult = yield worker(ruleName, rule, ruleCtx); | ||
const embeddedResult = yield safeCall(() => worker(ruleName, rule, ruleCtx), 'rule ' + ruleName + ' crashed on ' + document.uri); | ||
if (!embeddedResult) | ||
@@ -202,2 +211,13 @@ continue; | ||
exports.ruleWorker = ruleWorker; | ||
function safeCall(cb, errorMsg) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
try { | ||
return yield cb(); | ||
} | ||
catch (err) { | ||
console.warn(errorMsg, err); | ||
} | ||
}); | ||
} | ||
exports.safeCall = safeCall; | ||
//# sourceMappingURL=featureWorkers.js.map |
{ | ||
"name": "@volar/language-service", | ||
"version": "1.3.0-alpha.0", | ||
"version": "1.3.0-alpha.1", | ||
"main": "out/index.js", | ||
@@ -16,6 +16,6 @@ "license": "MIT", | ||
"dependencies": { | ||
"@volar/language-core": "1.3.0-alpha.0", | ||
"@volar/shared": "1.3.0-alpha.0", | ||
"@volar/source-map": "1.3.0-alpha.0", | ||
"@volar/typescript-faster": "1.3.0-alpha.0", | ||
"@volar/language-core": "1.3.0-alpha.1", | ||
"@volar/shared": "1.3.0-alpha.1", | ||
"@volar/source-map": "1.3.0-alpha.1", | ||
"@volar/typescript-faster": "1.3.0-alpha.1", | ||
"vscode-html-languageservice": "^5.0.4", | ||
@@ -27,3 +27,3 @@ "vscode-json-languageservice": "^5.2.0", | ||
}, | ||
"gitHead": "7582403cc521d33f642183a32da44fb1f64e65ef" | ||
"gitHead": "2926dc4af31890e01f6218773e88578ddf0de658" | ||
} |
215000
100
3941
+ Added@volar/language-core@1.3.0-alpha.1(transitive)
+ Added@volar/shared@1.3.0-alpha.1(transitive)
+ Added@volar/source-map@1.3.0-alpha.1(transitive)
+ Added@volar/typescript-faster@1.3.0-alpha.1(transitive)
- Removed@volar/language-core@1.3.0-alpha.0(transitive)
- Removed@volar/shared@1.3.0-alpha.0(transitive)
- Removed@volar/source-map@1.3.0-alpha.0(transitive)
- Removed@volar/typescript-faster@1.3.0-alpha.0(transitive)
Updated@volar/shared@1.3.0-alpha.1