@@ -248,6 +248,8 @@ async function createLanguageService(
248
248
? svelteHtmlDeclaration
249
249
: './svelte-jsx-v4.d.ts' ;
250
250
251
+ const changedFilesForExportCache = new Set < string > ( ) ;
252
+
251
253
const svelteTsxFiles = (
252
254
isSvelte3
253
255
? [ './svelte-shims.d.ts' , './svelte-jsx.d.ts' , './svelte-native-jsx.d.ts' ]
@@ -341,7 +343,7 @@ async function createLanguageService(
341
343
svelteModuleLoader . deleteFromModuleCache ( filePath ) ;
342
344
svelteModuleLoader . deleteUnresolvedResolutionsFromCache ( filePath ) ;
343
345
344
- scheduleUpdate ( ) ;
346
+ scheduleUpdate ( filePath ) ;
345
347
}
346
348
347
349
function updateSnapshot ( documentOrFilePath : Document | string ) : DocumentSnapshot {
@@ -359,7 +361,6 @@ async function createLanguageService(
359
361
360
362
if ( ! prevSnapshot ) {
361
363
svelteModuleLoader . deleteUnresolvedResolutionsFromCache ( filePath ) ;
362
- host . getCachedExportInfoMap ?.( ) ?. clear ( ) ;
363
364
}
364
365
365
366
const newSnapshot = DocumentSnapshot . fromDocument ( document , transformationConfig ) ;
@@ -375,15 +376,7 @@ async function createLanguageService(
375
376
return prevSnapshot ;
376
377
}
377
378
378
- svelteModuleLoader . deleteUnresolvedResolutionsFromCache ( filePath ) ;
379
- const newSnapshot = DocumentSnapshot . fromFilePath (
380
- filePath ,
381
- docContext . createDocument ,
382
- transformationConfig ,
383
- tsSystem
384
- ) ;
385
- snapshotManager . set ( filePath , newSnapshot ) ;
386
- return newSnapshot ;
379
+ return createSnapshot ( filePath ) ;
387
380
}
388
381
389
382
/**
@@ -404,8 +397,7 @@ async function createLanguageService(
404
397
}
405
398
406
399
return createSnapshot (
407
- svelteModuleLoader . svelteFileExists ( fileName ) ? svelteFileName : fileName ,
408
- doc
400
+ svelteModuleLoader . svelteFileExists ( fileName ) ? svelteFileName : fileName
409
401
) ;
410
402
}
411
403
@@ -417,12 +409,12 @@ async function createLanguageService(
417
409
return doc ;
418
410
}
419
411
420
- return createSnapshot ( fileName , doc ) ;
412
+ return createSnapshot ( fileName ) ;
421
413
}
422
414
423
- function createSnapshot ( fileName : string , doc : DocumentSnapshot | undefined ) {
415
+ function createSnapshot ( fileName : string ) {
424
416
svelteModuleLoader . deleteUnresolvedResolutionsFromCache ( fileName ) ;
425
- doc = DocumentSnapshot . fromFilePath (
417
+ const doc = DocumentSnapshot . fromFilePath (
426
418
fileName ,
427
419
docContext . createDocument ,
428
420
transformationConfig ,
@@ -433,21 +425,10 @@ async function createLanguageService(
433
425
}
434
426
435
427
function updateProjectFiles ( ) : void {
436
- projectVersion ++ ;
437
- dirty = true ;
438
- const projectFileBefore = snapshotManager . getProjectFileNames ( ) ;
439
- const projectFileCountBefore = projectFileBefore . length ;
428
+ scheduleUpdate ( ) ;
429
+ const projectFileCountBefore = snapshotManager . getProjectFileNames ( ) . length ;
440
430
snapshotManager . updateProjectFiles ( ) ;
441
- const projectFileAfter = snapshotManager . getProjectFileNames ( ) ;
442
- const projectFileCountAfter = projectFileAfter . length ;
443
-
444
- const hasAddedOrRemoved =
445
- ( ! ! project && projectFileCountAfter !== projectFileCountBefore ) ||
446
- checkProjectFileUpdate ( projectFileBefore , projectFileAfter ) ;
447
-
448
- if ( hasAddedOrRemoved ) {
449
- host . getCachedExportInfoMap ?.( ) ?. clear ( ) ;
450
- }
431
+ const projectFileCountAfter = snapshotManager . getProjectFileNames ( ) . length ;
451
432
452
433
if ( projectFileCountAfter <= projectFileCountBefore ) {
453
434
return ;
@@ -456,25 +437,6 @@ async function createLanguageService(
456
437
reduceLanguageServiceCapabilityIfFileSizeTooBig ( ) ;
457
438
}
458
439
459
- function checkProjectFileUpdate ( oldFiles : string [ ] , newFiles : string [ ] ) {
460
- const oldSet = new Set ( oldFiles ) ;
461
- const newSet = new Set ( newFiles ) ;
462
-
463
- for ( const file of oldSet ) {
464
- if ( ! newSet . has ( file ) ) {
465
- return true ;
466
- }
467
- }
468
-
469
- for ( const file of newSet ) {
470
- if ( ! oldSet . has ( file ) ) {
471
- return true ;
472
- }
473
- }
474
-
475
- return false ;
476
- }
477
-
478
440
function getScriptFileNames ( ) {
479
441
const projectFiles = languageServiceReducedMode
480
442
? [ ]
@@ -747,6 +709,7 @@ async function createLanguageService(
747
709
return ;
748
710
}
749
711
712
+ const oldProgram = project ?. program ;
750
713
const program = languageService . getProgram ( ) ;
751
714
svelteModuleLoader . clearPendingInvalidations ( ) ;
752
715
@@ -755,9 +718,30 @@ async function createLanguageService(
755
718
}
756
719
757
720
dirty = false ;
721
+
722
+ for ( const fileName of changedFilesForExportCache ) {
723
+ const oldFile = oldProgram ?. getSourceFile ( fileName ) ;
724
+ const newFile = program ?. getSourceFile ( fileName ) ;
725
+
726
+ // file for another tsconfig
727
+ if ( ! oldFile && ! newFile ) {
728
+ continue ;
729
+ }
730
+
731
+ if ( oldFile && newFile ) {
732
+ host . getCachedExportInfoMap ?.( ) . onFileChanged ?.( oldFile , newFile , false ) ;
733
+ } else {
734
+ // new file or deleted file
735
+ host . getCachedExportInfoMap ?.( ) . clear ( ) ;
736
+ }
737
+ }
738
+ changedFilesForExportCache . clear ( ) ;
758
739
}
759
740
760
- function scheduleUpdate ( ) {
741
+ function scheduleUpdate ( triggeredFile ?: string ) {
742
+ if ( triggeredFile ) {
743
+ changedFilesForExportCache . add ( triggeredFile ) ;
744
+ }
761
745
if ( dirty ) {
762
746
return ;
763
747
}
0 commit comments