@@ -49,7 +49,8 @@ type processedFiles struct {
4949 jsxRuntimeImportSpecifiers map [tspath.Path ]* jsxRuntimeImportSpecifier
5050 importHelpersImportSpecifiers map [tspath.Path ]* ast.Node
5151 // List of present unsupported extensions
52- unsupportedExtensions []string
52+ unsupportedExtensions []string
53+ sourceFilesFoundSearchingNodeModules collections.Set [tspath.Path ]
5354}
5455
5556type jsxRuntimeImportSpecifier struct {
@@ -111,6 +112,7 @@ func processAllProgramFiles(
111112 var jsxRuntimeImportSpecifiers map [tspath.Path ]* jsxRuntimeImportSpecifier
112113 var importHelpersImportSpecifiers map [tspath.Path ]* ast.Node
113114 var unsupportedExtensions []string
115+ var sourceFilesFoundSearchingNodeModules collections.Set [tspath.Path ]
114116
115117 loader .parseTasks .collect (& loader , loader .rootTasks , func (task * parseTask , _ []tspath.Path ) {
116118 if task .isRedirected {
@@ -153,22 +155,26 @@ func processAllProgramFiles(
153155 if slices .Contains (tspath .SupportedJSExtensionsFlat , extension ) {
154156 unsupportedExtensions = core .AppendIfUnique (unsupportedExtensions , extension )
155157 }
158+ if task .fromExternalLibrary {
159+ sourceFilesFoundSearchingNodeModules .Add (path )
160+ }
156161 })
157162 loader .sortLibs (libFiles )
158163
159164 allFiles := append (libFiles , files ... )
160165
161166 return processedFiles {
162- resolver : loader .resolver ,
163- files : allFiles ,
164- filesByPath : filesByPath ,
165- projectReferenceFileMapper : loader .projectReferenceFileMapper ,
166- resolvedModules : resolvedModules ,
167- typeResolutionsInFile : typeResolutionsInFile ,
168- sourceFileMetaDatas : sourceFileMetaDatas ,
169- jsxRuntimeImportSpecifiers : jsxRuntimeImportSpecifiers ,
170- importHelpersImportSpecifiers : importHelpersImportSpecifiers ,
171- unsupportedExtensions : unsupportedExtensions ,
167+ resolver : loader .resolver ,
168+ files : allFiles ,
169+ filesByPath : filesByPath ,
170+ projectReferenceFileMapper : loader .projectReferenceFileMapper ,
171+ resolvedModules : resolvedModules ,
172+ typeResolutionsInFile : typeResolutionsInFile ,
173+ sourceFileMetaDatas : sourceFileMetaDatas ,
174+ jsxRuntimeImportSpecifiers : jsxRuntimeImportSpecifiers ,
175+ importHelpersImportSpecifiers : importHelpersImportSpecifiers ,
176+ unsupportedExtensions : unsupportedExtensions ,
177+ sourceFilesFoundSearchingNodeModules : sourceFilesFoundSearchingNodeModules ,
172178 }
173179}
174180
@@ -180,7 +186,7 @@ func (p *fileLoader) addRootTasks(files []string, isLib bool) {
180186 for _ , fileName := range files {
181187 absPath := tspath .GetNormalizedAbsolutePath (fileName , p .opts .Host .GetCurrentDirectory ())
182188 if core .Tristate .IsTrue (p .opts .Config .CompilerOptions ().AllowNonTsExtensions ) || slices .Contains (p .supportedExtensions , tspath .TryGetExtensionFromPath (absPath )) {
183- p .rootTasks = append (p .rootTasks , & parseTask {normalizedFilePath : absPath , isLib : isLib })
189+ p .rootTasks = append (p .rootTasks , & parseTask {normalizedFilePath : absPath , isLib : isLib , root : true })
184190 }
185191 }
186192}
@@ -327,38 +333,38 @@ func (p *fileLoader) resolveTripleslashPathReference(moduleName string, containi
327333 }
328334}
329335
330- func (p * fileLoader ) resolveTypeReferenceDirectives (file * ast.SourceFile , meta ast.SourceFileMetaData ) (
331- toParse []resolvedRef ,
332- typeResolutionsInFile module.ModeAwareCache [* module.ResolvedTypeReferenceDirective ],
333- ) {
334- if len (file .TypeReferenceDirectives ) != 0 {
335- toParse = make ([]resolvedRef , 0 , len (file .TypeReferenceDirectives ))
336- typeResolutionsInFile = make (module.ModeAwareCache [* module.ResolvedTypeReferenceDirective ], len (file .TypeReferenceDirectives ))
337- for _ , ref := range file .TypeReferenceDirectives {
338- redirect := p .projectReferenceFileMapper .getRedirectForResolution (file )
339- resolutionMode := getModeForTypeReferenceDirectiveInFile (ref , file , meta , module .GetCompilerOptionsWithRedirect (p .opts .Config .CompilerOptions (), redirect ))
340- resolved := p .resolver .ResolveTypeReferenceDirective (ref .FileName , file .FileName (), resolutionMode , redirect )
341- typeResolutionsInFile [module.ModeAwareCacheKey {Name : ref .FileName , Mode : resolutionMode }] = resolved
342- if resolved .IsResolved () {
343- toParse = append (toParse , resolvedRef {
344- fileName : resolved .ResolvedFileName ,
345- increaseDepth : resolved .IsExternalLibraryImport ,
346- elideOnDepth : false ,
347- })
348- }
336+ func (p * fileLoader ) resolveTypeReferenceDirectives (t * parseTask ) {
337+ file := t .file
338+ if len (file .TypeReferenceDirectives ) == 0 {
339+ return
340+ }
341+ meta := t .metadata
342+
343+ typeResolutionsInFile := make (module.ModeAwareCache [* module.ResolvedTypeReferenceDirective ], len (file .TypeReferenceDirectives ))
344+ for _ , ref := range file .TypeReferenceDirectives {
345+ redirect := p .projectReferenceFileMapper .getRedirectForResolution (file )
346+ resolutionMode := getModeForTypeReferenceDirectiveInFile (ref , file , meta , module .GetCompilerOptionsWithRedirect (p .opts .Config .CompilerOptions (), redirect ))
347+ resolved := p .resolver .ResolveTypeReferenceDirective (ref .FileName , file .FileName (), resolutionMode , redirect )
348+ typeResolutionsInFile [module.ModeAwareCacheKey {Name : ref .FileName , Mode : resolutionMode }] = resolved
349+ if resolved .IsResolved () {
350+ t .addSubTask (resolvedRef {
351+ fileName : resolved .ResolvedFileName ,
352+ increaseDepth : resolved .IsExternalLibraryImport ,
353+ elideOnDepth : false ,
354+ isFromExternalLibrary : resolved .IsExternalLibraryImport ,
355+ }, false )
349356 }
350357 }
351- return toParse , typeResolutionsInFile
358+
359+ t .typeResolutionsInFile = typeResolutionsInFile
352360}
353361
354362const externalHelpersModuleNameText = "tslib" // TODO(jakebailey): dedupe
355363
356- func (p * fileLoader ) resolveImportsAndModuleAugmentations (file * ast.SourceFile , meta ast.SourceFileMetaData ) (
357- toParse []resolvedRef ,
358- resolutionsInFile module.ModeAwareCache [* module.ResolvedModule ],
359- importHelpersImportSpecifier * ast.Node ,
360- jsxRuntimeImportSpecifier_ * jsxRuntimeImportSpecifier ,
361- ) {
364+ func (p * fileLoader ) resolveImportsAndModuleAugmentations (t * parseTask ) {
365+ file := t .file
366+ meta := t .metadata
367+
362368 moduleNames := make ([]* ast.Node , 0 , len (file .Imports ())+ len (file .ModuleAugmentations )+ 2 )
363369
364370 isJavaScriptFile := ast .IsSourceFileJS (file )
@@ -370,14 +376,14 @@ func (p *fileLoader) resolveImportsAndModuleAugmentations(file *ast.SourceFile,
370376 if optionsForFile .ImportHelpers .IsTrue () {
371377 specifier := p .createSyntheticImport (externalHelpersModuleNameText , file )
372378 moduleNames = append (moduleNames , specifier )
373- importHelpersImportSpecifier = specifier
379+ t . importHelpersImportSpecifier = specifier
374380 }
375381
376382 jsxImport := ast .GetJSXRuntimeImport (ast .GetJSXImplicitImportBase (optionsForFile , file ), optionsForFile )
377383 if jsxImport != "" {
378384 specifier := p .createSyntheticImport (jsxImport , file )
379385 moduleNames = append (moduleNames , specifier )
380- jsxRuntimeImportSpecifier_ = & jsxRuntimeImportSpecifier {
386+ t . jsxRuntimeImportSpecifier = & jsxRuntimeImportSpecifier {
381387 moduleReference : jsxImport ,
382388 specifier : specifier ,
383389 }
@@ -395,8 +401,7 @@ func (p *fileLoader) resolveImportsAndModuleAugmentations(file *ast.SourceFile,
395401 }
396402
397403 if len (moduleNames ) != 0 {
398- toParse = make ([]resolvedRef , 0 , len (moduleNames ))
399- resolutionsInFile = make (module.ModeAwareCache [* module.ResolvedModule ], len (moduleNames ))
404+ resolutionsInFile := make (module.ModeAwareCache [* module.ResolvedModule ], len (moduleNames ))
400405
401406 for index , entry := range moduleNames {
402407 moduleName := entry .Text ()
@@ -433,16 +438,17 @@ func (p *fileLoader) resolveImportsAndModuleAugmentations(file *ast.SourceFile,
433438 (importIndex < 0 || (importIndex < len (file .Imports ()) && (ast .IsInJSFile (file .Imports ()[importIndex ]) || file .Imports ()[importIndex ].Flags & ast .NodeFlagsJSDoc == 0 )))
434439
435440 if shouldAddFile {
436- toParse = append (toParse , resolvedRef {
437- fileName : resolvedFileName ,
438- increaseDepth : resolvedModule .IsExternalLibraryImport ,
439- elideOnDepth : isJsFileFromNodeModules ,
440- })
441+ t .addSubTask (resolvedRef {
442+ fileName : resolvedFileName ,
443+ increaseDepth : resolvedModule .IsExternalLibraryImport ,
444+ elideOnDepth : isJsFileFromNodeModules ,
445+ isFromExternalLibrary : resolvedModule .IsExternalLibraryImport ,
446+ }, false )
441447 }
442448 }
443- }
444449
445- return toParse , resolutionsInFile , importHelpersImportSpecifier , jsxRuntimeImportSpecifier_
450+ t .resolutionsInFile = resolutionsInFile
451+ }
446452}
447453
448454// Returns a DiagnosticMessage if we won't include a resolved module due to its extension.
0 commit comments