@vlian/framework 1.2.1 → 1.2.18

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 (456) hide show
  1. package/dist/analytics/index.cjs +24 -0
  2. package/dist/analytics/index.cjs.map +1 -0
  3. package/dist/analytics/index.d.ts +2 -0
  4. package/dist/analytics/index.js +3 -0
  5. package/dist/analytics/index.js.map +1 -0
  6. package/dist/analytics.umd.js +2406 -0
  7. package/dist/analytics.umd.js.map +1 -0
  8. package/dist/components/LocaleSwitch.cjs +118 -0
  9. package/dist/components/LocaleSwitch.cjs.map +1 -0
  10. package/dist/components/LocaleSwitch.d.ts +21 -0
  11. package/dist/components/LocaleSwitch.js +103 -0
  12. package/dist/components/LocaleSwitch.js.map +1 -0
  13. package/dist/components/ThemeSwitch.cjs +117 -0
  14. package/dist/components/ThemeSwitch.cjs.map +1 -0
  15. package/dist/components/ThemeSwitch.d.ts +20 -0
  16. package/dist/components/ThemeSwitch.js +102 -0
  17. package/dist/components/ThemeSwitch.js.map +1 -0
  18. package/dist/components/index.cjs +16 -0
  19. package/dist/components/index.cjs.map +1 -1
  20. package/dist/components/index.d.ts +5 -2
  21. package/dist/components/index.js +2 -1
  22. package/dist/components/index.js.map +1 -1
  23. package/dist/components/persistence.cjs +60 -0
  24. package/dist/components/persistence.cjs.map +1 -0
  25. package/dist/components/persistence.d.ts +12 -0
  26. package/dist/components/persistence.js +39 -0
  27. package/dist/components/persistence.js.map +1 -0
  28. package/dist/core/Test.d.ts +0 -1
  29. package/dist/core/app/AppContext.cjs +36 -30
  30. package/dist/core/app/AppContext.cjs.map +1 -1
  31. package/dist/core/app/AppContext.d.ts +9 -6
  32. package/dist/core/app/AppContext.js +36 -30
  33. package/dist/core/app/AppContext.js.map +1 -1
  34. package/dist/core/app/AppContext.types.d.ts +9 -10
  35. package/dist/core/app/AppContext.types.js.map +1 -1
  36. package/dist/core/app/BasicLayout.cjs +57 -22
  37. package/dist/core/app/BasicLayout.cjs.map +1 -1
  38. package/dist/core/app/BasicLayout.d.ts +7 -5
  39. package/dist/core/app/BasicLayout.js +57 -22
  40. package/dist/core/app/BasicLayout.js.map +1 -1
  41. package/dist/core/app/DefaultApp.cjs +104 -153
  42. package/dist/core/app/DefaultApp.cjs.map +1 -1
  43. package/dist/core/app/DefaultApp.d.ts +0 -21
  44. package/dist/core/app/DefaultApp.js +104 -153
  45. package/dist/core/app/DefaultApp.js.map +1 -1
  46. package/dist/core/app/index.d.ts +0 -1
  47. package/dist/core/config/AppConfig.cjs.map +1 -1
  48. package/dist/core/config/AppConfig.d.ts +3 -4
  49. package/dist/core/config/AppConfig.js.map +1 -1
  50. package/dist/core/config/ConfigLoader.d.ts +0 -1
  51. package/dist/core/config/ConfigValidator.d.ts +0 -1
  52. package/dist/core/config/index.d.ts +0 -1
  53. package/dist/core/dev/DevTools.cjs +141 -287
  54. package/dist/core/dev/DevTools.cjs.map +1 -1
  55. package/dist/core/dev/DevTools.d.ts +1 -32
  56. package/dist/core/dev/DevTools.js +143 -296
  57. package/dist/core/dev/DevTools.js.map +1 -1
  58. package/dist/core/error/ErrorBoundary.cjs +72 -14
  59. package/dist/core/error/ErrorBoundary.cjs.map +1 -1
  60. package/dist/core/error/ErrorBoundary.d.ts +7 -9
  61. package/dist/core/error/ErrorBoundary.js +73 -15
  62. package/dist/core/error/ErrorBoundary.js.map +1 -1
  63. package/dist/core/error/ErrorHandler.d.ts +0 -1
  64. package/dist/core/error/index.d.ts +0 -1
  65. package/dist/core/event/AppEventBus.d.ts +0 -1
  66. package/dist/core/event/frameworkEvents.d.ts +0 -1
  67. package/dist/core/event/hooks.d.ts +0 -1
  68. package/dist/core/event/index.d.ts +0 -1
  69. package/dist/core/event/types.d.ts +0 -1
  70. package/dist/core/event/useEventBus.d.ts +0 -1
  71. package/dist/core/index.cjs +2 -0
  72. package/dist/core/index.cjs.map +1 -1
  73. package/dist/core/index.d.ts +2 -1
  74. package/dist/core/index.js +2 -0
  75. package/dist/core/index.js.map +1 -1
  76. package/dist/core/initialization/InitializationErrorThrower.d.ts +0 -1
  77. package/dist/core/initialization/index.d.ts +0 -1
  78. package/dist/core/initialization/initialization.d.ts +0 -1
  79. package/dist/core/initialization/initializationErrorState.d.ts +0 -1
  80. package/dist/core/kernel/defaultAdapters.cjs +185 -0
  81. package/dist/core/kernel/defaultAdapters.cjs.map +1 -0
  82. package/dist/core/kernel/defaultAdapters.d.ts +2 -0
  83. package/dist/core/kernel/defaultAdapters.js +175 -0
  84. package/dist/core/kernel/defaultAdapters.js.map +1 -0
  85. package/dist/core/kernel/errors.cjs +71 -0
  86. package/dist/core/kernel/errors.cjs.map +1 -0
  87. package/dist/core/kernel/errors.d.ts +18 -0
  88. package/dist/core/kernel/errors.js +53 -0
  89. package/dist/core/kernel/errors.js.map +1 -0
  90. package/dist/core/kernel/index.cjs +22 -0
  91. package/dist/core/kernel/index.cjs.map +1 -0
  92. package/dist/core/kernel/index.d.ts +3 -0
  93. package/dist/core/kernel/index.js +4 -0
  94. package/dist/core/kernel/index.js.map +1 -0
  95. package/dist/core/kernel/startKernel.cjs +203 -0
  96. package/dist/core/kernel/startKernel.cjs.map +1 -0
  97. package/dist/core/kernel/startKernel.d.ts +2 -0
  98. package/dist/core/kernel/startKernel.js +193 -0
  99. package/dist/core/kernel/startKernel.js.map +1 -0
  100. package/dist/core/kernel/types.cjs +6 -0
  101. package/dist/core/kernel/types.cjs.map +1 -0
  102. package/dist/core/kernel/types.d.ts +114 -0
  103. package/dist/core/kernel/types.js +3 -0
  104. package/dist/core/kernel/types.js.map +1 -0
  105. package/dist/core/middleware.d.ts +0 -1
  106. package/dist/core/plugin/PluginEventBus.d.ts +0 -1
  107. package/dist/core/plugin/PluginSandbox.d.ts +0 -1
  108. package/dist/core/plugin.cjs +1 -1
  109. package/dist/core/plugin.cjs.map +1 -1
  110. package/dist/core/plugin.d.ts +0 -1
  111. package/dist/core/plugin.js +1 -1
  112. package/dist/core/plugin.js.map +1 -1
  113. package/dist/core/router/RouterManager.cjs +32 -2
  114. package/dist/core/router/RouterManager.cjs.map +1 -1
  115. package/dist/core/router/RouterManager.d.ts +5 -1
  116. package/dist/core/router/RouterManager.js +33 -3
  117. package/dist/core/router/RouterManager.js.map +1 -1
  118. package/dist/core/router/adapter/AdapterManager.d.ts +0 -1
  119. package/dist/core/router/adapter/index.d.ts +0 -1
  120. package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs.map +1 -1
  121. package/dist/core/router/adapter/react-router/ReactRouterAdapter.d.ts +0 -1
  122. package/dist/core/router/adapter/react-router/ReactRouterAdapter.js.map +1 -1
  123. package/dist/core/router/adapter/react-router/index.d.ts +0 -1
  124. package/dist/core/router/adapter/types.cjs.map +1 -1
  125. package/dist/core/router/adapter/types.d.ts +1 -2
  126. package/dist/core/router/adapter/types.js.map +1 -1
  127. package/dist/core/router/dev/RouterDevTools.cjs +148 -296
  128. package/dist/core/router/dev/RouterDevTools.cjs.map +1 -1
  129. package/dist/core/router/dev/RouterDevTools.d.ts +1 -6
  130. package/dist/core/router/dev/RouterDevTools.js +149 -301
  131. package/dist/core/router/dev/RouterDevTools.js.map +1 -1
  132. package/dist/core/router/dev/index.d.ts +0 -1
  133. package/dist/core/router/dynamic/DynamicRouteManager.d.ts +0 -1
  134. package/dist/core/router/dynamic/index.d.ts +0 -1
  135. package/dist/core/router/errors/RouterError.d.ts +0 -1
  136. package/dist/core/router/errors/index.d.ts +0 -1
  137. package/dist/core/router/index.d.ts +0 -1
  138. package/dist/core/router/lifecycle/RouterLifecycleManager.d.ts +0 -1
  139. package/dist/core/router/lifecycle/index.d.ts +0 -1
  140. package/dist/core/router/middleware/RouterMiddlewareManager.cjs +24 -4
  141. package/dist/core/router/middleware/RouterMiddlewareManager.cjs.map +1 -1
  142. package/dist/core/router/middleware/RouterMiddlewareManager.d.ts +1 -1
  143. package/dist/core/router/middleware/RouterMiddlewareManager.js +24 -4
  144. package/dist/core/router/middleware/RouterMiddlewareManager.js.map +1 -1
  145. package/dist/core/router/middleware/auth.d.ts +0 -1
  146. package/dist/core/router/middleware/index.d.ts +0 -1
  147. package/dist/core/router/middleware/types.cjs.map +1 -1
  148. package/dist/core/router/middleware/types.d.ts +1 -2
  149. package/dist/core/router/middleware/types.js.map +1 -1
  150. package/dist/core/router/monitoring/RouterMonitoring.d.ts +0 -1
  151. package/dist/core/router/monitoring/index.d.ts +0 -1
  152. package/dist/core/router/navigation/RouterNavigation.cjs +69 -14
  153. package/dist/core/router/navigation/RouterNavigation.cjs.map +1 -1
  154. package/dist/core/router/navigation/RouterNavigation.d.ts +3 -1
  155. package/dist/core/router/navigation/RouterNavigation.js +69 -14
  156. package/dist/core/router/navigation/RouterNavigation.js.map +1 -1
  157. package/dist/core/router/navigation/index.d.ts +0 -1
  158. package/dist/core/router/performance/RouteCache.cjs +34 -13
  159. package/dist/core/router/performance/RouteCache.cjs.map +1 -1
  160. package/dist/core/router/performance/RouteCache.d.ts +8 -3
  161. package/dist/core/router/performance/RouteCache.js +34 -13
  162. package/dist/core/router/performance/RouteCache.js.map +1 -1
  163. package/dist/core/router/performance/RoutePreloader.cjs +89 -22
  164. package/dist/core/router/performance/RoutePreloader.cjs.map +1 -1
  165. package/dist/core/router/performance/RoutePreloader.d.ts +9 -2
  166. package/dist/core/router/performance/RoutePreloader.js +89 -22
  167. package/dist/core/router/performance/RoutePreloader.js.map +1 -1
  168. package/dist/core/router/performance/index.d.ts +0 -1
  169. package/dist/core/router/plugin/RouterPluginManager.d.ts +0 -1
  170. package/dist/core/router/plugin/index.d.ts +0 -1
  171. package/dist/core/router/plugin/types.d.ts +0 -1
  172. package/dist/core/router/types.d.ts +23 -7
  173. package/dist/core/router/types.js.map +1 -1
  174. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs +90 -103
  175. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs.map +1 -1
  176. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.d.ts +0 -1
  177. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js +91 -104
  178. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js.map +1 -1
  179. package/dist/core/router/utils/adapters/react-router/transform.cjs +45 -63
  180. package/dist/core/router/utils/adapters/react-router/transform.cjs.map +1 -1
  181. package/dist/core/router/utils/adapters/react-router/transform.d.ts +0 -1
  182. package/dist/core/router/utils/adapters/react-router/transform.js +46 -59
  183. package/dist/core/router/utils/adapters/react-router/transform.js.map +1 -1
  184. package/dist/core/router/utils/transform.cjs +80 -71
  185. package/dist/core/router/utils/transform.cjs.map +1 -1
  186. package/dist/core/router/utils/transform.d.ts +1 -2
  187. package/dist/core/router/utils/transform.js +81 -72
  188. package/dist/core/router/utils/transform.js.map +1 -1
  189. package/dist/core/router/validation/RouterConfigValidator.d.ts +66 -5
  190. package/dist/core/router/validation/index.d.ts +0 -1
  191. package/dist/core/router/validation/schema.cjs +71 -2
  192. package/dist/core/router/validation/schema.cjs.map +1 -1
  193. package/dist/core/router/validation/schema.d.ts +102 -7
  194. package/dist/core/router/validation/schema.js +71 -2
  195. package/dist/core/router/validation/schema.js.map +1 -1
  196. package/dist/core/router/version/RouteVersionManager.d.ts +0 -1
  197. package/dist/core/router/version/index.d.ts +0 -1
  198. package/dist/core/splash/SplashScreen.cjs +101 -15
  199. package/dist/core/splash/SplashScreen.cjs.map +1 -1
  200. package/dist/core/splash/SplashScreen.d.ts +0 -1
  201. package/dist/core/splash/SplashScreen.js +101 -15
  202. package/dist/core/splash/SplashScreen.js.map +1 -1
  203. package/dist/core/splash/index.d.ts +0 -1
  204. package/dist/core/splash/splashScreenUtils.d.ts +0 -1
  205. package/dist/core/startup/AppInstance.d.ts +0 -1
  206. package/dist/core/startup/environment.d.ts +0 -1
  207. package/dist/core/startup/index.d.ts +0 -1
  208. package/dist/core/startup/initializeServices.d.ts +0 -1
  209. package/dist/core/startup/performanceTracker.d.ts +0 -1
  210. package/dist/core/startup/renderApp.cjs +12 -10
  211. package/dist/core/startup/renderApp.cjs.map +1 -1
  212. package/dist/core/startup/renderApp.d.ts +0 -1
  213. package/dist/core/startup/renderApp.js +12 -10
  214. package/dist/core/startup/renderApp.js.map +1 -1
  215. package/dist/core/startup/startApp.cjs +118 -13
  216. package/dist/core/startup/startApp.cjs.map +1 -1
  217. package/dist/core/startup/startApp.d.ts +0 -1
  218. package/dist/core/startup/startApp.js +118 -13
  219. package/dist/core/startup/startApp.js.map +1 -1
  220. package/dist/core/types.d.ts +34 -21
  221. package/dist/core/types.js.map +1 -1
  222. package/dist/core/ui-adapter/adapters.cjs +45 -0
  223. package/dist/core/ui-adapter/adapters.cjs.map +1 -0
  224. package/dist/core/ui-adapter/adapters.d.ts +4 -0
  225. package/dist/core/ui-adapter/adapters.js +27 -0
  226. package/dist/core/ui-adapter/adapters.js.map +1 -0
  227. package/dist/core/ui-adapter/index.cjs +21 -0
  228. package/dist/core/ui-adapter/index.cjs.map +1 -0
  229. package/dist/core/ui-adapter/index.d.ts +2 -0
  230. package/dist/core/ui-adapter/index.js +3 -0
  231. package/dist/core/ui-adapter/index.js.map +1 -0
  232. package/dist/core/ui-adapter/types.cjs +6 -0
  233. package/dist/core/ui-adapter/types.cjs.map +1 -0
  234. package/dist/core/ui-adapter/types.d.ts +24 -0
  235. package/dist/core/ui-adapter/types.js +3 -0
  236. package/dist/core/ui-adapter/types.js.map +1 -0
  237. package/dist/index.cjs +1 -0
  238. package/dist/index.cjs.map +1 -1
  239. package/dist/index.d.ts +1 -1
  240. package/dist/index.js +1 -0
  241. package/dist/index.js.map +1 -1
  242. package/dist/index.umd.d.ts +0 -1
  243. package/dist/index.umd.js +7684 -6056
  244. package/dist/index.umd.js.map +1 -1
  245. package/dist/library/index.d.ts +0 -1
  246. package/dist/library/locale/index.d.ts +0 -1
  247. package/dist/library/locale/langs/en-us/index.d.ts +0 -1
  248. package/dist/library/locale/langs/zh-cn/index.d.ts +0 -1
  249. package/dist/library/locale/types.d.ts +0 -1
  250. package/dist/library/storage/cache.d.ts +0 -1
  251. package/dist/library/storage/encryption.d.ts +0 -1
  252. package/dist/library/storage/index.d.ts +0 -1
  253. package/dist/request/adapter/RequestAdapter.d.ts +0 -1
  254. package/dist/request/adapter/axiosAdapter.d.ts +0 -1
  255. package/dist/request/adapter/fetchAdapter.d.ts +0 -1
  256. package/dist/request/adapter/index.d.ts +0 -1
  257. package/dist/request/adapter/kyAdapter.d.ts +0 -1
  258. package/dist/request/adapter/undiciAdapter.d.ts +0 -1
  259. package/dist/request/core/RequestClient.d.ts +0 -1
  260. package/dist/request/core/index.d.ts +0 -1
  261. package/dist/request/index.d.ts +0 -1
  262. package/dist/request/plugin/RequestPlugin.d.ts +0 -1
  263. package/dist/request/plugin/cache.d.ts +0 -1
  264. package/dist/request/plugin/csrfPlugin.d.ts +0 -1
  265. package/dist/request/plugin/index.d.ts +0 -1
  266. package/dist/request/plugin/monitoring.d.ts +0 -1
  267. package/dist/request/plugin/queue.d.ts +0 -1
  268. package/dist/request/plugin/retry.d.ts +0 -1
  269. package/dist/request/plugin/validation.d.ts +0 -1
  270. package/dist/request/runtime/RequestContext.d.ts +0 -1
  271. package/dist/request/runtime/index.d.ts +0 -1
  272. package/dist/request/types.d.ts +0 -1
  273. package/dist/request/utils/RequestQueueManager.d.ts +0 -1
  274. package/dist/request/utils/dependencyCheck.d.ts +0 -1
  275. package/dist/request/utils/index.d.ts +0 -1
  276. package/dist/request.umd.js +5392 -0
  277. package/dist/request.umd.js.map +1 -0
  278. package/dist/state/StateManager.d.ts +0 -1
  279. package/dist/state/adapters/AdapterFactory.d.ts +0 -1
  280. package/dist/state/adapters/DefaultAdapter.d.ts +0 -1
  281. package/dist/state/adapters/ReduxAdapter.d.ts +0 -1
  282. package/dist/state/adapters/ZustandAdapter.d.ts +0 -1
  283. package/dist/state/adapters/index.d.ts +0 -1
  284. package/dist/state/adapters/types.d.ts +0 -1
  285. package/dist/state/core/DerivedStateInstance.d.ts +0 -1
  286. package/dist/state/core/StateInstance.d.ts +0 -1
  287. package/dist/state/core/StateRegistry.d.ts +0 -1
  288. package/dist/state/core/StateScope.d.ts +0 -1
  289. package/dist/state/core/index.d.ts +0 -1
  290. package/dist/state/index.d.ts +0 -1
  291. package/dist/state/types.d.ts +0 -1
  292. package/dist/state.umd.js +1414 -0
  293. package/dist/state.umd.js.map +1 -0
  294. package/dist/types.d.ts +0 -1
  295. package/dist/utils/analytics.d.ts +0 -1
  296. package/dist/utils/configSecurity.d.ts +0 -1
  297. package/dist/utils/csrf.d.ts +0 -1
  298. package/dist/utils/errors/ErrorCodes.d.ts +0 -1
  299. package/dist/utils/errors.cjs +44 -1
  300. package/dist/utils/errors.cjs.map +1 -1
  301. package/dist/utils/errors.d.ts +5 -1
  302. package/dist/utils/errors.js +44 -1
  303. package/dist/utils/errors.js.map +1 -1
  304. package/dist/utils/index.d.ts +0 -1
  305. package/dist/utils/logger.d.ts +0 -1
  306. package/dist/utils/logger.types.d.ts +0 -1
  307. package/dist/utils/monitoring.d.ts +0 -1
  308. package/dist/utils/performance.d.ts +0 -1
  309. package/dist/utils/resourceLoader.d.ts +0 -1
  310. package/dist/utils/runtimeSecurity.d.ts +0 -1
  311. package/dist/utils/security.d.ts +0 -1
  312. package/dist/utils/traceId.d.ts +0 -1
  313. package/dist/utils/validation.d.ts +0 -1
  314. package/package.json +24 -9
  315. package/dist/components/index.d.ts.map +0 -1
  316. package/dist/core/Test.d.ts.map +0 -1
  317. package/dist/core/app/AppContext.d.ts.map +0 -1
  318. package/dist/core/app/AppContext.types.d.ts.map +0 -1
  319. package/dist/core/app/BasicLayout.d.ts.map +0 -1
  320. package/dist/core/app/DefaultApp.d.ts.map +0 -1
  321. package/dist/core/app/index.d.ts.map +0 -1
  322. package/dist/core/config/AppConfig.d.ts.map +0 -1
  323. package/dist/core/config/ConfigLoader.d.ts.map +0 -1
  324. package/dist/core/config/ConfigValidator.d.ts.map +0 -1
  325. package/dist/core/config/index.d.ts.map +0 -1
  326. package/dist/core/dev/DevTools.d.ts.map +0 -1
  327. package/dist/core/error/ErrorBoundary.d.ts.map +0 -1
  328. package/dist/core/error/ErrorHandler.d.ts.map +0 -1
  329. package/dist/core/error/index.d.ts.map +0 -1
  330. package/dist/core/event/AppEventBus.d.ts.map +0 -1
  331. package/dist/core/event/frameworkEvents.d.ts.map +0 -1
  332. package/dist/core/event/hooks.d.ts.map +0 -1
  333. package/dist/core/event/index.d.ts.map +0 -1
  334. package/dist/core/event/types.d.ts.map +0 -1
  335. package/dist/core/event/useEventBus.d.ts.map +0 -1
  336. package/dist/core/index.d.ts.map +0 -1
  337. package/dist/core/initialization/InitializationErrorThrower.d.ts.map +0 -1
  338. package/dist/core/initialization/index.d.ts.map +0 -1
  339. package/dist/core/initialization/initialization.d.ts.map +0 -1
  340. package/dist/core/initialization/initializationErrorState.d.ts.map +0 -1
  341. package/dist/core/middleware.d.ts.map +0 -1
  342. package/dist/core/plugin/PluginEventBus.d.ts.map +0 -1
  343. package/dist/core/plugin/PluginSandbox.d.ts.map +0 -1
  344. package/dist/core/plugin.d.ts.map +0 -1
  345. package/dist/core/router/RouterManager.d.ts.map +0 -1
  346. package/dist/core/router/adapter/AdapterManager.d.ts.map +0 -1
  347. package/dist/core/router/adapter/index.d.ts.map +0 -1
  348. package/dist/core/router/adapter/react-router/ReactRouterAdapter.d.ts.map +0 -1
  349. package/dist/core/router/adapter/react-router/index.d.ts.map +0 -1
  350. package/dist/core/router/adapter/types.d.ts.map +0 -1
  351. package/dist/core/router/dev/RouterDevTools.d.ts.map +0 -1
  352. package/dist/core/router/dev/index.d.ts.map +0 -1
  353. package/dist/core/router/dynamic/DynamicRouteManager.d.ts.map +0 -1
  354. package/dist/core/router/dynamic/index.d.ts.map +0 -1
  355. package/dist/core/router/errors/RouterError.d.ts.map +0 -1
  356. package/dist/core/router/errors/index.d.ts.map +0 -1
  357. package/dist/core/router/index.d.ts.map +0 -1
  358. package/dist/core/router/lifecycle/RouterLifecycleManager.d.ts.map +0 -1
  359. package/dist/core/router/lifecycle/index.d.ts.map +0 -1
  360. package/dist/core/router/middleware/RouterMiddlewareManager.d.ts.map +0 -1
  361. package/dist/core/router/middleware/auth.d.ts.map +0 -1
  362. package/dist/core/router/middleware/index.d.ts.map +0 -1
  363. package/dist/core/router/middleware/types.d.ts.map +0 -1
  364. package/dist/core/router/monitoring/RouterMonitoring.d.ts.map +0 -1
  365. package/dist/core/router/monitoring/index.d.ts.map +0 -1
  366. package/dist/core/router/navigation/RouterNavigation.d.ts.map +0 -1
  367. package/dist/core/router/navigation/index.d.ts.map +0 -1
  368. package/dist/core/router/performance/RouteCache.d.ts.map +0 -1
  369. package/dist/core/router/performance/RoutePreloader.d.ts.map +0 -1
  370. package/dist/core/router/performance/index.d.ts.map +0 -1
  371. package/dist/core/router/plugin/RouterPluginManager.d.ts.map +0 -1
  372. package/dist/core/router/plugin/index.d.ts.map +0 -1
  373. package/dist/core/router/plugin/types.d.ts.map +0 -1
  374. package/dist/core/router/types.d.ts.map +0 -1
  375. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.d.ts.map +0 -1
  376. package/dist/core/router/utils/adapters/react-router/transform.d.ts.map +0 -1
  377. package/dist/core/router/utils/transform.d.ts.map +0 -1
  378. package/dist/core/router/validation/RouterConfigValidator.d.ts.map +0 -1
  379. package/dist/core/router/validation/index.d.ts.map +0 -1
  380. package/dist/core/router/validation/schema.d.ts.map +0 -1
  381. package/dist/core/router/version/RouteVersionManager.d.ts.map +0 -1
  382. package/dist/core/router/version/index.d.ts.map +0 -1
  383. package/dist/core/splash/SplashScreen.d.ts.map +0 -1
  384. package/dist/core/splash/index.d.ts.map +0 -1
  385. package/dist/core/splash/splashScreenUtils.d.ts.map +0 -1
  386. package/dist/core/startup/AppInstance.d.ts.map +0 -1
  387. package/dist/core/startup/environment.d.ts.map +0 -1
  388. package/dist/core/startup/index.d.ts.map +0 -1
  389. package/dist/core/startup/initializeServices.d.ts.map +0 -1
  390. package/dist/core/startup/performanceTracker.d.ts.map +0 -1
  391. package/dist/core/startup/renderApp.d.ts.map +0 -1
  392. package/dist/core/startup/startApp.d.ts.map +0 -1
  393. package/dist/core/types.d.ts.map +0 -1
  394. package/dist/index.d.ts.map +0 -1
  395. package/dist/index.umd.d.ts.map +0 -1
  396. package/dist/library/index.d.ts.map +0 -1
  397. package/dist/library/locale/index.d.ts.map +0 -1
  398. package/dist/library/locale/langs/en-us/index.d.ts.map +0 -1
  399. package/dist/library/locale/langs/zh-cn/index.d.ts.map +0 -1
  400. package/dist/library/locale/types.d.ts.map +0 -1
  401. package/dist/library/storage/cache.d.ts.map +0 -1
  402. package/dist/library/storage/encryption.d.ts.map +0 -1
  403. package/dist/library/storage/index.d.ts.map +0 -1
  404. package/dist/request/adapter/RequestAdapter.d.ts.map +0 -1
  405. package/dist/request/adapter/axiosAdapter.d.ts.map +0 -1
  406. package/dist/request/adapter/fetchAdapter.d.ts.map +0 -1
  407. package/dist/request/adapter/index.d.ts.map +0 -1
  408. package/dist/request/adapter/kyAdapter.d.ts.map +0 -1
  409. package/dist/request/adapter/undiciAdapter.d.ts.map +0 -1
  410. package/dist/request/core/RequestClient.d.ts.map +0 -1
  411. package/dist/request/core/index.d.ts.map +0 -1
  412. package/dist/request/index.d.ts.map +0 -1
  413. package/dist/request/plugin/RequestPlugin.d.ts.map +0 -1
  414. package/dist/request/plugin/cache.d.ts.map +0 -1
  415. package/dist/request/plugin/csrfPlugin.d.ts.map +0 -1
  416. package/dist/request/plugin/index.d.ts.map +0 -1
  417. package/dist/request/plugin/monitoring.d.ts.map +0 -1
  418. package/dist/request/plugin/queue.d.ts.map +0 -1
  419. package/dist/request/plugin/retry.d.ts.map +0 -1
  420. package/dist/request/plugin/validation.d.ts.map +0 -1
  421. package/dist/request/runtime/RequestContext.d.ts.map +0 -1
  422. package/dist/request/runtime/index.d.ts.map +0 -1
  423. package/dist/request/types.d.ts.map +0 -1
  424. package/dist/request/utils/RequestQueueManager.d.ts.map +0 -1
  425. package/dist/request/utils/dependencyCheck.d.ts.map +0 -1
  426. package/dist/request/utils/index.d.ts.map +0 -1
  427. package/dist/state/StateManager.d.ts.map +0 -1
  428. package/dist/state/adapters/AdapterFactory.d.ts.map +0 -1
  429. package/dist/state/adapters/DefaultAdapter.d.ts.map +0 -1
  430. package/dist/state/adapters/ReduxAdapter.d.ts.map +0 -1
  431. package/dist/state/adapters/ZustandAdapter.d.ts.map +0 -1
  432. package/dist/state/adapters/index.d.ts.map +0 -1
  433. package/dist/state/adapters/types.d.ts.map +0 -1
  434. package/dist/state/core/DerivedStateInstance.d.ts.map +0 -1
  435. package/dist/state/core/StateInstance.d.ts.map +0 -1
  436. package/dist/state/core/StateRegistry.d.ts.map +0 -1
  437. package/dist/state/core/StateScope.d.ts.map +0 -1
  438. package/dist/state/core/index.d.ts.map +0 -1
  439. package/dist/state/index.d.ts.map +0 -1
  440. package/dist/state/types.d.ts.map +0 -1
  441. package/dist/types.d.ts.map +0 -1
  442. package/dist/utils/analytics.d.ts.map +0 -1
  443. package/dist/utils/configSecurity.d.ts.map +0 -1
  444. package/dist/utils/csrf.d.ts.map +0 -1
  445. package/dist/utils/errors/ErrorCodes.d.ts.map +0 -1
  446. package/dist/utils/errors.d.ts.map +0 -1
  447. package/dist/utils/index.d.ts.map +0 -1
  448. package/dist/utils/logger.d.ts.map +0 -1
  449. package/dist/utils/logger.types.d.ts.map +0 -1
  450. package/dist/utils/monitoring.d.ts.map +0 -1
  451. package/dist/utils/performance.d.ts.map +0 -1
  452. package/dist/utils/resourceLoader.d.ts.map +0 -1
  453. package/dist/utils/runtimeSecurity.d.ts.map +0 -1
  454. package/dist/utils/security.d.ts.map +0 -1
  455. package/dist/utils/traceId.d.ts.map +0 -1
  456. package/dist/utils/validation.d.ts.map +0 -1
