@@ -33,7 +33,7 @@ namespace ts {
33
33
let needsScopeFixMarker = false ;
34
34
let resultHasScopeMarker = false ;
35
35
let enclosingDeclaration : Node ;
36
- let necessaryTypeRefernces : Map < true > | undefined ;
36
+ let necessaryTypeReferences : Map < true > | undefined ;
37
37
let lateMarkedStatements : LateVisibilityPaintedStatement [ ] | undefined ;
38
38
let lateStatementReplacementMap : Map < VisitResult < LateVisibilityPaintedStatement > > ;
39
39
let suppressNewDiagnosticContexts : boolean ;
@@ -53,6 +53,7 @@ namespace ts {
53
53
54
54
let currentSourceFile : SourceFile ;
55
55
let refs : Map < SourceFile > ;
56
+ let libs : Map < boolean > ;
56
57
const resolver = context . getEmitResolver ( ) ;
57
58
const options = context . getCompilerOptions ( ) ;
58
59
const newLine = getNewLineCharacter ( options ) ;
@@ -63,9 +64,9 @@ namespace ts {
63
64
if ( ! typeReferenceDirectives ) {
64
65
return ;
65
66
}
66
- necessaryTypeRefernces = necessaryTypeRefernces || createMap < true > ( ) ;
67
+ necessaryTypeReferences = necessaryTypeReferences || createMap < true > ( ) ;
67
68
for ( const ref of typeReferenceDirectives ) {
68
- necessaryTypeRefernces . set ( ref , true ) ;
69
+ necessaryTypeReferences . set ( ref , true ) ;
69
70
}
70
71
}
71
72
@@ -163,6 +164,7 @@ namespace ts {
163
164
if ( node . kind === SyntaxKind . Bundle ) {
164
165
isBundledEmit = true ;
165
166
refs = createMap < SourceFile > ( ) ;
167
+ libs = createMap < boolean > ( ) ;
166
168
let hasNoDefaultLib = false ;
167
169
const bundle = createBundle ( map ( node . sourceFiles ,
168
170
sourceFile => {
@@ -177,6 +179,7 @@ namespace ts {
177
179
needsScopeFixMarker = false ;
178
180
resultHasScopeMarker = false ;
179
181
collectReferences ( sourceFile , refs ) ;
182
+ collectLibs ( sourceFile , libs ) ;
180
183
if ( isExternalModule ( sourceFile ) ) {
181
184
resultHasExternalModuleIndicator = false ; // unused in external module bundle emit (all external modules are within module blocks, therefore are known to be modules)
182
185
needsDeclare = false ;
@@ -200,6 +203,7 @@ namespace ts {
200
203
} ) ) ;
201
204
bundle . syntheticFileReferences = [ ] ;
202
205
bundle . syntheticTypeReferences = getFileReferencesForUsedTypeReferences ( ) ;
206
+ bundle . syntheticLibReferences = getLibReferences ( ) ;
203
207
bundle . hasNoDefaultLib = hasNoDefaultLib ;
204
208
const outputFilePath = getDirectoryPath ( normalizeSlashes ( getOutputPathsFor ( node , host , /*forceDtsPaths*/ true ) . declarationFilePath ! ) ) ;
205
209
const referenceVisitor = mapReferencesIntoArray ( bundle . syntheticFileReferences as FileReference [ ] , outputFilePath ) ;
@@ -219,8 +223,9 @@ namespace ts {
219
223
suppressNewDiagnosticContexts = false ;
220
224
lateMarkedStatements = undefined ;
221
225
lateStatementReplacementMap = createMap ( ) ;
222
- necessaryTypeRefernces = undefined ;
226
+ necessaryTypeReferences = undefined ;
223
227
refs = collectReferences ( currentSourceFile , createMap ( ) ) ;
228
+ libs = collectLibs ( currentSourceFile , createMap ( ) ) ;
224
229
const references : FileReference [ ] = [ ] ;
225
230
const outputFilePath = getDirectoryPath ( normalizeSlashes ( getOutputPathsFor ( node , host , /*forceDtsPaths*/ true ) . declarationFilePath ! ) ) ;
226
231
const referenceVisitor = mapReferencesIntoArray ( references , outputFilePath ) ;
@@ -231,12 +236,16 @@ namespace ts {
231
236
if ( isExternalModule ( node ) && ( ! resultHasExternalModuleIndicator || ( needsScopeFixMarker && ! resultHasScopeMarker ) ) ) {
232
237
combinedStatements = setTextRange ( createNodeArray ( [ ...combinedStatements , createExportDeclaration ( /*decorators*/ undefined , /*modifiers*/ undefined , createNamedExports ( [ ] ) , /*moduleSpecifier*/ undefined ) ] ) , combinedStatements ) ;
233
238
}
234
- const updated = updateSourceFileNode ( node , combinedStatements , /*isDeclarationFile*/ true , references , getFileReferencesForUsedTypeReferences ( ) , node . hasNoDefaultLib ) ;
239
+ const updated = updateSourceFileNode ( node , combinedStatements , /*isDeclarationFile*/ true , references , getFileReferencesForUsedTypeReferences ( ) , node . hasNoDefaultLib , getLibReferences ( ) ) ;
235
240
updated . exportedModulesFromDeclarationEmit = exportedModulesFromDeclarationEmit ;
236
241
return updated ;
237
242
243
+ function getLibReferences ( ) {
244
+ return map ( arrayFrom ( libs . keys ( ) ) , lib => ( { fileName : lib , pos : - 1 , end : - 1 } ) ) ;
245
+ }
246
+
238
247
function getFileReferencesForUsedTypeReferences ( ) {
239
- return necessaryTypeRefernces ? mapDefined ( arrayFrom ( necessaryTypeRefernces . keys ( ) ) , getFileReferenceForTypeName ) : [ ] ;
248
+ return necessaryTypeReferences ? mapDefined ( arrayFrom ( necessaryTypeReferences . keys ( ) ) , getFileReferenceForTypeName ) : [ ] ;
240
249
}
241
250
242
251
function getFileReferenceForTypeName ( typeName : string ) : FileReference | undefined {
@@ -297,6 +306,16 @@ namespace ts {
297
306
return ret ;
298
307
}
299
308
309
+ function collectLibs ( sourceFile : SourceFile , ret : Map < boolean > ) {
310
+ forEach ( sourceFile . libReferenceDirectives , ref => {
311
+ const lib = host . getLibFileFromReference ( ref ) ;
312
+ if ( lib ) {
313
+ ret . set ( ref . fileName . toLocaleLowerCase ( ) , true ) ;
314
+ }
315
+ } ) ;
316
+ return ret ;
317
+ }
318
+
300
319
function filterBindingPatternInitializers ( name : BindingName ) {
301
320
if ( name . kind === SyntaxKind . Identifier ) {
302
321
return name ;
0 commit comments