-
-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: better handling of resync and restarts in content layer (#12984)
* fix: better handling of resync and restarts * Always regenerate content layer on sync * Formatting
- Loading branch information
Showing
13 changed files
with
152 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
--- | ||
'astro': patch | ||
--- | ||
|
||
Fixes a bug in dev where files would stop being watched if the Astro config file was edited |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
--- | ||
'astro': patch | ||
--- | ||
|
||
Fixes a bug where the content layer would use an outdated version of the Astro config if it was edited in dev |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
import type { FSWatcher } from 'vite'; | ||
|
||
type WatchEventName = 'add' | 'addDir' | 'change' | 'unlink' | 'unlinkDir'; | ||
type WatchEventCallback = (path: string) => void; | ||
|
||
export type WrappedWatcher = FSWatcher & { | ||
removeAllTrackedListeners(): void; | ||
}; | ||
|
||
// This lets us use the standard Vite FSWatcher, but also track all listeners added by the content loaders | ||
// We do this so we can remove them all when we re-sync. | ||
export function createWatcherWrapper(watcher: FSWatcher): WrappedWatcher { | ||
const listeners = new Map<WatchEventName, Set<WatchEventCallback>>(); | ||
|
||
const handler: ProxyHandler<FSWatcher> = { | ||
get(target, prop, receiver) { | ||
// Intercept the 'on' method and track the listener | ||
if (prop === 'on') { | ||
return function (event: WatchEventName, callback: WatchEventCallback) { | ||
if (!listeners.has(event)) { | ||
listeners.set(event, new Set()); | ||
} | ||
|
||
// Track the listener | ||
listeners.get(event)!.add(callback); | ||
|
||
// Call the original method | ||
return Reflect.get(target, prop, receiver).call(target, event, callback); | ||
}; | ||
} | ||
|
||
// Intercept the 'off' method | ||
if (prop === 'off') { | ||
return function (event: WatchEventName, callback: WatchEventCallback) { | ||
// Remove from our tracking | ||
listeners.get(event)?.delete(callback); | ||
|
||
// Call the original method | ||
return Reflect.get(target, prop, receiver).call(target, event, callback); | ||
}; | ||
} | ||
|
||
// Adds a function to remove all listeners added by us | ||
if (prop === 'removeAllTrackedListeners') { | ||
return function () { | ||
for (const [event, callbacks] of listeners.entries()) { | ||
for (const callback of callbacks) { | ||
target.off(event, callback); | ||
} | ||
callbacks.clear(); | ||
} | ||
listeners.clear(); | ||
}; | ||
} | ||
|
||
// Return original method/property for everything else | ||
return Reflect.get(target, prop, receiver); | ||
}, | ||
}; | ||
|
||
return new Proxy(watcher, handler) as WrappedWatcher; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters