@@ -7,13 +7,27 @@ export class VitePluginSvelteCache {
7
7
private _dependencies = new Map < string , string [ ] > ( ) ;
8
8
private _dependants = new Map < string , Set < string > > ( ) ;
9
9
private _resolvedSvelteFields = new Map < string , string > ( ) ;
10
+ private _errors = new Map < string , any > ( ) ;
10
11
11
12
public update ( compileData : CompileData ) {
13
+ this . _errors . delete ( compileData . normalizedFilename ) ;
12
14
this . updateCSS ( compileData ) ;
13
15
this . updateJS ( compileData ) ;
14
16
this . updateDependencies ( compileData ) ;
15
17
}
16
18
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
+
17
31
private updateCSS ( compileData : CompileData ) {
18
32
this . _css . set ( compileData . normalizedFilename , compileData . compiled . css ) ;
19
33
}
@@ -43,26 +57,32 @@ export class VitePluginSvelteCache {
43
57
} ) ;
44
58
}
45
59
46
- public remove ( svelteRequest : SvelteRequest ) : boolean {
60
+ public remove ( svelteRequest : SvelteRequest , keepDependencies : boolean = false ) : boolean {
47
61
const id = svelteRequest . normalizedFilename ;
48
62
let removed = false ;
63
+ if ( this . _errors . delete ( id ) ) {
64
+ removed = true ;
65
+ }
49
66
if ( this . _js . delete ( id ) ) {
50
67
removed = true ;
51
68
}
52
69
if ( this . _css . delete ( id ) ) {
53
70
removed = true ;
54
71
}
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
+ }
65
84
}
85
+
66
86
return removed ;
67
87
}
68
88
@@ -77,6 +97,10 @@ export class VitePluginSvelteCache {
77
97
}
78
98
}
79
99
100
+ public getError ( svelteRequest : SvelteRequest ) {
101
+ return this . _errors . get ( svelteRequest . normalizedFilename ) ;
102
+ }
103
+
80
104
public getDependants ( path : string ) : string [ ] {
81
105
const dependants = this . _dependants . get ( path ) ;
82
106
return dependants ? [ ...dependants ] : [ ] ;
0 commit comments