/** * Named routes registry and URL builder */ /** * Register a named route * * @param name - Route name (e.g., 'documentDetail') * @param pattern - Path pattern (e.g., '/documents/:documentId') * * @example * ```typescript * registerRoute('documentDetail', '/documents/:documentId') * registerRoute('userProfile', '/users/:userId/profile') * ``` */ export function registerRoute(name: string, pattern: string): void; /** * Register multiple routes at once * * @param routes - Object mapping route names to patterns * * @example * ```typescript * registerRoutes({ * home: '/', * documentDetail: '/documents/:documentId', * userProfile: '/users/:userId/profile' * }) * ``` */ export function registerRoutes(routes: Record): void; /** * Get all registered routes * * @returns Route registry */ export function getRoutes(): Record; /** * Clear all registered routes */ export function clearRoutes(): void; /** * Build a URL from a route name and parameters * * @param name - Route name * @param params - Route parameters * @param query - Query string parameters * @returns Built URL * * @example * ```typescript * buildUrl('documentDetail', { documentId: 123 }) * // Returns: '/documents/123' * * buildUrl('documentDetail', { documentId: 123 }, { tab: 'info' }) * // Returns: '/documents/123?tab=info' * ``` */ export function buildUrl( name: string, params?: Record, query?: Record ): string; /** * Check if a route name is registered * * @param name - Route name * @returns True if route is registered */ export function hasRoute(name: string): boolean; /** * Get the pattern for a registered route by name * * @param name - Route name * @returns Route pattern or undefined if not registered */ export function getRouteByName(name: string): string | undefined; // --- defineRoutes types --- /** Extract :param names from a route path pattern */ type ExtractParams = T extends `${string}:${infer Param}/${infer Rest}` ? { [K in Param]: string | number } & ExtractParams<`/${Rest}`> : T extends `${string}:${infer Param}` ? { [K in Param]: string | number } : Record; /** Route definition for defineRoutes() */ interface RouteDefinition { path: string; component: any; loadingComponent?: any; loadingParams?: Record; conditions?: Function | Function[]; props?: Record; routeContext?: Record; title?: string; breadcrumbs?: Array<{ label: string; path?: string; id?: string }>; /** * Mounts the route component but keeps it hidden under `loadingComponent` * until the component itself calls `hideLoading()`. **You must call * `hideLoading()`** or the page stays blank forever — see `wrap.d.ts`. */ shouldDisplayLoadingOnRouteLoad?: boolean; permissions?: { any?: string[]; all?: string[] }; authorizationCallback?: Function; inheritBreadcrumbs?: boolean; inheritPermissions?: boolean; inheritConditions?: boolean; inheritAuthorization?: boolean; } /** Navigation helper for a single route */ interface RouteNav { push( params?: ExtractParams, query?: Record, navigationContext?: any ): Promise; replace( params?: ExtractParams, query?: Record, navigationContext?: any ): Promise; link( params?: ExtractParams, query?: Record ): { route: string; params?: any; query?: any }; readonly path: Path; } /** Return type of defineRoutes() */ interface DefineRoutesResult> { routes: Record; nav: { [K in keyof T]: RouteNav; }; paths: { [K in keyof T]: ( params?: ExtractParams, query?: Record ) => string; }; } /** * Define routes as a single source of truth, returning the routes object * for , navigation helpers with autocomplete, and path builders. * * @param definitions - Route definitions keyed by name * @returns Routes object, navigation helpers, and path builders * * @example * ```typescript * const { routes, nav, paths } = defineRoutes({ * home: { path: '/', component: Home }, * user: { path: '/user/:id', component: () => import('./User.svelte') }, * about: { path: '/about', component: () => import('./About.svelte') } * }) * * // Navigate with autocomplete on route names and params * nav.user.push({ id: 123 }) * nav.home.replace() * * // Build URLs for links * paths.user({ id: 123 }) // '/user/123' * * // For use:link action * nav.user.link({ id: 123 }) // { route: 'user', params: { id: 123 } } * ``` */ export function defineRoutes>( definitions: T ): DefineRoutesResult;