@volar/typescript 2.2.0-alpha.0 → 2.2.0-alpha.10

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.
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformSpan = exports.transformDocumentSpan = exports.transformFileTextChanges = exports.transformDiagnostic = exports.transformCallHierarchyItem = void 0;
3
+ exports.toGeneratedOffset = exports.toSourceOffset = exports.transformTextSpan = exports.transformTextChange = exports.transformSpan = exports.transformDocumentSpan = exports.transformFileTextChanges = exports.fillSourceFileText = exports.transformDiagnostic = exports.transformCallHierarchyItem = void 0;
4
4
  const language_core_1 = require("@volar/language-core");
5
5
  const utils_1 = require("./utils");
6
6
  const transformedDiagnostics = new WeakMap();
7
- function transformCallHierarchyItem(files, item, filter) {
8
- const span = transformSpan(files, item.file, item.span, filter);
9
- const selectionSpan = transformSpan(files, item.file, item.selectionSpan, filter);
7
+ const transformedSourceFile = new WeakSet();
8
+ function transformCallHierarchyItem(language, item, filter) {
9
+ const span = transformSpan(language, item.file, item.span, filter);
10
+ const selectionSpan = transformSpan(language, item.file, item.selectionSpan, filter);
10
11
  return {
11
12
  ...item,
12
13
  span: span?.textSpan ?? { start: 0, length: 0 },
@@ -14,26 +15,29 @@ function transformCallHierarchyItem(files, item, filter) {
14
15
  };
15
16
  }
16
17
  exports.transformCallHierarchyItem = transformCallHierarchyItem;
17
- function transformDiagnostic(files, diagnostic) {
18
+ function transformDiagnostic(language, diagnostic, isTsc) {
18
19
  if (!transformedDiagnostics.has(diagnostic)) {
19
20
  transformedDiagnostics.set(diagnostic, undefined);
20
21
  const { relatedInformation } = diagnostic;
21
22
  if (relatedInformation) {
22
23
  diagnostic.relatedInformation = relatedInformation
23
- .map(d => transformDiagnostic(files, d))
24
+ .map(d => transformDiagnostic(language, d, isTsc))
24
25
  .filter(utils_1.notEmpty);
25
26
  }
26
27
  if (diagnostic.file !== undefined
27
28
  && diagnostic.start !== undefined
28
29
  && diagnostic.length !== undefined) {
29
- const [virtualCode, sourceScript, map] = (0, utils_1.getServiceScript)(files, diagnostic.file.fileName);
30
- if (virtualCode) {
31
- const sourceRange = transformRange(sourceScript, map, diagnostic.start, diagnostic.start + diagnostic.length, language_core_1.shouldReportDiagnostics);
32
- if (sourceRange) {
30
+ const [serviceScript, sourceScript, map] = (0, utils_1.getServiceScript)(language, diagnostic.file.fileName);
31
+ if (serviceScript) {
32
+ const sourceSpan = transformTextSpan(sourceScript, map, { start: diagnostic.start, length: diagnostic.length }, language_core_1.shouldReportDiagnostics);
33
+ if (sourceSpan) {
34
+ if (isTsc) {
35
+ fillSourceFileText(language, diagnostic.file);
36
+ }
33
37
  transformedDiagnostics.set(diagnostic, {
34
38
  ...diagnostic,
35
- start: sourceRange[0],
36
- length: sourceRange[1] - sourceRange[0],
39
+ start: sourceSpan.start,
40
+ length: sourceSpan.length,
37
41
  });
38
42
  }
39
43
  }
@@ -48,13 +52,26 @@ function transformDiagnostic(files, diagnostic) {
48
52
  return transformedDiagnostics.get(diagnostic);
49
53
  }
50
54
  exports.transformDiagnostic = transformDiagnostic;
51
- function transformFileTextChanges(files, changes, filter) {
52
- const [_, source] = (0, utils_1.getServiceScript)(files, changes.fileName);
55
+ // fix https://github.com/vuejs/language-tools/issues/4099 without `incremental`
56
+ function fillSourceFileText(language, sourceFile) {
57
+ if (transformedSourceFile.has(sourceFile)) {
58
+ return;
59
+ }
60
+ transformedSourceFile.add(sourceFile);
61
+ const [serviceScript, sourceScript] = (0, utils_1.getServiceScript)(language, sourceFile.fileName);
62
+ if (serviceScript) {
63
+ sourceFile.text = sourceScript.snapshot.getText(0, sourceScript.snapshot.getLength())
64
+ + sourceFile.text.substring(sourceScript.snapshot.getLength());
65
+ }
66
+ }
67
+ exports.fillSourceFileText = fillSourceFileText;
68
+ function transformFileTextChanges(language, changes, filter) {
69
+ const [_, source] = (0, utils_1.getServiceScript)(language, changes.fileName);
53
70
  if (source) {
54
71
  return {
55
72
  ...changes,
56
73
  textChanges: changes.textChanges.map(c => {
57
- const span = transformSpan(files, changes.fileName, c.span, filter);
74
+ const span = transformSpan(language, changes.fileName, c.span, filter);
58
75
  if (span) {
59
76
  return {
60
77
  ...c,
@@ -69,23 +86,20 @@ function transformFileTextChanges(files, changes, filter) {
69
86
  }
70
87
  }
71
88
  exports.transformFileTextChanges = transformFileTextChanges;
72
- function transformDocumentSpan(files, documentSpan, filter, shouldFallback) {
73
- let textSpan = transformSpan(files, documentSpan.fileName, documentSpan.textSpan, filter);
89
+ function transformDocumentSpan(language, documentSpan, filter, shouldFallback) {
90
+ let textSpan = transformSpan(language, documentSpan.fileName, documentSpan.textSpan, filter);
74
91
  if (!textSpan && shouldFallback) {
75
- const [virtualCode] = (0, utils_1.getServiceScript)(files, documentSpan.fileName);
76
- if (virtualCode) {
77
- textSpan = {
78
- fileName: documentSpan.fileName,
79
- textSpan: { start: 0, length: 0 },
80
- };
81
- }
92
+ textSpan = {
93
+ fileName: documentSpan.fileName,
94
+ textSpan: { start: 0, length: 0 },
95
+ };
82
96
  }
83
97
  if (!textSpan) {
84
98
  return;
85
99
  }
86
- const contextSpan = transformSpan(files, documentSpan.fileName, documentSpan.contextSpan, filter);
87
- const originalTextSpan = transformSpan(files, documentSpan.originalFileName, documentSpan.originalTextSpan, filter);
88
- const originalContextSpan = transformSpan(files, documentSpan.originalFileName, documentSpan.originalContextSpan, filter);
100
+ const contextSpan = transformSpan(language, documentSpan.fileName, documentSpan.contextSpan, filter);
101
+ const originalTextSpan = transformSpan(language, documentSpan.originalFileName, documentSpan.originalTextSpan, filter);
102
+ const originalContextSpan = transformSpan(language, documentSpan.originalFileName, documentSpan.originalContextSpan, filter);
89
103
  return {
90
104
  ...documentSpan,
91
105
  fileName: textSpan.fileName,
@@ -97,23 +111,17 @@ function transformDocumentSpan(files, documentSpan, filter, shouldFallback) {
97
111
  };
98
112
  }
99
113
  exports.transformDocumentSpan = transformDocumentSpan;
100
- function transformSpan(files, fileName, textSpan, filter) {
101
- if (!fileName) {
102
- return;
103
- }
104
- if (!textSpan) {
114
+ function transformSpan(language, fileName, textSpan, filter) {
115
+ if (!fileName || !textSpan) {
105
116
  return;
106
117
  }
107
- const [virtualFile, sourceScript, map] = (0, utils_1.getServiceScript)(files, fileName);
118
+ const [virtualFile, sourceScript, map] = (0, utils_1.getServiceScript)(language, fileName);
108
119
  if (virtualFile) {
109
- const sourceRange = transformRange(sourceScript, map, textSpan.start, textSpan.start + textSpan.length, filter);
110
- if (sourceRange) {
120
+ const sourceSpan = transformTextSpan(sourceScript, map, textSpan, filter);
121
+ if (sourceSpan) {
111
122
  return {
112
123
  fileName,
113
- textSpan: {
114
- start: sourceRange[0],
115
- length: sourceRange[1] - sourceRange[0],
116
- },
124
+ textSpan: sourceSpan,
117
125
  };
118
126
  }
119
127
  }
@@ -125,15 +133,43 @@ function transformSpan(files, fileName, textSpan, filter) {
125
133
  }
126
134
  }
127
135
  exports.transformSpan = transformSpan;
128
- function transformRange(sourceScript, map, start, end, filter) {
129
- for (const sourceStart of map.getSourceOffsets(start - sourceScript.snapshot.getLength())) {
130
- if (filter(sourceStart[1].data)) {
131
- for (const sourceEnd of map.getSourceOffsets(end - sourceScript.snapshot.getLength())) {
132
- if (sourceEnd[0] >= sourceStart[0] && filter(sourceEnd[1].data)) {
133
- return [sourceStart[0], sourceEnd[0]];
134
- }
135
- }
136
+ function transformTextChange(sourceScript, map, textChange, filter) {
137
+ const sourceSpan = transformTextSpan(sourceScript, map, textChange.span, filter);
138
+ if (sourceSpan) {
139
+ return {
140
+ newText: textChange.newText,
141
+ span: sourceSpan,
142
+ };
143
+ }
144
+ }
145
+ exports.transformTextChange = transformTextChange;
146
+ function transformTextSpan(sourceScript, map, textSpan, filter) {
147
+ const start = textSpan.start;
148
+ const end = textSpan.start + textSpan.length;
149
+ const sourceStart = toSourceOffset(sourceScript, map, start, filter);
150
+ const sourceEnd = toSourceOffset(sourceScript, map, end, filter);
151
+ if (sourceStart !== undefined && sourceEnd !== undefined && sourceEnd >= sourceStart) {
152
+ return {
153
+ start: sourceStart,
154
+ length: sourceEnd - sourceStart,
155
+ };
156
+ }
157
+ }
158
+ exports.transformTextSpan = transformTextSpan;
159
+ function toSourceOffset(sourceScript, map, position, filter) {
160
+ for (const [sourceOffset, mapping] of map.getSourceOffsets(position - sourceScript.snapshot.getLength())) {
161
+ if (filter(mapping.data)) {
162
+ return sourceOffset;
163
+ }
164
+ }
165
+ }
166
+ exports.toSourceOffset = toSourceOffset;
167
+ function toGeneratedOffset(sourceScript, map, position, filter) {
168
+ for (const [generateOffset, mapping] of map.getGeneratedOffsets(position)) {
169
+ if (filter(mapping.data)) {
170
+ return generateOffset + sourceScript.snapshot.getLength();
136
171
  }
137
172
  }
138
173
  }
174
+ exports.toGeneratedOffset = toGeneratedOffset;
139
175
  //# sourceMappingURL=transform.js.map
@@ -43,7 +43,7 @@ function createTypeScriptLanguage(ts, languagePlugins, projectHost) {
43
43
  }
44
44
  if (languagePlugins.some(language => language.typescript?.extraFileExtensions.length)) {
45
45
  // TODO: can this share between monorepo packages?
46
- const moduleCache = ts.createModuleResolutionCache(languageServiceHost.getCurrentDirectory(), languageServiceHost.useCaseSensitiveFileNames ? s => s : s => s.toLowerCase(), languageServiceHost.getCompilationSettings());
46
+ const moduleCache = ts.createModuleResolutionCache(languageServiceHost.getCurrentDirectory(), languageServiceHost.useCaseSensitiveFileNames?.() ? s => s : s => s.toLowerCase(), languageServiceHost.getCompilationSettings());
47
47
  const resolveModuleName = (0, resolveModuleName_1.createResolveModuleName)(ts, languageServiceHost, languagePlugins, fileName => language.scripts.get(projectHost.fileNameToScriptId(fileName)));
48
48
  let lastSysVersion = projectHost.getSystemVersion?.();
49
49
  languageServiceHost.resolveModuleNameLiterals = (moduleLiterals, containingFile, redirectedReference, options, sourceFile) => {
@@ -1,3 +1,3 @@
1
1
  import type * as ts from 'typescript';
2
2
  import { LanguagePlugin } from '@volar/language-core';
3
- export declare function createAsyncLanguageServicePlugin(extensions: string[], scriptKind: ts.ScriptKind, loadLanguagePlugins: (ts: typeof import('typescript'), info: ts.server.PluginCreateInfo) => Promise<LanguagePlugin[]>): ts.server.PluginModuleFactory;
3
+ export declare function createAsyncLanguageServicePlugin(extensions: string[], scriptKind: ts.ScriptKind, loadLanguagePlugins: (ts: typeof import('typescript'), info: ts.server.PluginCreateInfo) => Promise<LanguagePlugin[]>, getLanguageId: (fileName: string) => string): ts.server.PluginModuleFactory;
@@ -8,7 +8,7 @@ const createLanguageServicePlugin_1 = require("./createLanguageServicePlugin");
8
8
  const externalFiles = new WeakMap();
9
9
  const decoratedLanguageServices = new WeakSet();
10
10
  const decoratedLanguageServiceHosts = new WeakSet();
11
- function createAsyncLanguageServicePlugin(extensions, scriptKind, loadLanguagePlugins) {
11
+ function createAsyncLanguageServicePlugin(extensions, scriptKind, loadLanguagePlugins, getLanguageId) {
12
12
  return modules => {
13
13
  const { typescript: ts } = modules;
14
14
  const pluginModule = {
@@ -55,14 +55,14 @@ function createAsyncLanguageServicePlugin(extensions, scriptKind, loadLanguagePl
55
55
  const language = (0, language_core_1.createLanguage)(languagePlugins, ts.sys.useCaseSensitiveFileNames, fileName => {
56
56
  const snapshot = getScriptSnapshot(fileName);
57
57
  if (snapshot) {
58
- language.scripts.set(fileName, (0, language_core_1.resolveCommonLanguageId)(fileName), snapshot);
58
+ language.scripts.set(fileName, getLanguageId(fileName), snapshot);
59
59
  }
60
60
  else {
61
61
  language.scripts.delete(fileName);
62
62
  }
63
63
  });
64
64
  (0, decorateLanguageService_1.decorateLanguageService)(language, info.languageService);
65
- (0, decorateLanguageServiceHost_1.decorateLanguageServiceHost)(language, info.languageServiceHost, ts);
65
+ (0, decorateLanguageServiceHost_1.decorateLanguageServiceHost)(ts, language, info.languageServiceHost);
66
66
  info.project.markAsDirty();
67
67
  initialized = true;
68
68
  });
@@ -1,4 +1,4 @@
1
1
  import type * as ts from 'typescript';
2
2
  import { LanguagePlugin } from '@volar/language-core';
3
- export declare function createLanguageServicePlugin(loadLanguagePlugins: (ts: typeof import('typescript'), info: ts.server.PluginCreateInfo) => LanguagePlugin[]): ts.server.PluginModuleFactory;
3
+ export declare function createLanguageServicePlugin(loadLanguagePlugins: (ts: typeof import('typescript'), info: ts.server.PluginCreateInfo) => LanguagePlugin[], getLanguageId: (fileName: string) => string): ts.server.PluginModuleFactory;
4
4
  export declare function arrayItemsEqual(a: string[], b: string[]): boolean;
@@ -8,7 +8,7 @@ const externalFiles = new WeakMap();
8
8
  const projectExternalFileExtensions = new WeakMap();
9
9
  const decoratedLanguageServices = new WeakSet();
10
10
  const decoratedLanguageServiceHosts = new WeakSet();
11
- function createLanguageServicePlugin(loadLanguagePlugins) {
11
+ function createLanguageServicePlugin(loadLanguagePlugins, getLanguageId) {
12
12
  return modules => {
13
13
  const { typescript: ts } = modules;
14
14
  const pluginModule = {
@@ -26,14 +26,14 @@ function createLanguageServicePlugin(loadLanguagePlugins) {
26
26
  const language = (0, language_core_1.createLanguage)(languagePlugins, ts.sys.useCaseSensitiveFileNames, fileName => {
27
27
  const snapshot = getScriptSnapshot(fileName);
28
28
  if (snapshot) {
29
- language.scripts.set(fileName, (0, language_core_1.resolveCommonLanguageId)(fileName), snapshot);
29
+ language.scripts.set(fileName, getLanguageId(fileName), snapshot);
30
30
  }
31
31
  else {
32
32
  language.scripts.delete(fileName);
33
33
  }
34
34
  });
35
35
  (0, decorateLanguageService_1.decorateLanguageService)(language, info.languageService);
36
- (0, decorateLanguageServiceHost_1.decorateLanguageServiceHost)(language, info.languageServiceHost, ts);
36
+ (0, decorateLanguageServiceHost_1.decorateLanguageServiceHost)(ts, language, info.languageServiceHost);
37
37
  }
38
38
  return info.languageService;
39
39
  },
@@ -1,4 +1,5 @@
1
1
  import type * as ts from 'typescript';
2
2
  import type { LanguagePlugin } from '@volar/language-core';
3
3
  export declare let getLanguagePlugins: (ts: typeof import('typescript'), options: ts.CreateProgramOptions) => LanguagePlugin[];
4
- export declare function runTsc(tscPath: string, extensions: string[], _getLanguagePlugins: typeof getLanguagePlugins): void;
4
+ export declare let getLanguageId: (fileName: string) => string;
5
+ export declare function runTsc(tscPath: string, extensions: string[], _getLanguagePlugins: typeof getLanguagePlugins, _getLanguageId: typeof getLanguageId): void;
@@ -1,11 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.runTsc = exports.getLanguagePlugins = void 0;
3
+ exports.runTsc = exports.getLanguageId = exports.getLanguagePlugins = void 0;
4
4
  const fs = require("fs");
5
5
  let getLanguagePlugins = () => [];
6
6
  exports.getLanguagePlugins = getLanguagePlugins;
7
- function runTsc(tscPath, extensions, _getLanguagePlugins) {
7
+ let getLanguageId = () => 'ts';
8
+ exports.getLanguageId = getLanguageId;
9
+ function runTsc(tscPath, extensions, _getLanguagePlugins, _getLanguageId) {
8
10
  exports.getLanguagePlugins = _getLanguagePlugins;
11
+ exports.getLanguageId = _getLanguageId;
9
12
  const proxyApiPath = require.resolve('../node/proxyCreateProgram');
10
13
  const readFileSync = fs.readFileSync;
11
14
  fs.readFileSync = (...args) => {
@@ -18,10 +21,12 @@ function runTsc(tscPath, extensions, _getLanguagePlugins) {
18
21
  tsc = replace(tsc, /allSupportedExtensions = .*(?=;)/, s => s + `.concat([[${extsText}]])`);
19
22
  // proxy createProgram
20
23
  tsc = replace(tsc, /function createProgram\(.+\) {/, s => `var createProgram = require(${JSON.stringify(proxyApiPath)}).proxyCreateProgram(`
21
- + `new Proxy({}, { get(_target, p, _receiver) { return eval(p); } } ), `
22
- + `_createProgram, `
23
- + `[${extsText}], `
24
- + `require(${JSON.stringify(__filename)}).getLanguagePlugins`
24
+ + [
25
+ `new Proxy({}, { get(_target, p, _receiver) { return eval(p); } } )`,
26
+ `_createProgram`,
27
+ `require(${JSON.stringify(__filename)}).getLanguagePlugins`,
28
+ `require(${JSON.stringify(__filename)}).getLanguageId`,
29
+ ].join(', ')
25
30
  + `);\n`
26
31
  + s.replace('createProgram', '_createProgram'));
27
32
  return tsc;
@@ -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(ts: typeof import('typescript'), languageServiceHost: ts.LanguageServiceHost, languagePlugins: LanguagePlugin<any>[], getSourceScript: (fileName: string) => SourceScript | undefined): (moduleName: string, containingFile: string, compilerOptions: ts.CompilerOptions, cache?: ts.ModuleResolutionCache, redirectedReference?: ts.ResolvedProjectReference, resolutionMode?: ts.ResolutionMode) => ts.ResolvedModuleWithFailedLookupLocations;
3
+ export declare function createResolveModuleName(ts: typeof import('typescript'), host: ts.ModuleResolutionHost, languagePlugins: LanguagePlugin<any>[], getSourceScript: (fileName: string) => SourceScript | undefined): (moduleName: string, containingFile: string, compilerOptions: ts.CompilerOptions, cache?: ts.ModuleResolutionCache, redirectedReference?: ts.ResolvedProjectReference, resolutionMode?: ts.ResolutionMode) => ts.ResolvedModuleWithFailedLookupLocations;
@@ -1,15 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createResolveModuleName = void 0;
4
- function createResolveModuleName(ts, languageServiceHost, languagePlugins, getSourceScript) {
5
- const toPatchResults = new Map();
4
+ function createResolveModuleName(ts, host, languagePlugins, getSourceScript) {
5
+ const toSourceFileInfo = new Map();
6
6
  const moduleResolutionHost = {
7
- readFile: languageServiceHost.readFile.bind(languageServiceHost),
8
- directoryExists: languageServiceHost.directoryExists?.bind(languageServiceHost),
9
- realpath: languageServiceHost.realpath?.bind(languageServiceHost),
10
- getCurrentDirectory: languageServiceHost.getCurrentDirectory.bind(languageServiceHost),
11
- getDirectories: languageServiceHost.getDirectories?.bind(languageServiceHost),
12
- useCaseSensitiveFileNames: languageServiceHost.useCaseSensitiveFileNames?.bind(languageServiceHost),
7
+ readFile: host.readFile.bind(host),
8
+ directoryExists: host.directoryExists?.bind(host),
9
+ realpath: host.realpath?.bind(host),
10
+ getCurrentDirectory: host.getCurrentDirectory?.bind(host),
11
+ getDirectories: host.getDirectories?.bind(host),
12
+ useCaseSensitiveFileNames: typeof host.useCaseSensitiveFileNames === 'function'
13
+ ? host.useCaseSensitiveFileNames.bind(host)
14
+ : host.useCaseSensitiveFileNames,
13
15
  fileExists(fileName) {
14
16
  for (const { typescript } of languagePlugins) {
15
17
  if (!typescript) {
@@ -17,36 +19,51 @@ function createResolveModuleName(ts, languageServiceHost, languagePlugins, getSo
17
19
  }
18
20
  for (const { extension } of typescript.extraFileExtensions) {
19
21
  if (fileName.endsWith(`.d.${extension}.ts`)) {
20
- const patchFileName = fileName.slice(0, -`.d.${extension}.ts`.length) + `.${extension}`;
21
- if (fileExists(patchFileName)) {
22
- toPatchResults.set(fileName, patchFileName);
23
- return true;
22
+ const sourceFileName = fileName.slice(0, -`.d.${extension}.ts`.length) + `.${extension}`;
23
+ if (fileExists(sourceFileName)) {
24
+ const sourceScript = getSourceScript(sourceFileName);
25
+ if (sourceScript?.generated) {
26
+ const serviceScript = sourceScript.generated.languagePlugin.typescript?.getServiceScript(sourceScript.generated.root);
27
+ if (serviceScript) {
28
+ const dtsPath = sourceFileName + '.d.ts';
29
+ if ((serviceScript.extension === '.js' || serviceScript.extension === '.jsx') && fileExists(dtsPath)) {
30
+ toSourceFileInfo.set(fileName, {
31
+ sourceFileName: dtsPath,
32
+ extension: '.ts',
33
+ });
34
+ }
35
+ else {
36
+ toSourceFileInfo.set(fileName, {
37
+ sourceFileName,
38
+ extension: serviceScript.extension,
39
+ });
40
+ }
41
+ return true;
42
+ }
43
+ }
24
44
  }
25
45
  }
26
46
  }
27
47
  }
28
- return languageServiceHost.fileExists(fileName);
48
+ return host.fileExists(fileName);
29
49
  },
30
50
  };
31
51
  return (moduleName, containingFile, compilerOptions, cache, redirectedReference, resolutionMode) => {
32
52
  const result = ts.resolveModuleName(moduleName, containingFile, compilerOptions, moduleResolutionHost, cache, redirectedReference, resolutionMode);
33
- if (result.resolvedModule && toPatchResults.has(result.resolvedModule.resolvedFileName)) {
34
- result.resolvedModule.resolvedFileName = toPatchResults.get(result.resolvedModule.resolvedFileName);
35
- const sourceScript = getSourceScript(result.resolvedModule.resolvedFileName);
36
- if (sourceScript?.generated) {
37
- const serviceScript = sourceScript.generated.languagePlugin.typescript?.getServiceScript(sourceScript.generated.root);
38
- if (serviceScript) {
39
- result.resolvedModule.extension = serviceScript.extension;
40
- }
53
+ if (result.resolvedModule) {
54
+ const sourceFileInfo = toSourceFileInfo.get(result.resolvedModule.resolvedFileName);
55
+ if (sourceFileInfo) {
56
+ result.resolvedModule.resolvedFileName = sourceFileInfo.sourceFileName;
57
+ result.resolvedModule.extension = sourceFileInfo.extension;
41
58
  }
42
59
  }
43
- toPatchResults.clear();
60
+ toSourceFileInfo.clear();
44
61
  return result;
45
62
  };
46
63
  // fix https://github.com/vuejs/language-tools/issues/3332
47
64
  function fileExists(fileName) {
48
- if (languageServiceHost.fileExists(fileName)) {
49
- const fileSize = ts.sys.getFileSize?.(fileName) ?? languageServiceHost.readFile(fileName)?.length ?? 0;
65
+ if (host.fileExists(fileName)) {
66
+ const fileSize = ts.sys.getFileSize?.(fileName) ?? host.readFile(fileName)?.length ?? 0;
50
67
  return fileSize < 4 * 1024 * 1024;
51
68
  }
52
69
  return false;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volar/typescript",
3
- "version": "2.2.0-alpha.0",
3
+ "version": "2.2.0-alpha.10",
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.2.0-alpha.0",
15
+ "@volar/language-core": "2.2.0-alpha.10",
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.2.0-alpha.0"
21
+ "@volar/language-service": "2.2.0-alpha.10"
22
22
  },
23
- "gitHead": "95ffe51f944ee87f570be113541e17ddfe75f588"
23
+ "gitHead": "aedd2230883c457f703be93ed150917a3efde75c"
24
24
  }