56 lines
2.9 KiB
Plaintext
56 lines
2.9 KiB
Plaintext
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.createResolveModuleName = void 0;
|
||
|
function createResolveModuleName(ts, languageServiceHost, languagePlugins, getFile) {
|
||
|
const toPatchResults = new Map();
|
||
|
const moduleResolutionHost = {
|
||
|
readFile: languageServiceHost.readFile.bind(languageServiceHost),
|
||
|
directoryExists: languageServiceHost.directoryExists?.bind(languageServiceHost),
|
||
|
realpath: languageServiceHost.realpath?.bind(languageServiceHost),
|
||
|
getCurrentDirectory: languageServiceHost.getCurrentDirectory.bind(languageServiceHost),
|
||
|
getDirectories: languageServiceHost.getDirectories?.bind(languageServiceHost),
|
||
|
useCaseSensitiveFileNames: languageServiceHost.useCaseSensitiveFileNames?.bind(languageServiceHost),
|
||
|
fileExists(fileName) {
|
||
|
for (const { typescript } of languagePlugins) {
|
||
|
if (!typescript) {
|
||
|
continue;
|
||
|
}
|
||
|
for (const { extension } of typescript.extraFileExtensions) {
|
||
|
if (fileName.endsWith(`.d.${extension}.ts`)) {
|
||
|
const patchFileName = fileName.slice(0, -`.d.${extension}.ts`.length) + `.${extension}`;
|
||
|
if (fileExists(patchFileName)) {
|
||
|
toPatchResults.set(fileName, patchFileName);
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return languageServiceHost.fileExists(fileName);
|
||
|
},
|
||
|
};
|
||
|
return (moduleName, containingFile, compilerOptions, cache, redirectedReference, resolutionMode) => {
|
||
|
const result = ts.resolveModuleName(moduleName, containingFile, compilerOptions, moduleResolutionHost, cache, redirectedReference, resolutionMode);
|
||
|
if (result.resolvedModule && toPatchResults.has(result.resolvedModule.resolvedFileName)) {
|
||
|
result.resolvedModule.resolvedFileName = toPatchResults.get(result.resolvedModule.resolvedFileName);
|
||
|
const sourceFile = getFile(result.resolvedModule.resolvedFileName);
|
||
|
if (sourceFile?.generated) {
|
||
|
const tsCode = sourceFile.generated.languagePlugin.typescript?.getScript(sourceFile.generated.code);
|
||
|
if (tsCode) {
|
||
|
result.resolvedModule.extension = tsCode.extension;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
toPatchResults.clear();
|
||
|
return result;
|
||
|
};
|
||
|
// fix https://github.com/vuejs/language-tools/issues/3332
|
||
|
function fileExists(fileName) {
|
||
|
if (languageServiceHost.fileExists(fileName)) {
|
||
|
const fileSize = ts.sys.getFileSize?.(fileName) ?? languageServiceHost.readFile(fileName)?.length ?? 0;
|
||
|
return fileSize < 4 * 1024 * 1024;
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
exports.createResolveModuleName = createResolveModuleName;
|
||
|
//# sourceMappingURL=resolveModuleName.js.map
|