@@ -109,16 +109,35 @@ let RouterMiddlewareManager = class RouterMiddlewareManager {
109
109
  for (const middlewareConfig of enabledMiddlewares){
110
110
  try {
111
111
  const result = await middlewareConfig.middleware(context);
112
- // 如果中间件返回 false 或包含 allow: false,阻止导航
113
- if (typeof result === 'object' && result.allow === false) {
114
- _utils.logger.debug(`路由中间件阻止导航: ${middlewareConfig.name || 'anonymous'}`, result);
115
- return typeof result === 'object' ? result : {
112
+ // 如果中间件返回 false,阻止导航
113
+ if (result === false) {
114
+ _utils.logger.debug(`路由中间件阻止导航: ${middlewareConfig.name || 'anonymous'} -> false`);
115
+ return {
116
116
  allow: false,
117
117
  reason: '中间件返回 false'
118
118
  };
119
119
  }
120
+ // 如果中间件返回对象且 allow: false,阻止导航
121
+ if (typeof result === 'object' && result !== null && result.allow === false) {
122
+ _utils.logger.debug(`路由中间件阻止导航: ${middlewareConfig.name || 'anonymous'}`, result);
123
+ if (result.redirect && !RouterMiddlewareManager.SAFE_REDIRECT_PATH_REGEX.test(result.redirect)) {
124
+ _utils.logger.warn(`路由中间件返回了不安全的重定向地址,已拦截: ${middlewareConfig.name || 'anonymous'} -> ${result.redirect}`);
125
+ return {
126
+ allow: false,
127
+ reason: '中间件返回了不安全的重定向地址'
128
+ };
129
+ }
130
+ return result;
131
+ }
120
132
  // 如果中间件返回字符串,重定向到该路径
121
133
  if (typeof result === 'string') {
134
+ if (!RouterMiddlewareManager.SAFE_REDIRECT_PATH_REGEX.test(result)) {
135
+ _utils.logger.warn(`路由中间件返回了不安全的重定向地址,已拦截: ${middlewareConfig.name || 'anonymous'} -> ${result}`);
136
+ return {
137
+ allow: false,
138
+ reason: '中间件返回了不安全的重定向地址'
139
+ };
140
+ }
122
141
  _utils.logger.debug(`路由中间件重定向: ${middlewareConfig.name || 'anonymous'} -> ${result}`);
123
142
  return {
124
143
  allow: false,
@@ -162,6 +181,7 @@ let RouterMiddlewareManager = class RouterMiddlewareManager {
162
181
  _define_property(this, "middlewares", []);
163
182
  }
164
183
  };
184
+ _define_property(RouterMiddlewareManager, "SAFE_REDIRECT_PATH_REGEX", /^(\/|\.\/|\.\.\/|#)/);
165
185
  /**
166
186
  * 获取路由中间件管理器单例
167
187
  */ let middlewareManagerInstance = null;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/router/middleware/RouterMiddlewareManager.ts"],"sourcesContent":["/**\n * 路由中间件管理器\n * 负责管理路由中间件的注册、执行和生命周期\n */\n\nimport { logger } from '../../../utils';\nimport type {\n RouterMiddlewareConfig,\n RouterMiddlewareContext,\n RouterMiddlewareResult,\n} from './types';\n\n/**\n * 路由中间件管理器\n */\nexport class RouterMiddlewareManager {\n private middlewares: RouterMiddlewareConfig[] = [];\n\n /**\n * 注册中间件\n * \n * @param config - 中间件配置\n * @returns 取消注册函数\n */\n register(config: RouterMiddlewareConfig): () => void {\n // 验证中间件配置\n if (!config.middleware || typeof config.middleware !== 'function') {\n throw new Error('中间件必须是一个函数');\n }\n\n // 设置默认值\n const middlewareConfig: RouterMiddlewareConfig = {\n priority: 100,\n enabled: true,\n ...config,\n };\n\n // 添加到中间件列表\n this.middlewares.push(middlewareConfig);\n\n // 按优先级排序\n this.middlewares.sort((a, b) => (a.priority || 100) - (b.priority || 100));\n\n logger.debug(`路由中间件已注册: ${middlewareConfig.name || 'anonymous'}`);\n\n // 返回取消注册函数\n return () => {\n const index = this.middlewares.indexOf(middlewareConfig);\n if (index > -1) {\n this.middlewares.splice(index, 1);\n logger.debug(`路由中间件已取消注册: ${middlewareConfig.name || 'anonymous'}`);\n }\n };\n }\n\n /**\n * 批量注册中间件\n * \n * @param configs - 中间件配置数组\n */\n registerBatch(configs: RouterMiddlewareConfig[]): void {\n configs.forEach((config) => this.register(config));\n }\n\n /**\n * 取消注册中间件\n * \n * @param name - 中间件名称\n */\n unregister(name: string): void {\n const index = this.middlewares.findIndex((m) => m.name === name);\n if (index > -1) {\n this.middlewares.splice(index, 1);\n logger.debug(`路由中间件已取消注册: ${name}`);\n }\n }\n\n /**\n * 清空所有中间件\n */\n clear(): void {\n this.middlewares = [];\n logger.debug('所有路由中间件已清空');\n }\n\n /**\n * 执行中间件链\n * \n * @param context - 中间件上下文\n * @returns 中间件执行结果\n */\n async execute(context: RouterMiddlewareContext): Promise<RouterMiddlewareResult> {\n // 过滤启用的中间件\n const enabledMiddlewares = this.middlewares.filter((m) => {\n if (!m.enabled) {\n return false;\n }\n\n // 检查条件函数\n if (m.condition && !m.condition(context)) {\n return false;\n }\n\n return true;\n });\n\n // 按顺序执行中间件\n for (const middlewareConfig of enabledMiddlewares) {\n try {\n const result = await middlewareConfig.middleware(context);\n\n // 如果中间件返回 false 或包含 allow: false,阻止导航\n if ((typeof result === 'object' && result.allow === false)) {\n logger.debug(\n `路由中间件阻止导航: ${middlewareConfig.name || 'anonymous'}`,\n result\n );\n\n return typeof result === 'object'\n ? result\n : {\n allow: false,\n reason: '中间件返回 false',\n };\n }\n\n // 如果中间件返回字符串,重定向到该路径\n if (typeof result === 'string') {\n logger.debug(\n `路由中间件重定向: ${middlewareConfig.name || 'anonymous'} -> ${result}`\n );\n\n return {\n allow: false,\n redirect: result,\n };\n }\n } catch (error) {\n logger.error(\n `路由中间件执行失败: ${middlewareConfig.name || 'anonymous'}`,\n error\n );\n\n // 中间件执行失败时,默认允许继续导航\n // 但记录错误以便调试\n continue;\n }\n }\n\n // 所有中间件都通过,允许导航\n return { allow: true };\n }\n\n /**\n * 获取所有中间件\n * \n * @returns 中间件配置数组\n */\n getAll(): RouterMiddlewareConfig[] {\n return [...this.middlewares];\n }\n\n /**\n * 获取启用的中间件\n * \n * @returns 启用的中间件配置数组\n */\n getEnabled(): RouterMiddlewareConfig[] {\n return this.middlewares.filter((m) => m.enabled);\n }\n\n /**\n * 获取中间件数量\n * \n * @returns 中间件数量\n */\n getCount(): number {\n return this.middlewares.length;\n }\n}\n\n/**\n * 获取路由中间件管理器单例\n */\nlet middlewareManagerInstance: RouterMiddlewareManager | null = null;\n\nexport function getRouterMiddlewareManager(): RouterMiddlewareManager {\n if (!middlewareManagerInstance) {\n middlewareManagerInstance = new RouterMiddlewareManager();\n }\n return middlewareManagerInstance;\n}\n"],"names":["RouterMiddlewareManager","getRouterMiddlewareManager","register","config","middleware","Error","middlewareConfig","priority","enabled","middlewares","push","sort","a","b","logger","debug","name","index","indexOf","splice","registerBatch","configs","forEach","unregister","findIndex","m","clear","execute","context","enabledMiddlewares","filter","condition","result","allow","reason","redirect","error","getAll","getEnabled","getCount","length","middlewareManagerInstance"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/core/router/middleware/RouterMiddlewareManager.ts"],"sourcesContent":["/**\n * 路由中间件管理器\n * 负责管理路由中间件的注册、执行和生命周期\n */\n\nimport { logger } from '../../../utils';\nimport type {\n RouterMiddlewareConfig,\n RouterMiddlewareContext,\n RouterMiddlewareResult,\n} from './types';\n\n/**\n * 路由中间件管理器\n */\nexport class RouterMiddlewareManager {\n private middlewares: RouterMiddlewareConfig[] = [];\n private static readonly SAFE_REDIRECT_PATH_REGEX = /^(\\/|\\.\\/|\\.\\.\\/|#)/;\n\n /**\n * 注册中间件\n * \n * @param config - 中间件配置\n * @returns 取消注册函数\n */\n register(config: RouterMiddlewareConfig): () => void {\n // 验证中间件配置\n if (!config.middleware || typeof config.middleware !== 'function') {\n throw new Error('中间件必须是一个函数');\n }\n\n // 设置默认值\n const middlewareConfig: RouterMiddlewareConfig = {\n priority: 100,\n enabled: true,\n ...config,\n };\n\n // 添加到中间件列表\n this.middlewares.push(middlewareConfig);\n\n // 按优先级排序\n this.middlewares.sort((a, b) => (a.priority || 100) - (b.priority || 100));\n\n logger.debug(`路由中间件已注册: ${middlewareConfig.name || 'anonymous'}`);\n\n // 返回取消注册函数\n return () => {\n const index = this.middlewares.indexOf(middlewareConfig);\n if (index > -1) {\n this.middlewares.splice(index, 1);\n logger.debug(`路由中间件已取消注册: ${middlewareConfig.name || 'anonymous'}`);\n }\n };\n }\n\n /**\n * 批量注册中间件\n * \n * @param configs - 中间件配置数组\n */\n registerBatch(configs: RouterMiddlewareConfig[]): void {\n configs.forEach((config) => this.register(config));\n }\n\n /**\n * 取消注册中间件\n * \n * @param name - 中间件名称\n */\n unregister(name: string): void {\n const index = this.middlewares.findIndex((m) => m.name === name);\n if (index > -1) {\n this.middlewares.splice(index, 1);\n logger.debug(`路由中间件已取消注册: ${name}`);\n }\n }\n\n /**\n * 清空所有中间件\n */\n clear(): void {\n this.middlewares = [];\n logger.debug('所有路由中间件已清空');\n }\n\n /**\n * 执行中间件链\n * \n * @param context - 中间件上下文\n * @returns 中间件执行结果\n */\n async execute(context: RouterMiddlewareContext): Promise<RouterMiddlewareResult> {\n // 过滤启用的中间件\n const enabledMiddlewares = this.middlewares.filter((m) => {\n if (!m.enabled) {\n return false;\n }\n\n // 检查条件函数\n if (m.condition && !m.condition(context)) {\n return false;\n }\n\n return true;\n });\n\n // 按顺序执行中间件\n for (const middlewareConfig of enabledMiddlewares) {\n try {\n const result = await middlewareConfig.middleware(context);\n\n // 如果中间件返回 false,阻止导航\n if (result === false) {\n logger.debug(\n `路由中间件阻止导航: ${middlewareConfig.name || 'anonymous'} -> false`\n );\n return {\n allow: false,\n reason: '中间件返回 false',\n };\n }\n\n // 如果中间件返回对象且 allow: false,阻止导航\n if (typeof result === 'object' && result !== null && result.allow === false) {\n logger.debug(\n `路由中间件阻止导航: ${middlewareConfig.name || 'anonymous'}`,\n result\n );\n\n if (result.redirect && !RouterMiddlewareManager.SAFE_REDIRECT_PATH_REGEX.test(result.redirect)) {\n logger.warn(\n `路由中间件返回了不安全的重定向地址,已拦截: ${middlewareConfig.name || 'anonymous'} -> ${result.redirect}`\n );\n return {\n allow: false,\n reason: '中间件返回了不安全的重定向地址',\n };\n }\n\n return result;\n }\n\n // 如果中间件返回字符串,重定向到该路径\n if (typeof result === 'string') {\n if (!RouterMiddlewareManager.SAFE_REDIRECT_PATH_REGEX.test(result)) {\n logger.warn(\n `路由中间件返回了不安全的重定向地址,已拦截: ${middlewareConfig.name || 'anonymous'} -> ${result}`\n );\n return {\n allow: false,\n reason: '中间件返回了不安全的重定向地址',\n };\n }\n\n logger.debug(\n `路由中间件重定向: ${middlewareConfig.name || 'anonymous'} -> ${result}`\n );\n\n return {\n allow: false,\n redirect: result,\n };\n }\n } catch (error) {\n logger.error(\n `路由中间件执行失败: ${middlewareConfig.name || 'anonymous'}`,\n error\n );\n\n // 中间件执行失败时,默认允许继续导航\n // 但记录错误以便调试\n continue;\n }\n }\n\n // 所有中间件都通过,允许导航\n return { allow: true };\n }\n\n /**\n * 获取所有中间件\n * \n * @returns 中间件配置数组\n */\n getAll(): RouterMiddlewareConfig[] {\n return [...this.middlewares];\n }\n\n /**\n * 获取启用的中间件\n * \n * @returns 启用的中间件配置数组\n */\n getEnabled(): RouterMiddlewareConfig[] {\n return this.middlewares.filter((m) => m.enabled);\n }\n\n /**\n * 获取中间件数量\n * \n * @returns 中间件数量\n */\n getCount(): number {\n return this.middlewares.length;\n }\n}\n\n/**\n * 获取路由中间件管理器单例\n */\nlet middlewareManagerInstance: RouterMiddlewareManager | null = null;\n\nexport function getRouterMiddlewareManager(): RouterMiddlewareManager {\n if (!middlewareManagerInstance) {\n middlewareManagerInstance = new RouterMiddlewareManager();\n }\n return middlewareManagerInstance;\n}\n"],"names":["RouterMiddlewareManager","getRouterMiddlewareManager","register","config","middleware","Error","middlewareConfig","priority","enabled","middlewares","push","sort","a","b","logger","debug","name","index","indexOf","splice","registerBatch","configs","forEach","unregister","findIndex","m","clear","execute","context","enabledMiddlewares","filter","condition","result","allow","reason","redirect","SAFE_REDIRECT_PATH_REGEX","test","warn","error","getAll","getEnabled","getCount","length","middlewareManagerInstance"],"mappings":"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"}
@@ -8,6 +8,7 @@ import type { RouterMiddlewareConfig, RouterMiddlewareContext, RouterMiddlewareR
8
8
  */
9
9
  export declare class RouterMiddlewareManager {
10
10
  private middlewares;
11
+ private static readonly SAFE_REDIRECT_PATH_REGEX;
11
12
  /**
12
13
  * 注册中间件
13
14
  *
@@ -58,4 +59,3 @@ export declare class RouterMiddlewareManager {
58
59
  getCount(): number;
59
60
  }
60
61
  export declare function getRouterMiddlewareManager(): RouterMiddlewareManager;
61
- //# sourceMappingURL=RouterMiddlewareManager.d.ts.map
@@ -93,16 +93,35 @@ function _define_property(obj, key, value) {
93
93
  for (const middlewareConfig of enabledMiddlewares){
94
94
  try {
95
95
  const result = await middlewareConfig.middleware(context);
96
- // 如果中间件返回 false 或包含 allow: false,阻止导航
97
- if (typeof result === 'object' && result.allow === false) {
98
- logger.debug(`路由中间件阻止导航: ${middlewareConfig.name || 'anonymous'}`, result);
99
- return typeof result === 'object' ? result : {
96
+ // 如果中间件返回 false,阻止导航
97
+ if (result === false) {
98
+ logger.debug(`路由中间件阻止导航: ${middlewareConfig.name || 'anonymous'} -> false`);
99
+ return {
100
100
  allow: false,
101
101
  reason: '中间件返回 false'
102
102
  };
103
103
  }
104
+ // 如果中间件返回对象且 allow: false,阻止导航
105
+ if (typeof result === 'object' && result !== null && result.allow === false) {
106
+ logger.debug(`路由中间件阻止导航: ${middlewareConfig.name || 'anonymous'}`, result);
107
+ if (result.redirect && !RouterMiddlewareManager.SAFE_REDIRECT_PATH_REGEX.test(result.redirect)) {
108
+ logger.warn(`路由中间件返回了不安全的重定向地址,已拦截: ${middlewareConfig.name || 'anonymous'} -> ${result.redirect}`);
109
+ return {
110
+ allow: false,
111
+ reason: '中间件返回了不安全的重定向地址'
112
+ };
113
+ }
114
+ return result;
115
+ }
104
116
  // 如果中间件返回字符串,重定向到该路径
105
117
  if (typeof result === 'string') {
118
+ if (!RouterMiddlewareManager.SAFE_REDIRECT_PATH_REGEX.test(result)) {
119
+ logger.warn(`路由中间件返回了不安全的重定向地址,已拦截: ${middlewareConfig.name || 'anonymous'} -> ${result}`);
120
+ return {
121
+ allow: false,
122
+ reason: '中间件返回了不安全的重定向地址'
123
+ };
124
+ }
106
125
  logger.debug(`路由中间件重定向: ${middlewareConfig.name || 'anonymous'} -> ${result}`);
107
126
  return {
108
127
  allow: false,
@@ -146,6 +165,7 @@ function _define_property(obj, key, value) {
146
165
  _define_property(this, "middlewares", []);
147
166
  }
148
167
  }
168
+ _define_property(RouterMiddlewareManager, "SAFE_REDIRECT_PATH_REGEX", /^(\/|\.\/|\.\.\/|#)/);
149
169
  /**
150
170
  * 获取路由中间件管理器单例
151
171
  */ let middlewareManagerInstance = null;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/router/middleware/RouterMiddlewareManager.ts"],"sourcesContent":["/**\n * 路由中间件管理器\n * 负责管理路由中间件的注册、执行和生命周期\n */\n\nimport { logger } from '../../../utils';\nimport type {\n RouterMiddlewareConfig,\n RouterMiddlewareContext,\n RouterMiddlewareResult,\n} from './types';\n\n/**\n * 路由中间件管理器\n */\nexport class RouterMiddlewareManager {\n private middlewares: RouterMiddlewareConfig[] = [];\n\n /**\n * 注册中间件\n * \n * @param config - 中间件配置\n * @returns 取消注册函数\n */\n register(config: RouterMiddlewareConfig): () => void {\n // 验证中间件配置\n if (!config.middleware || typeof config.middleware !== 'function') {\n throw new Error('中间件必须是一个函数');\n }\n\n // 设置默认值\n const middlewareConfig: RouterMiddlewareConfig = {\n priority: 100,\n enabled: true,\n ...config,\n };\n\n // 添加到中间件列表\n this.middlewares.push(middlewareConfig);\n\n // 按优先级排序\n this.middlewares.sort((a, b) => (a.priority || 100) - (b.priority || 100));\n\n logger.debug(`路由中间件已注册: ${middlewareConfig.name || 'anonymous'}`);\n\n // 返回取消注册函数\n return () => {\n const index = this.middlewares.indexOf(middlewareConfig);\n if (index > -1) {\n this.middlewares.splice(index, 1);\n logger.debug(`路由中间件已取消注册: ${middlewareConfig.name || 'anonymous'}`);\n }\n };\n }\n\n /**\n * 批量注册中间件\n * \n * @param configs - 中间件配置数组\n */\n registerBatch(configs: RouterMiddlewareConfig[]): void {\n configs.forEach((config) => this.register(config));\n }\n\n /**\n * 取消注册中间件\n * \n * @param name - 中间件名称\n */\n unregister(name: string): void {\n const index = this.middlewares.findIndex((m) => m.name === name);\n if (index > -1) {\n this.middlewares.splice(index, 1);\n logger.debug(`路由中间件已取消注册: ${name}`);\n }\n }\n\n /**\n * 清空所有中间件\n */\n clear(): void {\n this.middlewares = [];\n logger.debug('所有路由中间件已清空');\n }\n\n /**\n * 执行中间件链\n * \n * @param context - 中间件上下文\n * @returns 中间件执行结果\n */\n async execute(context: RouterMiddlewareContext): Promise<RouterMiddlewareResult> {\n // 过滤启用的中间件\n const enabledMiddlewares = this.middlewares.filter((m) => {\n if (!m.enabled) {\n return false;\n }\n\n // 检查条件函数\n if (m.condition && !m.condition(context)) {\n return false;\n }\n\n return true;\n });\n\n // 按顺序执行中间件\n for (const middlewareConfig of enabledMiddlewares) {\n try {\n const result = await middlewareConfig.middleware(context);\n\n // 如果中间件返回 false 或包含 allow: false,阻止导航\n if ((typeof result === 'object' && result.allow === false)) {\n logger.debug(\n `路由中间件阻止导航: ${middlewareConfig.name || 'anonymous'}`,\n result\n );\n\n return typeof result === 'object'\n ? result\n : {\n allow: false,\n reason: '中间件返回 false',\n };\n }\n\n // 如果中间件返回字符串,重定向到该路径\n if (typeof result === 'string') {\n logger.debug(\n `路由中间件重定向: ${middlewareConfig.name || 'anonymous'} -> ${result}`\n );\n\n return {\n allow: false,\n redirect: result,\n };\n }\n } catch (error) {\n logger.error(\n `路由中间件执行失败: ${middlewareConfig.name || 'anonymous'}`,\n error\n );\n\n // 中间件执行失败时,默认允许继续导航\n // 但记录错误以便调试\n continue;\n }\n }\n\n // 所有中间件都通过,允许导航\n return { allow: true };\n }\n\n /**\n * 获取所有中间件\n * \n * @returns 中间件配置数组\n */\n getAll(): RouterMiddlewareConfig[] {\n return [...this.middlewares];\n }\n\n /**\n * 获取启用的中间件\n * \n * @returns 启用的中间件配置数组\n */\n getEnabled(): RouterMiddlewareConfig[] {\n return this.middlewares.filter((m) => m.enabled);\n }\n\n /**\n * 获取中间件数量\n * \n * @returns 中间件数量\n */\n getCount(): number {\n return this.middlewares.length;\n }\n}\n\n/**\n * 获取路由中间件管理器单例\n */\nlet middlewareManagerInstance: RouterMiddlewareManager | null = null;\n\nexport function getRouterMiddlewareManager(): RouterMiddlewareManager {\n if (!middlewareManagerInstance) {\n middlewareManagerInstance = new RouterMiddlewareManager();\n }\n return middlewareManagerInstance;\n}\n"],"names":["logger","RouterMiddlewareManager","register","config","middleware","Error","middlewareConfig","priority","enabled","middlewares","push","sort","a","b","debug","name","index","indexOf","splice","registerBatch","configs","forEach","unregister","findIndex","m","clear","execute","context","enabledMiddlewares","filter","condition","result","allow","reason","redirect","error","getAll","getEnabled","getCount","length","middlewareManagerInstance","getRouterMiddlewareManager"],"mappings":";;;;;;;;;;;;;AAAA;;;CAGC,GAED,SAASA,MAAM,QAAQ,iBAAiB;AAOxC;;CAEC,GACD,OAAO,MAAMC;IAGX;;;;;GAKC,GACDC,SAASC,MAA8B,EAAc;QACnD,UAAU;QACV,IAAI,CAACA,OAAOC,UAAU,IAAI,OAAOD,OAAOC,UAAU,KAAK,YAAY;YACjE,MAAM,IAAIC,MAAM;QAClB;QAEA,QAAQ;QACR,MAAMC,mBAA2C;YAC/CC,UAAU;YACVC,SAAS;YACT,GAAGL,MAAM;QACX;QAEA,WAAW;QACX,IAAI,CAACM,WAAW,CAACC,IAAI,CAACJ;QAEtB,SAAS;QACT,IAAI,CAACG,WAAW,CAACE,IAAI,CAAC,CAACC,GAAGC,IAAM,AAACD,CAAAA,EAAEL,QAAQ,IAAI,GAAE,IAAMM,CAAAA,EAAEN,QAAQ,IAAI,GAAE;QAEvEP,OAAOc,KAAK,CAAC,CAAC,UAAU,EAAER,iBAAiBS,IAAI,IAAI,aAAa;QAEhE,WAAW;QACX,OAAO;YACL,MAAMC,QAAQ,IAAI,CAACP,WAAW,CAACQ,OAAO,CAACX;YACvC,IAAIU,QAAQ,CAAC,GAAG;gBACd,IAAI,CAACP,WAAW,CAACS,MAAM,CAACF,OAAO;gBAC/BhB,OAAOc,KAAK,CAAC,CAAC,YAAY,EAAER,iBAAiBS,IAAI,IAAI,aAAa;YACpE;QACF;IACF;IAEA;;;;GAIC,GACDI,cAAcC,OAAiC,EAAQ;QACrDA,QAAQC,OAAO,CAAC,CAAClB,SAAW,IAAI,CAACD,QAAQ,CAACC;IAC5C;IAEA;;;;GAIC,GACDmB,WAAWP,IAAY,EAAQ;QAC7B,MAAMC,QAAQ,IAAI,CAACP,WAAW,CAACc,SAAS,CAAC,CAACC,IAAMA,EAAET,IAAI,KAAKA;QAC3D,IAAIC,QAAQ,CAAC,GAAG;YACd,IAAI,CAACP,WAAW,CAACS,MAAM,CAACF,OAAO;YAC/BhB,OAAOc,KAAK,CAAC,CAAC,YAAY,EAAEC,MAAM;QACpC;IACF;IAEA;;GAEC,GACDU,QAAc;QACZ,IAAI,CAAChB,WAAW,GAAG,EAAE;QACrBT,OAAOc,KAAK,CAAC;IACf;IAEA;;;;;GAKC,GACD,MAAMY,QAAQC,OAAgC,EAAmC;QAC/E,WAAW;QACX,MAAMC,qBAAqB,IAAI,CAACnB,WAAW,CAACoB,MAAM,CAAC,CAACL;YAClD,IAAI,CAACA,EAAEhB,OAAO,EAAE;gBACd,OAAO;YACT;YAEA,SAAS;YACT,IAAIgB,EAAEM,SAAS,IAAI,CAACN,EAAEM,SAAS,CAACH,UAAU;gBACxC,OAAO;YACT;YAEA,OAAO;QACT;QAEA,WAAW;QACX,KAAK,MAAMrB,oBAAoBsB,mBAAoB;YACjD,IAAI;gBACF,MAAMG,SAAS,MAAMzB,iBAAiBF,UAAU,CAACuB;gBAEjD,sCAAsC;gBACtC,IAAK,OAAOI,WAAW,YAAYA,OAAOC,KAAK,KAAK,OAAQ;oBAC1DhC,OAAOc,KAAK,CACV,CAAC,WAAW,EAAER,iBAAiBS,IAAI,IAAI,aAAa,EACpDgB;oBAGF,OAAO,OAAOA,WAAW,WACrBA,SACA;wBACEC,OAAO;wBACPC,QAAQ;oBACV;gBACN;gBAEA,qBAAqB;gBACrB,IAAI,OAAOF,WAAW,UAAU;oBAC9B/B,OAAOc,KAAK,CACV,CAAC,UAAU,EAAER,iBAAiBS,IAAI,IAAI,YAAY,IAAI,EAAEgB,QAAQ;oBAGlE,OAAO;wBACLC,OAAO;wBACPE,UAAUH;oBACZ;gBACF;YACF,EAAE,OAAOI,OAAO;gBACdnC,OAAOmC,KAAK,CACV,CAAC,WAAW,EAAE7B,iBAAiBS,IAAI,IAAI,aAAa,EACpDoB;gBAKF;YACF;QACF;QAEA,gBAAgB;QAChB,OAAO;YAAEH,OAAO;QAAK;IACvB;IAEA;;;;GAIC,GACDI,SAAmC;QACjC,OAAO;eAAI,IAAI,CAAC3B,WAAW;SAAC;IAC9B;IAEA;;;;GAIC,GACD4B,aAAuC;QACrC,OAAO,IAAI,CAAC5B,WAAW,CAACoB,MAAM,CAAC,CAACL,IAAMA,EAAEhB,OAAO;IACjD;IAEA;;;;GAIC,GACD8B,WAAmB;QACjB,OAAO,IAAI,CAAC7B,WAAW,CAAC8B,MAAM;IAChC;;QAlKA,uBAAQ9B,eAAwC,EAAE;;AAmKpD;AAEA;;CAEC,GACD,IAAI+B,4BAA4D;AAEhE,OAAO,SAASC;IACd,IAAI,CAACD,2BAA2B;QAC9BA,4BAA4B,IAAIvC;IAClC;IACA,OAAOuC;AACT"}
1
+ {"version":3,"sources":["../../../../src/core/router/middleware/RouterMiddlewareManager.ts"],"sourcesContent":["/**\n * 路由中间件管理器\n * 负责管理路由中间件的注册、执行和生命周期\n */\n\nimport { logger } from '../../../utils';\nimport type {\n RouterMiddlewareConfig,\n RouterMiddlewareContext,\n RouterMiddlewareResult,\n} from './types';\n\n/**\n * 路由中间件管理器\n */\nexport class RouterMiddlewareManager {\n private middlewares: RouterMiddlewareConfig[] = [];\n private static readonly SAFE_REDIRECT_PATH_REGEX = /^(\\/|\\.\\/|\\.\\.\\/|#)/;\n\n /**\n * 注册中间件\n * \n * @param config - 中间件配置\n * @returns 取消注册函数\n */\n register(config: RouterMiddlewareConfig): () => void {\n // 验证中间件配置\n if (!config.middleware || typeof config.middleware !== 'function') {\n throw new Error('中间件必须是一个函数');\n }\n\n // 设置默认值\n const middlewareConfig: RouterMiddlewareConfig = {\n priority: 100,\n enabled: true,\n ...config,\n };\n\n // 添加到中间件列表\n this.middlewares.push(middlewareConfig);\n\n // 按优先级排序\n this.middlewares.sort((a, b) => (a.priority || 100) - (b.priority || 100));\n\n logger.debug(`路由中间件已注册: ${middlewareConfig.name || 'anonymous'}`);\n\n // 返回取消注册函数\n return () => {\n const index = this.middlewares.indexOf(middlewareConfig);\n if (index > -1) {\n this.middlewares.splice(index, 1);\n logger.debug(`路由中间件已取消注册: ${middlewareConfig.name || 'anonymous'}`);\n }\n };\n }\n\n /**\n * 批量注册中间件\n * \n * @param configs - 中间件配置数组\n */\n registerBatch(configs: RouterMiddlewareConfig[]): void {\n configs.forEach((config) => this.register(config));\n }\n\n /**\n * 取消注册中间件\n * \n * @param name - 中间件名称\n */\n unregister(name: string): void {\n const index = this.middlewares.findIndex((m) => m.name === name);\n if (index > -1) {\n this.middlewares.splice(index, 1);\n logger.debug(`路由中间件已取消注册: ${name}`);\n }\n }\n\n /**\n * 清空所有中间件\n */\n clear(): void {\n this.middlewares = [];\n logger.debug('所有路由中间件已清空');\n }\n\n /**\n * 执行中间件链\n * \n * @param context - 中间件上下文\n * @returns 中间件执行结果\n */\n async execute(context: RouterMiddlewareContext): Promise<RouterMiddlewareResult> {\n // 过滤启用的中间件\n const enabledMiddlewares = this.middlewares.filter((m) => {\n if (!m.enabled) {\n return false;\n }\n\n // 检查条件函数\n if (m.condition && !m.condition(context)) {\n return false;\n }\n\n return true;\n });\n\n // 按顺序执行中间件\n for (const middlewareConfig of enabledMiddlewares) {\n try {\n const result = await middlewareConfig.middleware(context);\n\n // 如果中间件返回 false,阻止导航\n if (result === false) {\n logger.debug(\n `路由中间件阻止导航: ${middlewareConfig.name || 'anonymous'} -> false`\n );\n return {\n allow: false,\n reason: '中间件返回 false',\n };\n }\n\n // 如果中间件返回对象且 allow: false,阻止导航\n if (typeof result === 'object' && result !== null && result.allow === false) {\n logger.debug(\n `路由中间件阻止导航: ${middlewareConfig.name || 'anonymous'}`,\n result\n );\n\n if (result.redirect && !RouterMiddlewareManager.SAFE_REDIRECT_PATH_REGEX.test(result.redirect)) {\n logger.warn(\n `路由中间件返回了不安全的重定向地址,已拦截: ${middlewareConfig.name || 'anonymous'} -> ${result.redirect}`\n );\n return {\n allow: false,\n reason: '中间件返回了不安全的重定向地址',\n };\n }\n\n return result;\n }\n\n // 如果中间件返回字符串,重定向到该路径\n if (typeof result === 'string') {\n if (!RouterMiddlewareManager.SAFE_REDIRECT_PATH_REGEX.test(result)) {\n logger.warn(\n `路由中间件返回了不安全的重定向地址,已拦截: ${middlewareConfig.name || 'anonymous'} -> ${result}`\n );\n return {\n allow: false,\n reason: '中间件返回了不安全的重定向地址',\n };\n }\n\n logger.debug(\n `路由中间件重定向: ${middlewareConfig.name || 'anonymous'} -> ${result}`\n );\n\n return {\n allow: false,\n redirect: result,\n };\n }\n } catch (error) {\n logger.error(\n `路由中间件执行失败: ${middlewareConfig.name || 'anonymous'}`,\n error\n );\n\n // 中间件执行失败时,默认允许继续导航\n // 但记录错误以便调试\n continue;\n }\n }\n\n // 所有中间件都通过,允许导航\n return { allow: true };\n }\n\n /**\n * 获取所有中间件\n * \n * @returns 中间件配置数组\n */\n getAll(): RouterMiddlewareConfig[] {\n return [...this.middlewares];\n }\n\n /**\n * 获取启用的中间件\n * \n * @returns 启用的中间件配置数组\n */\n getEnabled(): RouterMiddlewareConfig[] {\n return this.middlewares.filter((m) => m.enabled);\n }\n\n /**\n * 获取中间件数量\n * \n * @returns 中间件数量\n */\n getCount(): number {\n return this.middlewares.length;\n }\n}\n\n/**\n * 获取路由中间件管理器单例\n */\nlet middlewareManagerInstance: RouterMiddlewareManager | null = null;\n\nexport function getRouterMiddlewareManager(): RouterMiddlewareManager {\n if (!middlewareManagerInstance) {\n middlewareManagerInstance = new RouterMiddlewareManager();\n }\n return middlewareManagerInstance;\n}\n"],"names":["logger","RouterMiddlewareManager","register","config","middleware","Error","middlewareConfig","priority","enabled","middlewares","push","sort","a","b","debug","name","index","indexOf","splice","registerBatch","configs","forEach","unregister","findIndex","m","clear","execute","context","enabledMiddlewares","filter","condition","result","allow","reason","redirect","SAFE_REDIRECT_PATH_REGEX","test","warn","error","getAll","getEnabled","getCount","length","middlewareManagerInstance","getRouterMiddlewareManager"],"mappings":"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"}
@@ -52,4 +52,3 @@ export interface AuthMiddlewareConfig {
52
52
  * @returns 路由中间件函数
53
53
  */
54
54
  export declare function createAuthMiddleware(config: AuthMiddlewareConfig): RouterMiddleware;
55
- //# sourceMappingURL=auth.d.ts.map
@@ -4,4 +4,3 @@
4
4
  export * from './types';
5
5
  export * from './RouterMiddlewareManager';
6
6
  export * from './auth';
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/router/middleware/types.ts"],"sourcesContent":["/**\n * 路由中间件类型定义\n */\n\nimport type { RouteLocation, NavigateOptions } from '../types';\n\n/**\n * 路由中间件上下文\n */\nexport interface RouterMiddlewareContext {\n /**\n * 目标路由\n */\n to: RouteLocation;\n\n /**\n * 来源路由\n */\n from?: RouteLocation;\n\n /**\n * 导航选项\n */\n options?: NavigateOptions;\n\n /**\n * 中间件元数据\n */\n meta?: Record<string, unknown>;\n}\n\n/**\n * 路由中间件结果\n */\nexport type RouterMiddlewareResult =\n | {\n /**\n * 允许继续导航\n */\n allow: true;\n }\n | {\n /**\n * 阻止导航\n */\n allow: false;\n /**\n * 重定向路径(可选)\n */\n redirect?: string;\n /**\n * 阻止原因\n */\n reason?: string;\n };\n\n/**\n * 路由中间件函数\n */\nexport type RouterMiddleware = (\n context: RouterMiddlewareContext\n) => RouterMiddlewareResult | Promise<RouterMiddlewareResult>;\n\n/**\n * 路由中间件配置\n */\nexport interface RouterMiddlewareConfig {\n /**\n * 中间件函数\n */\n middleware: RouterMiddleware;\n\n /**\n * 中间件名称\n */\n name?: string;\n\n /**\n * 优先级(数字越小优先级越高)\n * @default 100\n */\n priority?: number;\n\n /**\n * 是否启用\n * @default true\n */\n enabled?: boolean;\n\n /**\n * 条件函数(返回 true 时才执行中间件)\n */\n condition?: (context: RouterMiddlewareContext) => boolean;\n}\n\n/**\n * 路由生命周期钩子结果\n */\nexport type RouteLifecycleResult =\n | void\n | string\n | false\n | Promise<void | string | false>;\n"],"names":[],"mappings":"AAAA;;CAEC"}
1
+ {"version":3,"sources":["../../../../src/core/router/middleware/types.ts"],"sourcesContent":["/**\n * 路由中间件类型定义\n */\n\nimport type { RouteLocation, NavigateOptions } from '../types';\n\n/**\n * 路由中间件上下文\n */\nexport interface RouterMiddlewareContext {\n /**\n * 目标路由\n */\n to: RouteLocation;\n\n /**\n * 来源路由\n */\n from?: RouteLocation;\n\n /**\n * 导航选项\n */\n options?: NavigateOptions;\n\n /**\n * 中间件元数据\n */\n meta?: Record<string, unknown>;\n}\n\n/**\n * 路由中间件结果\n */\nexport type RouterMiddlewareResult =\n | {\n /**\n * 允许继续导航\n */\n allow: true;\n }\n | {\n /**\n * 阻止导航\n */\n allow: false;\n /**\n * 重定向路径(可选)\n */\n redirect?: string;\n /**\n * 阻止原因\n */\n reason?: string;\n };\n\n/**\n * 路由中间件函数\n */\nexport type RouterMiddleware = (\n context: RouterMiddlewareContext\n) =>\n | RouterMiddlewareResult\n | string\n | false\n | void\n | Promise<RouterMiddlewareResult | string | false | void>;\n\n/**\n * 路由中间件配置\n */\nexport interface RouterMiddlewareConfig {\n /**\n * 中间件函数\n */\n middleware: RouterMiddleware;\n\n /**\n * 中间件名称\n */\n name?: string;\n\n /**\n * 优先级(数字越小优先级越高)\n * @default 100\n */\n priority?: number;\n\n /**\n * 是否启用\n * @default true\n */\n enabled?: boolean;\n\n /**\n * 条件函数(返回 true 时才执行中间件)\n */\n condition?: (context: RouterMiddlewareContext) => boolean;\n}\n\n/**\n * 路由生命周期钩子结果\n */\nexport type RouteLifecycleResult =\n | void\n | string\n | false\n | Promise<void | string | false>;\n"],"names":[],"mappings":"AAAA;;CAEC"}
@@ -48,7 +48,7 @@ export type RouterMiddlewareResult = {
48
48
  /**
49
49
  * 路由中间件函数
50
50
  */
51
- export type RouterMiddleware = (context: RouterMiddlewareContext) => RouterMiddlewareResult | Promise<RouterMiddlewareResult>;
51
+ export type RouterMiddleware = (context: RouterMiddlewareContext) => RouterMiddlewareResult | string | false | void | Promise<RouterMiddlewareResult | string | false | void>;
52
52
  /**
53
53
  * 路由中间件配置
54
54
  */
@@ -80,4 +80,3 @@ export interface RouterMiddlewareConfig {
80
80
  * 路由生命周期钩子结果
81
81
  */
82
82
  export type RouteLifecycleResult = void | string | false | Promise<void | string | false>;
83
- //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/router/middleware/types.ts"],"sourcesContent":["/**\n * 路由中间件类型定义\n */\n\nimport type { RouteLocation, NavigateOptions } from '../types';\n\n/**\n * 路由中间件上下文\n */\nexport interface RouterMiddlewareContext {\n /**\n * 目标路由\n */\n to: RouteLocation;\n\n /**\n * 来源路由\n */\n from?: RouteLocation;\n\n /**\n * 导航选项\n */\n options?: NavigateOptions;\n\n /**\n * 中间件元数据\n */\n meta?: Record<string, unknown>;\n}\n\n/**\n * 路由中间件结果\n */\nexport type RouterMiddlewareResult =\n | {\n /**\n * 允许继续导航\n */\n allow: true;\n }\n | {\n /**\n * 阻止导航\n */\n allow: false;\n /**\n * 重定向路径(可选)\n */\n redirect?: string;\n /**\n * 阻止原因\n */\n reason?: string;\n };\n\n/**\n * 路由中间件函数\n */\nexport type RouterMiddleware = (\n context: RouterMiddlewareContext\n) => RouterMiddlewareResult | Promise<RouterMiddlewareResult>;\n\n/**\n * 路由中间件配置\n */\nexport interface RouterMiddlewareConfig {\n /**\n * 中间件函数\n */\n middleware: RouterMiddleware;\n\n /**\n * 中间件名称\n */\n name?: string;\n\n /**\n * 优先级(数字越小优先级越高)\n * @default 100\n */\n priority?: number;\n\n /**\n * 是否启用\n * @default true\n */\n enabled?: boolean;\n\n /**\n * 条件函数(返回 true 时才执行中间件)\n */\n condition?: (context: RouterMiddlewareContext) => boolean;\n}\n\n/**\n * 路由生命周期钩子结果\n */\nexport type RouteLifecycleResult =\n | void\n | string\n | false\n | Promise<void | string | false>;\n"],"names":[],"mappings":"AAAA;;CAEC,GA6FD;;CAEC,GACD,WAImC"}
1
+ {"version":3,"sources":["../../../../src/core/router/middleware/types.ts"],"sourcesContent":["/**\n * 路由中间件类型定义\n */\n\nimport type { RouteLocation, NavigateOptions } from '../types';\n\n/**\n * 路由中间件上下文\n */\nexport interface RouterMiddlewareContext {\n /**\n * 目标路由\n */\n to: RouteLocation;\n\n /**\n * 来源路由\n */\n from?: RouteLocation;\n\n /**\n * 导航选项\n */\n options?: NavigateOptions;\n\n /**\n * 中间件元数据\n */\n meta?: Record<string, unknown>;\n}\n\n/**\n * 路由中间件结果\n */\nexport type RouterMiddlewareResult =\n | {\n /**\n * 允许继续导航\n */\n allow: true;\n }\n | {\n /**\n * 阻止导航\n */\n allow: false;\n /**\n * 重定向路径(可选)\n */\n redirect?: string;\n /**\n * 阻止原因\n */\n reason?: string;\n };\n\n/**\n * 路由中间件函数\n */\nexport type RouterMiddleware = (\n context: RouterMiddlewareContext\n) =>\n | RouterMiddlewareResult\n | string\n | false\n | void\n | Promise<RouterMiddlewareResult | string | false | void>;\n\n/**\n * 路由中间件配置\n */\nexport interface RouterMiddlewareConfig {\n /**\n * 中间件函数\n */\n middleware: RouterMiddleware;\n\n /**\n * 中间件名称\n */\n name?: string;\n\n /**\n * 优先级(数字越小优先级越高)\n * @default 100\n */\n priority?: number;\n\n /**\n * 是否启用\n * @default true\n */\n enabled?: boolean;\n\n /**\n * 条件函数(返回 true 时才执行中间件)\n */\n condition?: (context: RouterMiddlewareContext) => boolean;\n}\n\n/**\n * 路由生命周期钩子结果\n */\nexport type RouteLifecycleResult =\n | void\n | string\n | false\n | Promise<void | string | false>;\n"],"names":[],"mappings":"AAAA;;CAEC,GAkGD;;CAEC,GACD,WAImC"}
@@ -132,4 +132,3 @@ export declare class RouterMonitoring {
132
132
  }
133
133
  export declare function getRouterMonitoring(config?: RouterMonitoringConfig): RouterMonitoring;
134
134
  export {};
135
- //# sourceMappingURL=RouterMonitoring.d.ts.map
@@ -2,4 +2,3 @@
2
2
  * 路由监控模块入口
3
3
  */
4
4
  export * from './RouterMonitoring';
5
- //# sourceMappingURL=index.d.ts.map
@@ -14,6 +14,19 @@ Object.defineProperty(exports, "RouterNavigation", {
14
14
  const _utils = require("../../../utils");
15
15
  const _lifecycle = require("../lifecycle");
16
16
  const _middleware = require("../middleware");
17
+ function _define_property(obj, key, value) {
18
+ if (key in obj) {
19
+ Object.defineProperty(obj, key, {
20
+ value: value,
21
+ enumerable: true,
22
+ configurable: true,
23
+ writable: true
24
+ });
25
+ } else {
26
+ obj[key] = value;
27
+ }
28
+ return obj;
29
+ }
17
30
  function _getRequireWildcardCache(nodeInterop) {
18
31
  if (typeof WeakMap !== "function") return null;
19
32
  var cacheBabelInterop = new WeakMap();
@@ -56,12 +69,32 @@ function _interop_require_wildcard(obj, nodeInterop) {
56
69
  return newObj;
57
70
  }
58
71
  let RouterNavigation = class RouterNavigation {
59
- /**
60
- * 导航到指定路径
61
- *
62
- * @param to - 目标路径或路由名称
63
- * @param options - 导航选项
64
- */ static async navigate(to, options) {
72
+ static buildTargetPath(to, query) {
73
+ const base = typeof window !== 'undefined' && window.location?.origin ? window.location.origin : 'http://localhost';
74
+ const url = new URL(to, base);
75
+ if (query && Object.keys(query).length > 0) {
76
+ const params = new URLSearchParams(url.search);
77
+ Object.entries(query).forEach(([key, value])=>{
78
+ if (value === undefined || value === null) {
79
+ params.delete(key);
80
+ return;
81
+ }
82
+ params.set(key, String(value));
83
+ });
84
+ url.search = params.toString();
85
+ }
86
+ return `${url.pathname}${url.search}${url.hash}`;
87
+ }
88
+ static async navigateInternal(to, options, depth, visited) {
89
+ const startTime = performance.now();
90
+ if (depth > this.MAX_REDIRECTS) {
91
+ throw new Error(`路由重定向次数超过上限(${this.MAX_REDIRECTS}),可能存在循环重定向`);
92
+ }
93
+ const targetPath = this.buildTargetPath(to, options?.query);
94
+ if (visited.has(targetPath)) {
95
+ throw new Error(`检测到循环重定向: ${targetPath}`);
96
+ }
97
+ visited.add(targetPath);
65
98
  const routerManager = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../RouterManager"))).then((m)=>m.getRouterManager());
66
99
  const router = routerManager.getRouter();
67
100
  if (!router) {
@@ -71,12 +104,13 @@ let RouterNavigation = class RouterNavigation {
71
104
  const currentLocation = this.getCurrentRoute();
72
105
  // 构建目标路由位置
73
106
  const targetLocation = {
74
- path: to,
107
+ path: targetPath,
75
108
  query: options?.query
76
109
  };
77
110
  // 执行生命周期钩子
78
111
  const lifecycleManager = (0, _lifecycle.getRouterLifecycleManager)();
79
112
  const beforeEachResult = await lifecycleManager.beforeEach(targetLocation, currentLocation);
113
+ let finalPath = targetPath;
80
114
  // 如果 beforeEach 返回 false,阻止导航
81
115
  if (beforeEachResult === false) {
82
116
  _utils.logger.debug('路由导航被阻止: beforeEach 返回 false');
@@ -85,14 +119,14 @@ let RouterNavigation = class RouterNavigation {
85
119
  // 如果 beforeEach 返回字符串,重定向到该路径
86
120
  if (typeof beforeEachResult === 'string') {
87
121
  _utils.logger.debug(`路由导航重定向: ${beforeEachResult}`);
88
- to = beforeEachResult;
122
+ finalPath = this.buildTargetPath(beforeEachResult);
89
123
  }
90
124
  // 执行中间件
91
125
  const middlewareManager = (0, _middleware.getRouterMiddlewareManager)();
92
126
  const middlewareContext = {
93
127
  to: {
94
128
  ...targetLocation,
95
- path: to
129
+ path: finalPath
96
130
  },
97
131
  from: currentLocation,
98
132
  options
@@ -102,8 +136,10 @@ let RouterNavigation = class RouterNavigation {
102
136
  if (!middlewareResult.allow) {
103
137
  if (middlewareResult.redirect) {
104
138
  _utils.logger.debug(`路由导航被中间件重定向: ${middlewareResult.redirect}`);
105
- // 递归调用 navigate 进行重定向
106
- return this.navigate(middlewareResult.redirect, options);
139
+ return this.navigateInternal(middlewareResult.redirect, {
140
+ ...options,
141
+ query: undefined
142
+ }, depth + 1, visited);
107
143
  }
108
144
  _utils.logger.debug(`路由导航被中间件阻止: ${middlewareResult.reason || '未知原因'}`);
109
145
  return;
@@ -111,30 +147,48 @@ let RouterNavigation = class RouterNavigation {
111
147
  // 执行导航
112
148
  try {
113
149
  if (options?.replace) {
114
- router.navigate(to, {
150
+ router.navigate(finalPath, {
115
151
  replace: true,
116
152
  state: options.state
117
153
  });
118
154
  } else {
119
- router.navigate(to, {
155
+ router.navigate(finalPath, {
120
156
  state: options?.state
121
157
  });
122
158
  }
123
159
  // 执行 afterEach 钩子
124
160
  await lifecycleManager.afterEach({
125
161
  ...targetLocation,
126
- path: to
162
+ path: finalPath
127
163
  }, currentLocation);
164
+ const duration = performance.now() - startTime;
165
+ routerManager.getMonitoring().trackRoutePerformance(finalPath, {
166
+ totalTime: duration
167
+ });
128
168
  } catch (error) {
129
169
  _utils.logger.error('路由导航失败', error);
130
170
  throw error;
131
171
  }
132
172
  }
133
173
  /**
174
+ * 导航到指定路径
175
+ *
176
+ * @param to - 目标路径或路由名称
177
+ * @param options - 导航选项
178
+ */ static async navigate(to, options) {
179
+ return this.navigateInternal(to, options, 0, new Set());
180
+ }
181
+ /**
134
182
  * 获取当前路由信息
135
183
  *
136
184
  * @returns 当前路由位置信息
137
185
  */ static getCurrentRoute() {
186
+ if (typeof window === 'undefined') {
187
+ return {
188
+ path: '/',
189
+ query: {}
190
+ };
191
+ }
138
192
  // 从 window.location 获取当前路由信息
139
193
  const pathname = window.location.pathname;
140
194
  const search = window.location.search;
@@ -182,5 +236,6 @@ let RouterNavigation = class RouterNavigation {
182
236
  });
183
237
  }
184
238
  };
239
+ _define_property(RouterNavigation, "MAX_REDIRECTS", 10);
185
240
 
186
241
  //# sourceMappingURL=RouterNavigation.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/core/router/navigation/RouterNavigation.ts"],"sourcesContent":["/**\n * 路由导航 API\n * 提供框架级别的路由导航能力,封装 react-router-dom 的导航功能\n */\n\nimport { logger } from '../../../utils';\nimport type { RouteLocation, NavigateOptions } from '../types';\nimport { getRouterLifecycleManager } from '../lifecycle';\nimport { getRouterMiddlewareManager } from '../middleware';\nimport type { RouterMiddlewareContext } from '../middleware/types';\n\n/**\n * 路由导航器\n */\nexport class RouterNavigation {\n /**\n * 导航到指定路径\n * \n * @param to - 目标路径或路由名称\n * @param options - 导航选项\n */\n static async navigate(\n to: string,\n options?: NavigateOptions\n ): Promise<void> {\n const routerManager = await import('../RouterManager').then((m) => m.getRouterManager());\n const router = routerManager.getRouter();\n\n if (!router) {\n throw new Error('路由未初始化,无法导航');\n }\n\n // 获取当前路由信息\n const currentLocation = this.getCurrentRoute();\n\n // 构建目标路由位置\n const targetLocation: RouteLocation = {\n path: to,\n query: options?.query,\n };\n\n // 执行生命周期钩子\n const lifecycleManager = getRouterLifecycleManager();\n const beforeEachResult = await lifecycleManager.beforeEach(\n targetLocation,\n currentLocation\n );\n\n // 如果 beforeEach 返回 false,阻止导航\n if (beforeEachResult === false) {\n logger.debug('路由导航被阻止: beforeEach 返回 false');\n return;\n }\n\n // 如果 beforeEach 返回字符串,重定向到该路径\n if (typeof beforeEachResult === 'string') {\n logger.debug(`路由导航重定向: ${beforeEachResult}`);\n to = beforeEachResult;\n }\n\n // 执行中间件\n const middlewareManager = getRouterMiddlewareManager();\n const middlewareContext: RouterMiddlewareContext = {\n to: {\n ...targetLocation,\n path: to,\n },\n from: currentLocation,\n options,\n };\n\n const middlewareResult = await middlewareManager.execute(middlewareContext);\n\n // 如果中间件阻止导航\n if (!middlewareResult.allow) {\n if (middlewareResult.redirect) {\n logger.debug(`路由导航被中间件重定向: ${middlewareResult.redirect}`);\n // 递归调用 navigate 进行重定向\n return this.navigate(middlewareResult.redirect, options);\n }\n logger.debug(`路由导航被中间件阻止: ${middlewareResult.reason || '未知原因'}`);\n return;\n }\n\n // 执行导航\n try {\n if (options?.replace) {\n router.navigate(to, { replace: true, state: options.state });\n } else {\n router.navigate(to, { state: options?.state });\n }\n\n // 执行 afterEach 钩子\n await lifecycleManager.afterEach(\n {\n ...targetLocation,\n path: to,\n },\n currentLocation\n );\n } catch (error) {\n logger.error('路由导航失败', error);\n throw error;\n }\n }\n\n /**\n * 获取当前路由信息\n * \n * @returns 当前路由位置信息\n */\n static getCurrentRoute(): RouteLocation {\n // 从 window.location 获取当前路由信息\n const pathname = window.location.pathname;\n const search = window.location.search;\n const hash = window.location.hash;\n\n // 解析查询参数\n const query: Record<string, unknown> = {};\n if (search) {\n const params = new URLSearchParams(search);\n params.forEach((value, key) => {\n query[key] = value;\n });\n }\n\n return {\n path: pathname + hash,\n query,\n };\n }\n\n /**\n * 返回上一页\n * \n * @param fallback - 如果没有历史记录,跳转到该路径\n */\n static async goBack(fallback?: string): Promise<void> {\n if (window.history.length > 1) {\n window.history.back();\n } else if (fallback) {\n await this.navigate(fallback);\n } else {\n logger.warn('没有历史记录,无法返回');\n }\n }\n\n /**\n * 前进到下一页\n */\n static goForward(): void {\n window.history.forward();\n }\n\n /**\n * 替换当前路由\n * \n * @param to - 目标路径\n * @param options - 导航选项\n */\n static async replace(\n to: string,\n options?: Omit<NavigateOptions, 'replace'>\n ): Promise<void> {\n return this.navigate(to, { ...options, replace: true });\n }\n}\n"],"names":["RouterNavigation","navigate","to","options","routerManager","then","m","getRouterManager","router","getRouter","Error","currentLocation","getCurrentRoute","targetLocation","path","query","lifecycleManager","getRouterLifecycleManager","beforeEachResult","beforeEach","logger","debug","middlewareManager","getRouterMiddlewareManager","middlewareContext","from","middlewareResult","execute","allow","redirect","reason","replace","state","afterEach","error","pathname","window","location","search","hash","params","URLSearchParams","forEach","value","key","goBack","fallback","history","length","back","warn","goForward","forward"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/core/router/navigation/RouterNavigation.ts"],"sourcesContent":["/**\n * 路由导航 API\n * 提供框架级别的路由导航能力,封装 react-router-dom 的导航功能\n */\n\nimport { logger } from '../../../utils';\nimport type { RouteLocation, NavigateOptions } from '../types';\nimport { getRouterLifecycleManager } from '../lifecycle';\nimport { getRouterMiddlewareManager } from '../middleware';\nimport type { RouterMiddlewareContext } from '../middleware/types';\n\n/**\n * 路由导航器\n */\nexport class RouterNavigation {\n private static readonly MAX_REDIRECTS = 10;\n\n private static buildTargetPath(\n to: string,\n query?: Record<string, unknown>\n ): string {\n const base =\n typeof window !== 'undefined' && window.location?.origin\n ? window.location.origin\n : 'http://localhost';\n\n const url = new URL(to, base);\n\n if (query && Object.keys(query).length > 0) {\n const params = new URLSearchParams(url.search);\n Object.entries(query).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n params.delete(key);\n return;\n }\n params.set(key, String(value));\n });\n url.search = params.toString();\n }\n\n return `${url.pathname}${url.search}${url.hash}`;\n }\n\n private static async navigateInternal(\n to: string,\n options: NavigateOptions | undefined,\n depth: number,\n visited: Set<string>\n ): Promise<void> {\n const startTime = performance.now();\n\n if (depth > this.MAX_REDIRECTS) {\n throw new Error(`路由重定向次数超过上限(${this.MAX_REDIRECTS}),可能存在循环重定向`);\n }\n\n const targetPath = this.buildTargetPath(to, options?.query);\n if (visited.has(targetPath)) {\n throw new Error(`检测到循环重定向: ${targetPath}`);\n }\n visited.add(targetPath);\n\n const routerManager = await import('../RouterManager').then((m) => m.getRouterManager());\n const router = routerManager.getRouter();\n\n if (!router) {\n throw new Error('路由未初始化,无法导航');\n }\n\n // 获取当前路由信息\n const currentLocation = this.getCurrentRoute();\n\n // 构建目标路由位置\n const targetLocation: RouteLocation = {\n path: targetPath,\n query: options?.query,\n };\n\n // 执行生命周期钩子\n const lifecycleManager = getRouterLifecycleManager();\n const beforeEachResult = await lifecycleManager.beforeEach(\n targetLocation,\n currentLocation\n );\n\n let finalPath = targetPath;\n\n // 如果 beforeEach 返回 false,阻止导航\n if (beforeEachResult === false) {\n logger.debug('路由导航被阻止: beforeEach 返回 false');\n return;\n }\n\n // 如果 beforeEach 返回字符串,重定向到该路径\n if (typeof beforeEachResult === 'string') {\n logger.debug(`路由导航重定向: ${beforeEachResult}`);\n finalPath = this.buildTargetPath(beforeEachResult);\n }\n\n // 执行中间件\n const middlewareManager = getRouterMiddlewareManager();\n const middlewareContext: RouterMiddlewareContext = {\n to: {\n ...targetLocation,\n path: finalPath,\n },\n from: currentLocation,\n options,\n };\n\n const middlewareResult = await middlewareManager.execute(middlewareContext);\n\n // 如果中间件阻止导航\n if (!middlewareResult.allow) {\n if (middlewareResult.redirect) {\n logger.debug(`路由导航被中间件重定向: ${middlewareResult.redirect}`);\n return this.navigateInternal(\n middlewareResult.redirect,\n { ...options, query: undefined },\n depth + 1,\n visited\n );\n }\n logger.debug(`路由导航被中间件阻止: ${middlewareResult.reason || '未知原因'}`);\n return;\n }\n\n // 执行导航\n try {\n if (options?.replace) {\n router.navigate(finalPath, { replace: true, state: options.state });\n } else {\n router.navigate(finalPath, { state: options?.state });\n }\n\n // 执行 afterEach 钩子\n await lifecycleManager.afterEach(\n {\n ...targetLocation,\n path: finalPath,\n },\n currentLocation\n );\n\n const duration = performance.now() - startTime;\n routerManager.getMonitoring().trackRoutePerformance(finalPath, {\n totalTime: duration,\n });\n } catch (error) {\n logger.error('路由导航失败', error);\n throw error;\n }\n }\n\n /**\n * 导航到指定路径\n * \n * @param to - 目标路径或路由名称\n * @param options - 导航选项\n */\n static async navigate(\n to: string,\n options?: NavigateOptions\n ): Promise<void> {\n return this.navigateInternal(to, options, 0, new Set());\n }\n\n /**\n * 获取当前路由信息\n * \n * @returns 当前路由位置信息\n */\n static getCurrentRoute(): RouteLocation {\n if (typeof window === 'undefined') {\n return {\n path: '/',\n query: {},\n };\n }\n\n // 从 window.location 获取当前路由信息\n const pathname = window.location.pathname;\n const search = window.location.search;\n const hash = window.location.hash;\n\n // 解析查询参数\n const query: Record<string, unknown> = {};\n if (search) {\n const params = new URLSearchParams(search);\n params.forEach((value, key) => {\n query[key] = value;\n });\n }\n\n return {\n path: pathname + hash,\n query,\n };\n }\n\n /**\n * 返回上一页\n * \n * @param fallback - 如果没有历史记录,跳转到该路径\n */\n static async goBack(fallback?: string): Promise<void> {\n if (window.history.length > 1) {\n window.history.back();\n } else if (fallback) {\n await this.navigate(fallback);\n } else {\n logger.warn('没有历史记录,无法返回');\n }\n }\n\n /**\n * 前进到下一页\n */\n static goForward(): void {\n window.history.forward();\n }\n\n /**\n * 替换当前路由\n * \n * @param to - 目标路径\n * @param options - 导航选项\n */\n static async replace(\n to: string,\n options?: Omit<NavigateOptions, 'replace'>\n ): Promise<void> {\n return this.navigate(to, { ...options, replace: true });\n }\n}\n"],"names":["RouterNavigation","buildTargetPath","to","query","base","window","location","origin","url","URL","Object","keys","length","params","URLSearchParams","search","entries","forEach","key","value","undefined","delete","set","String","toString","pathname","hash","navigateInternal","options","depth","visited","startTime","performance","now","MAX_REDIRECTS","Error","targetPath","has","add","routerManager","then","m","getRouterManager","router","getRouter","currentLocation","getCurrentRoute","targetLocation","path","lifecycleManager","getRouterLifecycleManager","beforeEachResult","beforeEach","finalPath","logger","debug","middlewareManager","getRouterMiddlewareManager","middlewareContext","from","middlewareResult","execute","allow","redirect","reason","replace","navigate","state","afterEach","duration","getMonitoring","trackRoutePerformance","totalTime","error","Set","goBack","fallback","history","back","warn","goForward","forward"],"mappings":"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"}
@@ -7,6 +7,9 @@ import type { RouteLocation, NavigateOptions } from '../types';
7
7
  * 路由导航器
8
8
  */
9
9
  export declare class RouterNavigation {
10
+ private static readonly MAX_REDIRECTS;
11
+ private static buildTargetPath;
12
+ private static navigateInternal;
10
13
  /**
11
14
  * 导航到指定路径
12
15
  *
@@ -38,4 +41,3 @@ export declare class RouterNavigation {
38
41
  */
39
42
  static replace(to: string, options?: Omit<NavigateOptions, 'replace'>): Promise<void>;
40
43
  }
41
- //# sourceMappingURL=RouterNavigation.d.ts.map