@vlian/framework 1.2.61 → 1.2.62
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/components/index.cjs +1 -1
- package/dist/components/index.d.ts +0 -4
- package/dist/components/index.js +1 -1
- package/dist/core-bak/Test.cjs +1 -0
- package/dist/core-bak/Test.d.ts +5 -0
- package/dist/core-bak/Test.js +1 -0
- package/dist/core-bak/app/AppContext.cjs +1 -0
- package/dist/core-bak/app/AppContext.d.ts +113 -0
- package/dist/core-bak/app/AppContext.js +1 -0
- package/dist/core-bak/app/AppContext.types.cjs +1 -0
- package/dist/core-bak/app/AppContext.types.d.ts +146 -0
- package/dist/core-bak/app/AppContext.types.js +1 -0
- package/dist/core-bak/app/BasicLayout.cjs +1 -0
- package/dist/core-bak/app/BasicLayout.d.ts +15 -0
- package/dist/core-bak/app/BasicLayout.js +1 -0
- package/dist/core-bak/app/DefaultApp.cjs +1 -0
- package/dist/core-bak/app/DefaultApp.d.ts +10 -0
- package/dist/core-bak/app/DefaultApp.js +1 -0
- package/dist/core-bak/app/index.cjs +1 -0
- package/dist/core-bak/app/index.d.ts +8 -0
- package/dist/core-bak/app/index.js +1 -0
- package/dist/core-bak/config/AppConfig.cjs +1 -0
- package/dist/core-bak/config/AppConfig.d.ts +88 -0
- package/dist/core-bak/config/AppConfig.js +1 -0
- package/dist/core-bak/config/ConfigLoader.cjs +1 -0
- package/dist/core-bak/config/ConfigLoader.d.ts +118 -0
- package/dist/core-bak/config/ConfigLoader.js +1 -0
- package/dist/core-bak/config/ConfigValidator.cjs +2 -0
- package/dist/core-bak/config/ConfigValidator.d.ts +84 -0
- package/dist/core-bak/config/ConfigValidator.js +2 -0
- package/dist/core-bak/config/index.cjs +1 -0
- package/dist/core-bak/config/index.d.ts +6 -0
- package/dist/core-bak/config/index.js +1 -0
- package/dist/core-bak/dev/DevTools.cjs +1 -0
- package/dist/core-bak/dev/DevTools.d.ts +16 -0
- package/dist/core-bak/dev/DevTools.js +1 -0
- package/dist/core-bak/error/ErrorBoundary.cjs +1 -0
- package/dist/core-bak/error/ErrorBoundary.d.ts +121 -0
- package/dist/core-bak/error/ErrorBoundary.js +1 -0
- package/dist/core-bak/error/ErrorHandler.cjs +1 -0
- package/dist/core-bak/error/ErrorHandler.d.ts +171 -0
- package/dist/core-bak/error/ErrorHandler.js +1 -0
- package/dist/core-bak/error/index.cjs +1 -0
- package/dist/core-bak/error/index.d.ts +7 -0
- package/dist/core-bak/error/index.js +1 -0
- package/dist/core-bak/event/AppEventBus.cjs +1 -0
- package/dist/core-bak/event/AppEventBus.d.ts +178 -0
- package/dist/core-bak/event/AppEventBus.js +1 -0
- package/dist/core-bak/event/frameworkEvents.cjs +1 -0
- package/dist/core-bak/event/frameworkEvents.d.ts +69 -0
- package/dist/core-bak/event/frameworkEvents.js +1 -0
- package/dist/core-bak/event/hooks.cjs +1 -0
- package/dist/core-bak/event/hooks.d.ts +57 -0
- package/dist/core-bak/event/hooks.js +1 -0
- package/dist/core-bak/event/index.cjs +1 -0
- package/dist/core-bak/event/index.d.ts +10 -0
- package/dist/core-bak/event/index.js +1 -0
- package/dist/core-bak/event/types.cjs +1 -0
- package/dist/core-bak/event/types.d.ts +269 -0
- package/dist/core-bak/event/types.js +1 -0
- package/dist/core-bak/event/useEventBus.cjs +1 -0
- package/dist/core-bak/event/useEventBus.d.ts +28 -0
- package/dist/core-bak/event/useEventBus.js +1 -0
- package/dist/core-bak/index.cjs +1 -0
- package/dist/core-bak/index.d.ts +54 -0
- package/dist/core-bak/index.js +1 -0
- package/dist/core-bak/initialization/InitializationErrorThrower.cjs +1 -0
- package/dist/core-bak/initialization/InitializationErrorThrower.d.ts +7 -0
- package/dist/core-bak/initialization/InitializationErrorThrower.js +1 -0
- package/dist/core-bak/initialization/index.cjs +1 -0
- package/dist/core-bak/initialization/index.d.ts +7 -0
- package/dist/core-bak/initialization/index.js +1 -0
- package/dist/core-bak/initialization/initialization.cjs +1 -0
- package/dist/core-bak/initialization/initialization.d.ts +69 -0
- package/dist/core-bak/initialization/initialization.js +1 -0
- package/dist/core-bak/initialization/initializationErrorState.cjs +1 -0
- package/dist/core-bak/initialization/initializationErrorState.d.ts +35 -0
- package/dist/core-bak/initialization/initializationErrorState.js +1 -0
- package/dist/core-bak/kernel/defaultAdapters.cjs +1 -0
- package/dist/core-bak/kernel/defaultAdapters.d.ts +2 -0
- package/dist/core-bak/kernel/defaultAdapters.js +1 -0
- package/dist/core-bak/kernel/errors.cjs +1 -0
- package/dist/core-bak/kernel/errors.d.ts +18 -0
- package/dist/core-bak/kernel/errors.js +1 -0
- package/dist/core-bak/kernel/index.cjs +1 -0
- package/dist/core-bak/kernel/index.d.ts +3 -0
- package/dist/core-bak/kernel/index.js +1 -0
- package/dist/core-bak/kernel/startKernel.cjs +1 -0
- package/dist/core-bak/kernel/startKernel.d.ts +2 -0
- package/dist/core-bak/kernel/startKernel.js +1 -0
- package/dist/core-bak/kernel/types.cjs +1 -0
- package/dist/core-bak/kernel/types.d.ts +114 -0
- package/dist/core-bak/kernel/types.js +1 -0
- package/dist/core-bak/middleware.cjs +1 -0
- package/dist/core-bak/middleware.d.ts +36 -0
- package/dist/core-bak/middleware.js +1 -0
- package/dist/core-bak/plugin/PluginEventBus.cjs +1 -0
- package/dist/core-bak/plugin/PluginEventBus.d.ts +169 -0
- package/dist/core-bak/plugin/PluginEventBus.js +1 -0
- package/dist/core-bak/plugin/PluginSandbox.cjs +1 -0
- package/dist/core-bak/plugin/PluginSandbox.d.ts +101 -0
- package/dist/core-bak/plugin/PluginSandbox.js +1 -0
- package/dist/core-bak/plugin.cjs +1 -0
- package/dist/core-bak/plugin.d.ts +224 -0
- package/dist/core-bak/plugin.js +1 -0
- package/dist/core-bak/router/RouterManager.cjs +1 -0
- package/dist/core-bak/router/RouterManager.d.ts +87 -0
- package/dist/core-bak/router/RouterManager.js +1 -0
- package/dist/core-bak/router/adapter/AdapterManager.cjs +1 -0
- package/dist/core-bak/router/adapter/AdapterManager.d.ts +94 -0
- package/dist/core-bak/router/adapter/AdapterManager.js +1 -0
- package/dist/core-bak/router/adapter/index.cjs +1 -0
- package/dist/core-bak/router/adapter/index.d.ts +6 -0
- package/dist/core-bak/router/adapter/index.js +1 -0
- package/dist/core-bak/router/adapter/react-router/ReactRouterAdapter.cjs +1 -0
- package/dist/core-bak/router/adapter/react-router/ReactRouterAdapter.d.ts +43 -0
- package/dist/core-bak/router/adapter/react-router/ReactRouterAdapter.js +1 -0
- package/dist/core-bak/router/adapter/react-router/index.cjs +1 -0
- package/dist/core-bak/router/adapter/react-router/index.d.ts +4 -0
- package/dist/core-bak/router/adapter/react-router/index.js +1 -0
- package/dist/core-bak/router/adapter/types.cjs +1 -0
- package/dist/core-bak/router/adapter/types.d.ts +111 -0
- package/dist/core-bak/router/adapter/types.js +1 -0
- package/dist/core-bak/router/dev/RouterDevTools.cjs +1 -0
- package/dist/core-bak/router/dev/RouterDevTools.d.ts +5 -0
- package/dist/core-bak/router/dev/RouterDevTools.js +1 -0
- package/dist/core-bak/router/dev/index.cjs +1 -0
- package/dist/core-bak/router/dev/index.d.ts +4 -0
- package/dist/core-bak/router/dev/index.js +1 -0
- package/dist/core-bak/router/dynamic/DynamicRouteManager.cjs +1 -0
- package/dist/core-bak/router/dynamic/DynamicRouteManager.d.ts +71 -0
- package/dist/core-bak/router/dynamic/DynamicRouteManager.js +1 -0
- package/dist/core-bak/router/dynamic/index.cjs +1 -0
- package/dist/core-bak/router/dynamic/index.d.ts +4 -0
- package/dist/core-bak/router/dynamic/index.js +1 -0
- package/dist/core-bak/router/errors/RouterError.cjs +1 -0
- package/dist/core-bak/router/errors/RouterError.d.ts +48 -0
- package/dist/core-bak/router/errors/RouterError.js +1 -0
- package/dist/core-bak/router/errors/index.cjs +1 -0
- package/dist/core-bak/router/errors/index.d.ts +4 -0
- package/dist/core-bak/router/errors/index.js +1 -0
- package/dist/core-bak/router/index.cjs +1 -0
- package/dist/core-bak/router/index.d.ts +16 -0
- package/dist/core-bak/router/index.js +1 -0
- package/dist/core-bak/router/lifecycle/RouterLifecycleManager.cjs +1 -0
- package/dist/core-bak/router/lifecycle/RouterLifecycleManager.d.ts +56 -0
- package/dist/core-bak/router/lifecycle/RouterLifecycleManager.js +1 -0
- package/dist/core-bak/router/lifecycle/index.cjs +1 -0
- package/dist/core-bak/router/lifecycle/index.d.ts +4 -0
- package/dist/core-bak/router/lifecycle/index.js +1 -0
- package/dist/core-bak/router/middleware/RouterMiddlewareManager.cjs +1 -0
- package/dist/core-bak/router/middleware/RouterMiddlewareManager.d.ts +61 -0
- package/dist/core-bak/router/middleware/RouterMiddlewareManager.js +1 -0
- package/dist/core-bak/router/middleware/auth.cjs +1 -0
- package/dist/core-bak/router/middleware/auth.d.ts +54 -0
- package/dist/core-bak/router/middleware/auth.js +1 -0
- package/dist/core-bak/router/middleware/index.cjs +1 -0
- package/dist/core-bak/router/middleware/index.d.ts +6 -0
- package/dist/core-bak/router/middleware/index.js +1 -0
- package/dist/core-bak/router/middleware/types.cjs +1 -0
- package/dist/core-bak/router/middleware/types.d.ts +82 -0
- package/dist/core-bak/router/middleware/types.js +1 -0
- package/dist/core-bak/router/monitoring/RouterMonitoring.cjs +1 -0
- package/dist/core-bak/router/monitoring/RouterMonitoring.d.ts +134 -0
- package/dist/core-bak/router/monitoring/RouterMonitoring.js +1 -0
- package/dist/core-bak/router/monitoring/index.cjs +1 -0
- package/dist/core-bak/router/monitoring/index.d.ts +4 -0
- package/dist/core-bak/router/monitoring/index.js +1 -0
- package/dist/core-bak/router/navigation/RouterNavigation.cjs +1 -0
- package/dist/core-bak/router/navigation/RouterNavigation.d.ts +43 -0
- package/dist/core-bak/router/navigation/RouterNavigation.js +1 -0
- package/dist/core-bak/router/navigation/index.cjs +1 -0
- package/dist/core-bak/router/navigation/index.d.ts +4 -0
- package/dist/core-bak/router/navigation/index.js +1 -0
- package/dist/core-bak/router/performance/RouteCache.cjs +1 -0
- package/dist/core-bak/router/performance/RouteCache.d.ts +113 -0
- package/dist/core-bak/router/performance/RouteCache.js +1 -0
- package/dist/core-bak/router/performance/RoutePreloader.cjs +1 -0
- package/dist/core-bak/router/performance/RoutePreloader.d.ts +111 -0
- package/dist/core-bak/router/performance/RoutePreloader.js +1 -0
- package/dist/core-bak/router/performance/index.cjs +1 -0
- package/dist/core-bak/router/performance/index.d.ts +5 -0
- package/dist/core-bak/router/performance/index.js +1 -0
- package/dist/core-bak/router/plugin/RouterPluginManager.cjs +1 -0
- package/dist/core-bak/router/plugin/RouterPluginManager.d.ts +74 -0
- package/dist/core-bak/router/plugin/RouterPluginManager.js +1 -0
- package/dist/core-bak/router/plugin/index.cjs +1 -0
- package/dist/core-bak/router/plugin/index.d.ts +5 -0
- package/dist/core-bak/router/plugin/index.js +1 -0
- package/dist/core-bak/router/plugin/types.cjs +1 -0
- package/dist/core-bak/router/plugin/types.d.ts +153 -0
- package/dist/core-bak/router/plugin/types.js +1 -0
- package/dist/core-bak/router/types.cjs +1 -0
- package/dist/core-bak/router/types.d.ts +464 -0
- package/dist/core-bak/router/types.js +1 -0
- package/dist/core-bak/router/utils/adapters/react-router/RouteErrorBoundary.cjs +1 -0
- package/dist/core-bak/router/utils/adapters/react-router/RouteErrorBoundary.d.ts +2 -0
- package/dist/core-bak/router/utils/adapters/react-router/RouteErrorBoundary.js +1 -0
- package/dist/core-bak/router/utils/adapters/react-router/transform.cjs +1 -0
- package/dist/core-bak/router/utils/adapters/react-router/transform.d.ts +5 -0
- package/dist/core-bak/router/utils/adapters/react-router/transform.js +1 -0
- package/dist/core-bak/router/utils/transform.cjs +1 -0
- package/dist/core-bak/router/utils/transform.d.ts +348 -0
- package/dist/core-bak/router/utils/transform.js +1 -0
- package/dist/core-bak/router/validation/RouterConfigValidator.cjs +2 -0
- package/dist/core-bak/router/validation/RouterConfigValidator.d.ts +121 -0
- package/dist/core-bak/router/validation/RouterConfigValidator.js +2 -0
- package/dist/core-bak/router/validation/index.cjs +1 -0
- package/dist/core-bak/router/validation/index.d.ts +5 -0
- package/dist/core-bak/router/validation/index.js +1 -0
- package/dist/core-bak/router/validation/schema.cjs +1 -0
- package/dist/core-bak/router/validation/schema.d.ts +180 -0
- package/dist/core-bak/router/validation/schema.js +1 -0
- package/dist/core-bak/router/version/RouteVersionManager.cjs +1 -0
- package/dist/core-bak/router/version/RouteVersionManager.d.ts +124 -0
- package/dist/core-bak/router/version/RouteVersionManager.js +1 -0
- package/dist/core-bak/router/version/index.cjs +1 -0
- package/dist/core-bak/router/version/index.d.ts +4 -0
- package/dist/core-bak/router/version/index.js +1 -0
- package/dist/core-bak/splash/SplashScreen.cjs +1 -0
- package/dist/core-bak/splash/SplashScreen.d.ts +14 -0
- package/dist/core-bak/splash/SplashScreen.js +1 -0
- package/dist/core-bak/splash/index.cjs +1 -0
- package/dist/core-bak/splash/index.d.ts +5 -0
- package/dist/core-bak/splash/index.js +1 -0
- package/dist/core-bak/splash/splashScreenUtils.cjs +1 -0
- package/dist/core-bak/splash/splashScreenUtils.d.ts +7 -0
- package/dist/core-bak/splash/splashScreenUtils.js +1 -0
- package/dist/core-bak/startup/AppInstance.cjs +1 -0
- package/dist/core-bak/startup/AppInstance.d.ts +138 -0
- package/dist/core-bak/startup/AppInstance.js +1 -0
- package/dist/core-bak/startup/environment.cjs +1 -0
- package/dist/core-bak/startup/environment.d.ts +87 -0
- package/dist/core-bak/startup/environment.js +1 -0
- package/dist/core-bak/startup/index.cjs +1 -0
- package/dist/core-bak/startup/index.d.ts +7 -0
- package/dist/core-bak/startup/index.js +1 -0
- package/dist/core-bak/startup/initializeServices.cjs +1 -0
- package/dist/core-bak/startup/initializeServices.d.ts +68 -0
- package/dist/core-bak/startup/initializeServices.js +1 -0
- package/dist/core-bak/startup/performanceTracker.cjs +1 -0
- package/dist/core-bak/startup/performanceTracker.d.ts +104 -0
- package/dist/core-bak/startup/performanceTracker.js +1 -0
- package/dist/core-bak/startup/renderApp.cjs +1 -0
- package/dist/core-bak/startup/renderApp.d.ts +70 -0
- package/dist/core-bak/startup/renderApp.js +1 -0
- package/dist/core-bak/startup/startApp.cjs +1 -0
- package/dist/core-bak/startup/startApp.d.ts +14 -0
- package/dist/core-bak/startup/startApp.js +1 -0
- package/dist/core-bak/types.cjs +1 -0
- package/dist/core-bak/types.d.ts +501 -0
- package/dist/core-bak/types.js +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +1 -1
- package/dist/index.umd.js +31 -246
- package/dist/kernel/types.d.ts +46 -3
- package/dist/state.umd.js +1 -1
- package/package.json +1 -11
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get AdapterManager(){return AdapterManager},get getAdapterManager(){return getAdapterManager}});const _logger=require("@vlian/logger");const _errors=require("../errors");function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}let AdapterManager=class AdapterManager{register(registration){if(!registration.name){throw new Error("适配器必须提供名称")}if(!registration.factory||typeof registration.factory!=="function"){throw new Error("适配器必须提供工厂函数")}const adapterRegistration={priority:100,enabled:true,...registration};this.adapters.set(registration.name,adapterRegistration);_logger.logger.debug(`路由适配器已注册: ${registration.name}`);if(!this.defaultAdapterName){this.defaultAdapterName=registration.name}return()=>{this.unregister(registration.name)}}registerBatch(registrations){registrations.forEach(registration=>this.register(registration))}unregister(name){if(this.adapters.has(name)){this.adapters.delete(name);_logger.logger.debug(`路由适配器已取消注册: ${name}`);if(this.defaultAdapterName===name){const firstAdapter=Array.from(this.adapters.keys())[0];this.defaultAdapterName=firstAdapter||null}}}async createAdapter(config,name){const adapterName=name||this.defaultAdapterName;if(!adapterName){throw new _errors.RouterError("没有可用的路由适配器",_errors.RouterErrorCode.ROUTER_NOT_INITIALIZED)}const registration=this.adapters.get(adapterName);if(!registration){throw new _errors.RouterError(`路由适配器不存在: ${adapterName}`,_errors.RouterErrorCode.ROUTER_CONFIG_ERROR,undefined,undefined,{adapterName})}if(!registration.enabled){throw new _errors.RouterError(`路由适配器已禁用: ${adapterName}`,_errors.RouterErrorCode.ROUTER_CONFIG_ERROR,undefined,undefined,{adapterName})}try{const adapter=await registration.factory(config);if(!adapter||typeof adapter.initialize!=="function"){throw new Error("适配器实例无效")}await adapter.initialize(config);_logger.logger.info(`路由适配器已创建并初始化: ${adapterName}`);return adapter}catch(error){_logger.logger.error(`创建路由适配器失败: ${adapterName}`,error);const errorContext={adapterName};if(error instanceof Error){errorContext.originalError=error}throw new _errors.RouterError(`创建路由适配器失败: ${adapterName}`,_errors.RouterErrorCode.ROUTER_CONFIG_ERROR,undefined,error instanceof Error?error:undefined,errorContext)}}setCurrentAdapter(adapter){if(this.currentAdapter&&this.currentAdapter.destroy){try{this.currentAdapter.destroy()}catch(error){_logger.logger.warn("销毁旧适配器失败",error)}}this.currentAdapter=adapter;_logger.logger.debug(`当前路由适配器已设置: ${adapter.name}`)}getCurrentAdapter(){return this.currentAdapter}setDefaultAdapter(name){if(!this.adapters.has(name)){throw new Error(`适配器不存在: ${name}`)}this.defaultAdapterName=name;_logger.logger.debug(`默认路由适配器已设置: ${name}`)}getDefaultAdapterName(){return this.defaultAdapterName}getAllAdapters(){return Array.from(this.adapters.values())}getEnabledAdapters(){return Array.from(this.adapters.values()).filter(a=>a.enabled!==false)}getAdapter(name){return this.adapters.get(name)}clear(){if(this.currentAdapter&&this.currentAdapter.destroy){try{this.currentAdapter.destroy()}catch(error){_logger.logger.warn("销毁适配器失败",error)}}this.adapters.clear();this.currentAdapter=null;this.defaultAdapterName=null;_logger.logger.debug("所有路由适配器已清空")}getCount(){return this.adapters.size}constructor(){_define_property(this,"adapters",new Map);_define_property(this,"currentAdapter",null);_define_property(this,"defaultAdapterName",null)}};let adapterManagerInstance=null;function getAdapterManager(){if(!adapterManagerInstance){adapterManagerInstance=new AdapterManager}return adapterManagerInstance}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 路由适配器管理器
|
|
3
|
+
* 负责管理路由适配器的注册、创建和切换
|
|
4
|
+
*/
|
|
5
|
+
import type { IRouterAdapter, AdapterRegistration, RouterAdapterConfig } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* 路由适配器管理器
|
|
8
|
+
*/
|
|
9
|
+
export declare class AdapterManager {
|
|
10
|
+
private adapters;
|
|
11
|
+
private currentAdapter;
|
|
12
|
+
private defaultAdapterName;
|
|
13
|
+
/**
|
|
14
|
+
* 注册适配器
|
|
15
|
+
*
|
|
16
|
+
* @param registration - 适配器注册信息
|
|
17
|
+
* @returns 取消注册函数
|
|
18
|
+
*/
|
|
19
|
+
register(registration: AdapterRegistration): () => void;
|
|
20
|
+
/**
|
|
21
|
+
* 批量注册适配器
|
|
22
|
+
*
|
|
23
|
+
* @param registrations - 适配器注册信息数组
|
|
24
|
+
*/
|
|
25
|
+
registerBatch(registrations: AdapterRegistration[]): void;
|
|
26
|
+
/**
|
|
27
|
+
* 取消注册适配器
|
|
28
|
+
*
|
|
29
|
+
* @param name - 适配器名称
|
|
30
|
+
*/
|
|
31
|
+
unregister(name: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* 创建适配器实例
|
|
34
|
+
*
|
|
35
|
+
* @param name - 适配器名称(可选,使用默认适配器)
|
|
36
|
+
* @param config - 适配器配置
|
|
37
|
+
* @returns 适配器实例
|
|
38
|
+
*/
|
|
39
|
+
createAdapter(config: RouterAdapterConfig, name?: string): Promise<IRouterAdapter>;
|
|
40
|
+
/**
|
|
41
|
+
* 设置当前适配器
|
|
42
|
+
*
|
|
43
|
+
* @param adapter - 适配器实例
|
|
44
|
+
*/
|
|
45
|
+
setCurrentAdapter(adapter: IRouterAdapter): void;
|
|
46
|
+
/**
|
|
47
|
+
* 获取当前适配器
|
|
48
|
+
*
|
|
49
|
+
* @returns 当前适配器实例,如果不存在返回 null
|
|
50
|
+
*/
|
|
51
|
+
getCurrentAdapter(): IRouterAdapter | null;
|
|
52
|
+
/**
|
|
53
|
+
* 设置默认适配器
|
|
54
|
+
*
|
|
55
|
+
* @param name - 适配器名称
|
|
56
|
+
*/
|
|
57
|
+
setDefaultAdapter(name: string): void;
|
|
58
|
+
/**
|
|
59
|
+
* 获取默认适配器名称
|
|
60
|
+
*
|
|
61
|
+
* @returns 默认适配器名称
|
|
62
|
+
*/
|
|
63
|
+
getDefaultAdapterName(): string | null;
|
|
64
|
+
/**
|
|
65
|
+
* 获取所有适配器
|
|
66
|
+
*
|
|
67
|
+
* @returns 适配器注册信息数组
|
|
68
|
+
*/
|
|
69
|
+
getAllAdapters(): AdapterRegistration[];
|
|
70
|
+
/**
|
|
71
|
+
* 获取启用的适配器
|
|
72
|
+
*
|
|
73
|
+
* @returns 启用的适配器注册信息数组
|
|
74
|
+
*/
|
|
75
|
+
getEnabledAdapters(): AdapterRegistration[];
|
|
76
|
+
/**
|
|
77
|
+
* 获取适配器
|
|
78
|
+
*
|
|
79
|
+
* @param name - 适配器名称
|
|
80
|
+
* @returns 适配器注册信息,如果不存在返回 undefined
|
|
81
|
+
*/
|
|
82
|
+
getAdapter(name: string): AdapterRegistration | undefined;
|
|
83
|
+
/**
|
|
84
|
+
* 清空所有适配器
|
|
85
|
+
*/
|
|
86
|
+
clear(): void;
|
|
87
|
+
/**
|
|
88
|
+
* 获取适配器数量
|
|
89
|
+
*
|
|
90
|
+
* @returns 适配器数量
|
|
91
|
+
*/
|
|
92
|
+
getCount(): number;
|
|
93
|
+
}
|
|
94
|
+
export declare function getAdapterManager(): AdapterManager;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}import{logger}from"@vlian/logger";import{RouterError,RouterErrorCode}from"../errors";export class AdapterManager{register(registration){if(!registration.name){throw new Error("适配器必须提供名称")}if(!registration.factory||typeof registration.factory!=="function"){throw new Error("适配器必须提供工厂函数")}const adapterRegistration={priority:100,enabled:true,...registration};this.adapters.set(registration.name,adapterRegistration);logger.debug(`路由适配器已注册: ${registration.name}`);if(!this.defaultAdapterName){this.defaultAdapterName=registration.name}return()=>{this.unregister(registration.name)}}registerBatch(registrations){registrations.forEach(registration=>this.register(registration))}unregister(name){if(this.adapters.has(name)){this.adapters.delete(name);logger.debug(`路由适配器已取消注册: ${name}`);if(this.defaultAdapterName===name){const firstAdapter=Array.from(this.adapters.keys())[0];this.defaultAdapterName=firstAdapter||null}}}async createAdapter(config,name){const adapterName=name||this.defaultAdapterName;if(!adapterName){throw new RouterError("没有可用的路由适配器",RouterErrorCode.ROUTER_NOT_INITIALIZED)}const registration=this.adapters.get(adapterName);if(!registration){throw new RouterError(`路由适配器不存在: ${adapterName}`,RouterErrorCode.ROUTER_CONFIG_ERROR,undefined,undefined,{adapterName})}if(!registration.enabled){throw new RouterError(`路由适配器已禁用: ${adapterName}`,RouterErrorCode.ROUTER_CONFIG_ERROR,undefined,undefined,{adapterName})}try{const adapter=await registration.factory(config);if(!adapter||typeof adapter.initialize!=="function"){throw new Error("适配器实例无效")}await adapter.initialize(config);logger.info(`路由适配器已创建并初始化: ${adapterName}`);return adapter}catch(error){logger.error(`创建路由适配器失败: ${adapterName}`,error);const errorContext={adapterName};if(error instanceof Error){errorContext.originalError=error}throw new RouterError(`创建路由适配器失败: ${adapterName}`,RouterErrorCode.ROUTER_CONFIG_ERROR,undefined,error instanceof Error?error:undefined,errorContext)}}setCurrentAdapter(adapter){if(this.currentAdapter&&this.currentAdapter.destroy){try{this.currentAdapter.destroy()}catch(error){logger.warn("销毁旧适配器失败",error)}}this.currentAdapter=adapter;logger.debug(`当前路由适配器已设置: ${adapter.name}`)}getCurrentAdapter(){return this.currentAdapter}setDefaultAdapter(name){if(!this.adapters.has(name)){throw new Error(`适配器不存在: ${name}`)}this.defaultAdapterName=name;logger.debug(`默认路由适配器已设置: ${name}`)}getDefaultAdapterName(){return this.defaultAdapterName}getAllAdapters(){return Array.from(this.adapters.values())}getEnabledAdapters(){return Array.from(this.adapters.values()).filter(a=>a.enabled!==false)}getAdapter(name){return this.adapters.get(name)}clear(){if(this.currentAdapter&&this.currentAdapter.destroy){try{this.currentAdapter.destroy()}catch(error){logger.warn("销毁适配器失败",error)}}this.adapters.clear();this.currentAdapter=null;this.defaultAdapterName=null;logger.debug("所有路由适配器已清空")}getCount(){return this.adapters.size}constructor(){_define_property(this,"adapters",new Map);_define_property(this,"currentAdapter",null);_define_property(this,"defaultAdapterName",null)}}let adapterManagerInstance=null;export function getAdapterManager(){if(!adapterManagerInstance){adapterManagerInstance=new AdapterManager}return adapterManagerInstance}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});_export_star(require("./types"),exports);_export_star(require("./AdapterManager"),exports);_export_star(require("./react-router"),exports);function _export_star(from,to){Object.keys(from).forEach(function(k){if(k!=="default"&&!Object.prototype.hasOwnProperty.call(to,k)){Object.defineProperty(to,k,{enumerable:true,get:function(){return from[k]}})}});return from}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./types";export*from"./AdapterManager";export*from"./react-router";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get ReactRouterAdapter(){return ReactRouterAdapter},get createReactRouterAdapter(){return createReactRouterAdapter}});const _reactrouterdom=require("react-router-dom");const _transform=require("../../utils/adapters/react-router/transform");const _transform1=require("../../utils/transform");const _logger=require("@vlian/logger");function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}let ReactRouterAdapter=class ReactRouterAdapter{async initialize(config){const transformResult=await (0,_transform1.transformRoutes)(config.routes);const reactRoutes=await (0,_transform.transformRoutesToReactRoutes)(transformResult.routes,transformResult,config.defaultRouteErrorComponent,config.defaultRouteLoadingComponent,Boolean(config.options?.hydrationData));const mode=config.mode||"browser";if(mode==="browser"){this.router=(0,_reactrouterdom.createBrowserRouter)(reactRoutes,config.options)}else if(mode==="hash"){this.router=(0,_reactrouterdom.createHashRouter)(reactRoutes,config.options)}else if(mode==="memory"){this.router=(0,_reactrouterdom.createMemoryRouter)(reactRoutes,config.options)}else{throw new Error(`不支持的路由模式: ${mode}`)}_logger.logger.debug("React Router 适配器初始化完成")}mount(_app){if(!this.router){throw new Error("适配器未初始化")}_logger.logger.debug("React Router 适配器已挂载")}navigate(to,options){if(!this.router){throw new Error("适配器未初始化")}if(options?.replace){this.router.navigate(to,{replace:true,state:options.state})}else{this.router.navigate(to,{state:options?.state})}}getCurrentRoute(){if(!this.router){throw new Error("适配器未初始化")}const state=this.router.state;const location=state.location;const query={};if(location.search){const params=new URLSearchParams(location.search);params.forEach((value,key)=>{query[key]=value})}return{path:location.pathname+location.hash,query,params:location.state}}getRouter(){return this.router}destroy(){this.router=null;_logger.logger.debug("React Router 适配器已销毁")}constructor(){_define_property(this,"name","react-router");_define_property(this,"version","6.0.0");_define_property(this,"router",null)}};function createReactRouterAdapter(){return _config=>{return new ReactRouterAdapter}}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React Router 适配器实现
|
|
3
|
+
*/
|
|
4
|
+
import type { IRouterAdapter, RouterAdapterConfig } from '../types';
|
|
5
|
+
import type { RouteLocation, NavigateOptions } from '../../types';
|
|
6
|
+
import type { AppInstance } from '../../../startup/AppInstance';
|
|
7
|
+
import { createBrowserRouter } from 'react-router-dom';
|
|
8
|
+
/**
|
|
9
|
+
* React Router 适配器
|
|
10
|
+
*/
|
|
11
|
+
export declare class ReactRouterAdapter implements IRouterAdapter {
|
|
12
|
+
readonly name = "react-router";
|
|
13
|
+
readonly version = "6.0.0";
|
|
14
|
+
private router;
|
|
15
|
+
/**
|
|
16
|
+
* 初始化适配器
|
|
17
|
+
*/
|
|
18
|
+
initialize(config: RouterAdapterConfig): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* 挂载到应用实例
|
|
21
|
+
*/
|
|
22
|
+
mount(_app: AppInstance): void;
|
|
23
|
+
/**
|
|
24
|
+
* 导航到指定路径
|
|
25
|
+
*/
|
|
26
|
+
navigate(to: string, options?: NavigateOptions): void;
|
|
27
|
+
/**
|
|
28
|
+
* 获取当前路由信息
|
|
29
|
+
*/
|
|
30
|
+
getCurrentRoute(): RouteLocation;
|
|
31
|
+
/**
|
|
32
|
+
* 获取路由实例(用于 RouterProvider)
|
|
33
|
+
*/
|
|
34
|
+
getRouter(): ReturnType<typeof createBrowserRouter> | null;
|
|
35
|
+
/**
|
|
36
|
+
* 销毁适配器
|
|
37
|
+
*/
|
|
38
|
+
destroy(): void;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 创建 React Router 适配器工厂函数
|
|
42
|
+
*/
|
|
43
|
+
export declare function createReactRouterAdapter(): (_config: RouterAdapterConfig) => IRouterAdapter;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}import{createBrowserRouter,createHashRouter,createMemoryRouter}from"react-router-dom";import{transformRoutesToReactRoutes}from"../../utils/adapters/react-router/transform";import{transformRoutes}from"../../utils/transform";import{logger}from"@vlian/logger";export class ReactRouterAdapter{async initialize(config){const transformResult=await transformRoutes(config.routes);const reactRoutes=await transformRoutesToReactRoutes(transformResult.routes,transformResult,config.defaultRouteErrorComponent,config.defaultRouteLoadingComponent,Boolean(config.options?.hydrationData));const mode=config.mode||"browser";if(mode==="browser"){this.router=createBrowserRouter(reactRoutes,config.options)}else if(mode==="hash"){this.router=createHashRouter(reactRoutes,config.options)}else if(mode==="memory"){this.router=createMemoryRouter(reactRoutes,config.options)}else{throw new Error(`不支持的路由模式: ${mode}`)}logger.debug("React Router 适配器初始化完成")}mount(_app){if(!this.router){throw new Error("适配器未初始化")}logger.debug("React Router 适配器已挂载")}navigate(to,options){if(!this.router){throw new Error("适配器未初始化")}if(options?.replace){this.router.navigate(to,{replace:true,state:options.state})}else{this.router.navigate(to,{state:options?.state})}}getCurrentRoute(){if(!this.router){throw new Error("适配器未初始化")}const state=this.router.state;const location=state.location;const query={};if(location.search){const params=new URLSearchParams(location.search);params.forEach((value,key)=>{query[key]=value})}return{path:location.pathname+location.hash,query,params:location.state}}getRouter(){return this.router}destroy(){this.router=null;logger.debug("React Router 适配器已销毁")}constructor(){_define_property(this,"name","react-router");_define_property(this,"version","6.0.0");_define_property(this,"router",null)}}export function createReactRouterAdapter(){return _config=>{return new ReactRouterAdapter}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});_export_star(require("./ReactRouterAdapter"),exports);function _export_star(from,to){Object.keys(from).forEach(function(k){if(k!=="default"&&!Object.prototype.hasOwnProperty.call(to,k)){Object.defineProperty(to,k,{enumerable:true,get:function(){return from[k]}})}});return from}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./ReactRouterAdapter";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 路由适配器类型定义
|
|
3
|
+
*/
|
|
4
|
+
import type { RouteConfig, RouteLocation, NavigateOptions } from '../types';
|
|
5
|
+
import type { AppInstance } from '../../startup/AppInstance';
|
|
6
|
+
/**
|
|
7
|
+
* 路由适配器接口
|
|
8
|
+
* 所有路由库适配器都必须实现此接口
|
|
9
|
+
*/
|
|
10
|
+
export interface IRouterAdapter {
|
|
11
|
+
/**
|
|
12
|
+
* 适配器名称
|
|
13
|
+
*/
|
|
14
|
+
readonly name: string;
|
|
15
|
+
/**
|
|
16
|
+
* 适配器版本
|
|
17
|
+
*/
|
|
18
|
+
readonly version?: string;
|
|
19
|
+
/**
|
|
20
|
+
* 初始化适配器
|
|
21
|
+
*
|
|
22
|
+
* @param config - 路由配置
|
|
23
|
+
* @returns Promise<void>
|
|
24
|
+
*/
|
|
25
|
+
initialize(config: RouterAdapterConfig): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* 挂载到应用实例
|
|
28
|
+
*
|
|
29
|
+
* @param app - 应用实例
|
|
30
|
+
*/
|
|
31
|
+
mount(app: AppInstance): void;
|
|
32
|
+
/**
|
|
33
|
+
* 导航到指定路径
|
|
34
|
+
*
|
|
35
|
+
* @param to - 目标路径或路由名称
|
|
36
|
+
* @param options - 导航选项
|
|
37
|
+
*/
|
|
38
|
+
navigate(to: string, options?: NavigateOptions): void | Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* 获取当前路由信息
|
|
41
|
+
*
|
|
42
|
+
* @returns 当前路由位置信息
|
|
43
|
+
*/
|
|
44
|
+
getCurrentRoute(): RouteLocation;
|
|
45
|
+
/**
|
|
46
|
+
* 销毁适配器
|
|
47
|
+
*/
|
|
48
|
+
destroy?(): void;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 路由适配器配置
|
|
52
|
+
*/
|
|
53
|
+
export interface RouterAdapterConfig {
|
|
54
|
+
/**
|
|
55
|
+
* 路由配置列表
|
|
56
|
+
*/
|
|
57
|
+
routes: RouteConfig[];
|
|
58
|
+
/**
|
|
59
|
+
* 路由模式
|
|
60
|
+
*/
|
|
61
|
+
mode?: 'browser' | 'hash' | 'memory';
|
|
62
|
+
/**
|
|
63
|
+
* 适配器特定选项
|
|
64
|
+
*/
|
|
65
|
+
options?: Record<string, unknown>;
|
|
66
|
+
/**
|
|
67
|
+
* 默认路由错误组件
|
|
68
|
+
*
|
|
69
|
+
* 当路由配置中的 `errors` 为空时,将使用此组件作为错误边界。
|
|
70
|
+
* 如果不提供,将使用框架内置的 `RouteErrorBoundary` 组件。
|
|
71
|
+
*
|
|
72
|
+
* 组件必须使用默认导出(export default)。
|
|
73
|
+
*/
|
|
74
|
+
defaultRouteErrorComponent?: import('../types').ComponentImport;
|
|
75
|
+
/**
|
|
76
|
+
* 默认路由加载组件
|
|
77
|
+
*
|
|
78
|
+
* 当路由配置中的 `loading` 为空时,将使用此组件作为加载指示器。
|
|
79
|
+
* 如果不提供,将使用框架内置 Loading 组件。
|
|
80
|
+
*
|
|
81
|
+
* 组件必须使用默认导出(export default)。
|
|
82
|
+
*/
|
|
83
|
+
defaultRouteLoadingComponent?: import('../types').ComponentImport;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 路由适配器工厂函数
|
|
87
|
+
*/
|
|
88
|
+
export type RouterAdapterFactory = (config: RouterAdapterConfig) => IRouterAdapter | Promise<IRouterAdapter>;
|
|
89
|
+
/**
|
|
90
|
+
* 适配器注册信息
|
|
91
|
+
*/
|
|
92
|
+
export interface AdapterRegistration {
|
|
93
|
+
/**
|
|
94
|
+
* 适配器名称
|
|
95
|
+
*/
|
|
96
|
+
name: string;
|
|
97
|
+
/**
|
|
98
|
+
* 适配器工厂函数
|
|
99
|
+
*/
|
|
100
|
+
factory: RouterAdapterFactory;
|
|
101
|
+
/**
|
|
102
|
+
* 适配器优先级(数字越小优先级越高)
|
|
103
|
+
* @default 100
|
|
104
|
+
*/
|
|
105
|
+
priority?: number;
|
|
106
|
+
/**
|
|
107
|
+
* 是否启用
|
|
108
|
+
* @default true
|
|
109
|
+
*/
|
|
110
|
+
enabled?: boolean;
|
|
111
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"RouterDevTools",{enumerable:true,get:function(){return RouterDevTools}});const _jsxruntime=require("react/jsx-runtime");const _react=/*#__PURE__*/_interop_require_wildcard(require("react"));const _RouterManager=require("../RouterManager");const _lifecycle=require("../lifecycle");const _middleware=require("../middleware");const _navigation=require("../navigation");function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap;var cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interop_require_wildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj}}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj)}var newObj={__proto__:null};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc)}else{newObj[key]=obj[key]}}}newObj.default=obj;if(cache){cache.set(obj,newObj)}return newObj}function pretty(value){try{return JSON.stringify(value,null,2)}catch{return String(value)}}function RouterDevTools(){if(process.env.NODE_ENV!=="development"){return null}const[visible,setVisible]=(0,_react.useState)(false);const[currentRoute,setCurrentRoute]=(0,_react.useState)(null);const[routeState,setRouteState]=(0,_react.useState)({});const[lifecycleHooks,setLifecycleHooks]=(0,_react.useState)([]);const[middlewares,setMiddlewares]=(0,_react.useState)([]);const updateRouteInfo=()=>{try{const route=_navigation.RouterNavigation.getCurrentRoute();setCurrentRoute(route);const router=(0,_RouterManager.getRouterManager)().getRouter();if(router){const state=router.state;setRouteState({pathname:state.location.pathname,search:state.location.search||"",hash:state.location.hash||"",state:state.location.state||{}})}else{setRouteState({})}const hooks=(0,_lifecycle.getRouterLifecycleManager)().getAll();setLifecycleHooks(hooks.map((hook,index)=>({key:index,hasBeforeEach:!!hook.beforeEach,hasAfterEach:!!hook.afterEach})));const middlewareList=(0,_middleware.getRouterMiddlewareManager)().getAll();setMiddlewares(middlewareList.map((m,index)=>({key:index,name:m.name||`middleware-${index}`,priority:m.priority||100,enabled:m.enabled!==false})))}catch(error){console.error("更新路由信息失败",error)}};(0,_react.useEffect)(()=>{if(!visible){return}updateRouteInfo();const timer=setInterval(updateRouteInfo,1e3);return()=>clearInterval(timer)},[visible]);return(0,_jsxruntime.jsxs)(_jsxruntime.Fragment,{children:[(0,_jsxruntime.jsx)("button",{type:"button",onClick:()=>setVisible(true),style:{position:"fixed",right:20,bottom:20,zIndex:9999,border:"none",background:"#2f80ed",color:"#fff",borderRadius:999,padding:"8px 12px",cursor:"pointer"},children:"路由调试"}),visible&&(0,_jsxruntime.jsxs)("div",{style:{position:"fixed",top:0,right:0,width:"min(800px, 96vw)",height:"100vh",zIndex:1e4,background:"#fff",borderLeft:"1px solid #d9e2ec",boxShadow:"-8px 0 20px rgba(0, 0, 0, 0.08)",padding:16,overflowY:"auto"},children:[(0,_jsxruntime.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,_jsxruntime.jsx)("h3",{style:{margin:0},children:"路由调试工具"}),(0,_jsxruntime.jsxs)("div",{style:{display:"flex",gap:8},children:[(0,_jsxruntime.jsx)("button",{onClick:updateRouteInfo,children:"刷新"}),(0,_jsxruntime.jsx)("button",{onClick:()=>setVisible(false),children:"关闭"})]})]}),(0,_jsxruntime.jsxs)("section",{style:{marginTop:12},children:[(0,_jsxruntime.jsx)("h4",{children:"当前路由"}),(0,_jsxruntime.jsx)("pre",{style:{background:"#f7fafc",borderRadius:8,padding:12},children:pretty(currentRoute||{})})]}),(0,_jsxruntime.jsxs)("section",{style:{marginTop:12},children:[(0,_jsxruntime.jsx)("h4",{children:"路由状态"}),(0,_jsxruntime.jsx)("pre",{style:{background:"#f7fafc",borderRadius:8,padding:12},children:pretty(routeState)})]}),(0,_jsxruntime.jsxs)("section",{style:{marginTop:12},children:[(0,_jsxruntime.jsx)("h4",{children:"生命周期钩子"}),(0,_jsxruntime.jsx)("pre",{style:{background:"#f7fafc",borderRadius:8,padding:12},children:pretty(lifecycleHooks)})]}),(0,_jsxruntime.jsxs)("section",{style:{marginTop:12},children:[(0,_jsxruntime.jsx)("h4",{children:"中间件"}),(0,_jsxruntime.jsx)("pre",{style:{background:"#f7fafc",borderRadius:8,padding:12},children:pretty(middlewares)})]})]})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";import React,{useState,useEffect}from"react";import{getRouterManager}from"../RouterManager";import{getRouterLifecycleManager}from"../lifecycle";import{getRouterMiddlewareManager}from"../middleware";import{RouterNavigation}from"../navigation";function pretty(value){try{return JSON.stringify(value,null,2)}catch{return String(value)}}export function RouterDevTools(){if(process.env.NODE_ENV!=="development"){return null}const[visible,setVisible]=useState(false);const[currentRoute,setCurrentRoute]=useState(null);const[routeState,setRouteState]=useState({});const[lifecycleHooks,setLifecycleHooks]=useState([]);const[middlewares,setMiddlewares]=useState([]);const updateRouteInfo=()=>{try{const route=RouterNavigation.getCurrentRoute();setCurrentRoute(route);const router=getRouterManager().getRouter();if(router){const state=router.state;setRouteState({pathname:state.location.pathname,search:state.location.search||"",hash:state.location.hash||"",state:state.location.state||{}})}else{setRouteState({})}const hooks=getRouterLifecycleManager().getAll();setLifecycleHooks(hooks.map((hook,index)=>({key:index,hasBeforeEach:!!hook.beforeEach,hasAfterEach:!!hook.afterEach})));const middlewareList=getRouterMiddlewareManager().getAll();setMiddlewares(middlewareList.map((m,index)=>({key:index,name:m.name||`middleware-${index}`,priority:m.priority||100,enabled:m.enabled!==false})))}catch(error){console.error("更新路由信息失败",error)}};useEffect(()=>{if(!visible){return}updateRouteInfo();const timer=setInterval(updateRouteInfo,1e3);return()=>clearInterval(timer)},[visible]);return _jsxs(_Fragment,{children:[_jsx("button",{type:"button",onClick:()=>setVisible(true),style:{position:"fixed",right:20,bottom:20,zIndex:9999,border:"none",background:"#2f80ed",color:"#fff",borderRadius:999,padding:"8px 12px",cursor:"pointer"},children:"路由调试"}),visible&&_jsxs("div",{style:{position:"fixed",top:0,right:0,width:"min(800px, 96vw)",height:"100vh",zIndex:1e4,background:"#fff",borderLeft:"1px solid #d9e2ec",boxShadow:"-8px 0 20px rgba(0, 0, 0, 0.08)",padding:16,overflowY:"auto"},children:[_jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[_jsx("h3",{style:{margin:0},children:"路由调试工具"}),_jsxs("div",{style:{display:"flex",gap:8},children:[_jsx("button",{onClick:updateRouteInfo,children:"刷新"}),_jsx("button",{onClick:()=>setVisible(false),children:"关闭"})]})]}),_jsxs("section",{style:{marginTop:12},children:[_jsx("h4",{children:"当前路由"}),_jsx("pre",{style:{background:"#f7fafc",borderRadius:8,padding:12},children:pretty(currentRoute||{})})]}),_jsxs("section",{style:{marginTop:12},children:[_jsx("h4",{children:"路由状态"}),_jsx("pre",{style:{background:"#f7fafc",borderRadius:8,padding:12},children:pretty(routeState)})]}),_jsxs("section",{style:{marginTop:12},children:[_jsx("h4",{children:"生命周期钩子"}),_jsx("pre",{style:{background:"#f7fafc",borderRadius:8,padding:12},children:pretty(lifecycleHooks)})]}),_jsxs("section",{style:{marginTop:12},children:[_jsx("h4",{children:"中间件"}),_jsx("pre",{style:{background:"#f7fafc",borderRadius:8,padding:12},children:pretty(middlewares)})]})]})]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});_export_star(require("./RouterDevTools"),exports);function _export_star(from,to){Object.keys(from).forEach(function(k){if(k!=="default"&&!Object.prototype.hasOwnProperty.call(to,k)){Object.defineProperty(to,k,{enumerable:true,get:function(){return from[k]}})}});return from}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./RouterDevTools";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get DynamicRouteManager(){return DynamicRouteManager},get getDynamicRouteManager(){return getDynamicRouteManager}});const _logger=require("@vlian/logger");const _RouterManager=require("../RouterManager");const _transform=require("../utils/transform");const _errors=require("../errors");function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}let DynamicRouteManager=class DynamicRouteManager{async register(routes,namespace){const ns=namespace||"default";if(!Array.isArray(routes)||routes.length===0){throw new _errors.RouterError("路由配置必须是非空数组",_errors.RouterErrorCode.ROUTER_CONFIG_ERROR)}const existingRoutes=this.registeredRoutes.get(ns)||[];const existingNames=new Set(existingRoutes.map(r=>r.name));const newNames=routes.map(r=>r.name);const conflicts=newNames.filter(name=>existingNames.has(name));if(conflicts.length>0){throw new _errors.RouterError(`路由名称冲突: ${conflicts.join(", ")}`,_errors.RouterErrorCode.ROUTER_CONFIG_ERROR,undefined,undefined,{conflicts,namespace:ns})}const currentRoutes=this.registeredRoutes.get(ns)||[];this.registeredRoutes.set(ns,[...currentRoutes,...routes]);this.routeVersion++;_logger.logger.info(`路由已注册: ${routes.length} 个路由到命名空间 "${ns}"`);return async()=>{await this.unregister(routes.map(r=>r.name),ns)}}async unregister(routeNames,namespace){const ns=namespace||"default";const routes=this.registeredRoutes.get(ns)||[];const filteredRoutes=routes.filter(r=>!routeNames.includes(r.name));if(filteredRoutes.length===routes.length){_logger.logger.warn(`未找到要取消注册的路由: ${routeNames.join(", ")}`);return}if(filteredRoutes.length===0){this.registeredRoutes.delete(ns)}else{this.registeredRoutes.set(ns,filteredRoutes)}this.routeVersion++;_logger.logger.info(`路由已取消注册: ${routeNames.length} 个路由从命名空间 "${ns}"`)}getRoutes(namespace){const ns=namespace||"default";return[...this.registeredRoutes.get(ns)||[]]}getAllRoutes(){return new Map(this.registeredRoutes)}clear(namespace){const ns=namespace||"default";this.registeredRoutes.delete(ns);this.routeVersion++;_logger.logger.info(`路由命名空间已清空: "${ns}"`)}clearAll(){this.registeredRoutes.clear();this.routeVersion++;_logger.logger.info("所有路由已清空")}getVersion(){return this.routeVersion}isRegistered(routeName,namespace){const ns=namespace||"default";const routes=this.registeredRoutes.get(ns)||[];return routes.some(r=>r.name===routeName)}async reload(){const routerManager=(0,_RouterManager.getRouterManager)();if(!routerManager.isInitialized()){throw new _errors.RouterError("路由管理器未初始化",_errors.RouterErrorCode.ROUTER_NOT_INITIALIZED)}const allRoutes=[];this.registeredRoutes.forEach(routes=>{allRoutes.push(...routes)});if(allRoutes.length===0){_logger.logger.warn("没有已注册的路由,无法重新加载");return}await (0,_transform.transformRoutes)(allRoutes);_logger.logger.info("路由重新加载完成")}constructor(){_define_property(this,"registeredRoutes",new Map);_define_property(this,"routeVersion",0)}};let dynamicRouteManagerInstance=null;function getDynamicRouteManager(){if(!dynamicRouteManagerInstance){dynamicRouteManagerInstance=new DynamicRouteManager}return dynamicRouteManagerInstance}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 路由动态注册管理器
|
|
3
|
+
* 支持运行时动态注册和卸载路由
|
|
4
|
+
*/
|
|
5
|
+
import type { RouteConfig } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* 动态路由注册管理器
|
|
8
|
+
*/
|
|
9
|
+
export declare class DynamicRouteManager {
|
|
10
|
+
private registeredRoutes;
|
|
11
|
+
private routeVersion;
|
|
12
|
+
/**
|
|
13
|
+
* 注册路由
|
|
14
|
+
*
|
|
15
|
+
* @param routes - 要注册的路由配置
|
|
16
|
+
* @param namespace - 路由命名空间(可选,用于分组管理)
|
|
17
|
+
* @returns 取消注册函数
|
|
18
|
+
*/
|
|
19
|
+
register(routes: RouteConfig[], namespace?: string): Promise<() => Promise<void>>;
|
|
20
|
+
/**
|
|
21
|
+
* 取消注册路由
|
|
22
|
+
*
|
|
23
|
+
* @param routeNames - 要取消注册的路由名称数组
|
|
24
|
+
* @param namespace - 路由命名空间(可选)
|
|
25
|
+
*/
|
|
26
|
+
unregister(routeNames: string[], namespace?: string): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* 获取指定命名空间的路由
|
|
29
|
+
*
|
|
30
|
+
* @param namespace - 路由命名空间(可选)
|
|
31
|
+
* @returns 路由配置数组
|
|
32
|
+
*/
|
|
33
|
+
getRoutes(namespace?: string): RouteConfig[];
|
|
34
|
+
/**
|
|
35
|
+
* 获取所有路由
|
|
36
|
+
*
|
|
37
|
+
* @returns 所有命名空间的路由配置
|
|
38
|
+
*/
|
|
39
|
+
getAllRoutes(): Map<string, RouteConfig[]>;
|
|
40
|
+
/**
|
|
41
|
+
* 清空指定命名空间的路由
|
|
42
|
+
*
|
|
43
|
+
* @param namespace - 路由命名空间(可选)
|
|
44
|
+
*/
|
|
45
|
+
clear(namespace?: string): void;
|
|
46
|
+
/**
|
|
47
|
+
* 清空所有路由
|
|
48
|
+
*/
|
|
49
|
+
clearAll(): void;
|
|
50
|
+
/**
|
|
51
|
+
* 获取路由版本号
|
|
52
|
+
*
|
|
53
|
+
* @returns 路由版本号
|
|
54
|
+
*/
|
|
55
|
+
getVersion(): number;
|
|
56
|
+
/**
|
|
57
|
+
* 检查路由是否已注册
|
|
58
|
+
*
|
|
59
|
+
* @param routeName - 路由名称
|
|
60
|
+
* @param namespace - 路由命名空间(可选)
|
|
61
|
+
* @returns 如果已注册返回 true,否则返回 false
|
|
62
|
+
*/
|
|
63
|
+
isRegistered(routeName: string, namespace?: string): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* 重新加载路由
|
|
66
|
+
*
|
|
67
|
+
* 注意:此方法会重新初始化路由管理器,需要谨慎使用
|
|
68
|
+
*/
|
|
69
|
+
reload(): Promise<void>;
|
|
70
|
+
}
|
|
71
|
+
export declare function getDynamicRouteManager(): DynamicRouteManager;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}import{logger}from"@vlian/logger";import{getRouterManager}from"../RouterManager";import{transformRoutes}from"../utils/transform";import{RouterError,RouterErrorCode}from"../errors";export class DynamicRouteManager{async register(routes,namespace){const ns=namespace||"default";if(!Array.isArray(routes)||routes.length===0){throw new RouterError("路由配置必须是非空数组",RouterErrorCode.ROUTER_CONFIG_ERROR)}const existingRoutes=this.registeredRoutes.get(ns)||[];const existingNames=new Set(existingRoutes.map(r=>r.name));const newNames=routes.map(r=>r.name);const conflicts=newNames.filter(name=>existingNames.has(name));if(conflicts.length>0){throw new RouterError(`路由名称冲突: ${conflicts.join(", ")}`,RouterErrorCode.ROUTER_CONFIG_ERROR,undefined,undefined,{conflicts,namespace:ns})}const currentRoutes=this.registeredRoutes.get(ns)||[];this.registeredRoutes.set(ns,[...currentRoutes,...routes]);this.routeVersion++;logger.info(`路由已注册: ${routes.length} 个路由到命名空间 "${ns}"`);return async()=>{await this.unregister(routes.map(r=>r.name),ns)}}async unregister(routeNames,namespace){const ns=namespace||"default";const routes=this.registeredRoutes.get(ns)||[];const filteredRoutes=routes.filter(r=>!routeNames.includes(r.name));if(filteredRoutes.length===routes.length){logger.warn(`未找到要取消注册的路由: ${routeNames.join(", ")}`);return}if(filteredRoutes.length===0){this.registeredRoutes.delete(ns)}else{this.registeredRoutes.set(ns,filteredRoutes)}this.routeVersion++;logger.info(`路由已取消注册: ${routeNames.length} 个路由从命名空间 "${ns}"`)}getRoutes(namespace){const ns=namespace||"default";return[...this.registeredRoutes.get(ns)||[]]}getAllRoutes(){return new Map(this.registeredRoutes)}clear(namespace){const ns=namespace||"default";this.registeredRoutes.delete(ns);this.routeVersion++;logger.info(`路由命名空间已清空: "${ns}"`)}clearAll(){this.registeredRoutes.clear();this.routeVersion++;logger.info("所有路由已清空")}getVersion(){return this.routeVersion}isRegistered(routeName,namespace){const ns=namespace||"default";const routes=this.registeredRoutes.get(ns)||[];return routes.some(r=>r.name===routeName)}async reload(){const routerManager=getRouterManager();if(!routerManager.isInitialized()){throw new RouterError("路由管理器未初始化",RouterErrorCode.ROUTER_NOT_INITIALIZED)}const allRoutes=[];this.registeredRoutes.forEach(routes=>{allRoutes.push(...routes)});if(allRoutes.length===0){logger.warn("没有已注册的路由,无法重新加载");return}await transformRoutes(allRoutes);logger.info("路由重新加载完成")}constructor(){_define_property(this,"registeredRoutes",new Map);_define_property(this,"routeVersion",0)}}let dynamicRouteManagerInstance=null;export function getDynamicRouteManager(){if(!dynamicRouteManagerInstance){dynamicRouteManagerInstance=new DynamicRouteManager}return dynamicRouteManagerInstance}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});_export_star(require("./DynamicRouteManager"),exports);function _export_star(from,to){Object.keys(from).forEach(function(k){if(k!=="default"&&!Object.prototype.hasOwnProperty.call(to,k)){Object.defineProperty(to,k,{enumerable:true,get:function(){return from[k]}})}});return from}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./DynamicRouteManager";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get RouterError(){return RouterError},get RouterErrorCode(){return RouterErrorCode},get createRouterError(){return createRouterError}});const _errors=require("../../../utils/errors");var RouterErrorCode=/*#__PURE__*/function(RouterErrorCode){RouterErrorCode["ROUTER_NOT_INITIALIZED"]="ROUTER_NOT_INITIALIZED";RouterErrorCode["ROUTER_CONFIG_ERROR"]="ROUTER_CONFIG_ERROR";RouterErrorCode["ROUTE_NOT_FOUND"]="ROUTE_NOT_FOUND";RouterErrorCode["ROUTE_NAVIGATION_FAILED"]="ROUTE_NAVIGATION_FAILED";RouterErrorCode["ROUTE_PERMISSION_DENIED"]="ROUTE_PERMISSION_DENIED";RouterErrorCode["ROUTE_COMPONENT_LOAD_FAILED"]="ROUTE_COMPONENT_LOAD_FAILED";RouterErrorCode["ROUTE_TRANSFORM_FAILED"]="ROUTE_TRANSFORM_FAILED";return RouterErrorCode}({});let RouterError=class RouterError extends _errors.FrameworkError{constructor(message,code,severity=_errors.ErrorSeverity.MEDIUM,cause,context){super(message,_errors.ErrorType.RUNTIME,severity,{code,originalError:cause,context:context||{}});this.name="RouterError"}};function createRouterError(message,code,severity,cause,context){return new RouterError(message,code,severity,cause,context)}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 路由错误类型定义
|
|
3
|
+
*/
|
|
4
|
+
import { FrameworkError } from '../../../utils/errors';
|
|
5
|
+
import type { ErrorSeverity as ErrorSeverityType } from '@vlian/utils';
|
|
6
|
+
/**
|
|
7
|
+
* 路由错误代码
|
|
8
|
+
*/
|
|
9
|
+
export declare enum RouterErrorCode {
|
|
10
|
+
/**
|
|
11
|
+
* 路由未初始化
|
|
12
|
+
*/
|
|
13
|
+
ROUTER_NOT_INITIALIZED = "ROUTER_NOT_INITIALIZED",
|
|
14
|
+
/**
|
|
15
|
+
* 路由配置错误
|
|
16
|
+
*/
|
|
17
|
+
ROUTER_CONFIG_ERROR = "ROUTER_CONFIG_ERROR",
|
|
18
|
+
/**
|
|
19
|
+
* 路由未找到
|
|
20
|
+
*/
|
|
21
|
+
ROUTE_NOT_FOUND = "ROUTE_NOT_FOUND",
|
|
22
|
+
/**
|
|
23
|
+
* 路由导航失败
|
|
24
|
+
*/
|
|
25
|
+
ROUTE_NAVIGATION_FAILED = "ROUTE_NAVIGATION_FAILED",
|
|
26
|
+
/**
|
|
27
|
+
* 路由权限不足
|
|
28
|
+
*/
|
|
29
|
+
ROUTE_PERMISSION_DENIED = "ROUTE_PERMISSION_DENIED",
|
|
30
|
+
/**
|
|
31
|
+
* 路由组件加载失败
|
|
32
|
+
*/
|
|
33
|
+
ROUTE_COMPONENT_LOAD_FAILED = "ROUTE_COMPONENT_LOAD_FAILED",
|
|
34
|
+
/**
|
|
35
|
+
* 路由转换失败
|
|
36
|
+
*/
|
|
37
|
+
ROUTE_TRANSFORM_FAILED = "ROUTE_TRANSFORM_FAILED"
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 路由错误
|
|
41
|
+
*/
|
|
42
|
+
export declare class RouterError extends FrameworkError {
|
|
43
|
+
constructor(message: string, code: RouterErrorCode, severity?: ErrorSeverityType, cause?: Error, context?: Record<string, unknown>);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 创建路由错误
|
|
47
|
+
*/
|
|
48
|
+
export declare function createRouterError(message: string, code: RouterErrorCode, severity?: ErrorSeverityType, cause?: Error, context?: Record<string, unknown>): RouterError;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{FrameworkError,ErrorSeverity,ErrorType}from"../../../utils/errors";export var RouterErrorCode=/*#__PURE__*/function(RouterErrorCode){RouterErrorCode["ROUTER_NOT_INITIALIZED"]="ROUTER_NOT_INITIALIZED";RouterErrorCode["ROUTER_CONFIG_ERROR"]="ROUTER_CONFIG_ERROR";RouterErrorCode["ROUTE_NOT_FOUND"]="ROUTE_NOT_FOUND";RouterErrorCode["ROUTE_NAVIGATION_FAILED"]="ROUTE_NAVIGATION_FAILED";RouterErrorCode["ROUTE_PERMISSION_DENIED"]="ROUTE_PERMISSION_DENIED";RouterErrorCode["ROUTE_COMPONENT_LOAD_FAILED"]="ROUTE_COMPONENT_LOAD_FAILED";RouterErrorCode["ROUTE_TRANSFORM_FAILED"]="ROUTE_TRANSFORM_FAILED";return RouterErrorCode}({});export class RouterError extends FrameworkError{constructor(message,code,severity=ErrorSeverity.MEDIUM,cause,context){super(message,ErrorType.RUNTIME,severity,{code,originalError:cause,context:context||{}});this.name="RouterError"}}export function createRouterError(message,code,severity,cause,context){return new RouterError(message,code,severity,cause,context)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});_export_star(require("./RouterError"),exports);function _export_star(from,to){Object.keys(from).forEach(function(k){if(k!=="default"&&!Object.prototype.hasOwnProperty.call(to,k)){Object.defineProperty(to,k,{enumerable:true,get:function(){return from[k]}})}});return from}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./RouterError";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});_export_star(require("./types"),exports);_export_star(require("./RouterManager"),exports);_export_star(require("./middleware"),exports);_export_star(require("./lifecycle"),exports);_export_star(require("./navigation"),exports);_export_star(require("./validation"),exports);_export_star(require("./errors"),exports);_export_star(require("./dynamic"),exports);_export_star(require("./performance"),exports);_export_star(require("./plugin"),exports);_export_star(require("./monitoring"),exports);_export_star(require("./adapter"),exports);_export_star(require("./version"),exports);function _export_star(from,to){Object.keys(from).forEach(function(k){if(k!=="default"&&!Object.prototype.hasOwnProperty.call(to,k)){Object.defineProperty(to,k,{enumerable:true,get:function(){return from[k]}})}});return from}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 路由模块入口
|
|
3
|
+
*/
|
|
4
|
+
export * from './types';
|
|
5
|
+
export * from './RouterManager';
|
|
6
|
+
export * from './middleware';
|
|
7
|
+
export * from './lifecycle';
|
|
8
|
+
export * from './navigation';
|
|
9
|
+
export * from './validation';
|
|
10
|
+
export * from './errors';
|
|
11
|
+
export * from './dynamic';
|
|
12
|
+
export * from './performance';
|
|
13
|
+
export * from './plugin';
|
|
14
|
+
export * from './monitoring';
|
|
15
|
+
export * from './adapter';
|
|
16
|
+
export * from './version';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./types";export*from"./RouterManager";export*from"./middleware";export*from"./lifecycle";export*from"./navigation";export*from"./validation";export*from"./errors";export*from"./dynamic";export*from"./performance";export*from"./plugin";export*from"./monitoring";export*from"./adapter";export*from"./version";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get RouterLifecycleManager(){return RouterLifecycleManager},get getRouterLifecycleManager(){return getRouterLifecycleManager}});const _logger=require("@vlian/logger");function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}let RouterLifecycleManager=class RouterLifecycleManager{register(hooks){this.hooks.push(hooks);_logger.logger.debug("路由生命周期钩子已注册");return()=>{const index=this.hooks.indexOf(hooks);if(index>-1){this.hooks.splice(index,1);_logger.logger.debug("路由生命周期钩子已取消注册")}}}registerBatch(hooksArray){hooksArray.forEach(hooks=>this.register(hooks))}clear(){this.hooks=[];_logger.logger.debug("所有路由生命周期钩子已清空")}async beforeEach(to,from){for(const hooks of this.hooks){if(hooks.beforeEach){try{const result=await hooks.beforeEach(to,from);if(result===false){_logger.logger.debug("路由跳转被阻止: beforeEach 返回 false");return false}if(typeof result==="string"){_logger.logger.debug(`路由跳转重定向: beforeEach 返回 ${result}`);return result}}catch(error){_logger.logger.error("路由生命周期钩子执行失败: beforeEach",error);continue}}}return undefined}async afterEach(to,from){for(const hooks of this.hooks){if(hooks.afterEach){try{await hooks.afterEach(to,from)}catch(error){_logger.logger.error("路由生命周期钩子执行失败: afterEach",error);continue}}}}getAll(){return[...this.hooks]}getCount(){return this.hooks.length}constructor(){_define_property(this,"hooks",[])}};let lifecycleManagerInstance=null;function getRouterLifecycleManager(){if(!lifecycleManagerInstance){lifecycleManagerInstance=new RouterLifecycleManager}return lifecycleManagerInstance}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 路由生命周期管理器
|
|
3
|
+
* 负责管理路由生命周期钩子的注册和执行
|
|
4
|
+
*/
|
|
5
|
+
import type { RouteLocation, RouteLifecycleHooks } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* 路由生命周期管理器
|
|
8
|
+
*/
|
|
9
|
+
export declare class RouterLifecycleManager {
|
|
10
|
+
private hooks;
|
|
11
|
+
/**
|
|
12
|
+
* 注册生命周期钩子
|
|
13
|
+
*
|
|
14
|
+
* @param hooks - 生命周期钩子配置
|
|
15
|
+
* @returns 取消注册函数
|
|
16
|
+
*/
|
|
17
|
+
register(hooks: RouteLifecycleHooks): () => void;
|
|
18
|
+
/**
|
|
19
|
+
* 批量注册生命周期钩子
|
|
20
|
+
*
|
|
21
|
+
* @param hooksArray - 生命周期钩子配置数组
|
|
22
|
+
*/
|
|
23
|
+
registerBatch(hooksArray: RouteLifecycleHooks[]): void;
|
|
24
|
+
/**
|
|
25
|
+
* 清空所有生命周期钩子
|
|
26
|
+
*/
|
|
27
|
+
clear(): void;
|
|
28
|
+
/**
|
|
29
|
+
* 执行路由跳转前钩子
|
|
30
|
+
*
|
|
31
|
+
* @param to - 目标路由
|
|
32
|
+
* @param from - 来源路由
|
|
33
|
+
* @returns 如果返回字符串,则跳转到该路径;如果返回 false,则阻止跳转;返回 true 或 undefined 则继续跳转
|
|
34
|
+
*/
|
|
35
|
+
beforeEach(to: RouteLocation, from?: RouteLocation): Promise<string | false | void>;
|
|
36
|
+
/**
|
|
37
|
+
* 执行路由跳转后钩子
|
|
38
|
+
*
|
|
39
|
+
* @param to - 目标路由
|
|
40
|
+
* @param from - 来源路由
|
|
41
|
+
*/
|
|
42
|
+
afterEach(to: RouteLocation, from?: RouteLocation): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* 获取所有生命周期钩子
|
|
45
|
+
*
|
|
46
|
+
* @returns 生命周期钩子配置数组
|
|
47
|
+
*/
|
|
48
|
+
getAll(): RouteLifecycleHooks[];
|
|
49
|
+
/**
|
|
50
|
+
* 获取生命周期钩子数量
|
|
51
|
+
*
|
|
52
|
+
* @returns 生命周期钩子数量
|
|
53
|
+
*/
|
|
54
|
+
getCount(): number;
|
|
55
|
+
}
|
|
56
|
+
export declare function getRouterLifecycleManager(): RouterLifecycleManager;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}import{logger}from"@vlian/logger";export class RouterLifecycleManager{register(hooks){this.hooks.push(hooks);logger.debug("路由生命周期钩子已注册");return()=>{const index=this.hooks.indexOf(hooks);if(index>-1){this.hooks.splice(index,1);logger.debug("路由生命周期钩子已取消注册")}}}registerBatch(hooksArray){hooksArray.forEach(hooks=>this.register(hooks))}clear(){this.hooks=[];logger.debug("所有路由生命周期钩子已清空")}async beforeEach(to,from){for(const hooks of this.hooks){if(hooks.beforeEach){try{const result=await hooks.beforeEach(to,from);if(result===false){logger.debug("路由跳转被阻止: beforeEach 返回 false");return false}if(typeof result==="string"){logger.debug(`路由跳转重定向: beforeEach 返回 ${result}`);return result}}catch(error){logger.error("路由生命周期钩子执行失败: beforeEach",error);continue}}}return undefined}async afterEach(to,from){for(const hooks of this.hooks){if(hooks.afterEach){try{await hooks.afterEach(to,from)}catch(error){logger.error("路由生命周期钩子执行失败: afterEach",error);continue}}}}getAll(){return[...this.hooks]}getCount(){return this.hooks.length}constructor(){_define_property(this,"hooks",[])}}let lifecycleManagerInstance=null;export function getRouterLifecycleManager(){if(!lifecycleManagerInstance){lifecycleManagerInstance=new RouterLifecycleManager}return lifecycleManagerInstance}
|