@vlian/framework 1.2.60 → 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.
Files changed (260) hide show
  1. package/dist/analytics.umd.js +1 -1
  2. package/dist/components/index.cjs +1 -1
  3. package/dist/components/index.d.ts +0 -4
  4. package/dist/components/index.js +1 -1
  5. package/dist/core-bak/Test.cjs +1 -0
  6. package/dist/core-bak/Test.d.ts +5 -0
  7. package/dist/core-bak/Test.js +1 -0
  8. package/dist/core-bak/app/AppContext.cjs +1 -0
  9. package/dist/core-bak/app/AppContext.d.ts +113 -0
  10. package/dist/core-bak/app/AppContext.js +1 -0
  11. package/dist/core-bak/app/AppContext.types.cjs +1 -0
  12. package/dist/core-bak/app/AppContext.types.d.ts +146 -0
  13. package/dist/core-bak/app/AppContext.types.js +1 -0
  14. package/dist/core-bak/app/BasicLayout.cjs +1 -0
  15. package/dist/core-bak/app/BasicLayout.d.ts +15 -0
  16. package/dist/core-bak/app/BasicLayout.js +1 -0
  17. package/dist/core-bak/app/DefaultApp.cjs +1 -0
  18. package/dist/core-bak/app/DefaultApp.d.ts +10 -0
  19. package/dist/core-bak/app/DefaultApp.js +1 -0
  20. package/dist/core-bak/app/index.cjs +1 -0
  21. package/dist/core-bak/app/index.d.ts +8 -0
  22. package/dist/core-bak/app/index.js +1 -0
  23. package/dist/core-bak/config/AppConfig.cjs +1 -0
  24. package/dist/core-bak/config/AppConfig.d.ts +88 -0
  25. package/dist/core-bak/config/AppConfig.js +1 -0
  26. package/dist/core-bak/config/ConfigLoader.cjs +1 -0
  27. package/dist/core-bak/config/ConfigLoader.d.ts +118 -0
  28. package/dist/core-bak/config/ConfigLoader.js +1 -0
  29. package/dist/core-bak/config/ConfigValidator.cjs +2 -0
  30. package/dist/core-bak/config/ConfigValidator.d.ts +84 -0
  31. package/dist/core-bak/config/ConfigValidator.js +2 -0
  32. package/dist/core-bak/config/index.cjs +1 -0
  33. package/dist/core-bak/config/index.d.ts +6 -0
  34. package/dist/core-bak/config/index.js +1 -0
  35. package/dist/core-bak/dev/DevTools.cjs +1 -0
  36. package/dist/core-bak/dev/DevTools.d.ts +16 -0
  37. package/dist/core-bak/dev/DevTools.js +1 -0
  38. package/dist/core-bak/error/ErrorBoundary.cjs +1 -0
  39. package/dist/core-bak/error/ErrorBoundary.d.ts +121 -0
  40. package/dist/core-bak/error/ErrorBoundary.js +1 -0
  41. package/dist/core-bak/error/ErrorHandler.cjs +1 -0
  42. package/dist/core-bak/error/ErrorHandler.d.ts +171 -0
  43. package/dist/core-bak/error/ErrorHandler.js +1 -0
  44. package/dist/core-bak/error/index.cjs +1 -0
  45. package/dist/core-bak/error/index.d.ts +7 -0
  46. package/dist/core-bak/error/index.js +1 -0
  47. package/dist/core-bak/event/AppEventBus.cjs +1 -0
  48. package/dist/core-bak/event/AppEventBus.d.ts +178 -0
  49. package/dist/core-bak/event/AppEventBus.js +1 -0
  50. package/dist/core-bak/event/frameworkEvents.cjs +1 -0
  51. package/dist/core-bak/event/frameworkEvents.d.ts +69 -0
  52. package/dist/core-bak/event/frameworkEvents.js +1 -0
  53. package/dist/core-bak/event/hooks.cjs +1 -0
  54. package/dist/core-bak/event/hooks.d.ts +57 -0
  55. package/dist/core-bak/event/hooks.js +1 -0
  56. package/dist/core-bak/event/index.cjs +1 -0
  57. package/dist/core-bak/event/index.d.ts +10 -0
  58. package/dist/core-bak/event/index.js +1 -0
  59. package/dist/core-bak/event/types.cjs +1 -0
  60. package/dist/core-bak/event/types.d.ts +269 -0
  61. package/dist/core-bak/event/types.js +1 -0
  62. package/dist/core-bak/event/useEventBus.cjs +1 -0
  63. package/dist/core-bak/event/useEventBus.d.ts +28 -0
  64. package/dist/core-bak/event/useEventBus.js +1 -0
  65. package/dist/core-bak/index.cjs +1 -0
  66. package/dist/core-bak/index.d.ts +54 -0
  67. package/dist/core-bak/index.js +1 -0
  68. package/dist/core-bak/initialization/InitializationErrorThrower.cjs +1 -0
  69. package/dist/core-bak/initialization/InitializationErrorThrower.d.ts +7 -0
  70. package/dist/core-bak/initialization/InitializationErrorThrower.js +1 -0
  71. package/dist/core-bak/initialization/index.cjs +1 -0
  72. package/dist/core-bak/initialization/index.d.ts +7 -0
  73. package/dist/core-bak/initialization/index.js +1 -0
  74. package/dist/core-bak/initialization/initialization.cjs +1 -0
  75. package/dist/core-bak/initialization/initialization.d.ts +69 -0
  76. package/dist/core-bak/initialization/initialization.js +1 -0
  77. package/dist/core-bak/initialization/initializationErrorState.cjs +1 -0
  78. package/dist/core-bak/initialization/initializationErrorState.d.ts +35 -0
  79. package/dist/core-bak/initialization/initializationErrorState.js +1 -0
  80. package/dist/core-bak/kernel/defaultAdapters.cjs +1 -0
  81. package/dist/core-bak/kernel/defaultAdapters.d.ts +2 -0
  82. package/dist/core-bak/kernel/defaultAdapters.js +1 -0
  83. package/dist/core-bak/kernel/errors.cjs +1 -0
  84. package/dist/core-bak/kernel/errors.d.ts +18 -0
  85. package/dist/core-bak/kernel/errors.js +1 -0
  86. package/dist/core-bak/kernel/index.cjs +1 -0
  87. package/dist/core-bak/kernel/index.d.ts +3 -0
  88. package/dist/core-bak/kernel/index.js +1 -0
  89. package/dist/core-bak/kernel/startKernel.cjs +1 -0
  90. package/dist/core-bak/kernel/startKernel.d.ts +2 -0
  91. package/dist/core-bak/kernel/startKernel.js +1 -0
  92. package/dist/core-bak/kernel/types.cjs +1 -0
  93. package/dist/core-bak/kernel/types.d.ts +114 -0
  94. package/dist/core-bak/kernel/types.js +1 -0
  95. package/dist/core-bak/middleware.cjs +1 -0
  96. package/dist/core-bak/middleware.d.ts +36 -0
  97. package/dist/core-bak/middleware.js +1 -0
  98. package/dist/core-bak/plugin/PluginEventBus.cjs +1 -0
  99. package/dist/core-bak/plugin/PluginEventBus.d.ts +169 -0
  100. package/dist/core-bak/plugin/PluginEventBus.js +1 -0
  101. package/dist/core-bak/plugin/PluginSandbox.cjs +1 -0
  102. package/dist/core-bak/plugin/PluginSandbox.d.ts +101 -0
  103. package/dist/core-bak/plugin/PluginSandbox.js +1 -0
  104. package/dist/core-bak/plugin.cjs +1 -0
  105. package/dist/core-bak/plugin.d.ts +224 -0
  106. package/dist/core-bak/plugin.js +1 -0
  107. package/dist/core-bak/router/RouterManager.cjs +1 -0
  108. package/dist/core-bak/router/RouterManager.d.ts +87 -0
  109. package/dist/core-bak/router/RouterManager.js +1 -0
  110. package/dist/core-bak/router/adapter/AdapterManager.cjs +1 -0
  111. package/dist/core-bak/router/adapter/AdapterManager.d.ts +94 -0
  112. package/dist/core-bak/router/adapter/AdapterManager.js +1 -0
  113. package/dist/core-bak/router/adapter/index.cjs +1 -0
  114. package/dist/core-bak/router/adapter/index.d.ts +6 -0
  115. package/dist/core-bak/router/adapter/index.js +1 -0
  116. package/dist/core-bak/router/adapter/react-router/ReactRouterAdapter.cjs +1 -0
  117. package/dist/core-bak/router/adapter/react-router/ReactRouterAdapter.d.ts +43 -0
  118. package/dist/core-bak/router/adapter/react-router/ReactRouterAdapter.js +1 -0
  119. package/dist/core-bak/router/adapter/react-router/index.cjs +1 -0
  120. package/dist/core-bak/router/adapter/react-router/index.d.ts +4 -0
  121. package/dist/core-bak/router/adapter/react-router/index.js +1 -0
  122. package/dist/core-bak/router/adapter/types.cjs +1 -0
  123. package/dist/core-bak/router/adapter/types.d.ts +111 -0
  124. package/dist/core-bak/router/adapter/types.js +1 -0
  125. package/dist/core-bak/router/dev/RouterDevTools.cjs +1 -0
  126. package/dist/core-bak/router/dev/RouterDevTools.d.ts +5 -0
  127. package/dist/core-bak/router/dev/RouterDevTools.js +1 -0
  128. package/dist/core-bak/router/dev/index.cjs +1 -0
  129. package/dist/core-bak/router/dev/index.d.ts +4 -0
  130. package/dist/core-bak/router/dev/index.js +1 -0
  131. package/dist/core-bak/router/dynamic/DynamicRouteManager.cjs +1 -0
  132. package/dist/core-bak/router/dynamic/DynamicRouteManager.d.ts +71 -0
  133. package/dist/core-bak/router/dynamic/DynamicRouteManager.js +1 -0
  134. package/dist/core-bak/router/dynamic/index.cjs +1 -0
  135. package/dist/core-bak/router/dynamic/index.d.ts +4 -0
  136. package/dist/core-bak/router/dynamic/index.js +1 -0
  137. package/dist/core-bak/router/errors/RouterError.cjs +1 -0
  138. package/dist/core-bak/router/errors/RouterError.d.ts +48 -0
  139. package/dist/core-bak/router/errors/RouterError.js +1 -0
  140. package/dist/core-bak/router/errors/index.cjs +1 -0
  141. package/dist/core-bak/router/errors/index.d.ts +4 -0
  142. package/dist/core-bak/router/errors/index.js +1 -0
  143. package/dist/core-bak/router/index.cjs +1 -0
  144. package/dist/core-bak/router/index.d.ts +16 -0
  145. package/dist/core-bak/router/index.js +1 -0
  146. package/dist/core-bak/router/lifecycle/RouterLifecycleManager.cjs +1 -0
  147. package/dist/core-bak/router/lifecycle/RouterLifecycleManager.d.ts +56 -0
  148. package/dist/core-bak/router/lifecycle/RouterLifecycleManager.js +1 -0
  149. package/dist/core-bak/router/lifecycle/index.cjs +1 -0
  150. package/dist/core-bak/router/lifecycle/index.d.ts +4 -0
  151. package/dist/core-bak/router/lifecycle/index.js +1 -0
  152. package/dist/core-bak/router/middleware/RouterMiddlewareManager.cjs +1 -0
  153. package/dist/core-bak/router/middleware/RouterMiddlewareManager.d.ts +61 -0
  154. package/dist/core-bak/router/middleware/RouterMiddlewareManager.js +1 -0
  155. package/dist/core-bak/router/middleware/auth.cjs +1 -0
  156. package/dist/core-bak/router/middleware/auth.d.ts +54 -0
  157. package/dist/core-bak/router/middleware/auth.js +1 -0
  158. package/dist/core-bak/router/middleware/index.cjs +1 -0
  159. package/dist/core-bak/router/middleware/index.d.ts +6 -0
  160. package/dist/core-bak/router/middleware/index.js +1 -0
  161. package/dist/core-bak/router/middleware/types.cjs +1 -0
  162. package/dist/core-bak/router/middleware/types.d.ts +82 -0
  163. package/dist/core-bak/router/middleware/types.js +1 -0
  164. package/dist/core-bak/router/monitoring/RouterMonitoring.cjs +1 -0
  165. package/dist/core-bak/router/monitoring/RouterMonitoring.d.ts +134 -0
  166. package/dist/core-bak/router/monitoring/RouterMonitoring.js +1 -0
  167. package/dist/core-bak/router/monitoring/index.cjs +1 -0
  168. package/dist/core-bak/router/monitoring/index.d.ts +4 -0
  169. package/dist/core-bak/router/monitoring/index.js +1 -0
  170. package/dist/core-bak/router/navigation/RouterNavigation.cjs +1 -0
  171. package/dist/core-bak/router/navigation/RouterNavigation.d.ts +43 -0
  172. package/dist/core-bak/router/navigation/RouterNavigation.js +1 -0
  173. package/dist/core-bak/router/navigation/index.cjs +1 -0
  174. package/dist/core-bak/router/navigation/index.d.ts +4 -0
  175. package/dist/core-bak/router/navigation/index.js +1 -0
  176. package/dist/core-bak/router/performance/RouteCache.cjs +1 -0
  177. package/dist/core-bak/router/performance/RouteCache.d.ts +113 -0
  178. package/dist/core-bak/router/performance/RouteCache.js +1 -0
  179. package/dist/core-bak/router/performance/RoutePreloader.cjs +1 -0
  180. package/dist/core-bak/router/performance/RoutePreloader.d.ts +111 -0
  181. package/dist/core-bak/router/performance/RoutePreloader.js +1 -0
  182. package/dist/core-bak/router/performance/index.cjs +1 -0
  183. package/dist/core-bak/router/performance/index.d.ts +5 -0
  184. package/dist/core-bak/router/performance/index.js +1 -0
  185. package/dist/core-bak/router/plugin/RouterPluginManager.cjs +1 -0
  186. package/dist/core-bak/router/plugin/RouterPluginManager.d.ts +74 -0
  187. package/dist/core-bak/router/plugin/RouterPluginManager.js +1 -0
  188. package/dist/core-bak/router/plugin/index.cjs +1 -0
  189. package/dist/core-bak/router/plugin/index.d.ts +5 -0
  190. package/dist/core-bak/router/plugin/index.js +1 -0
  191. package/dist/core-bak/router/plugin/types.cjs +1 -0
  192. package/dist/core-bak/router/plugin/types.d.ts +153 -0
  193. package/dist/core-bak/router/plugin/types.js +1 -0
  194. package/dist/core-bak/router/types.cjs +1 -0
  195. package/dist/core-bak/router/types.d.ts +464 -0
  196. package/dist/core-bak/router/types.js +1 -0
  197. package/dist/core-bak/router/utils/adapters/react-router/RouteErrorBoundary.cjs +1 -0
  198. package/dist/core-bak/router/utils/adapters/react-router/RouteErrorBoundary.d.ts +2 -0
  199. package/dist/core-bak/router/utils/adapters/react-router/RouteErrorBoundary.js +1 -0
  200. package/dist/core-bak/router/utils/adapters/react-router/transform.cjs +1 -0
  201. package/dist/core-bak/router/utils/adapters/react-router/transform.d.ts +5 -0
  202. package/dist/core-bak/router/utils/adapters/react-router/transform.js +1 -0
  203. package/dist/core-bak/router/utils/transform.cjs +1 -0
  204. package/dist/core-bak/router/utils/transform.d.ts +348 -0
  205. package/dist/core-bak/router/utils/transform.js +1 -0
  206. package/dist/core-bak/router/validation/RouterConfigValidator.cjs +2 -0
  207. package/dist/core-bak/router/validation/RouterConfigValidator.d.ts +121 -0
  208. package/dist/core-bak/router/validation/RouterConfigValidator.js +2 -0
  209. package/dist/core-bak/router/validation/index.cjs +1 -0
  210. package/dist/core-bak/router/validation/index.d.ts +5 -0
  211. package/dist/core-bak/router/validation/index.js +1 -0
  212. package/dist/core-bak/router/validation/schema.cjs +1 -0
  213. package/dist/core-bak/router/validation/schema.d.ts +180 -0
  214. package/dist/core-bak/router/validation/schema.js +1 -0
  215. package/dist/core-bak/router/version/RouteVersionManager.cjs +1 -0
  216. package/dist/core-bak/router/version/RouteVersionManager.d.ts +124 -0
  217. package/dist/core-bak/router/version/RouteVersionManager.js +1 -0
  218. package/dist/core-bak/router/version/index.cjs +1 -0
  219. package/dist/core-bak/router/version/index.d.ts +4 -0
  220. package/dist/core-bak/router/version/index.js +1 -0
  221. package/dist/core-bak/splash/SplashScreen.cjs +1 -0
  222. package/dist/core-bak/splash/SplashScreen.d.ts +14 -0
  223. package/dist/core-bak/splash/SplashScreen.js +1 -0
  224. package/dist/core-bak/splash/index.cjs +1 -0
  225. package/dist/core-bak/splash/index.d.ts +5 -0
  226. package/dist/core-bak/splash/index.js +1 -0
  227. package/dist/core-bak/splash/splashScreenUtils.cjs +1 -0
  228. package/dist/core-bak/splash/splashScreenUtils.d.ts +7 -0
  229. package/dist/core-bak/splash/splashScreenUtils.js +1 -0
  230. package/dist/core-bak/startup/AppInstance.cjs +1 -0
  231. package/dist/core-bak/startup/AppInstance.d.ts +138 -0
  232. package/dist/core-bak/startup/AppInstance.js +1 -0
  233. package/dist/core-bak/startup/environment.cjs +1 -0
  234. package/dist/core-bak/startup/environment.d.ts +87 -0
  235. package/dist/core-bak/startup/environment.js +1 -0
  236. package/dist/core-bak/startup/index.cjs +1 -0
  237. package/dist/core-bak/startup/index.d.ts +7 -0
  238. package/dist/core-bak/startup/index.js +1 -0
  239. package/dist/core-bak/startup/initializeServices.cjs +1 -0
  240. package/dist/core-bak/startup/initializeServices.d.ts +68 -0
  241. package/dist/core-bak/startup/initializeServices.js +1 -0
  242. package/dist/core-bak/startup/performanceTracker.cjs +1 -0
  243. package/dist/core-bak/startup/performanceTracker.d.ts +104 -0
  244. package/dist/core-bak/startup/performanceTracker.js +1 -0
  245. package/dist/core-bak/startup/renderApp.cjs +1 -0
  246. package/dist/core-bak/startup/renderApp.d.ts +70 -0
  247. package/dist/core-bak/startup/renderApp.js +1 -0
  248. package/dist/core-bak/startup/startApp.cjs +1 -0
  249. package/dist/core-bak/startup/startApp.d.ts +14 -0
  250. package/dist/core-bak/startup/startApp.js +1 -0
  251. package/dist/core-bak/types.cjs +1 -0
  252. package/dist/core-bak/types.d.ts +501 -0
  253. package/dist/core-bak/types.js +1 -0
  254. package/dist/index.cjs +1 -1
  255. package/dist/index.d.ts +0 -1
  256. package/dist/index.js +1 -1
  257. package/dist/index.umd.js +31 -246
  258. package/dist/kernel/types.d.ts +46 -3
  259. package/dist/state.umd.js +1 -1
  260. package/package.json +7 -12
