import { Plugin } from 'vite'; import { RouteService } from './RouteService'; import { PageModule } from '../../types'; export interface Route { path: string; element: React.ReactElement; filePath: string; preload: () => Promise; } interface PluginOptions { root: string; isSSR: boolean; } export const CONVENTIONAL_ROUTE_ID = 'beaver:routes'; export function pluginRoutes(options: PluginOptions): Plugin { const routeService = new RouteService(options.root); return { name: 'beaver:routes', async configResolved() { await routeService.init(); }, resolveId(id: string) { if (id === CONVENTIONAL_ROUTE_ID) { return '\0' + id; } }, load(id: string) { if (id === '\0' + CONVENTIONAL_ROUTE_ID) { return routeService.generateRoutesCode(options.isSSR || false); } } }; }