UNPKG

@riogz/router

Version:

A simple, lightweight, powerful, view-agnostic, modular and extensible router

40 lines (39 loc) 1.42 kB
import { Router } from '../types/router'; /** * Enhances a router with middleware management capabilities. * * Middleware functions are executed during route transitions and can: * - Intercept and modify navigation * - Perform authentication checks * - Log navigation events * - Transform state data * - Cancel navigation by throwing errors * * Middleware is executed after route guards but before the final state is set. * Multiple middleware can be registered and they execute in the order they were added. * * @template Dependencies - Type of dependencies available to middleware * @param router - Router instance to enhance with middleware capabilities * @returns Enhanced router with middleware functionality * * @example * ```typescript * // Authentication middleware * const authMiddleware = (router, deps) => (toState, fromState, done) => { * if (toState.name.startsWith('admin') && !deps.auth.isAuthenticated()) { * done(new Error('Authentication required')) * } else { * done() * } * } * * // Logging middleware * const loggerMiddleware = (router, deps) => (toState, fromState, done) => { * deps.logger.log(`Navigating from ${fromState?.name} to ${toState.name}`) * done() * } * * router.useMiddleware(authMiddleware, loggerMiddleware) * ``` */ export default function withMiddleware<Dependencies>(router: Router<Dependencies>): Router<Dependencies>;