@volar/typescript 2.1.3 → 2.1.5-patch.1
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.
|
@@ -58,28 +58,24 @@ function decorateLanguageServiceHost(virtualFiles, languageServiceHost, ts) {
|
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
60
|
languageServiceHost.getScriptSnapshot = fileName => {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return
|
|
61
|
+
const virtualScript = updateVirtualScript(fileName);
|
|
62
|
+
if (virtualScript) {
|
|
63
|
+
return virtualScript.snapshot;
|
|
64
64
|
}
|
|
65
65
|
return getScriptSnapshot(fileName);
|
|
66
66
|
};
|
|
67
67
|
if (getScriptKind) {
|
|
68
68
|
languageServiceHost.getScriptKind = fileName => {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (script) {
|
|
73
|
-
return script.kind;
|
|
74
|
-
}
|
|
75
|
-
return ts.ScriptKind.Deferred;
|
|
69
|
+
const virtualScript = updateVirtualScript(fileName);
|
|
70
|
+
if (virtualScript) {
|
|
71
|
+
return virtualScript.kind;
|
|
76
72
|
}
|
|
77
73
|
return getScriptKind(fileName);
|
|
78
74
|
};
|
|
79
75
|
}
|
|
80
|
-
function
|
|
76
|
+
function updateVirtualScript(fileName) {
|
|
81
77
|
const version = languageServiceHost.getScriptVersion(fileName);
|
|
82
|
-
if (version !== scripts.get(fileName)?.
|
|
78
|
+
if (version !== scripts.get(fileName)?.[0]) {
|
|
83
79
|
let extension = '.ts';
|
|
84
80
|
let snapshotSnapshot;
|
|
85
81
|
let scriptKind = ts.ScriptKind.TS;
|
|
@@ -106,14 +102,18 @@ function decorateLanguageServiceHost(virtualFiles, languageServiceHost, ts) {
|
|
|
106
102
|
extraProjectVersion++;
|
|
107
103
|
virtualFiles.delete(fileName);
|
|
108
104
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
105
|
+
if (snapshotSnapshot) {
|
|
106
|
+
scripts.set(fileName, [
|
|
107
|
+
version,
|
|
108
|
+
{
|
|
109
|
+
extension,
|
|
110
|
+
snapshot: snapshotSnapshot,
|
|
111
|
+
kind: scriptKind,
|
|
112
|
+
}
|
|
113
|
+
]);
|
|
114
|
+
}
|
|
115
115
|
}
|
|
116
|
-
return scripts.get(fileName);
|
|
116
|
+
return scripts.get(fileName)?.[1];
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
exports.decorateLanguageServiceHost = decorateLanguageServiceHost;
|
|
@@ -6,41 +6,42 @@ const utilities_1 = require("../typescript/utilities");
|
|
|
6
6
|
let currentCwd = '';
|
|
7
7
|
function createSys(ts, env, currentDirectory) {
|
|
8
8
|
let version = 0;
|
|
9
|
+
// sys is undefined in browser
|
|
9
10
|
const sys = ts.sys;
|
|
11
|
+
const caseSensitive = sys?.useCaseSensitiveFileNames ?? false;
|
|
10
12
|
const root = {
|
|
13
|
+
name: '',
|
|
11
14
|
dirs: new Map(),
|
|
12
15
|
files: new Map(),
|
|
13
16
|
requestedRead: false,
|
|
14
17
|
};
|
|
15
18
|
const promises = new Set();
|
|
16
19
|
const fileWatcher = env.onDidChangeWatchedFiles?.(({ changes }) => {
|
|
20
|
+
version++;
|
|
17
21
|
for (const change of changes) {
|
|
18
22
|
const fileName = env.typescript.uriToFileName(change.uri);
|
|
19
23
|
const dirName = path.dirname(fileName);
|
|
20
24
|
const baseName = path.basename(fileName);
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
}
|
|
25
|
+
const fileExists = change.type === 1
|
|
26
|
+
|| change.type === 2;
|
|
27
|
+
const dir = getDir(dirName, fileExists);
|
|
28
|
+
dir.files.set(normalizeFileId(baseName), fileExists ? {
|
|
29
|
+
name: baseName,
|
|
30
|
+
stat: {
|
|
31
|
+
type: 1,
|
|
32
|
+
ctime: Date.now(),
|
|
33
|
+
mtime: Date.now(),
|
|
34
|
+
size: -1,
|
|
35
|
+
},
|
|
36
|
+
requestedStat: false,
|
|
37
|
+
requestedText: false,
|
|
38
|
+
} : {
|
|
39
|
+
name: baseName,
|
|
40
|
+
stat: undefined,
|
|
41
|
+
text: undefined,
|
|
42
|
+
requestedStat: true,
|
|
43
|
+
requestedText: true,
|
|
44
|
+
});
|
|
44
45
|
}
|
|
45
46
|
});
|
|
46
47
|
return {
|
|
@@ -49,7 +50,7 @@ function createSys(ts, env, currentDirectory) {
|
|
|
49
50
|
},
|
|
50
51
|
args: sys?.args ?? [],
|
|
51
52
|
newLine: sys?.newLine ?? '\n',
|
|
52
|
-
useCaseSensitiveFileNames:
|
|
53
|
+
useCaseSensitiveFileNames: caseSensitive,
|
|
53
54
|
realpath: sys?.realpath,
|
|
54
55
|
write: sys?.write ?? (() => { }),
|
|
55
56
|
writeFile: sys?.writeFile ?? (() => { }),
|
|
@@ -99,7 +100,7 @@ function createSys(ts, env, currentDirectory) {
|
|
|
99
100
|
const dir = getDir(dirPath);
|
|
100
101
|
const name = path.basename(fileName);
|
|
101
102
|
readFileWorker(fileName, encoding, dir);
|
|
102
|
-
return dir.files.get(name)?.text;
|
|
103
|
+
return dir.files.get(normalizeFileId(name))?.text;
|
|
103
104
|
}
|
|
104
105
|
function directoryExists(dirName) {
|
|
105
106
|
dirName = resolvePath(dirName);
|
|
@@ -168,9 +169,13 @@ function createSys(ts, env, currentDirectory) {
|
|
|
168
169
|
const dirPath = path.dirname(fileName);
|
|
169
170
|
const baseName = path.basename(fileName);
|
|
170
171
|
const dir = getDir(dirPath);
|
|
171
|
-
let file = dir.files.get(baseName);
|
|
172
|
+
let file = dir.files.get(normalizeFileId(baseName));
|
|
172
173
|
if (!file) {
|
|
173
|
-
dir.files.set(baseName, file = {
|
|
174
|
+
dir.files.set(normalizeFileId(baseName), file = {
|
|
175
|
+
name: baseName,
|
|
176
|
+
requestedStat: false,
|
|
177
|
+
requestedText: false,
|
|
178
|
+
});
|
|
174
179
|
}
|
|
175
180
|
return file;
|
|
176
181
|
}
|
|
@@ -179,26 +184,36 @@ function createSys(ts, env, currentDirectory) {
|
|
|
179
184
|
dirName = resolvePath(dirName);
|
|
180
185
|
readDirectoryWorker(dirName);
|
|
181
186
|
const dir = getDir(dirName);
|
|
182
|
-
return [...dir.dirs.
|
|
187
|
+
return [...dir.dirs.values()]
|
|
188
|
+
.filter(dir => dir.exists)
|
|
189
|
+
.map(dir => dir.name);
|
|
183
190
|
}
|
|
184
191
|
function readDirectory(dirName, extensions, excludes, includes, depth) {
|
|
185
192
|
dirName = resolvePath(dirName);
|
|
186
|
-
const matches = (0, utilities_1.matchFiles)(dirName, extensions, excludes, includes,
|
|
193
|
+
const matches = (0, utilities_1.matchFiles)(dirName, extensions, excludes, includes, caseSensitive, currentDirectory, depth, dirPath => {
|
|
187
194
|
dirPath = resolvePath(dirPath);
|
|
188
195
|
readDirectoryWorker(dirPath);
|
|
189
196
|
const dir = getDir(dirPath);
|
|
190
197
|
return {
|
|
191
|
-
files: [...dir.files.
|
|
192
|
-
|
|
198
|
+
files: [...dir.files.values()]
|
|
199
|
+
.filter(file => file.stat?.type === 1)
|
|
200
|
+
.map(file => file.name),
|
|
201
|
+
directories: [...dir.dirs.values()]
|
|
202
|
+
.filter(dir => dir.exists)
|
|
203
|
+
.map(dir => dir.name),
|
|
193
204
|
};
|
|
194
205
|
}, sys?.realpath ? (path => sys.realpath(path)) : (path => path));
|
|
195
206
|
return [...new Set(matches)];
|
|
196
207
|
}
|
|
197
208
|
function readFileWorker(fileName, encoding, dir) {
|
|
198
209
|
const name = path.basename(fileName);
|
|
199
|
-
let file = dir.files.get(name);
|
|
210
|
+
let file = dir.files.get(normalizeFileId(name));
|
|
200
211
|
if (!file) {
|
|
201
|
-
dir.files.set(name, file = {
|
|
212
|
+
dir.files.set(normalizeFileId(name), file = {
|
|
213
|
+
name,
|
|
214
|
+
requestedStat: false,
|
|
215
|
+
requestedText: false,
|
|
216
|
+
});
|
|
202
217
|
}
|
|
203
218
|
if (file.requestedText) {
|
|
204
219
|
return;
|
|
@@ -259,9 +274,13 @@ function createSys(ts, env, currentDirectory) {
|
|
|
259
274
|
stat.then(stat => {
|
|
260
275
|
promises.delete(promise);
|
|
261
276
|
if (stat?.type === 1) {
|
|
262
|
-
let file = dir.files.get(name);
|
|
277
|
+
let file = dir.files.get(normalizeFileId(name));
|
|
263
278
|
if (!file) {
|
|
264
|
-
dir.files.set(name, file = {
|
|
279
|
+
dir.files.set(normalizeFileId(name), file = {
|
|
280
|
+
name,
|
|
281
|
+
requestedStat: false,
|
|
282
|
+
requestedText: false,
|
|
283
|
+
});
|
|
265
284
|
}
|
|
266
285
|
if (stat.type !== file.stat?.type || stat.mtime !== file.stat?.mtime) {
|
|
267
286
|
version++;
|
|
@@ -283,9 +302,13 @@ function createSys(ts, env, currentDirectory) {
|
|
|
283
302
|
}
|
|
284
303
|
}
|
|
285
304
|
if (fileType === 1) {
|
|
286
|
-
let file = dir.files.get(name);
|
|
305
|
+
let file = dir.files.get(normalizeFileId(name));
|
|
287
306
|
if (!file) {
|
|
288
|
-
dir.files.set(name, file = {
|
|
307
|
+
dir.files.set(normalizeFileId(name), file = {
|
|
308
|
+
name,
|
|
309
|
+
requestedStat: false,
|
|
310
|
+
requestedText: false,
|
|
311
|
+
});
|
|
289
312
|
}
|
|
290
313
|
if (!file.stat) {
|
|
291
314
|
file.stat = {
|
|
@@ -307,7 +330,7 @@ function createSys(ts, env, currentDirectory) {
|
|
|
307
330
|
}
|
|
308
331
|
return updated;
|
|
309
332
|
}
|
|
310
|
-
function getDir(dirName) {
|
|
333
|
+
function getDir(dirName, markExists = false) {
|
|
311
334
|
const dirNames = [];
|
|
312
335
|
let currentDirPath = dirName;
|
|
313
336
|
let currentDirName = path.basename(currentDirPath);
|
|
@@ -322,19 +345,27 @@ function createSys(ts, env, currentDirectory) {
|
|
|
322
345
|
for (let i = dirNames.length - 1; i >= 0; i--) {
|
|
323
346
|
const nextDirName = dirNames[i];
|
|
324
347
|
currentDir = getDirFromDir(currentDir, nextDirName);
|
|
348
|
+
if (markExists && !currentDir.exists) {
|
|
349
|
+
currentDir.exists = true;
|
|
350
|
+
version++;
|
|
351
|
+
}
|
|
325
352
|
}
|
|
326
353
|
return currentDir;
|
|
327
354
|
}
|
|
328
355
|
function getDirFromDir(dir, name) {
|
|
329
|
-
let target = dir.dirs.get(name);
|
|
356
|
+
let target = dir.dirs.get(normalizeFileId(name));
|
|
330
357
|
if (!target) {
|
|
331
|
-
dir.dirs.set(name, target = {
|
|
358
|
+
dir.dirs.set(normalizeFileId(name), target = {
|
|
359
|
+
name,
|
|
332
360
|
dirs: new Map(),
|
|
333
361
|
files: new Map(),
|
|
334
362
|
});
|
|
335
363
|
}
|
|
336
364
|
return target;
|
|
337
365
|
}
|
|
366
|
+
function normalizeFileId(fileName) {
|
|
367
|
+
return caseSensitive ? fileName : fileName.toLowerCase();
|
|
368
|
+
}
|
|
338
369
|
}
|
|
339
370
|
exports.createSys = createSys;
|
|
340
371
|
//# sourceMappingURL=createSys.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volar/typescript",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.5-patch.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"files": [
|
|
6
6
|
"**/*.js",
|
|
@@ -12,13 +12,12 @@
|
|
|
12
12
|
"directory": "packages/typescript"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@volar/language-core": "2.1.
|
|
15
|
+
"@volar/language-core": "2.1.5",
|
|
16
16
|
"path-browserify": "^1.0.1"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@types/node": "latest",
|
|
20
20
|
"@types/path-browserify": "latest",
|
|
21
|
-
"@volar/language-service": "2.1.
|
|
22
|
-
}
|
|
23
|
-
"gitHead": "0f861d59faa19cbeadef182ee079be88f9629fc7"
|
|
21
|
+
"@volar/language-service": "2.1.5"
|
|
22
|
+
}
|
|
24
23
|
}
|