@@ -824,9 +824,9 @@ namespace ts {
824
824
const shouldCreateNewSourceFile = shouldProgramCreateNewSourceFiles ( oldProgram , options ) ;
825
825
// We set `structuralIsReused` to `undefined` because `tryReuseStructureFromOldProgram` calls `tryReuseStructureFromOldProgram` which checks
826
826
// `structuralIsReused`, which would be a TDZ violation if it was not set in advance to `undefined`.
827
- let structuralIsReused : StructureIsReused | undefined ;
828
- structuralIsReused = tryReuseStructureFromOldProgram ( ) ; // eslint-disable-line prefer-const
829
- if ( structuralIsReused !== StructureIsReused . Completely ) {
827
+ let structureIsReused : StructureIsReused ;
828
+ structureIsReused = tryReuseStructureFromOldProgram ( ) ; // eslint-disable-line prefer-const
829
+ if ( structureIsReused !== StructureIsReused . Completely ) {
830
830
processingDefaultLibFiles = [ ] ;
831
831
processingOtherFiles = [ ] ;
832
832
@@ -979,6 +979,7 @@ namespace ts {
979
979
getSymlinkCache,
980
980
realpath : host . realpath ?. bind ( host ) ,
981
981
useCaseSensitiveFileNames : ( ) => host . useCaseSensitiveFileNames ( ) ,
982
+ structureIsReused,
982
983
} ;
983
984
984
985
onProgramCreateComplete ( ) ;
@@ -1107,7 +1108,7 @@ namespace ts {
1107
1108
}
1108
1109
1109
1110
function resolveModuleNamesReusingOldState ( moduleNames : string [ ] , file : SourceFile ) : readonly ResolvedModuleFull [ ] {
1110
- if ( structuralIsReused === StructureIsReused . Not && ! file . ambientModuleNames . length ) {
1111
+ if ( structureIsReused === StructureIsReused . Not && ! file . ambientModuleNames . length ) {
1111
1112
// If the old program state does not permit reusing resolutions and `file` does not contain locally defined ambient modules,
1112
1113
// the best we can do is fallback to the default logic.
1113
1114
return resolveModuleNamesWorker ( moduleNames , file , /*reusedNames*/ undefined ) ;
@@ -1278,22 +1279,22 @@ namespace ts {
1278
1279
// if any of these properties has changed - structure cannot be reused
1279
1280
const oldOptions = oldProgram . getCompilerOptions ( ) ;
1280
1281
if ( changesAffectModuleResolution ( oldOptions , options ) ) {
1281
- return oldProgram . structureIsReused = StructureIsReused . Not ;
1282
+ return StructureIsReused . Not ;
1282
1283
}
1283
1284
1284
1285
// there is an old program, check if we can reuse its structure
1285
1286
const oldRootNames = oldProgram . getRootFileNames ( ) ;
1286
1287
if ( ! arrayIsEqualTo ( oldRootNames , rootNames ) ) {
1287
- return oldProgram . structureIsReused = StructureIsReused . Not ;
1288
+ return StructureIsReused . Not ;
1288
1289
}
1289
1290
1290
1291
if ( ! arrayIsEqualTo ( options . types , oldOptions . types ) ) {
1291
- return oldProgram . structureIsReused = StructureIsReused . Not ;
1292
+ return StructureIsReused . Not ;
1292
1293
}
1293
1294
1294
1295
// Check if any referenced project tsconfig files are different
1295
1296
if ( ! canReuseProjectReferences ( ) ) {
1296
- return oldProgram . structureIsReused = StructureIsReused . Not ;
1297
+ return StructureIsReused . Not ;
1297
1298
}
1298
1299
if ( projectReferences ) {
1299
1300
resolvedProjectReferences = projectReferences . map ( parseProjectReferenceConfigFile ) ;
@@ -1302,13 +1303,13 @@ namespace ts {
1302
1303
// check if program source files has changed in the way that can affect structure of the program
1303
1304
const newSourceFiles : SourceFile [ ] = [ ] ;
1304
1305
const modifiedSourceFiles : { oldFile : SourceFile , newFile : SourceFile } [ ] = [ ] ;
1305
- oldProgram . structureIsReused = StructureIsReused . Completely ;
1306
+ structureIsReused = StructureIsReused . Completely ;
1306
1307
1307
1308
// If the missing file paths are now present, it can change the progam structure,
1308
1309
// and hence cant reuse the structure.
1309
1310
// This is same as how we dont reuse the structure if one of the file from old program is now missing
1310
1311
if ( oldProgram . getMissingFilePaths ( ) . some ( missingFilePath => host . fileExists ( missingFilePath ) ) ) {
1311
- return oldProgram . structureIsReused = StructureIsReused . Not ;
1312
+ return StructureIsReused . Not ;
1312
1313
}
1313
1314
1314
1315
const oldSourceFiles = oldProgram . getSourceFiles ( ) ;
@@ -1321,7 +1322,7 @@ namespace ts {
1321
1322
: host . getSourceFile ( oldSourceFile . fileName , options . target ! , /*onError*/ undefined , shouldCreateNewSourceFile ) ; // TODO: GH#18217
1322
1323
1323
1324
if ( ! newSourceFile ) {
1324
- return oldProgram . structureIsReused = StructureIsReused . Not ;
1325
+ return StructureIsReused . Not ;
1325
1326
}
1326
1327
1327
1328
Debug . assert ( ! newSourceFile . redirectInfo , "Host should not return a redirect source file from `getSourceFile`" ) ;
@@ -1332,15 +1333,15 @@ namespace ts {
1332
1333
// This lets us know if the unredirected file has changed. If it has we should break the redirect.
1333
1334
if ( newSourceFile !== oldSourceFile . redirectInfo . unredirected ) {
1334
1335
// Underlying file has changed. Might not redirect anymore. Must rebuild program.
1335
- return oldProgram . structureIsReused = StructureIsReused . Not ;
1336
+ return StructureIsReused . Not ;
1336
1337
}
1337
1338
fileChanged = false ;
1338
1339
newSourceFile = oldSourceFile ; // Use the redirect.
1339
1340
}
1340
1341
else if ( oldProgram . redirectTargetsMap . has ( oldSourceFile . path ) ) {
1341
1342
// If a redirected-to source file changes, the redirect may be broken.
1342
1343
if ( newSourceFile !== oldSourceFile ) {
1343
- return oldProgram . structureIsReused = StructureIsReused . Not ;
1344
+ return StructureIsReused . Not ;
1344
1345
}
1345
1346
fileChanged = false ;
1346
1347
}
@@ -1361,7 +1362,7 @@ namespace ts {
1361
1362
const prevKind = seenPackageNames . get ( packageName ) ;
1362
1363
const newKind = fileChanged ? SeenPackageName . Modified : SeenPackageName . Exists ;
1363
1364
if ( ( prevKind !== undefined && newKind === SeenPackageName . Modified ) || prevKind === SeenPackageName . Modified ) {
1364
- return oldProgram . structureIsReused = StructureIsReused . Not ;
1365
+ return StructureIsReused . Not ;
1365
1366
}
1366
1367
seenPackageNames . set ( packageName , newKind ) ;
1367
1368
}
@@ -1371,47 +1372,47 @@ namespace ts {
1371
1372
1372
1373
if ( ! arrayIsEqualTo ( oldSourceFile . libReferenceDirectives , newSourceFile . libReferenceDirectives , fileReferenceIsEqualTo ) ) {
1373
1374
// 'lib' references has changed. Matches behavior in changesAffectModuleResolution
1374
- return oldProgram . structureIsReused = StructureIsReused . Not ;
1375
+ return StructureIsReused . Not ;
1375
1376
}
1376
1377
1377
1378
if ( oldSourceFile . hasNoDefaultLib !== newSourceFile . hasNoDefaultLib ) {
1378
1379
// value of no-default-lib has changed
1379
1380
// this will affect if default library is injected into the list of files
1380
- oldProgram . structureIsReused = StructureIsReused . SafeModules ;
1381
+ structureIsReused = StructureIsReused . SafeModules ;
1381
1382
}
1382
1383
1383
1384
// check tripleslash references
1384
1385
if ( ! arrayIsEqualTo ( oldSourceFile . referencedFiles , newSourceFile . referencedFiles , fileReferenceIsEqualTo ) ) {
1385
1386
// tripleslash references has changed
1386
- oldProgram . structureIsReused = StructureIsReused . SafeModules ;
1387
+ structureIsReused = StructureIsReused . SafeModules ;
1387
1388
}
1388
1389
1389
1390
// check imports and module augmentations
1390
1391
collectExternalModuleReferences ( newSourceFile ) ;
1391
1392
if ( ! arrayIsEqualTo ( oldSourceFile . imports , newSourceFile . imports , moduleNameIsEqualTo ) ) {
1392
1393
// imports has changed
1393
- oldProgram . structureIsReused = StructureIsReused . SafeModules ;
1394
+ structureIsReused = StructureIsReused . SafeModules ;
1394
1395
}
1395
1396
if ( ! arrayIsEqualTo ( oldSourceFile . moduleAugmentations , newSourceFile . moduleAugmentations , moduleNameIsEqualTo ) ) {
1396
1397
// moduleAugmentations has changed
1397
- oldProgram . structureIsReused = StructureIsReused . SafeModules ;
1398
+ structureIsReused = StructureIsReused . SafeModules ;
1398
1399
}
1399
1400
if ( ( oldSourceFile . flags & NodeFlags . PermanentlySetIncrementalFlags ) !== ( newSourceFile . flags & NodeFlags . PermanentlySetIncrementalFlags ) ) {
1400
1401
// dynamicImport has changed
1401
- oldProgram . structureIsReused = StructureIsReused . SafeModules ;
1402
+ structureIsReused = StructureIsReused . SafeModules ;
1402
1403
}
1403
1404
1404
1405
if ( ! arrayIsEqualTo ( oldSourceFile . typeReferenceDirectives , newSourceFile . typeReferenceDirectives , fileReferenceIsEqualTo ) ) {
1405
1406
// 'types' references has changed
1406
- oldProgram . structureIsReused = StructureIsReused . SafeModules ;
1407
+ structureIsReused = StructureIsReused . SafeModules ;
1407
1408
}
1408
1409
1409
1410
// tentatively approve the file
1410
1411
modifiedSourceFiles . push ( { oldFile : oldSourceFile , newFile : newSourceFile } ) ;
1411
1412
}
1412
1413
else if ( hasInvalidatedResolution ( oldSourceFile . path ) ) {
1413
1414
// 'module/types' references could have changed
1414
- oldProgram . structureIsReused = StructureIsReused . SafeModules ;
1415
+ structureIsReused = StructureIsReused . SafeModules ;
1415
1416
1416
1417
// add file to the modified list so that we will resolve it later
1417
1418
modifiedSourceFiles . push ( { oldFile : oldSourceFile , newFile : newSourceFile } ) ;
@@ -1421,8 +1422,8 @@ namespace ts {
1421
1422
newSourceFiles . push ( newSourceFile ) ;
1422
1423
}
1423
1424
1424
- if ( oldProgram . structureIsReused !== StructureIsReused . Completely ) {
1425
- return oldProgram . structureIsReused ;
1425
+ if ( structureIsReused !== StructureIsReused . Completely ) {
1426
+ return structureIsReused ;
1426
1427
}
1427
1428
1428
1429
const modifiedFiles = modifiedSourceFiles . map ( f => f . oldFile ) ;
@@ -1440,7 +1441,7 @@ namespace ts {
1440
1441
// ensure that module resolution results are still correct
1441
1442
const resolutionsChanged = hasChangesInResolutions ( moduleNames , resolutions , oldSourceFile . resolvedModules , moduleResolutionIsEqualTo ) ;
1442
1443
if ( resolutionsChanged ) {
1443
- oldProgram . structureIsReused = StructureIsReused . SafeModules ;
1444
+ structureIsReused = StructureIsReused . SafeModules ;
1444
1445
newSourceFile . resolvedModules = zipToMap ( moduleNames , resolutions ) ;
1445
1446
}
1446
1447
else {
@@ -1452,20 +1453,20 @@ namespace ts {
1452
1453
// ensure that types resolutions are still correct
1453
1454
const typeReferenceEesolutionsChanged = hasChangesInResolutions ( typesReferenceDirectives , typeReferenceResolutions , oldSourceFile . resolvedTypeReferenceDirectiveNames , typeDirectiveIsEqualTo ) ;
1454
1455
if ( typeReferenceEesolutionsChanged ) {
1455
- oldProgram . structureIsReused = StructureIsReused . SafeModules ;
1456
+ structureIsReused = StructureIsReused . SafeModules ;
1456
1457
newSourceFile . resolvedTypeReferenceDirectiveNames = zipToMap ( typesReferenceDirectives , typeReferenceResolutions ) ;
1457
1458
}
1458
1459
else {
1459
1460
newSourceFile . resolvedTypeReferenceDirectiveNames = oldSourceFile . resolvedTypeReferenceDirectiveNames ;
1460
1461
}
1461
1462
}
1462
1463
1463
- if ( oldProgram . structureIsReused !== StructureIsReused . Completely ) {
1464
- return oldProgram . structureIsReused ;
1464
+ if ( structureIsReused !== StructureIsReused . Completely ) {
1465
+ return structureIsReused ;
1465
1466
}
1466
1467
1467
1468
if ( host . hasChangedAutomaticTypeDirectiveNames ?.( ) ) {
1468
- return oldProgram . structureIsReused = StructureIsReused . SafeModules ;
1469
+ return StructureIsReused . SafeModules ;
1469
1470
}
1470
1471
1471
1472
missingFilePaths = oldProgram . getMissingFilePaths ( ) ;
@@ -1503,7 +1504,7 @@ namespace ts {
1503
1504
sourceFileToPackageName = oldProgram . sourceFileToPackageName ;
1504
1505
redirectTargetsMap = oldProgram . redirectTargetsMap ;
1505
1506
1506
- return oldProgram . structureIsReused = StructureIsReused . Completely ;
1507
+ return StructureIsReused . Completely ;
1507
1508
}
1508
1509
1509
1510
function getEmitHost ( writeFileCallback ?: WriteFileCallback ) : EmitHost {
0 commit comments