refactor(bgm): use virtual: module specifiers

Rename the plugin's virtual modules to virtual:bgm/packages and
virtual:bgm/package/<id> so they read as plugin-provided modules rather
than real packages. Update the unit and build integration tests.
This commit is contained in:
2026-08-09 19:16:17 +08:00
parent ba16f17d8a
commit 845d510948
4 changed files with 52 additions and 13 deletions
+17 -5
View File
@@ -24,16 +24,28 @@ function load(plugin: ReturnType<typeof bgm>, id: string): unknown {
}
describe('bgm vite plugin', () => {
it('resolves bgm/ imports to the virtual module', () => {
it('resolves bgm imports to the virtual module', () => {
const plugin = bgm({ root: gamesRoot });
expect(resolveId(plugin, 'bgm/harbor')).toBe('\0bgm:bgm/harbor');
expect(resolveId(plugin, 'bgm/nope')).toBe('\0bgm:bgm/nope');
expect(resolveId(plugin, 'virtual:bgm/packages')).toBe('\0bgm:virtual:bgm/packages');
expect(resolveId(plugin, 'virtual:bgm/package/harbor')).toBe('\0bgm:virtual:bgm/package/harbor');
expect(resolveId(plugin, 'virtual:bgm/package/nope')).toBe('\0bgm:virtual:bgm/package/nope');
expect(resolveId(plugin, 'other')).toBeUndefined();
});
it('loads every package as a JSON module', () => {
const plugin = bgm({ root: gamesRoot });
const code = load(plugin, '\0bgm:virtual:bgm/packages');
expect(code).toBeDefined();
expect(String(code).startsWith('export default ')).toBe(true);
const packages = JSON.parse(String(code).slice('export default '.length));
expect(packages).toHaveLength(1);
expect(packages[0].meta.id).toBe('harbor');
expect(packages[0].parts).toHaveProperty('token#wood');
});
it('loads a package as a JSON module', () => {
const plugin = bgm({ root: gamesRoot });
const code = load(plugin, '\0bgm:bgm/harbor');
const code = load(plugin, '\0bgm:virtual:bgm/package/harbor');
expect(code).toBeDefined();
expect(String(code).startsWith('export default ')).toBe(true);
const pkg = JSON.parse(String(code).slice('export default '.length));
@@ -44,6 +56,6 @@ describe('bgm vite plugin', () => {
it('errors on an unknown package', () => {
const plugin = bgm({ root: gamesRoot });
expect(() => load(plugin, '\0bgm:bgm/unknown')).toThrow(/not found/);
expect(() => load(plugin, '\0bgm:virtual:bgm/package/unknown')).toThrow(/not found/);
});
});