@@ -7,13 +7,27 @@ export class VitePluginSvelteCache {
77 private _dependencies = new Map < string , string [ ] > ( ) ;
88 private _dependants = new Map < string , Set < string > > ( ) ;
99 private _resolvedSvelteFields = new Map < string , string > ( ) ;
10+ private _errors = new Map < string , any > ( ) ;
1011
1112 public update ( compileData : CompileData ) {
13+ this . _errors . delete ( compileData . normalizedFilename ) ;
1214 this . updateCSS ( compileData ) ;
1315 this . updateJS ( compileData ) ;
1416 this . updateDependencies ( compileData ) ;
1517 }
1618
19+ public has ( svelteRequest : SvelteRequest ) {
20+ const id = svelteRequest . normalizedFilename ;
21+ return this . _errors . has ( id ) || this . _js . has ( id ) || this . _css . has ( id ) ;
22+ }
23+
24+ public setError ( svelteRequest : SvelteRequest , error : any ) {
25+ // keep dependency info, otherwise errors in dependants would not trigger an update after fixing
26+ // because they are no longer watched
27+ this . remove ( svelteRequest , true ) ;
28+ this . _errors . set ( svelteRequest . normalizedFilename , error ) ;
29+ }
30+
1731 private updateCSS ( compileData : CompileData ) {
1832 this . _css . set ( compileData . normalizedFilename , compileData . compiled . css ) ;
1933 }
@@ -43,26 +57,32 @@ export class VitePluginSvelteCache {
4357 } ) ;
4458 }
4559
46- public remove ( svelteRequest : SvelteRequest ) : boolean {
60+ public remove ( svelteRequest : SvelteRequest , keepDependencies : boolean = false ) : boolean {
4761 const id = svelteRequest . normalizedFilename ;
4862 let removed = false ;
63+ if ( this . _errors . delete ( id ) ) {
64+ removed = true ;
65+ }
4966 if ( this . _js . delete ( id ) ) {
5067 removed = true ;
5168 }
5269 if ( this . _css . delete ( id ) ) {
5370 removed = true ;
5471 }
55- const dependencies = this . _dependencies . get ( id ) ;
56- if ( dependencies ) {
57- removed = true ;
58- dependencies . forEach ( ( d ) => {
59- const dependants = this . _dependants . get ( d ) ;
60- if ( dependants && dependants . has ( svelteRequest . filename ) ) {
61- dependants . delete ( svelteRequest . filename ) ;
62- }
63- } ) ;
64- this . _dependencies . delete ( id ) ;
72+ if ( ! keepDependencies ) {
73+ const dependencies = this . _dependencies . get ( id ) ;
74+ if ( dependencies ) {
75+ removed = true ;
76+ dependencies . forEach ( ( d ) => {
77+ const dependants = this . _dependants . get ( d ) ;
78+ if ( dependants && dependants . has ( svelteRequest . filename ) ) {
79+ dependants . delete ( svelteRequest . filename ) ;
80+ }
81+ } ) ;
82+ this . _dependencies . delete ( id ) ;
83+ }
6584 }
85+
6686 return removed ;
6787 }
6888
@@ -77,6 +97,10 @@ export class VitePluginSvelteCache {
7797 }
7898 }
7999
100+ public getError ( svelteRequest : SvelteRequest ) {
101+ return this . _errors . get ( svelteRequest . normalizedFilename ) ;
102+ }
103+
80104 public getDependants ( path : string ) : string [ ] {
81105 const dependants = this . _dependants . get ( path ) ;
82106 return dependants ? [ ...dependants ] : [ ] ;
0 commit comments