@@ -23,6 +23,7 @@ import {
23
23
ConstructorTypeNode ,
24
24
ConstructSignatureDeclaration ,
25
25
contains ,
26
+ CoreEmitResolver ,
26
27
createDiagnosticForNode ,
27
28
createDiagnosticForRange ,
28
29
createEmptyExports ,
@@ -46,7 +47,6 @@ import {
46
47
EnumDeclaration ,
47
48
ExportAssignment ,
48
49
ExportDeclaration ,
49
- Expression ,
50
50
ExpressionWithTypeArguments ,
51
51
factory ,
52
52
FileReference ,
@@ -139,7 +139,7 @@ import {
139
139
isMethodSignature ,
140
140
isModifier ,
141
141
isModuleDeclaration ,
142
- IsolatedEmitResolver ,
142
+ IsolatedTransformationContext ,
143
143
isOmittedExpression ,
144
144
isPrivateIdentifier ,
145
145
isPropertySignature ,
@@ -167,7 +167,6 @@ import {
167
167
LateBoundDeclaration ,
168
168
LateVisibilityPaintedStatement ,
169
169
length ,
170
- LocalInferenceResolver ,
171
170
map ,
172
171
mapDefined ,
173
172
MethodDeclaration ,
@@ -221,6 +220,7 @@ import {
221
220
SyntaxKind ,
222
221
toFileNameLowerCase ,
223
222
TransformationContext ,
223
+ TransformationContextKind ,
224
224
transformNodes ,
225
225
tryCast ,
226
226
tryGetModuleSpecifierFromDeclaration ,
@@ -293,7 +293,7 @@ const declarationEmitNodeBuilderFlags = NodeBuilderFlags.MultilineObjectLiterals
293
293
*
294
294
* @internal
295
295
*/
296
- export function transformDeclarations ( context : TransformationContext , _useTscEmit = true ) {
296
+ export function transformDeclarations ( context : TransformationContext | IsolatedTransformationContext ) {
297
297
const throwDiagnostic = ( ) => Debug . fail ( "Diagnostic emitted without context" ) ;
298
298
let getSymbolAccessibilityDiagnostic : GetSymbolAccessibilityDiagnostic = throwDiagnostic ;
299
299
let needsDeclare = true ;
@@ -318,108 +318,80 @@ export function transformDeclarations(context: TransformationContext, _useTscEmi
318
318
let refs : Map < NodeId , SourceFile > ;
319
319
let libs : Map < string , boolean > ;
320
320
let emittedImports : readonly AnyImportSyntax [ ] | undefined ; // must be declared in container so it can be `undefined` while transformer's first pass
321
- const { localInferenceResolver, isolatedDeclarations, host, resolver, symbolTracker, ensureNoInitializer, useTscEmit } = createTransformerServices ( ) ;
321
+ const { localInferenceResolver, isolatedDeclarations, host, resolver, symbolTracker, ensureNoInitializer, useLocalInferenceTypePrint } = createTransformerServices ( ) ;
322
322
const options = context . getCompilerOptions ( ) ;
323
323
const { noResolve, stripInternal } = options ;
324
324
return transformRoot ;
325
325
326
- function createTransformerServices ( ) : {
327
- isolatedDeclarations : true ;
328
- useTscEmit : false ;
329
- resolver : IsolatedEmitResolver ;
330
- localInferenceResolver : LocalInferenceResolver ;
331
- host : undefined ;
332
- symbolTracker : undefined ;
333
- ensureNoInitializer : ( node : CanHaveLiteralInitializer ) => Expression | undefined ;
334
- } | {
335
- isolatedDeclarations : true ;
336
- useTscEmit : true ;
337
- resolver : EmitResolver ;
338
- localInferenceResolver : LocalInferenceResolver ;
339
- host : EmitHost ;
340
- symbolTracker : SymbolTracker ;
341
- ensureNoInitializer : ( node : CanHaveLiteralInitializer ) => Expression | undefined ;
342
- } | {
343
- isolatedDeclarations : false ;
344
- useTscEmit : false ;
345
- resolver : EmitResolver ;
346
- localInferenceResolver : undefined ;
347
- host : EmitHost ;
348
- symbolTracker : SymbolTracker ;
349
- ensureNoInitializer : ( node : CanHaveLiteralInitializer ) => Expression | undefined ;
350
- } {
351
- const { isolatedDeclarations, resolver : localInferenceResolver } = createLocalInferenceResolver ( {
352
- ensureParameter,
353
- context,
354
- visitDeclarationSubtree,
355
- setEnclosingDeclarations ( node ) {
356
- const oldNode = enclosingDeclaration ;
357
- enclosingDeclaration = node ;
358
- return oldNode ;
359
- } ,
360
- checkEntityNameVisibility ( name , container ) {
361
- return checkEntityNameVisibility ( name , container ?? enclosingDeclaration ) ;
362
- } ,
363
- } ) ;
326
+ function createTransformerServices ( ) {
327
+ const isolatedDeclarations = context . getCompilerOptions ( ) . isolatedDeclarations ;
364
328
365
329
if ( isolatedDeclarations ) {
366
- if ( ! _useTscEmit ) {
367
- const resolver : IsolatedEmitResolver = context . getEmitResolver ( ) ;
330
+ const localInferenceResolver = createLocalInferenceResolver ( {
331
+ ensureParameter,
332
+ context,
333
+ visitDeclarationSubtree,
334
+ setEnclosingDeclarations ( node ) {
335
+ const oldNode = enclosingDeclaration ;
336
+ enclosingDeclaration = node ;
337
+ return oldNode ;
338
+ } ,
339
+ checkEntityNameVisibility ( name , container ) {
340
+ return checkEntityNameVisibility ( name , container ?? enclosingDeclaration ) ;
341
+ } ,
342
+ } ) ;
343
+ if ( context . kind === TransformationContextKind . IsolatedContext ) {
344
+ const resolver : CoreEmitResolver = context . getEmitResolver ( ) ;
368
345
// Ideally nothing should require the symbol tracker in isolated declarations mode.
369
346
// createLiteralConstValue is the one exception
370
347
const emptySymbolTracker = { } ;
371
348
return {
372
349
isolatedDeclarations,
373
- useTscEmit : false ,
350
+ useLocalInferenceTypePrint : true ,
374
351
resolver,
375
352
localInferenceResolver,
376
353
symbolTracker : undefined ,
377
354
host : undefined ,
378
- ensureNoInitializer : ( node : CanHaveLiteralInitializer ) => {
379
- if ( shouldPrintWithInitializer ( node ) ) {
380
- return resolver . createLiteralConstValue ( getParseTreeNode ( node ) as CanHaveLiteralInitializer , emptySymbolTracker ) ; // TODO: Make safe
381
- }
382
- return undefined ;
383
- } ,
384
- } ;
355
+ ensureNoInitializer : createEnsureNoInitializer ( emptySymbolTracker ) ,
356
+ } as const ;
385
357
}
386
358
else {
387
359
const host = context . getEmitHost ( ) ;
388
360
const resolver : EmitResolver = context . getEmitResolver ( ) ;
389
361
const symbolTracker = createSymbolTracker ( resolver , host ) ;
390
362
return {
391
363
isolatedDeclarations,
392
- useTscEmit : true ,
364
+ useLocalInferenceTypePrint : false ,
393
365
resolver,
394
366
localInferenceResolver,
395
367
symbolTracker,
396
368
host,
397
- ensureNoInitializer : ( node : CanHaveLiteralInitializer ) => {
398
- if ( shouldPrintWithInitializer ( node ) ) {
399
- return resolver . createLiteralConstValue ( getParseTreeNode ( node ) as CanHaveLiteralInitializer , symbolTracker ) ; // TODO: Make safe
400
- }
401
- return undefined ;
402
- } ,
403
- } ;
369
+ ensureNoInitializer : createEnsureNoInitializer ( symbolTracker ) ,
370
+ } as const ;
404
371
}
405
372
}
406
373
else {
374
+ Debug . assert ( context . kind === TransformationContextKind . FullContext ) ;
407
375
const host = context . getEmitHost ( ) ;
408
376
const resolver = context . getEmitResolver ( ) ;
409
377
const symbolTracker : SymbolTracker = createSymbolTracker ( resolver , host ) ;
410
378
return {
411
- isolatedDeclarations,
412
- useTscEmit : false ,
413
- localInferenceResolver,
379
+ isolatedDeclarations : false ,
380
+ useLocalInferenceTypePrint : false ,
381
+ localInferenceResolver : undefined ,
414
382
resolver,
415
383
symbolTracker,
416
384
host,
417
- ensureNoInitializer : ( node : CanHaveLiteralInitializer ) => {
418
- if ( shouldPrintWithInitializer ( node ) ) {
419
- return resolver . createLiteralConstValue ( getParseTreeNode ( node ) as CanHaveLiteralInitializer , symbolTracker ) ; // TODO: Make safe
420
- }
421
- return undefined ;
422
- } ,
385
+ ensureNoInitializer : createEnsureNoInitializer ( symbolTracker ) ,
386
+ } as const ;
387
+ }
388
+
389
+ function createEnsureNoInitializer ( symbolTracker : SymbolTracker ) {
390
+ return function ensureNoInitializer ( node : CanHaveLiteralInitializer ) {
391
+ if ( shouldPrintWithInitializer ( node ) ) {
392
+ return resolver . createLiteralConstValue ( getParseTreeNode ( node ) as CanHaveLiteralInitializer , symbolTracker ) ; // TODO: Make safe
393
+ }
394
+ return undefined ;
423
395
} ;
424
396
}
425
397
}
@@ -659,6 +631,7 @@ export function transformDeclarations(context: TransformationContext, _useTscEmi
659
631
libs = new Map ( ) ;
660
632
existingTypeReferencesSources = node . sourceFiles ;
661
633
let hasNoDefaultLib = false ;
634
+ Debug . assert ( ! isolatedDeclarations , "Bundles are not supported in isolated declarations" ) ;
662
635
const bundle = factory . createBundle (
663
636
map ( node . sourceFiles , sourceFile => {
664
637
if ( sourceFile . isDeclarationFile ) return undefined ! ; // Omit declaration files from bundle results, too // TODO: GH#18217
@@ -681,7 +654,7 @@ export function transformDeclarations(context: TransformationContext, _useTscEmi
681
654
sourceFile ,
682
655
[ factory . createModuleDeclaration (
683
656
[ factory . createModifier ( SyntaxKind . DeclareKeyword ) ] ,
684
- factory . createStringLiteral ( getResolvedExternalModuleName ( context . getEmitHost ( ) , sourceFile ) ) ,
657
+ factory . createStringLiteral ( getResolvedExternalModuleName ( host , sourceFile ) ) ,
685
658
factory . createModuleBlock ( setTextRange ( factory . createNodeArray ( transformAndReplaceLatePaintedStatements ( statements ) ) , sourceFile . statements ) ) ,
686
659
) ] ,
687
660
/*isDeclarationFile*/ true ,
@@ -952,7 +925,7 @@ export function transformDeclarations(context: TransformationContext, _useTscEmi
952
925
}
953
926
if ( isolatedDeclarations ) {
954
927
const { typeNode, isInvalid } = localInferenceResolver . fromInitializer ( node , type , currentSourceFile ) ;
955
- if ( ! useTscEmit || isInvalid ) {
928
+ if ( useLocalInferenceTypePrint || isInvalid ) {
956
929
return typeNode ;
957
930
}
958
931
}
@@ -1121,7 +1094,7 @@ export function transformDeclarations(context: TransformationContext, _useTscEmi
1121
1094
if ( isBundledEmit ) {
1122
1095
// Bundle emit not supported for isolatedDeclarations
1123
1096
if ( ! isolatedDeclarations ) {
1124
- const newName = getExternalModuleNameFromDeclaration ( context . getEmitHost ( ) , resolver , parent ) ;
1097
+ const newName = getExternalModuleNameFromDeclaration ( host , resolver , parent ) ;
1125
1098
if ( newName ) {
1126
1099
return factory . createStringLiteral ( newName ) ;
1127
1100
}
0 commit comments