@@ -5,6 +5,7 @@ import { IdParser } from './id';
5
5
import { ResolvedOptions } from './options' ;
6
6
import { knownSvelteConfigNames } from './load-svelte-config' ;
7
7
import path from 'path' ;
8
+ import { FSWatcher } from 'vite' ;
8
9
9
10
export function setupWatchers (
10
11
options : ResolvedOptions ,
@@ -71,22 +72,35 @@ export function setupWatchers(
71
72
} ;
72
73
73
74
// collection of watcher listeners by event
74
- const listeners = {
75
- add : [ ] ,
75
+ const listenerCollection = {
76
+ add : [ ] as Array < Function > ,
76
77
change : [ emitChangeEventOnDependants ] ,
77
78
unlink : [ removeUnlinkedFromCache , emitChangeEventOnDependants ]
78
79
} ;
79
80
if ( svelteConfigFile ) {
80
- listeners . change . push ( restartOnConfigChange ) ;
81
- listeners . unlink . push ( restartOnConfigChange ) ;
81
+ listenerCollection . change . push ( restartOnConfigChange ) ;
82
+ listenerCollection . unlink . push ( restartOnConfigChange ) ;
82
83
} else {
83
- // @ts -ignore
84
- listeners . add . push ( restartOnConfigAdd ) ;
84
+ listenerCollection . add . push ( restartOnConfigAdd ) ;
85
85
}
86
86
87
- Object . entries ( listeners ) . forEach ( ( [ evt , listeners ] ) => {
87
+ Object . entries ( listenerCollection ) . forEach ( ( [ evt , listeners ] ) => {
88
88
if ( listeners . length > 0 ) {
89
89
watcher . on ( evt , ( filename ) => listeners . forEach ( ( listener ) => listener ( filename ) ) ) ;
90
90
}
91
91
} ) ;
92
92
}
93
+ // taken from vite utils
94
+ export function ensureWatchedFile ( watcher : FSWatcher , file : string | null , root : string ) : void {
95
+ if (
96
+ file &&
97
+ // only need to watch if out of root
98
+ ! file . startsWith ( root + '/' ) &&
99
+ // some rollup plugins use null bytes for private resolved Ids
100
+ ! file . includes ( '\0' ) &&
101
+ fs . existsSync ( file )
102
+ ) {
103
+ // resolve file to normalized system path
104
+ watcher . add ( path . resolve ( file ) ) ;
105
+ }
106
+ }
0 commit comments