import type { ComponentType } from 'react' type PageModule = { default: ComponentType<{ sourceMode?: 'text' | 'html' | 'youtube' }> } export const pageLoaders = { home: () => import('../pages/Home') as Promise, workspace: () => import('../pages/Workspace') as Promise, text: () => import('../pages/TextToVideo') as Promise, html: () => import('../pages/HtmlToVideo') as Promise, image: () => import('../pages/ImageToVideo') as Promise, screenshots: () => import('../pages/ScreenshotsToVideo') as Promise, youtubeScreenshots: () => import('../pages/YouTubeScreenshots') as Promise, library: () => import('../pages/Library') as Promise, publish: () => import('../pages/YouTubePublish') as Promise, processes: () => import('../pages/Processes') as Promise, settings: () => import('../pages/Settings') as Promise, } const pathToLoader: Array<[RegExp, () => Promise]> = [ [/^\/$/, pageLoaders.home], [/^\/workspace$/, pageLoaders.workspace], [/^\/workspace\/text$/, pageLoaders.text], [/^\/workspace\/html$/, pageLoaders.html], [/^\/workspace\/image$/, pageLoaders.image], [/^\/workspace\/screenshots$/, pageLoaders.screenshots], [/^\/workspace\/youtube$/, pageLoaders.text], [/^\/workspace\/youtube-screenshots$/, pageLoaders.youtubeScreenshots], [/^\/library$/, pageLoaders.library], [/^\/publish(?:\/.*)?$/, pageLoaders.publish], [/^\/processes$/, pageLoaders.processes], [/^\/settings$/, pageLoaders.settings], ] const warmed = new Set() export function preloadRoute(path: string): void { const clean = path.replace(/[?#].*$/, '').replace(/\/+$/, '') || '/' if (warmed.has(clean)) return const match = pathToLoader.find(([pattern]) => pattern.test(clean)) if (!match) return warmed.add(clean) void match[1]().catch(() => warmed.delete(clean)) }