From a375ff54c2a30b25cbea12dc04e3cc6e79e4a5d1 Mon Sep 17 00:00:00 2001 From: James Prevett Date: Wed, 20 Nov 2024 10:33:12 -0600 Subject: [PATCH] Tweak loop in `emitChange` --- src/emulation/watchers.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/emulation/watchers.ts b/src/emulation/watchers.ts index d0152066..9577081a 100644 --- a/src/emulation/watchers.ts +++ b/src/emulation/watchers.ts @@ -171,24 +171,24 @@ export function removeWatcher(path: string, watcher: FSWatcher) { } export function emitChange(eventType: fs.WatchEventType, filename: string) { - let normalizedFilename: string = normalizePath(filename); + filename = normalizePath(filename); // Notify watchers on the specific file - if (watchers.has(normalizedFilename)) { - for (const watcher of watchers.get(normalizedFilename)!) { + if (watchers.has(filename)) { + for (const watcher of watchers.get(filename)!) { watcher.emit('change', eventType, basename(filename)); } } // Notify watchers on parent directories if they are watching recursively - let parent = dirname(normalizedFilename); - do { - const offset = parent == '/' ? 0 : 1; // used to remove the leading slash + let parent = filename, + normalizedFilename; + while (parent !== normalizedFilename) { + normalizedFilename = parent; + parent = dirname(parent); if (watchers.has(parent)) { for (const watcher of watchers.get(parent)!) { - watcher.emit('change', eventType, filename.substring(parent.length + offset)); + watcher.emit('change', eventType, filename.slice(parent.length + (parent == '/' ? 0 : 1))); } } - normalizedFilename = parent; - parent = dirname(parent); - } while (parent !== normalizedFilename); + } }