@vlian/framework 1.2.57 → 1.2.59
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.
- package/README.md +15 -3
- package/dist/analytics/index.cjs +0 -2
- package/dist/analytics/index.js +1 -3
- package/dist/analytics.umd.js +8 -208
- package/dist/components/LocaleSwitch.cjs +0 -2
- package/dist/components/LocaleSwitch.js +1 -103
- package/dist/components/ThemeSwitch.cjs +0 -2
- package/dist/components/ThemeSwitch.js +1 -102
- package/dist/components/index.cjs +0 -2
- package/dist/components/index.js +1 -4
- package/dist/components/persistence.cjs +0 -2
- package/dist/components/persistence.js +1 -39
- package/dist/core/Test.cjs +0 -2
- package/dist/core/Test.js +1 -15
- package/dist/core/app/AppContext.cjs +0 -2
- package/dist/core/app/AppContext.js +1 -339
- package/dist/core/app/AppContext.types.cjs +0 -2
- package/dist/core/app/AppContext.types.js +1 -5
- package/dist/core/app/BasicLayout.cjs +0 -2
- package/dist/core/app/BasicLayout.js +1 -74
- package/dist/core/app/DefaultApp.cjs +0 -2
- package/dist/core/app/DefaultApp.js +1 -143
- package/dist/core/app/index.cjs +0 -2
- package/dist/core/app/index.js +1 -7
- package/dist/core/config/AppConfig.cjs +0 -2
- package/dist/core/config/AppConfig.js +1 -133
- package/dist/core/config/ConfigLoader.cjs +0 -2
- package/dist/core/config/ConfigLoader.js +1 -311
- package/dist/core/config/ConfigValidator.cjs +0 -2
- package/dist/core/config/ConfigValidator.js +2 -121
- package/dist/core/config/index.cjs +0 -2
- package/dist/core/config/index.js +1 -7
- package/dist/core/dev/DevTools.cjs +0 -2
- package/dist/core/dev/DevTools.js +1 -210
- package/dist/core/error/ErrorBoundary.cjs +0 -2
- package/dist/core/error/ErrorBoundary.js +1 -399
- package/dist/core/error/ErrorHandler.cjs +0 -2
- package/dist/core/error/ErrorHandler.js +1 -261
- package/dist/core/error/index.cjs +0 -2
- package/dist/core/error/index.js +1 -6
- package/dist/core/event/AppEventBus.cjs +0 -2
- package/dist/core/event/AppEventBus.js +1 -438
- package/dist/core/event/frameworkEvents.cjs +0 -2
- package/dist/core/event/frameworkEvents.js +1 -135
- package/dist/core/event/hooks.cjs +0 -2
- package/dist/core/event/hooks.js +1 -95
- package/dist/core/event/index.cjs +0 -2
- package/dist/core/event/index.js +1 -10
- package/dist/core/event/types.cjs +0 -2
- package/dist/core/event/types.js +1 -56
- package/dist/core/event/useEventBus.cjs +0 -2
- package/dist/core/event/useEventBus.js +1 -39
- package/dist/core/index.cjs +0 -2
- package/dist/core/index.js +1 -69
- package/dist/core/initialization/InitializationErrorThrower.cjs +0 -2
- package/dist/core/initialization/InitializationErrorThrower.js +1 -30
- package/dist/core/initialization/index.cjs +0 -2
- package/dist/core/initialization/index.js +1 -7
- package/dist/core/initialization/initialization.cjs +0 -2
- package/dist/core/initialization/initialization.js +1 -78
- package/dist/core/initialization/initializationErrorState.cjs +0 -2
- package/dist/core/initialization/initializationErrorState.js +1 -60
- package/dist/core/kernel/defaultAdapters.cjs +0 -2
- package/dist/core/kernel/defaultAdapters.js +1 -176
- package/dist/core/kernel/errors.cjs +0 -2
- package/dist/core/kernel/errors.js +1 -53
- package/dist/core/kernel/index.cjs +0 -2
- package/dist/core/kernel/index.js +1 -4
- package/dist/core/kernel/startKernel.cjs +0 -2
- package/dist/core/kernel/startKernel.js +1 -192
- package/dist/core/kernel/types.cjs +0 -2
- package/dist/core/kernel/types.js +1 -3
- package/dist/core/middleware.cjs +0 -2
- package/dist/core/middleware.js +1 -61
- package/dist/core/plugin/PluginEventBus.cjs +0 -2
- package/dist/core/plugin/PluginEventBus.js +1 -286
- package/dist/core/plugin/PluginSandbox.cjs +0 -2
- package/dist/core/plugin/PluginSandbox.js +1 -125
- package/dist/core/plugin.cjs +0 -2
- package/dist/core/plugin.js +1 -438
- package/dist/core/router/RouterManager.cjs +0 -2
- package/dist/core/router/RouterManager.js +1 -272
- package/dist/core/router/adapter/AdapterManager.cjs +0 -2
- package/dist/core/router/adapter/AdapterManager.js +1 -221
- package/dist/core/router/adapter/index.cjs +0 -2
- package/dist/core/router/adapter/index.js +1 -7
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs +0 -2
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.js +1 -116
- package/dist/core/router/adapter/react-router/index.cjs +0 -2
- package/dist/core/router/adapter/react-router/index.js +1 -5
- package/dist/core/router/adapter/types.cjs +0 -2
- package/dist/core/router/adapter/types.js +1 -7
- package/dist/core/router/dev/RouterDevTools.cjs +0 -2
- package/dist/core/router/dev/RouterDevTools.js +1 -211
- package/dist/core/router/dev/index.cjs +0 -2
- package/dist/core/router/dev/index.js +1 -5
- package/dist/core/router/dynamic/DynamicRouteManager.cjs +0 -2
- package/dist/core/router/dynamic/DynamicRouteManager.js +1 -179
- package/dist/core/router/dynamic/index.cjs +0 -2
- package/dist/core/router/dynamic/index.js +1 -5
- package/dist/core/router/errors/RouterError.cjs +0 -2
- package/dist/core/router/errors/RouterError.js +1 -48
- package/dist/core/router/errors/index.cjs +0 -2
- package/dist/core/router/errors/index.js +1 -5
- package/dist/core/router/index.cjs +0 -2
- package/dist/core/router/index.js +1 -32
- package/dist/core/router/lifecycle/RouterLifecycleManager.cjs +0 -2
- package/dist/core/router/lifecycle/RouterLifecycleManager.js +1 -130
- package/dist/core/router/lifecycle/index.cjs +0 -2
- package/dist/core/router/lifecycle/index.js +1 -5
- package/dist/core/router/middleware/RouterMiddlewareManager.cjs +0 -2
- package/dist/core/router/middleware/RouterMiddlewareManager.js +1 -179
- package/dist/core/router/middleware/auth.cjs +0 -2
- package/dist/core/router/middleware/auth.js +1 -63
- package/dist/core/router/middleware/index.cjs +0 -2
- package/dist/core/router/middleware/index.js +1 -7
- package/dist/core/router/middleware/types.cjs +0 -2
- package/dist/core/router/middleware/types.js +1 -7
- package/dist/core/router/monitoring/RouterMonitoring.cjs +0 -2
- package/dist/core/router/monitoring/RouterMonitoring.js +1 -213
- package/dist/core/router/monitoring/index.cjs +0 -2
- package/dist/core/router/monitoring/index.js +1 -5
- package/dist/core/router/navigation/RouterNavigation.cjs +0 -2
- package/dist/core/router/navigation/RouterNavigation.js +1 -192
- package/dist/core/router/navigation/index.cjs +0 -2
- package/dist/core/router/navigation/index.js +1 -5
- package/dist/core/router/performance/RouteCache.cjs +0 -2
- package/dist/core/router/performance/RouteCache.js +1 -291
- package/dist/core/router/performance/RoutePreloader.cjs +0 -2
- package/dist/core/router/performance/RoutePreloader.js +1 -277
- package/dist/core/router/performance/index.cjs +0 -2
- package/dist/core/router/performance/index.js +1 -6
- package/dist/core/router/plugin/RouterPluginManager.cjs +0 -2
- package/dist/core/router/plugin/RouterPluginManager.js +1 -248
- package/dist/core/router/plugin/index.cjs +0 -2
- package/dist/core/router/plugin/index.js +1 -6
- package/dist/core/router/plugin/types.cjs +0 -2
- package/dist/core/router/plugin/types.js +1 -33
- package/dist/core/router/types.cjs +0 -2
- package/dist/core/router/types.js +1 -5
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs +0 -2
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js +1 -121
- package/dist/core/router/utils/adapters/react-router/transform.cjs +0 -2
- package/dist/core/router/utils/adapters/react-router/transform.js +1 -242
- package/dist/core/router/utils/transform.cjs +0 -2
- package/dist/core/router/utils/transform.js +1 -791
- package/dist/core/router/validation/RouterConfigValidator.cjs +0 -2
- package/dist/core/router/validation/RouterConfigValidator.js +2 -77
- package/dist/core/router/validation/index.cjs +0 -2
- package/dist/core/router/validation/index.js +1 -6
- package/dist/core/router/validation/schema.cjs +0 -2
- package/dist/core/router/validation/schema.js +1 -151
- package/dist/core/router/version/RouteVersionManager.cjs +0 -2
- package/dist/core/router/version/RouteVersionManager.js +1 -191
- package/dist/core/router/version/index.cjs +0 -2
- package/dist/core/router/version/index.js +1 -5
- package/dist/core/splash/SplashScreen.cjs +0 -2
- package/dist/core/splash/SplashScreen.js +1 -293
- package/dist/core/splash/index.cjs +0 -2
- package/dist/core/splash/index.js +1 -6
- package/dist/core/splash/splashScreenUtils.cjs +0 -2
- package/dist/core/splash/splashScreenUtils.js +1 -30
- package/dist/core/startup/AppInstance.cjs +0 -2
- package/dist/core/startup/AppInstance.js +1 -226
- package/dist/core/startup/environment.cjs +0 -2
- package/dist/core/startup/environment.js +1 -154
- package/dist/core/startup/index.cjs +0 -2
- package/dist/core/startup/index.js +1 -8
- package/dist/core/startup/initializeServices.cjs +0 -2
- package/dist/core/startup/initializeServices.js +1 -188
- package/dist/core/startup/performanceTracker.cjs +0 -2
- package/dist/core/startup/performanceTracker.js +1 -167
- package/dist/core/startup/renderApp.cjs +0 -2
- package/dist/core/startup/renderApp.js +1 -267
- package/dist/core/startup/startApp.cjs +0 -2
- package/dist/core/startup/startApp.js +1 -315
- package/dist/core/types.cjs +0 -2
- package/dist/core/types.js +1 -5
- package/dist/index.cjs +0 -2
- package/dist/index.js +1 -11
- package/dist/index.umd.cjs +0 -2
- package/dist/index.umd.js +362 -13233
- package/dist/kernel/constants.cjs +0 -2
- package/dist/kernel/constants.js +1 -43
- package/dist/kernel/index.cjs +0 -2
- package/dist/kernel/index.js +1 -4
- package/dist/kernel/kernel.cjs +0 -2
- package/dist/kernel/kernel.js +1 -273
- package/dist/kernel/manager/cacheManager.cjs +0 -2
- package/dist/kernel/manager/cacheManager.js +1 -38
- package/dist/kernel/manager/i18n/I18nManager.cjs +0 -2
- package/dist/kernel/manager/i18n/I18nManager.js +1 -83
- package/dist/kernel/manager/i18n/i18n.persistence.cjs +0 -2
- package/dist/kernel/manager/i18n/i18n.persistence.js +1 -41
- package/dist/kernel/manager/i18n/i18n.schema.cjs +0 -2
- package/dist/kernel/manager/i18n/i18n.schema.js +1 -64
- package/dist/kernel/manager/i18n/index.cjs +0 -2
- package/dist/kernel/manager/i18n/index.js +1 -3
- package/dist/kernel/manager/i18nManager.cjs +0 -2
- package/dist/kernel/manager/i18nManager.js +1 -3
- package/dist/kernel/manager/index.cjs +0 -2
- package/dist/kernel/manager/index.js +1 -6
- package/dist/kernel/manager/logger/LoggerManager.cjs +0 -2
- package/dist/kernel/manager/logger/LoggerManager.js +1 -99
- package/dist/kernel/manager/logger/index.cjs +0 -2
- package/dist/kernel/manager/logger/index.js +1 -3
- package/dist/kernel/manager/logger/logger.persistence.cjs +0 -2
- package/dist/kernel/manager/logger/logger.persistence.js +1 -43
- package/dist/kernel/manager/logger/logger.schema.cjs +0 -2
- package/dist/kernel/manager/logger/logger.schema.js +1 -55
- package/dist/kernel/manager/loggerManager.cjs +0 -2
- package/dist/kernel/manager/loggerManager.js +1 -3
- package/dist/kernel/manager/theme/ThemeManager.cjs +0 -2
- package/dist/kernel/manager/theme/ThemeManager.js +1 -76
- package/dist/kernel/manager/theme/index.cjs +0 -2
- package/dist/kernel/manager/theme/index.js +1 -3
- package/dist/kernel/manager/theme/theme.dom.cjs +0 -2
- package/dist/kernel/manager/theme/theme.dom.js +1 -45
- package/dist/kernel/manager/theme/theme.persistence.cjs +0 -2
- package/dist/kernel/manager/theme/theme.persistence.js +1 -38
- package/dist/kernel/manager/theme/theme.schema.cjs +0 -2
- package/dist/kernel/manager/theme/theme.schema.js +1 -97
- package/dist/kernel/manager/themeManager.cjs +0 -2
- package/dist/kernel/manager/themeManager.js +1 -3
- package/dist/kernel/types.cjs +0 -2
- package/dist/kernel/types.js +1 -3
- package/dist/library/index.cjs +0 -2
- package/dist/library/index.js +1 -4
- package/dist/library/locale/index.cjs +0 -2
- package/dist/library/locale/index.js +1 -12
- package/dist/library/locale/langs/en-us/index.cjs +0 -2
- package/dist/library/locale/langs/en-us/index.js +1 -24
- package/dist/library/locale/langs/zh-cn/index.cjs +0 -2
- package/dist/library/locale/langs/zh-cn/index.js +1 -24
- package/dist/library/locale/types.cjs +0 -2
- package/dist/library/locale/types.js +1 -3
- package/dist/library/storage/cache.cjs +0 -2
- package/dist/library/storage/cache.js +1 -237
- package/dist/library/storage/encryption.cjs +0 -2
- package/dist/library/storage/encryption.js +1 -141
- package/dist/library/storage/index.cjs +0 -2
- package/dist/library/storage/index.js +1 -106
- package/dist/state/StateManager.cjs +0 -2
- package/dist/state/StateManager.js +1 -160
- package/dist/state/adapters/AdapterFactory.cjs +0 -2
- package/dist/state/adapters/AdapterFactory.js +1 -85
- package/dist/state/adapters/DefaultAdapter.cjs +0 -2
- package/dist/state/adapters/DefaultAdapter.js +1 -71
- package/dist/state/adapters/ReduxAdapter.cjs +0 -2
- package/dist/state/adapters/ReduxAdapter.js +1 -439
- package/dist/state/adapters/ZustandAdapter.cjs +0 -2
- package/dist/state/adapters/ZustandAdapter.js +1 -70
- package/dist/state/adapters/index.cjs +0 -2
- package/dist/state/adapters/index.js +1 -9
- package/dist/state/adapters/types.cjs +0 -2
- package/dist/state/adapters/types.js +1 -5
- package/dist/state/core/DerivedStateInstance.cjs +0 -2
- package/dist/state/core/DerivedStateInstance.js +1 -173
- package/dist/state/core/StateInstance.cjs +0 -2
- package/dist/state/core/StateInstance.js +1 -168
- package/dist/state/core/StateRegistry.cjs +0 -2
- package/dist/state/core/StateRegistry.js +1 -106
- package/dist/state/core/StateScope.cjs +0 -2
- package/dist/state/core/StateScope.js +1 -133
- package/dist/state/core/index.cjs +0 -2
- package/dist/state/core/index.js +1 -8
- package/dist/state/index.cjs +0 -2
- package/dist/state/index.js +1 -12
- package/dist/state/types.cjs +0 -2
- package/dist/state/types.js +1 -13
- package/dist/state.umd.js +22 -1395
- package/dist/types.cjs +0 -2
- package/dist/types.js +1 -3
- package/dist/utils/analytics.cjs +0 -2
- package/dist/utils/analytics.js +1 -204
- package/dist/utils/configSecurity.cjs +0 -2
- package/dist/utils/configSecurity.js +3 -176
- package/dist/utils/csrf.cjs +0 -2
- package/dist/utils/csrf.js +1 -3
- package/dist/utils/errors/ErrorCodes.cjs +0 -2
- package/dist/utils/errors/ErrorCodes.js +1 -3
- package/dist/utils/errors.cjs +0 -2
- package/dist/utils/errors.js +1 -18
- package/dist/utils/index.cjs +0 -2
- package/dist/utils/index.js +1 -48
- package/dist/utils/logger.cjs +0 -2
- package/dist/utils/logger.js +1 -3
- package/dist/utils/logger.types.cjs +0 -2
- package/dist/utils/logger.types.js +1 -3
- package/dist/utils/monitoring.cjs +0 -2
- package/dist/utils/monitoring.js +1 -3
- package/dist/utils/performance.cjs +0 -2
- package/dist/utils/performance.js +1 -3
- package/dist/utils/resourceLoader.cjs +0 -2
- package/dist/utils/resourceLoader.js +1 -3
- package/dist/utils/runtimeSecurity.cjs +0 -2
- package/dist/utils/runtimeSecurity.js +1 -3
- package/dist/utils/security.cjs +0 -2
- package/dist/utils/security.js +1 -3
- package/dist/utils/traceId.cjs +0 -2
- package/dist/utils/traceId.js +1 -3
- package/dist/utils/validation.cjs +0 -2
- package/dist/utils/validation.js +1 -3
- package/package.json +3 -4
- package/dist/analytics/index.cjs.map +0 -1
- package/dist/analytics/index.js.map +0 -1
- package/dist/analytics.umd.js.map +0 -1
- package/dist/components/LocaleSwitch.cjs.map +0 -1
- package/dist/components/LocaleSwitch.js.map +0 -1
- package/dist/components/ThemeSwitch.cjs.map +0 -1
- package/dist/components/ThemeSwitch.js.map +0 -1
- package/dist/components/index.cjs.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/components/persistence.cjs.map +0 -1
- package/dist/components/persistence.js.map +0 -1
- package/dist/core/Test.cjs.map +0 -1
- package/dist/core/Test.js.map +0 -1
- package/dist/core/app/AppContext.cjs.map +0 -1
- package/dist/core/app/AppContext.js.map +0 -1
- package/dist/core/app/AppContext.types.cjs.map +0 -1
- package/dist/core/app/AppContext.types.js.map +0 -1
- package/dist/core/app/BasicLayout.cjs.map +0 -1
- package/dist/core/app/BasicLayout.js.map +0 -1
- package/dist/core/app/DefaultApp.cjs.map +0 -1
- package/dist/core/app/DefaultApp.js.map +0 -1
- package/dist/core/app/index.cjs.map +0 -1
- package/dist/core/app/index.js.map +0 -1
- package/dist/core/config/AppConfig.cjs.map +0 -1
- package/dist/core/config/AppConfig.js.map +0 -1
- package/dist/core/config/ConfigLoader.cjs.map +0 -1
- package/dist/core/config/ConfigLoader.js.map +0 -1
- package/dist/core/config/ConfigValidator.cjs.map +0 -1
- package/dist/core/config/ConfigValidator.js.map +0 -1
- package/dist/core/config/index.cjs.map +0 -1
- package/dist/core/config/index.js.map +0 -1
- package/dist/core/dev/DevTools.cjs.map +0 -1
- package/dist/core/dev/DevTools.js.map +0 -1
- package/dist/core/error/ErrorBoundary.cjs.map +0 -1
- package/dist/core/error/ErrorBoundary.js.map +0 -1
- package/dist/core/error/ErrorHandler.cjs.map +0 -1
- package/dist/core/error/ErrorHandler.js.map +0 -1
- package/dist/core/error/index.cjs.map +0 -1
- package/dist/core/error/index.js.map +0 -1
- package/dist/core/event/AppEventBus.cjs.map +0 -1
- package/dist/core/event/AppEventBus.js.map +0 -1
- package/dist/core/event/frameworkEvents.cjs.map +0 -1
- package/dist/core/event/frameworkEvents.js.map +0 -1
- package/dist/core/event/hooks.cjs.map +0 -1
- package/dist/core/event/hooks.js.map +0 -1
- package/dist/core/event/index.cjs.map +0 -1
- package/dist/core/event/index.js.map +0 -1
- package/dist/core/event/types.cjs.map +0 -1
- package/dist/core/event/types.js.map +0 -1
- package/dist/core/event/useEventBus.cjs.map +0 -1
- package/dist/core/event/useEventBus.js.map +0 -1
- package/dist/core/index.cjs.map +0 -1
- package/dist/core/index.js.map +0 -1
- package/dist/core/initialization/InitializationErrorThrower.cjs.map +0 -1
- package/dist/core/initialization/InitializationErrorThrower.js.map +0 -1
- package/dist/core/initialization/index.cjs.map +0 -1
- package/dist/core/initialization/index.js.map +0 -1
- package/dist/core/initialization/initialization.cjs.map +0 -1
- package/dist/core/initialization/initialization.js.map +0 -1
- package/dist/core/initialization/initializationErrorState.cjs.map +0 -1
- package/dist/core/initialization/initializationErrorState.js.map +0 -1
- package/dist/core/kernel/defaultAdapters.cjs.map +0 -1
- package/dist/core/kernel/defaultAdapters.js.map +0 -1
- package/dist/core/kernel/errors.cjs.map +0 -1
- package/dist/core/kernel/errors.js.map +0 -1
- package/dist/core/kernel/index.cjs.map +0 -1
- package/dist/core/kernel/index.js.map +0 -1
- package/dist/core/kernel/startKernel.cjs.map +0 -1
- package/dist/core/kernel/startKernel.js.map +0 -1
- package/dist/core/kernel/types.cjs.map +0 -1
- package/dist/core/kernel/types.js.map +0 -1
- package/dist/core/middleware.cjs.map +0 -1
- package/dist/core/middleware.js.map +0 -1
- package/dist/core/plugin/PluginEventBus.cjs.map +0 -1
- package/dist/core/plugin/PluginEventBus.js.map +0 -1
- package/dist/core/plugin/PluginSandbox.cjs.map +0 -1
- package/dist/core/plugin/PluginSandbox.js.map +0 -1
- package/dist/core/plugin.cjs.map +0 -1
- package/dist/core/plugin.js.map +0 -1
- package/dist/core/router/RouterManager.cjs.map +0 -1
- package/dist/core/router/RouterManager.js.map +0 -1
- package/dist/core/router/adapter/AdapterManager.cjs.map +0 -1
- package/dist/core/router/adapter/AdapterManager.js.map +0 -1
- package/dist/core/router/adapter/index.cjs.map +0 -1
- package/dist/core/router/adapter/index.js.map +0 -1
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs.map +0 -1
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.js.map +0 -1
- package/dist/core/router/adapter/react-router/index.cjs.map +0 -1
- package/dist/core/router/adapter/react-router/index.js.map +0 -1
- package/dist/core/router/adapter/types.cjs.map +0 -1
- package/dist/core/router/adapter/types.js.map +0 -1
- package/dist/core/router/dev/RouterDevTools.cjs.map +0 -1
- package/dist/core/router/dev/RouterDevTools.js.map +0 -1
- package/dist/core/router/dev/index.cjs.map +0 -1
- package/dist/core/router/dev/index.js.map +0 -1
- package/dist/core/router/dynamic/DynamicRouteManager.cjs.map +0 -1
- package/dist/core/router/dynamic/DynamicRouteManager.js.map +0 -1
- package/dist/core/router/dynamic/index.cjs.map +0 -1
- package/dist/core/router/dynamic/index.js.map +0 -1
- package/dist/core/router/errors/RouterError.cjs.map +0 -1
- package/dist/core/router/errors/RouterError.js.map +0 -1
- package/dist/core/router/errors/index.cjs.map +0 -1
- package/dist/core/router/errors/index.js.map +0 -1
- package/dist/core/router/index.cjs.map +0 -1
- package/dist/core/router/index.js.map +0 -1
- package/dist/core/router/lifecycle/RouterLifecycleManager.cjs.map +0 -1
- package/dist/core/router/lifecycle/RouterLifecycleManager.js.map +0 -1
- package/dist/core/router/lifecycle/index.cjs.map +0 -1
- package/dist/core/router/lifecycle/index.js.map +0 -1
- package/dist/core/router/middleware/RouterMiddlewareManager.cjs.map +0 -1
- package/dist/core/router/middleware/RouterMiddlewareManager.js.map +0 -1
- package/dist/core/router/middleware/auth.cjs.map +0 -1
- package/dist/core/router/middleware/auth.js.map +0 -1
- package/dist/core/router/middleware/index.cjs.map +0 -1
- package/dist/core/router/middleware/index.js.map +0 -1
- package/dist/core/router/middleware/types.cjs.map +0 -1
- package/dist/core/router/middleware/types.js.map +0 -1
- package/dist/core/router/monitoring/RouterMonitoring.cjs.map +0 -1
- package/dist/core/router/monitoring/RouterMonitoring.js.map +0 -1
- package/dist/core/router/monitoring/index.cjs.map +0 -1
- package/dist/core/router/monitoring/index.js.map +0 -1
- package/dist/core/router/navigation/RouterNavigation.cjs.map +0 -1
- package/dist/core/router/navigation/RouterNavigation.js.map +0 -1
- package/dist/core/router/navigation/index.cjs.map +0 -1
- package/dist/core/router/navigation/index.js.map +0 -1
- package/dist/core/router/performance/RouteCache.cjs.map +0 -1
- package/dist/core/router/performance/RouteCache.js.map +0 -1
- package/dist/core/router/performance/RoutePreloader.cjs.map +0 -1
- package/dist/core/router/performance/RoutePreloader.js.map +0 -1
- package/dist/core/router/performance/index.cjs.map +0 -1
- package/dist/core/router/performance/index.js.map +0 -1
- package/dist/core/router/plugin/RouterPluginManager.cjs.map +0 -1
- package/dist/core/router/plugin/RouterPluginManager.js.map +0 -1
- package/dist/core/router/plugin/index.cjs.map +0 -1
- package/dist/core/router/plugin/index.js.map +0 -1
- package/dist/core/router/plugin/types.cjs.map +0 -1
- package/dist/core/router/plugin/types.js.map +0 -1
- package/dist/core/router/types.cjs.map +0 -1
- package/dist/core/router/types.js.map +0 -1
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs.map +0 -1
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js.map +0 -1
- package/dist/core/router/utils/adapters/react-router/transform.cjs.map +0 -1
- package/dist/core/router/utils/adapters/react-router/transform.js.map +0 -1
- package/dist/core/router/utils/transform.cjs.map +0 -1
- package/dist/core/router/utils/transform.js.map +0 -1
- package/dist/core/router/validation/RouterConfigValidator.cjs.map +0 -1
- package/dist/core/router/validation/RouterConfigValidator.js.map +0 -1
- package/dist/core/router/validation/index.cjs.map +0 -1
- package/dist/core/router/validation/index.js.map +0 -1
- package/dist/core/router/validation/schema.cjs.map +0 -1
- package/dist/core/router/validation/schema.js.map +0 -1
- package/dist/core/router/version/RouteVersionManager.cjs.map +0 -1
- package/dist/core/router/version/RouteVersionManager.js.map +0 -1
- package/dist/core/router/version/index.cjs.map +0 -1
- package/dist/core/router/version/index.js.map +0 -1
- package/dist/core/splash/SplashScreen.cjs.map +0 -1
- package/dist/core/splash/SplashScreen.js.map +0 -1
- package/dist/core/splash/index.cjs.map +0 -1
- package/dist/core/splash/index.js.map +0 -1
- package/dist/core/splash/splashScreenUtils.cjs.map +0 -1
- package/dist/core/splash/splashScreenUtils.js.map +0 -1
- package/dist/core/startup/AppInstance.cjs.map +0 -1
- package/dist/core/startup/AppInstance.js.map +0 -1
- package/dist/core/startup/environment.cjs.map +0 -1
- package/dist/core/startup/environment.js.map +0 -1
- package/dist/core/startup/index.cjs.map +0 -1
- package/dist/core/startup/index.js.map +0 -1
- package/dist/core/startup/initializeServices.cjs.map +0 -1
- package/dist/core/startup/initializeServices.js.map +0 -1
- package/dist/core/startup/performanceTracker.cjs.map +0 -1
- package/dist/core/startup/performanceTracker.js.map +0 -1
- package/dist/core/startup/renderApp.cjs.map +0 -1
- package/dist/core/startup/renderApp.js.map +0 -1
- package/dist/core/startup/startApp.cjs.map +0 -1
- package/dist/core/startup/startApp.js.map +0 -1
- package/dist/core/types.cjs.map +0 -1
- package/dist/core/types.js.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.umd.cjs.map +0 -1
- package/dist/index.umd.js.map +0 -1
- package/dist/kernel/constants.cjs.map +0 -1
- package/dist/kernel/constants.js.map +0 -1
- package/dist/kernel/index.cjs.map +0 -1
- package/dist/kernel/index.js.map +0 -1
- package/dist/kernel/kernel.cjs.map +0 -1
- package/dist/kernel/kernel.js.map +0 -1
- package/dist/kernel/manager/cacheManager.cjs.map +0 -1
- package/dist/kernel/manager/cacheManager.js.map +0 -1
- package/dist/kernel/manager/i18n/I18nManager.cjs.map +0 -1
- package/dist/kernel/manager/i18n/I18nManager.js.map +0 -1
- package/dist/kernel/manager/i18n/i18n.persistence.cjs.map +0 -1
- package/dist/kernel/manager/i18n/i18n.persistence.js.map +0 -1
- package/dist/kernel/manager/i18n/i18n.schema.cjs.map +0 -1
- package/dist/kernel/manager/i18n/i18n.schema.js.map +0 -1
- package/dist/kernel/manager/i18n/index.cjs.map +0 -1
- package/dist/kernel/manager/i18n/index.js.map +0 -1
- package/dist/kernel/manager/i18nManager.cjs.map +0 -1
- package/dist/kernel/manager/i18nManager.js.map +0 -1
- package/dist/kernel/manager/index.cjs.map +0 -1
- package/dist/kernel/manager/index.js.map +0 -1
- package/dist/kernel/manager/logger/LoggerManager.cjs.map +0 -1
- package/dist/kernel/manager/logger/LoggerManager.js.map +0 -1
- package/dist/kernel/manager/logger/index.cjs.map +0 -1
- package/dist/kernel/manager/logger/index.js.map +0 -1
- package/dist/kernel/manager/logger/logger.persistence.cjs.map +0 -1
- package/dist/kernel/manager/logger/logger.persistence.js.map +0 -1
- package/dist/kernel/manager/logger/logger.schema.cjs.map +0 -1
- package/dist/kernel/manager/logger/logger.schema.js.map +0 -1
- package/dist/kernel/manager/loggerManager.cjs.map +0 -1
- package/dist/kernel/manager/loggerManager.js.map +0 -1
- package/dist/kernel/manager/persistence.cjs +0 -78
- package/dist/kernel/manager/persistence.cjs.map +0 -1
- package/dist/kernel/manager/persistence.d.ts +0 -3
- package/dist/kernel/manager/persistence.js +0 -60
- package/dist/kernel/manager/persistence.js.map +0 -1
- package/dist/kernel/manager/theme/ThemeManager.cjs.map +0 -1
- package/dist/kernel/manager/theme/ThemeManager.js.map +0 -1
- package/dist/kernel/manager/theme/index.cjs.map +0 -1
- package/dist/kernel/manager/theme/index.js.map +0 -1
- package/dist/kernel/manager/theme/theme.dom.cjs.map +0 -1
- package/dist/kernel/manager/theme/theme.dom.js.map +0 -1
- package/dist/kernel/manager/theme/theme.persistence.cjs.map +0 -1
- package/dist/kernel/manager/theme/theme.persistence.js.map +0 -1
- package/dist/kernel/manager/theme/theme.schema.cjs.map +0 -1
- package/dist/kernel/manager/theme/theme.schema.js.map +0 -1
- package/dist/kernel/manager/themeManager.cjs.map +0 -1
- package/dist/kernel/manager/themeManager.js.map +0 -1
- package/dist/kernel/types.cjs.map +0 -1
- package/dist/kernel/types.js.map +0 -1
- package/dist/library/index.cjs.map +0 -1
- package/dist/library/index.js.map +0 -1
- package/dist/library/locale/index.cjs.map +0 -1
- package/dist/library/locale/index.js.map +0 -1
- package/dist/library/locale/langs/en-us/index.cjs.map +0 -1
- package/dist/library/locale/langs/en-us/index.js.map +0 -1
- package/dist/library/locale/langs/zh-cn/index.cjs.map +0 -1
- package/dist/library/locale/langs/zh-cn/index.js.map +0 -1
- package/dist/library/locale/types.cjs.map +0 -1
- package/dist/library/locale/types.js.map +0 -1
- package/dist/library/storage/cache.cjs.map +0 -1
- package/dist/library/storage/cache.js.map +0 -1
- package/dist/library/storage/encryption.cjs.map +0 -1
- package/dist/library/storage/encryption.js.map +0 -1
- package/dist/library/storage/index.cjs.map +0 -1
- package/dist/library/storage/index.js.map +0 -1
- package/dist/request/adapter/RequestAdapter.d.ts +0 -85
- package/dist/request/adapter/RequestAdapter.js +0 -70
- package/dist/request/adapter/RequestAdapter.js.map +0 -1
- package/dist/request/adapter/axiosAdapter.d.ts +0 -10
- package/dist/request/adapter/axiosAdapter.js +0 -115
- package/dist/request/adapter/axiosAdapter.js.map +0 -1
- package/dist/request/adapter/fetchAdapter.d.ts +0 -10
- package/dist/request/adapter/fetchAdapter.js +0 -126
- package/dist/request/adapter/fetchAdapter.js.map +0 -1
- package/dist/request/adapter/index.d.ts +0 -9
- package/dist/request/adapter/index.js +0 -14
- package/dist/request/adapter/index.js.map +0 -1
- package/dist/request/adapter/kyAdapter.d.ts +0 -10
- package/dist/request/adapter/kyAdapter.js +0 -142
- package/dist/request/adapter/kyAdapter.js.map +0 -1
- package/dist/request/adapter/undiciAdapter.d.ts +0 -10
- package/dist/request/adapter/undiciAdapter.js +0 -164
- package/dist/request/adapter/undiciAdapter.js.map +0 -1
- package/dist/request/adapter.d.ts +0 -1
- package/dist/request/core/RequestClient.d.ts +0 -134
- package/dist/request/core/RequestClient.js +0 -509
- package/dist/request/core/RequestClient.js.map +0 -1
- package/dist/request/core/index.d.ts +0 -5
- package/dist/request/core/index.js +0 -5
- package/dist/request/core/index.js.map +0 -1
- package/dist/request/core.d.ts +0 -1
- package/dist/request/index.d.ts +0 -1
- package/dist/request/index.js +0 -50
- package/dist/request/index.js.map +0 -1
- package/dist/request/plugin/RequestPlugin.d.ts +0 -170
- package/dist/request/plugin/RequestPlugin.js +0 -203
- package/dist/request/plugin/RequestPlugin.js.map +0 -1
- package/dist/request/plugin/cache.d.ts +0 -33
- package/dist/request/plugin/cache.js +0 -264
- package/dist/request/plugin/cache.js.map +0 -1
- package/dist/request/plugin/csrfPlugin.d.ts +0 -21
- package/dist/request/plugin/csrfPlugin.js +0 -44
- package/dist/request/plugin/csrfPlugin.js.map +0 -1
- package/dist/request/plugin/index.d.ts +0 -11
- package/dist/request/plugin/index.js +0 -12
- package/dist/request/plugin/index.js.map +0 -1
- package/dist/request/plugin/monitoring.d.ts +0 -112
- package/dist/request/plugin/monitoring.js +0 -205
- package/dist/request/plugin/monitoring.js.map +0 -1
- package/dist/request/plugin/queue.d.ts +0 -91
- package/dist/request/plugin/queue.js +0 -156
- package/dist/request/plugin/queue.js.map +0 -1
- package/dist/request/plugin/retry.d.ts +0 -34
- package/dist/request/plugin/retry.js +0 -93
- package/dist/request/plugin/retry.js.map +0 -1
- package/dist/request/plugin/validation.d.ts +0 -26
- package/dist/request/plugin/validation.js +0 -116
- package/dist/request/plugin/validation.js.map +0 -1
- package/dist/request/plugin.d.ts +0 -1
- package/dist/request/runtime/RequestContext.d.ts +0 -50
- package/dist/request/runtime/RequestContext.js +0 -86
- package/dist/request/runtime/RequestContext.js.map +0 -1
- package/dist/request/runtime/index.d.ts +0 -4
- package/dist/request/runtime/index.js +0 -5
- package/dist/request/runtime/index.js.map +0 -1
- package/dist/request/runtime.d.ts +0 -1
- package/dist/request/types.d.ts +0 -1
- package/dist/request/types.js +0 -97
- package/dist/request/types.js.map +0 -1
- package/dist/request/utils/RequestQueueManager.d.ts +0 -74
- package/dist/request/utils/RequestQueueManager.js +0 -160
- package/dist/request/utils/RequestQueueManager.js.map +0 -1
- package/dist/request/utils/dependencyCheck.d.ts +0 -63
- package/dist/request/utils/dependencyCheck.js +0 -192
- package/dist/request/utils/dependencyCheck.js.map +0 -1
- package/dist/request/utils/index.d.ts +0 -5
- package/dist/request/utils/index.js +0 -6
- package/dist/request/utils/index.js.map +0 -1
- package/dist/request/utils.d.ts +0 -1
- package/dist/state/StateManager.cjs.map +0 -1
- package/dist/state/StateManager.js.map +0 -1
- package/dist/state/adapters/AdapterFactory.cjs.map +0 -1
- package/dist/state/adapters/AdapterFactory.js.map +0 -1
- package/dist/state/adapters/DefaultAdapter.cjs.map +0 -1
- package/dist/state/adapters/DefaultAdapter.js.map +0 -1
- package/dist/state/adapters/ReduxAdapter.cjs.map +0 -1
- package/dist/state/adapters/ReduxAdapter.js.map +0 -1
- package/dist/state/adapters/ZustandAdapter.cjs.map +0 -1
- package/dist/state/adapters/ZustandAdapter.js.map +0 -1
- package/dist/state/adapters/index.cjs.map +0 -1
- package/dist/state/adapters/index.js.map +0 -1
- package/dist/state/adapters/types.cjs.map +0 -1
- package/dist/state/adapters/types.js.map +0 -1
- package/dist/state/core/DerivedStateInstance.cjs.map +0 -1
- package/dist/state/core/DerivedStateInstance.js.map +0 -1
- package/dist/state/core/StateInstance.cjs.map +0 -1
- package/dist/state/core/StateInstance.js.map +0 -1
- package/dist/state/core/StateRegistry.cjs.map +0 -1
- package/dist/state/core/StateRegistry.js.map +0 -1
- package/dist/state/core/StateScope.cjs.map +0 -1
- package/dist/state/core/StateScope.js.map +0 -1
- package/dist/state/core/index.cjs.map +0 -1
- package/dist/state/core/index.js.map +0 -1
- package/dist/state/index.cjs.map +0 -1
- package/dist/state/index.js.map +0 -1
- package/dist/state/types.cjs.map +0 -1
- package/dist/state/types.js.map +0 -1
- package/dist/state.umd.js.map +0 -1
- package/dist/types.cjs.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils/analytics.cjs.map +0 -1
- package/dist/utils/analytics.js.map +0 -1
- package/dist/utils/configSecurity.cjs.map +0 -1
- package/dist/utils/configSecurity.js.map +0 -1
- package/dist/utils/csrf.cjs.map +0 -1
- package/dist/utils/csrf.js.map +0 -1
- package/dist/utils/errors/ErrorCodes.cjs.map +0 -1
- package/dist/utils/errors/ErrorCodes.js.map +0 -1
- package/dist/utils/errors.cjs.map +0 -1
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/index.cjs.map +0 -1
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/logger.cjs.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/logger.types.cjs.map +0 -1
- package/dist/utils/logger.types.js.map +0 -1
- package/dist/utils/monitoring.cjs.map +0 -1
- package/dist/utils/monitoring.js.map +0 -1
- package/dist/utils/performance.cjs.map +0 -1
- package/dist/utils/performance.js.map +0 -1
- package/dist/utils/resourceLoader.cjs.map +0 -1
- package/dist/utils/resourceLoader.js.map +0 -1
- package/dist/utils/runtimeSecurity.cjs.map +0 -1
- package/dist/utils/runtimeSecurity.js.map +0 -1
- package/dist/utils/security.cjs.map +0 -1
- package/dist/utils/security.js.map +0 -1
- package/dist/utils/traceId.cjs.map +0 -1
- package/dist/utils/traceId.js.map +0 -1
- package/dist/utils/validation.cjs.map +0 -1
- package/dist/utils/validation.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/router/RouterManager.ts"],"sourcesContent":["import { logger } from '@vlian/logger';\nimport type { RouterConfig } from './types';\nimport { transformRoutes } from './utils/transform';\nimport { transformRoutesToReactRoutes } from './utils/adapters/react-router/transform';\nimport { createBrowserRouter, createHashRouter, createMemoryRouter, matchRoutes, type RouteObject } from 'react-router-dom';\nimport { RouterConfigValidator } from './validation';\nimport { getRouterLifecycleManager } from './lifecycle';\nimport { getRouterMiddlewareManager } from './middleware';\nimport { RouterError, RouterErrorCode } from './errors';\nimport { getRouteCache } from './performance/RouteCache';\nimport { getRoutePreloader } from './performance/RoutePreloader';\nimport { getRouterPluginManager, PluginLifecycleStage } from './plugin';\nimport { getRouterMonitoring } from './monitoring';\nimport { getAdapterManager } from './adapter';\nimport { createReactRouterAdapter } from './adapter/react-router';\n\nexport class RouterManager {\n private static instance: RouterManager | null = null;\n\n /**\n * 路由实例\n * 只能在 initialize 方法中赋值\n */\n private router: ReturnType<typeof createBrowserRouter> | null = null;\n\n /**\n * 是否已初始化\n */\n private initialized = false;\n\n /**\n * 路由缓存实例\n */\n private cache = getRouteCache();\n\n /**\n * 路由预加载器实例\n */\n private preloader = getRoutePreloader();\n\n /**\n * 路由插件管理器实例\n */\n private pluginManager = getRouterPluginManager();\n\n /**\n * 路由监控服务实例\n */\n private monitoring = getRouterMonitoring();\n\n /**\n * 路由适配器管理器实例\n */\n private adapterManager = getAdapterManager();\n\n private constructor() {\n // 私有构造函数\n // 注册默认的 React Router 适配器\n this.adapterManager.register({\n name: 'react-router',\n factory: createReactRouterAdapter(),\n priority: 10,\n });\n }\n /**\n * 获取单例实例\n */\n static getInstance(): RouterManager {\n if (!RouterManager.instance) {\n RouterManager.instance = new RouterManager();\n }\n return RouterManager.instance;\n }\n /**\n * 初始化路由管理器\n * \n * @param config - 路由配置\n * @param _appInstance - 应用实例(保留用于兼容性,当前未使用)\n */\n async initialize(config: RouterConfig): Promise<void> {\n // 如果路由被禁用,直接返回\n if (config.enabled === false || config.enabled === 'disabled') {\n logger.info('路由系统已禁用');\n return;\n }\n\n // 配置验证(如果启用)\n if (config.enableValidation !== false) {\n try {\n RouterConfigValidator.validate(config);\n logger.debug('路由配置验证通过');\n } catch (error) {\n logger.error('路由配置验证失败', error);\n // 开发环境下抛出错误,生产环境下记录警告但继续执行\n if (process.env.NODE_ENV === 'development') {\n throw error;\n }\n }\n }\n\n // 执行插件钩子:路由初始化前\n await this.pluginManager.executeHooks(PluginLifecycleStage.BEFORE_INIT, {\n config,\n });\n\n // 注册生命周期钩子\n if (config.hooks) {\n const lifecycleManager = getRouterLifecycleManager();\n lifecycleManager.register(config.hooks);\n logger.debug('路由生命周期钩子已注册');\n }\n\n // 转换数据(使用缓存)\n if (!config.routes) {\n throw new RouterError(\n '路由配置不能为空',\n RouterErrorCode.ROUTER_CONFIG_ERROR\n );\n }\n\n // 更新预加载策略(默认关闭,按需懒加载)\n this.preloader.updateConfig(config.preload);\n this.preloader.clear();\n\n let result;\n const cacheKey = config.routes;\n const cachedResult = this.cache.get(cacheKey);\n\n if (cachedResult) {\n logger.debug('使用缓存的路由转换结果');\n result = cachedResult;\n } else {\n // 执行插件钩子:路由转换前\n await this.pluginManager.executeHooks(PluginLifecycleStage.BEFORE_TRANSFORM, {\n config,\n });\n\n result = await transformRoutes(config.routes, config.transformOptions);\n\n // 执行插件钩子:路由转换后\n await this.pluginManager.executeHooks(PluginLifecycleStage.AFTER_TRANSFORM, {\n config,\n routes: result.routes,\n });\n\n // 缓存转换结果\n this.cache.set(cacheKey, result);\n }\n\n const enableHydrateFallback =\n config.enableHydrateFallback\n ?? Boolean((config.options as { hydrationData?: unknown } | undefined)?.hydrationData);\n\n const reactRoutes = await transformRoutesToReactRoutes(\n result.routes,\n result,\n config.defaultRouteErrorComponent,\n config.defaultRouteLoadingComponent,\n enableHydrateFallback,\n );\n\n // 注册路由到预加载器\n if (result.routes) {\n this.preloader.registerRoutes(result.routes, result);\n // 开始预加载\n this.preloader.startPreload();\n }\n\n await this.resolveInitialLazyRoutes(reactRoutes, !enableHydrateFallback);\n\n let routerInstance: ReturnType<typeof createBrowserRouter> | null = null;\n if (config.mode === 'browser') {\n routerInstance = createBrowserRouter(reactRoutes, config.options);\n } else if (config.mode === 'hash') {\n routerInstance = createHashRouter(reactRoutes, config.options);\n } else if (config.mode === 'memory') {\n routerInstance = createMemoryRouter(reactRoutes, config.options);\n }\n\n if (!routerInstance) {\n throw new RouterError(\n '路由模式不支持',\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n undefined,\n { mode: config.mode }\n );\n }\n\n // 只能在 initialize 方法中赋值\n this.router = routerInstance;\n this.initialized = true;\n\n // 执行插件钩子:路由初始化后\n await this.pluginManager.executeHooks(PluginLifecycleStage.AFTER_INIT, {\n config,\n routes: result.routes,\n });\n\n // 记录监控:路由初始化完成\n const initialPath = typeof window !== 'undefined'\n ? `${window.location.pathname}${window.location.search}${window.location.hash}`\n : this.router?.state?.location?.pathname ?? '/';\n\n this.monitoring.trackRouteAccess(\n {\n path: initialPath,\n meta: { name: 'router-init' },\n },\n undefined,\n true\n );\n\n logger.info('路由管理器初始化完成');\n }\n\n /**\n * 预解析 lazy 路由,避免首屏或重定向链路长时间停留在 hydrate fallback。\n * resolveAll=true 时会在初始化阶段解析全部 lazy 路由。\n */\n private async resolveInitialLazyRoutes(routes: RouteObject[], resolveAll: boolean = false): Promise<void> {\n if (typeof window === 'undefined') {\n return;\n }\n\n let targetRoutes: RouteObject[] = [];\n if (resolveAll) {\n const stack = [...routes];\n while (stack.length > 0) {\n const current = stack.shift();\n if (!current) {\n continue;\n }\n targetRoutes.push(current);\n if (current.children && current.children.length > 0) {\n stack.push(...current.children);\n }\n }\n } else {\n const matches = matchRoutes(routes, window.location.pathname) ?? [];\n if (matches.length === 0) {\n return;\n }\n targetRoutes = matches.map((match) => match.route);\n }\n\n await Promise.all(\n targetRoutes.map(async (route) => {\n const lazy = route.lazy;\n if (typeof lazy !== 'function') {\n return;\n }\n\n try {\n const resolved = await lazy();\n Object.assign(route, resolved);\n delete (route as RouteObject & { lazy?: unknown }).lazy;\n } catch (error) {\n logger.warn('首屏路由懒加载预解析失败,回退到 Router 默认懒加载', error);\n }\n }),\n );\n }\n\n /**\n * 获取路由实例\n * \n * @returns 路由实例,如果未初始化则返回 null\n */\n getRouter(): ReturnType<typeof createBrowserRouter> | null {\n return this.router;\n }\n\n /**\n * 检查是否已初始化\n * \n * @returns 如果已初始化返回 true,否则返回 false\n */\n isInitialized(): boolean {\n return this.initialized;\n }\n\n /**\n * 销毁路由管理器\n */\n destroy(): void {\n // 执行插件钩子:销毁\n this.pluginManager.executeHooks(PluginLifecycleStage.DESTROY, {\n config: {} as RouterConfig,\n });\n\n // 停止预加载\n this.preloader.stopPreload();\n\n this.router = null;\n this.initialized = false;\n \n // 清空生命周期钩子和中间件\n const lifecycleManager = getRouterLifecycleManager();\n lifecycleManager.clear();\n \n const middlewareManager = getRouterMiddlewareManager();\n middlewareManager.clear();\n \n logger.info('路由管理器已销毁');\n }\n\n /**\n * 获取路由缓存实例\n */\n getCache() {\n return this.cache;\n }\n\n /**\n * 获取路由预加载器实例\n */\n getPreloader() {\n return this.preloader;\n }\n\n /**\n * 获取路由插件管理器实例\n */\n getPluginManager() {\n return this.pluginManager;\n }\n\n /**\n * 获取路由监控服务实例\n */\n getMonitoring() {\n return this.monitoring;\n }\n}\n\n/**\n * 获取路由管理器\n */\nexport function getRouterManager(): RouterManager {\n return RouterManager.getInstance();\n}\n"],"names":["logger","transformRoutes","transformRoutesToReactRoutes","createBrowserRouter","createHashRouter","createMemoryRouter","matchRoutes","RouterConfigValidator","getRouterLifecycleManager","getRouterMiddlewareManager","RouterError","RouterErrorCode","getRouteCache","getRoutePreloader","getRouterPluginManager","PluginLifecycleStage","getRouterMonitoring","getAdapterManager","createReactRouterAdapter","RouterManager","getInstance","instance","initialize","config","enabled","info","enableValidation","validate","debug","error","process","env","NODE_ENV","pluginManager","executeHooks","BEFORE_INIT","hooks","lifecycleManager","register","routes","ROUTER_CONFIG_ERROR","preloader","updateConfig","preload","clear","result","cacheKey","cachedResult","cache","get","BEFORE_TRANSFORM","transformOptions","AFTER_TRANSFORM","set","enableHydrateFallback","Boolean","options","hydrationData","reactRoutes","defaultRouteErrorComponent","defaultRouteLoadingComponent","registerRoutes","startPreload","resolveInitialLazyRoutes","routerInstance","mode","undefined","router","initialized","AFTER_INIT","initialPath","window","location","pathname","search","hash","state","monitoring","trackRouteAccess","path","meta","name","resolveAll","targetRoutes","stack","length","current","shift","push","children","matches","map","match","route","Promise","all","lazy","resolved","Object","assign","warn","getRouter","isInitialized","destroy","DESTROY","stopPreload","middlewareManager","getCache","getPreloader","getPluginManager","getMonitoring","adapterManager","factory","priority","getRouterManager"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/adapter/AdapterManager.ts"],"sourcesContent":["/**\n * 路由适配器管理器\n * 负责管理路由适配器的注册、创建和切换\n */\n\nimport { logger } from '@vlian/logger';\nimport type { IRouterAdapter, AdapterRegistration, RouterAdapterConfig } from './types';\nimport { RouterError, RouterErrorCode } from '../errors';\n\n/**\n * 路由适配器管理器\n */\nexport class AdapterManager {\n private adapters: Map<string, AdapterRegistration> = new Map();\n private currentAdapter: IRouterAdapter | null = null;\n private defaultAdapterName: string | null = null;\n\n /**\n * 注册适配器\n * \n * @param registration - 适配器注册信息\n * @returns 取消注册函数\n */\n register(registration: AdapterRegistration): () => void {\n // 验证适配器\n if (!registration.name) {\n throw new Error('适配器必须提供名称');\n }\n\n if (!registration.factory || typeof registration.factory !== 'function') {\n throw new Error('适配器必须提供工厂函数');\n }\n\n // 设置默认值\n const adapterRegistration: AdapterRegistration = {\n priority: 100,\n enabled: true,\n ...registration,\n };\n\n // 注册适配器\n this.adapters.set(registration.name, adapterRegistration);\n\n logger.debug(`路由适配器已注册: ${registration.name}`);\n\n // 如果没有默认适配器,设置为第一个注册的适配器\n if (!this.defaultAdapterName) {\n this.defaultAdapterName = registration.name;\n }\n\n // 返回取消注册函数\n return () => {\n this.unregister(registration.name);\n };\n }\n\n /**\n * 批量注册适配器\n * \n * @param registrations - 适配器注册信息数组\n */\n registerBatch(registrations: AdapterRegistration[]): void {\n registrations.forEach((registration) => this.register(registration));\n }\n\n /**\n * 取消注册适配器\n * \n * @param name - 适配器名称\n */\n unregister(name: string): void {\n if (this.adapters.has(name)) {\n this.adapters.delete(name);\n logger.debug(`路由适配器已取消注册: ${name}`);\n\n // 如果取消的是默认适配器,重置默认适配器\n if (this.defaultAdapterName === name) {\n const firstAdapter = Array.from(this.adapters.keys())[0];\n this.defaultAdapterName = firstAdapter || null;\n }\n }\n }\n\n /**\n * 创建适配器实例\n * \n * @param name - 适配器名称(可选,使用默认适配器)\n * @param config - 适配器配置\n * @returns 适配器实例\n */\n async createAdapter(\n config: RouterAdapterConfig,\n name?: string\n ): Promise<IRouterAdapter> {\n const adapterName = name || this.defaultAdapterName;\n\n if (!adapterName) {\n throw new RouterError(\n '没有可用的路由适配器',\n RouterErrorCode.ROUTER_NOT_INITIALIZED\n );\n }\n\n const registration = this.adapters.get(adapterName);\n\n if (!registration) {\n throw new RouterError(\n `路由适配器不存在: ${adapterName}`,\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n undefined,\n { adapterName }\n );\n }\n\n if (!registration.enabled) {\n throw new RouterError(\n `路由适配器已禁用: ${adapterName}`,\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n undefined,\n { adapterName }\n );\n }\n\n try {\n // 创建适配器实例\n const adapter = await registration.factory(config);\n\n // 验证适配器\n if (!adapter || typeof adapter.initialize !== 'function') {\n throw new Error('适配器实例无效');\n }\n\n // 初始化适配器\n await adapter.initialize(config);\n\n logger.info(`路由适配器已创建并初始化: ${adapterName}`);\n\n return adapter;\n } catch (error) {\n logger.error(`创建路由适配器失败: ${adapterName}`, error);\n const errorContext: Record<string, unknown> = { adapterName };\n if (error instanceof Error) {\n errorContext.originalError = error;\n }\n throw new RouterError(\n `创建路由适配器失败: ${adapterName}`,\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n error instanceof Error ? error : undefined,\n errorContext\n );\n }\n }\n\n /**\n * 设置当前适配器\n * \n * @param adapter - 适配器实例\n */\n setCurrentAdapter(adapter: IRouterAdapter): void {\n // 销毁旧的适配器\n if (this.currentAdapter && this.currentAdapter.destroy) {\n try {\n this.currentAdapter.destroy();\n } catch (error) {\n logger.warn('销毁旧适配器失败', error);\n }\n }\n\n this.currentAdapter = adapter;\n logger.debug(`当前路由适配器已设置: ${adapter.name}`);\n }\n\n /**\n * 获取当前适配器\n * \n * @returns 当前适配器实例,如果不存在返回 null\n */\n getCurrentAdapter(): IRouterAdapter | null {\n return this.currentAdapter;\n }\n\n /**\n * 设置默认适配器\n * \n * @param name - 适配器名称\n */\n setDefaultAdapter(name: string): void {\n if (!this.adapters.has(name)) {\n throw new Error(`适配器不存在: ${name}`);\n }\n\n this.defaultAdapterName = name;\n logger.debug(`默认路由适配器已设置: ${name}`);\n }\n\n /**\n * 获取默认适配器名称\n * \n * @returns 默认适配器名称\n */\n getDefaultAdapterName(): string | null {\n return this.defaultAdapterName;\n }\n\n /**\n * 获取所有适配器\n * \n * @returns 适配器注册信息数组\n */\n getAllAdapters(): AdapterRegistration[] {\n return Array.from(this.adapters.values());\n }\n\n /**\n * 获取启用的适配器\n * \n * @returns 启用的适配器注册信息数组\n */\n getEnabledAdapters(): AdapterRegistration[] {\n return Array.from(this.adapters.values()).filter((a) => a.enabled !== false);\n }\n\n /**\n * 获取适配器\n * \n * @param name - 适配器名称\n * @returns 适配器注册信息,如果不存在返回 undefined\n */\n getAdapter(name: string): AdapterRegistration | undefined {\n return this.adapters.get(name);\n }\n\n /**\n * 清空所有适配器\n */\n clear(): void {\n // 销毁当前适配器\n if (this.currentAdapter && this.currentAdapter.destroy) {\n try {\n this.currentAdapter.destroy();\n } catch (error) {\n logger.warn('销毁适配器失败', error);\n }\n }\n\n this.adapters.clear();\n this.currentAdapter = null;\n this.defaultAdapterName = null;\n logger.debug('所有路由适配器已清空');\n }\n\n /**\n * 获取适配器数量\n * \n * @returns 适配器数量\n */\n getCount(): number {\n return this.adapters.size;\n }\n}\n\n/**\n * 获取路由适配器管理器单例\n */\nlet adapterManagerInstance: AdapterManager | null = null;\n\nexport function getAdapterManager(): AdapterManager {\n if (!adapterManagerInstance) {\n adapterManagerInstance = new AdapterManager();\n }\n return adapterManagerInstance;\n}\n"],"names":["AdapterManager","getAdapterManager","register","registration","name","Error","factory","adapterRegistration","priority","enabled","adapters","set","logger","debug","defaultAdapterName","unregister","registerBatch","registrations","forEach","has","delete","firstAdapter","Array","from","keys","createAdapter","config","adapterName","RouterError","RouterErrorCode","ROUTER_NOT_INITIALIZED","get","ROUTER_CONFIG_ERROR","undefined","adapter","initialize","info","error","errorContext","originalError","setCurrentAdapter","currentAdapter","destroy","warn","getCurrentAdapter","setDefaultAdapter","getDefaultAdapterName","getAllAdapters","values","getEnabledAdapters","filter","a","getAdapter","clear","getCount","size","Map","adapterManagerInstance"],"mappings":"AAAA;;;CAGC;;;;;;;;;;;QASYA;eAAAA;;QAiQGC;eAAAA;;;wBAxQO;wBAEsB;;;;;;;;;;;;;;AAKtC,IAAA,AAAMD,iBAAN,MAAMA;IAKX;;;;;GAKC,GACDE,SAASC,YAAiC,EAAc;QACtD,QAAQ;QACR,IAAI,CAACA,aAAaC,IAAI,EAAE;YACtB,MAAM,IAAIC,MAAM;QAClB;QAEA,IAAI,CAACF,aAAaG,OAAO,IAAI,OAAOH,aAAaG,OAAO,KAAK,YAAY;YACvE,MAAM,IAAID,MAAM;QAClB;QAEA,QAAQ;QACR,MAAME,sBAA2C;YAC/CC,UAAU;YACVC,SAAS;YACT,GAAGN,YAAY;QACjB;QAEA,QAAQ;QACR,IAAI,CAACO,QAAQ,CAACC,GAAG,CAACR,aAAaC,IAAI,EAAEG;QAErCK,cAAM,CAACC,KAAK,CAAC,CAAC,UAAU,EAAEV,aAAaC,IAAI,EAAE;QAE7C,yBAAyB;QACzB,IAAI,CAAC,IAAI,CAACU,kBAAkB,EAAE;YAC5B,IAAI,CAACA,kBAAkB,GAAGX,aAAaC,IAAI;QAC7C;QAEA,WAAW;QACX,OAAO;YACL,IAAI,CAACW,UAAU,CAACZ,aAAaC,IAAI;QACnC;IACF;IAEA;;;;GAIC,GACDY,cAAcC,aAAoC,EAAQ;QACxDA,cAAcC,OAAO,CAAC,CAACf,eAAiB,IAAI,CAACD,QAAQ,CAACC;IACxD;IAEA;;;;GAIC,GACDY,WAAWX,IAAY,EAAQ;QAC7B,IAAI,IAAI,CAACM,QAAQ,CAACS,GAAG,CAACf,OAAO;YAC3B,IAAI,CAACM,QAAQ,CAACU,MAAM,CAAChB;YACrBQ,cAAM,CAACC,KAAK,CAAC,CAAC,YAAY,EAAET,MAAM;YAElC,sBAAsB;YACtB,IAAI,IAAI,CAACU,kBAAkB,KAAKV,MAAM;gBACpC,MAAMiB,eAAeC,MAAMC,IAAI,CAAC,IAAI,CAACb,QAAQ,CAACc,IAAI,GAAG,CAAC,EAAE;gBACxD,IAAI,CAACV,kBAAkB,GAAGO,gBAAgB;YAC5C;QACF;IACF;IAEA;;;;;;GAMC,GACD,MAAMI,cACJC,MAA2B,EAC3BtB,IAAa,EACY;QACzB,MAAMuB,cAAcvB,QAAQ,IAAI,CAACU,kBAAkB;QAEnD,IAAI,CAACa,aAAa;YAChB,MAAM,IAAIC,mBAAW,CACnB,cACAC,uBAAe,CAACC,sBAAsB;QAE1C;QAEA,MAAM3B,eAAe,IAAI,CAACO,QAAQ,CAACqB,GAAG,CAACJ;QAEvC,IAAI,CAACxB,cAAc;YACjB,MAAM,IAAIyB,mBAAW,CACnB,CAAC,UAAU,EAAED,aAAa,EAC1BE,uBAAe,CAACG,mBAAmB,EACnCC,WACAA,WACA;gBAAEN;YAAY;QAElB;QAEA,IAAI,CAACxB,aAAaM,OAAO,EAAE;YACzB,MAAM,IAAImB,mBAAW,CACnB,CAAC,UAAU,EAAED,aAAa,EAC1BE,uBAAe,CAACG,mBAAmB,EACnCC,WACAA,WACA;gBAAEN;YAAY;QAElB;QAEA,IAAI;YACF,UAAU;YACV,MAAMO,UAAU,MAAM/B,aAAaG,OAAO,CAACoB;YAE3C,QAAQ;YACR,IAAI,CAACQ,WAAW,OAAOA,QAAQC,UAAU,KAAK,YAAY;gBACxD,MAAM,IAAI9B,MAAM;YAClB;YAEA,SAAS;YACT,MAAM6B,QAAQC,UAAU,CAACT;YAEzBd,cAAM,CAACwB,IAAI,CAAC,CAAC,cAAc,EAAET,aAAa;YAE1C,OAAOO;QACT,EAAE,OAAOG,OAAO;YACdzB,cAAM,CAACyB,KAAK,CAAC,CAAC,WAAW,EAAEV,aAAa,EAAEU;YAC1C,MAAMC,eAAwC;gBAAEX;YAAY;YAC5D,IAAIU,iBAAiBhC,OAAO;gBAC1BiC,aAAaC,aAAa,GAAGF;YAC/B;YACA,MAAM,IAAIT,mBAAW,CACnB,CAAC,WAAW,EAAED,aAAa,EAC3BE,uBAAe,CAACG,mBAAmB,EACnCC,WACAI,iBAAiBhC,QAAQgC,QAAQJ,WACjCK;QAEJ;IACF;IAEA;;;;GAIC,GACDE,kBAAkBN,OAAuB,EAAQ;QAC/C,UAAU;QACV,IAAI,IAAI,CAACO,cAAc,IAAI,IAAI,CAACA,cAAc,CAACC,OAAO,EAAE;YACtD,IAAI;gBACF,IAAI,CAACD,cAAc,CAACC,OAAO;YAC7B,EAAE,OAAOL,OAAO;gBACdzB,cAAM,CAAC+B,IAAI,CAAC,YAAYN;YAC1B;QACF;QAEA,IAAI,CAACI,cAAc,GAAGP;QACtBtB,cAAM,CAACC,KAAK,CAAC,CAAC,YAAY,EAAEqB,QAAQ9B,IAAI,EAAE;IAC5C;IAEA;;;;GAIC,GACDwC,oBAA2C;QACzC,OAAO,IAAI,CAACH,cAAc;IAC5B;IAEA;;;;GAIC,GACDI,kBAAkBzC,IAAY,EAAQ;QACpC,IAAI,CAAC,IAAI,CAACM,QAAQ,CAACS,GAAG,CAACf,OAAO;YAC5B,MAAM,IAAIC,MAAM,CAAC,QAAQ,EAAED,MAAM;QACnC;QAEA,IAAI,CAACU,kBAAkB,GAAGV;QAC1BQ,cAAM,CAACC,KAAK,CAAC,CAAC,YAAY,EAAET,MAAM;IACpC;IAEA;;;;GAIC,GACD0C,wBAAuC;QACrC,OAAO,IAAI,CAAChC,kBAAkB;IAChC;IAEA;;;;GAIC,GACDiC,iBAAwC;QACtC,OAAOzB,MAAMC,IAAI,CAAC,IAAI,CAACb,QAAQ,CAACsC,MAAM;IACxC;IAEA;;;;GAIC,GACDC,qBAA4C;QAC1C,OAAO3B,MAAMC,IAAI,CAAC,IAAI,CAACb,QAAQ,CAACsC,MAAM,IAAIE,MAAM,CAAC,CAACC,IAAMA,EAAE1C,OAAO,KAAK;IACxE;IAEA;;;;;GAKC,GACD2C,WAAWhD,IAAY,EAAmC;QACxD,OAAO,IAAI,CAACM,QAAQ,CAACqB,GAAG,CAAC3B;IAC3B;IAEA;;GAEC,GACDiD,QAAc;QACZ,UAAU;QACV,IAAI,IAAI,CAACZ,cAAc,IAAI,IAAI,CAACA,cAAc,CAACC,OAAO,EAAE;YACtD,IAAI;gBACF,IAAI,CAACD,cAAc,CAACC,OAAO;YAC7B,EAAE,OAAOL,OAAO;gBACdzB,cAAM,CAAC+B,IAAI,CAAC,WAAWN;YACzB;QACF;QAEA,IAAI,CAAC3B,QAAQ,CAAC2C,KAAK;QACnB,IAAI,CAACZ,cAAc,GAAG;QACtB,IAAI,CAAC3B,kBAAkB,GAAG;QAC1BF,cAAM,CAACC,KAAK,CAAC;IACf;IAEA;;;;GAIC,GACDyC,WAAmB;QACjB,OAAO,IAAI,CAAC5C,QAAQ,CAAC6C,IAAI;IAC3B;;QAxPA,uBAAQ7C,YAA6C,IAAI8C;QACzD,uBAAQf,kBAAwC;QAChD,uBAAQ3B,sBAAoC;;AAuP9C;AAEA;;CAEC,GACD,IAAI2C,yBAAgD;AAE7C,SAASxD;IACd,IAAI,CAACwD,wBAAwB;QAC3BA,yBAAyB,IAAIzD;IAC/B;IACA,OAAOyD;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/adapter/AdapterManager.ts"],"sourcesContent":["/**\n * 路由适配器管理器\n * 负责管理路由适配器的注册、创建和切换\n */\n\nimport { logger } from '@vlian/logger';\nimport type { IRouterAdapter, AdapterRegistration, RouterAdapterConfig } from './types';\nimport { RouterError, RouterErrorCode } from '../errors';\n\n/**\n * 路由适配器管理器\n */\nexport class AdapterManager {\n private adapters: Map<string, AdapterRegistration> = new Map();\n private currentAdapter: IRouterAdapter | null = null;\n private defaultAdapterName: string | null = null;\n\n /**\n * 注册适配器\n * \n * @param registration - 适配器注册信息\n * @returns 取消注册函数\n */\n register(registration: AdapterRegistration): () => void {\n // 验证适配器\n if (!registration.name) {\n throw new Error('适配器必须提供名称');\n }\n\n if (!registration.factory || typeof registration.factory !== 'function') {\n throw new Error('适配器必须提供工厂函数');\n }\n\n // 设置默认值\n const adapterRegistration: AdapterRegistration = {\n priority: 100,\n enabled: true,\n ...registration,\n };\n\n // 注册适配器\n this.adapters.set(registration.name, adapterRegistration);\n\n logger.debug(`路由适配器已注册: ${registration.name}`);\n\n // 如果没有默认适配器,设置为第一个注册的适配器\n if (!this.defaultAdapterName) {\n this.defaultAdapterName = registration.name;\n }\n\n // 返回取消注册函数\n return () => {\n this.unregister(registration.name);\n };\n }\n\n /**\n * 批量注册适配器\n * \n * @param registrations - 适配器注册信息数组\n */\n registerBatch(registrations: AdapterRegistration[]): void {\n registrations.forEach((registration) => this.register(registration));\n }\n\n /**\n * 取消注册适配器\n * \n * @param name - 适配器名称\n */\n unregister(name: string): void {\n if (this.adapters.has(name)) {\n this.adapters.delete(name);\n logger.debug(`路由适配器已取消注册: ${name}`);\n\n // 如果取消的是默认适配器,重置默认适配器\n if (this.defaultAdapterName === name) {\n const firstAdapter = Array.from(this.adapters.keys())[0];\n this.defaultAdapterName = firstAdapter || null;\n }\n }\n }\n\n /**\n * 创建适配器实例\n * \n * @param name - 适配器名称(可选,使用默认适配器)\n * @param config - 适配器配置\n * @returns 适配器实例\n */\n async createAdapter(\n config: RouterAdapterConfig,\n name?: string\n ): Promise<IRouterAdapter> {\n const adapterName = name || this.defaultAdapterName;\n\n if (!adapterName) {\n throw new RouterError(\n '没有可用的路由适配器',\n RouterErrorCode.ROUTER_NOT_INITIALIZED\n );\n }\n\n const registration = this.adapters.get(adapterName);\n\n if (!registration) {\n throw new RouterError(\n `路由适配器不存在: ${adapterName}`,\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n undefined,\n { adapterName }\n );\n }\n\n if (!registration.enabled) {\n throw new RouterError(\n `路由适配器已禁用: ${adapterName}`,\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n undefined,\n { adapterName }\n );\n }\n\n try {\n // 创建适配器实例\n const adapter = await registration.factory(config);\n\n // 验证适配器\n if (!adapter || typeof adapter.initialize !== 'function') {\n throw new Error('适配器实例无效');\n }\n\n // 初始化适配器\n await adapter.initialize(config);\n\n logger.info(`路由适配器已创建并初始化: ${adapterName}`);\n\n return adapter;\n } catch (error) {\n logger.error(`创建路由适配器失败: ${adapterName}`, error);\n const errorContext: Record<string, unknown> = { adapterName };\n if (error instanceof Error) {\n errorContext.originalError = error;\n }\n throw new RouterError(\n `创建路由适配器失败: ${adapterName}`,\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n error instanceof Error ? error : undefined,\n errorContext\n );\n }\n }\n\n /**\n * 设置当前适配器\n * \n * @param adapter - 适配器实例\n */\n setCurrentAdapter(adapter: IRouterAdapter): void {\n // 销毁旧的适配器\n if (this.currentAdapter && this.currentAdapter.destroy) {\n try {\n this.currentAdapter.destroy();\n } catch (error) {\n logger.warn('销毁旧适配器失败', error);\n }\n }\n\n this.currentAdapter = adapter;\n logger.debug(`当前路由适配器已设置: ${adapter.name}`);\n }\n\n /**\n * 获取当前适配器\n * \n * @returns 当前适配器实例,如果不存在返回 null\n */\n getCurrentAdapter(): IRouterAdapter | null {\n return this.currentAdapter;\n }\n\n /**\n * 设置默认适配器\n * \n * @param name - 适配器名称\n */\n setDefaultAdapter(name: string): void {\n if (!this.adapters.has(name)) {\n throw new Error(`适配器不存在: ${name}`);\n }\n\n this.defaultAdapterName = name;\n logger.debug(`默认路由适配器已设置: ${name}`);\n }\n\n /**\n * 获取默认适配器名称\n * \n * @returns 默认适配器名称\n */\n getDefaultAdapterName(): string | null {\n return this.defaultAdapterName;\n }\n\n /**\n * 获取所有适配器\n * \n * @returns 适配器注册信息数组\n */\n getAllAdapters(): AdapterRegistration[] {\n return Array.from(this.adapters.values());\n }\n\n /**\n * 获取启用的适配器\n * \n * @returns 启用的适配器注册信息数组\n */\n getEnabledAdapters(): AdapterRegistration[] {\n return Array.from(this.adapters.values()).filter((a) => a.enabled !== false);\n }\n\n /**\n * 获取适配器\n * \n * @param name - 适配器名称\n * @returns 适配器注册信息,如果不存在返回 undefined\n */\n getAdapter(name: string): AdapterRegistration | undefined {\n return this.adapters.get(name);\n }\n\n /**\n * 清空所有适配器\n */\n clear(): void {\n // 销毁当前适配器\n if (this.currentAdapter && this.currentAdapter.destroy) {\n try {\n this.currentAdapter.destroy();\n } catch (error) {\n logger.warn('销毁适配器失败', error);\n }\n }\n\n this.adapters.clear();\n this.currentAdapter = null;\n this.defaultAdapterName = null;\n logger.debug('所有路由适配器已清空');\n }\n\n /**\n * 获取适配器数量\n * \n * @returns 适配器数量\n */\n getCount(): number {\n return this.adapters.size;\n }\n}\n\n/**\n * 获取路由适配器管理器单例\n */\nlet adapterManagerInstance: AdapterManager | null = null;\n\nexport function getAdapterManager(): AdapterManager {\n if (!adapterManagerInstance) {\n adapterManagerInstance = new AdapterManager();\n }\n return adapterManagerInstance;\n}\n"],"names":["logger","RouterError","RouterErrorCode","AdapterManager","register","registration","name","Error","factory","adapterRegistration","priority","enabled","adapters","set","debug","defaultAdapterName","unregister","registerBatch","registrations","forEach","has","delete","firstAdapter","Array","from","keys","createAdapter","config","adapterName","ROUTER_NOT_INITIALIZED","get","ROUTER_CONFIG_ERROR","undefined","adapter","initialize","info","error","errorContext","originalError","setCurrentAdapter","currentAdapter","destroy","warn","getCurrentAdapter","setDefaultAdapter","getDefaultAdapterName","getAllAdapters","values","getEnabledAdapters","filter","a","getAdapter","clear","getCount","size","Map","adapterManagerInstance","getAdapterManager"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/adapter/index.ts"],"sourcesContent":["/**\n * 路由适配器模块入口\n */\n\nexport * from './types';\nexport * from './AdapterManager';\nexport * from './react-router';\n"],"names":[],"mappings":"AAAA;;CAEC;;;;qBAEa;qBACA;qBACA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/adapter/index.ts"],"sourcesContent":["/**\n * 路由适配器模块入口\n */\n\nexport * from './types';\nexport * from './AdapterManager';\nexport * from './react-router';\n"],"names":[],"mappings":"AAAA;;CAEC,GAED,cAAc,UAAU;AACxB,cAAc,mBAAmB;AACjC,cAAc,iBAAiB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/core/router/adapter/react-router/ReactRouterAdapter.ts"],"sourcesContent":["/**\n * React Router 适配器实现\n */\n\nimport type { IRouterAdapter, RouterAdapterConfig } from '../types';\nimport type { RouteLocation, NavigateOptions } from '../../types';\nimport type { AppInstance } from '../../../startup/AppInstance';\nimport { createBrowserRouter, createHashRouter, createMemoryRouter } from 'react-router-dom';\nimport { transformRoutesToReactRoutes } from '../../utils/adapters/react-router/transform';\nimport { transformRoutes } from '../../utils/transform';\nimport { logger } from '@vlian/logger';\n\n/**\n * React Router 适配器\n */\nexport class ReactRouterAdapter implements IRouterAdapter {\n readonly name = 'react-router';\n readonly version = '6.0.0';\n\n private router: ReturnType<typeof createBrowserRouter> | null = null;\n\n /**\n * 初始化适配器\n */\n async initialize(config: RouterAdapterConfig): Promise<void> {\n\n // 转换路由配置\n const transformResult = await transformRoutes(config.routes);\n const reactRoutes = await transformRoutesToReactRoutes(\n transformResult.routes,\n transformResult,\n config.defaultRouteErrorComponent,\n config.defaultRouteLoadingComponent,\n Boolean((config.options as { hydrationData?: unknown } | undefined)?.hydrationData),\n );\n\n // 创建路由实例\n const mode = config.mode || 'browser';\n if (mode === 'browser') {\n this.router = createBrowserRouter(reactRoutes, config.options as any);\n } else if (mode === 'hash') {\n this.router = createHashRouter(reactRoutes, config.options as any);\n } else if (mode === 'memory') {\n this.router = createMemoryRouter(reactRoutes, config.options as any);\n } else {\n throw new Error(`不支持的路由模式: ${mode}`);\n }\n\n logger.debug('React Router 适配器初始化完成');\n }\n\n /**\n * 挂载到应用实例\n */\n mount(_app: AppInstance): void {\n if (!this.router) {\n throw new Error('适配器未初始化');\n }\n\n // React Router 适配器通过 RouterProvider 挂载\n // 实际的挂载逻辑在 renderApp 中处理\n logger.debug('React Router 适配器已挂载');\n }\n\n /**\n * 导航到指定路径\n */\n navigate(to: string, options?: NavigateOptions): void {\n if (!this.router) {\n throw new Error('适配器未初始化');\n }\n\n if (options?.replace) {\n this.router.navigate(to, { replace: true, state: options.state });\n } else {\n this.router.navigate(to, { state: options?.state });\n }\n }\n\n /**\n * 获取当前路由信息\n */\n getCurrentRoute(): RouteLocation {\n if (!this.router) {\n throw new Error('适配器未初始化');\n }\n\n const state = this.router.state;\n const location = state.location;\n\n // 解析查询参数\n const query: Record<string, unknown> = {};\n if (location.search) {\n const params = new URLSearchParams(location.search);\n params.forEach((value, key) => {\n query[key] = value;\n });\n }\n\n return {\n path: location.pathname + location.hash,\n query,\n params: location.state as Record<string, unknown> | undefined,\n };\n }\n\n /**\n * 获取路由实例(用于 RouterProvider)\n */\n getRouter(): ReturnType<typeof createBrowserRouter> | null {\n return this.router;\n }\n\n /**\n * 销毁适配器\n */\n destroy(): void {\n this.router = null;\n logger.debug('React Router 适配器已销毁');\n }\n}\n\n/**\n * 创建 React Router 适配器工厂函数\n */\nexport function createReactRouterAdapter(): (_config: RouterAdapterConfig) => IRouterAdapter {\n return (_config: RouterAdapterConfig) => {\n return new ReactRouterAdapter();\n };\n}\n"],"names":["ReactRouterAdapter","createReactRouterAdapter","initialize","config","transformResult","transformRoutes","routes","reactRoutes","transformRoutesToReactRoutes","defaultRouteErrorComponent","defaultRouteLoadingComponent","Boolean","options","hydrationData","mode","router","createBrowserRouter","createHashRouter","createMemoryRouter","Error","logger","debug","mount","_app","navigate","to","replace","state","getCurrentRoute","location","query","search","params","URLSearchParams","forEach","value","key","path","pathname","hash","getRouter","destroy","name","version","_config"],"mappings":"AAAA;;CAEC;;;;;;;;;;;QAaYA;eAAAA;;QA8GGC;eAAAA;;;gCAtH0D;2BAC7B;4BACb;wBACT;;;;;;;;;;;;;;AAKhB,IAAA,AAAMD,qBAAN,MAAMA;IAMX;;GAEC,GACD,MAAME,WAAWC,MAA2B,EAAiB;QAE3D,SAAS;QACT,MAAMC,kBAAkB,MAAMC,IAAAA,2BAAe,EAACF,OAAOG,MAAM;QAC3D,MAAMC,cAAc,MAAMC,IAAAA,uCAA4B,EACpDJ,gBAAgBE,MAAM,EACtBF,iBACAD,OAAOM,0BAA0B,EACjCN,OAAOO,4BAA4B,EACnCC,QAASR,OAAOS,OAAO,EAA8CC;QAGvE,SAAS;QACT,MAAMC,OAAOX,OAAOW,IAAI,IAAI;QAC5B,IAAIA,SAAS,WAAW;YACtB,IAAI,CAACC,MAAM,GAAGC,IAAAA,mCAAmB,EAACT,aAAaJ,OAAOS,OAAO;QAC/D,OAAO,IAAIE,SAAS,QAAQ;YAC1B,IAAI,CAACC,MAAM,GAAGE,IAAAA,gCAAgB,EAACV,aAAaJ,OAAOS,OAAO;QAC5D,OAAO,IAAIE,SAAS,UAAU;YAC5B,IAAI,CAACC,MAAM,GAAGG,IAAAA,kCAAkB,EAACX,aAAaJ,OAAOS,OAAO;QAC9D,OAAO;YACL,MAAM,IAAIO,MAAM,CAAC,UAAU,EAAEL,MAAM;QACrC;QAEAM,cAAM,CAACC,KAAK,CAAC;IACf;IAEA;;GAEC,GACDC,MAAMC,IAAiB,EAAQ;QAC7B,IAAI,CAAC,IAAI,CAACR,MAAM,EAAE;YAChB,MAAM,IAAII,MAAM;QAClB;QAEA,uCAAuC;QACvC,yBAAyB;QACzBC,cAAM,CAACC,KAAK,CAAC;IACf;IAEA;;GAEC,GACDG,SAASC,EAAU,EAAEb,OAAyB,EAAQ;QACpD,IAAI,CAAC,IAAI,CAACG,MAAM,EAAE;YAChB,MAAM,IAAII,MAAM;QAClB;QAEA,IAAIP,SAASc,SAAS;YACpB,IAAI,CAACX,MAAM,CAACS,QAAQ,CAACC,IAAI;gBAAEC,SAAS;gBAAMC,OAAOf,QAAQe,KAAK;YAAC;QACjE,OAAO;YACL,IAAI,CAACZ,MAAM,CAACS,QAAQ,CAACC,IAAI;gBAAEE,OAAOf,SAASe;YAAM;QACnD;IACF;IAEA;;GAEC,GACDC,kBAAiC;QAC/B,IAAI,CAAC,IAAI,CAACb,MAAM,EAAE;YAChB,MAAM,IAAII,MAAM;QAClB;QAEA,MAAMQ,QAAQ,IAAI,CAACZ,MAAM,CAACY,KAAK;QAC/B,MAAME,WAAWF,MAAME,QAAQ;QAE/B,SAAS;QACT,MAAMC,QAAiC,CAAC;QACxC,IAAID,SAASE,MAAM,EAAE;YACnB,MAAMC,SAAS,IAAIC,gBAAgBJ,SAASE,MAAM;YAClDC,OAAOE,OAAO,CAAC,CAACC,OAAOC;gBACrBN,KAAK,CAACM,IAAI,GAAGD;YACf;QACF;QAEA,OAAO;YACLE,MAAMR,SAASS,QAAQ,GAAGT,SAASU,IAAI;YACvCT;YACAE,QAAQH,SAASF,KAAK;QACxB;IACF;IAEA;;GAEC,GACDa,YAA2D;QACzD,OAAO,IAAI,CAACzB,MAAM;IACpB;IAEA;;GAEC,GACD0B,UAAgB;QACd,IAAI,CAAC1B,MAAM,GAAG;QACdK,cAAM,CAACC,KAAK,CAAC;IACf;;QAvGA,uBAASqB,QAAO;QAChB,uBAASC,WAAU;QAEnB,uBAAQ5B,UAAwD;;AAqGlE;AAKO,SAASd;IACd,OAAO,CAAC2C;QACN,OAAO,IAAI5C;IACb;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/core/router/adapter/react-router/ReactRouterAdapter.ts"],"sourcesContent":["/**\n * React Router 适配器实现\n */\n\nimport type { IRouterAdapter, RouterAdapterConfig } from '../types';\nimport type { RouteLocation, NavigateOptions } from '../../types';\nimport type { AppInstance } from '../../../startup/AppInstance';\nimport { createBrowserRouter, createHashRouter, createMemoryRouter } from 'react-router-dom';\nimport { transformRoutesToReactRoutes } from '../../utils/adapters/react-router/transform';\nimport { transformRoutes } from '../../utils/transform';\nimport { logger } from '@vlian/logger';\n\n/**\n * React Router 适配器\n */\nexport class ReactRouterAdapter implements IRouterAdapter {\n readonly name = 'react-router';\n readonly version = '6.0.0';\n\n private router: ReturnType<typeof createBrowserRouter> | null = null;\n\n /**\n * 初始化适配器\n */\n async initialize(config: RouterAdapterConfig): Promise<void> {\n\n // 转换路由配置\n const transformResult = await transformRoutes(config.routes);\n const reactRoutes = await transformRoutesToReactRoutes(\n transformResult.routes,\n transformResult,\n config.defaultRouteErrorComponent,\n config.defaultRouteLoadingComponent,\n Boolean((config.options as { hydrationData?: unknown } | undefined)?.hydrationData),\n );\n\n // 创建路由实例\n const mode = config.mode || 'browser';\n if (mode === 'browser') {\n this.router = createBrowserRouter(reactRoutes, config.options as any);\n } else if (mode === 'hash') {\n this.router = createHashRouter(reactRoutes, config.options as any);\n } else if (mode === 'memory') {\n this.router = createMemoryRouter(reactRoutes, config.options as any);\n } else {\n throw new Error(`不支持的路由模式: ${mode}`);\n }\n\n logger.debug('React Router 适配器初始化完成');\n }\n\n /**\n * 挂载到应用实例\n */\n mount(_app: AppInstance): void {\n if (!this.router) {\n throw new Error('适配器未初始化');\n }\n\n // React Router 适配器通过 RouterProvider 挂载\n // 实际的挂载逻辑在 renderApp 中处理\n logger.debug('React Router 适配器已挂载');\n }\n\n /**\n * 导航到指定路径\n */\n navigate(to: string, options?: NavigateOptions): void {\n if (!this.router) {\n throw new Error('适配器未初始化');\n }\n\n if (options?.replace) {\n this.router.navigate(to, { replace: true, state: options.state });\n } else {\n this.router.navigate(to, { state: options?.state });\n }\n }\n\n /**\n * 获取当前路由信息\n */\n getCurrentRoute(): RouteLocation {\n if (!this.router) {\n throw new Error('适配器未初始化');\n }\n\n const state = this.router.state;\n const location = state.location;\n\n // 解析查询参数\n const query: Record<string, unknown> = {};\n if (location.search) {\n const params = new URLSearchParams(location.search);\n params.forEach((value, key) => {\n query[key] = value;\n });\n }\n\n return {\n path: location.pathname + location.hash,\n query,\n params: location.state as Record<string, unknown> | undefined,\n };\n }\n\n /**\n * 获取路由实例(用于 RouterProvider)\n */\n getRouter(): ReturnType<typeof createBrowserRouter> | null {\n return this.router;\n }\n\n /**\n * 销毁适配器\n */\n destroy(): void {\n this.router = null;\n logger.debug('React Router 适配器已销毁');\n }\n}\n\n/**\n * 创建 React Router 适配器工厂函数\n */\nexport function createReactRouterAdapter(): (_config: RouterAdapterConfig) => IRouterAdapter {\n return (_config: RouterAdapterConfig) => {\n return new ReactRouterAdapter();\n };\n}\n"],"names":["createBrowserRouter","createHashRouter","createMemoryRouter","transformRoutesToReactRoutes","transformRoutes","logger","ReactRouterAdapter","initialize","config","transformResult","routes","reactRoutes","defaultRouteErrorComponent","defaultRouteLoadingComponent","Boolean","options","hydrationData","mode","router","Error","debug","mount","_app","navigate","to","replace","state","getCurrentRoute","location","query","search","params","URLSearchParams","forEach","value","key","path","pathname","hash","getRouter","destroy","name","version","createReactRouterAdapter","_config"],"mappings":"AAAA;;CAEC;;;;;;;;;;;;;AAKD,SAASA,mBAAmB,EAAEC,gBAAgB,EAAEC,kBAAkB,QAAQ,mBAAmB;AAC7F,SAASC,4BAA4B,QAAQ,8CAA8C;AAC3F,SAASC,eAAe,QAAQ,wBAAwB;AACxD,SAASC,MAAM,QAAQ,gBAAgB;AAEvC;;CAEC,GACD,OAAO,MAAMC;IAMX;;GAEC,GACD,MAAMC,WAAWC,MAA2B,EAAiB;QAE3D,SAAS;QACT,MAAMC,kBAAkB,MAAML,gBAAgBI,OAAOE,MAAM;QAC3D,MAAMC,cAAc,MAAMR,6BACxBM,gBAAgBC,MAAM,EACtBD,iBACAD,OAAOI,0BAA0B,EACjCJ,OAAOK,4BAA4B,EACnCC,QAASN,OAAOO,OAAO,EAA8CC;QAGvE,SAAS;QACT,MAAMC,OAAOT,OAAOS,IAAI,IAAI;QAC5B,IAAIA,SAAS,WAAW;YACtB,IAAI,CAACC,MAAM,GAAGlB,oBAAoBW,aAAaH,OAAOO,OAAO;QAC/D,OAAO,IAAIE,SAAS,QAAQ;YAC1B,IAAI,CAACC,MAAM,GAAGjB,iBAAiBU,aAAaH,OAAOO,OAAO;QAC5D,OAAO,IAAIE,SAAS,UAAU;YAC5B,IAAI,CAACC,MAAM,GAAGhB,mBAAmBS,aAAaH,OAAOO,OAAO;QAC9D,OAAO;YACL,MAAM,IAAII,MAAM,CAAC,UAAU,EAAEF,MAAM;QACrC;QAEAZ,OAAOe,KAAK,CAAC;IACf;IAEA;;GAEC,GACDC,MAAMC,IAAiB,EAAQ;QAC7B,IAAI,CAAC,IAAI,CAACJ,MAAM,EAAE;YAChB,MAAM,IAAIC,MAAM;QAClB;QAEA,uCAAuC;QACvC,yBAAyB;QACzBd,OAAOe,KAAK,CAAC;IACf;IAEA;;GAEC,GACDG,SAASC,EAAU,EAAET,OAAyB,EAAQ;QACpD,IAAI,CAAC,IAAI,CAACG,MAAM,EAAE;YAChB,MAAM,IAAIC,MAAM;QAClB;QAEA,IAAIJ,SAASU,SAAS;YACpB,IAAI,CAACP,MAAM,CAACK,QAAQ,CAACC,IAAI;gBAAEC,SAAS;gBAAMC,OAAOX,QAAQW,KAAK;YAAC;QACjE,OAAO;YACL,IAAI,CAACR,MAAM,CAACK,QAAQ,CAACC,IAAI;gBAAEE,OAAOX,SAASW;YAAM;QACnD;IACF;IAEA;;GAEC,GACDC,kBAAiC;QAC/B,IAAI,CAAC,IAAI,CAACT,MAAM,EAAE;YAChB,MAAM,IAAIC,MAAM;QAClB;QAEA,MAAMO,QAAQ,IAAI,CAACR,MAAM,CAACQ,KAAK;QAC/B,MAAME,WAAWF,MAAME,QAAQ;QAE/B,SAAS;QACT,MAAMC,QAAiC,CAAC;QACxC,IAAID,SAASE,MAAM,EAAE;YACnB,MAAMC,SAAS,IAAIC,gBAAgBJ,SAASE,MAAM;YAClDC,OAAOE,OAAO,CAAC,CAACC,OAAOC;gBACrBN,KAAK,CAACM,IAAI,GAAGD;YACf;QACF;QAEA,OAAO;YACLE,MAAMR,SAASS,QAAQ,GAAGT,SAASU,IAAI;YACvCT;YACAE,QAAQH,SAASF,KAAK;QACxB;IACF;IAEA;;GAEC,GACDa,YAA2D;QACzD,OAAO,IAAI,CAACrB,MAAM;IACpB;IAEA;;GAEC,GACDsB,UAAgB;QACd,IAAI,CAACtB,MAAM,GAAG;QACdb,OAAOe,KAAK,CAAC;IACf;;QAvGA,uBAASqB,QAAO;QAChB,uBAASC,WAAU;QAEnB,uBAAQxB,UAAwD;;AAqGlE;AAEA;;CAEC,GACD,OAAO,SAASyB;IACd,OAAO,CAACC;QACN,OAAO,IAAItC;IACb;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/core/router/adapter/react-router/index.ts"],"sourcesContent":["/**\n * React Router 适配器模块入口\n */\n\nexport * from './ReactRouterAdapter';\n"],"names":[],"mappings":"AAAA;;CAEC;;;;qBAEa"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/core/router/adapter/react-router/index.ts"],"sourcesContent":["/**\n * React Router 适配器模块入口\n */\n\nexport * from './ReactRouterAdapter';\n"],"names":[],"mappings":"AAAA;;CAEC,GAED,cAAc,uBAAuB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/adapter/types.ts"],"sourcesContent":["/**\n * 路由适配器类型定义\n */\n\nimport type { RouteConfig, RouteLocation, NavigateOptions } from '../types';\nimport type { AppInstance } from '../../startup/AppInstance';\n\n/**\n * 路由适配器接口\n * 所有路由库适配器都必须实现此接口\n */\nexport interface IRouterAdapter {\n /**\n * 适配器名称\n */\n readonly name: string;\n\n /**\n * 适配器版本\n */\n readonly version?: string;\n\n /**\n * 初始化适配器\n * \n * @param config - 路由配置\n * @returns Promise<void>\n */\n initialize(config: RouterAdapterConfig): Promise<void>;\n\n /**\n * 挂载到应用实例\n * \n * @param app - 应用实例\n */\n mount(app: AppInstance): void;\n\n /**\n * 导航到指定路径\n * \n * @param to - 目标路径或路由名称\n * @param options - 导航选项\n */\n navigate(to: string, options?: NavigateOptions): void | Promise<void>;\n\n /**\n * 获取当前路由信息\n * \n * @returns 当前路由位置信息\n */\n getCurrentRoute(): RouteLocation;\n\n /**\n * 销毁适配器\n */\n destroy?(): void;\n}\n\n/**\n * 路由适配器配置\n */\nexport interface RouterAdapterConfig {\n /**\n * 路由配置列表\n */\n routes: RouteConfig[];\n\n /**\n * 路由模式\n */\n mode?: 'browser' | 'hash' | 'memory';\n\n /**\n * 适配器特定选项\n */\n options?: Record<string, unknown>;\n\n /**\n * 默认路由错误组件\n * \n * 当路由配置中的 `errors` 为空时,将使用此组件作为错误边界。\n * 如果不提供,将使用框架内置的 `RouteErrorBoundary` 组件。\n * \n * 组件必须使用默认导出(export default)。\n */\n defaultRouteErrorComponent?: import('../types').ComponentImport;\n\n /**\n * 默认路由加载组件\n * \n * 当路由配置中的 `loading` 为空时,将使用此组件作为加载指示器。\n * 如果不提供,将使用框架内置 Loading 组件。\n * \n * 组件必须使用默认导出(export default)。\n */\n defaultRouteLoadingComponent?: import('../types').ComponentImport;\n}\n\n/**\n * 路由适配器工厂函数\n */\nexport type RouterAdapterFactory = (config: RouterAdapterConfig) => IRouterAdapter | Promise<IRouterAdapter>;\n\n/**\n * 适配器注册信息\n */\nexport interface AdapterRegistration {\n /**\n * 适配器名称\n */\n name: string;\n\n /**\n * 适配器工厂函数\n */\n factory: RouterAdapterFactory;\n\n /**\n * 适配器优先级(数字越小优先级越高)\n * @default 100\n */\n priority?: number;\n\n /**\n * 是否启用\n * @default true\n */\n enabled?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;CAEC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/adapter/types.ts"],"sourcesContent":["/**\n * 路由适配器类型定义\n */\n\nimport type { RouteConfig, RouteLocation, NavigateOptions } from '../types';\nimport type { AppInstance } from '../../startup/AppInstance';\n\n/**\n * 路由适配器接口\n * 所有路由库适配器都必须实现此接口\n */\nexport interface IRouterAdapter {\n /**\n * 适配器名称\n */\n readonly name: string;\n\n /**\n * 适配器版本\n */\n readonly version?: string;\n\n /**\n * 初始化适配器\n * \n * @param config - 路由配置\n * @returns Promise<void>\n */\n initialize(config: RouterAdapterConfig): Promise<void>;\n\n /**\n * 挂载到应用实例\n * \n * @param app - 应用实例\n */\n mount(app: AppInstance): void;\n\n /**\n * 导航到指定路径\n * \n * @param to - 目标路径或路由名称\n * @param options - 导航选项\n */\n navigate(to: string, options?: NavigateOptions): void | Promise<void>;\n\n /**\n * 获取当前路由信息\n * \n * @returns 当前路由位置信息\n */\n getCurrentRoute(): RouteLocation;\n\n /**\n * 销毁适配器\n */\n destroy?(): void;\n}\n\n/**\n * 路由适配器配置\n */\nexport interface RouterAdapterConfig {\n /**\n * 路由配置列表\n */\n routes: RouteConfig[];\n\n /**\n * 路由模式\n */\n mode?: 'browser' | 'hash' | 'memory';\n\n /**\n * 适配器特定选项\n */\n options?: Record<string, unknown>;\n\n /**\n * 默认路由错误组件\n * \n * 当路由配置中的 `errors` 为空时,将使用此组件作为错误边界。\n * 如果不提供,将使用框架内置的 `RouteErrorBoundary` 组件。\n * \n * 组件必须使用默认导出(export default)。\n */\n defaultRouteErrorComponent?: import('../types').ComponentImport;\n\n /**\n * 默认路由加载组件\n * \n * 当路由配置中的 `loading` 为空时,将使用此组件作为加载指示器。\n * 如果不提供,将使用框架内置 Loading 组件。\n * \n * 组件必须使用默认导出(export default)。\n */\n defaultRouteLoadingComponent?: import('../types').ComponentImport;\n}\n\n/**\n * 路由适配器工厂函数\n */\nexport type RouterAdapterFactory = (config: RouterAdapterConfig) => IRouterAdapter | Promise<IRouterAdapter>;\n\n/**\n * 适配器注册信息\n */\nexport interface AdapterRegistration {\n /**\n * 适配器名称\n */\n name: string;\n\n /**\n * 适配器工厂函数\n */\n factory: RouterAdapterFactory;\n\n /**\n * 适配器优先级(数字越小优先级越高)\n * @default 100\n */\n priority?: number;\n\n /**\n * 是否启用\n * @default true\n */\n enabled?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;CAEC,GAqGD;;CAEC,GACD,WAsBC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/dev/RouterDevTools.tsx"],"sourcesContent":["/**\n * 路由调试工具(开发环境,无 UI 框架依赖)\n */\n\nimport React, { useState, useEffect } from 'react';\nimport { getRouterManager } from '../RouterManager';\nimport { getRouterLifecycleManager } from '../lifecycle';\nimport { getRouterMiddlewareManager } from '../middleware';\nimport { RouterNavigation } from '../navigation';\nimport type { RouteLocation } from '../types';\n\nfunction pretty(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nexport function RouterDevTools(): React.ReactElement | null {\n if (process.env.NODE_ENV !== 'development') {\n return null;\n }\n\n const [visible, setVisible] = useState(false);\n const [currentRoute, setCurrentRoute] = useState<RouteLocation | null>(null);\n const [routeState, setRouteState] = useState<Record<string, unknown>>({});\n const [lifecycleHooks, setLifecycleHooks] = useState<\n Array<{ key: number; hasBeforeEach: boolean; hasAfterEach: boolean }>\n >([]);\n const [middlewares, setMiddlewares] = useState<\n Array<{ key: number; name: string; priority: number; enabled: boolean }>\n >([]);\n\n const updateRouteInfo = () => {\n try {\n const route = RouterNavigation.getCurrentRoute();\n setCurrentRoute(route);\n\n const router = getRouterManager().getRouter();\n if (router) {\n const state = router.state;\n setRouteState({\n pathname: state.location.pathname,\n search: state.location.search || '',\n hash: state.location.hash || '',\n state: state.location.state || {},\n });\n } else {\n setRouteState({});\n }\n\n const hooks = getRouterLifecycleManager().getAll();\n setLifecycleHooks(hooks.map((hook, index) => ({\n key: index,\n hasBeforeEach: !!hook.beforeEach,\n hasAfterEach: !!hook.afterEach,\n })));\n\n const middlewareList = getRouterMiddlewareManager().getAll();\n setMiddlewares(middlewareList.map((m, index) => ({\n key: index,\n name: m.name || `middleware-${index}`,\n priority: m.priority || 100,\n enabled: m.enabled !== false,\n })));\n } catch (error) {\n console.error('更新路由信息失败', error);\n }\n };\n\n useEffect(() => {\n if (!visible) {\n return;\n }\n updateRouteInfo();\n const timer = setInterval(updateRouteInfo, 1000);\n return () => clearInterval(timer);\n }, [visible]);\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setVisible(true)}\n style={{\n position: 'fixed',\n right: 20,\n bottom: 20,\n zIndex: 9999,\n border: 'none',\n background: '#2f80ed',\n color: '#fff',\n borderRadius: 999,\n padding: '8px 12px',\n cursor: 'pointer',\n }}\n >\n 路由调试\n </button>\n\n {visible && (\n <div\n style={{\n position: 'fixed',\n top: 0,\n right: 0,\n width: 'min(800px, 96vw)',\n height: '100vh',\n zIndex: 10000,\n background: '#fff',\n borderLeft: '1px solid #d9e2ec',\n boxShadow: '-8px 0 20px rgba(0, 0, 0, 0.08)',\n padding: 16,\n overflowY: 'auto',\n }}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <h3 style={{ margin: 0 }}>路由调试工具</h3>\n <div style={{ display: 'flex', gap: 8 }}>\n <button onClick={updateRouteInfo}>刷新</button>\n <button onClick={() => setVisible(false)}>关闭</button>\n </div>\n </div>\n\n <section style={{ marginTop: 12 }}>\n <h4>当前路由</h4>\n <pre style={{ background: '#f7fafc', borderRadius: 8, padding: 12 }}>\n {pretty(currentRoute || {})}\n </pre>\n </section>\n\n <section style={{ marginTop: 12 }}>\n <h4>路由状态</h4>\n <pre style={{ background: '#f7fafc', borderRadius: 8, padding: 12 }}>\n {pretty(routeState)}\n </pre>\n </section>\n\n <section style={{ marginTop: 12 }}>\n <h4>生命周期钩子</h4>\n <pre style={{ background: '#f7fafc', borderRadius: 8, padding: 12 }}>\n {pretty(lifecycleHooks)}\n </pre>\n </section>\n\n <section style={{ marginTop: 12 }}>\n <h4>中间件</h4>\n <pre style={{ background: '#f7fafc', borderRadius: 8, padding: 12 }}>\n {pretty(middlewares)}\n </pre>\n </section>\n </div>\n )}\n </>\n );\n}\n"],"names":["RouterDevTools","pretty","value","JSON","stringify","String","process","env","NODE_ENV","visible","setVisible","useState","currentRoute","setCurrentRoute","routeState","setRouteState","lifecycleHooks","setLifecycleHooks","middlewares","setMiddlewares","updateRouteInfo","route","RouterNavigation","getCurrentRoute","router","getRouterManager","getRouter","state","pathname","location","search","hash","hooks","getRouterLifecycleManager","getAll","map","hook","index","key","hasBeforeEach","beforeEach","hasAfterEach","afterEach","middlewareList","getRouterMiddlewareManager","m","name","priority","enabled","error","console","useEffect","timer","setInterval","clearInterval","button","type","onClick","style","position","right","bottom","zIndex","border","background","color","borderRadius","padding","cursor","div","top","width","height","borderLeft","boxShadow","overflowY","display","justifyContent","alignItems","h3","margin","gap","section","marginTop","h4","pre"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/dev/RouterDevTools.tsx"],"sourcesContent":["/**\n * 路由调试工具(开发环境,无 UI 框架依赖)\n */\n\nimport React, { useState, useEffect } from 'react';\nimport { getRouterManager } from '../RouterManager';\nimport { getRouterLifecycleManager } from '../lifecycle';\nimport { getRouterMiddlewareManager } from '../middleware';\nimport { RouterNavigation } from '../navigation';\nimport type { RouteLocation } from '../types';\n\nfunction pretty(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nexport function RouterDevTools(): React.ReactElement | null {\n if (process.env.NODE_ENV !== 'development') {\n return null;\n }\n\n const [visible, setVisible] = useState(false);\n const [currentRoute, setCurrentRoute] = useState<RouteLocation | null>(null);\n const [routeState, setRouteState] = useState<Record<string, unknown>>({});\n const [lifecycleHooks, setLifecycleHooks] = useState<\n Array<{ key: number; hasBeforeEach: boolean; hasAfterEach: boolean }>\n >([]);\n const [middlewares, setMiddlewares] = useState<\n Array<{ key: number; name: string; priority: number; enabled: boolean }>\n >([]);\n\n const updateRouteInfo = () => {\n try {\n const route = RouterNavigation.getCurrentRoute();\n setCurrentRoute(route);\n\n const router = getRouterManager().getRouter();\n if (router) {\n const state = router.state;\n setRouteState({\n pathname: state.location.pathname,\n search: state.location.search || '',\n hash: state.location.hash || '',\n state: state.location.state || {},\n });\n } else {\n setRouteState({});\n }\n\n const hooks = getRouterLifecycleManager().getAll();\n setLifecycleHooks(hooks.map((hook, index) => ({\n key: index,\n hasBeforeEach: !!hook.beforeEach,\n hasAfterEach: !!hook.afterEach,\n })));\n\n const middlewareList = getRouterMiddlewareManager().getAll();\n setMiddlewares(middlewareList.map((m, index) => ({\n key: index,\n name: m.name || `middleware-${index}`,\n priority: m.priority || 100,\n enabled: m.enabled !== false,\n })));\n } catch (error) {\n console.error('更新路由信息失败', error);\n }\n };\n\n useEffect(() => {\n if (!visible) {\n return;\n }\n updateRouteInfo();\n const timer = setInterval(updateRouteInfo, 1000);\n return () => clearInterval(timer);\n }, [visible]);\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setVisible(true)}\n style={{\n position: 'fixed',\n right: 20,\n bottom: 20,\n zIndex: 9999,\n border: 'none',\n background: '#2f80ed',\n color: '#fff',\n borderRadius: 999,\n padding: '8px 12px',\n cursor: 'pointer',\n }}\n >\n 路由调试\n </button>\n\n {visible && (\n <div\n style={{\n position: 'fixed',\n top: 0,\n right: 0,\n width: 'min(800px, 96vw)',\n height: '100vh',\n zIndex: 10000,\n background: '#fff',\n borderLeft: '1px solid #d9e2ec',\n boxShadow: '-8px 0 20px rgba(0, 0, 0, 0.08)',\n padding: 16,\n overflowY: 'auto',\n }}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <h3 style={{ margin: 0 }}>路由调试工具</h3>\n <div style={{ display: 'flex', gap: 8 }}>\n <button onClick={updateRouteInfo}>刷新</button>\n <button onClick={() => setVisible(false)}>关闭</button>\n </div>\n </div>\n\n <section style={{ marginTop: 12 }}>\n <h4>当前路由</h4>\n <pre style={{ background: '#f7fafc', borderRadius: 8, padding: 12 }}>\n {pretty(currentRoute || {})}\n </pre>\n </section>\n\n <section style={{ marginTop: 12 }}>\n <h4>路由状态</h4>\n <pre style={{ background: '#f7fafc', borderRadius: 8, padding: 12 }}>\n {pretty(routeState)}\n </pre>\n </section>\n\n <section style={{ marginTop: 12 }}>\n <h4>生命周期钩子</h4>\n <pre style={{ background: '#f7fafc', borderRadius: 8, padding: 12 }}>\n {pretty(lifecycleHooks)}\n </pre>\n </section>\n\n <section style={{ marginTop: 12 }}>\n <h4>中间件</h4>\n <pre style={{ background: '#f7fafc', borderRadius: 8, padding: 12 }}>\n {pretty(middlewares)}\n </pre>\n </section>\n </div>\n )}\n </>\n );\n}\n"],"names":["React","useState","useEffect","getRouterManager","getRouterLifecycleManager","getRouterMiddlewareManager","RouterNavigation","pretty","value","JSON","stringify","String","RouterDevTools","process","env","NODE_ENV","visible","setVisible","currentRoute","setCurrentRoute","routeState","setRouteState","lifecycleHooks","setLifecycleHooks","middlewares","setMiddlewares","updateRouteInfo","route","getCurrentRoute","router","getRouter","state","pathname","location","search","hash","hooks","getAll","map","hook","index","key","hasBeforeEach","beforeEach","hasAfterEach","afterEach","middlewareList","m","name","priority","enabled","error","console","timer","setInterval","clearInterval","button","type","onClick","style","position","right","bottom","zIndex","border","background","color","borderRadius","padding","cursor","div","top","width","height","borderLeft","boxShadow","overflowY","display","justifyContent","alignItems","h3","margin","gap","section","marginTop","h4","pre"],"mappings":";AAAA;;CAEC,GAED,OAAOA,SAASC,QAAQ,EAAEC,SAAS,QAAQ,QAAQ;AACnD,SAASC,gBAAgB,QAAQ,mBAAmB;AACpD,SAASC,yBAAyB,QAAQ,eAAe;AACzD,SAASC,0BAA0B,QAAQ,gBAAgB;AAC3D,SAASC,gBAAgB,QAAQ,gBAAgB;AAGjD,SAASC,OAAOC,KAAc;IAC5B,IAAI;QACF,OAAOC,KAAKC,SAAS,CAACF,OAAO,MAAM;IACrC,EAAE,OAAM;QACN,OAAOG,OAAOH;IAChB;AACF;AAEA,OAAO,SAASI;IACd,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1C,OAAO;IACT;IAEA,MAAM,CAACC,SAASC,WAAW,GAAGhB,SAAS;IACvC,MAAM,CAACiB,cAAcC,gBAAgB,GAAGlB,SAA+B;IACvE,MAAM,CAACmB,YAAYC,cAAc,GAAGpB,SAAkC,CAAC;IACvE,MAAM,CAACqB,gBAAgBC,kBAAkB,GAAGtB,SAE1C,EAAE;IACJ,MAAM,CAACuB,aAAaC,eAAe,GAAGxB,SAEpC,EAAE;IAEJ,MAAMyB,kBAAkB;QACtB,IAAI;YACF,MAAMC,QAAQrB,iBAAiBsB,eAAe;YAC9CT,gBAAgBQ;YAEhB,MAAME,SAAS1B,mBAAmB2B,SAAS;YAC3C,IAAID,QAAQ;gBACV,MAAME,QAAQF,OAAOE,KAAK;gBAC1BV,cAAc;oBACZW,UAAUD,MAAME,QAAQ,CAACD,QAAQ;oBACjCE,QAAQH,MAAME,QAAQ,CAACC,MAAM,IAAI;oBACjCC,MAAMJ,MAAME,QAAQ,CAACE,IAAI,IAAI;oBAC7BJ,OAAOA,MAAME,QAAQ,CAACF,KAAK,IAAI,CAAC;gBAClC;YACF,OAAO;gBACLV,cAAc,CAAC;YACjB;YAEA,MAAMe,QAAQhC,4BAA4BiC,MAAM;YAChDd,kBAAkBa,MAAME,GAAG,CAAC,CAACC,MAAMC,QAAW,CAAA;oBAC5CC,KAAKD;oBACLE,eAAe,CAAC,CAACH,KAAKI,UAAU;oBAChCC,cAAc,CAAC,CAACL,KAAKM,SAAS;gBAChC,CAAA;YAEA,MAAMC,iBAAiBzC,6BAA6BgC,MAAM;YAC1DZ,eAAeqB,eAAeR,GAAG,CAAC,CAACS,GAAGP,QAAW,CAAA;oBAC/CC,KAAKD;oBACLQ,MAAMD,EAAEC,IAAI,IAAI,CAAC,WAAW,EAAER,OAAO;oBACrCS,UAAUF,EAAEE,QAAQ,IAAI;oBACxBC,SAASH,EAAEG,OAAO,KAAK;gBACzB,CAAA;QACF,EAAE,OAAOC,OAAO;YACdC,QAAQD,KAAK,CAAC,YAAYA;QAC5B;IACF;IAEAjD,UAAU;QACR,IAAI,CAACc,SAAS;YACZ;QACF;QACAU;QACA,MAAM2B,QAAQC,YAAY5B,iBAAiB;QAC3C,OAAO,IAAM6B,cAAcF;IAC7B,GAAG;QAACrC;KAAQ;IAEZ,qBACE;;0BACE,KAACwC;gBACCC,MAAK;gBACLC,SAAS,IAAMzC,WAAW;gBAC1B0C,OAAO;oBACLC,UAAU;oBACVC,OAAO;oBACPC,QAAQ;oBACRC,QAAQ;oBACRC,QAAQ;oBACRC,YAAY;oBACZC,OAAO;oBACPC,cAAc;oBACdC,SAAS;oBACTC,QAAQ;gBACV;0BACD;;YAIArD,yBACC,MAACsD;gBACCX,OAAO;oBACLC,UAAU;oBACVW,KAAK;oBACLV,OAAO;oBACPW,OAAO;oBACPC,QAAQ;oBACRV,QAAQ;oBACRE,YAAY;oBACZS,YAAY;oBACZC,WAAW;oBACXP,SAAS;oBACTQ,WAAW;gBACb;;kCAEA,MAACN;wBAAIX,OAAO;4BAAEkB,SAAS;4BAAQC,gBAAgB;4BAAiBC,YAAY;wBAAS;;0CACnF,KAACC;gCAAGrB,OAAO;oCAAEsB,QAAQ;gCAAE;0CAAG;;0CAC1B,MAACX;gCAAIX,OAAO;oCAAEkB,SAAS;oCAAQK,KAAK;gCAAE;;kDACpC,KAAC1B;wCAAOE,SAAShC;kDAAiB;;kDAClC,KAAC8B;wCAAOE,SAAS,IAAMzC,WAAW;kDAAQ;;;;;;kCAI9C,MAACkE;wBAAQxB,OAAO;4BAAEyB,WAAW;wBAAG;;0CAC9B,KAACC;0CAAG;;0CACJ,KAACC;gCAAI3B,OAAO;oCAAEM,YAAY;oCAAWE,cAAc;oCAAGC,SAAS;gCAAG;0CAC/D7D,OAAOW,gBAAgB,CAAC;;;;kCAI7B,MAACiE;wBAAQxB,OAAO;4BAAEyB,WAAW;wBAAG;;0CAC9B,KAACC;0CAAG;;0CACJ,KAACC;gCAAI3B,OAAO;oCAAEM,YAAY;oCAAWE,cAAc;oCAAGC,SAAS;gCAAG;0CAC/D7D,OAAOa;;;;kCAIZ,MAAC+D;wBAAQxB,OAAO;4BAAEyB,WAAW;wBAAG;;0CAC9B,KAACC;0CAAG;;0CACJ,KAACC;gCAAI3B,OAAO;oCAAEM,YAAY;oCAAWE,cAAc;oCAAGC,SAAS;gCAAG;0CAC/D7D,OAAOe;;;;kCAIZ,MAAC6D;wBAAQxB,OAAO;4BAAEyB,WAAW;wBAAG;;0CAC9B,KAACC;0CAAG;;0CACJ,KAACC;gCAAI3B,OAAO;oCAAEM,YAAY;oCAAWE,cAAc;oCAAGC,SAAS;gCAAG;0CAC/D7D,OAAOiB;;;;;;;;AAOtB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/dev/index.ts"],"sourcesContent":["/**\n * 路由开发工具模块入口\n */\n\nexport * from './RouterDevTools';\n"],"names":[],"mappings":"AAAA;;CAEC;;;;qBAEa"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/dev/index.ts"],"sourcesContent":["/**\n * 路由开发工具模块入口\n */\n\nexport * from './RouterDevTools';\n"],"names":[],"mappings":"AAAA;;CAEC,GAED,cAAc,mBAAmB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/dynamic/DynamicRouteManager.ts"],"sourcesContent":["/**\n * 路由动态注册管理器\n * 支持运行时动态注册和卸载路由\n */\n\nimport { logger } from '@vlian/logger';\nimport type { RouteConfig } from '../types';\nimport { getRouterManager } from '../RouterManager';\nimport { transformRoutes } from '../utils/transform';\nimport { RouterError, RouterErrorCode } from '../errors';\n\n/**\n * 动态路由注册管理器\n */\nexport class DynamicRouteManager {\n private registeredRoutes: Map<string, RouteConfig[]> = new Map();\n private routeVersion: number = 0;\n\n /**\n * 注册路由\n * \n * @param routes - 要注册的路由配置\n * @param namespace - 路由命名空间(可选,用于分组管理)\n * @returns 取消注册函数\n */\n async register(\n routes: RouteConfig[],\n namespace?: string\n ): Promise<() => Promise<void>> {\n const ns = namespace || 'default';\n\n // 验证路由配置\n if (!Array.isArray(routes) || routes.length === 0) {\n throw new RouterError(\n '路由配置必须是非空数组',\n RouterErrorCode.ROUTER_CONFIG_ERROR\n );\n }\n\n // 检查路由名称是否冲突\n const existingRoutes = this.registeredRoutes.get(ns) || [];\n const existingNames = new Set(existingRoutes.map((r) => r.name));\n const newNames = routes.map((r) => r.name);\n const conflicts = newNames.filter((name) => existingNames.has(name));\n\n if (conflicts.length > 0) {\n throw new RouterError(\n `路由名称冲突: ${conflicts.join(', ')}`,\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n undefined,\n { conflicts, namespace: ns }\n );\n }\n\n // 添加到注册表\n const currentRoutes = this.registeredRoutes.get(ns) || [];\n this.registeredRoutes.set(ns, [...currentRoutes, ...routes]);\n\n // 更新版本号\n this.routeVersion++;\n\n logger.info(`路由已注册: ${routes.length} 个路由到命名空间 \"${ns}\"`);\n\n // 返回取消注册函数\n return async () => {\n await this.unregister(routes.map((r) => r.name), ns);\n };\n }\n\n /**\n * 取消注册路由\n * \n * @param routeNames - 要取消注册的路由名称数组\n * @param namespace - 路由命名空间(可选)\n */\n async unregister(routeNames: string[], namespace?: string): Promise<void> {\n const ns = namespace || 'default';\n const routes = this.registeredRoutes.get(ns) || [];\n\n // 过滤掉要取消注册的路由\n const filteredRoutes = routes.filter((r) => !routeNames.includes(r.name));\n\n if (filteredRoutes.length === routes.length) {\n logger.warn(`未找到要取消注册的路由: ${routeNames.join(', ')}`);\n return;\n }\n\n // 更新注册表\n if (filteredRoutes.length === 0) {\n this.registeredRoutes.delete(ns);\n } else {\n this.registeredRoutes.set(ns, filteredRoutes);\n }\n\n // 更新版本号\n this.routeVersion++;\n\n logger.info(\n `路由已取消注册: ${routeNames.length} 个路由从命名空间 \"${ns}\"`\n );\n }\n\n /**\n * 获取指定命名空间的路由\n * \n * @param namespace - 路由命名空间(可选)\n * @returns 路由配置数组\n */\n getRoutes(namespace?: string): RouteConfig[] {\n const ns = namespace || 'default';\n return [...(this.registeredRoutes.get(ns) || [])];\n }\n\n /**\n * 获取所有路由\n * \n * @returns 所有命名空间的路由配置\n */\n getAllRoutes(): Map<string, RouteConfig[]> {\n return new Map(this.registeredRoutes);\n }\n\n /**\n * 清空指定命名空间的路由\n * \n * @param namespace - 路由命名空间(可选)\n */\n clear(namespace?: string): void {\n const ns = namespace || 'default';\n this.registeredRoutes.delete(ns);\n this.routeVersion++;\n logger.info(`路由命名空间已清空: \"${ns}\"`);\n }\n\n /**\n * 清空所有路由\n */\n clearAll(): void {\n this.registeredRoutes.clear();\n this.routeVersion++;\n logger.info('所有路由已清空');\n }\n\n /**\n * 获取路由版本号\n * \n * @returns 路由版本号\n */\n getVersion(): number {\n return this.routeVersion;\n }\n\n /**\n * 检查路由是否已注册\n * \n * @param routeName - 路由名称\n * @param namespace - 路由命名空间(可选)\n * @returns 如果已注册返回 true,否则返回 false\n */\n isRegistered(routeName: string, namespace?: string): boolean {\n const ns = namespace || 'default';\n const routes = this.registeredRoutes.get(ns) || [];\n return routes.some((r) => r.name === routeName);\n }\n\n /**\n * 重新加载路由\n * \n * 注意:此方法会重新初始化路由管理器,需要谨慎使用\n */\n async reload(): Promise<void> {\n const routerManager = getRouterManager();\n if (!routerManager.isInitialized()) {\n throw new RouterError(\n '路由管理器未初始化',\n RouterErrorCode.ROUTER_NOT_INITIALIZED\n );\n }\n\n // 获取所有路由\n const allRoutes: RouteConfig[] = [];\n this.registeredRoutes.forEach((routes) => {\n allRoutes.push(...routes);\n });\n\n if (allRoutes.length === 0) {\n logger.warn('没有已注册的路由,无法重新加载');\n return;\n }\n\n // 转换路由\n await transformRoutes(allRoutes);\n // const reactRoutes = await transformRoutesToReactRoutes(result.routes, result);\n\n // 重新创建路由实例\n // 注意:这里需要获取原始配置的模式和选项\n // 由于当前架构限制,这里只是示例实现\n logger.info('路由重新加载完成');\n }\n}\n\n/**\n * 获取动态路由管理器单例\n */\nlet dynamicRouteManagerInstance: DynamicRouteManager | null = null;\n\nexport function getDynamicRouteManager(): DynamicRouteManager {\n if (!dynamicRouteManagerInstance) {\n dynamicRouteManagerInstance = new DynamicRouteManager();\n }\n return dynamicRouteManagerInstance;\n}\n"],"names":["DynamicRouteManager","getDynamicRouteManager","register","routes","namespace","ns","Array","isArray","length","RouterError","RouterErrorCode","ROUTER_CONFIG_ERROR","existingRoutes","registeredRoutes","get","existingNames","Set","map","r","name","newNames","conflicts","filter","has","join","undefined","currentRoutes","set","routeVersion","logger","info","unregister","routeNames","filteredRoutes","includes","warn","delete","getRoutes","getAllRoutes","Map","clear","clearAll","getVersion","isRegistered","routeName","some","reload","routerManager","getRouterManager","isInitialized","ROUTER_NOT_INITIALIZED","allRoutes","forEach","push","transformRoutes","dynamicRouteManagerInstance"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/dynamic/DynamicRouteManager.ts"],"sourcesContent":["/**\n * 路由动态注册管理器\n * 支持运行时动态注册和卸载路由\n */\n\nimport { logger } from '@vlian/logger';\nimport type { RouteConfig } from '../types';\nimport { getRouterManager } from '../RouterManager';\nimport { transformRoutes } from '../utils/transform';\nimport { RouterError, RouterErrorCode } from '../errors';\n\n/**\n * 动态路由注册管理器\n */\nexport class DynamicRouteManager {\n private registeredRoutes: Map<string, RouteConfig[]> = new Map();\n private routeVersion: number = 0;\n\n /**\n * 注册路由\n * \n * @param routes - 要注册的路由配置\n * @param namespace - 路由命名空间(可选,用于分组管理)\n * @returns 取消注册函数\n */\n async register(\n routes: RouteConfig[],\n namespace?: string\n ): Promise<() => Promise<void>> {\n const ns = namespace || 'default';\n\n // 验证路由配置\n if (!Array.isArray(routes) || routes.length === 0) {\n throw new RouterError(\n '路由配置必须是非空数组',\n RouterErrorCode.ROUTER_CONFIG_ERROR\n );\n }\n\n // 检查路由名称是否冲突\n const existingRoutes = this.registeredRoutes.get(ns) || [];\n const existingNames = new Set(existingRoutes.map((r) => r.name));\n const newNames = routes.map((r) => r.name);\n const conflicts = newNames.filter((name) => existingNames.has(name));\n\n if (conflicts.length > 0) {\n throw new RouterError(\n `路由名称冲突: ${conflicts.join(', ')}`,\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n undefined,\n { conflicts, namespace: ns }\n );\n }\n\n // 添加到注册表\n const currentRoutes = this.registeredRoutes.get(ns) || [];\n this.registeredRoutes.set(ns, [...currentRoutes, ...routes]);\n\n // 更新版本号\n this.routeVersion++;\n\n logger.info(`路由已注册: ${routes.length} 个路由到命名空间 \"${ns}\"`);\n\n // 返回取消注册函数\n return async () => {\n await this.unregister(routes.map((r) => r.name), ns);\n };\n }\n\n /**\n * 取消注册路由\n * \n * @param routeNames - 要取消注册的路由名称数组\n * @param namespace - 路由命名空间(可选)\n */\n async unregister(routeNames: string[], namespace?: string): Promise<void> {\n const ns = namespace || 'default';\n const routes = this.registeredRoutes.get(ns) || [];\n\n // 过滤掉要取消注册的路由\n const filteredRoutes = routes.filter((r) => !routeNames.includes(r.name));\n\n if (filteredRoutes.length === routes.length) {\n logger.warn(`未找到要取消注册的路由: ${routeNames.join(', ')}`);\n return;\n }\n\n // 更新注册表\n if (filteredRoutes.length === 0) {\n this.registeredRoutes.delete(ns);\n } else {\n this.registeredRoutes.set(ns, filteredRoutes);\n }\n\n // 更新版本号\n this.routeVersion++;\n\n logger.info(\n `路由已取消注册: ${routeNames.length} 个路由从命名空间 \"${ns}\"`\n );\n }\n\n /**\n * 获取指定命名空间的路由\n * \n * @param namespace - 路由命名空间(可选)\n * @returns 路由配置数组\n */\n getRoutes(namespace?: string): RouteConfig[] {\n const ns = namespace || 'default';\n return [...(this.registeredRoutes.get(ns) || [])];\n }\n\n /**\n * 获取所有路由\n * \n * @returns 所有命名空间的路由配置\n */\n getAllRoutes(): Map<string, RouteConfig[]> {\n return new Map(this.registeredRoutes);\n }\n\n /**\n * 清空指定命名空间的路由\n * \n * @param namespace - 路由命名空间(可选)\n */\n clear(namespace?: string): void {\n const ns = namespace || 'default';\n this.registeredRoutes.delete(ns);\n this.routeVersion++;\n logger.info(`路由命名空间已清空: \"${ns}\"`);\n }\n\n /**\n * 清空所有路由\n */\n clearAll(): void {\n this.registeredRoutes.clear();\n this.routeVersion++;\n logger.info('所有路由已清空');\n }\n\n /**\n * 获取路由版本号\n * \n * @returns 路由版本号\n */\n getVersion(): number {\n return this.routeVersion;\n }\n\n /**\n * 检查路由是否已注册\n * \n * @param routeName - 路由名称\n * @param namespace - 路由命名空间(可选)\n * @returns 如果已注册返回 true,否则返回 false\n */\n isRegistered(routeName: string, namespace?: string): boolean {\n const ns = namespace || 'default';\n const routes = this.registeredRoutes.get(ns) || [];\n return routes.some((r) => r.name === routeName);\n }\n\n /**\n * 重新加载路由\n * \n * 注意:此方法会重新初始化路由管理器,需要谨慎使用\n */\n async reload(): Promise<void> {\n const routerManager = getRouterManager();\n if (!routerManager.isInitialized()) {\n throw new RouterError(\n '路由管理器未初始化',\n RouterErrorCode.ROUTER_NOT_INITIALIZED\n );\n }\n\n // 获取所有路由\n const allRoutes: RouteConfig[] = [];\n this.registeredRoutes.forEach((routes) => {\n allRoutes.push(...routes);\n });\n\n if (allRoutes.length === 0) {\n logger.warn('没有已注册的路由,无法重新加载');\n return;\n }\n\n // 转换路由\n await transformRoutes(allRoutes);\n // const reactRoutes = await transformRoutesToReactRoutes(result.routes, result);\n\n // 重新创建路由实例\n // 注意:这里需要获取原始配置的模式和选项\n // 由于当前架构限制,这里只是示例实现\n logger.info('路由重新加载完成');\n }\n}\n\n/**\n * 获取动态路由管理器单例\n */\nlet dynamicRouteManagerInstance: DynamicRouteManager | null = null;\n\nexport function getDynamicRouteManager(): DynamicRouteManager {\n if (!dynamicRouteManagerInstance) {\n dynamicRouteManagerInstance = new DynamicRouteManager();\n }\n return dynamicRouteManagerInstance;\n}\n"],"names":["logger","getRouterManager","transformRoutes","RouterError","RouterErrorCode","DynamicRouteManager","register","routes","namespace","ns","Array","isArray","length","ROUTER_CONFIG_ERROR","existingRoutes","registeredRoutes","get","existingNames","Set","map","r","name","newNames","conflicts","filter","has","join","undefined","currentRoutes","set","routeVersion","info","unregister","routeNames","filteredRoutes","includes","warn","delete","getRoutes","getAllRoutes","Map","clear","clearAll","getVersion","isRegistered","routeName","some","reload","routerManager","isInitialized","ROUTER_NOT_INITIALIZED","allRoutes","forEach","push","dynamicRouteManagerInstance","getDynamicRouteManager"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/dynamic/index.ts"],"sourcesContent":["/**\n * 路由动态注册模块入口\n */\n\nexport * from './DynamicRouteManager';\n"],"names":[],"mappings":"AAAA;;CAEC;;;;qBAEa"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/dynamic/index.ts"],"sourcesContent":["/**\n * 路由动态注册模块入口\n */\n\nexport * from './DynamicRouteManager';\n"],"names":[],"mappings":"AAAA;;CAEC,GAED,cAAc,wBAAwB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/errors/RouterError.ts"],"sourcesContent":["/**\n * 路由错误类型定义\n */\n\nimport { FrameworkError, ErrorSeverity, ErrorType } from '../../../utils/errors';\nimport type { ErrorSeverity as ErrorSeverityType } from '@vlian/utils';\n\n/**\n * 路由错误代码\n */\nexport enum RouterErrorCode {\n /**\n * 路由未初始化\n */\n ROUTER_NOT_INITIALIZED = 'ROUTER_NOT_INITIALIZED',\n\n /**\n * 路由配置错误\n */\n ROUTER_CONFIG_ERROR = 'ROUTER_CONFIG_ERROR',\n\n /**\n * 路由未找到\n */\n ROUTE_NOT_FOUND = 'ROUTE_NOT_FOUND',\n\n /**\n * 路由导航失败\n */\n ROUTE_NAVIGATION_FAILED = 'ROUTE_NAVIGATION_FAILED',\n\n /**\n * 路由权限不足\n */\n ROUTE_PERMISSION_DENIED = 'ROUTE_PERMISSION_DENIED',\n\n /**\n * 路由组件加载失败\n */\n ROUTE_COMPONENT_LOAD_FAILED = 'ROUTE_COMPONENT_LOAD_FAILED',\n\n /**\n * 路由转换失败\n */\n ROUTE_TRANSFORM_FAILED = 'ROUTE_TRANSFORM_FAILED',\n}\n\n/**\n * 路由错误\n */\nexport class RouterError extends FrameworkError {\n constructor(\n message: string,\n code: RouterErrorCode,\n severity: ErrorSeverityType = ErrorSeverity.MEDIUM,\n cause?: Error,\n context?: Record<string, unknown>\n ) {\n super(message, ErrorType.RUNTIME, severity, {\n code,\n originalError: cause,\n context: context || {},\n });\n this.name = 'RouterError';\n }\n}\n\n/**\n * 创建路由错误\n */\nexport function createRouterError(\n message: string,\n code: RouterErrorCode,\n severity?: ErrorSeverityType,\n cause?: Error,\n context?: Record<string, unknown>\n): RouterError {\n return new RouterError(message, code, severity, cause, context);\n}\n"],"names":["RouterError","RouterErrorCode","createRouterError","FrameworkError","message","code","severity","ErrorSeverity","MEDIUM","cause","context","ErrorType","RUNTIME","originalError","name"],"mappings":"AAAA;;CAEC;;;;;;;;;;;QAgDYA;eAAAA;;QAxCDC;eAAAA;;QA4DIC;eAAAA;;;wBAlEyC;AAMlD,IAAA,AAAKD,yCAAAA;IACV;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;WAjCSA;;AAwCL,IAAA,AAAMD,cAAN,MAAMA,oBAAoBG,sBAAc;IAC7C,YACEC,OAAe,EACfC,IAAqB,EACrBC,WAA8BC,qBAAa,CAACC,MAAM,EAClDC,KAAa,EACbC,OAAiC,CACjC;QACA,KAAK,CAACN,SAASO,iBAAS,CAACC,OAAO,EAAEN,UAAU;YAC1CD;YACAQ,eAAeJ;YACfC,SAASA,WAAW,CAAC;QACvB;QACA,IAAI,CAACI,IAAI,GAAG;IACd;AACF;AAKO,SAASZ,kBACdE,OAAe,EACfC,IAAqB,EACrBC,QAA4B,EAC5BG,KAAa,EACbC,OAAiC;IAEjC,OAAO,IAAIV,YAAYI,SAASC,MAAMC,UAAUG,OAAOC;AACzD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/errors/RouterError.ts"],"sourcesContent":["/**\n * 路由错误类型定义\n */\n\nimport { FrameworkError, ErrorSeverity, ErrorType } from '../../../utils/errors';\nimport type { ErrorSeverity as ErrorSeverityType } from '@vlian/utils';\n\n/**\n * 路由错误代码\n */\nexport enum RouterErrorCode {\n /**\n * 路由未初始化\n */\n ROUTER_NOT_INITIALIZED = 'ROUTER_NOT_INITIALIZED',\n\n /**\n * 路由配置错误\n */\n ROUTER_CONFIG_ERROR = 'ROUTER_CONFIG_ERROR',\n\n /**\n * 路由未找到\n */\n ROUTE_NOT_FOUND = 'ROUTE_NOT_FOUND',\n\n /**\n * 路由导航失败\n */\n ROUTE_NAVIGATION_FAILED = 'ROUTE_NAVIGATION_FAILED',\n\n /**\n * 路由权限不足\n */\n ROUTE_PERMISSION_DENIED = 'ROUTE_PERMISSION_DENIED',\n\n /**\n * 路由组件加载失败\n */\n ROUTE_COMPONENT_LOAD_FAILED = 'ROUTE_COMPONENT_LOAD_FAILED',\n\n /**\n * 路由转换失败\n */\n ROUTE_TRANSFORM_FAILED = 'ROUTE_TRANSFORM_FAILED',\n}\n\n/**\n * 路由错误\n */\nexport class RouterError extends FrameworkError {\n constructor(\n message: string,\n code: RouterErrorCode,\n severity: ErrorSeverityType = ErrorSeverity.MEDIUM,\n cause?: Error,\n context?: Record<string, unknown>\n ) {\n super(message, ErrorType.RUNTIME, severity, {\n code,\n originalError: cause,\n context: context || {},\n });\n this.name = 'RouterError';\n }\n}\n\n/**\n * 创建路由错误\n */\nexport function createRouterError(\n message: string,\n code: RouterErrorCode,\n severity?: ErrorSeverityType,\n cause?: Error,\n context?: Record<string, unknown>\n): RouterError {\n return new RouterError(message, code, severity, cause, context);\n}\n"],"names":["FrameworkError","ErrorSeverity","ErrorType","RouterErrorCode","RouterError","message","code","severity","MEDIUM","cause","context","RUNTIME","originalError","name","createRouterError"],"mappings":"AAAA;;CAEC,GAED,SAASA,cAAc,EAAEC,aAAa,EAAEC,SAAS,QAAQ,wBAAwB;AAGjF;;CAEC,GACD,OAAO,IAAA,AAAKC,yCAAAA;IACV;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;WAjCSA;MAmCX;AAED;;CAEC,GACD,OAAO,MAAMC,oBAAoBJ;IAC/B,YACEK,OAAe,EACfC,IAAqB,EACrBC,WAA8BN,cAAcO,MAAM,EAClDC,KAAa,EACbC,OAAiC,CACjC;QACA,KAAK,CAACL,SAASH,UAAUS,OAAO,EAAEJ,UAAU;YAC1CD;YACAM,eAAeH;YACfC,SAASA,WAAW,CAAC;QACvB;QACA,IAAI,CAACG,IAAI,GAAG;IACd;AACF;AAEA;;CAEC,GACD,OAAO,SAASC,kBACdT,OAAe,EACfC,IAAqB,EACrBC,QAA4B,EAC5BE,KAAa,EACbC,OAAiC;IAEjC,OAAO,IAAIN,YAAYC,SAASC,MAAMC,UAAUE,OAAOC;AACzD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/errors/index.ts"],"sourcesContent":["/**\n * 路由错误模块入口\n */\n\nexport * from './RouterError';\n"],"names":[],"mappings":"AAAA;;CAEC;;;;qBAEa"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/errors/index.ts"],"sourcesContent":["/**\n * 路由错误模块入口\n */\n\nexport * from './RouterError';\n"],"names":[],"mappings":"AAAA;;CAEC,GAED,cAAc,gBAAgB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/router/index.ts"],"sourcesContent":["/**\n * 路由模块入口\n */\n\n// 核心类型和接口\nexport * from './types';\n\n// 路由管理器\nexport * from './RouterManager';\n\n// 中间件系统\nexport * from './middleware';\n\n// 生命周期管理\nexport * from './lifecycle';\n\n// 导航 API\nexport * from './navigation';\n\n// 配置验证\nexport * from './validation';\n\n// 错误处理\nexport * from './errors';\n\n// 动态路由注册\nexport * from './dynamic';\n\n// 性能优化\nexport * from './performance';\n\n// 插件系统\nexport * from './plugin';\n\n// 监控与日志\nexport * from './monitoring';\n\n// 适配器系统\nexport * from './adapter';\n\n// 版本管理\nexport * from './version';\n\n// 开发工具(仅在开发环境导出)\n// 注意:开发工具需要 React 和 Ant Design,仅在开发环境使用\n// 如果需要使用,请直接导入:import { RouterDevTools } from '@vlian/framework/core/router/dev';\n"],"names":[],"mappings":"AAAA;;CAEC,GAED,UAAU;;;;;qBACI;qBAGA;qBAGA;qBAGA;qBAGA;qBAGA;qBAGA;qBAGA;qBAGA;qBAGA;qBAGA;qBAGA;qBAGA;;;;;;;;;;;;;;CAEd,iBAAiB;CACjB,wCAAwC;CACxC,kFAAkF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/router/index.ts"],"sourcesContent":["/**\n * 路由模块入口\n */\n\n// 核心类型和接口\nexport * from './types';\n\n// 路由管理器\nexport * from './RouterManager';\n\n// 中间件系统\nexport * from './middleware';\n\n// 生命周期管理\nexport * from './lifecycle';\n\n// 导航 API\nexport * from './navigation';\n\n// 配置验证\nexport * from './validation';\n\n// 错误处理\nexport * from './errors';\n\n// 动态路由注册\nexport * from './dynamic';\n\n// 性能优化\nexport * from './performance';\n\n// 插件系统\nexport * from './plugin';\n\n// 监控与日志\nexport * from './monitoring';\n\n// 适配器系统\nexport * from './adapter';\n\n// 版本管理\nexport * from './version';\n\n// 开发工具(仅在开发环境导出)\n// 注意:开发工具需要 React 和 Ant Design,仅在开发环境使用\n// 如果需要使用,请直接导入:import { RouterDevTools } from '@vlian/framework/core/router/dev';\n"],"names":[],"mappings":"AAAA;;CAEC,GAED,UAAU;AACV,cAAc,UAAU;AAExB,QAAQ;AACR,cAAc,kBAAkB;AAEhC,QAAQ;AACR,cAAc,eAAe;AAE7B,SAAS;AACT,cAAc,cAAc;AAE5B,SAAS;AACT,cAAc,eAAe;AAE7B,OAAO;AACP,cAAc,eAAe;AAE7B,OAAO;AACP,cAAc,WAAW;AAEzB,SAAS;AACT,cAAc,YAAY;AAE1B,OAAO;AACP,cAAc,gBAAgB;AAE9B,OAAO;AACP,cAAc,WAAW;AAEzB,QAAQ;AACR,cAAc,eAAe;AAE7B,QAAQ;AACR,cAAc,YAAY;AAE1B,OAAO;AACP,cAAc,YAAY,CAE1B,iBAAiB;CACjB,wCAAwC;CACxC,kFAAkF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/lifecycle/RouterLifecycleManager.ts"],"sourcesContent":["/**\n * 路由生命周期管理器\n * 负责管理路由生命周期钩子的注册和执行\n */\n\nimport { logger } from '@vlian/logger';\nimport type { RouteLocation, RouteLifecycleHooks } from '../types';\n\n/**\n * 路由生命周期管理器\n */\nexport class RouterLifecycleManager {\n private hooks: RouteLifecycleHooks[] = [];\n\n /**\n * 注册生命周期钩子\n * \n * @param hooks - 生命周期钩子配置\n * @returns 取消注册函数\n */\n register(hooks: RouteLifecycleHooks): () => void {\n this.hooks.push(hooks);\n logger.debug('路由生命周期钩子已注册');\n\n // 返回取消注册函数\n return () => {\n const index = this.hooks.indexOf(hooks);\n if (index > -1) {\n this.hooks.splice(index, 1);\n logger.debug('路由生命周期钩子已取消注册');\n }\n };\n }\n\n /**\n * 批量注册生命周期钩子\n * \n * @param hooksArray - 生命周期钩子配置数组\n */\n registerBatch(hooksArray: RouteLifecycleHooks[]): void {\n hooksArray.forEach((hooks) => this.register(hooks));\n }\n\n /**\n * 清空所有生命周期钩子\n */\n clear(): void {\n this.hooks = [];\n logger.debug('所有路由生命周期钩子已清空');\n }\n\n /**\n * 执行路由跳转前钩子\n * \n * @param to - 目标路由\n * @param from - 来源路由\n * @returns 如果返回字符串,则跳转到该路径;如果返回 false,则阻止跳转;返回 true 或 undefined 则继续跳转\n */\n async beforeEach(\n to: RouteLocation,\n from?: RouteLocation\n ): Promise<string | false | void> {\n // 按注册顺序执行所有 beforeEach 钩子\n for (const hooks of this.hooks) {\n if (hooks.beforeEach) {\n try {\n const result = await hooks.beforeEach(to, from);\n\n // 如果返回 false,阻止跳转\n if (result === false) {\n logger.debug('路由跳转被阻止: beforeEach 返回 false');\n return false;\n }\n\n // 如果返回字符串,重定向到该路径\n if (typeof result === 'string') {\n logger.debug(`路由跳转重定向: beforeEach 返回 ${result}`);\n return result;\n }\n } catch (error) {\n logger.error('路由生命周期钩子执行失败: beforeEach', error);\n // 钩子执行失败时,默认继续跳转\n continue;\n }\n }\n }\n\n // 所有钩子都通过,允许跳转\n return undefined;\n }\n\n /**\n * 执行路由跳转后钩子\n * \n * @param to - 目标路由\n * @param from - 来源路由\n */\n async afterEach(to: RouteLocation, from?: RouteLocation): Promise<void> {\n // 按注册顺序执行所有 afterEach 钩子\n for (const hooks of this.hooks) {\n if (hooks.afterEach) {\n try {\n await hooks.afterEach(to, from);\n } catch (error) {\n logger.error('路由生命周期钩子执行失败: afterEach', error);\n // 钩子执行失败不影响路由跳转\n continue;\n }\n }\n }\n }\n\n /**\n * 获取所有生命周期钩子\n * \n * @returns 生命周期钩子配置数组\n */\n getAll(): RouteLifecycleHooks[] {\n return [...this.hooks];\n }\n\n /**\n * 获取生命周期钩子数量\n * \n * @returns 生命周期钩子数量\n */\n getCount(): number {\n return this.hooks.length;\n }\n}\n\n/**\n * 获取路由生命周期管理器单例\n */\nlet lifecycleManagerInstance: RouterLifecycleManager | null = null;\n\nexport function getRouterLifecycleManager(): RouterLifecycleManager {\n if (!lifecycleManagerInstance) {\n lifecycleManagerInstance = new RouterLifecycleManager();\n }\n return lifecycleManagerInstance;\n}\n"],"names":["RouterLifecycleManager","getRouterLifecycleManager","register","hooks","push","logger","debug","index","indexOf","splice","registerBatch","hooksArray","forEach","clear","beforeEach","to","from","result","error","undefined","afterEach","getAll","getCount","length","lifecycleManagerInstance"],"mappings":"AAAA;;;CAGC;;;;;;;;;;;QAQYA;eAAAA;;QA6HGC;eAAAA;;;wBAnIO;;;;;;;;;;;;;;AAMhB,IAAA,AAAMD,yBAAN,MAAMA;IAGX;;;;;GAKC,GACDE,SAASC,KAA0B,EAAc;QAC/C,IAAI,CAACA,KAAK,CAACC,IAAI,CAACD;QAChBE,cAAM,CAACC,KAAK,CAAC;QAEb,WAAW;QACX,OAAO;YACL,MAAMC,QAAQ,IAAI,CAACJ,KAAK,CAACK,OAAO,CAACL;YACjC,IAAII,QAAQ,CAAC,GAAG;gBACd,IAAI,CAACJ,KAAK,CAACM,MAAM,CAACF,OAAO;gBACzBF,cAAM,CAACC,KAAK,CAAC;YACf;QACF;IACF;IAEA;;;;GAIC,GACDI,cAAcC,UAAiC,EAAQ;QACrDA,WAAWC,OAAO,CAAC,CAACT,QAAU,IAAI,CAACD,QAAQ,CAACC;IAC9C;IAEA;;GAEC,GACDU,QAAc;QACZ,IAAI,CAACV,KAAK,GAAG,EAAE;QACfE,cAAM,CAACC,KAAK,CAAC;IACf;IAEA;;;;;;GAMC,GACD,MAAMQ,WACJC,EAAiB,EACjBC,IAAoB,EACY;QAChC,0BAA0B;QAC1B,KAAK,MAAMb,SAAS,IAAI,CAACA,KAAK,CAAE;YAC9B,IAAIA,MAAMW,UAAU,EAAE;gBACpB,IAAI;oBACF,MAAMG,SAAS,MAAMd,MAAMW,UAAU,CAACC,IAAIC;oBAE1C,kBAAkB;oBAClB,IAAIC,WAAW,OAAO;wBACpBZ,cAAM,CAACC,KAAK,CAAC;wBACb,OAAO;oBACT;oBAEA,kBAAkB;oBAClB,IAAI,OAAOW,WAAW,UAAU;wBAC9BZ,cAAM,CAACC,KAAK,CAAC,CAAC,uBAAuB,EAAEW,QAAQ;wBAC/C,OAAOA;oBACT;gBACF,EAAE,OAAOC,OAAO;oBACdb,cAAM,CAACa,KAAK,CAAC,4BAA4BA;oBAEzC;gBACF;YACF;QACF;QAEA,eAAe;QACf,OAAOC;IACT;IAEA;;;;;GAKC,GACD,MAAMC,UAAUL,EAAiB,EAAEC,IAAoB,EAAiB;QACtE,yBAAyB;QACzB,KAAK,MAAMb,SAAS,IAAI,CAACA,KAAK,CAAE;YAC9B,IAAIA,MAAMiB,SAAS,EAAE;gBACnB,IAAI;oBACF,MAAMjB,MAAMiB,SAAS,CAACL,IAAIC;gBAC5B,EAAE,OAAOE,OAAO;oBACdb,cAAM,CAACa,KAAK,CAAC,2BAA2BA;oBAExC;gBACF;YACF;QACF;IACF;IAEA;;;;GAIC,GACDG,SAAgC;QAC9B,OAAO;eAAI,IAAI,CAAClB,KAAK;SAAC;IACxB;IAEA;;;;GAIC,GACDmB,WAAmB;QACjB,OAAO,IAAI,CAACnB,KAAK,CAACoB,MAAM;IAC1B;;QApHA,uBAAQpB,SAA+B,EAAE;;AAqH3C;AAEA;;CAEC,GACD,IAAIqB,2BAA0D;AAEvD,SAASvB;IACd,IAAI,CAACuB,0BAA0B;QAC7BA,2BAA2B,IAAIxB;IACjC;IACA,OAAOwB;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/lifecycle/RouterLifecycleManager.ts"],"sourcesContent":["/**\n * 路由生命周期管理器\n * 负责管理路由生命周期钩子的注册和执行\n */\n\nimport { logger } from '@vlian/logger';\nimport type { RouteLocation, RouteLifecycleHooks } from '../types';\n\n/**\n * 路由生命周期管理器\n */\nexport class RouterLifecycleManager {\n private hooks: RouteLifecycleHooks[] = [];\n\n /**\n * 注册生命周期钩子\n * \n * @param hooks - 生命周期钩子配置\n * @returns 取消注册函数\n */\n register(hooks: RouteLifecycleHooks): () => void {\n this.hooks.push(hooks);\n logger.debug('路由生命周期钩子已注册');\n\n // 返回取消注册函数\n return () => {\n const index = this.hooks.indexOf(hooks);\n if (index > -1) {\n this.hooks.splice(index, 1);\n logger.debug('路由生命周期钩子已取消注册');\n }\n };\n }\n\n /**\n * 批量注册生命周期钩子\n * \n * @param hooksArray - 生命周期钩子配置数组\n */\n registerBatch(hooksArray: RouteLifecycleHooks[]): void {\n hooksArray.forEach((hooks) => this.register(hooks));\n }\n\n /**\n * 清空所有生命周期钩子\n */\n clear(): void {\n this.hooks = [];\n logger.debug('所有路由生命周期钩子已清空');\n }\n\n /**\n * 执行路由跳转前钩子\n * \n * @param to - 目标路由\n * @param from - 来源路由\n * @returns 如果返回字符串,则跳转到该路径;如果返回 false,则阻止跳转;返回 true 或 undefined 则继续跳转\n */\n async beforeEach(\n to: RouteLocation,\n from?: RouteLocation\n ): Promise<string | false | void> {\n // 按注册顺序执行所有 beforeEach 钩子\n for (const hooks of this.hooks) {\n if (hooks.beforeEach) {\n try {\n const result = await hooks.beforeEach(to, from);\n\n // 如果返回 false,阻止跳转\n if (result === false) {\n logger.debug('路由跳转被阻止: beforeEach 返回 false');\n return false;\n }\n\n // 如果返回字符串,重定向到该路径\n if (typeof result === 'string') {\n logger.debug(`路由跳转重定向: beforeEach 返回 ${result}`);\n return result;\n }\n } catch (error) {\n logger.error('路由生命周期钩子执行失败: beforeEach', error);\n // 钩子执行失败时,默认继续跳转\n continue;\n }\n }\n }\n\n // 所有钩子都通过,允许跳转\n return undefined;\n }\n\n /**\n * 执行路由跳转后钩子\n * \n * @param to - 目标路由\n * @param from - 来源路由\n */\n async afterEach(to: RouteLocation, from?: RouteLocation): Promise<void> {\n // 按注册顺序执行所有 afterEach 钩子\n for (const hooks of this.hooks) {\n if (hooks.afterEach) {\n try {\n await hooks.afterEach(to, from);\n } catch (error) {\n logger.error('路由生命周期钩子执行失败: afterEach', error);\n // 钩子执行失败不影响路由跳转\n continue;\n }\n }\n }\n }\n\n /**\n * 获取所有生命周期钩子\n * \n * @returns 生命周期钩子配置数组\n */\n getAll(): RouteLifecycleHooks[] {\n return [...this.hooks];\n }\n\n /**\n * 获取生命周期钩子数量\n * \n * @returns 生命周期钩子数量\n */\n getCount(): number {\n return this.hooks.length;\n }\n}\n\n/**\n * 获取路由生命周期管理器单例\n */\nlet lifecycleManagerInstance: RouterLifecycleManager | null = null;\n\nexport function getRouterLifecycleManager(): RouterLifecycleManager {\n if (!lifecycleManagerInstance) {\n lifecycleManagerInstance = new RouterLifecycleManager();\n }\n return lifecycleManagerInstance;\n}\n"],"names":["logger","RouterLifecycleManager","register","hooks","push","debug","index","indexOf","splice","registerBatch","hooksArray","forEach","clear","beforeEach","to","from","result","error","undefined","afterEach","getAll","getCount","length","lifecycleManagerInstance","getRouterLifecycleManager"],"mappings":";;;;;;;;;;;;;AAAA;;;CAGC,GAED,SAASA,MAAM,QAAQ,gBAAgB;AAGvC;;CAEC,GACD,OAAO,MAAMC;IAGX;;;;;GAKC,GACDC,SAASC,KAA0B,EAAc;QAC/C,IAAI,CAACA,KAAK,CAACC,IAAI,CAACD;QAChBH,OAAOK,KAAK,CAAC;QAEb,WAAW;QACX,OAAO;YACL,MAAMC,QAAQ,IAAI,CAACH,KAAK,CAACI,OAAO,CAACJ;YACjC,IAAIG,QAAQ,CAAC,GAAG;gBACd,IAAI,CAACH,KAAK,CAACK,MAAM,CAACF,OAAO;gBACzBN,OAAOK,KAAK,CAAC;YACf;QACF;IACF;IAEA;;;;GAIC,GACDI,cAAcC,UAAiC,EAAQ;QACrDA,WAAWC,OAAO,CAAC,CAACR,QAAU,IAAI,CAACD,QAAQ,CAACC;IAC9C;IAEA;;GAEC,GACDS,QAAc;QACZ,IAAI,CAACT,KAAK,GAAG,EAAE;QACfH,OAAOK,KAAK,CAAC;IACf;IAEA;;;;;;GAMC,GACD,MAAMQ,WACJC,EAAiB,EACjBC,IAAoB,EACY;QAChC,0BAA0B;QAC1B,KAAK,MAAMZ,SAAS,IAAI,CAACA,KAAK,CAAE;YAC9B,IAAIA,MAAMU,UAAU,EAAE;gBACpB,IAAI;oBACF,MAAMG,SAAS,MAAMb,MAAMU,UAAU,CAACC,IAAIC;oBAE1C,kBAAkB;oBAClB,IAAIC,WAAW,OAAO;wBACpBhB,OAAOK,KAAK,CAAC;wBACb,OAAO;oBACT;oBAEA,kBAAkB;oBAClB,IAAI,OAAOW,WAAW,UAAU;wBAC9BhB,OAAOK,KAAK,CAAC,CAAC,uBAAuB,EAAEW,QAAQ;wBAC/C,OAAOA;oBACT;gBACF,EAAE,OAAOC,OAAO;oBACdjB,OAAOiB,KAAK,CAAC,4BAA4BA;oBAEzC;gBACF;YACF;QACF;QAEA,eAAe;QACf,OAAOC;IACT;IAEA;;;;;GAKC,GACD,MAAMC,UAAUL,EAAiB,EAAEC,IAAoB,EAAiB;QACtE,yBAAyB;QACzB,KAAK,MAAMZ,SAAS,IAAI,CAACA,KAAK,CAAE;YAC9B,IAAIA,MAAMgB,SAAS,EAAE;gBACnB,IAAI;oBACF,MAAMhB,MAAMgB,SAAS,CAACL,IAAIC;gBAC5B,EAAE,OAAOE,OAAO;oBACdjB,OAAOiB,KAAK,CAAC,2BAA2BA;oBAExC;gBACF;YACF;QACF;IACF;IAEA;;;;GAIC,GACDG,SAAgC;QAC9B,OAAO;eAAI,IAAI,CAACjB,KAAK;SAAC;IACxB;IAEA;;;;GAIC,GACDkB,WAAmB;QACjB,OAAO,IAAI,CAAClB,KAAK,CAACmB,MAAM;IAC1B;;QApHA,uBAAQnB,SAA+B,EAAE;;AAqH3C;AAEA;;CAEC,GACD,IAAIoB,2BAA0D;AAE9D,OAAO,SAASC;IACd,IAAI,CAACD,0BAA0B;QAC7BA,2BAA2B,IAAItB;IACjC;IACA,OAAOsB;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/lifecycle/index.ts"],"sourcesContent":["/**\n * 路由生命周期模块入口\n */\n\nexport * from './RouterLifecycleManager';\n"],"names":[],"mappings":"AAAA;;CAEC;;;;qBAEa"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/lifecycle/index.ts"],"sourcesContent":["/**\n * 路由生命周期模块入口\n */\n\nexport * from './RouterLifecycleManager';\n"],"names":[],"mappings":"AAAA;;CAEC,GAED,cAAc,2BAA2B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/middleware/RouterMiddlewareManager.ts"],"sourcesContent":["/**\n * 路由中间件管理器\n * 负责管理路由中间件的注册、执行和生命周期\n */\n\nimport { logger } from '@vlian/logger';\nimport type {\n RouterMiddlewareConfig,\n RouterMiddlewareContext,\n RouterMiddlewareResult,\n} from './types';\n\n/**\n * 路由中间件管理器\n */\nexport class RouterMiddlewareManager {\n private middlewares: RouterMiddlewareConfig[] = [];\n private static readonly SAFE_REDIRECT_PATH_REGEX = /^(\\/|\\.\\/|\\.\\.\\/|#)/;\n\n /**\n * 注册中间件\n * \n * @param config - 中间件配置\n * @returns 取消注册函数\n */\n register(config: RouterMiddlewareConfig): () => void {\n // 验证中间件配置\n if (!config.middleware || typeof config.middleware !== 'function') {\n throw new Error('中间件必须是一个函数');\n }\n\n // 设置默认值\n const middlewareConfig: RouterMiddlewareConfig = {\n priority: 100,\n enabled: true,\n ...config,\n };\n\n // 添加到中间件列表\n this.middlewares.push(middlewareConfig);\n\n // 按优先级排序\n this.middlewares.sort((a, b) => (a.priority || 100) - (b.priority || 100));\n\n logger.debug(`路由中间件已注册: ${middlewareConfig.name || 'anonymous'}`);\n\n // 返回取消注册函数\n return () => {\n const index = this.middlewares.indexOf(middlewareConfig);\n if (index > -1) {\n this.middlewares.splice(index, 1);\n logger.debug(`路由中间件已取消注册: ${middlewareConfig.name || 'anonymous'}`);\n }\n };\n }\n\n /**\n * 批量注册中间件\n * \n * @param configs - 中间件配置数组\n */\n registerBatch(configs: RouterMiddlewareConfig[]): void {\n configs.forEach((config) => this.register(config));\n }\n\n /**\n * 取消注册中间件\n * \n * @param name - 中间件名称\n */\n unregister(name: string): void {\n const index = this.middlewares.findIndex((m) => m.name === name);\n if (index > -1) {\n this.middlewares.splice(index, 1);\n logger.debug(`路由中间件已取消注册: ${name}`);\n }\n }\n\n /**\n * 清空所有中间件\n */\n clear(): void {\n this.middlewares = [];\n logger.debug('所有路由中间件已清空');\n }\n\n /**\n * 执行中间件链\n * \n * @param context - 中间件上下文\n * @returns 中间件执行结果\n */\n async execute(context: RouterMiddlewareContext): Promise<RouterMiddlewareResult> {\n // 过滤启用的中间件\n const enabledMiddlewares = this.middlewares.filter((m) => {\n if (!m.enabled) {\n return false;\n }\n\n // 检查条件函数\n if (m.condition && !m.condition(context)) {\n return false;\n }\n\n return true;\n });\n\n // 按顺序执行中间件\n for (const middlewareConfig of enabledMiddlewares) {\n try {\n const result = await middlewareConfig.middleware(context);\n\n // 如果中间件返回 false,阻止导航\n if (result === false) {\n logger.debug(\n `路由中间件阻止导航: ${middlewareConfig.name || 'anonymous'} -> false`\n );\n return {\n allow: false,\n reason: '中间件返回 false',\n };\n }\n\n // 如果中间件返回对象且 allow: false,阻止导航\n if (typeof result === 'object' && result !== null && result.allow === false) {\n logger.debug(\n `路由中间件阻止导航: ${middlewareConfig.name || 'anonymous'}`,\n result\n );\n\n if (result.redirect && !RouterMiddlewareManager.SAFE_REDIRECT_PATH_REGEX.test(result.redirect)) {\n logger.warn(\n `路由中间件返回了不安全的重定向地址,已拦截: ${middlewareConfig.name || 'anonymous'} -> ${result.redirect}`\n );\n return {\n allow: false,\n reason: '中间件返回了不安全的重定向地址',\n };\n }\n\n return result;\n }\n\n // 如果中间件返回字符串,重定向到该路径\n if (typeof result === 'string') {\n if (!RouterMiddlewareManager.SAFE_REDIRECT_PATH_REGEX.test(result)) {\n logger.warn(\n `路由中间件返回了不安全的重定向地址,已拦截: ${middlewareConfig.name || 'anonymous'} -> ${result}`\n );\n return {\n allow: false,\n reason: '中间件返回了不安全的重定向地址',\n };\n }\n\n logger.debug(\n `路由中间件重定向: ${middlewareConfig.name || 'anonymous'} -> ${result}`\n );\n\n return {\n allow: false,\n redirect: result,\n };\n }\n } catch (error) {\n logger.error(\n `路由中间件执行失败: ${middlewareConfig.name || 'anonymous'}`,\n error\n );\n\n // 中间件执行失败时,默认允许继续导航\n // 但记录错误以便调试\n continue;\n }\n }\n\n // 所有中间件都通过,允许导航\n return { allow: true };\n }\n\n /**\n * 获取所有中间件\n * \n * @returns 中间件配置数组\n */\n getAll(): RouterMiddlewareConfig[] {\n return [...this.middlewares];\n }\n\n /**\n * 获取启用的中间件\n * \n * @returns 启用的中间件配置数组\n */\n getEnabled(): RouterMiddlewareConfig[] {\n return this.middlewares.filter((m) => m.enabled);\n }\n\n /**\n * 获取中间件数量\n * \n * @returns 中间件数量\n */\n getCount(): number {\n return this.middlewares.length;\n }\n}\n\n/**\n * 获取路由中间件管理器单例\n */\nlet middlewareManagerInstance: RouterMiddlewareManager | null = null;\n\nexport function getRouterMiddlewareManager(): RouterMiddlewareManager {\n if (!middlewareManagerInstance) {\n middlewareManagerInstance = new RouterMiddlewareManager();\n }\n return middlewareManagerInstance;\n}\n"],"names":["RouterMiddlewareManager","getRouterMiddlewareManager","register","config","middleware","Error","middlewareConfig","priority","enabled","middlewares","push","sort","a","b","logger","debug","name","index","indexOf","splice","registerBatch","configs","forEach","unregister","findIndex","m","clear","execute","context","enabledMiddlewares","filter","condition","result","allow","reason","redirect","SAFE_REDIRECT_PATH_REGEX","test","warn","error","getAll","getEnabled","getCount","length","middlewareManagerInstance"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/middleware/RouterMiddlewareManager.ts"],"sourcesContent":["/**\n * 路由中间件管理器\n * 负责管理路由中间件的注册、执行和生命周期\n */\n\nimport { logger } from '@vlian/logger';\nimport type {\n RouterMiddlewareConfig,\n RouterMiddlewareContext,\n RouterMiddlewareResult,\n} from './types';\n\n/**\n * 路由中间件管理器\n */\nexport class RouterMiddlewareManager {\n private middlewares: RouterMiddlewareConfig[] = [];\n private static readonly SAFE_REDIRECT_PATH_REGEX = /^(\\/|\\.\\/|\\.\\.\\/|#)/;\n\n /**\n * 注册中间件\n * \n * @param config - 中间件配置\n * @returns 取消注册函数\n */\n register(config: RouterMiddlewareConfig): () => void {\n // 验证中间件配置\n if (!config.middleware || typeof config.middleware !== 'function') {\n throw new Error('中间件必须是一个函数');\n }\n\n // 设置默认值\n const middlewareConfig: RouterMiddlewareConfig = {\n priority: 100,\n enabled: true,\n ...config,\n };\n\n // 添加到中间件列表\n this.middlewares.push(middlewareConfig);\n\n // 按优先级排序\n this.middlewares.sort((a, b) => (a.priority || 100) - (b.priority || 100));\n\n logger.debug(`路由中间件已注册: ${middlewareConfig.name || 'anonymous'}`);\n\n // 返回取消注册函数\n return () => {\n const index = this.middlewares.indexOf(middlewareConfig);\n if (index > -1) {\n this.middlewares.splice(index, 1);\n logger.debug(`路由中间件已取消注册: ${middlewareConfig.name || 'anonymous'}`);\n }\n };\n }\n\n /**\n * 批量注册中间件\n * \n * @param configs - 中间件配置数组\n */\n registerBatch(configs: RouterMiddlewareConfig[]): void {\n configs.forEach((config) => this.register(config));\n }\n\n /**\n * 取消注册中间件\n * \n * @param name - 中间件名称\n */\n unregister(name: string): void {\n const index = this.middlewares.findIndex((m) => m.name === name);\n if (index > -1) {\n this.middlewares.splice(index, 1);\n logger.debug(`路由中间件已取消注册: ${name}`);\n }\n }\n\n /**\n * 清空所有中间件\n */\n clear(): void {\n this.middlewares = [];\n logger.debug('所有路由中间件已清空');\n }\n\n /**\n * 执行中间件链\n * \n * @param context - 中间件上下文\n * @returns 中间件执行结果\n */\n async execute(context: RouterMiddlewareContext): Promise<RouterMiddlewareResult> {\n // 过滤启用的中间件\n const enabledMiddlewares = this.middlewares.filter((m) => {\n if (!m.enabled) {\n return false;\n }\n\n // 检查条件函数\n if (m.condition && !m.condition(context)) {\n return false;\n }\n\n return true;\n });\n\n // 按顺序执行中间件\n for (const middlewareConfig of enabledMiddlewares) {\n try {\n const result = await middlewareConfig.middleware(context);\n\n // 如果中间件返回 false,阻止导航\n if (result === false) {\n logger.debug(\n `路由中间件阻止导航: ${middlewareConfig.name || 'anonymous'} -> false`\n );\n return {\n allow: false,\n reason: '中间件返回 false',\n };\n }\n\n // 如果中间件返回对象且 allow: false,阻止导航\n if (typeof result === 'object' && result !== null && result.allow === false) {\n logger.debug(\n `路由中间件阻止导航: ${middlewareConfig.name || 'anonymous'}`,\n result\n );\n\n if (result.redirect && !RouterMiddlewareManager.SAFE_REDIRECT_PATH_REGEX.test(result.redirect)) {\n logger.warn(\n `路由中间件返回了不安全的重定向地址,已拦截: ${middlewareConfig.name || 'anonymous'} -> ${result.redirect}`\n );\n return {\n allow: false,\n reason: '中间件返回了不安全的重定向地址',\n };\n }\n\n return result;\n }\n\n // 如果中间件返回字符串,重定向到该路径\n if (typeof result === 'string') {\n if (!RouterMiddlewareManager.SAFE_REDIRECT_PATH_REGEX.test(result)) {\n logger.warn(\n `路由中间件返回了不安全的重定向地址,已拦截: ${middlewareConfig.name || 'anonymous'} -> ${result}`\n );\n return {\n allow: false,\n reason: '中间件返回了不安全的重定向地址',\n };\n }\n\n logger.debug(\n `路由中间件重定向: ${middlewareConfig.name || 'anonymous'} -> ${result}`\n );\n\n return {\n allow: false,\n redirect: result,\n };\n }\n } catch (error) {\n logger.error(\n `路由中间件执行失败: ${middlewareConfig.name || 'anonymous'}`,\n error\n );\n\n // 中间件执行失败时,默认允许继续导航\n // 但记录错误以便调试\n continue;\n }\n }\n\n // 所有中间件都通过,允许导航\n return { allow: true };\n }\n\n /**\n * 获取所有中间件\n * \n * @returns 中间件配置数组\n */\n getAll(): RouterMiddlewareConfig[] {\n return [...this.middlewares];\n }\n\n /**\n * 获取启用的中间件\n * \n * @returns 启用的中间件配置数组\n */\n getEnabled(): RouterMiddlewareConfig[] {\n return this.middlewares.filter((m) => m.enabled);\n }\n\n /**\n * 获取中间件数量\n * \n * @returns 中间件数量\n */\n getCount(): number {\n return this.middlewares.length;\n }\n}\n\n/**\n * 获取路由中间件管理器单例\n */\nlet middlewareManagerInstance: RouterMiddlewareManager | null = null;\n\nexport function getRouterMiddlewareManager(): RouterMiddlewareManager {\n if (!middlewareManagerInstance) {\n middlewareManagerInstance = new RouterMiddlewareManager();\n }\n return middlewareManagerInstance;\n}\n"],"names":["logger","RouterMiddlewareManager","register","config","middleware","Error","middlewareConfig","priority","enabled","middlewares","push","sort","a","b","debug","name","index","indexOf","splice","registerBatch","configs","forEach","unregister","findIndex","m","clear","execute","context","enabledMiddlewares","filter","condition","result","allow","reason","redirect","SAFE_REDIRECT_PATH_REGEX","test","warn","error","getAll","getEnabled","getCount","length","middlewareManagerInstance","getRouterMiddlewareManager"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/middleware/auth.ts"],"sourcesContent":["/**\n * 路由权限拦截中间件\n */\n\nimport type {\n RouterMiddleware,\n RouterMiddlewareContext,\n RouterMiddlewareResult,\n} from './types';\nimport { logger } from '@vlian/logger';\n\n/**\n * 权限检查函数类型\n */\nexport type AuthCheckFunction = (context: RouterMiddlewareContext) => boolean | Promise<boolean>;\n\n/**\n * 权限拦截中间件配置\n */\nexport interface AuthMiddlewareConfig {\n /**\n * 权限检查函数\n * 返回 true 表示有权限,false 表示无权限\n */\n checkAuth: AuthCheckFunction;\n\n /**\n * 登录状态检查函数\n * 返回 true 表示已登录,false 表示未登录\n */\n checkLogin?: () => boolean | Promise<boolean>;\n\n /**\n * 角色检查函数\n * 返回 true 表示有权限,false 表示无权限\n */\n checkRole?: (roles: string[]) => boolean | Promise<boolean>;\n\n /**\n * 未登录时重定向路径\n * @default '/login'\n */\n loginRedirect?: string;\n\n /**\n * 无权限时重定向路径\n * @default '/403'\n */\n forbiddenRedirect?: string;\n\n /**\n * 中间件名称\n */\n name?: string;\n\n /**\n * 优先级\n * @default 10\n */\n priority?: number;\n}\n\n/**\n * 创建权限拦截中间件\n * \n * @param config - 权限拦截中间件配置\n * @returns 路由中间件函数\n */\nexport function createAuthMiddleware(\n config: AuthMiddlewareConfig\n): RouterMiddleware {\n const {\n checkAuth,\n checkLogin,\n checkRole,\n loginRedirect = '/login',\n forbiddenRedirect = '/403',\n } = config;\n\n return async (context: RouterMiddlewareContext): Promise<RouterMiddlewareResult> => {\n const { to } = context;\n\n // 检查路由是否需要登录\n const needLogin = to.meta?.needLogin || (to.meta as any)?.handle?.needLogin;\n\n if (needLogin) {\n // 检查登录状态\n if (checkLogin) {\n const isLoggedIn = await checkLogin();\n if (!isLoggedIn) {\n logger.debug(`路由权限拦截: 未登录,重定向到 ${loginRedirect}`);\n return {\n allow: false,\n redirect: loginRedirect,\n reason: '需要登录',\n };\n }\n }\n }\n\n // 检查路由角色权限\n const roles = to.meta?.roles || (to.meta as any)?.handle?.roles;\n if (roles && Array.isArray(roles) && roles.length > 0) {\n if (checkRole) {\n const hasRole = await checkRole(roles);\n if (!hasRole) {\n logger.debug(`路由权限拦截: 无权限,重定向到 ${forbiddenRedirect}`);\n return {\n allow: false,\n redirect: forbiddenRedirect,\n reason: '无权限访问',\n };\n }\n }\n }\n\n // 执行自定义权限检查\n if (checkAuth) {\n const hasAuth = await checkAuth(context);\n if (!hasAuth) {\n logger.debug(`路由权限拦截: 权限检查失败,重定向到 ${forbiddenRedirect}`);\n return {\n allow: false,\n redirect: forbiddenRedirect,\n reason: '权限检查失败',\n };\n }\n }\n\n // 权限检查通过\n return { allow: true };\n };\n}\n"],"names":["createAuthMiddleware","config","checkAuth","checkLogin","checkRole","loginRedirect","forbiddenRedirect","context","to","needLogin","meta","handle","isLoggedIn","logger","debug","allow","redirect","reason","roles","Array","isArray","length","hasRole","hasAuth"],"mappings":"AAAA;;CAEC;;;;+BAkEeA;;;eAAAA;;;wBA3DO;AA2DhB,SAASA,qBACdC,MAA4B;IAE5B,MAAM,EACJC,SAAS,EACTC,UAAU,EACVC,SAAS,EACTC,gBAAgB,QAAQ,EACxBC,oBAAoB,MAAM,EAC3B,GAAGL;IAEJ,OAAO,OAAOM;QACZ,MAAM,EAAEC,EAAE,EAAE,GAAGD;QAEf,aAAa;QACb,MAAME,YAAYD,GAAGE,IAAI,EAAED,aAAcD,GAAGE,IAAI,EAAUC,QAAQF;QAElE,IAAIA,WAAW;YACb,SAAS;YACT,IAAIN,YAAY;gBACd,MAAMS,aAAa,MAAMT;gBACzB,IAAI,CAACS,YAAY;oBACfC,cAAM,CAACC,KAAK,CAAC,CAAC,iBAAiB,EAAET,eAAe;oBAChD,OAAO;wBACLU,OAAO;wBACPC,UAAUX;wBACVY,QAAQ;oBACV;gBACF;YACF;QACF;QAEA,WAAW;QACX,MAAMC,QAAQV,GAAGE,IAAI,EAAEQ,SAAUV,GAAGE,IAAI,EAAUC,QAAQO;QAC1D,IAAIA,SAASC,MAAMC,OAAO,CAACF,UAAUA,MAAMG,MAAM,GAAG,GAAG;YACrD,IAAIjB,WAAW;gBACb,MAAMkB,UAAU,MAAMlB,UAAUc;gBAChC,IAAI,CAACI,SAAS;oBACZT,cAAM,CAACC,KAAK,CAAC,CAAC,iBAAiB,EAAER,mBAAmB;oBACpD,OAAO;wBACLS,OAAO;wBACPC,UAAUV;wBACVW,QAAQ;oBACV;gBACF;YACF;QACF;QAEA,YAAY;QACZ,IAAIf,WAAW;YACb,MAAMqB,UAAU,MAAMrB,UAAUK;YAChC,IAAI,CAACgB,SAAS;gBACZV,cAAM,CAACC,KAAK,CAAC,CAAC,oBAAoB,EAAER,mBAAmB;gBACvD,OAAO;oBACLS,OAAO;oBACPC,UAAUV;oBACVW,QAAQ;gBACV;YACF;QACF;QAEA,SAAS;QACT,OAAO;YAAEF,OAAO;QAAK;IACvB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/middleware/auth.ts"],"sourcesContent":["/**\n * 路由权限拦截中间件\n */\n\nimport type {\n RouterMiddleware,\n RouterMiddlewareContext,\n RouterMiddlewareResult,\n} from './types';\nimport { logger } from '@vlian/logger';\n\n/**\n * 权限检查函数类型\n */\nexport type AuthCheckFunction = (context: RouterMiddlewareContext) => boolean | Promise<boolean>;\n\n/**\n * 权限拦截中间件配置\n */\nexport interface AuthMiddlewareConfig {\n /**\n * 权限检查函数\n * 返回 true 表示有权限,false 表示无权限\n */\n checkAuth: AuthCheckFunction;\n\n /**\n * 登录状态检查函数\n * 返回 true 表示已登录,false 表示未登录\n */\n checkLogin?: () => boolean | Promise<boolean>;\n\n /**\n * 角色检查函数\n * 返回 true 表示有权限,false 表示无权限\n */\n checkRole?: (roles: string[]) => boolean | Promise<boolean>;\n\n /**\n * 未登录时重定向路径\n * @default '/login'\n */\n loginRedirect?: string;\n\n /**\n * 无权限时重定向路径\n * @default '/403'\n */\n forbiddenRedirect?: string;\n\n /**\n * 中间件名称\n */\n name?: string;\n\n /**\n * 优先级\n * @default 10\n */\n priority?: number;\n}\n\n/**\n * 创建权限拦截中间件\n * \n * @param config - 权限拦截中间件配置\n * @returns 路由中间件函数\n */\nexport function createAuthMiddleware(\n config: AuthMiddlewareConfig\n): RouterMiddleware {\n const {\n checkAuth,\n checkLogin,\n checkRole,\n loginRedirect = '/login',\n forbiddenRedirect = '/403',\n } = config;\n\n return async (context: RouterMiddlewareContext): Promise<RouterMiddlewareResult> => {\n const { to } = context;\n\n // 检查路由是否需要登录\n const needLogin = to.meta?.needLogin || (to.meta as any)?.handle?.needLogin;\n\n if (needLogin) {\n // 检查登录状态\n if (checkLogin) {\n const isLoggedIn = await checkLogin();\n if (!isLoggedIn) {\n logger.debug(`路由权限拦截: 未登录,重定向到 ${loginRedirect}`);\n return {\n allow: false,\n redirect: loginRedirect,\n reason: '需要登录',\n };\n }\n }\n }\n\n // 检查路由角色权限\n const roles = to.meta?.roles || (to.meta as any)?.handle?.roles;\n if (roles && Array.isArray(roles) && roles.length > 0) {\n if (checkRole) {\n const hasRole = await checkRole(roles);\n if (!hasRole) {\n logger.debug(`路由权限拦截: 无权限,重定向到 ${forbiddenRedirect}`);\n return {\n allow: false,\n redirect: forbiddenRedirect,\n reason: '无权限访问',\n };\n }\n }\n }\n\n // 执行自定义权限检查\n if (checkAuth) {\n const hasAuth = await checkAuth(context);\n if (!hasAuth) {\n logger.debug(`路由权限拦截: 权限检查失败,重定向到 ${forbiddenRedirect}`);\n return {\n allow: false,\n redirect: forbiddenRedirect,\n reason: '权限检查失败',\n };\n }\n }\n\n // 权限检查通过\n return { allow: true };\n };\n}\n"],"names":["logger","createAuthMiddleware","config","checkAuth","checkLogin","checkRole","loginRedirect","forbiddenRedirect","context","to","needLogin","meta","handle","isLoggedIn","debug","allow","redirect","reason","roles","Array","isArray","length","hasRole","hasAuth"],"mappings":"AAAA;;CAEC,GAOD,SAASA,MAAM,QAAQ,gBAAgB;AAqDvC;;;;;CAKC,GACD,OAAO,SAASC,qBACdC,MAA4B;IAE5B,MAAM,EACJC,SAAS,EACTC,UAAU,EACVC,SAAS,EACTC,gBAAgB,QAAQ,EACxBC,oBAAoB,MAAM,EAC3B,GAAGL;IAEJ,OAAO,OAAOM;QACZ,MAAM,EAAEC,EAAE,EAAE,GAAGD;QAEf,aAAa;QACb,MAAME,YAAYD,GAAGE,IAAI,EAAED,aAAcD,GAAGE,IAAI,EAAUC,QAAQF;QAElE,IAAIA,WAAW;YACb,SAAS;YACT,IAAIN,YAAY;gBACd,MAAMS,aAAa,MAAMT;gBACzB,IAAI,CAACS,YAAY;oBACfb,OAAOc,KAAK,CAAC,CAAC,iBAAiB,EAAER,eAAe;oBAChD,OAAO;wBACLS,OAAO;wBACPC,UAAUV;wBACVW,QAAQ;oBACV;gBACF;YACF;QACF;QAEA,WAAW;QACX,MAAMC,QAAQT,GAAGE,IAAI,EAAEO,SAAUT,GAAGE,IAAI,EAAUC,QAAQM;QAC1D,IAAIA,SAASC,MAAMC,OAAO,CAACF,UAAUA,MAAMG,MAAM,GAAG,GAAG;YACrD,IAAIhB,WAAW;gBACb,MAAMiB,UAAU,MAAMjB,UAAUa;gBAChC,IAAI,CAACI,SAAS;oBACZtB,OAAOc,KAAK,CAAC,CAAC,iBAAiB,EAAEP,mBAAmB;oBACpD,OAAO;wBACLQ,OAAO;wBACPC,UAAUT;wBACVU,QAAQ;oBACV;gBACF;YACF;QACF;QAEA,YAAY;QACZ,IAAId,WAAW;YACb,MAAMoB,UAAU,MAAMpB,UAAUK;YAChC,IAAI,CAACe,SAAS;gBACZvB,OAAOc,KAAK,CAAC,CAAC,oBAAoB,EAAEP,mBAAmB;gBACvD,OAAO;oBACLQ,OAAO;oBACPC,UAAUT;oBACVU,QAAQ;gBACV;YACF;QACF;QAEA,SAAS;QACT,OAAO;YAAEF,OAAO;QAAK;IACvB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/middleware/index.ts"],"sourcesContent":["/**\n * 路由中间件模块入口\n */\n\nexport * from './types';\nexport * from './RouterMiddlewareManager';\nexport * from './auth';\n"],"names":[],"mappings":"AAAA;;CAEC;;;;qBAEa;qBACA;qBACA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/middleware/index.ts"],"sourcesContent":["/**\n * 路由中间件模块入口\n */\n\nexport * from './types';\nexport * from './RouterMiddlewareManager';\nexport * from './auth';\n"],"names":[],"mappings":"AAAA;;CAEC,GAED,cAAc,UAAU;AACxB,cAAc,4BAA4B;AAC1C,cAAc,SAAS"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/middleware/types.ts"],"sourcesContent":["/**\n * 路由中间件类型定义\n */\n\nimport type { RouteLocation, NavigateOptions } from '../types';\n\n/**\n * 路由中间件上下文\n */\nexport interface RouterMiddlewareContext {\n /**\n * 目标路由\n */\n to: RouteLocation;\n\n /**\n * 来源路由\n */\n from?: RouteLocation;\n\n /**\n * 导航选项\n */\n options?: NavigateOptions;\n\n /**\n * 中间件元数据\n */\n meta?: Record<string, unknown>;\n}\n\n/**\n * 路由中间件结果\n */\nexport type RouterMiddlewareResult =\n | {\n /**\n * 允许继续导航\n */\n allow: true;\n }\n | {\n /**\n * 阻止导航\n */\n allow: false;\n /**\n * 重定向路径(可选)\n */\n redirect?: string;\n /**\n * 阻止原因\n */\n reason?: string;\n };\n\n/**\n * 路由中间件函数\n */\nexport type RouterMiddleware = (\n context: RouterMiddlewareContext\n) =>\n | RouterMiddlewareResult\n | string\n | false\n | void\n | Promise<RouterMiddlewareResult | string | false | void>;\n\n/**\n * 路由中间件配置\n */\nexport interface RouterMiddlewareConfig {\n /**\n * 中间件函数\n */\n middleware: RouterMiddleware;\n\n /**\n * 中间件名称\n */\n name?: string;\n\n /**\n * 优先级(数字越小优先级越高)\n * @default 100\n */\n priority?: number;\n\n /**\n * 是否启用\n * @default true\n */\n enabled?: boolean;\n\n /**\n * 条件函数(返回 true 时才执行中间件)\n */\n condition?: (context: RouterMiddlewareContext) => boolean;\n}\n\n/**\n * 路由生命周期钩子结果\n */\nexport type RouteLifecycleResult =\n | void\n | string\n | false\n | Promise<void | string | false>;\n"],"names":[],"mappings":"AAAA;;CAEC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/middleware/types.ts"],"sourcesContent":["/**\n * 路由中间件类型定义\n */\n\nimport type { RouteLocation, NavigateOptions } from '../types';\n\n/**\n * 路由中间件上下文\n */\nexport interface RouterMiddlewareContext {\n /**\n * 目标路由\n */\n to: RouteLocation;\n\n /**\n * 来源路由\n */\n from?: RouteLocation;\n\n /**\n * 导航选项\n */\n options?: NavigateOptions;\n\n /**\n * 中间件元数据\n */\n meta?: Record<string, unknown>;\n}\n\n/**\n * 路由中间件结果\n */\nexport type RouterMiddlewareResult =\n | {\n /**\n * 允许继续导航\n */\n allow: true;\n }\n | {\n /**\n * 阻止导航\n */\n allow: false;\n /**\n * 重定向路径(可选)\n */\n redirect?: string;\n /**\n * 阻止原因\n */\n reason?: string;\n };\n\n/**\n * 路由中间件函数\n */\nexport type RouterMiddleware = (\n context: RouterMiddlewareContext\n) =>\n | RouterMiddlewareResult\n | string\n | false\n | void\n | Promise<RouterMiddlewareResult | string | false | void>;\n\n/**\n * 路由中间件配置\n */\nexport interface RouterMiddlewareConfig {\n /**\n * 中间件函数\n */\n middleware: RouterMiddleware;\n\n /**\n * 中间件名称\n */\n name?: string;\n\n /**\n * 优先级(数字越小优先级越高)\n * @default 100\n */\n priority?: number;\n\n /**\n * 是否启用\n * @default true\n */\n enabled?: boolean;\n\n /**\n * 条件函数(返回 true 时才执行中间件)\n */\n condition?: (context: RouterMiddlewareContext) => boolean;\n}\n\n/**\n * 路由生命周期钩子结果\n */\nexport type RouteLifecycleResult =\n | void\n | string\n | false\n | Promise<void | string | false>;\n"],"names":[],"mappings":"AAAA;;CAEC,GAkGD;;CAEC,GACD,WAImC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/monitoring/RouterMonitoring.ts"],"sourcesContent":["/**\n * 路由监控服务\n * 提供路由访问统计、性能监控、错误监控等功能\n */\n\nimport { getMonitoring } from '@vlian/monitoring';\nimport { logger } from '@vlian/logger';\nimport type { RouteLocation } from '../types';\nimport type { RouterError } from '../errors';\n\n/**\n * 路由访问记录\n */\ninterface RouteAccessRecord {\n /**\n * 路由路径\n */\n path: string;\n\n /**\n * 路由名称\n */\n name?: string;\n\n /**\n * 访问时间\n */\n timestamp: number;\n\n /**\n * 访问持续时间(毫秒)\n */\n duration?: number;\n\n /**\n * 来源路由\n */\n from?: string;\n\n /**\n * 是否成功\n */\n success: boolean;\n\n /**\n * 错误信息(如果有)\n */\n error?: string;\n}\n\n/**\n * 路由性能指标\n */\ninterface RoutePerformanceMetrics {\n /**\n * 路由匹配时间(毫秒)\n */\n matchTime?: number;\n\n /**\n * 组件加载时间(毫秒)\n */\n loadTime?: number;\n\n /**\n * 路由渲染时间(毫秒)\n */\n renderTime?: number;\n\n /**\n * 总时间(毫秒)\n */\n totalTime?: number;\n}\n\n/**\n * 路由监控配置\n */\nexport interface RouterMonitoringConfig {\n /**\n * 是否启用路由监控\n * @default true\n */\n enabled?: boolean;\n\n /**\n * 是否记录路由访问\n * @default true\n */\n trackAccess?: boolean;\n\n /**\n * 是否记录性能指标\n * @default true\n */\n trackPerformance?: boolean;\n\n /**\n * 是否记录错误\n * @default true\n */\n trackErrors?: boolean;\n\n /**\n * 最大记录数量\n * @default 1000\n */\n maxRecords?: number;\n\n /**\n * 采样率 (0-1)\n * @default 1.0\n */\n sampleRate?: number;\n}\n\n/**\n * 路由监控服务\n */\nexport class RouterMonitoring {\n private accessRecords: RouteAccessRecord[] = [];\n private performanceMetrics: Map<string, RoutePerformanceMetrics[]> = new Map();\n private config: Required<RouterMonitoringConfig>;\n private monitoringService = getMonitoring();\n private currentRouteStartTime: number = 0;\n private currentRoute?: RouteLocation;\n\n constructor(config: RouterMonitoringConfig = {}) {\n this.config = {\n enabled: config.enabled ?? true,\n trackAccess: config.trackAccess ?? true,\n trackPerformance: config.trackPerformance ?? true,\n trackErrors: config.trackErrors ?? true,\n maxRecords: config.maxRecords ?? 1000,\n sampleRate: config.sampleRate ?? 1.0,\n };\n }\n\n /**\n * 记录路由访问\n */\n trackRouteAccess(\n to: RouteLocation,\n from?: RouteLocation,\n success: boolean = true,\n error?: Error\n ): void {\n if (!this.config.enabled || !this.config.trackAccess) {\n return;\n }\n\n // 采样检查\n if (Math.random() > this.config.sampleRate) {\n return;\n }\n\n const record: RouteAccessRecord = {\n path: to.path,\n name: to.meta?.name as string | undefined,\n timestamp: Date.now(),\n from: from?.path,\n success,\n error: error?.message,\n };\n\n // 如果有当前路由,计算持续时间\n if (this.currentRoute && this.currentRouteStartTime > 0) {\n record.duration = Date.now() - this.currentRouteStartTime;\n }\n\n this.accessRecords.push(record);\n\n // 限制记录数量\n if (this.accessRecords.length > this.config.maxRecords) {\n this.accessRecords.shift();\n }\n\n // 上报到监控服务\n this.monitoringService.trackEvent('route_access', {\n path: to.path,\n name: to.meta?.name,\n success,\n error: error?.message,\n });\n\n // 更新当前路由\n this.currentRoute = to;\n this.currentRouteStartTime = Date.now();\n\n logger.debug('路由访问已记录', record);\n }\n\n /**\n * 记录路由性能指标\n */\n trackRoutePerformance(\n routeName: string,\n metrics: RoutePerformanceMetrics\n ): void {\n if (!this.config.enabled || !this.config.trackPerformance) {\n return;\n }\n\n // 采样检查\n if (Math.random() > this.config.sampleRate) {\n return;\n }\n\n const routeMetrics = this.performanceMetrics.get(routeName) || [];\n routeMetrics.push(metrics);\n\n // 限制记录数量\n if (routeMetrics.length > 100) {\n routeMetrics.shift();\n }\n\n this.performanceMetrics.set(routeName, routeMetrics);\n\n // 上报到监控服务\n this.monitoringService.reportPerformance({\n [`route_${routeName}_match`]: metrics.matchTime || 0,\n [`route_${routeName}_load`]: metrics.loadTime || 0,\n [`route_${routeName}_render`]: metrics.renderTime || 0,\n [`route_${routeName}_total`]: metrics.totalTime || 0,\n });\n\n logger.debug(`路由性能指标已记录: ${routeName}`, metrics);\n }\n\n /**\n * 记录路由错误\n */\n trackRouteError(error: RouterError | Error, context?: Record<string, unknown>): void {\n if (!this.config.enabled || !this.config.trackErrors) {\n return;\n }\n\n // 采样检查\n if (Math.random() > this.config.sampleRate) {\n return;\n }\n\n // 上报到监控服务\n this.monitoringService.captureError(error, {\n type: 'router',\n ...context,\n });\n\n logger.error('路由错误已记录', error, context);\n }\n\n /**\n * 获取路由访问统计\n */\n getAccessStats(): {\n total: number;\n success: number;\n failed: number;\n byPath: Record<string, number>;\n byName: Record<string, number>;\n averageDuration: number;\n } {\n const stats = {\n total: this.accessRecords.length,\n success: 0,\n failed: 0,\n byPath: {} as Record<string, number>,\n byName: {} as Record<string, number>,\n averageDuration: 0,\n };\n\n let totalDuration = 0;\n let durationCount = 0;\n\n for (const record of this.accessRecords) {\n if (record.success) {\n stats.success++;\n } else {\n stats.failed++;\n }\n\n stats.byPath[record.path] = (stats.byPath[record.path] || 0) + 1;\n\n if (record.name) {\n stats.byName[record.name] = (stats.byName[record.name] || 0) + 1;\n }\n\n if (record.duration) {\n totalDuration += record.duration;\n durationCount++;\n }\n }\n\n stats.averageDuration = durationCount > 0 ? totalDuration / durationCount : 0;\n\n return stats;\n }\n\n /**\n * 获取路由性能统计\n */\n getPerformanceStats(): Record<\n string,\n {\n count: number;\n averageMatchTime: number;\n averageLoadTime: number;\n averageRenderTime: number;\n averageTotalTime: number;\n }\n > {\n const stats: Record<\n string,\n {\n count: number;\n averageMatchTime: number;\n averageLoadTime: number;\n averageRenderTime: number;\n averageTotalTime: number;\n }\n > = {};\n\n for (const [routeName, metrics] of this.performanceMetrics.entries()) {\n let totalMatchTime = 0;\n let totalLoadTime = 0;\n let totalRenderTime = 0;\n let totalTotalTime = 0;\n let count = 0;\n\n for (const metric of metrics) {\n if (metric.matchTime) {\n totalMatchTime += metric.matchTime;\n }\n if (metric.loadTime) {\n totalLoadTime += metric.loadTime;\n }\n if (metric.renderTime) {\n totalRenderTime += metric.renderTime;\n }\n if (metric.totalTime) {\n totalTotalTime += metric.totalTime;\n }\n count++;\n }\n\n stats[routeName] = {\n count,\n averageMatchTime: count > 0 ? totalMatchTime / count : 0,\n averageLoadTime: count > 0 ? totalLoadTime / count : 0,\n averageRenderTime: count > 0 ? totalRenderTime / count : 0,\n averageTotalTime: count > 0 ? totalTotalTime / count : 0,\n };\n }\n\n return stats;\n }\n\n /**\n * 清空所有记录\n */\n clear(): void {\n this.accessRecords = [];\n this.performanceMetrics.clear();\n logger.debug('路由监控记录已清空');\n }\n\n /**\n * 获取监控报告\n */\n getReport() {\n return {\n access: this.getAccessStats(),\n performance: this.getPerformanceStats(),\n timestamp: Date.now(),\n };\n }\n}\n\n/**\n * 获取路由监控服务单例\n */\nlet routerMonitoringInstance: RouterMonitoring | null = null;\n\nexport function getRouterMonitoring(\n config?: RouterMonitoringConfig\n): RouterMonitoring {\n if (!routerMonitoringInstance) {\n routerMonitoringInstance = new RouterMonitoring(config);\n }\n return routerMonitoringInstance;\n}\n"],"names":["RouterMonitoring","getRouterMonitoring","trackRouteAccess","to","from","success","error","config","enabled","trackAccess","Math","random","sampleRate","record","path","name","meta","timestamp","Date","now","message","currentRoute","currentRouteStartTime","duration","accessRecords","push","length","maxRecords","shift","monitoringService","trackEvent","logger","debug","trackRoutePerformance","routeName","metrics","trackPerformance","routeMetrics","performanceMetrics","get","set","reportPerformance","matchTime","loadTime","renderTime","totalTime","trackRouteError","context","trackErrors","captureError","type","getAccessStats","stats","total","failed","byPath","byName","averageDuration","totalDuration","durationCount","getPerformanceStats","entries","totalMatchTime","totalLoadTime","totalRenderTime","totalTotalTime","count","metric","averageMatchTime","averageLoadTime","averageRenderTime","averageTotalTime","clear","getReport","access","performance","Map","getMonitoring","routerMonitoringInstance"],"mappings":"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"}
|