UNPKG

@riogz/router

Version:

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

53 lines (52 loc) 1.75 kB
import { Router } from '../types/router'; /** * Enhances a router with plugin management capabilities. * * This module provides functionality to: * - Register and manage plugins * - Automatically bind plugin lifecycle methods to router events * - Handle plugin teardown and cleanup * - Support dependency injection for plugins * * Plugins can define lifecycle methods that automatically get called: * - onStart: When router starts * - onStop: When router stops * - onTransitionStart: When navigation begins * - onTransitionSuccess: When navigation succeeds * - onTransitionError: When navigation fails * - onTransitionCancel: When navigation is cancelled * - teardown: For plugin cleanup * * @template Dependencies - Type of dependencies available to plugins * @param router - Router instance to enhance with plugin capabilities * @returns Enhanced router with plugin functionality * * @example * ```typescript * // Logger plugin * const loggerPlugin = (router, deps) => ({ * onTransitionStart: (toState, fromState) => { * console.log(`Starting navigation to ${toState.name}`) * }, * onTransitionSuccess: (toState, fromState) => { * console.log(`Successfully navigated to ${toState.name}`) * }, * teardown: () => { * console.log('Logger plugin cleaned up') * } * }) * * // Analytics plugin * const analyticsPlugin = (router, deps) => ({ * onTransitionSuccess: (toState) => { * deps.analytics.track('page_view', { page: toState.name }) * } * }) * * const unregister = router.usePlugin(loggerPlugin, analyticsPlugin) * * // Later, remove plugins * unregister() * ``` */ export default function withPlugins<Dependencies>(router: Router<Dependencies>): Router<Dependencies>;