@@ -5,6 +5,7 @@ import { IdParser } from './id';
55import { ResolvedOptions } from './options' ;
66import { knownSvelteConfigNames } from './load-svelte-config' ;
77import path from 'path' ;
8+ import { FSWatcher } from 'vite' ;
89
910export function setupWatchers (
1011 options : ResolvedOptions ,
@@ -71,22 +72,35 @@ export function setupWatchers(
7172 } ;
7273
7374 // collection of watcher listeners by event
74- const listeners = {
75- add : [ ] ,
75+ const listenerCollection = {
76+ add : [ ] as Array < Function > ,
7677 change : [ emitChangeEventOnDependants ] ,
7778 unlink : [ removeUnlinkedFromCache , emitChangeEventOnDependants ]
7879 } ;
7980 if ( svelteConfigFile ) {
80- listeners . change . push ( restartOnConfigChange ) ;
81- listeners . unlink . push ( restartOnConfigChange ) ;
81+ listenerCollection . change . push ( restartOnConfigChange ) ;
82+ listenerCollection . unlink . push ( restartOnConfigChange ) ;
8283 } else {
83- // @ts -ignore
84- listeners . add . push ( restartOnConfigAdd ) ;
84+ listenerCollection . add . push ( restartOnConfigAdd ) ;
8585 }
8686
87- Object . entries ( listeners ) . forEach ( ( [ evt , listeners ] ) => {
87+ Object . entries ( listenerCollection ) . forEach ( ( [ evt , listeners ] ) => {
8888 if ( listeners . length > 0 ) {
8989 watcher . on ( evt , ( filename ) => listeners . forEach ( ( listener ) => listener ( filename ) ) ) ;
9090 }
9191 } ) ;
9292}
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