@volar/typescript 2.4.0-alpha.4 → 2.4.0-alpha.6

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.
@@ -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, env: LanguageServiceEnvironment, getCurrentDirectory: () => string, uriConverter: {
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, env, getCurrentDirectory, uriConverter) {
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 = env.onDidChangeWatchedFiles?.(({ changes }) => {
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 = env.fs?.stat(uriConverter.asUri(dirName));
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 = env.fs?.stat(uriConverter.asUri(fileName));
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 = env.fs?.readFile(uri, encoding);
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 = env.fs?.readDirectory(uriConverter.asUri(dirName || '.'));
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 = env.fs?.stat(uriConverter.asUri(dirName + '/' + name));
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;
@@ -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 = ts.sys.getFileSize?.(fileName) ?? host.readFile(fileName)?.length ?? 0;
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.4",
3
+ "version": "2.4.0-alpha.6",
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.4",
15
+ "@volar/language-core": "2.4.0-alpha.6",
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.4"
22
+ "@volar/language-service": "2.4.0-alpha.6"
23
23
  },
24
- "gitHead": "8a21a352c664a57eddceb87c5ca6a087d12cba58"
24
+ "gitHead": "7e6c0b8fb66d09037b3540bbac2c4d976b1110ce"
25
25
  }