@riogz/router
Version:
A simple, lightweight, powerful, view-agnostic, modular and extensible router
33 lines (32 loc) • 1.31 kB
TypeScript
import { Router, DefaultDependencies } from './types/router';
/**
* Creates a deep clone of an existing router instance with optional new dependencies.
*
* The cloned router will have:
* - Same route tree structure
* - Same configuration options
* - Same middleware and plugins
* - Same lifecycle handlers (canActivate/canDeactivate)
* - Same configuration object
* - Optionally different dependencies
*
* This is useful for creating router instances with different dependency contexts
* while maintaining the same routing configuration.
*
* @template Dependencies - Type of dependencies to inject into the cloned router
* @param router - The router instance to clone
* @param dependencies - Optional new dependencies for the cloned router
* @returns A new router instance that is a clone of the original
*
* @example
* ```typescript
* const originalRouter = createRouter(routes, options, { api: apiV1 })
*
* // Clone with different dependencies
* const clonedRouter = cloneRouter(originalRouter, { api: apiV2 })
*
* // Clone with same dependencies
* const identicalRouter = cloneRouter(originalRouter)
* ```
*/
export default function cloneRouter<Dependencies extends DefaultDependencies = DefaultDependencies>(router: Router, dependencies?: Dependencies): Router<Dependencies>;