* Gets the referenced files for a file from the program with values for the keys as referenced file's path to be true
(program, sourceFile, getCanonicalFileName)
| 119641 | * Gets the referenced files for a file from the program with values for the keys as referenced file's path to be true |
| 119642 | */ |
| 119643 | function getReferencedFiles(program, sourceFile, getCanonicalFileName) { |
| 119644 | var referencedFiles; |
| 119645 | // We need to use a set here since the code can contain the same import twice, |
| 119646 | // but that will only be one dependency. |
| 119647 | // To avoid invernal conversion, the key of the referencedFiles map must be of type Path |
| 119648 | if (sourceFile.imports && sourceFile.imports.length > 0) { |
| 119649 | var checker = program.getTypeChecker(); |
| 119650 | for (var _i = 0, _a = sourceFile.imports; _i < _a.length; _i++) { |
| 119651 | var importName = _a[_i]; |
| 119652 | var declarationSourceFilePaths = getReferencedFilesFromImportLiteral(checker, importName); |
| 119653 | declarationSourceFilePaths === null || declarationSourceFilePaths === void 0 ? void 0 : declarationSourceFilePaths.forEach(addReferencedFile); |
| 119654 | } |
| 119655 | } |
| 119656 | var sourceFileDirectory = ts.getDirectoryPath(sourceFile.resolvedPath); |
| 119657 | // Handle triple slash references |
| 119658 | if (sourceFile.referencedFiles && sourceFile.referencedFiles.length > 0) { |
| 119659 | for (var _b = 0, _c = sourceFile.referencedFiles; _b < _c.length; _b++) { |
| 119660 | var referencedFile = _c[_b]; |
| 119661 | var referencedPath = getReferencedFileFromFileName(program, referencedFile.fileName, sourceFileDirectory, getCanonicalFileName); |
| 119662 | addReferencedFile(referencedPath); |
| 119663 | } |
| 119664 | } |
| 119665 | // Handle type reference directives |
| 119666 | if (sourceFile.resolvedTypeReferenceDirectiveNames) { |
| 119667 | sourceFile.resolvedTypeReferenceDirectiveNames.forEach(function (resolvedTypeReferenceDirective) { |
| 119668 | if (!resolvedTypeReferenceDirective) { |
| 119669 | return; |
| 119670 | } |
| 119671 | var fileName = resolvedTypeReferenceDirective.resolvedFileName; // TODO: GH#18217 |
| 119672 | var typeFilePath = getReferencedFileFromFileName(program, fileName, sourceFileDirectory, getCanonicalFileName); |
| 119673 | addReferencedFile(typeFilePath); |
| 119674 | }); |
| 119675 | } |
| 119676 | // Add module augmentation as references |
| 119677 | if (sourceFile.moduleAugmentations.length) { |
| 119678 | var checker = program.getTypeChecker(); |
| 119679 | for (var _d = 0, _e = sourceFile.moduleAugmentations; _d < _e.length; _d++) { |
| 119680 | var moduleName = _e[_d]; |
| 119681 | if (!ts.isStringLiteral(moduleName)) |
| 119682 | continue; |
| 119683 | var symbol = checker.getSymbolAtLocation(moduleName); |
| 119684 | if (!symbol) |
| 119685 | continue; |
| 119686 | // Add any file other than our own as reference |
| 119687 | addReferenceFromAmbientModule(symbol); |
| 119688 | } |
| 119689 | } |
| 119690 | // From ambient modules |
| 119691 | for (var _f = 0, _g = program.getTypeChecker().getAmbientModules(); _f < _g.length; _f++) { |
| 119692 | var ambientModule = _g[_f]; |
| 119693 | if (ambientModule.declarations && ambientModule.declarations.length > 1) { |
| 119694 | addReferenceFromAmbientModule(ambientModule); |
| 119695 | } |
| 119696 | } |
| 119697 | return referencedFiles; |
| 119698 | function addReferenceFromAmbientModule(symbol) { |
| 119699 | if (!symbol.declarations) { |
| 119700 | return; |
no test coverage detected