@volar/typescript 2.1.3 → 2.1.5

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.
@@ -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 dir = getDir(dirName);
22
- if (dir.files.has(baseName)) { // is requested file
23
- version++;
24
- if (change.type === 1 || change.type === 2) {
25
- dir.files.set(baseName, {
26
- stat: {
27
- type: 1,
28
- ctime: Date.now(),
29
- mtime: Date.now(),
30
- size: -1,
31
- },
32
- requestedStat: false,
33
- });
34
- }
35
- else if (change.type === 3) {
36
- dir.files.set(baseName, {
37
- stat: undefined,
38
- text: undefined,
39
- requestedStat: true,
40
- requestedText: true,
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: sys?.useCaseSensitiveFileNames ?? false,
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.entries()].filter(([_, dir]) => dir.exists).map(([name]) => name);
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, sys?.useCaseSensitiveFileNames ?? false, currentDirectory, depth, dirPath => {
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.entries()].filter(([_, file]) => file.stat?.type === 1).map(([name]) => name),
192
- directories: [...dir.dirs.entries()].filter(([_, dir]) => dir.exists).map(([name]) => name),
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",
3
+ "version": "2.1.5",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "**/*.js",
@@ -12,13 +12,13 @@
12
12
  "directory": "packages/typescript"
13
13
  },
14
14
  "dependencies": {
15
- "@volar/language-core": "2.1.3",
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.3"
21
+ "@volar/language-service": "2.1.5"
22
22
  },
23
- "gitHead": "0f861d59faa19cbeadef182ee079be88f9629fc7"
23
+ "gitHead": "1b7f456660134891d91608f36cfc6dd2eaea6f70"
24
24
  }