@volar/typescript 2.4.0-alpha.5 → 2.4.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/node/decorateLanguageServiceHost.js +1 -1
- package/lib/node/proxyCreateProgram.js +1 -1
- package/lib/protocol/createProject.js +15 -1
- package/lib/protocol/createSys.d.ts +1 -1
- package/lib/protocol/createSys.js +7 -7
- package/lib/resolveModuleName.d.ts +1 -1
- package/lib/resolveModuleName.js +2 -2
- package/package.json +4 -4
|
@@ -28,7 +28,7 @@ function decorateLanguageServiceHost(ts, language, languageServiceHost) {
|
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
30
|
if (pluginExtensions.length) {
|
|
31
|
-
const resolveModuleName = (0, resolveModuleName_1.createResolveModuleName)(ts, languageServiceHost, language.plugins, fileName => language.scripts.get(fileName));
|
|
31
|
+
const resolveModuleName = (0, resolveModuleName_1.createResolveModuleName)(ts, ts.sys.getFileSize, languageServiceHost, language.plugins, fileName => language.scripts.get(fileName));
|
|
32
32
|
const getCanonicalFileName = languageServiceHost.useCaseSensitiveFileNames?.()
|
|
33
33
|
? (fileName) => fileName
|
|
34
34
|
: (fileName) => fileName.toLowerCase();
|
|
@@ -144,7 +144,7 @@ function proxyCreateProgram(ts, original, create) {
|
|
|
144
144
|
};
|
|
145
145
|
if (extensions.length) {
|
|
146
146
|
options.options.allowArbitraryExtensions = true;
|
|
147
|
-
const resolveModuleName = (0, resolveModuleName_1.createResolveModuleName)(ts, originalHost, language.plugins, fileName => language.scripts.get(fileName));
|
|
147
|
+
const resolveModuleName = (0, resolveModuleName_1.createResolveModuleName)(ts, ts.sys.getFileSize, originalHost, language.plugins, fileName => language.scripts.get(fileName));
|
|
148
148
|
const resolveModuleNameLiterals = originalHost.resolveModuleNameLiterals;
|
|
149
149
|
const resolveModuleNames = originalHost.resolveModuleNames;
|
|
150
150
|
options.host.resolveModuleNameLiterals = (moduleLiterals, containingFile, redirectedReference, compilerOptions, ...rest) => {
|
|
@@ -9,6 +9,7 @@ function createLanguageServiceHost(ts, sys, language, asScriptId, projectHost) {
|
|
|
9
9
|
let lastProjectVersion;
|
|
10
10
|
let tsProjectVersion = 0;
|
|
11
11
|
let tsFileRegistry = new language_core_1.FileMap(sys.useCaseSensitiveFileNames);
|
|
12
|
+
let tsFileDirRegistry = new language_core_1.FileMap(sys.useCaseSensitiveFileNames);
|
|
12
13
|
let extraScriptRegistry = new language_core_1.FileMap(sys.useCaseSensitiveFileNames);
|
|
13
14
|
let lastTsVirtualFileSnapshots = new Set();
|
|
14
15
|
let lastOtherVirtualFileSnapshots = new Set();
|
|
@@ -66,6 +67,13 @@ function createLanguageServiceHost(ts, sys, language, asScriptId, projectHost) {
|
|
|
66
67
|
return snapshot.getText(0, snapshot.getLength());
|
|
67
68
|
}
|
|
68
69
|
},
|
|
70
|
+
directoryExists(directoryName) {
|
|
71
|
+
sync();
|
|
72
|
+
if (tsFileDirRegistry.has(directoryName)) {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
return sys.directoryExists(directoryName);
|
|
76
|
+
},
|
|
69
77
|
fileExists(fileName) {
|
|
70
78
|
return getScriptVersion(fileName) !== '';
|
|
71
79
|
},
|
|
@@ -119,7 +127,7 @@ function createLanguageServiceHost(ts, sys, language, asScriptId, projectHost) {
|
|
|
119
127
|
if (language.plugins.some(plugin => plugin.typescript?.extraFileExtensions.length)) {
|
|
120
128
|
// TODO: can this share between monorepo packages?
|
|
121
129
|
const moduleCache = ts.createModuleResolutionCache(languageServiceHost.getCurrentDirectory(), languageServiceHost.useCaseSensitiveFileNames?.() ? s => s : s => s.toLowerCase(), languageServiceHost.getCompilationSettings());
|
|
122
|
-
const resolveModuleName = (0, resolveModuleName_1.createResolveModuleName)(ts, languageServiceHost, language.plugins, fileName => language.scripts.get(asScriptId(fileName)));
|
|
130
|
+
const resolveModuleName = (0, resolveModuleName_1.createResolveModuleName)(ts, sys.getFileSize, languageServiceHost, language.plugins, fileName => language.scripts.get(asScriptId(fileName)));
|
|
123
131
|
let lastSysVersion = 'version' in sys ? sys.version : undefined;
|
|
124
132
|
languageServiceHost.resolveModuleNameLiterals = (moduleLiterals, containingFile, redirectedReference, options, sourceFile) => {
|
|
125
133
|
if ('version' in sys && lastSysVersion !== sys.version) {
|
|
@@ -190,8 +198,14 @@ function createLanguageServiceHost(ts, sys, language, asScriptId, projectHost) {
|
|
|
190
198
|
lastTsVirtualFileSnapshots = newTsVirtualFileSnapshots;
|
|
191
199
|
lastOtherVirtualFileSnapshots = newOtherVirtualFileSnapshots;
|
|
192
200
|
tsFileRegistry.clear();
|
|
201
|
+
tsFileDirRegistry.clear();
|
|
193
202
|
for (const fileName of tsFileNamesSet) {
|
|
194
203
|
tsFileRegistry.set(fileName, true);
|
|
204
|
+
const parts = fileName.split('/');
|
|
205
|
+
for (let i = 1; i < parts.length; i++) {
|
|
206
|
+
const dirName = parts.slice(0, i).join('/');
|
|
207
|
+
tsFileDirRegistry.set(dirName, true);
|
|
208
|
+
}
|
|
195
209
|
}
|
|
196
210
|
}
|
|
197
211
|
function getScriptSnapshot(fileName) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { LanguageServiceEnvironment, Disposable } from '@volar/language-service';
|
|
2
2
|
import type * as ts from 'typescript';
|
|
3
3
|
import { URI } from 'vscode-uri';
|
|
4
|
-
export declare function createSys(sys: ts.System | undefined,
|
|
4
|
+
export declare function createSys(sys: ts.System | undefined, { fs, onDidChangeWatchedFiles }: LanguageServiceEnvironment, getCurrentDirectory: () => string, uriConverter: {
|
|
5
5
|
asUri(fileName: string): URI;
|
|
6
6
|
asFileName(uri: URI): string;
|
|
7
7
|
}): ts.System & {
|
|
@@ -5,7 +5,7 @@ const path = require("path-browserify");
|
|
|
5
5
|
const utilities_1 = require("../typescript/utilities");
|
|
6
6
|
const vscode_uri_1 = require("vscode-uri");
|
|
7
7
|
let currentCwd = '';
|
|
8
|
-
function createSys(sys,
|
|
8
|
+
function createSys(sys, { fs, onDidChangeWatchedFiles }, getCurrentDirectory, uriConverter) {
|
|
9
9
|
let version = 0;
|
|
10
10
|
const caseSensitive = sys?.useCaseSensitiveFileNames ?? false;
|
|
11
11
|
const root = {
|
|
@@ -15,7 +15,7 @@ function createSys(sys, env, getCurrentDirectory, uriConverter) {
|
|
|
15
15
|
requestedRead: false,
|
|
16
16
|
};
|
|
17
17
|
const promises = new Set();
|
|
18
|
-
const fileWatcher =
|
|
18
|
+
const fileWatcher = onDidChangeWatchedFiles?.(({ changes }) => {
|
|
19
19
|
version++;
|
|
20
20
|
for (const change of changes) {
|
|
21
21
|
const changeUri = vscode_uri_1.URI.parse(change.uri);
|
|
@@ -108,7 +108,7 @@ function createSys(sys, env, getCurrentDirectory, uriConverter) {
|
|
|
108
108
|
const dir = getDir(dirName);
|
|
109
109
|
if (dir.exists === undefined) {
|
|
110
110
|
dir.exists = false;
|
|
111
|
-
const result =
|
|
111
|
+
const result = fs?.stat(uriConverter.asUri(dirName));
|
|
112
112
|
if (typeof result === 'object' && 'then' in result) {
|
|
113
113
|
const promise = result;
|
|
114
114
|
promises.add(promise);
|
|
@@ -149,7 +149,7 @@ function createSys(sys, env, getCurrentDirectory, uriConverter) {
|
|
|
149
149
|
return exists();
|
|
150
150
|
}
|
|
151
151
|
function handleStat(fileName, file) {
|
|
152
|
-
const result =
|
|
152
|
+
const result = fs?.stat(uriConverter.asUri(fileName));
|
|
153
153
|
if (typeof result === 'object' && 'then' in result) {
|
|
154
154
|
const promise = result;
|
|
155
155
|
promises.add(promise);
|
|
@@ -222,7 +222,7 @@ function createSys(sys, env, getCurrentDirectory, uriConverter) {
|
|
|
222
222
|
}
|
|
223
223
|
file.requestedText = true;
|
|
224
224
|
const uri = uriConverter.asUri(fileName);
|
|
225
|
-
const result =
|
|
225
|
+
const result = fs?.readFile(uri, encoding);
|
|
226
226
|
if (typeof result === 'object' && 'then' in result) {
|
|
227
227
|
const promise = result;
|
|
228
228
|
promises.add(promise);
|
|
@@ -247,7 +247,7 @@ function createSys(sys, env, getCurrentDirectory, uriConverter) {
|
|
|
247
247
|
return;
|
|
248
248
|
}
|
|
249
249
|
dir.requestedRead = true;
|
|
250
|
-
const result =
|
|
250
|
+
const result = fs?.readDirectory(uriConverter.asUri(dirName || '.'));
|
|
251
251
|
if (typeof result === 'object' && 'then' in result) {
|
|
252
252
|
const promise = result;
|
|
253
253
|
promises.add(promise);
|
|
@@ -269,7 +269,7 @@ function createSys(sys, env, getCurrentDirectory, uriConverter) {
|
|
|
269
269
|
for (const [name, _fileType] of result) {
|
|
270
270
|
let fileType = _fileType;
|
|
271
271
|
if (fileType === 64) {
|
|
272
|
-
const stat =
|
|
272
|
+
const stat = fs?.stat(uriConverter.asUri(dirName + '/' + name));
|
|
273
273
|
if (typeof stat === 'object' && 'then' in stat) {
|
|
274
274
|
const promise = stat;
|
|
275
275
|
promises.add(promise);
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { LanguagePlugin, SourceScript } from '@volar/language-core';
|
|
2
2
|
import type * as ts from 'typescript';
|
|
3
|
-
export declare function createResolveModuleName<T>(ts: typeof import('typescript'), host: ts.ModuleResolutionHost, languagePlugins: LanguagePlugin<any>[], getSourceScript: (fileName: string) => SourceScript<T> | undefined): (moduleName: string, containingFile: string, compilerOptions: ts.CompilerOptions, cache?: ts.ModuleResolutionCache, redirectedReference?: ts.ResolvedProjectReference, resolutionMode?: ts.ResolutionMode) => ts.ResolvedModuleWithFailedLookupLocations;
|
|
3
|
+
export declare function createResolveModuleName<T>(ts: typeof import('typescript'), getFileSize: ((fileName: string) => number) | undefined, host: ts.ModuleResolutionHost, languagePlugins: LanguagePlugin<any>[], getSourceScript: (fileName: string) => SourceScript<T> | undefined): (moduleName: string, containingFile: string, compilerOptions: ts.CompilerOptions, cache?: ts.ModuleResolutionCache, redirectedReference?: ts.ResolvedProjectReference, resolutionMode?: ts.ResolutionMode) => ts.ResolvedModuleWithFailedLookupLocations;
|
package/lib/resolveModuleName.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createResolveModuleName = createResolveModuleName;
|
|
4
|
-
function createResolveModuleName(ts, host, languagePlugins, getSourceScript) {
|
|
4
|
+
function createResolveModuleName(ts, getFileSize, host, languagePlugins, getSourceScript) {
|
|
5
5
|
const toSourceFileInfo = new Map();
|
|
6
6
|
const moduleResolutionHost = {
|
|
7
7
|
readFile: host.readFile.bind(host),
|
|
@@ -81,7 +81,7 @@ function createResolveModuleName(ts, host, languagePlugins, getSourceScript) {
|
|
|
81
81
|
// fix https://github.com/vuejs/language-tools/issues/3332
|
|
82
82
|
function fileExists(fileName) {
|
|
83
83
|
if (host.fileExists(fileName)) {
|
|
84
|
-
const fileSize =
|
|
84
|
+
const fileSize = getFileSize?.(fileName) ?? host.readFile(fileName)?.length ?? 0;
|
|
85
85
|
return fileSize < 4 * 1024 * 1024;
|
|
86
86
|
}
|
|
87
87
|
return false;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volar/typescript",
|
|
3
|
-
"version": "2.4.0-alpha.
|
|
3
|
+
"version": "2.4.0-alpha.7",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"files": [
|
|
6
6
|
"**/*.js",
|
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
"directory": "packages/typescript"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@volar/language-core": "2.4.0-alpha.
|
|
15
|
+
"@volar/language-core": "2.4.0-alpha.7",
|
|
16
16
|
"path-browserify": "^1.0.1",
|
|
17
17
|
"vscode-uri": "^3.0.8"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"@types/node": "latest",
|
|
21
21
|
"@types/path-browserify": "latest",
|
|
22
|
-
"@volar/language-service": "2.4.0-alpha.
|
|
22
|
+
"@volar/language-service": "2.4.0-alpha.7"
|
|
23
23
|
},
|
|
24
|
-
"gitHead": "
|
|
24
|
+
"gitHead": "890a891306835b992269ef1225f71a42f53d83e8"
|
|
25
25
|
}
|