Skip to content

Commit

Permalink
fix: invalidate data store module when dev server starts
Browse files Browse the repository at this point in the history
  • Loading branch information
ascorbic committed Jan 8, 2025
1 parent d486836 commit 6be0664
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 15 deletions.
5 changes: 5 additions & 0 deletions .changeset/strong-scissors-sip.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'astro': patch
---

Fixes a bug where content collections would sometimes appear empty when first running astro dev
31 changes: 16 additions & 15 deletions packages/astro/src/content/vite-plugin-content-virtual-mod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,17 @@ interface AstroContentVirtualModPluginParams {
fs: typeof nodeFs;
}

function invalidateDataStore(server: ViteDevServer) {
const module = server.moduleGraph.getModuleById(RESOLVED_DATA_STORE_VIRTUAL_ID);
if (module) {
server.moduleGraph.invalidateModule(module);
}
server.ws.send({
type: 'full-reload',
path: '*',
});
}

export function astroContentVirtualModPlugin({
settings,
fs,
Expand All @@ -60,7 +71,9 @@ export function astroContentVirtualModPlugin({
},
buildStart() {
// We defer adding the data store file to the watcher until the server is ready
devServer?.watcher.add(fileURLToPath(dataStoreFile));
devServer.watcher.add(fileURLToPath(dataStoreFile));
// Manually invalidate the data store to avoid a race condition in file watching
invalidateDataStore(devServer);
},
async resolveId(id) {
if (id === VIRTUAL_MODULE_ID) {
Expand Down Expand Up @@ -164,29 +177,17 @@ export function astroContentVirtualModPlugin({
configureServer(server) {
devServer = server;
const dataStorePath = fileURLToPath(dataStoreFile);

function invalidateDataStore() {
const module = server.moduleGraph.getModuleById(RESOLVED_DATA_STORE_VIRTUAL_ID);
if (module) {
server.moduleGraph.invalidateModule(module);
}
server.ws.send({
type: 'full-reload',
path: '*',
});
}

// If the datastore file changes, invalidate the virtual module

server.watcher.on('add', (addedPath) => {
if (addedPath === dataStorePath) {
invalidateDataStore();
invalidateDataStore(server);
}
});

server.watcher.on('change', (changedPath) => {
if (changedPath === dataStorePath) {
invalidateDataStore();
invalidateDataStore(server);
}
});
},
Expand Down

0 comments on commit 6be0664

Please sign in to comment.