export type SpaRoute = { /** Full joined path within the SPA (no mount-path prefix). */ path: string; /** `true` when any segment is `:param`, `*`, or `**`. */ dynamic: boolean; /** `true` when this route is purely a `redirectTo` — sitemap skips. */ redirected: boolean; /** `true` when an explicit opt-out marker was found * (`Route.data.sitemap === 'exclude'` in Angular, etc.). */ sitemapExcluded: boolean; }; export type SpaHost = { /** Absolute path of the source file the routes were read from. */ sourceFile: string; /** Mount path the page expects to be served at — e.g. `'/portal/'`, * `'/admin/'`. Frameworks express this differently: * - Angular: `{ provide: APP_BASE_HREF, useValue: '...' }` * - React: `` or * `createBrowserRouter(routes, { basename: '...' })` * - Vue: `createRouter({ history: createWebHistory('...') })` * - Svelte: `` */ baseHref: string; /** Leaf routes extracted from the page's router config. */ routes: SpaRoute[]; };