@riogz/router
Version:
A simple, lightweight, powerful, view-agnostic, modular and extensible router
53 lines (52 loc) • 1.75 kB
TypeScript
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>;