@@ -19,17 +19,18 @@ const { addAbortListener } = require('internal/events/abort_listener');
1919const { watch } = require ( 'fs' ) ;
2020const { fileURLToPath } = require ( 'internal/url' ) ;
2121const { resolve, dirname } = require ( 'path' ) ;
22- const { setTimeout } = require ( 'timers' ) ;
22+ const { setTimeout, clearTimeout } = require ( 'timers' ) ;
2323
2424const supportsRecursiveWatching = process . platform === 'win32' ||
2525 process . platform === 'darwin' ;
2626
2727class FilesWatcher extends EventEmitter {
2828 #watchers = new SafeMap ( ) ;
2929 #filteredFiles = new SafeSet ( ) ;
30- #debouncing = new SafeSet ( ) ;
3130 #depencencyOwners = new SafeMap ( ) ;
3231 #ownerDependencies = new SafeMap ( ) ;
32+ #debounceOwners = new SafeSet ( ) ;
33+ #debounceTimer;
3334 #debounce;
3435 #mode;
3536 #signal;
@@ -80,17 +81,20 @@ class FilesWatcher extends EventEmitter {
8081 }
8182
8283 #onChange( trigger ) {
83- if ( this . #debouncing. has ( trigger ) ) {
84- return ;
85- }
8684 if ( this . #mode === 'filter' && ! this . #filteredFiles. has ( trigger ) ) {
8785 return ;
8886 }
89- this . #debouncing. add ( trigger ) ;
9087 const owners = this . #depencencyOwners. get ( trigger ) ;
91- setTimeout ( ( ) => {
92- this . #debouncing. delete ( trigger ) ;
93- this . emit ( 'changed' , { owners } ) ;
88+ if ( owners ) {
89+ for ( const owner of owners ) {
90+ this . #debounceOwners. add ( owner ) ;
91+ }
92+ }
93+ clearTimeout ( this . #debounceTimer) ;
94+ this . #debounceTimer = setTimeout ( ( ) => {
95+ this . #debounceTimer = null ;
96+ this . emit ( 'changed' , { owners : this . #debounceOwners } ) ;
97+ this . #debounceOwners. clear ( ) ;
9498 } , this . #debounce) . unref ( ) ;
9599 }
96100
0 commit comments