@real-router/core 0.36.2 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/api/helpers.ts","../../src/namespaces/EventBusNamespace/validators.ts","../../src/namespaces/StateNamespace/validators.ts","../../src/api/getPluginApi.ts","../../src/api/getRoutesApi.ts","../../src/api/getDependenciesApi.ts","../../src/api/getLifecycleApi.ts","../../src/api/cloneRouter.ts"],"names":["logger"],"mappings":"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","file":"api.mjs","sourcesContent":["// packages/core/src/api/helpers.ts\n\nimport { errorCodes } from \"../constants\";\nimport { RouterError } from \"../RouterError\";\n\nexport function throwIfDisposed(isDisposed: () => boolean): void {\n if (isDisposed()) {\n throw new RouterError(errorCodes.ROUTER_DISPOSED);\n }\n}\n","// packages/core/src/namespaces/EventBusNamespace/validators.ts\n\n/**\n * Static validation functions for EventBusNamespace.\n * Called by Router facade before instance methods.\n */\n\nimport { validEventNames } from \"../../constants\";\n\nimport type { EventMethodMap } from \"../../types\";\nimport type { EventName, Plugin } from \"@real-router/types\";\n\n/**\n * Validates event name is one of the known event names.\n */\nexport function validateEventName(eventName: unknown): void {\n if (!validEventNames.has(eventName as EventName)) {\n throw new Error(`Invalid event name: ${String(eventName)}`);\n }\n}\n\n/**\n * Validates addEventListener arguments (event name + callback).\n */\nexport function validateListenerArgs<E extends EventName>(\n eventName: E,\n cb: Plugin[EventMethodMap[E]],\n): void {\n validateEventName(eventName);\n\n if (typeof cb !== \"function\") {\n throw new TypeError(\n `Expected callback to be a function for event ${eventName}`,\n );\n }\n}\n","// packages/core/src/namespaces/StateNamespace/validators.ts\n\n/**\n * Static validation functions for StateNamespace.\n * Called by Router facade before instance methods.\n */\n\nimport { isString, isParams, getTypeDescription } from \"type-guards\";\n\n/**\n * Validates makeState arguments.\n */\nexport function validateMakeStateArgs(\n name: unknown,\n params: unknown,\n path: unknown,\n forceId: unknown,\n): void {\n // Validate name is a string\n if (!isString(name)) {\n throw new TypeError(\n `[router.makeState] Invalid name: ${getTypeDescription(name)}. Expected string.`,\n );\n }\n\n // Validate params if provided\n if (params !== undefined && !isParams(params)) {\n throw new TypeError(\n `[router.makeState] Invalid params: ${getTypeDescription(params)}. Expected plain object.`,\n );\n }\n\n // Validate path if provided\n if (path !== undefined && !isString(path)) {\n throw new TypeError(\n `[router.makeState] Invalid path: ${getTypeDescription(path)}. Expected string.`,\n );\n }\n\n // Validate forceId if provided\n if (forceId !== undefined && typeof forceId !== \"number\") {\n throw new TypeError(\n `[router.makeState] Invalid forceId: ${getTypeDescription(forceId)}. Expected number.`,\n );\n }\n}\n","import { throwIfDisposed } from \"./helpers\";\nimport { errorCodes } from \"../constants\";\nimport { getInternals } from \"../internals\";\nimport { validateListenerArgs } from \"../namespaces/EventBusNamespace/validators\";\nimport {\n validateMatchPathArgs,\n validateSetRootPathArgs,\n validateStateBuilderArgs,\n} from \"../namespaces/RoutesNamespace/validators\";\nimport { validateMakeStateArgs } from \"../namespaces/StateNamespace/validators\";\nimport { RouterError } from \"../RouterError\";\n\nimport type { PluginApi } from \"./types\";\nimport type { DefaultDependencies, Params, Router } from \"@real-router/types\";\n\nexport function getPluginApi<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(router: Router<Dependencies>): PluginApi {\n const ctx = getInternals(router);\n\n return {\n makeState: (name, params, path, meta, forceId) => {\n if (!ctx.noValidate) {\n validateMakeStateArgs(name, params, path, forceId);\n }\n\n return ctx.makeState(\n name,\n params,\n path,\n meta?.params as\n | Record<string, Record<string, \"url\" | \"query\">>\n | undefined,\n forceId,\n );\n },\n buildState: (routeName, routeParams) => {\n if (!ctx.noValidate) {\n validateStateBuilderArgs(routeName, routeParams, \"buildState\");\n }\n\n const { name, params } = ctx.forwardState(routeName, routeParams);\n\n return ctx.buildStateResolved(name, params);\n },\n forwardState: <P extends Params = Params>(\n routeName: string,\n routeParams: P,\n ) => {\n if (!ctx.noValidate) {\n validateStateBuilderArgs(routeName, routeParams, \"forwardState\");\n }\n\n return ctx.forwardState(routeName, routeParams);\n },\n matchPath: (path) => {\n if (!ctx.noValidate) {\n validateMatchPathArgs(path);\n }\n\n return ctx.matchPath(path, ctx.getOptions());\n },\n setRootPath: (rootPath) => {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateSetRootPathArgs(rootPath);\n }\n\n ctx.setRootPath(rootPath);\n },\n getRootPath: ctx.getRootPath,\n addEventListener: (eventName, cb) => {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateListenerArgs(eventName, cb);\n }\n\n return ctx.addEventListener(eventName, cb);\n },\n buildNavigationState: (name, params = {}) => {\n if (!ctx.noValidate) {\n validateStateBuilderArgs(name, params, \"buildNavigationState\");\n }\n\n const { name: resolvedName, params: resolvedParams } = ctx.forwardState(\n name,\n params,\n );\n const routeInfo = ctx.buildStateResolved(resolvedName, resolvedParams);\n\n if (!routeInfo) {\n return;\n }\n\n return ctx.makeState(\n routeInfo.name,\n routeInfo.params,\n ctx.buildPath(routeInfo.name, routeInfo.params),\n routeInfo.meta,\n );\n },\n getOptions: ctx.getOptions,\n getTree: ctx.getTree,\n addInterceptor: (method, fn) => {\n throwIfDisposed(ctx.isDisposed);\n let list = ctx.interceptors.get(method);\n\n if (!list) {\n list = [];\n ctx.interceptors.set(method, list);\n }\n\n list.push(fn);\n\n return () => {\n const index = list.indexOf(fn);\n\n if (index !== -1) {\n list.splice(index, 1);\n }\n };\n },\n extendRouter: (extensions: Record<string, unknown>) => {\n throwIfDisposed(ctx.isDisposed);\n\n const keys = Object.keys(extensions);\n\n for (const key of keys) {\n if (key in router) {\n throw new RouterError(errorCodes.PLUGIN_CONFLICT, {\n message: `Cannot extend router: property \"${key}\" already exists`,\n });\n }\n }\n\n for (const key of keys) {\n (router as Record<string, unknown>)[key] = extensions[key];\n }\n\n const extensionRecord = { keys };\n\n ctx.routerExtensions.push(extensionRecord);\n\n let removed = false;\n\n return () => {\n if (removed) {\n return;\n }\n\n removed = true;\n\n for (const key of extensionRecord.keys) {\n delete (router as Record<string, unknown>)[key];\n }\n\n const idx = ctx.routerExtensions.indexOf(extensionRecord);\n\n if (idx !== -1) {\n ctx.routerExtensions.splice(idx, 1);\n }\n };\n },\n };\n}\n","import { logger } from \"@real-router/logger\";\nimport { validateRouteName } from \"type-guards\";\n\nimport { throwIfDisposed } from \"./helpers\";\nimport { getInternals } from \"../internals\";\nimport {\n clearConfigEntries,\n removeFromDefinitions,\n sanitizeRoute,\n} from \"../namespaces/RoutesNamespace/helpers\";\nimport {\n clearRouteData,\n refreshForwardMap,\n registerAllRouteHandlers,\n} from \"../namespaces/RoutesNamespace/routesStore\";\nimport {\n throwIfInternalRoute,\n throwIfInternalRouteInArray,\n validateAddRouteArgs,\n validateClearRoutes,\n validateParentOption,\n validateRemoveRoute,\n validateRemoveRouteArgs,\n validateUpdateRoute,\n validateUpdateRouteBasicArgs,\n validateUpdateRoutePropertyTypes,\n} from \"../namespaces/RoutesNamespace/validators\";\n\nimport type { RoutesApi } from \"./types\";\nimport type { RouterInternals } from \"../internals\";\nimport type { RouteLifecycleNamespace, RouteConfig } from \"../namespaces\";\nimport type { RoutesStore } from \"../namespaces/RoutesNamespace\";\nimport type { GuardFnFactory, Route } from \"../types\";\nimport type {\n DefaultDependencies,\n ForwardToCallback,\n Params,\n Router,\n} from \"@real-router/types\";\nimport type { RouteDefinition, RouteTree } from \"route-tree\";\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Recursively finds a route definition by its full dotted name.\n */\nfunction findDefinition(\n definitions: RouteDefinition[],\n fullName: string,\n parentPrefix = \"\",\n): RouteDefinition | undefined {\n for (const def of definitions) {\n const currentFullName = parentPrefix\n ? `${parentPrefix}.${def.name}`\n : def.name;\n\n if (currentFullName === fullName) {\n return def;\n }\n\n if (def.children && fullName.startsWith(`${currentFullName}.`)) {\n return findDefinition(def.children, fullName, currentFullName);\n }\n }\n\n /* v8 ignore next -- @preserve: defensive return, callers validate route exists before calling */\n return undefined;\n}\n\n/**\n * Clears all config entries and lifecycle handlers for a removed route\n * (and all its descendants).\n */\nfunction clearRouteConfigurations<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n routeName: string,\n config: RouteConfig,\n routeCustomFields: Record<string, Record<string, unknown>>,\n lifecycleNamespace: RouteLifecycleNamespace<Dependencies>,\n): void {\n const shouldClear = (n: string): boolean =>\n n === routeName || n.startsWith(`${routeName}.`);\n\n clearConfigEntries(config.decoders, shouldClear);\n clearConfigEntries(config.encoders, shouldClear);\n clearConfigEntries(config.defaultParams, shouldClear);\n clearConfigEntries(config.forwardMap, shouldClear);\n clearConfigEntries(config.forwardFnMap, shouldClear);\n clearConfigEntries(routeCustomFields, shouldClear);\n\n // Clear forwardMap entries pointing TO the deleted route (or its descendants)\n clearConfigEntries(config.forwardMap, (key) =>\n shouldClear(config.forwardMap[key]),\n );\n\n // Clear lifecycle handlers\n const [canDeactivateFactories, canActivateFactories] =\n lifecycleNamespace.getFactories();\n\n for (const n of Object.keys(canActivateFactories)) {\n if (shouldClear(n)) {\n lifecycleNamespace.clearCanActivate(n);\n }\n }\n\n for (const n of Object.keys(canDeactivateFactories)) {\n if (shouldClear(n)) {\n lifecycleNamespace.clearCanDeactivate(n);\n }\n }\n}\n\n/**\n * Updates forwardTo for a route in config and returns the refreshed resolved\n * forward map (REPLACE semantics — caller must call ctx.setResolvedForwardMap).\n */\nfunction updateForwardTo<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n name: string,\n forwardTo: string | ForwardToCallback<Dependencies> | null,\n config: RouteConfig,\n noValidate: boolean,\n refreshForwardMapFn: (\n config: RouteConfig,\n noValidate: boolean,\n ) => Record<string, string>,\n): Record<string, string> {\n if (forwardTo === null) {\n delete config.forwardMap[name];\n delete config.forwardFnMap[name];\n } else if (typeof forwardTo === \"string\") {\n delete config.forwardFnMap[name];\n config.forwardMap[name] = forwardTo;\n } else {\n delete config.forwardMap[name];\n config.forwardFnMap[name] = forwardTo;\n }\n\n return refreshForwardMapFn(config, noValidate);\n}\n\n/**\n * Builds a full Route object from a bare RouteDefinition by re-attaching\n * config entries and lifecycle factories.\n *\n * RECURSIVE — call with the factories tuple obtained ONCE from\n * `lifecycleNamespace.getFactories()` and pass it through to children.\n */\nfunction enrichRoute<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n routeDef: RouteDefinition,\n routeName: string,\n config: RouteConfig,\n factories: [\n Record<string, GuardFnFactory<Dependencies>>,\n Record<string, GuardFnFactory<Dependencies>>,\n ],\n): Route<Dependencies> {\n const route: Route<Dependencies> = {\n name: routeDef.name,\n path: routeDef.path,\n };\n\n const forwardToFn = config.forwardFnMap[routeName];\n const forwardToStr = config.forwardMap[routeName];\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (forwardToFn !== undefined) {\n route.forwardTo = forwardToFn;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n } else if (forwardToStr !== undefined) {\n route.forwardTo = forwardToStr;\n }\n\n if (routeName in config.defaultParams) {\n route.defaultParams = config.defaultParams[routeName];\n }\n\n if (routeName in config.decoders) {\n route.decodeParams = config.decoders[routeName];\n }\n\n if (routeName in config.encoders) {\n route.encodeParams = config.encoders[routeName];\n }\n\n const [canDeactivateFactories, canActivateFactories] = factories;\n\n if (routeName in canActivateFactories) {\n route.canActivate = canActivateFactories[routeName];\n }\n\n if (routeName in canDeactivateFactories) {\n route.canDeactivate = canDeactivateFactories[routeName];\n }\n\n if (routeDef.children) {\n route.children = routeDef.children.map((child) =>\n enrichRoute(child, `${routeName}.${child.name}`, config, factories),\n );\n }\n\n return route;\n}\n\n// ============================================================================\n// CRUD operations\n// ============================================================================\n\n/**\n * Adds one or more routes to the router.\n * Input already validated by facade.\n */\nfunction addRoutes<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n store: RoutesStore<Dependencies>,\n noValidate: boolean,\n routes: Route<Dependencies>[],\n parentName?: string,\n): void {\n if (parentName) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const parentDef = findDefinition(store.definitions, parentName)!;\n\n parentDef.children ??= [];\n\n for (const route of routes) {\n parentDef.children.push(sanitizeRoute(route));\n }\n } else {\n for (const route of routes) {\n store.definitions.push(sanitizeRoute(route));\n }\n }\n\n registerAllRouteHandlers(\n routes,\n store.config,\n store.routeCustomFields,\n store.pendingCanActivate,\n store.pendingCanDeactivate,\n store.depsStore,\n parentName ?? \"\",\n );\n\n store.treeOperations.commitTreeChanges(store, noValidate);\n}\n\n/**\n * Atomically replaces all routes with a new set.\n * Follows RFC 6-step semantics for HMR support.\n */\nfunction replaceRoutes<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n store: RoutesStore<Dependencies>,\n noValidate: boolean,\n routes: Route<Dependencies>[],\n ctx: RouterInternals<Dependencies>,\n currentPath: string | undefined,\n): void {\n // Step 2: Clear route data (WITHOUT tree rebuild)\n clearRouteData(store);\n\n // Step 3: Clear definition lifecycle handlers (preserve external guards)\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- guaranteed set after wiring\n store.lifecycleNamespace!.clearDefinitionGuards();\n\n // Step 4: Register new routes\n for (const route of routes) {\n store.definitions.push(sanitizeRoute(route));\n }\n\n registerAllRouteHandlers(\n routes,\n store.config,\n store.routeCustomFields,\n store.pendingCanActivate,\n store.pendingCanDeactivate,\n store.depsStore,\n \"\",\n );\n\n // Step 5: One tree rebuild\n store.treeOperations.commitTreeChanges(store, noValidate);\n\n // Step 6: Revalidate state\n if (currentPath !== undefined) {\n const revalidated = ctx.matchPath(currentPath, ctx.getOptions());\n\n if (revalidated) {\n ctx.setState(revalidated);\n } else {\n ctx.clearState();\n }\n }\n}\n\n/**\n * Removes a route and all its children.\n *\n * @returns true if removed, false if not found\n */\nfunction removeRoute<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n store: RoutesStore<Dependencies>,\n noValidate: boolean,\n name: string,\n): boolean {\n const wasRemoved = removeFromDefinitions(store.definitions, name);\n\n if (!wasRemoved) {\n return false;\n }\n\n clearRouteConfigurations(\n name,\n store.config,\n store.routeCustomFields,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n store.lifecycleNamespace!,\n );\n\n store.treeOperations.commitTreeChanges(store, noValidate);\n\n return true;\n}\n\n/**\n * Updates a route's configuration in place.\n */\nfunction updateRouteConfig<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n store: RoutesStore<Dependencies>,\n noValidate: boolean,\n name: string,\n updates: {\n forwardTo?: string | ForwardToCallback<Dependencies> | null | undefined;\n defaultParams?: Params | null | undefined;\n decodeParams?: ((params: Params) => Params) | null | undefined;\n encodeParams?: ((params: Params) => Params) | null | undefined;\n },\n): void {\n if (updates.forwardTo !== undefined) {\n store.resolvedForwardMap = updateForwardTo(\n name,\n updates.forwardTo,\n store.config,\n noValidate,\n refreshForwardMap,\n );\n }\n\n if (updates.defaultParams !== undefined) {\n if (updates.defaultParams === null) {\n delete store.config.defaultParams[name];\n } else {\n store.config.defaultParams[name] = updates.defaultParams;\n }\n }\n\n if (updates.decodeParams !== undefined) {\n if (updates.decodeParams === null) {\n delete store.config.decoders[name];\n } else {\n const decoder = updates.decodeParams;\n\n store.config.decoders[name] = (params: Params): Params =>\n (decoder(params) as Params | undefined) ?? params;\n }\n }\n\n if (updates.encodeParams !== undefined) {\n if (updates.encodeParams === null) {\n delete store.config.encoders[name];\n } else {\n const encoder = updates.encodeParams;\n\n store.config.encoders[name] = (params: Params): Params =>\n (encoder(params) as Params | undefined) ?? params;\n }\n }\n}\n\n/**\n * Gets a route by name with all its configuration.\n */\nfunction getRoute<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n store: RoutesStore<Dependencies>,\n name: string,\n): Route<Dependencies> | undefined {\n const segments = store.matcher.getSegmentsByName(name);\n\n if (!segments) {\n return undefined;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- segments is non-empty (checked above)\n const targetNode = segments.at(-1)! as RouteTree;\n const definition = store.treeOperations.nodeToDefinition(targetNode);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const factories = store.lifecycleNamespace!.getFactories();\n\n return enrichRoute(definition, name, store.config, factories);\n}\n\n/**\n * Gets the custom config fields for a route.\n */\nfunction getRouteConfig<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n store: RoutesStore<Dependencies>,\n name: string,\n): Record<string, unknown> | undefined {\n if (!store.matcher.hasRoute(name)) {\n return undefined;\n }\n\n return store.routeCustomFields[name];\n}\n\n// ============================================================================\n// API factory\n// ============================================================================\n\nexport function getRoutesApi<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(router: Router<Dependencies>): RoutesApi<Dependencies> {\n const ctx = getInternals(router);\n\n const store = ctx.routeGetStore();\n const noValidate = ctx.noValidate;\n\n return {\n add: (routes, options) => {\n throwIfDisposed(ctx.isDisposed);\n\n const routeArray = Array.isArray(routes) ? routes : [routes];\n const parentName = options?.parent;\n\n if (!ctx.noValidate) {\n if (parentName !== undefined) {\n validateParentOption(parentName);\n }\n\n throwIfInternalRouteInArray(routeArray, \"addRoute\");\n validateAddRouteArgs(routeArray);\n\n store.treeOperations.validateRoutes(\n routeArray,\n store.tree,\n store.config.forwardMap,\n parentName,\n );\n }\n\n addRoutes(store, noValidate, routeArray, parentName);\n },\n\n remove: (name) => {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateRemoveRouteArgs(name);\n throwIfInternalRoute(name, \"removeRoute\");\n }\n\n const canRemove = validateRemoveRoute(\n name,\n ctx.getStateName(),\n ctx.isTransitioning(),\n );\n\n if (!canRemove) {\n return;\n }\n\n const wasRemoved = removeRoute(store, noValidate, name);\n\n if (!wasRemoved) {\n logger.warn(\n \"router.removeRoute\",\n `Route \"${name}\" not found. No changes made.`,\n );\n }\n },\n\n update: (name, updates) => {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateUpdateRouteBasicArgs(name, updates);\n throwIfInternalRoute(name, \"updateRoute\");\n }\n\n const {\n forwardTo,\n defaultParams,\n decodeParams,\n encodeParams,\n canActivate,\n canDeactivate,\n } = updates;\n\n if (!ctx.noValidate) {\n validateUpdateRoutePropertyTypes(\n forwardTo,\n defaultParams,\n decodeParams,\n encodeParams,\n );\n }\n\n /* v8 ignore next 6 -- @preserve: race condition guard, mirrors Router.updateRoute() same-path guard tested via Router.ts unit tests */\n if (ctx.isTransitioning()) {\n logger.error(\n \"router.updateRoute\",\n `Updating route \"${name}\" while navigation is in progress. This may cause unexpected behavior.`,\n );\n }\n\n if (!ctx.noValidate) {\n validateUpdateRoute(\n name,\n forwardTo,\n (n) => store.matcher.hasRoute(n),\n store.matcher,\n store.config,\n );\n }\n\n updateRouteConfig(store, noValidate, name, {\n forwardTo,\n defaultParams,\n decodeParams,\n encodeParams,\n });\n\n if (canActivate !== undefined) {\n if (canActivate === null) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- guaranteed set after wiring\n store.lifecycleNamespace!.clearCanActivate(name);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- guaranteed set after wiring\n store.lifecycleNamespace!.addCanActivate(\n name,\n canActivate,\n noValidate,\n true,\n );\n }\n }\n\n if (canDeactivate !== undefined) {\n if (canDeactivate === null) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- guaranteed set after wiring\n store.lifecycleNamespace!.clearCanDeactivate(name);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- guaranteed set after wiring\n store.lifecycleNamespace!.addCanDeactivate(\n name,\n canDeactivate,\n noValidate,\n true,\n );\n }\n }\n },\n\n clear: () => {\n throwIfDisposed(ctx.isDisposed);\n\n const canClear = validateClearRoutes(ctx.isTransitioning());\n\n /* v8 ignore next 3 -- @preserve: race condition guard, mirrors Router.clearRoutes() same-path guard tested via validateClearRoutes unit tests */\n if (!canClear) {\n return;\n }\n\n store.treeOperations.resetStore(store);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- guaranteed set after wiring\n store.lifecycleNamespace!.clearAll();\n ctx.clearState();\n },\n\n has: (name) => {\n if (!ctx.noValidate) {\n validateRouteName(name, \"hasRoute\");\n }\n\n return store.matcher.hasRoute(name);\n },\n\n get: (name) => {\n if (!ctx.noValidate) {\n validateRouteName(name, \"getRoute\");\n }\n\n return getRoute(store, name);\n },\n\n getConfig: (name) => {\n return getRouteConfig(store, name);\n },\n\n replace: (routes) => {\n throwIfDisposed(ctx.isDisposed);\n\n const routeArray = Array.isArray(routes) ? routes : [routes];\n\n const canReplace = validateClearRoutes(ctx.isTransitioning());\n\n if (!canReplace) {\n return;\n }\n\n if (!ctx.noValidate) {\n throwIfInternalRouteInArray(routeArray, \"replaceRoutes\");\n validateAddRouteArgs(routeArray);\n store.treeOperations.validateRoutes(routeArray);\n }\n\n const currentPath = router.getState()?.path;\n\n replaceRoutes(store, noValidate, routeArray, ctx, currentPath);\n },\n };\n}\n","import { logger } from \"@real-router/logger\";\nimport { getTypeDescription } from \"type-guards\";\n\nimport { throwIfDisposed } from \"./helpers\";\nimport { computeThresholds } from \"../helpers\";\nimport { getInternals } from \"../internals\";\nimport {\n validateDependenciesObject,\n validateDependencyExists,\n validateDependencyLimit,\n validateDependencyName,\n validateSetDependencyArgs,\n} from \"../namespaces/DependenciesNamespace/validators\";\n\nimport type { DependenciesApi } from \"./types\";\nimport type { DependenciesStore } from \"../namespaces\";\nimport type { DefaultDependencies, Router } from \"@real-router/types\";\n\n// =============================================================================\n// Module-private CRUD functions\n// =============================================================================\n\nfunction checkDependencyCount(\n store: DependenciesStore,\n methodName: string,\n): void {\n const maxDependencies = store.limits.maxDependencies;\n\n if (maxDependencies === 0) {\n return;\n }\n\n const currentCount = Object.keys(store.dependencies).length;\n\n const { warn, error } = computeThresholds(maxDependencies);\n\n if (currentCount === warn) {\n logger.warn(\n `router.${methodName}`,\n `${warn} dependencies registered. ` + `Consider if all are necessary.`,\n );\n } else if (currentCount === error) {\n logger.error(\n `router.${methodName}`,\n `${error} dependencies registered! ` +\n `This indicates architectural problems. ` +\n `Hard limit at ${maxDependencies}.`,\n );\n } else if (currentCount >= maxDependencies) {\n throw new Error(\n `[router.${methodName}] Dependency limit exceeded (${maxDependencies}). ` +\n `Current: ${currentCount}. This is likely a bug in your code. ` +\n `If you genuinely need more dependencies, your architecture needs refactoring.`,\n );\n }\n}\n\nfunction setDependency(\n store: DependenciesStore,\n dependencyName: string,\n dependencyValue: unknown,\n): boolean {\n // undefined = \"don't set\" (feature for conditional setting)\n if (dependencyValue === undefined) {\n return false;\n }\n\n const isNewKey = !Object.hasOwn(store.dependencies, dependencyName);\n\n if (isNewKey) {\n // Only check limit when adding new keys (overwrites don't increase count)\n checkDependencyCount(store, \"setDependency\");\n } else {\n const oldValue = (store.dependencies as Record<string, unknown>)[\n dependencyName\n ];\n const isChanging = oldValue !== dependencyValue;\n // Special case for NaN idempotency (NaN !== NaN is always true)\n const bothAreNaN = Number.isNaN(oldValue) && Number.isNaN(dependencyValue);\n\n if (isChanging && !bothAreNaN) {\n logger.warn(\n \"router.setDependency\",\n \"Router dependency already exists and is being overwritten:\",\n dependencyName,\n );\n }\n }\n\n (store.dependencies as Record<string, unknown>)[dependencyName] =\n dependencyValue;\n\n return true;\n}\n\nfunction setMultipleDependencies(\n store: DependenciesStore,\n deps: Record<string, unknown>,\n): void {\n const overwrittenKeys: string[] = [];\n\n for (const key in deps) {\n if (deps[key] !== undefined) {\n if (Object.hasOwn(store.dependencies, key)) {\n overwrittenKeys.push(key);\n }\n\n (store.dependencies as Record<string, unknown>)[key] = deps[key];\n }\n }\n\n if (overwrittenKeys.length > 0) {\n logger.warn(\n \"router.setDependencies\",\n \"Overwritten:\",\n overwrittenKeys.join(\", \"),\n );\n }\n}\n\n// =============================================================================\n// Public API factory\n// =============================================================================\n\nexport function getDependenciesApi<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(router: Router<Dependencies>): DependenciesApi<Dependencies> {\n const ctx = getInternals(router);\n\n return {\n get: (name) => {\n if (!ctx.noValidate) {\n validateDependencyName(name, \"getDependency\");\n }\n\n const store = ctx.dependenciesGetStore();\n const value = (store.dependencies as Record<string, unknown>)[\n name as string\n ];\n\n if (!ctx.noValidate) {\n validateDependencyExists(value, name as string);\n }\n\n return value as Dependencies[typeof name];\n },\n getAll: () => ({ ...ctx.dependenciesGetStore().dependencies }),\n set: (name, value) => {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateSetDependencyArgs(name);\n }\n\n setDependency(ctx.dependenciesGetStore(), name as string, value);\n },\n setAll: (deps) => {\n throwIfDisposed(ctx.isDisposed);\n\n const store = ctx.dependenciesGetStore();\n\n if (!ctx.noValidate) {\n validateDependenciesObject(deps, \"setDependencies\");\n validateDependencyLimit(\n Object.keys(store.dependencies).length,\n Object.keys(deps).length,\n \"setDependencies\",\n store.limits.maxDependencies,\n );\n }\n\n setMultipleDependencies(store, deps as Record<string, unknown>);\n },\n remove: (name) => {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateDependencyName(name, \"removeDependency\");\n }\n\n const store = ctx.dependenciesGetStore();\n\n if (!Object.hasOwn(store.dependencies, name as string)) {\n logger.warn(\n `router.removeDependency`,\n `Attempted to remove non-existent dependency: \"${getTypeDescription(name)}\"`,\n );\n }\n\n delete (store.dependencies as Record<string, unknown>)[name as string];\n },\n reset: () => {\n throwIfDisposed(ctx.isDisposed);\n const store = ctx.dependenciesGetStore();\n\n store.dependencies = Object.create(null) as Partial<Dependencies>;\n },\n has: (name) => {\n if (!ctx.noValidate) {\n validateDependencyName(name, \"hasDependency\");\n }\n\n return Object.hasOwn(\n ctx.dependenciesGetStore().dependencies,\n name as string,\n );\n },\n };\n}\n","import { validateRouteName } from \"type-guards\";\n\nimport { throwIfDisposed } from \"./helpers\";\nimport { getInternals } from \"../internals\";\nimport { validateHandler } from \"../namespaces/RouteLifecycleNamespace/validators\";\n\nimport type { LifecycleApi } from \"./types\";\nimport type { DefaultDependencies, Router } from \"@real-router/types\";\n\nexport function getLifecycleApi<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(router: Router<Dependencies>): LifecycleApi<Dependencies> {\n const ctx = getInternals(router);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- guaranteed set after wiring\n const lifecycleNamespace = ctx.routeGetStore().lifecycleNamespace!;\n\n return {\n addActivateGuard(name, handler) {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateRouteName(name, \"addActivateGuard\");\n validateHandler(handler, \"addActivateGuard\");\n }\n\n lifecycleNamespace.addCanActivate(name, handler, ctx.noValidate);\n },\n\n addDeactivateGuard(name, handler) {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateRouteName(name, \"addDeactivateGuard\");\n validateHandler(handler, \"addDeactivateGuard\");\n }\n\n lifecycleNamespace.addCanDeactivate(name, handler, ctx.noValidate);\n },\n\n removeActivateGuard(name) {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateRouteName(name, \"removeActivateGuard\");\n }\n\n lifecycleNamespace.clearCanActivate(name);\n },\n\n removeDeactivateGuard(name) {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateRouteName(name, \"removeDeactivateGuard\");\n }\n\n lifecycleNamespace.clearCanDeactivate(name);\n },\n };\n}\n","import { routeTreeToDefinitions } from \"route-tree\";\nimport { getTypeDescription } from \"type-guards\";\n\nimport { errorCodes } from \"../constants\";\nimport { getInternals } from \"../internals\";\nimport { Router as RouterClass } from \"../Router\";\nimport { RouterError } from \"../RouterError\";\nimport { getLifecycleApi } from \"./getLifecycleApi\";\n\nimport type { Route } from \"../types\";\nimport type { DefaultDependencies, Router } from \"@real-router/types\";\n\nfunction validateCloneArgs(dependencies: unknown): void {\n if (dependencies === undefined) {\n return;\n }\n\n if (\n !(\n dependencies &&\n typeof dependencies === \"object\" &&\n dependencies.constructor === Object\n )\n ) {\n throw new TypeError(\n `[cloneRouter] Invalid dependencies: expected plain object or undefined, received ${getTypeDescription(dependencies)}`,\n );\n }\n\n for (const key in dependencies) {\n if (Object.getOwnPropertyDescriptor(dependencies, key)?.get) {\n throw new TypeError(\n `[cloneRouter] Getters not allowed in dependencies: \"${key}\"`,\n );\n }\n }\n}\n\nexport function cloneRouter<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n router: Router<Dependencies>,\n dependencies?: Dependencies,\n): RouterClass<Dependencies> {\n const ctx = getInternals(router);\n\n if (ctx.isDisposed()) {\n throw new RouterError(errorCodes.ROUTER_DISPOSED);\n }\n\n if (!ctx.noValidate) {\n validateCloneArgs(dependencies);\n }\n\n // Get source store directly\n const sourceStore = ctx.routeGetStore();\n const routes = routeTreeToDefinitions(sourceStore.tree);\n const routeConfig = sourceStore.config;\n const resolvedForwardMap = sourceStore.resolvedForwardMap;\n const routeCustomFields = sourceStore.routeCustomFields;\n\n const options = ctx.cloneOptions();\n const sourceDeps = ctx.cloneDependencies();\n const [canDeactivateFactories, canActivateFactories] =\n ctx.getLifecycleFactories();\n const pluginFactories = ctx.getPluginFactories();\n\n const mergedDeps = {\n ...sourceDeps,\n ...dependencies,\n } as Dependencies;\n\n const newRouter = new RouterClass<Dependencies>(\n routes as Route<Dependencies>[],\n options,\n mergedDeps,\n );\n\n const lifecycle = getLifecycleApi(newRouter);\n\n for (const [name, handler] of Object.entries(canDeactivateFactories)) {\n lifecycle.addDeactivateGuard(name, handler);\n }\n\n for (const [name, handler] of Object.entries(canActivateFactories)) {\n lifecycle.addActivateGuard(name, handler);\n }\n\n if (pluginFactories.length > 0) {\n newRouter.usePlugin(...pluginFactories);\n }\n\n const newCtx = getInternals(newRouter);\n const newStore = newCtx.routeGetStore();\n\n // Apply cloned config directly to new store\n Object.assign(newStore.config.decoders, routeConfig.decoders);\n Object.assign(newStore.config.encoders, routeConfig.encoders);\n Object.assign(newStore.config.defaultParams, routeConfig.defaultParams);\n Object.assign(newStore.config.forwardMap, routeConfig.forwardMap);\n Object.assign(newStore.config.forwardFnMap, routeConfig.forwardFnMap);\n Object.assign(newStore.resolvedForwardMap, resolvedForwardMap);\n Object.assign(newStore.routeCustomFields, routeCustomFields);\n\n return newRouter;\n}\n"]}
1
+ {"version":3,"sources":["../../src/api/helpers.ts","../../src/namespaces/EventBusNamespace/validators.ts","../../src/namespaces/StateNamespace/validators.ts","../../src/api/getPluginApi.ts","../../src/api/getRoutesApi.ts","../../src/api/getDependenciesApi.ts","../../src/api/getLifecycleApi.ts","../../src/api/cloneRouter.ts"],"names":["logger"],"mappings":"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","file":"api.mjs","sourcesContent":["// packages/core/src/api/helpers.ts\n\nimport { errorCodes } from \"../constants\";\nimport { RouterError } from \"../RouterError\";\n\nexport function throwIfDisposed(isDisposed: () => boolean): void {\n if (isDisposed()) {\n throw new RouterError(errorCodes.ROUTER_DISPOSED);\n }\n}\n","// packages/core/src/namespaces/EventBusNamespace/validators.ts\n\n/**\n * Static validation functions for EventBusNamespace.\n * Called by Router facade before instance methods.\n */\n\nimport { validEventNames } from \"../../constants\";\n\nimport type { EventMethodMap } from \"../../types\";\nimport type { EventName, Plugin } from \"@real-router/types\";\n\n/**\n * Validates event name is one of the known event names.\n */\nexport function validateEventName(eventName: unknown): void {\n if (!validEventNames.has(eventName as EventName)) {\n throw new Error(`Invalid event name: ${String(eventName)}`);\n }\n}\n\n/**\n * Validates addEventListener arguments (event name + callback).\n */\nexport function validateListenerArgs<E extends EventName>(\n eventName: E,\n cb: Plugin[EventMethodMap[E]],\n): void {\n validateEventName(eventName);\n\n if (typeof cb !== \"function\") {\n throw new TypeError(\n `Expected callback to be a function for event ${eventName}`,\n );\n }\n}\n","// packages/core/src/namespaces/StateNamespace/validators.ts\n\n/**\n * Static validation functions for StateNamespace.\n * Called by Router facade before instance methods.\n */\n\nimport { isString, isParams, getTypeDescription } from \"type-guards\";\n\n/**\n * Validates makeState arguments.\n */\nexport function validateMakeStateArgs(\n name: unknown,\n params: unknown,\n path: unknown,\n forceId: unknown,\n): void {\n // Validate name is a string\n if (!isString(name)) {\n throw new TypeError(\n `[router.makeState] Invalid name: ${getTypeDescription(name)}. Expected string.`,\n );\n }\n\n // Validate params if provided\n if (params !== undefined && !isParams(params)) {\n throw new TypeError(\n `[router.makeState] Invalid params: ${getTypeDescription(params)}. Expected plain object.`,\n );\n }\n\n // Validate path if provided\n if (path !== undefined && !isString(path)) {\n throw new TypeError(\n `[router.makeState] Invalid path: ${getTypeDescription(path)}. Expected string.`,\n );\n }\n\n // Validate forceId if provided\n if (forceId !== undefined && typeof forceId !== \"number\") {\n throw new TypeError(\n `[router.makeState] Invalid forceId: ${getTypeDescription(forceId)}. Expected number.`,\n );\n }\n}\n","import { throwIfDisposed } from \"./helpers\";\nimport { errorCodes } from \"../constants\";\nimport { getInternals } from \"../internals\";\nimport { validateListenerArgs } from \"../namespaces/EventBusNamespace/validators\";\nimport {\n validateMatchPathArgs,\n validateSetRootPathArgs,\n validateStateBuilderArgs,\n} from \"../namespaces/RoutesNamespace/validators\";\nimport { validateMakeStateArgs } from \"../namespaces/StateNamespace/validators\";\nimport { RouterError } from \"../RouterError\";\n\nimport type { PluginApi } from \"./types\";\nimport type { DefaultDependencies, Params, Router } from \"@real-router/types\";\n\nexport function getPluginApi<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(router: Router<Dependencies>): PluginApi {\n const ctx = getInternals(router);\n\n return {\n makeState: (name, params, path, meta, forceId) => {\n if (!ctx.noValidate) {\n validateMakeStateArgs(name, params, path, forceId);\n }\n\n return ctx.makeState(\n name,\n params,\n path,\n meta?.params as\n | Record<string, Record<string, \"url\" | \"query\">>\n | undefined,\n forceId,\n );\n },\n buildState: (routeName, routeParams) => {\n if (!ctx.noValidate) {\n validateStateBuilderArgs(routeName, routeParams, \"buildState\");\n }\n\n const { name, params } = ctx.forwardState(routeName, routeParams);\n\n return ctx.buildStateResolved(name, params);\n },\n forwardState: <P extends Params = Params>(\n routeName: string,\n routeParams: P,\n ) => {\n if (!ctx.noValidate) {\n validateStateBuilderArgs(routeName, routeParams, \"forwardState\");\n }\n\n return ctx.forwardState(routeName, routeParams);\n },\n matchPath: (path) => {\n if (!ctx.noValidate) {\n validateMatchPathArgs(path);\n }\n\n return ctx.matchPath(path, ctx.getOptions());\n },\n setRootPath: (rootPath) => {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateSetRootPathArgs(rootPath);\n }\n\n ctx.setRootPath(rootPath);\n },\n getRootPath: ctx.getRootPath,\n addEventListener: (eventName, cb) => {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateListenerArgs(eventName, cb);\n }\n\n return ctx.addEventListener(eventName, cb);\n },\n buildNavigationState: (name, params = {}) => {\n if (!ctx.noValidate) {\n validateStateBuilderArgs(name, params, \"buildNavigationState\");\n }\n\n const { name: resolvedName, params: resolvedParams } = ctx.forwardState(\n name,\n params,\n );\n const routeInfo = ctx.buildStateResolved(resolvedName, resolvedParams);\n\n if (!routeInfo) {\n return;\n }\n\n return ctx.makeState(\n routeInfo.name,\n routeInfo.params,\n ctx.buildPath(routeInfo.name, routeInfo.params),\n routeInfo.meta,\n );\n },\n getOptions: ctx.getOptions,\n getTree: ctx.getTree,\n addInterceptor: (method, fn) => {\n throwIfDisposed(ctx.isDisposed);\n let list = ctx.interceptors.get(method);\n\n if (!list) {\n list = [];\n ctx.interceptors.set(method, list);\n }\n\n list.push(fn);\n\n return () => {\n const index = list.indexOf(fn);\n\n if (index !== -1) {\n list.splice(index, 1);\n }\n };\n },\n getRouteConfig: (name) => {\n const store = ctx.routeGetStore();\n\n if (!store.matcher.hasRoute(name)) {\n return;\n }\n\n return store.routeCustomFields[name];\n },\n extendRouter: (extensions: Record<string, unknown>) => {\n throwIfDisposed(ctx.isDisposed);\n\n const keys = Object.keys(extensions);\n\n for (const key of keys) {\n if (key in router) {\n throw new RouterError(errorCodes.PLUGIN_CONFLICT, {\n message: `Cannot extend router: property \"${key}\" already exists`,\n });\n }\n }\n\n for (const key of keys) {\n (router as Record<string, unknown>)[key] = extensions[key];\n }\n\n const extensionRecord = { keys };\n\n ctx.routerExtensions.push(extensionRecord);\n\n let removed = false;\n\n return () => {\n if (removed) {\n return;\n }\n\n removed = true;\n\n for (const key of extensionRecord.keys) {\n delete (router as Record<string, unknown>)[key];\n }\n\n const idx = ctx.routerExtensions.indexOf(extensionRecord);\n\n if (idx !== -1) {\n ctx.routerExtensions.splice(idx, 1);\n }\n };\n },\n };\n}\n","import { logger } from \"@real-router/logger\";\nimport { validateRouteName } from \"type-guards\";\n\nimport { throwIfDisposed } from \"./helpers\";\nimport { getInternals } from \"../internals\";\nimport {\n clearConfigEntries,\n removeFromDefinitions,\n sanitizeRoute,\n} from \"../namespaces/RoutesNamespace/helpers\";\nimport {\n clearRouteData,\n refreshForwardMap,\n registerAllRouteHandlers,\n} from \"../namespaces/RoutesNamespace/routesStore\";\nimport {\n throwIfInternalRoute,\n throwIfInternalRouteInArray,\n validateAddRouteArgs,\n validateClearRoutes,\n validateParentOption,\n validateRemoveRoute,\n validateRemoveRouteArgs,\n validateUpdateRoute,\n validateUpdateRouteBasicArgs,\n validateUpdateRoutePropertyTypes,\n} from \"../namespaces/RoutesNamespace/validators\";\n\nimport type { RoutesApi } from \"./types\";\nimport type { RouterInternals } from \"../internals\";\nimport type { RouteLifecycleNamespace, RouteConfig } from \"../namespaces\";\nimport type { RoutesStore } from \"../namespaces/RoutesNamespace\";\nimport type { GuardFnFactory, Route } from \"../types\";\nimport type {\n DefaultDependencies,\n ForwardToCallback,\n Params,\n Router,\n} from \"@real-router/types\";\nimport type { RouteDefinition, RouteTree } from \"route-tree\";\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Recursively finds a route definition by its full dotted name.\n */\nfunction findDefinition(\n definitions: RouteDefinition[],\n fullName: string,\n parentPrefix = \"\",\n): RouteDefinition | undefined {\n for (const def of definitions) {\n const currentFullName = parentPrefix\n ? `${parentPrefix}.${def.name}`\n : def.name;\n\n if (currentFullName === fullName) {\n return def;\n }\n\n if (def.children && fullName.startsWith(`${currentFullName}.`)) {\n return findDefinition(def.children, fullName, currentFullName);\n }\n }\n\n /* v8 ignore next -- @preserve: defensive return, callers validate route exists before calling */\n return undefined;\n}\n\n/**\n * Clears all config entries and lifecycle handlers for a removed route\n * (and all its descendants).\n */\nfunction clearRouteConfigurations<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n routeName: string,\n config: RouteConfig,\n routeCustomFields: Record<string, Record<string, unknown>>,\n lifecycleNamespace: RouteLifecycleNamespace<Dependencies>,\n): void {\n const shouldClear = (n: string): boolean =>\n n === routeName || n.startsWith(`${routeName}.`);\n\n clearConfigEntries(config.decoders, shouldClear);\n clearConfigEntries(config.encoders, shouldClear);\n clearConfigEntries(config.defaultParams, shouldClear);\n clearConfigEntries(config.forwardMap, shouldClear);\n clearConfigEntries(config.forwardFnMap, shouldClear);\n clearConfigEntries(routeCustomFields, shouldClear);\n\n // Clear forwardMap entries pointing TO the deleted route (or its descendants)\n clearConfigEntries(config.forwardMap, (key) =>\n shouldClear(config.forwardMap[key]),\n );\n\n // Clear lifecycle handlers\n const [canDeactivateFactories, canActivateFactories] =\n lifecycleNamespace.getFactories();\n\n for (const n of Object.keys(canActivateFactories)) {\n if (shouldClear(n)) {\n lifecycleNamespace.clearCanActivate(n);\n }\n }\n\n for (const n of Object.keys(canDeactivateFactories)) {\n if (shouldClear(n)) {\n lifecycleNamespace.clearCanDeactivate(n);\n }\n }\n}\n\n/**\n * Updates forwardTo for a route in config and returns the refreshed resolved\n * forward map (REPLACE semantics — caller must call ctx.setResolvedForwardMap).\n */\nfunction updateForwardTo<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n name: string,\n forwardTo: string | ForwardToCallback<Dependencies> | null,\n config: RouteConfig,\n noValidate: boolean,\n refreshForwardMapFn: (\n config: RouteConfig,\n noValidate: boolean,\n ) => Record<string, string>,\n): Record<string, string> {\n if (forwardTo === null) {\n delete config.forwardMap[name];\n delete config.forwardFnMap[name];\n } else if (typeof forwardTo === \"string\") {\n delete config.forwardFnMap[name];\n config.forwardMap[name] = forwardTo;\n } else {\n delete config.forwardMap[name];\n config.forwardFnMap[name] = forwardTo;\n }\n\n return refreshForwardMapFn(config, noValidate);\n}\n\n/**\n * Builds a full Route object from a bare RouteDefinition by re-attaching\n * config entries and lifecycle factories.\n *\n * RECURSIVE — call with the factories tuple obtained ONCE from\n * `lifecycleNamespace.getFactories()` and pass it through to children.\n */\nfunction enrichRoute<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n routeDef: RouteDefinition,\n routeName: string,\n config: RouteConfig,\n factories: [\n Record<string, GuardFnFactory<Dependencies>>,\n Record<string, GuardFnFactory<Dependencies>>,\n ],\n): Route<Dependencies> {\n const route: Route<Dependencies> = {\n name: routeDef.name,\n path: routeDef.path,\n };\n\n const forwardToFn = config.forwardFnMap[routeName];\n const forwardToStr = config.forwardMap[routeName];\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (forwardToFn !== undefined) {\n route.forwardTo = forwardToFn;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n } else if (forwardToStr !== undefined) {\n route.forwardTo = forwardToStr;\n }\n\n if (routeName in config.defaultParams) {\n route.defaultParams = config.defaultParams[routeName];\n }\n\n if (routeName in config.decoders) {\n route.decodeParams = config.decoders[routeName];\n }\n\n if (routeName in config.encoders) {\n route.encodeParams = config.encoders[routeName];\n }\n\n const [canDeactivateFactories, canActivateFactories] = factories;\n\n if (routeName in canActivateFactories) {\n route.canActivate = canActivateFactories[routeName];\n }\n\n if (routeName in canDeactivateFactories) {\n route.canDeactivate = canDeactivateFactories[routeName];\n }\n\n if (routeDef.children) {\n route.children = routeDef.children.map((child) =>\n enrichRoute(child, `${routeName}.${child.name}`, config, factories),\n );\n }\n\n return route;\n}\n\n// ============================================================================\n// CRUD operations\n// ============================================================================\n\n/**\n * Adds one or more routes to the router.\n * Input already validated by facade.\n */\nfunction addRoutes<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n store: RoutesStore<Dependencies>,\n noValidate: boolean,\n routes: Route<Dependencies>[],\n parentName?: string,\n): void {\n if (parentName) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const parentDef = findDefinition(store.definitions, parentName)!;\n\n parentDef.children ??= [];\n\n for (const route of routes) {\n parentDef.children.push(sanitizeRoute(route));\n }\n } else {\n for (const route of routes) {\n store.definitions.push(sanitizeRoute(route));\n }\n }\n\n registerAllRouteHandlers(\n routes,\n store.config,\n store.routeCustomFields,\n store.pendingCanActivate,\n store.pendingCanDeactivate,\n store.depsStore,\n parentName ?? \"\",\n );\n\n store.treeOperations.commitTreeChanges(store, noValidate);\n}\n\n/**\n * Atomically replaces all routes with a new set.\n * Follows RFC 6-step semantics for HMR support.\n */\nfunction replaceRoutes<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n store: RoutesStore<Dependencies>,\n noValidate: boolean,\n routes: Route<Dependencies>[],\n ctx: RouterInternals<Dependencies>,\n currentPath: string | undefined,\n): void {\n // Step 2: Clear route data (WITHOUT tree rebuild)\n clearRouteData(store);\n\n // Step 3: Clear definition lifecycle handlers (preserve external guards)\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- guaranteed set after wiring\n store.lifecycleNamespace!.clearDefinitionGuards();\n\n // Step 4: Register new routes\n for (const route of routes) {\n store.definitions.push(sanitizeRoute(route));\n }\n\n registerAllRouteHandlers(\n routes,\n store.config,\n store.routeCustomFields,\n store.pendingCanActivate,\n store.pendingCanDeactivate,\n store.depsStore,\n \"\",\n );\n\n // Step 5: One tree rebuild\n store.treeOperations.commitTreeChanges(store, noValidate);\n\n // Step 6: Revalidate state\n if (currentPath !== undefined) {\n const revalidated = ctx.matchPath(currentPath, ctx.getOptions());\n\n if (revalidated) {\n ctx.setState(revalidated);\n } else {\n ctx.clearState();\n }\n }\n}\n\n/**\n * Removes a route and all its children.\n *\n * @returns true if removed, false if not found\n */\nfunction removeRoute<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n store: RoutesStore<Dependencies>,\n noValidate: boolean,\n name: string,\n): boolean {\n const wasRemoved = removeFromDefinitions(store.definitions, name);\n\n if (!wasRemoved) {\n return false;\n }\n\n clearRouteConfigurations(\n name,\n store.config,\n store.routeCustomFields,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n store.lifecycleNamespace!,\n );\n\n store.treeOperations.commitTreeChanges(store, noValidate);\n\n return true;\n}\n\n/**\n * Updates a route's configuration in place.\n */\nfunction updateRouteConfig<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n store: RoutesStore<Dependencies>,\n noValidate: boolean,\n name: string,\n updates: {\n forwardTo?: string | ForwardToCallback<Dependencies> | null | undefined;\n defaultParams?: Params | null | undefined;\n decodeParams?: ((params: Params) => Params) | null | undefined;\n encodeParams?: ((params: Params) => Params) | null | undefined;\n },\n): void {\n if (updates.forwardTo !== undefined) {\n store.resolvedForwardMap = updateForwardTo(\n name,\n updates.forwardTo,\n store.config,\n noValidate,\n refreshForwardMap,\n );\n }\n\n if (updates.defaultParams !== undefined) {\n if (updates.defaultParams === null) {\n delete store.config.defaultParams[name];\n } else {\n store.config.defaultParams[name] = updates.defaultParams;\n }\n }\n\n if (updates.decodeParams !== undefined) {\n if (updates.decodeParams === null) {\n delete store.config.decoders[name];\n } else {\n const decoder = updates.decodeParams;\n\n store.config.decoders[name] = (params: Params): Params =>\n (decoder(params) as Params | undefined) ?? params;\n }\n }\n\n if (updates.encodeParams !== undefined) {\n if (updates.encodeParams === null) {\n delete store.config.encoders[name];\n } else {\n const encoder = updates.encodeParams;\n\n store.config.encoders[name] = (params: Params): Params =>\n (encoder(params) as Params | undefined) ?? params;\n }\n }\n}\n\n/**\n * Gets a route by name with all its configuration.\n */\nfunction getRoute<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n store: RoutesStore<Dependencies>,\n name: string,\n): Route<Dependencies> | undefined {\n const segments = store.matcher.getSegmentsByName(name);\n\n if (!segments) {\n return undefined;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- segments is non-empty (checked above)\n const targetNode = segments.at(-1)! as RouteTree;\n const definition = store.treeOperations.nodeToDefinition(targetNode);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const factories = store.lifecycleNamespace!.getFactories();\n\n return enrichRoute(definition, name, store.config, factories);\n}\n\n// ============================================================================\n// API factory\n// ============================================================================\n\nexport function getRoutesApi<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(router: Router<Dependencies>): RoutesApi<Dependencies> {\n const ctx = getInternals(router);\n\n const store = ctx.routeGetStore();\n const noValidate = ctx.noValidate;\n\n return {\n add: (routes, options) => {\n throwIfDisposed(ctx.isDisposed);\n\n const routeArray = Array.isArray(routes) ? routes : [routes];\n const parentName = options?.parent;\n\n if (!ctx.noValidate) {\n if (parentName !== undefined) {\n validateParentOption(parentName);\n }\n\n throwIfInternalRouteInArray(routeArray, \"addRoute\");\n validateAddRouteArgs(routeArray);\n\n store.treeOperations.validateRoutes(\n routeArray,\n store.tree,\n store.config.forwardMap,\n parentName,\n );\n }\n\n addRoutes(store, noValidate, routeArray, parentName);\n },\n\n remove: (name) => {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateRemoveRouteArgs(name);\n throwIfInternalRoute(name, \"removeRoute\");\n }\n\n const canRemove = validateRemoveRoute(\n name,\n ctx.getStateName(),\n ctx.isTransitioning(),\n );\n\n if (!canRemove) {\n return;\n }\n\n const wasRemoved = removeRoute(store, noValidate, name);\n\n if (!wasRemoved) {\n logger.warn(\n \"router.removeRoute\",\n `Route \"${name}\" not found. No changes made.`,\n );\n }\n },\n\n update: (name, updates) => {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateUpdateRouteBasicArgs(name, updates);\n throwIfInternalRoute(name, \"updateRoute\");\n }\n\n const {\n forwardTo,\n defaultParams,\n decodeParams,\n encodeParams,\n canActivate,\n canDeactivate,\n } = updates;\n\n if (!ctx.noValidate) {\n validateUpdateRoutePropertyTypes(\n forwardTo,\n defaultParams,\n decodeParams,\n encodeParams,\n );\n }\n\n /* v8 ignore next 6 -- @preserve: race condition guard, mirrors Router.updateRoute() same-path guard tested via Router.ts unit tests */\n if (ctx.isTransitioning()) {\n logger.error(\n \"router.updateRoute\",\n `Updating route \"${name}\" while navigation is in progress. This may cause unexpected behavior.`,\n );\n }\n\n if (!ctx.noValidate) {\n validateUpdateRoute(\n name,\n forwardTo,\n (n) => store.matcher.hasRoute(n),\n store.matcher,\n store.config,\n );\n }\n\n updateRouteConfig(store, noValidate, name, {\n forwardTo,\n defaultParams,\n decodeParams,\n encodeParams,\n });\n\n if (canActivate !== undefined) {\n if (canActivate === null) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- guaranteed set after wiring\n store.lifecycleNamespace!.clearCanActivate(name);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- guaranteed set after wiring\n store.lifecycleNamespace!.addCanActivate(\n name,\n canActivate,\n noValidate,\n true,\n );\n }\n }\n\n if (canDeactivate !== undefined) {\n if (canDeactivate === null) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- guaranteed set after wiring\n store.lifecycleNamespace!.clearCanDeactivate(name);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- guaranteed set after wiring\n store.lifecycleNamespace!.addCanDeactivate(\n name,\n canDeactivate,\n noValidate,\n true,\n );\n }\n }\n },\n\n clear: () => {\n throwIfDisposed(ctx.isDisposed);\n\n const canClear = validateClearRoutes(ctx.isTransitioning());\n\n /* v8 ignore next 3 -- @preserve: race condition guard, mirrors Router.clearRoutes() same-path guard tested via validateClearRoutes unit tests */\n if (!canClear) {\n return;\n }\n\n store.treeOperations.resetStore(store);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- guaranteed set after wiring\n store.lifecycleNamespace!.clearAll();\n ctx.clearState();\n },\n\n has: (name) => {\n if (!ctx.noValidate) {\n validateRouteName(name, \"hasRoute\");\n }\n\n return store.matcher.hasRoute(name);\n },\n\n get: (name) => {\n if (!ctx.noValidate) {\n validateRouteName(name, \"getRoute\");\n }\n\n return getRoute(store, name);\n },\n\n replace: (routes) => {\n throwIfDisposed(ctx.isDisposed);\n\n const routeArray = Array.isArray(routes) ? routes : [routes];\n\n const canReplace = validateClearRoutes(ctx.isTransitioning());\n\n if (!canReplace) {\n return;\n }\n\n if (!ctx.noValidate) {\n throwIfInternalRouteInArray(routeArray, \"replaceRoutes\");\n validateAddRouteArgs(routeArray);\n store.treeOperations.validateRoutes(routeArray);\n }\n\n const currentPath = router.getState()?.path;\n\n replaceRoutes(store, noValidate, routeArray, ctx, currentPath);\n },\n };\n}\n","import { logger } from \"@real-router/logger\";\nimport { getTypeDescription } from \"type-guards\";\n\nimport { throwIfDisposed } from \"./helpers\";\nimport { computeThresholds } from \"../helpers\";\nimport { getInternals } from \"../internals\";\nimport {\n validateDependenciesObject,\n validateDependencyExists,\n validateDependencyLimit,\n validateDependencyName,\n validateSetDependencyArgs,\n} from \"../namespaces/DependenciesNamespace/validators\";\n\nimport type { DependenciesApi } from \"./types\";\nimport type { DependenciesStore } from \"../namespaces\";\nimport type { DefaultDependencies, Router } from \"@real-router/types\";\n\n// =============================================================================\n// Module-private CRUD functions\n// =============================================================================\n\nfunction checkDependencyCount(\n store: DependenciesStore,\n methodName: string,\n): void {\n const maxDependencies = store.limits.maxDependencies;\n\n if (maxDependencies === 0) {\n return;\n }\n\n const currentCount = Object.keys(store.dependencies).length;\n\n const { warn, error } = computeThresholds(maxDependencies);\n\n if (currentCount === warn) {\n logger.warn(\n `router.${methodName}`,\n `${warn} dependencies registered. ` + `Consider if all are necessary.`,\n );\n } else if (currentCount === error) {\n logger.error(\n `router.${methodName}`,\n `${error} dependencies registered! ` +\n `This indicates architectural problems. ` +\n `Hard limit at ${maxDependencies}.`,\n );\n } else if (currentCount >= maxDependencies) {\n throw new Error(\n `[router.${methodName}] Dependency limit exceeded (${maxDependencies}). ` +\n `Current: ${currentCount}. This is likely a bug in your code. ` +\n `If you genuinely need more dependencies, your architecture needs refactoring.`,\n );\n }\n}\n\nfunction setDependency(\n store: DependenciesStore,\n dependencyName: string,\n dependencyValue: unknown,\n): boolean {\n // undefined = \"don't set\" (feature for conditional setting)\n if (dependencyValue === undefined) {\n return false;\n }\n\n const isNewKey = !Object.hasOwn(store.dependencies, dependencyName);\n\n if (isNewKey) {\n // Only check limit when adding new keys (overwrites don't increase count)\n checkDependencyCount(store, \"setDependency\");\n } else {\n const oldValue = (store.dependencies as Record<string, unknown>)[\n dependencyName\n ];\n const isChanging = oldValue !== dependencyValue;\n // Special case for NaN idempotency (NaN !== NaN is always true)\n const bothAreNaN = Number.isNaN(oldValue) && Number.isNaN(dependencyValue);\n\n if (isChanging && !bothAreNaN) {\n logger.warn(\n \"router.setDependency\",\n \"Router dependency already exists and is being overwritten:\",\n dependencyName,\n );\n }\n }\n\n (store.dependencies as Record<string, unknown>)[dependencyName] =\n dependencyValue;\n\n return true;\n}\n\nfunction setMultipleDependencies(\n store: DependenciesStore,\n deps: Record<string, unknown>,\n): void {\n const overwrittenKeys: string[] = [];\n\n for (const key in deps) {\n if (deps[key] !== undefined) {\n if (Object.hasOwn(store.dependencies, key)) {\n overwrittenKeys.push(key);\n }\n\n (store.dependencies as Record<string, unknown>)[key] = deps[key];\n }\n }\n\n if (overwrittenKeys.length > 0) {\n logger.warn(\n \"router.setDependencies\",\n \"Overwritten:\",\n overwrittenKeys.join(\", \"),\n );\n }\n}\n\n// =============================================================================\n// Public API factory\n// =============================================================================\n\nexport function getDependenciesApi<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(router: Router<Dependencies>): DependenciesApi<Dependencies> {\n const ctx = getInternals(router);\n\n return {\n get: (name) => {\n if (!ctx.noValidate) {\n validateDependencyName(name, \"getDependency\");\n }\n\n const store = ctx.dependenciesGetStore();\n const value = (store.dependencies as Record<string, unknown>)[\n name as string\n ];\n\n if (!ctx.noValidate) {\n validateDependencyExists(value, name as string);\n }\n\n return value as Dependencies[typeof name];\n },\n getAll: () => ({ ...ctx.dependenciesGetStore().dependencies }),\n set: (name, value) => {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateSetDependencyArgs(name);\n }\n\n setDependency(ctx.dependenciesGetStore(), name as string, value);\n },\n setAll: (deps) => {\n throwIfDisposed(ctx.isDisposed);\n\n const store = ctx.dependenciesGetStore();\n\n if (!ctx.noValidate) {\n validateDependenciesObject(deps, \"setDependencies\");\n validateDependencyLimit(\n Object.keys(store.dependencies).length,\n Object.keys(deps).length,\n \"setDependencies\",\n store.limits.maxDependencies,\n );\n }\n\n setMultipleDependencies(store, deps as Record<string, unknown>);\n },\n remove: (name) => {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateDependencyName(name, \"removeDependency\");\n }\n\n const store = ctx.dependenciesGetStore();\n\n if (!Object.hasOwn(store.dependencies, name as string)) {\n logger.warn(\n `router.removeDependency`,\n `Attempted to remove non-existent dependency: \"${getTypeDescription(name)}\"`,\n );\n }\n\n delete (store.dependencies as Record<string, unknown>)[name as string];\n },\n reset: () => {\n throwIfDisposed(ctx.isDisposed);\n const store = ctx.dependenciesGetStore();\n\n store.dependencies = Object.create(null) as Partial<Dependencies>;\n },\n has: (name) => {\n if (!ctx.noValidate) {\n validateDependencyName(name, \"hasDependency\");\n }\n\n return Object.hasOwn(\n ctx.dependenciesGetStore().dependencies,\n name as string,\n );\n },\n };\n}\n","import { validateRouteName } from \"type-guards\";\n\nimport { throwIfDisposed } from \"./helpers\";\nimport { getInternals } from \"../internals\";\nimport { validateHandler } from \"../namespaces/RouteLifecycleNamespace/validators\";\n\nimport type { LifecycleApi } from \"./types\";\nimport type { DefaultDependencies, Router } from \"@real-router/types\";\n\nexport function getLifecycleApi<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(router: Router<Dependencies>): LifecycleApi<Dependencies> {\n const ctx = getInternals(router);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- guaranteed set after wiring\n const lifecycleNamespace = ctx.routeGetStore().lifecycleNamespace!;\n\n return {\n addActivateGuard(name, handler) {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateRouteName(name, \"addActivateGuard\");\n validateHandler(handler, \"addActivateGuard\");\n }\n\n lifecycleNamespace.addCanActivate(name, handler, ctx.noValidate);\n },\n\n addDeactivateGuard(name, handler) {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateRouteName(name, \"addDeactivateGuard\");\n validateHandler(handler, \"addDeactivateGuard\");\n }\n\n lifecycleNamespace.addCanDeactivate(name, handler, ctx.noValidate);\n },\n\n removeActivateGuard(name) {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateRouteName(name, \"removeActivateGuard\");\n }\n\n lifecycleNamespace.clearCanActivate(name);\n },\n\n removeDeactivateGuard(name) {\n throwIfDisposed(ctx.isDisposed);\n\n if (!ctx.noValidate) {\n validateRouteName(name, \"removeDeactivateGuard\");\n }\n\n lifecycleNamespace.clearCanDeactivate(name);\n },\n };\n}\n","import { routeTreeToDefinitions } from \"route-tree\";\nimport { getTypeDescription } from \"type-guards\";\n\nimport { errorCodes } from \"../constants\";\nimport { getInternals } from \"../internals\";\nimport { Router as RouterClass } from \"../Router\";\nimport { RouterError } from \"../RouterError\";\nimport { getLifecycleApi } from \"./getLifecycleApi\";\n\nimport type { Route } from \"../types\";\nimport type { DefaultDependencies, Router } from \"@real-router/types\";\n\nfunction validateCloneArgs(dependencies: unknown): void {\n if (dependencies === undefined) {\n return;\n }\n\n if (\n !(\n dependencies &&\n typeof dependencies === \"object\" &&\n dependencies.constructor === Object\n )\n ) {\n throw new TypeError(\n `[cloneRouter] Invalid dependencies: expected plain object or undefined, received ${getTypeDescription(dependencies)}`,\n );\n }\n\n for (const key in dependencies) {\n if (Object.getOwnPropertyDescriptor(dependencies, key)?.get) {\n throw new TypeError(\n `[cloneRouter] Getters not allowed in dependencies: \"${key}\"`,\n );\n }\n }\n}\n\nexport function cloneRouter<\n Dependencies extends DefaultDependencies = DefaultDependencies,\n>(\n router: Router<Dependencies>,\n dependencies?: Dependencies,\n): RouterClass<Dependencies> {\n const ctx = getInternals(router);\n\n if (ctx.isDisposed()) {\n throw new RouterError(errorCodes.ROUTER_DISPOSED);\n }\n\n if (!ctx.noValidate) {\n validateCloneArgs(dependencies);\n }\n\n // Get source store directly\n const sourceStore = ctx.routeGetStore();\n const routes = routeTreeToDefinitions(sourceStore.tree);\n const routeConfig = sourceStore.config;\n const resolvedForwardMap = sourceStore.resolvedForwardMap;\n const routeCustomFields = sourceStore.routeCustomFields;\n\n const options = ctx.cloneOptions();\n const sourceDeps = ctx.cloneDependencies();\n const [canDeactivateFactories, canActivateFactories] =\n ctx.getLifecycleFactories();\n const pluginFactories = ctx.getPluginFactories();\n\n const mergedDeps = {\n ...sourceDeps,\n ...dependencies,\n } as Dependencies;\n\n const newRouter = new RouterClass<Dependencies>(\n routes as Route<Dependencies>[],\n options,\n mergedDeps,\n );\n\n const lifecycle = getLifecycleApi(newRouter);\n\n for (const [name, handler] of Object.entries(canDeactivateFactories)) {\n lifecycle.addDeactivateGuard(name, handler);\n }\n\n for (const [name, handler] of Object.entries(canActivateFactories)) {\n lifecycle.addActivateGuard(name, handler);\n }\n\n if (pluginFactories.length > 0) {\n newRouter.usePlugin(...pluginFactories);\n }\n\n const newCtx = getInternals(newRouter);\n const newStore = newCtx.routeGetStore();\n\n // Apply cloned config directly to new store\n Object.assign(newStore.config.decoders, routeConfig.decoders);\n Object.assign(newStore.config.encoders, routeConfig.encoders);\n Object.assign(newStore.config.defaultParams, routeConfig.defaultParams);\n Object.assign(newStore.config.forwardMap, routeConfig.forwardMap);\n Object.assign(newStore.config.forwardFnMap, routeConfig.forwardFnMap);\n Object.assign(newStore.resolvedForwardMap, resolvedForwardMap);\n Object.assign(newStore.routeCustomFields, routeCustomFields);\n\n return newRouter;\n}\n"]}