@@ -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 PreloadStrategy(){return PreloadStrategy},get RoutePreloader(){return RoutePreloader},get getRoutePreloader(){return getRoutePreloader}});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}var PreloadStrategy=/*#__PURE__*/function(PreloadStrategy){PreloadStrategy["NONE"]="none";PreloadStrategy["NEXT_LEVEL"]="next-level";PreloadStrategy["ALL"]="all";PreloadStrategy["VISIBLE"]="visible";return PreloadStrategy}({});let RoutePreloader=class RoutePreloader{updateConfig(config={}){this.config={strategy:config.strategy??"none",delay:config.delay??1e3,priorityThreshold:config.priorityThreshold??10,timeout:config.timeout??5e3}}shouldRegister(priority){if(this.config.strategy==="none"){return false}if(this.config.strategy==="visible"&&priority>this.config.priorityThreshold){return false}return true}registerTask(key,importFn,routeName,priority){if(!this.shouldRegister(priority)){return}this.tasks.set(key,{importFn,routeName,priority,status:"pending"})}registerRoute(route){if(!route.page&&!route.layout){return}const priority=route.handle?.order??999;if(route.page&&typeof route.page==="function"){this.registerTask(`${route.name}_page`,route.page,route.name,priority)}if(route.layout&&typeof route.layout==="function"){this.registerTask(`${route.name}_layout`,route.layout,route.name,priority)}if(route.children){route.children.forEach(child=>this.registerRoute(child))}}registerRoutes(routes,resolvers){const priorityByPath=new Map;const nameByPath=new Map;const collectPriority=route=>{const priority=route.handle?.order??999;const routeName=route.name;const record=value=>{if(typeof value!=="string"){return}if(!priorityByPath.has(value)||(priorityByPath.get(value)??999)>priority){priorityByPath.set(value,priority);nameByPath.set(value,routeName)}};record(route.page);record(route.layout);record(route.error??route.errors);record(route.loading);route.children?.forEach(collectPriority)};routes.forEach(collectPriority);routes.forEach(route=>this.registerRoute(route));if(!resolvers){return}const registerResolverMap=(map,type)=>{for(const[path,importFn]of map.entries()){const routeName=nameByPath.get(path)??path;const priority=priorityByPath.get(path)??999;this.registerTask(`${routeName}_${type}_${path}`,importFn,routeName,priority)}};registerResolverMap(resolvers.pages,"page");registerResolverMap(resolvers.layouts,"layout");registerResolverMap(resolvers.errors,"error");registerResolverMap(resolvers.loadings,"loading")}async preloadRoute(routeName){const tasks=Array.from(this.tasks.values()).filter(task=>task.routeName===routeName&&task.status==="pending");if(tasks.length===0){return}await Promise.all(tasks.map(task=>this.preloadTask(task)))}async preloadTask(task){if(task.status!=="pending"){return}task.status="loading";task.startTime=Date.now();let timeoutId=null;try{const timeoutPromise=new Promise((_,reject)=>{timeoutId=setTimeout(()=>reject(new Error("预加载超时")),this.config.timeout)});await Promise.race([task.importFn(),timeoutPromise]);task.status="loaded";const duration=Date.now()-(task.startTime||0);_logger.logger.debug(`路由组件预加载成功: ${task.routeName} (${duration}ms)`)}catch(error){task.status="failed";_logger.logger.warn(`路由组件预加载失败: ${task.routeName}`,error)}finally{if(timeoutId){clearTimeout(timeoutId)}}}startPreload(){if(this.config.strategy==="none"){return}this.stopPreload();this.preloadTimer=setTimeout(()=>{const browserWindow=typeof window!=="undefined"?window:undefined;if(browserWindow?.requestIdleCallback){this.idleHandle=browserWindow.requestIdleCallback(()=>{this.executePreload()});return}this.executePreload()},this.config.delay)}async executePreload(){const tasks=Array.from(this.tasks.values()).filter(task=>task.status==="pending").sort((a,b)=>a.priority-b.priority);if(tasks.length===0){return}_logger.logger.debug(`开始预加载 ${tasks.length} 个路由组件`);let tasksToPreload=[];switch(this.config.strategy){case"all":tasksToPreload=tasks;break;case"next-level":tasksToPreload=tasks.slice(0,Math.min(5,tasks.length));break;case"visible":tasksToPreload=tasks.filter(task=>task.priority<=this.config.priorityThreshold);break;default:return}const concurrency=3;for(let i=0;i<tasksToPreload.length;i+=concurrency){const batch=tasksToPreload.slice(i,i+concurrency);await Promise.all(batch.map(task=>this.preloadTask(task)))}_logger.logger.debug("路由组件预加载完成")}stopPreload(){const browserWindow=typeof window!=="undefined"?window:undefined;if(this.preloadTimer){clearTimeout(this.preloadTimer);this.preloadTimer=null}if(this.idleHandle!==null&&browserWindow?.cancelIdleCallback){browserWindow.cancelIdleCallback(this.idleHandle);this.idleHandle=null}}clear(){this.tasks.clear();this.stopPreload();_logger.logger.debug("路由预加载任务已清空")}getStats(){const stats={total:this.tasks.size,pending:0,loading:0,loaded:0,failed:0};for(const task of this.tasks.values()){stats[task.status]++}return stats}constructor(config={}){_define_property(this,"tasks",new Map);_define_property(this,"config",void 0);_define_property(this,"preloadTimer",null);_define_property(this,"idleHandle",null);this.config={strategy:config.strategy??"none",delay:config.delay??1e3,priorityThreshold:config.priorityThreshold??10,timeout:config.timeout??5e3}}};let routePreloaderInstance=null;function getRoutePreloader(config){if(!routePreloaderInstance){routePreloaderInstance=new RoutePreloader(config)}return routePreloaderInstance}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * 路由预加载管理器
3
+ * 提供路由组件的预加载功能
4
+ */
5
+ import type { RouteConfig } from '../types';
6
+ import type { TransformRoutesResult } from '../utils/transform';
7
+ /**
8
+ * 预加载策略
9
+ */
10
+ export declare enum PreloadStrategy {
11
+ /**
12
+ * 不预加载
13
+ */
14
+ NONE = "none",
15
+ /**
16
+ * 预加载当前路由的下一级路由
17
+ */
18
+ NEXT_LEVEL = "next-level",
19
+ /**
20
+ * 预加载所有路由
21
+ */
22
+ ALL = "all",
23
+ /**
24
+ * 预加载可见路由(根据路由配置的优先级)
25
+ */
26
+ VISIBLE = "visible"
27
+ }
28
+ /**
29
+ * 预加载配置
30
+ */
31
+ export interface PreloadConfig {
32
+ /**
33
+ * 预加载策略
34
+ * @default PreloadStrategy.NEXT_LEVEL
35
+ */
36
+ strategy?: PreloadStrategy;
37
+ /**
38
+ * 预加载延迟(毫秒)
39
+ * @default 1000
40
+ */
41
+ delay?: number;
42
+ /**
43
+ * 预加载优先级阈值(只预加载优先级小于等于此值的路由)
44
+ * @default 10
45
+ */
46
+ priorityThreshold?: number;
47
+ /**
48
+ * 预加载超时时间(毫秒)
49
+ * @default 5000
50
+ */
51
+ timeout?: number;
52
+ }
53
+ /**
54
+ * 路由预加载管理器
55
+ */
56
+ export declare class RoutePreloader {
57
+ private tasks;
58
+ private config;
59
+ private preloadTimer;
60
+ private idleHandle;
61
+ constructor(config?: PreloadConfig);
62
+ /**
63
+ * 更新预加载配置
64
+ */
65
+ updateConfig(config?: PreloadConfig): void;
66
+ private shouldRegister;
67
+ private registerTask;
68
+ /**
69
+ * 注册路由用于预加载
70
+ */
71
+ registerRoute(route: RouteConfig): void;
72
+ /**
73
+ * 注册多个路由
74
+ */
75
+ registerRoutes(routes: RouteConfig[], resolvers?: Pick<TransformRoutesResult, 'pages' | 'layouts' | 'errors' | 'loadings'>): void;
76
+ /**
77
+ * 预加载指定路由
78
+ */
79
+ preloadRoute(routeName: string): Promise<void>;
80
+ /**
81
+ * 预加载任务
82
+ */
83
+ private preloadTask;
84
+ /**
85
+ * 开始预加载(根据策略)
86
+ */
87
+ startPreload(): void;
88
+ /**
89
+ * 执行预加载
90
+ */
91
+ private executePreload;
92
+ /**
93
+ * 停止预加载
94
+ */
95
+ stopPreload(): void;
96
+ /**
97
+ * 清空所有任务
98
+ */
99
+ clear(): void;
100
+ /**
101
+ * 获取预加载统计信息
102
+ */
103
+ getStats(): {
104
+ total: number;
105
+ pending: number;
106
+ loading: number;
107
+ loaded: number;
108
+ failed: number;
109
+ };
110
+ }
111
+ export declare function getRoutePreloader(config?: PreloadConfig): RoutePreloader;
@@ -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 var PreloadStrategy=/*#__PURE__*/function(PreloadStrategy){PreloadStrategy["NONE"]="none";PreloadStrategy["NEXT_LEVEL"]="next-level";PreloadStrategy["ALL"]="all";PreloadStrategy["VISIBLE"]="visible";return PreloadStrategy}({});export class RoutePreloader{updateConfig(config={}){this.config={strategy:config.strategy??"none",delay:config.delay??1e3,priorityThreshold:config.priorityThreshold??10,timeout:config.timeout??5e3}}shouldRegister(priority){if(this.config.strategy==="none"){return false}if(this.config.strategy==="visible"&&priority>this.config.priorityThreshold){return false}return true}registerTask(key,importFn,routeName,priority){if(!this.shouldRegister(priority)){return}this.tasks.set(key,{importFn,routeName,priority,status:"pending"})}registerRoute(route){if(!route.page&&!route.layout){return}const priority=route.handle?.order??999;if(route.page&&typeof route.page==="function"){this.registerTask(`${route.name}_page`,route.page,route.name,priority)}if(route.layout&&typeof route.layout==="function"){this.registerTask(`${route.name}_layout`,route.layout,route.name,priority)}if(route.children){route.children.forEach(child=>this.registerRoute(child))}}registerRoutes(routes,resolvers){const priorityByPath=new Map;const nameByPath=new Map;const collectPriority=route=>{const priority=route.handle?.order??999;const routeName=route.name;const record=value=>{if(typeof value!=="string"){return}if(!priorityByPath.has(value)||(priorityByPath.get(value)??999)>priority){priorityByPath.set(value,priority);nameByPath.set(value,routeName)}};record(route.page);record(route.layout);record(route.error??route.errors);record(route.loading);route.children?.forEach(collectPriority)};routes.forEach(collectPriority);routes.forEach(route=>this.registerRoute(route));if(!resolvers){return}const registerResolverMap=(map,type)=>{for(const[path,importFn]of map.entries()){const routeName=nameByPath.get(path)??path;const priority=priorityByPath.get(path)??999;this.registerTask(`${routeName}_${type}_${path}`,importFn,routeName,priority)}};registerResolverMap(resolvers.pages,"page");registerResolverMap(resolvers.layouts,"layout");registerResolverMap(resolvers.errors,"error");registerResolverMap(resolvers.loadings,"loading")}async preloadRoute(routeName){const tasks=Array.from(this.tasks.values()).filter(task=>task.routeName===routeName&&task.status==="pending");if(tasks.length===0){return}await Promise.all(tasks.map(task=>this.preloadTask(task)))}async preloadTask(task){if(task.status!=="pending"){return}task.status="loading";task.startTime=Date.now();let timeoutId=null;try{const timeoutPromise=new Promise((_,reject)=>{timeoutId=setTimeout(()=>reject(new Error("预加载超时")),this.config.timeout)});await Promise.race([task.importFn(),timeoutPromise]);task.status="loaded";const duration=Date.now()-(task.startTime||0);logger.debug(`路由组件预加载成功: ${task.routeName} (${duration}ms)`)}catch(error){task.status="failed";logger.warn(`路由组件预加载失败: ${task.routeName}`,error)}finally{if(timeoutId){clearTimeout(timeoutId)}}}startPreload(){if(this.config.strategy==="none"){return}this.stopPreload();this.preloadTimer=setTimeout(()=>{const browserWindow=typeof window!=="undefined"?window:undefined;if(browserWindow?.requestIdleCallback){this.idleHandle=browserWindow.requestIdleCallback(()=>{this.executePreload()});return}this.executePreload()},this.config.delay)}async executePreload(){const tasks=Array.from(this.tasks.values()).filter(task=>task.status==="pending").sort((a,b)=>a.priority-b.priority);if(tasks.length===0){return}logger.debug(`开始预加载 ${tasks.length} 个路由组件`);let tasksToPreload=[];switch(this.config.strategy){case"all":tasksToPreload=tasks;break;case"next-level":tasksToPreload=tasks.slice(0,Math.min(5,tasks.length));break;case"visible":tasksToPreload=tasks.filter(task=>task.priority<=this.config.priorityThreshold);break;default:return}const concurrency=3;for(let i=0;i<tasksToPreload.length;i+=concurrency){const batch=tasksToPreload.slice(i,i+concurrency);await Promise.all(batch.map(task=>this.preloadTask(task)))}logger.debug("路由组件预加载完成")}stopPreload(){const browserWindow=typeof window!=="undefined"?window:undefined;if(this.preloadTimer){clearTimeout(this.preloadTimer);this.preloadTimer=null}if(this.idleHandle!==null&&browserWindow?.cancelIdleCallback){browserWindow.cancelIdleCallback(this.idleHandle);this.idleHandle=null}}clear(){this.tasks.clear();this.stopPreload();logger.debug("路由预加载任务已清空")}getStats(){const stats={total:this.tasks.size,pending:0,loading:0,loaded:0,failed:0};for(const task of this.tasks.values()){stats[task.status]++}return stats}constructor(config={}){_define_property(this,"tasks",new Map);_define_property(this,"config",void 0);_define_property(this,"preloadTimer",null);_define_property(this,"idleHandle",null);this.config={strategy:config.strategy??"none",delay:config.delay??1e3,priorityThreshold:config.priorityThreshold??10,timeout:config.timeout??5e3}}}let routePreloaderInstance=null;export function getRoutePreloader(config){if(!routePreloaderInstance){routePreloaderInstance=new RoutePreloader(config)}return routePreloaderInstance}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});_export_star(require("./RouteCache"),exports);_export_star(require("./RoutePreloader"),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,5 @@
1
+ /**
2
+ * 路由性能优化模块入口
3
+ */
4
+ export * from './RouteCache';
5
+ export * from './RoutePreloader';
@@ -0,0 +1 @@
1
+ export*from"./RouteCache";export*from"./RoutePreloader";
@@ -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 RouterPluginManager(){return RouterPluginManager},get getRouterPluginManager(){return getRouterPluginManager}});const _logger=require("@vlian/logger");const _types=require("./types");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 RouterPluginManager=class RouterPluginManager{register(plugin,options={}){if(!plugin.name){throw new Error("插件必须提供名称")}if(this.plugins.has(plugin.name)&&!options.overwrite){throw new Error(`插件 "${plugin.name}" 已存在`)}const pluginWithDefaults={priority:100,enabled:true,...plugin};if(pluginWithDefaults.dependencies){const missingDeps=pluginWithDefaults.dependencies.filter(dep=>!this.plugins.has(dep));if(missingDeps.length>0){throw new Error(`插件 "${plugin.name}" 缺少依赖: ${missingDeps.join(", ")}`)}}this.plugins.set(plugin.name,{plugin:pluginWithDefaults,status:"registered",registeredAt:Date.now()});_logger.logger.debug(`路由插件已注册: ${plugin.name}`);if(pluginWithDefaults.hooks?.onRegister){try{const context={config:{},meta:{stage:_types.PluginLifecycleStage.REGISTER}};pluginWithDefaults.hooks.onRegister(context)}catch(error){_logger.logger.error(`插件注册钩子执行失败: ${plugin.name}`,error)}}return()=>{this.unregister(plugin.name)}}registerBatch(plugins,options={}){const sortedPlugins=this.sortByDependencies(plugins);sortedPlugins.forEach(plugin=>{this.register(plugin,options)})}sortByDependencies(plugins){const sorted=[];const visited=new Set;const visiting=new Set;const visit=plugin=>{if(visiting.has(plugin.name||"")){throw new Error(`检测到循环依赖: ${plugin.name}`)}if(visited.has(plugin.name||"")){return}visiting.add(plugin.name||"");if(plugin.dependencies){plugin.dependencies.forEach(depName=>{const dep=plugins.find(p=>p.name===depName);if(dep){visit(dep)}})}visiting.delete(plugin.name||"");visited.add(plugin.name||"");sorted.push(plugin)};plugins.forEach(plugin=>{if(!visited.has(plugin.name||"")){visit(plugin)}});return sorted}unregister(name){const registration=this.plugins.get(name);if(!registration){return}if(registration.plugin.hooks?.onDestroy){try{const context={config:{},meta:{stage:_types.PluginLifecycleStage.DESTROY}};registration.plugin.hooks.onDestroy(context)}catch(error){_logger.logger.error(`插件销毁钩子执行失败: ${name}`,error)}}this.plugins.delete(name);_logger.logger.debug(`路由插件已取消注册: ${name}`)}async executeHooks(stage,context){const enabledPlugins=Array.from(this.plugins.values()).filter(reg=>reg.plugin.enabled!==false).sort((a,b)=>(a.plugin.priority||100)-(b.plugin.priority||100));const hookMap={[_types.PluginLifecycleStage.REGISTER]:"onRegister",[_types.PluginLifecycleStage.BEFORE_INIT]:"onBeforeInit",[_types.PluginLifecycleStage.AFTER_INIT]:"onAfterInit",[_types.PluginLifecycleStage.BEFORE_TRANSFORM]:"onBeforeTransform",[_types.PluginLifecycleStage.AFTER_TRANSFORM]:"onAfterTransform",[_types.PluginLifecycleStage.BEFORE_MATCH]:"onBeforeMatch",[_types.PluginLifecycleStage.AFTER_MATCH]:"onAfterMatch",[_types.PluginLifecycleStage.DESTROY]:"onDestroy"};const hookName=hookMap[stage];if(!hookName){return}for(const registration of enabledPlugins){const hook=registration.plugin.hooks?.[hookName];if(hook){try{await hook(context)}catch(error){_logger.logger.error(`插件钩子执行失败: ${registration.plugin.name}.${hookName}`,error)}}}}getPlugin(name){return this.plugins.get(name)?.plugin}getAllPlugins(){return Array.from(this.plugins.values()).map(reg=>reg.plugin)}getEnabledPlugins(){return Array.from(this.plugins.values()).filter(reg=>reg.plugin.enabled!==false).map(reg=>reg.plugin)}clear(){for(const[name,registration]of this.plugins.entries()){if(registration.plugin.hooks?.onDestroy){try{const context={config:{},meta:{stage:_types.PluginLifecycleStage.DESTROY}};registration.plugin.hooks.onDestroy(context)}catch(error){_logger.logger.error(`插件销毁钩子执行失败: ${name}`,error)}}}this.plugins.clear();_logger.logger.debug("所有路由插件已清空")}getCount(){return this.plugins.size}constructor(){_define_property(this,"plugins",new Map)}};let pluginManagerInstance=null;function getRouterPluginManager(){if(!pluginManagerInstance){pluginManagerInstance=new RouterPluginManager}return pluginManagerInstance}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * 路由插件管理器
3
+ * 负责插件的注册、执行和生命周期管理
4
+ */
5
+ import type { RouterPlugin, PluginContext, PluginRegisterOptions } from './types';
6
+ import { PluginLifecycleStage } from './types';
7
+ /**
8
+ * 路由插件管理器
9
+ */
10
+ export declare class RouterPluginManager {
11
+ private plugins;
12
+ /**
13
+ * 注册插件
14
+ *
15
+ * @param plugin - 插件实例
16
+ * @param options - 注册选项
17
+ * @returns 取消注册函数
18
+ */
19
+ register(plugin: RouterPlugin, options?: PluginRegisterOptions): () => void;
20
+ /**
21
+ * 批量注册插件
22
+ *
23
+ * @param plugins - 插件数组
24
+ * @param options - 注册选项
25
+ */
26
+ registerBatch(plugins: RouterPlugin[], options?: PluginRegisterOptions): void;
27
+ /**
28
+ * 按依赖关系排序插件(拓扑排序)
29
+ */
30
+ private sortByDependencies;
31
+ /**
32
+ * 取消注册插件
33
+ *
34
+ * @param name - 插件名称
35
+ */
36
+ unregister(name: string): void;
37
+ /**
38
+ * 执行插件钩子
39
+ *
40
+ * @param stage - 生命周期阶段
41
+ * @param context - 插件上下文
42
+ */
43
+ executeHooks(stage: PluginLifecycleStage, context: PluginContext): Promise<void>;
44
+ /**
45
+ * 获取插件
46
+ *
47
+ * @param name - 插件名称
48
+ * @returns 插件实例,如果不存在返回 undefined
49
+ */
50
+ getPlugin(name: string): RouterPlugin | undefined;
51
+ /**
52
+ * 获取所有插件
53
+ *
54
+ * @returns 插件数组
55
+ */
56
+ getAllPlugins(): RouterPlugin[];
57
+ /**
58
+ * 获取启用的插件
59
+ *
60
+ * @returns 启用的插件数组
61
+ */
62
+ getEnabledPlugins(): RouterPlugin[];
63
+ /**
64
+ * 清空所有插件
65
+ */
66
+ clear(): void;
67
+ /**
68
+ * 获取插件数量
69
+ *
70
+ * @returns 插件数量
71
+ */
72
+ getCount(): number;
73
+ }
74
+ export declare function getRouterPluginManager(): RouterPluginManager;
@@ -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{PluginLifecycleStage}from"./types";export class RouterPluginManager{register(plugin,options={}){if(!plugin.name){throw new Error("插件必须提供名称")}if(this.plugins.has(plugin.name)&&!options.overwrite){throw new Error(`插件 "${plugin.name}" 已存在`)}const pluginWithDefaults={priority:100,enabled:true,...plugin};if(pluginWithDefaults.dependencies){const missingDeps=pluginWithDefaults.dependencies.filter(dep=>!this.plugins.has(dep));if(missingDeps.length>0){throw new Error(`插件 "${plugin.name}" 缺少依赖: ${missingDeps.join(", ")}`)}}this.plugins.set(plugin.name,{plugin:pluginWithDefaults,status:"registered",registeredAt:Date.now()});logger.debug(`路由插件已注册: ${plugin.name}`);if(pluginWithDefaults.hooks?.onRegister){try{const context={config:{},meta:{stage:PluginLifecycleStage.REGISTER}};pluginWithDefaults.hooks.onRegister(context)}catch(error){logger.error(`插件注册钩子执行失败: ${plugin.name}`,error)}}return()=>{this.unregister(plugin.name)}}registerBatch(plugins,options={}){const sortedPlugins=this.sortByDependencies(plugins);sortedPlugins.forEach(plugin=>{this.register(plugin,options)})}sortByDependencies(plugins){const sorted=[];const visited=new Set;const visiting=new Set;const visit=plugin=>{if(visiting.has(plugin.name||"")){throw new Error(`检测到循环依赖: ${plugin.name}`)}if(visited.has(plugin.name||"")){return}visiting.add(plugin.name||"");if(plugin.dependencies){plugin.dependencies.forEach(depName=>{const dep=plugins.find(p=>p.name===depName);if(dep){visit(dep)}})}visiting.delete(plugin.name||"");visited.add(plugin.name||"");sorted.push(plugin)};plugins.forEach(plugin=>{if(!visited.has(plugin.name||"")){visit(plugin)}});return sorted}unregister(name){const registration=this.plugins.get(name);if(!registration){return}if(registration.plugin.hooks?.onDestroy){try{const context={config:{},meta:{stage:PluginLifecycleStage.DESTROY}};registration.plugin.hooks.onDestroy(context)}catch(error){logger.error(`插件销毁钩子执行失败: ${name}`,error)}}this.plugins.delete(name);logger.debug(`路由插件已取消注册: ${name}`)}async executeHooks(stage,context){const enabledPlugins=Array.from(this.plugins.values()).filter(reg=>reg.plugin.enabled!==false).sort((a,b)=>(a.plugin.priority||100)-(b.plugin.priority||100));const hookMap={[PluginLifecycleStage.REGISTER]:"onRegister",[PluginLifecycleStage.BEFORE_INIT]:"onBeforeInit",[PluginLifecycleStage.AFTER_INIT]:"onAfterInit",[PluginLifecycleStage.BEFORE_TRANSFORM]:"onBeforeTransform",[PluginLifecycleStage.AFTER_TRANSFORM]:"onAfterTransform",[PluginLifecycleStage.BEFORE_MATCH]:"onBeforeMatch",[PluginLifecycleStage.AFTER_MATCH]:"onAfterMatch",[PluginLifecycleStage.DESTROY]:"onDestroy"};const hookName=hookMap[stage];if(!hookName){return}for(const registration of enabledPlugins){const hook=registration.plugin.hooks?.[hookName];if(hook){try{await hook(context)}catch(error){logger.error(`插件钩子执行失败: ${registration.plugin.name}.${hookName}`,error)}}}}getPlugin(name){return this.plugins.get(name)?.plugin}getAllPlugins(){return Array.from(this.plugins.values()).map(reg=>reg.plugin)}getEnabledPlugins(){return Array.from(this.plugins.values()).filter(reg=>reg.plugin.enabled!==false).map(reg=>reg.plugin)}clear(){for(const[name,registration]of this.plugins.entries()){if(registration.plugin.hooks?.onDestroy){try{const context={config:{},meta:{stage:PluginLifecycleStage.DESTROY}};registration.plugin.hooks.onDestroy(context)}catch(error){logger.error(`插件销毁钩子执行失败: ${name}`,error)}}}this.plugins.clear();logger.debug("所有路由插件已清空")}getCount(){return this.plugins.size}constructor(){_define_property(this,"plugins",new Map)}}let pluginManagerInstance=null;export function getRouterPluginManager(){if(!pluginManagerInstance){pluginManagerInstance=new RouterPluginManager}return pluginManagerInstance}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});_export_star(require("./types"),exports);_export_star(require("./RouterPluginManager"),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,5 @@
1
+ /**
2
+ * 路由插件模块入口
3
+ */
4
+ export * from './types';
5
+ export * from './RouterPluginManager';
@@ -0,0 +1 @@
1
+ export*from"./types";export*from"./RouterPluginManager";
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"PluginLifecycleStage",{enumerable:true,get:function(){return PluginLifecycleStage}});var PluginLifecycleStage=/*#__PURE__*/function(PluginLifecycleStage){PluginLifecycleStage["REGISTER"]="register";PluginLifecycleStage["BEFORE_INIT"]="before-init";PluginLifecycleStage["AFTER_INIT"]="after-init";PluginLifecycleStage["BEFORE_TRANSFORM"]="before-transform";PluginLifecycleStage["AFTER_TRANSFORM"]="after-transform";PluginLifecycleStage["BEFORE_MATCH"]="before-match";PluginLifecycleStage["AFTER_MATCH"]="after-match";PluginLifecycleStage["DESTROY"]="destroy";return PluginLifecycleStage}({});
@@ -0,0 +1,153 @@
1
+ /**
2
+ * 路由插件类型定义
3
+ */
4
+ import type { RouterConfig, RouteConfig } from '../types';
5
+ import type { RouterMiddlewareContext } from '../middleware/types';
6
+ /**
7
+ * 插件生命周期阶段
8
+ */
9
+ export declare enum PluginLifecycleStage {
10
+ /**
11
+ * 插件注册阶段
12
+ */
13
+ REGISTER = "register",
14
+ /**
15
+ * 路由初始化前
16
+ */
17
+ BEFORE_INIT = "before-init",
18
+ /**
19
+ * 路由初始化后
20
+ */
21
+ AFTER_INIT = "after-init",
22
+ /**
23
+ * 路由转换前
24
+ */
25
+ BEFORE_TRANSFORM = "before-transform",
26
+ /**
27
+ * 路由转换后
28
+ */
29
+ AFTER_TRANSFORM = "after-transform",
30
+ /**
31
+ * 路由匹配前
32
+ */
33
+ BEFORE_MATCH = "before-match",
34
+ /**
35
+ * 路由匹配后
36
+ */
37
+ AFTER_MATCH = "after-match",
38
+ /**
39
+ * 插件销毁阶段
40
+ */
41
+ DESTROY = "destroy"
42
+ }
43
+ /**
44
+ * 插件上下文
45
+ */
46
+ export interface PluginContext {
47
+ /**
48
+ * 路由配置
49
+ */
50
+ config: RouterConfig;
51
+ /**
52
+ * 转换后的路由
53
+ */
54
+ routes?: RouteConfig[];
55
+ /**
56
+ * 中间件上下文(在路由匹配时可用)
57
+ */
58
+ middlewareContext?: RouterMiddlewareContext;
59
+ /**
60
+ * 插件元数据
61
+ */
62
+ meta?: Record<string, unknown>;
63
+ }
64
+ /**
65
+ * 插件钩子函数
66
+ */
67
+ export type PluginHook = (context: PluginContext) => void | Promise<void>;
68
+ /**
69
+ * 路由插件接口
70
+ */
71
+ export interface RouterPlugin {
72
+ /**
73
+ * 插件名称(唯一标识)
74
+ */
75
+ name: string;
76
+ /**
77
+ * 插件版本
78
+ */
79
+ version?: string;
80
+ /**
81
+ * 插件描述
82
+ */
83
+ description?: string;
84
+ /**
85
+ * 插件优先级(数字越小优先级越高)
86
+ * @default 100
87
+ */
88
+ priority?: number;
89
+ /**
90
+ * 是否启用
91
+ * @default true
92
+ */
93
+ enabled?: boolean;
94
+ /**
95
+ * 插件依赖(其他插件名称列表)
96
+ */
97
+ dependencies?: string[];
98
+ /**
99
+ * 插件配置
100
+ */
101
+ config?: Record<string, unknown>;
102
+ /**
103
+ * 生命周期钩子
104
+ */
105
+ hooks?: {
106
+ /**
107
+ * 插件注册时调用
108
+ */
109
+ onRegister?: PluginHook;
110
+ /**
111
+ * 路由初始化前调用
112
+ */
113
+ onBeforeInit?: PluginHook;
114
+ /**
115
+ * 路由初始化后调用
116
+ */
117
+ onAfterInit?: PluginHook;
118
+ /**
119
+ * 路由转换前调用
120
+ */
121
+ onBeforeTransform?: PluginHook;
122
+ /**
123
+ * 路由转换后调用
124
+ */
125
+ onAfterTransform?: PluginHook;
126
+ /**
127
+ * 路由匹配前调用
128
+ */
129
+ onBeforeMatch?: PluginHook;
130
+ /**
131
+ * 路由匹配后调用
132
+ */
133
+ onAfterMatch?: PluginHook;
134
+ /**
135
+ * 插件销毁时调用
136
+ */
137
+ onDestroy?: PluginHook;
138
+ };
139
+ }
140
+ /**
141
+ * 插件注册选项
142
+ */
143
+ export interface PluginRegisterOptions {
144
+ /**
145
+ * 是否覆盖已存在的插件
146
+ * @default false
147
+ */
148
+ overwrite?: boolean;
149
+ /**
150
+ * 插件配置
151
+ */
152
+ config?: Record<string, unknown>;
153
+ }
@@ -0,0 +1 @@
1
+ export var PluginLifecycleStage=/*#__PURE__*/function(PluginLifecycleStage){PluginLifecycleStage["REGISTER"]="register";PluginLifecycleStage["BEFORE_INIT"]="before-init";PluginLifecycleStage["AFTER_INIT"]="after-init";PluginLifecycleStage["BEFORE_TRANSFORM"]="before-transform";PluginLifecycleStage["AFTER_TRANSFORM"]="after-transform";PluginLifecycleStage["BEFORE_MATCH"]="before-match";PluginLifecycleStage["AFTER_MATCH"]="after-match";PluginLifecycleStage["DESTROY"]="destroy";return PluginLifecycleStage}({});
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});