fix(bgm): hot-reload game definition edits
Invalidate the virtual bgm module on changes under the games root so editing a definition reloads the page instead of requiring a manual refresh.
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
* hot-reloads the app via `addWatchFile`.
|
||||
*/
|
||||
import * as path from 'node:path';
|
||||
import type { Plugin } from 'vite';
|
||||
import type { ModuleNode, Plugin } from 'vite';
|
||||
import { collectPackages, loadDefs } from './collect.js';
|
||||
import type { Package, SerializedPackage } from './types.js';
|
||||
|
||||
@@ -52,6 +52,18 @@ export function bgm(options: BgmOptions): Plugin {
|
||||
if (id === PACKAGES) return VIRTUAL_PREFIX + PACKAGES;
|
||||
if (id.startsWith(PACKAGE)) return VIRTUAL_PREFIX + id;
|
||||
},
|
||||
handleHotUpdate(ctx) {
|
||||
// Re-collect and invalidate the virtual modules when a game definition
|
||||
// changes, so edits hot-reload instead of requiring a manual refresh.
|
||||
if (!ctx.file.startsWith(root)) return;
|
||||
const invalidated: ModuleNode[] = [];
|
||||
const mod = ctx.server.moduleGraph.getModuleById(VIRTUAL_PREFIX + PACKAGES);
|
||||
if (mod) {
|
||||
ctx.server.moduleGraph.invalidateModule(mod);
|
||||
invalidated.push(mod);
|
||||
}
|
||||
return invalidated;
|
||||
},
|
||||
load(id) {
|
||||
if (!id.startsWith(VIRTUAL_PREFIX)) return;
|
||||
const virtual = id.slice(VIRTUAL_PREFIX.length);
|
||||
|
||||
Reference in New Issue
Block a user