@@ -29,6 +29,7 @@ namespace ts {
29
29
// Used to rehydrate `symbol` and `moduleSymbol` when transient
30
30
id : number ;
31
31
symbolName : string ;
32
+ capitalizedSymbolName : string | undefined ;
32
33
symbolTableKey : __String ;
33
34
moduleName : string ;
34
35
moduleFile : SourceFile | undefined ;
@@ -48,7 +49,7 @@ namespace ts {
48
49
clear ( ) : void ;
49
50
add ( importingFile : Path , symbol : Symbol , key : __String , moduleSymbol : Symbol , moduleFile : SourceFile | undefined , exportKind : ExportKind , isFromPackageJson : boolean , checker : TypeChecker ) : void ;
50
51
get ( importingFile : Path , key : string ) : readonly SymbolExportInfo [ ] | undefined ;
51
- forEach ( importingFile : Path , action : ( info : readonly SymbolExportInfo [ ] , getSymbolName : ( preferCapitalized ?: boolean ) => string , isFromAmbientModule : boolean , key : string ) => void ) : void ;
52
+ search ( importingFile : Path , preferCapitalized : boolean , matches : ( name : string , targetFlags : SymbolFlags ) => boolean , action : ( info : readonly SymbolExportInfo [ ] , symbolName : string , isFromAmbientModule : boolean , key : string ) => void ) : void ;
52
53
releaseSymbols ( ) : void ;
53
54
isEmpty ( ) : boolean ;
54
55
/** @returns Whether the change resulted in the cache being cleared */
@@ -121,9 +122,12 @@ namespace ts {
121
122
// 3. Otherwise, we have a default/namespace import that can be imported by any name, and
122
123
// `symbolTableKey` will be something undesirable like `export=` or `default`, so we try to
123
124
// get a better name.
124
- const importedName = exportKind === ExportKind . Named || isExternalModuleSymbol ( namedSymbol )
125
+ const names = exportKind === ExportKind . Named || isExternalModuleSymbol ( namedSymbol )
125
126
? unescapeLeadingUnderscores ( symbolTableKey )
126
- : getNameForExportedSymbol ( namedSymbol , /*scriptTarget*/ undefined ) ;
127
+ : getNamesForExportedSymbol ( namedSymbol , /*scriptTarget*/ undefined ) ;
128
+
129
+ const symbolName = typeof names === "string" ? names : names [ 0 ] ;
130
+ const capitalizedSymbolName = typeof names === "string" ? undefined : names [ 1 ] ;
127
131
128
132
const moduleName = stripQuotes ( moduleSymbol . name ) ;
129
133
const id = exportInfoId ++ ;
@@ -132,10 +136,11 @@ namespace ts {
132
136
const storedModuleSymbol = moduleSymbol . flags & SymbolFlags . Transient ? undefined : moduleSymbol ;
133
137
if ( ! storedSymbol || ! storedModuleSymbol ) symbols . set ( id , [ symbol , moduleSymbol ] ) ;
134
138
135
- exportInfo . add ( key ( importedName , symbol , isExternalModuleNameRelative ( moduleName ) ? undefined : moduleName , checker ) , {
139
+ exportInfo . add ( key ( symbolName , symbol , isExternalModuleNameRelative ( moduleName ) ? undefined : moduleName , checker ) , {
136
140
id,
137
141
symbolTableKey,
138
- symbolName : importedName ,
142
+ symbolName,
143
+ capitalizedSymbolName,
139
144
moduleName,
140
145
moduleFile,
141
146
moduleFileName : moduleFile ?. fileName ,
@@ -152,24 +157,17 @@ namespace ts {
152
157
const result = exportInfo . get ( key ) ;
153
158
return result ?. map ( rehydrateCachedInfo ) ;
154
159
} ,
155
- forEach : ( importingFile , action ) => {
160
+ search : ( importingFile , preferCapitalized , matches , action ) => {
156
161
if ( importingFile !== usableByFileName ) return ;
157
162
exportInfo . forEach ( ( info , key ) => {
158
163
const { symbolName, ambientModuleName } = parseKey ( key ) ;
159
- const rehydrated = info . map ( rehydrateCachedInfo ) ;
160
- const filtered = rehydrated . filter ( ( r , i ) => isNotShadowedByDeeperNodeModulesPackage ( r , info [ i ] . packageName ) ) ;
161
- if ( filtered . length ) {
162
- action (
163
- filtered ,
164
- preferCapitalized => {
165
- const { symbol, exportKind } = rehydrated [ 0 ] ;
166
- const namedSymbol = exportKind === ExportKind . Default && getLocalSymbolForExportDefault ( symbol ) || symbol ;
167
- return preferCapitalized
168
- ? getNameForExportedSymbol ( namedSymbol , /*scriptTarget*/ undefined , /*preferCapitalized*/ true )
169
- : symbolName ;
170
- } ,
171
- ! ! ambientModuleName ,
172
- key ) ;
164
+ const name = preferCapitalized && info [ 0 ] . capitalizedSymbolName || symbolName ;
165
+ if ( matches ( name , info [ 0 ] . targetFlags ) ) {
166
+ const rehydrated = info . map ( rehydrateCachedInfo ) ;
167
+ const filtered = rehydrated . filter ( ( r , i ) => isNotShadowedByDeeperNodeModulesPackage ( r , info [ i ] . packageName ) ) ;
168
+ if ( filtered . length ) {
169
+ action ( filtered , name , ! ! ambientModuleName , key ) ;
170
+ }
173
171
}
174
172
} ) ;
175
173
} ,
0 commit comments