@vlian/framework 1.2.37 → 1.2.39
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/dist/analytics.umd.js +1 -1
- package/dist/core/Test.cjs +2 -2
- package/dist/core/Test.cjs.map +1 -1
- package/dist/core/Test.js +1 -1
- package/dist/core/Test.js.map +1 -1
- package/dist/core/config/ConfigLoader.cjs +7 -7
- package/dist/core/config/ConfigLoader.cjs.map +1 -1
- package/dist/core/config/ConfigLoader.js +1 -1
- package/dist/core/config/ConfigLoader.js.map +1 -1
- package/dist/core/error/ErrorBoundary.cjs +6 -6
- package/dist/core/error/ErrorBoundary.cjs.map +1 -1
- package/dist/core/error/ErrorBoundary.d.ts +1 -1
- package/dist/core/error/ErrorBoundary.js +2 -2
- package/dist/core/error/ErrorBoundary.js.map +1 -1
- package/dist/core/error/ErrorHandler.cjs +19 -19
- package/dist/core/error/ErrorHandler.cjs.map +1 -1
- package/dist/core/error/ErrorHandler.d.ts +1 -1
- package/dist/core/error/ErrorHandler.js +2 -2
- package/dist/core/error/ErrorHandler.js.map +1 -1
- package/dist/core/event/AppEventBus.cjs +5 -5
- package/dist/core/event/AppEventBus.cjs.map +1 -1
- package/dist/core/event/AppEventBus.js +1 -1
- package/dist/core/event/AppEventBus.js.map +1 -1
- package/dist/core/initialization/InitializationErrorThrower.cjs.map +1 -1
- package/dist/core/initialization/InitializationErrorThrower.js.map +1 -1
- package/dist/core/initialization/initialization.cjs +3 -3
- package/dist/core/initialization/initialization.cjs.map +1 -1
- package/dist/core/initialization/initialization.d.ts +1 -1
- package/dist/core/initialization/initialization.js +1 -1
- package/dist/core/initialization/initialization.js.map +1 -1
- package/dist/core/initialization/initializationErrorState.cjs +2 -2
- package/dist/core/initialization/initializationErrorState.cjs.map +1 -1
- package/dist/core/initialization/initializationErrorState.d.ts +1 -1
- package/dist/core/initialization/initializationErrorState.js +1 -1
- package/dist/core/initialization/initializationErrorState.js.map +1 -1
- package/dist/core/kernel/defaultAdapters.cjs +14 -13
- package/dist/core/kernel/defaultAdapters.cjs.map +1 -1
- package/dist/core/kernel/defaultAdapters.js +2 -1
- package/dist/core/kernel/defaultAdapters.js.map +1 -1
- package/dist/core/kernel/types.d.ts +1 -1
- package/dist/core/kernel/types.js.map +1 -1
- package/dist/core/router/RouterManager.cjs +9 -9
- package/dist/core/router/RouterManager.cjs.map +1 -1
- package/dist/core/router/RouterManager.js +1 -1
- package/dist/core/router/RouterManager.js.map +1 -1
- package/dist/core/router/adapter/AdapterManager.cjs +10 -10
- package/dist/core/router/adapter/AdapterManager.cjs.map +1 -1
- package/dist/core/router/adapter/AdapterManager.js +1 -1
- package/dist/core/router/adapter/AdapterManager.js.map +1 -1
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs +4 -4
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs.map +1 -1
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.js +1 -1
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.js.map +1 -1
- package/dist/core/router/dynamic/DynamicRouteManager.cjs +8 -8
- package/dist/core/router/dynamic/DynamicRouteManager.cjs.map +1 -1
- package/dist/core/router/dynamic/DynamicRouteManager.js +1 -1
- package/dist/core/router/dynamic/DynamicRouteManager.js.map +1 -1
- package/dist/core/router/errors/RouterError.cjs.map +1 -1
- package/dist/core/router/errors/RouterError.d.ts +4 -3
- package/dist/core/router/errors/RouterError.js.map +1 -1
- package/dist/core/router/lifecycle/RouterLifecycleManager.cjs +8 -8
- package/dist/core/router/lifecycle/RouterLifecycleManager.cjs.map +1 -1
- package/dist/core/router/lifecycle/RouterLifecycleManager.js +1 -1
- package/dist/core/router/lifecycle/RouterLifecycleManager.js.map +1 -1
- package/dist/core/router/middleware/RouterMiddlewareManager.cjs +11 -11
- package/dist/core/router/middleware/RouterMiddlewareManager.cjs.map +1 -1
- package/dist/core/router/middleware/RouterMiddlewareManager.js +1 -1
- package/dist/core/router/middleware/RouterMiddlewareManager.js.map +1 -1
- package/dist/core/router/middleware/auth.cjs +4 -4
- package/dist/core/router/middleware/auth.cjs.map +1 -1
- package/dist/core/router/middleware/auth.js +1 -1
- package/dist/core/router/middleware/auth.js.map +1 -1
- package/dist/core/router/monitoring/RouterMonitoring.cjs +1 -1
- package/dist/core/router/monitoring/RouterMonitoring.cjs.map +1 -1
- package/dist/core/router/monitoring/RouterMonitoring.js +1 -1
- package/dist/core/router/monitoring/RouterMonitoring.js.map +1 -1
- package/dist/core/router/navigation/RouterNavigation.cjs +7 -7
- package/dist/core/router/navigation/RouterNavigation.cjs.map +1 -1
- package/dist/core/router/navigation/RouterNavigation.js +1 -1
- package/dist/core/router/navigation/RouterNavigation.js.map +1 -1
- package/dist/core/router/performance/RouteCache.cjs +7 -7
- package/dist/core/router/performance/RouteCache.cjs.map +1 -1
- package/dist/core/router/performance/RouteCache.js +1 -1
- package/dist/core/router/performance/RouteCache.js.map +1 -1
- package/dist/core/router/performance/RoutePreloader.cjs +6 -6
- package/dist/core/router/performance/RoutePreloader.cjs.map +1 -1
- package/dist/core/router/performance/RoutePreloader.js +1 -1
- package/dist/core/router/performance/RoutePreloader.js.map +1 -1
- package/dist/core/router/plugin/RouterPluginManager.cjs +8 -8
- package/dist/core/router/plugin/RouterPluginManager.cjs.map +1 -1
- package/dist/core/router/plugin/RouterPluginManager.js +1 -1
- package/dist/core/router/plugin/RouterPluginManager.js.map +1 -1
- package/dist/core/router/utils/adapters/react-router/transform.cjs +2 -2
- package/dist/core/router/utils/adapters/react-router/transform.cjs.map +1 -1
- package/dist/core/router/utils/adapters/react-router/transform.js +1 -1
- package/dist/core/router/utils/adapters/react-router/transform.js.map +1 -1
- package/dist/core/router/utils/transform.cjs +13 -12
- package/dist/core/router/utils/transform.cjs.map +1 -1
- package/dist/core/router/utils/transform.js +2 -1
- package/dist/core/router/utils/transform.js.map +1 -1
- package/dist/core/router/validation/RouterConfigValidator.cjs +2 -2
- package/dist/core/router/validation/RouterConfigValidator.cjs.map +1 -1
- package/dist/core/router/validation/RouterConfigValidator.js +1 -1
- package/dist/core/router/validation/RouterConfigValidator.js.map +1 -1
- package/dist/core/router/version/RouteVersionManager.cjs +6 -6
- package/dist/core/router/version/RouteVersionManager.cjs.map +1 -1
- package/dist/core/router/version/RouteVersionManager.js +1 -1
- package/dist/core/router/version/RouteVersionManager.js.map +1 -1
- package/dist/core/splash/SplashScreen.cjs +4 -4
- package/dist/core/splash/SplashScreen.cjs.map +1 -1
- package/dist/core/splash/SplashScreen.js +1 -1
- package/dist/core/splash/SplashScreen.js.map +1 -1
- package/dist/core/startup/initializeServices.cjs +14 -14
- package/dist/core/startup/initializeServices.cjs.map +1 -1
- package/dist/core/startup/initializeServices.d.ts +1 -1
- package/dist/core/startup/initializeServices.js +2 -2
- package/dist/core/startup/initializeServices.js.map +1 -1
- package/dist/core/startup/renderApp.cjs +2 -2
- package/dist/core/startup/renderApp.cjs.map +1 -1
- package/dist/core/startup/renderApp.js +1 -1
- package/dist/core/startup/renderApp.js.map +1 -1
- package/dist/core/startup/startApp.cjs +22 -22
- package/dist/core/startup/startApp.cjs.map +1 -1
- package/dist/core/startup/startApp.js +2 -2
- package/dist/core/startup/startApp.js.map +1 -1
- package/dist/core/types.d.ts +2 -2
- package/dist/core/types.js.map +1 -1
- package/dist/index.cjs +0 -112
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.js +0 -8
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +1389 -1486
- package/dist/index.umd.js.map +1 -1
- package/dist/kernel/constants.cjs +2 -2
- package/dist/kernel/constants.cjs.map +1 -1
- package/dist/kernel/constants.js +1 -1
- package/dist/kernel/constants.js.map +1 -1
- package/dist/kernel/manager/loggerManager.cjs +10 -10
- package/dist/kernel/manager/loggerManager.cjs.map +1 -1
- package/dist/kernel/manager/loggerManager.d.ts +1 -1
- package/dist/kernel/manager/loggerManager.js +1 -1
- package/dist/kernel/manager/loggerManager.js.map +1 -1
- package/dist/kernel/types.d.ts +1 -1
- package/dist/kernel/types.js.map +1 -1
- package/dist/library/storage/encryption.cjs +12 -13
- package/dist/library/storage/encryption.cjs.map +1 -1
- package/dist/library/storage/encryption.js +1 -2
- package/dist/library/storage/encryption.js.map +1 -1
- package/dist/state.umd.js +1 -1
- package/dist/utils/errors.cjs +71 -15
- package/dist/utils/errors.cjs.map +1 -1
- package/dist/utils/errors.d.ts +30 -1
- package/dist/utils/errors.js +16 -1
- package/dist/utils/errors.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/router/RouterManager.ts"],"sourcesContent":["import { logger } from '../../utils';\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
|
+
{"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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"}
|
|
@@ -19,7 +19,7 @@ _export(exports, {
|
|
|
19
19
|
return getAdapterManager;
|
|
20
20
|
}
|
|
21
21
|
});
|
|
22
|
-
const
|
|
22
|
+
const _logger = require("@vlian/logger");
|
|
23
23
|
const _errors = require("../errors");
|
|
24
24
|
function _define_property(obj, key, value) {
|
|
25
25
|
if (key in obj) {
|
|
@@ -56,7 +56,7 @@ let AdapterManager = class AdapterManager {
|
|
|
56
56
|
};
|
|
57
57
|
// 注册适配器
|
|
58
58
|
this.adapters.set(registration.name, adapterRegistration);
|
|
59
|
-
|
|
59
|
+
_logger.logger.debug(`路由适配器已注册: ${registration.name}`);
|
|
60
60
|
// 如果没有默认适配器,设置为第一个注册的适配器
|
|
61
61
|
if (!this.defaultAdapterName) {
|
|
62
62
|
this.defaultAdapterName = registration.name;
|
|
@@ -80,7 +80,7 @@ let AdapterManager = class AdapterManager {
|
|
|
80
80
|
*/ unregister(name) {
|
|
81
81
|
if (this.adapters.has(name)) {
|
|
82
82
|
this.adapters.delete(name);
|
|
83
|
-
|
|
83
|
+
_logger.logger.debug(`路由适配器已取消注册: ${name}`);
|
|
84
84
|
// 如果取消的是默认适配器,重置默认适配器
|
|
85
85
|
if (this.defaultAdapterName === name) {
|
|
86
86
|
const firstAdapter = Array.from(this.adapters.keys())[0];
|
|
@@ -119,10 +119,10 @@ let AdapterManager = class AdapterManager {
|
|
|
119
119
|
}
|
|
120
120
|
// 初始化适配器
|
|
121
121
|
await adapter.initialize(config);
|
|
122
|
-
|
|
122
|
+
_logger.logger.info(`路由适配器已创建并初始化: ${adapterName}`);
|
|
123
123
|
return adapter;
|
|
124
124
|
} catch (error) {
|
|
125
|
-
|
|
125
|
+
_logger.logger.error(`创建路由适配器失败: ${adapterName}`, error);
|
|
126
126
|
const errorContext = {
|
|
127
127
|
adapterName
|
|
128
128
|
};
|
|
@@ -142,11 +142,11 @@ let AdapterManager = class AdapterManager {
|
|
|
142
142
|
try {
|
|
143
143
|
this.currentAdapter.destroy();
|
|
144
144
|
} catch (error) {
|
|
145
|
-
|
|
145
|
+
_logger.logger.warn('销毁旧适配器失败', error);
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
148
|
this.currentAdapter = adapter;
|
|
149
|
-
|
|
149
|
+
_logger.logger.debug(`当前路由适配器已设置: ${adapter.name}`);
|
|
150
150
|
}
|
|
151
151
|
/**
|
|
152
152
|
* 获取当前适配器
|
|
@@ -164,7 +164,7 @@ let AdapterManager = class AdapterManager {
|
|
|
164
164
|
throw new Error(`适配器不存在: ${name}`);
|
|
165
165
|
}
|
|
166
166
|
this.defaultAdapterName = name;
|
|
167
|
-
|
|
167
|
+
_logger.logger.debug(`默认路由适配器已设置: ${name}`);
|
|
168
168
|
}
|
|
169
169
|
/**
|
|
170
170
|
* 获取默认适配器名称
|
|
@@ -203,13 +203,13 @@ let AdapterManager = class AdapterManager {
|
|
|
203
203
|
try {
|
|
204
204
|
this.currentAdapter.destroy();
|
|
205
205
|
} catch (error) {
|
|
206
|
-
|
|
206
|
+
_logger.logger.warn('销毁适配器失败', error);
|
|
207
207
|
}
|
|
208
208
|
}
|
|
209
209
|
this.adapters.clear();
|
|
210
210
|
this.currentAdapter = null;
|
|
211
211
|
this.defaultAdapterName = null;
|
|
212
|
-
|
|
212
|
+
_logger.logger.debug('所有路由适配器已清空');
|
|
213
213
|
}
|
|
214
214
|
/**
|
|
215
215
|
* 获取适配器数量
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/adapter/AdapterManager.ts"],"sourcesContent":["/**\n * 路由适配器管理器\n * 负责管理路由适配器的注册、创建和切换\n */\n\nimport { logger } from '../../../utils';\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":"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"}
|
|
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"}
|
|
@@ -14,7 +14,7 @@ function _define_property(obj, key, value) {
|
|
|
14
14
|
/**
|
|
15
15
|
* 路由适配器管理器
|
|
16
16
|
* 负责管理路由适配器的注册、创建和切换
|
|
17
|
-
*/ import { logger } from "
|
|
17
|
+
*/ import { logger } from "@vlian/logger";
|
|
18
18
|
import { RouterError, RouterErrorCode } from "../errors";
|
|
19
19
|
/**
|
|
20
20
|
* 路由适配器管理器
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/adapter/AdapterManager.ts"],"sourcesContent":["/**\n * 路由适配器管理器\n * 负责管理路由适配器的注册、创建和切换\n */\n\nimport { logger } from '../../../utils';\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
|
+
{"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":";;;;;;;;;;;;;AAAA;;;CAGC,GAED,SAASA,MAAM,QAAQ,gBAAgB;AAEvC,SAASC,WAAW,EAAEC,eAAe,QAAQ,YAAY;AAEzD;;CAEC,GACD,OAAO,MAAMC;IAKX;;;;;GAKC,GACDC,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;QAErCT,OAAOc,KAAK,CAAC,CAAC,UAAU,EAAET,aAAaC,IAAI,EAAE;QAE7C,yBAAyB;QACzB,IAAI,CAAC,IAAI,CAACS,kBAAkB,EAAE;YAC5B,IAAI,CAACA,kBAAkB,GAAGV,aAAaC,IAAI;QAC7C;QAEA,WAAW;QACX,OAAO;YACL,IAAI,CAACU,UAAU,CAACX,aAAaC,IAAI;QACnC;IACF;IAEA;;;;GAIC,GACDW,cAAcC,aAAoC,EAAQ;QACxDA,cAAcC,OAAO,CAAC,CAACd,eAAiB,IAAI,CAACD,QAAQ,CAACC;IACxD;IAEA;;;;GAIC,GACDW,WAAWV,IAAY,EAAQ;QAC7B,IAAI,IAAI,CAACM,QAAQ,CAACQ,GAAG,CAACd,OAAO;YAC3B,IAAI,CAACM,QAAQ,CAACS,MAAM,CAACf;YACrBN,OAAOc,KAAK,CAAC,CAAC,YAAY,EAAER,MAAM;YAElC,sBAAsB;YACtB,IAAI,IAAI,CAACS,kBAAkB,KAAKT,MAAM;gBACpC,MAAMgB,eAAeC,MAAMC,IAAI,CAAC,IAAI,CAACZ,QAAQ,CAACa,IAAI,GAAG,CAAC,EAAE;gBACxD,IAAI,CAACV,kBAAkB,GAAGO,gBAAgB;YAC5C;QACF;IACF;IAEA;;;;;;GAMC,GACD,MAAMI,cACJC,MAA2B,EAC3BrB,IAAa,EACY;QACzB,MAAMsB,cAActB,QAAQ,IAAI,CAACS,kBAAkB;QAEnD,IAAI,CAACa,aAAa;YAChB,MAAM,IAAI3B,YACR,cACAC,gBAAgB2B,sBAAsB;QAE1C;QAEA,MAAMxB,eAAe,IAAI,CAACO,QAAQ,CAACkB,GAAG,CAACF;QAEvC,IAAI,CAACvB,cAAc;YACjB,MAAM,IAAIJ,YACR,CAAC,UAAU,EAAE2B,aAAa,EAC1B1B,gBAAgB6B,mBAAmB,EACnCC,WACAA,WACA;gBAAEJ;YAAY;QAElB;QAEA,IAAI,CAACvB,aAAaM,OAAO,EAAE;YACzB,MAAM,IAAIV,YACR,CAAC,UAAU,EAAE2B,aAAa,EAC1B1B,gBAAgB6B,mBAAmB,EACnCC,WACAA,WACA;gBAAEJ;YAAY;QAElB;QAEA,IAAI;YACF,UAAU;YACV,MAAMK,UAAU,MAAM5B,aAAaG,OAAO,CAACmB;YAE3C,QAAQ;YACR,IAAI,CAACM,WAAW,OAAOA,QAAQC,UAAU,KAAK,YAAY;gBACxD,MAAM,IAAI3B,MAAM;YAClB;YAEA,SAAS;YACT,MAAM0B,QAAQC,UAAU,CAACP;YAEzB3B,OAAOmC,IAAI,CAAC,CAAC,cAAc,EAAEP,aAAa;YAE1C,OAAOK;QACT,EAAE,OAAOG,OAAO;YACdpC,OAAOoC,KAAK,CAAC,CAAC,WAAW,EAAER,aAAa,EAAEQ;YAC1C,MAAMC,eAAwC;gBAAET;YAAY;YAC5D,IAAIQ,iBAAiB7B,OAAO;gBAC1B8B,aAAaC,aAAa,GAAGF;YAC/B;YACA,MAAM,IAAInC,YACR,CAAC,WAAW,EAAE2B,aAAa,EAC3B1B,gBAAgB6B,mBAAmB,EACnCC,WACAI,iBAAiB7B,QAAQ6B,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;gBACdpC,OAAO0C,IAAI,CAAC,YAAYN;YAC1B;QACF;QAEA,IAAI,CAACI,cAAc,GAAGP;QACtBjC,OAAOc,KAAK,CAAC,CAAC,YAAY,EAAEmB,QAAQ3B,IAAI,EAAE;IAC5C;IAEA;;;;GAIC,GACDqC,oBAA2C;QACzC,OAAO,IAAI,CAACH,cAAc;IAC5B;IAEA;;;;GAIC,GACDI,kBAAkBtC,IAAY,EAAQ;QACpC,IAAI,CAAC,IAAI,CAACM,QAAQ,CAACQ,GAAG,CAACd,OAAO;YAC5B,MAAM,IAAIC,MAAM,CAAC,QAAQ,EAAED,MAAM;QACnC;QAEA,IAAI,CAACS,kBAAkB,GAAGT;QAC1BN,OAAOc,KAAK,CAAC,CAAC,YAAY,EAAER,MAAM;IACpC;IAEA;;;;GAIC,GACDuC,wBAAuC;QACrC,OAAO,IAAI,CAAC9B,kBAAkB;IAChC;IAEA;;;;GAIC,GACD+B,iBAAwC;QACtC,OAAOvB,MAAMC,IAAI,CAAC,IAAI,CAACZ,QAAQ,CAACmC,MAAM;IACxC;IAEA;;;;GAIC,GACDC,qBAA4C;QAC1C,OAAOzB,MAAMC,IAAI,CAAC,IAAI,CAACZ,QAAQ,CAACmC,MAAM,IAAIE,MAAM,CAAC,CAACC,IAAMA,EAAEvC,OAAO,KAAK;IACxE;IAEA;;;;;GAKC,GACDwC,WAAW7C,IAAY,EAAmC;QACxD,OAAO,IAAI,CAACM,QAAQ,CAACkB,GAAG,CAACxB;IAC3B;IAEA;;GAEC,GACD8C,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;gBACdpC,OAAO0C,IAAI,CAAC,WAAWN;YACzB;QACF;QAEA,IAAI,CAACxB,QAAQ,CAACwC,KAAK;QACnB,IAAI,CAACZ,cAAc,GAAG;QACtB,IAAI,CAACzB,kBAAkB,GAAG;QAC1Bf,OAAOc,KAAK,CAAC;IACf;IAEA;;;;GAIC,GACDuC,WAAmB;QACjB,OAAO,IAAI,CAACzC,QAAQ,CAAC0C,IAAI;IAC3B;;QAxPA,uBAAQ1C,YAA6C,IAAI2C;QACzD,uBAAQf,kBAAwC;QAChD,uBAAQzB,sBAAoC;;AAuP9C;AAEA;;CAEC,GACD,IAAIyC,yBAAgD;AAEpD,OAAO,SAASC;IACd,IAAI,CAACD,wBAAwB;QAC3BA,yBAAyB,IAAIrD;IAC/B;IACA,OAAOqD;AACT"}
|
|
@@ -21,7 +21,7 @@ _export(exports, {
|
|
|
21
21
|
const _reactrouterdom = require("react-router-dom");
|
|
22
22
|
const _transform = require("../../utils/adapters/react-router/transform");
|
|
23
23
|
const _transform1 = require("../../utils/transform");
|
|
24
|
-
const
|
|
24
|
+
const _logger = require("@vlian/logger");
|
|
25
25
|
function _define_property(obj, key, value) {
|
|
26
26
|
if (key in obj) {
|
|
27
27
|
Object.defineProperty(obj, key, {
|
|
@@ -53,7 +53,7 @@ let ReactRouterAdapter = class ReactRouterAdapter {
|
|
|
53
53
|
} else {
|
|
54
54
|
throw new Error(`不支持的路由模式: ${mode}`);
|
|
55
55
|
}
|
|
56
|
-
|
|
56
|
+
_logger.logger.debug('React Router 适配器初始化完成');
|
|
57
57
|
}
|
|
58
58
|
/**
|
|
59
59
|
* 挂载到应用实例
|
|
@@ -63,7 +63,7 @@ let ReactRouterAdapter = class ReactRouterAdapter {
|
|
|
63
63
|
}
|
|
64
64
|
// React Router 适配器通过 RouterProvider 挂载
|
|
65
65
|
// 实际的挂载逻辑在 renderApp 中处理
|
|
66
|
-
|
|
66
|
+
_logger.logger.debug('React Router 适配器已挂载');
|
|
67
67
|
}
|
|
68
68
|
/**
|
|
69
69
|
* 导航到指定路径
|
|
@@ -113,7 +113,7 @@ let ReactRouterAdapter = class ReactRouterAdapter {
|
|
|
113
113
|
* 销毁适配器
|
|
114
114
|
*/ destroy() {
|
|
115
115
|
this.router = null;
|
|
116
|
-
|
|
116
|
+
_logger.logger.debug('React Router 适配器已销毁');
|
|
117
117
|
}
|
|
118
118
|
constructor(){
|
|
119
119
|
_define_property(this, "name", 'react-router');
|
|
@@ -1 +1 @@
|
|
|
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 '
|
|
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"}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
import { createBrowserRouter, createHashRouter, createMemoryRouter } from "react-router-dom";
|
|
17
17
|
import { transformRoutesToReactRoutes } from "../../utils/adapters/react-router/transform";
|
|
18
18
|
import { transformRoutes } from "../../utils/transform";
|
|
19
|
-
import { logger } from "
|
|
19
|
+
import { logger } from "@vlian/logger";
|
|
20
20
|
/**
|
|
21
21
|
* React Router 适配器
|
|
22
22
|
*/ export class ReactRouterAdapter {
|
|
@@ -1 +1 @@
|
|
|
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 '
|
|
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"}
|
|
@@ -19,7 +19,7 @@ _export(exports, {
|
|
|
19
19
|
return getDynamicRouteManager;
|
|
20
20
|
}
|
|
21
21
|
});
|
|
22
|
-
const
|
|
22
|
+
const _logger = require("@vlian/logger");
|
|
23
23
|
const _RouterManager = require("../RouterManager");
|
|
24
24
|
const _transform = require("../utils/transform");
|
|
25
25
|
const _errors = require("../errors");
|
|
@@ -68,7 +68,7 @@ let DynamicRouteManager = class DynamicRouteManager {
|
|
|
68
68
|
]);
|
|
69
69
|
// 更新版本号
|
|
70
70
|
this.routeVersion++;
|
|
71
|
-
|
|
71
|
+
_logger.logger.info(`路由已注册: ${routes.length} 个路由到命名空间 "${ns}"`);
|
|
72
72
|
// 返回取消注册函数
|
|
73
73
|
return async ()=>{
|
|
74
74
|
await this.unregister(routes.map((r)=>r.name), ns);
|
|
@@ -85,7 +85,7 @@ let DynamicRouteManager = class DynamicRouteManager {
|
|
|
85
85
|
// 过滤掉要取消注册的路由
|
|
86
86
|
const filteredRoutes = routes.filter((r)=>!routeNames.includes(r.name));
|
|
87
87
|
if (filteredRoutes.length === routes.length) {
|
|
88
|
-
|
|
88
|
+
_logger.logger.warn(`未找到要取消注册的路由: ${routeNames.join(', ')}`);
|
|
89
89
|
return;
|
|
90
90
|
}
|
|
91
91
|
// 更新注册表
|
|
@@ -96,7 +96,7 @@ let DynamicRouteManager = class DynamicRouteManager {
|
|
|
96
96
|
}
|
|
97
97
|
// 更新版本号
|
|
98
98
|
this.routeVersion++;
|
|
99
|
-
|
|
99
|
+
_logger.logger.info(`路由已取消注册: ${routeNames.length} 个路由从命名空间 "${ns}"`);
|
|
100
100
|
}
|
|
101
101
|
/**
|
|
102
102
|
* 获取指定命名空间的路由
|
|
@@ -124,14 +124,14 @@ let DynamicRouteManager = class DynamicRouteManager {
|
|
|
124
124
|
const ns = namespace || 'default';
|
|
125
125
|
this.registeredRoutes.delete(ns);
|
|
126
126
|
this.routeVersion++;
|
|
127
|
-
|
|
127
|
+
_logger.logger.info(`路由命名空间已清空: "${ns}"`);
|
|
128
128
|
}
|
|
129
129
|
/**
|
|
130
130
|
* 清空所有路由
|
|
131
131
|
*/ clearAll() {
|
|
132
132
|
this.registeredRoutes.clear();
|
|
133
133
|
this.routeVersion++;
|
|
134
|
-
|
|
134
|
+
_logger.logger.info('所有路由已清空');
|
|
135
135
|
}
|
|
136
136
|
/**
|
|
137
137
|
* 获取路由版本号
|
|
@@ -166,7 +166,7 @@ let DynamicRouteManager = class DynamicRouteManager {
|
|
|
166
166
|
allRoutes.push(...routes);
|
|
167
167
|
});
|
|
168
168
|
if (allRoutes.length === 0) {
|
|
169
|
-
|
|
169
|
+
_logger.logger.warn('没有已注册的路由,无法重新加载');
|
|
170
170
|
return;
|
|
171
171
|
}
|
|
172
172
|
// 转换路由
|
|
@@ -175,7 +175,7 @@ let DynamicRouteManager = class DynamicRouteManager {
|
|
|
175
175
|
// 重新创建路由实例
|
|
176
176
|
// 注意:这里需要获取原始配置的模式和选项
|
|
177
177
|
// 由于当前架构限制,这里只是示例实现
|
|
178
|
-
|
|
178
|
+
_logger.logger.info('路由重新加载完成');
|
|
179
179
|
}
|
|
180
180
|
constructor(){
|
|
181
181
|
_define_property(this, "registeredRoutes", new Map());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/router/dynamic/DynamicRouteManager.ts"],"sourcesContent":["/**\n * 路由动态注册管理器\n * 支持运行时动态注册和卸载路由\n */\n\nimport { logger } from '
|
|
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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"}
|
|
@@ -14,7 +14,7 @@ function _define_property(obj, key, value) {
|
|
|
14
14
|
/**
|
|
15
15
|
* 路由动态注册管理器
|
|
16
16
|
* 支持运行时动态注册和卸载路由
|
|
17
|
-
*/ import { logger } from "
|
|
17
|
+
*/ import { logger } from "@vlian/logger";
|
|
18
18
|
import { getRouterManager } from "../RouterManager";
|
|
19
19
|
import { transformRoutes } from "../utils/transform";
|
|
20
20
|
import { RouterError, RouterErrorCode } from "../errors";
|