{"version":3,"file":"routing-flags.mjs","sources":["../../../../src/lib/flags/integration/routing-flags.ts"],"sourcesContent":["/**\n * @fileoverview Routing feature flags for controlling route behavior.\n *\n * This module provides feature flag integration for the routing layer, enabling\n * dynamic control over routes, layouts, navigation, and prefetching.\n *\n * @module flags/integration/routing-flags\n *\n * @example\n * ```typescript\n * import {\n *   routingFlags,\n *   useRoutingFlagConfig,\n *   createFlaggedRoute,\n * } from '@/lib/flags/integration/routing-flags';\n *\n * // Check routing feature flags\n * if (routingFlags.isPrefetchEnabled()) {\n *   // Enable route prefetching\n * }\n *\n * // Use in component\n * function Navigation() {\n *   const config = useRoutingFlagConfig();\n *   // config.prefetchEnabled, config.lazyLoadEnabled, etc.\n * }\n * ```\n */\n\nimport { useMemo, type ComponentType, type ReactNode } from 'react';\nimport {\n  createLibraryIntegration,\n  useLibraryFlags,\n  integrationRegistry,\n  type LibraryIntegration,\n} from './library-integration';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Routing flag keys\n */\nexport const ROUTING_FLAG_KEYS = {\n  /** Enable route prefetching */\n  ROUTING_PREFETCH_ENABLED: 'routing-prefetch-enabled',\n  /** Enable lazy loading of routes */\n  ROUTING_LAZY_LOAD_ENABLED: 'routing-lazy-load-enabled',\n  /** Enable predictive navigation */\n  ROUTING_PREDICTIVE_ENABLED: 'routing-predictive-enabled',\n  /** Enable parallel routes */\n  ROUTING_PARALLEL_ENABLED: 'routing-parallel-enabled',\n  /** Enable route interception */\n  ROUTING_INTERCEPT_ENABLED: 'routing-intercept-enabled',\n  /** Enable route analytics */\n  ROUTING_ANALYTICS_ENABLED: 'routing-analytics-enabled',\n  /** Enable route guards */\n  ROUTING_GUARDS_ENABLED: 'routing-guards-enabled',\n  /** Enable route transitions */\n  ROUTING_TRANSITIONS_ENABLED: 'routing-transitions-enabled',\n  /** Enable scroll restoration */\n  ROUTING_SCROLL_RESTORE_ENABLED: 'routing-scroll-restore-enabled',\n  /** Enable breadcrumbs */\n  ROUTING_BREADCRUMBS_ENABLED: 'routing-breadcrumbs-enabled',\n  /** Use new router implementation */\n  ROUTING_ROUTER_V2: 'routing-router-v2',\n  /** Enable route caching */\n  ROUTING_CACHE_ENABLED: 'routing-cache-enabled',\n  /** Enable error boundaries per route */\n  ROUTING_ERROR_BOUNDARIES_ENABLED: 'routing-error-boundaries-enabled',\n  /** Enable loading states per route */\n  ROUTING_LOADING_STATES_ENABLED: 'routing-loading-states-enabled',\n} as const;\n\nexport type RoutingFlagKey = (typeof ROUTING_FLAG_KEYS)[keyof typeof ROUTING_FLAG_KEYS];\n\n/**\n * Routing flag configuration\n */\nexport interface RoutingFlagConfig {\n  /** Enable prefetching */\n  readonly prefetchEnabled: boolean;\n  /** Enable lazy loading */\n  readonly lazyLoadEnabled: boolean;\n  /** Enable predictive navigation */\n  readonly predictiveEnabled: boolean;\n  /** Enable parallel routes */\n  readonly parallelEnabled: boolean;\n  /** Enable route interception */\n  readonly interceptEnabled: boolean;\n  /** Enable route analytics */\n  readonly analyticsEnabled: boolean;\n  /** Enable route guards */\n  readonly guardsEnabled: boolean;\n  /** Enable route transitions */\n  readonly transitionsEnabled: boolean;\n  /** Enable scroll restoration */\n  readonly scrollRestoreEnabled: boolean;\n  /** Enable breadcrumbs */\n  readonly breadcrumbsEnabled: boolean;\n  /** Use router v2 */\n  readonly routerV2: boolean;\n  /** Enable route caching */\n  readonly cacheEnabled: boolean;\n  /** Enable error boundaries */\n  readonly errorBoundariesEnabled: boolean;\n  /** Enable loading states */\n  readonly loadingStatesEnabled: boolean;\n  /** Index signature for Record<string, unknown> compatibility */\n  [key: string]: unknown;\n}\n\n/**\n * Flagged route configuration\n */\nexport interface FlaggedRouteConfig {\n  /** Route path */\n  readonly path: string;\n  /** Feature flag key */\n  readonly flagKey: string;\n  /** Component when flag is enabled */\n  readonly enabledComponent: ComponentType;\n  /** Component when flag is disabled */\n  readonly fallbackComponent?: ComponentType;\n  /** Redirect path when flag is disabled */\n  readonly fallbackRedirect?: string;\n  /** Layout when flag is enabled */\n  readonly enabledLayout?: ComponentType<{ children: ReactNode }>;\n  /** Layout when flag is disabled */\n  readonly fallbackLayout?: ComponentType<{ children: ReactNode }>;\n}\n\n/**\n * Route visibility configuration\n */\nexport interface RouteVisibilityConfig {\n  /** Route path */\n  readonly path: string;\n  /** Feature flags that control visibility */\n  readonly flags: readonly {\n    key: string;\n    required: boolean;\n  }[];\n  /** Match strategy */\n  readonly strategy: 'all' | 'any';\n}\n\n// =============================================================================\n// Default Configuration\n// =============================================================================\n\n/**\n * Default routing flag configuration\n */\nexport const DEFAULT_ROUTING_FLAG_CONFIG: RoutingFlagConfig = {\n  prefetchEnabled: true,\n  lazyLoadEnabled: true,\n  predictiveEnabled: false,\n  parallelEnabled: false,\n  interceptEnabled: false,\n  analyticsEnabled: true,\n  guardsEnabled: true,\n  transitionsEnabled: false,\n  scrollRestoreEnabled: true,\n  breadcrumbsEnabled: true,\n  routerV2: false,\n  cacheEnabled: true,\n  errorBoundariesEnabled: true,\n  loadingStatesEnabled: true,\n};\n\n// =============================================================================\n// Library Integration\n// =============================================================================\n\n/**\n * Create routing flag integration\n */\nexport function createRoutingFlagIntegration(): LibraryIntegration<RoutingFlagConfig> {\n  return createLibraryIntegration<RoutingFlagConfig>({\n    libraryId: 'routing',\n    defaultConfig: DEFAULT_ROUTING_FLAG_CONFIG,\n    flagMappings: {\n      [ROUTING_FLAG_KEYS.ROUTING_PREFETCH_ENABLED]: 'prefetchEnabled',\n      [ROUTING_FLAG_KEYS.ROUTING_LAZY_LOAD_ENABLED]: 'lazyLoadEnabled',\n      [ROUTING_FLAG_KEYS.ROUTING_PREDICTIVE_ENABLED]: 'predictiveEnabled',\n      [ROUTING_FLAG_KEYS.ROUTING_PARALLEL_ENABLED]: 'parallelEnabled',\n      [ROUTING_FLAG_KEYS.ROUTING_INTERCEPT_ENABLED]: 'interceptEnabled',\n      [ROUTING_FLAG_KEYS.ROUTING_ANALYTICS_ENABLED]: 'analyticsEnabled',\n      [ROUTING_FLAG_KEYS.ROUTING_GUARDS_ENABLED]: 'guardsEnabled',\n      [ROUTING_FLAG_KEYS.ROUTING_TRANSITIONS_ENABLED]: 'transitionsEnabled',\n      [ROUTING_FLAG_KEYS.ROUTING_SCROLL_RESTORE_ENABLED]: 'scrollRestoreEnabled',\n      [ROUTING_FLAG_KEYS.ROUTING_BREADCRUMBS_ENABLED]: 'breadcrumbsEnabled',\n      [ROUTING_FLAG_KEYS.ROUTING_ROUTER_V2]: 'routerV2',\n      [ROUTING_FLAG_KEYS.ROUTING_CACHE_ENABLED]: 'cacheEnabled',\n      [ROUTING_FLAG_KEYS.ROUTING_ERROR_BOUNDARIES_ENABLED]: 'errorBoundariesEnabled',\n      [ROUTING_FLAG_KEYS.ROUTING_LOADING_STATES_ENABLED]: 'loadingStatesEnabled',\n    },\n    onConfigChange: (config, changedFlags) => {\n      console.info('[Routing Flags] Config changed:', changedFlags, config);\n    },\n  });\n}\n\n// Initialize and register the routing integration\nconst routingIntegration = createRoutingFlagIntegration();\nintegrationRegistry.register(routingIntegration);\n\n// =============================================================================\n// Routing Flag Helpers\n// =============================================================================\n\n/**\n * Routing flags helper class\n */\nclass RoutingFlagsHelper {\n  setFlagGetter(getter: (flagKey: string) => boolean): void {\n    this.getFlag = getter;\n  }\n\n  isPrefetchEnabled(): boolean {\n    return this.getFlag(ROUTING_FLAG_KEYS.ROUTING_PREFETCH_ENABLED);\n  }\n\n  isLazyLoadEnabled(): boolean {\n    return this.getFlag(ROUTING_FLAG_KEYS.ROUTING_LAZY_LOAD_ENABLED);\n  }\n\n  isPredictiveEnabled(): boolean {\n    return this.getFlag(ROUTING_FLAG_KEYS.ROUTING_PREDICTIVE_ENABLED);\n  }\n\n  isParallelEnabled(): boolean {\n    return this.getFlag(ROUTING_FLAG_KEYS.ROUTING_PARALLEL_ENABLED);\n  }\n\n  isInterceptEnabled(): boolean {\n    return this.getFlag(ROUTING_FLAG_KEYS.ROUTING_INTERCEPT_ENABLED);\n  }\n\n  isAnalyticsEnabled(): boolean {\n    return this.getFlag(ROUTING_FLAG_KEYS.ROUTING_ANALYTICS_ENABLED);\n  }\n\n  isGuardsEnabled(): boolean {\n    return this.getFlag(ROUTING_FLAG_KEYS.ROUTING_GUARDS_ENABLED);\n  }\n\n  isTransitionsEnabled(): boolean {\n    return this.getFlag(ROUTING_FLAG_KEYS.ROUTING_TRANSITIONS_ENABLED);\n  }\n\n  isScrollRestoreEnabled(): boolean {\n    return this.getFlag(ROUTING_FLAG_KEYS.ROUTING_SCROLL_RESTORE_ENABLED);\n  }\n\n  isBreadcrumbsEnabled(): boolean {\n    return this.getFlag(ROUTING_FLAG_KEYS.ROUTING_BREADCRUMBS_ENABLED);\n  }\n\n  isRouterV2Enabled(): boolean {\n    return this.getFlag(ROUTING_FLAG_KEYS.ROUTING_ROUTER_V2);\n  }\n\n  isCacheEnabled(): boolean {\n    return this.getFlag(ROUTING_FLAG_KEYS.ROUTING_CACHE_ENABLED);\n  }\n\n  isErrorBoundariesEnabled(): boolean {\n    return this.getFlag(ROUTING_FLAG_KEYS.ROUTING_ERROR_BOUNDARIES_ENABLED);\n  }\n\n  isLoadingStatesEnabled(): boolean {\n    return this.getFlag(ROUTING_FLAG_KEYS.ROUTING_LOADING_STATES_ENABLED);\n  }\n\n  getAllFlags(): Record<RoutingFlagKey, boolean> {\n    return {\n      [ROUTING_FLAG_KEYS.ROUTING_PREFETCH_ENABLED]: this.isPrefetchEnabled(),\n      [ROUTING_FLAG_KEYS.ROUTING_LAZY_LOAD_ENABLED]: this.isLazyLoadEnabled(),\n      [ROUTING_FLAG_KEYS.ROUTING_PREDICTIVE_ENABLED]: this.isPredictiveEnabled(),\n      [ROUTING_FLAG_KEYS.ROUTING_PARALLEL_ENABLED]: this.isParallelEnabled(),\n      [ROUTING_FLAG_KEYS.ROUTING_INTERCEPT_ENABLED]: this.isInterceptEnabled(),\n      [ROUTING_FLAG_KEYS.ROUTING_ANALYTICS_ENABLED]: this.isAnalyticsEnabled(),\n      [ROUTING_FLAG_KEYS.ROUTING_GUARDS_ENABLED]: this.isGuardsEnabled(),\n      [ROUTING_FLAG_KEYS.ROUTING_TRANSITIONS_ENABLED]: this.isTransitionsEnabled(),\n      [ROUTING_FLAG_KEYS.ROUTING_SCROLL_RESTORE_ENABLED]: this.isScrollRestoreEnabled(),\n      [ROUTING_FLAG_KEYS.ROUTING_BREADCRUMBS_ENABLED]: this.isBreadcrumbsEnabled(),\n      [ROUTING_FLAG_KEYS.ROUTING_ROUTER_V2]: this.isRouterV2Enabled(),\n      [ROUTING_FLAG_KEYS.ROUTING_CACHE_ENABLED]: this.isCacheEnabled(),\n      [ROUTING_FLAG_KEYS.ROUTING_ERROR_BOUNDARIES_ENABLED]: this.isErrorBoundariesEnabled(),\n      [ROUTING_FLAG_KEYS.ROUTING_LOADING_STATES_ENABLED]: this.isLoadingStatesEnabled(),\n    };\n  }\n\n  private getFlag: (flagKey: string) => boolean = () => false;\n}\n\n/**\n * Global routing flags helper instance\n */\nexport const routingFlags = new RoutingFlagsHelper();\n\n// =============================================================================\n// React Hooks\n// =============================================================================\n\n/**\n * Hook to get routing flag configuration\n */\nexport function useRoutingFlagConfig(): RoutingFlagConfig {\n  const config = useLibraryFlags<RoutingFlagConfig>('routing');\n  return config ?? DEFAULT_ROUTING_FLAG_CONFIG;\n}\n\n/**\n * Hook to check a specific routing flag\n */\nexport function useRoutingFlag(flagKey: RoutingFlagKey): boolean {\n  const config = useRoutingFlagConfig();\n\n  return useMemo(() => {\n    switch (flagKey) {\n      case ROUTING_FLAG_KEYS.ROUTING_PREFETCH_ENABLED:\n        return config.prefetchEnabled;\n      case ROUTING_FLAG_KEYS.ROUTING_LAZY_LOAD_ENABLED:\n        return config.lazyLoadEnabled;\n      case ROUTING_FLAG_KEYS.ROUTING_PREDICTIVE_ENABLED:\n        return config.predictiveEnabled;\n      case ROUTING_FLAG_KEYS.ROUTING_PARALLEL_ENABLED:\n        return config.parallelEnabled;\n      case ROUTING_FLAG_KEYS.ROUTING_INTERCEPT_ENABLED:\n        return config.interceptEnabled;\n      case ROUTING_FLAG_KEYS.ROUTING_ANALYTICS_ENABLED:\n        return config.analyticsEnabled;\n      case ROUTING_FLAG_KEYS.ROUTING_GUARDS_ENABLED:\n        return config.guardsEnabled;\n      case ROUTING_FLAG_KEYS.ROUTING_TRANSITIONS_ENABLED:\n        return config.transitionsEnabled;\n      case ROUTING_FLAG_KEYS.ROUTING_SCROLL_RESTORE_ENABLED:\n        return config.scrollRestoreEnabled;\n      case ROUTING_FLAG_KEYS.ROUTING_BREADCRUMBS_ENABLED:\n        return config.breadcrumbsEnabled;\n      case ROUTING_FLAG_KEYS.ROUTING_ROUTER_V2:\n        return config.routerV2;\n      case ROUTING_FLAG_KEYS.ROUTING_CACHE_ENABLED:\n        return config.cacheEnabled;\n      case ROUTING_FLAG_KEYS.ROUTING_ERROR_BOUNDARIES_ENABLED:\n        return config.errorBoundariesEnabled;\n      case ROUTING_FLAG_KEYS.ROUTING_LOADING_STATES_ENABLED:\n        return config.loadingStatesEnabled;\n      default:\n        return false;\n    }\n  }, [config, flagKey]);\n}\n\n// =============================================================================\n// Route Management\n// =============================================================================\n\nconst flaggedRoutes = new Map<string, FlaggedRouteConfig>();\nconst routeVisibility = new Map<string, RouteVisibilityConfig>();\n\n/**\n * Register a flagged route\n */\nexport function registerFlaggedRoute(config: FlaggedRouteConfig): void {\n  flaggedRoutes.set(config.path, config);\n}\n\n/**\n * Get component for a flagged route\n */\nexport function getFlaggedRouteComponent(\n  path: string,\n  getFlag: (flagKey: string) => boolean\n): ComponentType | null {\n  const config = flaggedRoutes.get(path);\n  if (!config) return null;\n\n  const isEnabled = getFlag(config.flagKey);\n  return isEnabled ? config.enabledComponent : (config.fallbackComponent ?? null);\n}\n\n/**\n * Get redirect for a flagged route\n */\nexport function getFlaggedRouteRedirect(\n  path: string,\n  getFlag: (flagKey: string) => boolean\n): string | null {\n  const config = flaggedRoutes.get(path);\n  if (!config) return null;\n\n  const isEnabled = getFlag(config.flagKey);\n  return !isEnabled ? (config.fallbackRedirect ?? null) : null;\n}\n\n/**\n * Register route visibility configuration\n */\nexport function registerRouteVisibility(config: RouteVisibilityConfig): void {\n  routeVisibility.set(config.path, config);\n}\n\n/**\n * Check if a route is visible based on flags\n */\nexport function isRouteVisible(\n  path: string,\n  getFlag: (flagKey: string) => boolean\n): boolean {\n  const config = routeVisibility.get(path);\n  if (!config) return true;\n\n  if (config.strategy === 'all') {\n    return config.flags.every((f) => {\n      const flagValue = getFlag(f.key);\n      return f.required ? flagValue : true;\n    });\n  } else {\n    return config.flags.some((f) => {\n      const flagValue = getFlag(f.key);\n      return f.required ? flagValue : true;\n    });\n  }\n}\n\n/**\n * Get all visible routes\n */\nexport function getVisibleRoutes(\n  routes: string[],\n  getFlag: (flagKey: string) => boolean\n): string[] {\n  return routes.filter((path) => isRouteVisible(path, getFlag));\n}\n\n/**\n * Clear all registered flagged routes\n */\nexport function clearFlaggedRoutes(): void {\n  flaggedRoutes.clear();\n  routeVisibility.clear();\n}\n\n// =============================================================================\n// Navigation Flag Utilities\n// =============================================================================\n\n/**\n * Create flagged navigation links\n */\nexport function createFlaggedNavLinks(\n  links: Array<{\n    path: string;\n    label: string;\n    icon?: ReactNode;\n    flagKey?: string;\n  }>,\n  getFlag: (flagKey: string) => boolean\n): Array<{\n  path: string;\n  label: string;\n  icon?: ReactNode;\n  visible: boolean;\n}> {\n  return links.map((link) => ({\n    ...link,\n    visible: link.flagKey != null && link.flagKey !== '' ? getFlag(link.flagKey) : true,\n  }));\n}\n\n/**\n * Hook for flagged navigation\n */\nexport function useFlaggedNavigation(\n  links: Array<{\n    path: string;\n    label: string;\n    icon?: ReactNode;\n    flagKey?: string;\n  }>,\n  getFlag: (flagKey: string) => boolean\n): Array<{\n  path: string;\n  label: string;\n  icon?: ReactNode;\n}> {\n  return useMemo(() => {\n    return links\n      .filter((link) => link.flagKey == null || link.flagKey === '' || getFlag(link.flagKey))\n      .map(({ path, label, icon }) => ({ path, label, icon }));\n  }, [links, getFlag]);\n}\n\n// =============================================================================\n// Exports\n// =============================================================================\n\nexport { routingIntegration };\n"],"names":["ROUTING_FLAG_KEYS","DEFAULT_ROUTING_FLAG_CONFIG","createRoutingFlagIntegration","createLibraryIntegration","config","changedFlags","routingIntegration","integrationRegistry","RoutingFlagsHelper","getter","routingFlags","useRoutingFlagConfig","useLibraryFlags","useRoutingFlag","flagKey","useMemo","flaggedRoutes","routeVisibility","registerFlaggedRoute","getFlaggedRouteComponent","path","getFlag","getFlaggedRouteRedirect","registerRouteVisibility","isRouteVisible","f","flagValue","getVisibleRoutes","routes","clearFlaggedRoutes","createFlaggedNavLinks","links","link","useFlaggedNavigation","label","icon"],"mappings":"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"}