@vlian/framework 1.2.57 → 1.2.60

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 (685) hide show
  1. package/README.md +15 -3
  2. package/dist/analytics/index.cjs +1 -24
  3. package/dist/analytics/index.js +1 -3
  4. package/dist/analytics.umd.js +8 -208
  5. package/dist/components/LocaleSwitch.cjs +1 -118
  6. package/dist/components/LocaleSwitch.js +1 -103
  7. package/dist/components/ThemeSwitch.cjs +1 -117
  8. package/dist/components/ThemeSwitch.js +1 -102
  9. package/dist/components/index.cjs +1 -22
  10. package/dist/components/index.js +1 -4
  11. package/dist/components/persistence.cjs +1 -60
  12. package/dist/components/persistence.js +1 -39
  13. package/dist/core/Test.cjs +1 -66
  14. package/dist/core/Test.js +1 -15
  15. package/dist/core/app/AppContext.cjs +1 -350
  16. package/dist/core/app/AppContext.js +1 -339
  17. package/dist/core/app/AppContext.types.cjs +1 -6
  18. package/dist/core/app/AppContext.types.js +1 -5
  19. package/dist/core/app/BasicLayout.cjs +1 -124
  20. package/dist/core/app/BasicLayout.js +1 -74
  21. package/dist/core/app/DefaultApp.cjs +1 -152
  22. package/dist/core/app/DefaultApp.js +1 -143
  23. package/dist/core/app/index.cjs +1 -43
  24. package/dist/core/app/index.js +1 -7
  25. package/dist/core/config/AppConfig.cjs +1 -141
  26. package/dist/core/config/AppConfig.js +1 -133
  27. package/dist/core/config/ConfigLoader.cjs +1 -325
  28. package/dist/core/config/ConfigLoader.js +1 -311
  29. package/dist/core/config/ConfigValidator.cjs +2 -135
  30. package/dist/core/config/ConfigValidator.js +2 -121
  31. package/dist/core/config/index.cjs +1 -30
  32. package/dist/core/config/index.js +1 -7
  33. package/dist/core/dev/DevTools.cjs +1 -228
  34. package/dist/core/dev/DevTools.js +1 -210
  35. package/dist/core/error/ErrorBoundary.cjs +1 -403
  36. package/dist/core/error/ErrorBoundary.js +1 -399
  37. package/dist/core/error/ErrorHandler.cjs +1 -277
  38. package/dist/core/error/ErrorHandler.js +1 -261
  39. package/dist/core/error/index.cjs +1 -36
  40. package/dist/core/error/index.js +1 -6
  41. package/dist/core/event/AppEventBus.cjs +1 -446
  42. package/dist/core/event/AppEventBus.js +1 -438
  43. package/dist/core/event/frameworkEvents.cjs +1 -143
  44. package/dist/core/event/frameworkEvents.js +1 -135
  45. package/dist/core/event/hooks.cjs +1 -71
  46. package/dist/core/event/hooks.js +1 -95
  47. package/dist/core/event/index.cjs +1 -43
  48. package/dist/core/event/index.js +1 -10
  49. package/dist/core/event/types.cjs +1 -64
  50. package/dist/core/event/types.js +1 -56
  51. package/dist/core/event/useEventBus.cjs +1 -27
  52. package/dist/core/event/useEventBus.js +1 -39
  53. package/dist/core/index.cjs +1 -142
  54. package/dist/core/index.js +1 -69
  55. package/dist/core/initialization/InitializationErrorThrower.cjs +1 -77
  56. package/dist/core/initialization/InitializationErrorThrower.js +1 -30
  57. package/dist/core/initialization/index.cjs +1 -28
  58. package/dist/core/initialization/index.js +1 -7
  59. package/dist/core/initialization/initialization.cjs +1 -66
  60. package/dist/core/initialization/initialization.js +1 -78
  61. package/dist/core/initialization/initializationErrorState.cjs +1 -68
  62. package/dist/core/initialization/initializationErrorState.js +1 -60
  63. package/dist/core/kernel/defaultAdapters.cjs +1 -186
  64. package/dist/core/kernel/defaultAdapters.js +1 -176
  65. package/dist/core/kernel/errors.cjs +1 -71
  66. package/dist/core/kernel/errors.js +1 -53
  67. package/dist/core/kernel/index.cjs +1 -22
  68. package/dist/core/kernel/index.js +1 -4
  69. package/dist/core/kernel/startKernel.cjs +1 -202
  70. package/dist/core/kernel/startKernel.js +1 -192
  71. package/dist/core/kernel/types.cjs +1 -6
  72. package/dist/core/kernel/types.js +1 -3
  73. package/dist/core/middleware.cjs +1 -75
  74. package/dist/core/middleware.js +1 -61
  75. package/dist/core/plugin/PluginEventBus.cjs +1 -300
  76. package/dist/core/plugin/PluginEventBus.js +1 -286
  77. package/dist/core/plugin/PluginSandbox.cjs +1 -139
  78. package/dist/core/plugin/PluginSandbox.js +1 -125
  79. package/dist/core/plugin.cjs +1 -496
  80. package/dist/core/plugin.js +1 -438
  81. package/dist/core/router/RouterManager.cjs +1 -288
  82. package/dist/core/router/RouterManager.js +1 -272
  83. package/dist/core/router/adapter/AdapterManager.cjs +1 -237
  84. package/dist/core/router/adapter/AdapterManager.js +1 -221
  85. package/dist/core/router/adapter/index.cjs +1 -24
  86. package/dist/core/router/adapter/index.js +1 -7
  87. package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs +1 -130
  88. package/dist/core/router/adapter/react-router/ReactRouterAdapter.js +1 -116
  89. package/dist/core/router/adapter/react-router/index.cjs +1 -22
  90. package/dist/core/router/adapter/react-router/index.js +1 -5
  91. package/dist/core/router/adapter/types.cjs +1 -8
  92. package/dist/core/router/adapter/types.js +1 -7
  93. package/dist/core/router/dev/RouterDevTools.cjs +1 -262
  94. package/dist/core/router/dev/RouterDevTools.js +1 -211
  95. package/dist/core/router/dev/index.cjs +1 -22
  96. package/dist/core/router/dev/index.js +1 -5
  97. package/dist/core/router/dynamic/DynamicRouteManager.cjs +1 -195
  98. package/dist/core/router/dynamic/DynamicRouteManager.js +1 -179
  99. package/dist/core/router/dynamic/index.cjs +1 -22
  100. package/dist/core/router/dynamic/index.js +1 -5
  101. package/dist/core/router/errors/RouterError.cjs +1 -63
  102. package/dist/core/router/errors/RouterError.js +1 -48
  103. package/dist/core/router/errors/index.cjs +1 -22
  104. package/dist/core/router/errors/index.js +1 -5
  105. package/dist/core/router/index.cjs +1 -38
  106. package/dist/core/router/index.js +1 -32
  107. package/dist/core/router/lifecycle/RouterLifecycleManager.cjs +1 -146
  108. package/dist/core/router/lifecycle/RouterLifecycleManager.js +1 -130
  109. package/dist/core/router/lifecycle/index.cjs +1 -22
  110. package/dist/core/router/lifecycle/index.js +1 -5
  111. package/dist/core/router/middleware/RouterMiddlewareManager.cjs +1 -195
  112. package/dist/core/router/middleware/RouterMiddlewareManager.js +1 -179
  113. package/dist/core/router/middleware/auth.cjs +1 -68
  114. package/dist/core/router/middleware/auth.js +1 -63
  115. package/dist/core/router/middleware/index.cjs +1 -24
  116. package/dist/core/router/middleware/index.js +1 -7
  117. package/dist/core/router/middleware/types.cjs +1 -8
  118. package/dist/core/router/middleware/types.js +1 -7
  119. package/dist/core/router/monitoring/RouterMonitoring.cjs +1 -229
  120. package/dist/core/router/monitoring/RouterMonitoring.js +1 -213
  121. package/dist/core/router/monitoring/index.cjs +1 -22
  122. package/dist/core/router/monitoring/index.js +1 -5
  123. package/dist/core/router/navigation/RouterNavigation.cjs +1 -241
  124. package/dist/core/router/navigation/RouterNavigation.js +1 -192
  125. package/dist/core/router/navigation/index.cjs +1 -22
  126. package/dist/core/router/navigation/index.js +1 -5
  127. package/dist/core/router/performance/RouteCache.cjs +1 -307
  128. package/dist/core/router/performance/RouteCache.js +1 -291
  129. package/dist/core/router/performance/RoutePreloader.cjs +1 -294
  130. package/dist/core/router/performance/RoutePreloader.js +1 -277
  131. package/dist/core/router/performance/index.cjs +1 -23
  132. package/dist/core/router/performance/index.js +1 -6
  133. package/dist/core/router/plugin/RouterPluginManager.cjs +1 -264
  134. package/dist/core/router/plugin/RouterPluginManager.js +1 -248
  135. package/dist/core/router/plugin/index.cjs +1 -23
  136. package/dist/core/router/plugin/index.js +1 -6
  137. package/dist/core/router/plugin/types.cjs +1 -41
  138. package/dist/core/router/plugin/types.js +1 -33
  139. package/dist/core/router/types.cjs +1 -6
  140. package/dist/core/router/types.js +1 -5
  141. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs +1 -131
  142. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js +1 -121
  143. package/dist/core/router/utils/adapters/react-router/transform.cjs +1 -252
  144. package/dist/core/router/utils/adapters/react-router/transform.js +1 -242
  145. package/dist/core/router/utils/transform.cjs +1 -782
  146. package/dist/core/router/utils/transform.js +1 -791
  147. package/dist/core/router/validation/RouterConfigValidator.cjs +2 -85
  148. package/dist/core/router/validation/RouterConfigValidator.js +2 -77
  149. package/dist/core/router/validation/index.cjs +1 -23
  150. package/dist/core/router/validation/index.js +1 -6
  151. package/dist/core/router/validation/schema.cjs +1 -161
  152. package/dist/core/router/validation/schema.js +1 -151
  153. package/dist/core/router/version/RouteVersionManager.cjs +1 -207
  154. package/dist/core/router/version/RouteVersionManager.js +1 -191
  155. package/dist/core/router/version/index.cjs +1 -22
  156. package/dist/core/router/version/index.js +1 -5
  157. package/dist/core/splash/SplashScreen.cjs +1 -343
  158. package/dist/core/splash/SplashScreen.js +1 -293
  159. package/dist/core/splash/index.cjs +1 -24
  160. package/dist/core/splash/index.js +1 -6
  161. package/dist/core/splash/splashScreenUtils.cjs +1 -40
  162. package/dist/core/splash/splashScreenUtils.js +1 -30
  163. package/dist/core/startup/AppInstance.cjs +1 -241
  164. package/dist/core/startup/AppInstance.js +1 -226
  165. package/dist/core/startup/environment.cjs +1 -171
  166. package/dist/core/startup/environment.js +1 -154
  167. package/dist/core/startup/index.cjs +1 -25
  168. package/dist/core/startup/index.js +1 -8
  169. package/dist/core/startup/initializeServices.cjs +1 -228
  170. package/dist/core/startup/initializeServices.js +1 -188
  171. package/dist/core/startup/performanceTracker.cjs +1 -181
  172. package/dist/core/startup/performanceTracker.js +1 -167
  173. package/dist/core/startup/renderApp.cjs +1 -316
  174. package/dist/core/startup/renderApp.js +1 -267
  175. package/dist/core/startup/startApp.cjs +1 -319
  176. package/dist/core/startup/startApp.js +1 -315
  177. package/dist/core/types.cjs +1 -6
  178. package/dist/core/types.js +1 -5
  179. package/dist/index.cjs +1 -54
  180. package/dist/index.js +1 -11
  181. package/dist/index.umd.cjs +1 -29
  182. package/dist/index.umd.js +362 -13233
  183. package/dist/kernel/constants.cjs +1 -67
  184. package/dist/kernel/constants.js +1 -43
  185. package/dist/kernel/index.cjs +1 -40
  186. package/dist/kernel/index.js +1 -4
  187. package/dist/kernel/kernel.cjs +1 -297
  188. package/dist/kernel/kernel.js +1 -273
  189. package/dist/kernel/manager/cacheManager.cjs +1 -48
  190. package/dist/kernel/manager/cacheManager.js +1 -38
  191. package/dist/kernel/manager/i18n/I18nManager.cjs +1 -93
  192. package/dist/kernel/manager/i18n/I18nManager.js +1 -83
  193. package/dist/kernel/manager/i18n/i18n.persistence.cjs +1 -62
  194. package/dist/kernel/manager/i18n/i18n.persistence.js +1 -41
  195. package/dist/kernel/manager/i18n/i18n.schema.cjs +1 -88
  196. package/dist/kernel/manager/i18n/i18n.schema.js +1 -64
  197. package/dist/kernel/manager/i18n/index.cjs +1 -13
  198. package/dist/kernel/manager/i18n/index.js +1 -3
  199. package/dist/kernel/manager/i18nManager.cjs +1 -13
  200. package/dist/kernel/manager/i18nManager.js +1 -3
  201. package/dist/kernel/manager/index.cjs +1 -30
  202. package/dist/kernel/manager/index.js +1 -6
  203. package/dist/kernel/manager/logger/LoggerManager.cjs +1 -109
  204. package/dist/kernel/manager/logger/LoggerManager.js +1 -99
  205. package/dist/kernel/manager/logger/index.cjs +1 -13
  206. package/dist/kernel/manager/logger/index.js +1 -3
  207. package/dist/kernel/manager/logger/logger.persistence.cjs +1 -64
  208. package/dist/kernel/manager/logger/logger.persistence.js +1 -43
  209. package/dist/kernel/manager/logger/logger.schema.cjs +1 -76
  210. package/dist/kernel/manager/logger/logger.schema.js +1 -55
  211. package/dist/kernel/manager/loggerManager.cjs +1 -13
  212. package/dist/kernel/manager/loggerManager.js +1 -3
  213. package/dist/kernel/manager/theme/ThemeManager.cjs +1 -86
  214. package/dist/kernel/manager/theme/ThemeManager.js +1 -76
  215. package/dist/kernel/manager/theme/index.cjs +1 -13
  216. package/dist/kernel/manager/theme/index.js +1 -3
  217. package/dist/kernel/manager/theme/theme.dom.cjs +1 -63
  218. package/dist/kernel/manager/theme/theme.dom.js +1 -45
  219. package/dist/kernel/manager/theme/theme.persistence.cjs +1 -59
  220. package/dist/kernel/manager/theme/theme.persistence.js +1 -38
  221. package/dist/kernel/manager/theme/theme.schema.cjs +1 -124
  222. package/dist/kernel/manager/theme/theme.schema.js +1 -97
  223. package/dist/kernel/manager/themeManager.cjs +1 -13
  224. package/dist/kernel/manager/themeManager.js +1 -3
  225. package/dist/kernel/types.cjs +1 -6
  226. package/dist/kernel/types.js +1 -3
  227. package/dist/library/index.cjs +1 -21
  228. package/dist/library/index.js +1 -4
  229. package/dist/library/locale/index.cjs +1 -41
  230. package/dist/library/locale/index.js +1 -12
  231. package/dist/library/locale/langs/en-us/index.cjs +1 -34
  232. package/dist/library/locale/langs/en-us/index.js +1 -24
  233. package/dist/library/locale/langs/zh-cn/index.cjs +1 -34
  234. package/dist/library/locale/langs/zh-cn/index.js +1 -24
  235. package/dist/library/locale/types.cjs +1 -6
  236. package/dist/library/locale/types.js +1 -3
  237. package/dist/library/storage/cache.cjs +1 -245
  238. package/dist/library/storage/cache.js +1 -237
  239. package/dist/library/storage/encryption.cjs +1 -149
  240. package/dist/library/storage/encryption.js +1 -141
  241. package/dist/library/storage/index.cjs +1 -126
  242. package/dist/library/storage/index.js +1 -106
  243. package/dist/state/StateManager.cjs +1 -168
  244. package/dist/state/StateManager.js +1 -160
  245. package/dist/state/adapters/AdapterFactory.cjs +1 -91
  246. package/dist/state/adapters/AdapterFactory.js +1 -85
  247. package/dist/state/adapters/DefaultAdapter.cjs +1 -77
  248. package/dist/state/adapters/DefaultAdapter.js +1 -71
  249. package/dist/state/adapters/ReduxAdapter.cjs +1 -445
  250. package/dist/state/adapters/ReduxAdapter.js +1 -439
  251. package/dist/state/adapters/ZustandAdapter.cjs +1 -71
  252. package/dist/state/adapters/ZustandAdapter.js +1 -70
  253. package/dist/state/adapters/index.cjs +1 -46
  254. package/dist/state/adapters/index.js +1 -9
  255. package/dist/state/adapters/types.cjs +1 -22
  256. package/dist/state/adapters/types.js +1 -5
  257. package/dist/state/core/DerivedStateInstance.cjs +1 -176
  258. package/dist/state/core/DerivedStateInstance.js +1 -173
  259. package/dist/state/core/StateInstance.cjs +1 -172
  260. package/dist/state/core/StateInstance.js +1 -168
  261. package/dist/state/core/StateRegistry.cjs +1 -112
  262. package/dist/state/core/StateRegistry.js +1 -106
  263. package/dist/state/core/StateScope.cjs +1 -139
  264. package/dist/state/core/StateScope.js +1 -133
  265. package/dist/state/core/index.cjs +1 -32
  266. package/dist/state/core/index.js +1 -8
  267. package/dist/state/index.cjs +1 -32
  268. package/dist/state/index.js +1 -12
  269. package/dist/state/types.cjs +1 -14
  270. package/dist/state/types.js +1 -13
  271. package/dist/state.umd.js +22 -1395
  272. package/dist/types.cjs +1 -6
  273. package/dist/types.js +1 -3
  274. package/dist/utils/analytics.cjs +1 -219
  275. package/dist/utils/analytics.js +1 -204
  276. package/dist/utils/configSecurity.cjs +3 -184
  277. package/dist/utils/configSecurity.js +3 -176
  278. package/dist/utils/csrf.cjs +1 -20
  279. package/dist/utils/csrf.js +1 -3
  280. package/dist/utils/errors/ErrorCodes.cjs +1 -27
  281. package/dist/utils/errors/ErrorCodes.js +1 -3
  282. package/dist/utils/errors.cjs +1 -113
  283. package/dist/utils/errors.js +1 -18
  284. package/dist/utils/index.cjs +1 -137
  285. package/dist/utils/index.js +1 -48
  286. package/dist/utils/logger.cjs +1 -27
  287. package/dist/utils/logger.js +1 -3
  288. package/dist/utils/logger.types.cjs +1 -13
  289. package/dist/utils/logger.types.js +1 -3
  290. package/dist/utils/monitoring.cjs +1 -20
  291. package/dist/utils/monitoring.js +1 -3
  292. package/dist/utils/performance.cjs +1 -24
  293. package/dist/utils/performance.js +1 -3
  294. package/dist/utils/resourceLoader.cjs +1 -24
  295. package/dist/utils/resourceLoader.js +1 -3
  296. package/dist/utils/runtimeSecurity.cjs +1 -13
  297. package/dist/utils/runtimeSecurity.js +1 -3
  298. package/dist/utils/security.cjs +1 -21
  299. package/dist/utils/security.js +1 -3
  300. package/dist/utils/traceId.cjs +1 -39
  301. package/dist/utils/traceId.js +1 -3
  302. package/dist/utils/validation.cjs +1 -21
  303. package/dist/utils/validation.js +1 -3
  304. package/package.json +9 -6
  305. package/dist/analytics/index.cjs.map +0 -1
  306. package/dist/analytics/index.js.map +0 -1
  307. package/dist/analytics.umd.js.map +0 -1
  308. package/dist/components/LocaleSwitch.cjs.map +0 -1
  309. package/dist/components/LocaleSwitch.js.map +0 -1
  310. package/dist/components/ThemeSwitch.cjs.map +0 -1
  311. package/dist/components/ThemeSwitch.js.map +0 -1
  312. package/dist/components/index.cjs.map +0 -1
  313. package/dist/components/index.js.map +0 -1
  314. package/dist/components/persistence.cjs.map +0 -1
  315. package/dist/components/persistence.js.map +0 -1
  316. package/dist/core/Test.cjs.map +0 -1
  317. package/dist/core/Test.js.map +0 -1
  318. package/dist/core/app/AppContext.cjs.map +0 -1
  319. package/dist/core/app/AppContext.js.map +0 -1
  320. package/dist/core/app/AppContext.types.cjs.map +0 -1
  321. package/dist/core/app/AppContext.types.js.map +0 -1
  322. package/dist/core/app/BasicLayout.cjs.map +0 -1
  323. package/dist/core/app/BasicLayout.js.map +0 -1
  324. package/dist/core/app/DefaultApp.cjs.map +0 -1
  325. package/dist/core/app/DefaultApp.js.map +0 -1
  326. package/dist/core/app/index.cjs.map +0 -1
  327. package/dist/core/app/index.js.map +0 -1
  328. package/dist/core/config/AppConfig.cjs.map +0 -1
  329. package/dist/core/config/AppConfig.js.map +0 -1
  330. package/dist/core/config/ConfigLoader.cjs.map +0 -1
  331. package/dist/core/config/ConfigLoader.js.map +0 -1
  332. package/dist/core/config/ConfigValidator.cjs.map +0 -1
  333. package/dist/core/config/ConfigValidator.js.map +0 -1
  334. package/dist/core/config/index.cjs.map +0 -1
  335. package/dist/core/config/index.js.map +0 -1
  336. package/dist/core/dev/DevTools.cjs.map +0 -1
  337. package/dist/core/dev/DevTools.js.map +0 -1
  338. package/dist/core/error/ErrorBoundary.cjs.map +0 -1
  339. package/dist/core/error/ErrorBoundary.js.map +0 -1
  340. package/dist/core/error/ErrorHandler.cjs.map +0 -1
  341. package/dist/core/error/ErrorHandler.js.map +0 -1
  342. package/dist/core/error/index.cjs.map +0 -1
  343. package/dist/core/error/index.js.map +0 -1
  344. package/dist/core/event/AppEventBus.cjs.map +0 -1
  345. package/dist/core/event/AppEventBus.js.map +0 -1
  346. package/dist/core/event/frameworkEvents.cjs.map +0 -1
  347. package/dist/core/event/frameworkEvents.js.map +0 -1
  348. package/dist/core/event/hooks.cjs.map +0 -1
  349. package/dist/core/event/hooks.js.map +0 -1
  350. package/dist/core/event/index.cjs.map +0 -1
  351. package/dist/core/event/index.js.map +0 -1
  352. package/dist/core/event/types.cjs.map +0 -1
  353. package/dist/core/event/types.js.map +0 -1
  354. package/dist/core/event/useEventBus.cjs.map +0 -1
  355. package/dist/core/event/useEventBus.js.map +0 -1
  356. package/dist/core/index.cjs.map +0 -1
  357. package/dist/core/index.js.map +0 -1
  358. package/dist/core/initialization/InitializationErrorThrower.cjs.map +0 -1
  359. package/dist/core/initialization/InitializationErrorThrower.js.map +0 -1
  360. package/dist/core/initialization/index.cjs.map +0 -1
  361. package/dist/core/initialization/index.js.map +0 -1
  362. package/dist/core/initialization/initialization.cjs.map +0 -1
  363. package/dist/core/initialization/initialization.js.map +0 -1
  364. package/dist/core/initialization/initializationErrorState.cjs.map +0 -1
  365. package/dist/core/initialization/initializationErrorState.js.map +0 -1
  366. package/dist/core/kernel/defaultAdapters.cjs.map +0 -1
  367. package/dist/core/kernel/defaultAdapters.js.map +0 -1
  368. package/dist/core/kernel/errors.cjs.map +0 -1
  369. package/dist/core/kernel/errors.js.map +0 -1
  370. package/dist/core/kernel/index.cjs.map +0 -1
  371. package/dist/core/kernel/index.js.map +0 -1
  372. package/dist/core/kernel/startKernel.cjs.map +0 -1
  373. package/dist/core/kernel/startKernel.js.map +0 -1
  374. package/dist/core/kernel/types.cjs.map +0 -1
  375. package/dist/core/kernel/types.js.map +0 -1
  376. package/dist/core/middleware.cjs.map +0 -1
  377. package/dist/core/middleware.js.map +0 -1
  378. package/dist/core/plugin/PluginEventBus.cjs.map +0 -1
  379. package/dist/core/plugin/PluginEventBus.js.map +0 -1
  380. package/dist/core/plugin/PluginSandbox.cjs.map +0 -1
  381. package/dist/core/plugin/PluginSandbox.js.map +0 -1
  382. package/dist/core/plugin.cjs.map +0 -1
  383. package/dist/core/plugin.js.map +0 -1
  384. package/dist/core/router/RouterManager.cjs.map +0 -1
  385. package/dist/core/router/RouterManager.js.map +0 -1
  386. package/dist/core/router/adapter/AdapterManager.cjs.map +0 -1
  387. package/dist/core/router/adapter/AdapterManager.js.map +0 -1
  388. package/dist/core/router/adapter/index.cjs.map +0 -1
  389. package/dist/core/router/adapter/index.js.map +0 -1
  390. package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs.map +0 -1
  391. package/dist/core/router/adapter/react-router/ReactRouterAdapter.js.map +0 -1
  392. package/dist/core/router/adapter/react-router/index.cjs.map +0 -1
  393. package/dist/core/router/adapter/react-router/index.js.map +0 -1
  394. package/dist/core/router/adapter/types.cjs.map +0 -1
  395. package/dist/core/router/adapter/types.js.map +0 -1
  396. package/dist/core/router/dev/RouterDevTools.cjs.map +0 -1
  397. package/dist/core/router/dev/RouterDevTools.js.map +0 -1
  398. package/dist/core/router/dev/index.cjs.map +0 -1
  399. package/dist/core/router/dev/index.js.map +0 -1
  400. package/dist/core/router/dynamic/DynamicRouteManager.cjs.map +0 -1
  401. package/dist/core/router/dynamic/DynamicRouteManager.js.map +0 -1
  402. package/dist/core/router/dynamic/index.cjs.map +0 -1
  403. package/dist/core/router/dynamic/index.js.map +0 -1
  404. package/dist/core/router/errors/RouterError.cjs.map +0 -1
  405. package/dist/core/router/errors/RouterError.js.map +0 -1
  406. package/dist/core/router/errors/index.cjs.map +0 -1
  407. package/dist/core/router/errors/index.js.map +0 -1
  408. package/dist/core/router/index.cjs.map +0 -1
  409. package/dist/core/router/index.js.map +0 -1
  410. package/dist/core/router/lifecycle/RouterLifecycleManager.cjs.map +0 -1
  411. package/dist/core/router/lifecycle/RouterLifecycleManager.js.map +0 -1
  412. package/dist/core/router/lifecycle/index.cjs.map +0 -1
  413. package/dist/core/router/lifecycle/index.js.map +0 -1
  414. package/dist/core/router/middleware/RouterMiddlewareManager.cjs.map +0 -1
  415. package/dist/core/router/middleware/RouterMiddlewareManager.js.map +0 -1
  416. package/dist/core/router/middleware/auth.cjs.map +0 -1
  417. package/dist/core/router/middleware/auth.js.map +0 -1
  418. package/dist/core/router/middleware/index.cjs.map +0 -1
  419. package/dist/core/router/middleware/index.js.map +0 -1
  420. package/dist/core/router/middleware/types.cjs.map +0 -1
  421. package/dist/core/router/middleware/types.js.map +0 -1
  422. package/dist/core/router/monitoring/RouterMonitoring.cjs.map +0 -1
  423. package/dist/core/router/monitoring/RouterMonitoring.js.map +0 -1
  424. package/dist/core/router/monitoring/index.cjs.map +0 -1
  425. package/dist/core/router/monitoring/index.js.map +0 -1
  426. package/dist/core/router/navigation/RouterNavigation.cjs.map +0 -1
  427. package/dist/core/router/navigation/RouterNavigation.js.map +0 -1
  428. package/dist/core/router/navigation/index.cjs.map +0 -1
  429. package/dist/core/router/navigation/index.js.map +0 -1
  430. package/dist/core/router/performance/RouteCache.cjs.map +0 -1
  431. package/dist/core/router/performance/RouteCache.js.map +0 -1
  432. package/dist/core/router/performance/RoutePreloader.cjs.map +0 -1
  433. package/dist/core/router/performance/RoutePreloader.js.map +0 -1
  434. package/dist/core/router/performance/index.cjs.map +0 -1
  435. package/dist/core/router/performance/index.js.map +0 -1
  436. package/dist/core/router/plugin/RouterPluginManager.cjs.map +0 -1
  437. package/dist/core/router/plugin/RouterPluginManager.js.map +0 -1
  438. package/dist/core/router/plugin/index.cjs.map +0 -1
  439. package/dist/core/router/plugin/index.js.map +0 -1
  440. package/dist/core/router/plugin/types.cjs.map +0 -1
  441. package/dist/core/router/plugin/types.js.map +0 -1
  442. package/dist/core/router/types.cjs.map +0 -1
  443. package/dist/core/router/types.js.map +0 -1
  444. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs.map +0 -1
  445. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js.map +0 -1
  446. package/dist/core/router/utils/adapters/react-router/transform.cjs.map +0 -1
  447. package/dist/core/router/utils/adapters/react-router/transform.js.map +0 -1
  448. package/dist/core/router/utils/transform.cjs.map +0 -1
  449. package/dist/core/router/utils/transform.js.map +0 -1
  450. package/dist/core/router/validation/RouterConfigValidator.cjs.map +0 -1
  451. package/dist/core/router/validation/RouterConfigValidator.js.map +0 -1
  452. package/dist/core/router/validation/index.cjs.map +0 -1
  453. package/dist/core/router/validation/index.js.map +0 -1
  454. package/dist/core/router/validation/schema.cjs.map +0 -1
  455. package/dist/core/router/validation/schema.js.map +0 -1
  456. package/dist/core/router/version/RouteVersionManager.cjs.map +0 -1
  457. package/dist/core/router/version/RouteVersionManager.js.map +0 -1
  458. package/dist/core/router/version/index.cjs.map +0 -1
  459. package/dist/core/router/version/index.js.map +0 -1
  460. package/dist/core/splash/SplashScreen.cjs.map +0 -1
  461. package/dist/core/splash/SplashScreen.js.map +0 -1
  462. package/dist/core/splash/index.cjs.map +0 -1
  463. package/dist/core/splash/index.js.map +0 -1
  464. package/dist/core/splash/splashScreenUtils.cjs.map +0 -1
  465. package/dist/core/splash/splashScreenUtils.js.map +0 -1
  466. package/dist/core/startup/AppInstance.cjs.map +0 -1
  467. package/dist/core/startup/AppInstance.js.map +0 -1
  468. package/dist/core/startup/environment.cjs.map +0 -1
  469. package/dist/core/startup/environment.js.map +0 -1
  470. package/dist/core/startup/index.cjs.map +0 -1
  471. package/dist/core/startup/index.js.map +0 -1
  472. package/dist/core/startup/initializeServices.cjs.map +0 -1
  473. package/dist/core/startup/initializeServices.js.map +0 -1
  474. package/dist/core/startup/performanceTracker.cjs.map +0 -1
  475. package/dist/core/startup/performanceTracker.js.map +0 -1
  476. package/dist/core/startup/renderApp.cjs.map +0 -1
  477. package/dist/core/startup/renderApp.js.map +0 -1
  478. package/dist/core/startup/startApp.cjs.map +0 -1
  479. package/dist/core/startup/startApp.js.map +0 -1
  480. package/dist/core/types.cjs.map +0 -1
  481. package/dist/core/types.js.map +0 -1
  482. package/dist/index.cjs.map +0 -1
  483. package/dist/index.js.map +0 -1
  484. package/dist/index.umd.cjs.map +0 -1
  485. package/dist/index.umd.js.map +0 -1
  486. package/dist/kernel/constants.cjs.map +0 -1
  487. package/dist/kernel/constants.js.map +0 -1
  488. package/dist/kernel/index.cjs.map +0 -1
  489. package/dist/kernel/index.js.map +0 -1
  490. package/dist/kernel/kernel.cjs.map +0 -1
  491. package/dist/kernel/kernel.js.map +0 -1
  492. package/dist/kernel/manager/cacheManager.cjs.map +0 -1
  493. package/dist/kernel/manager/cacheManager.js.map +0 -1
  494. package/dist/kernel/manager/i18n/I18nManager.cjs.map +0 -1
  495. package/dist/kernel/manager/i18n/I18nManager.js.map +0 -1
  496. package/dist/kernel/manager/i18n/i18n.persistence.cjs.map +0 -1
  497. package/dist/kernel/manager/i18n/i18n.persistence.js.map +0 -1
  498. package/dist/kernel/manager/i18n/i18n.schema.cjs.map +0 -1
  499. package/dist/kernel/manager/i18n/i18n.schema.js.map +0 -1
  500. package/dist/kernel/manager/i18n/index.cjs.map +0 -1
  501. package/dist/kernel/manager/i18n/index.js.map +0 -1
  502. package/dist/kernel/manager/i18nManager.cjs.map +0 -1
  503. package/dist/kernel/manager/i18nManager.js.map +0 -1
  504. package/dist/kernel/manager/index.cjs.map +0 -1
  505. package/dist/kernel/manager/index.js.map +0 -1
  506. package/dist/kernel/manager/logger/LoggerManager.cjs.map +0 -1
  507. package/dist/kernel/manager/logger/LoggerManager.js.map +0 -1
  508. package/dist/kernel/manager/logger/index.cjs.map +0 -1
  509. package/dist/kernel/manager/logger/index.js.map +0 -1
  510. package/dist/kernel/manager/logger/logger.persistence.cjs.map +0 -1
  511. package/dist/kernel/manager/logger/logger.persistence.js.map +0 -1
  512. package/dist/kernel/manager/logger/logger.schema.cjs.map +0 -1
  513. package/dist/kernel/manager/logger/logger.schema.js.map +0 -1
  514. package/dist/kernel/manager/loggerManager.cjs.map +0 -1
  515. package/dist/kernel/manager/loggerManager.js.map +0 -1
  516. package/dist/kernel/manager/persistence.cjs +0 -78
  517. package/dist/kernel/manager/persistence.cjs.map +0 -1
  518. package/dist/kernel/manager/persistence.d.ts +0 -3
  519. package/dist/kernel/manager/persistence.js +0 -60
  520. package/dist/kernel/manager/persistence.js.map +0 -1
  521. package/dist/kernel/manager/theme/ThemeManager.cjs.map +0 -1
  522. package/dist/kernel/manager/theme/ThemeManager.js.map +0 -1
  523. package/dist/kernel/manager/theme/index.cjs.map +0 -1
  524. package/dist/kernel/manager/theme/index.js.map +0 -1
  525. package/dist/kernel/manager/theme/theme.dom.cjs.map +0 -1
  526. package/dist/kernel/manager/theme/theme.dom.js.map +0 -1
  527. package/dist/kernel/manager/theme/theme.persistence.cjs.map +0 -1
  528. package/dist/kernel/manager/theme/theme.persistence.js.map +0 -1
  529. package/dist/kernel/manager/theme/theme.schema.cjs.map +0 -1
  530. package/dist/kernel/manager/theme/theme.schema.js.map +0 -1
  531. package/dist/kernel/manager/themeManager.cjs.map +0 -1
  532. package/dist/kernel/manager/themeManager.js.map +0 -1
  533. package/dist/kernel/types.cjs.map +0 -1
  534. package/dist/kernel/types.js.map +0 -1
  535. package/dist/library/index.cjs.map +0 -1
  536. package/dist/library/index.js.map +0 -1
  537. package/dist/library/locale/index.cjs.map +0 -1
  538. package/dist/library/locale/index.js.map +0 -1
  539. package/dist/library/locale/langs/en-us/index.cjs.map +0 -1
  540. package/dist/library/locale/langs/en-us/index.js.map +0 -1
  541. package/dist/library/locale/langs/zh-cn/index.cjs.map +0 -1
  542. package/dist/library/locale/langs/zh-cn/index.js.map +0 -1
  543. package/dist/library/locale/types.cjs.map +0 -1
  544. package/dist/library/locale/types.js.map +0 -1
  545. package/dist/library/storage/cache.cjs.map +0 -1
  546. package/dist/library/storage/cache.js.map +0 -1
  547. package/dist/library/storage/encryption.cjs.map +0 -1
  548. package/dist/library/storage/encryption.js.map +0 -1
  549. package/dist/library/storage/index.cjs.map +0 -1
  550. package/dist/library/storage/index.js.map +0 -1
  551. package/dist/request/adapter/RequestAdapter.d.ts +0 -85
  552. package/dist/request/adapter/RequestAdapter.js +0 -70
  553. package/dist/request/adapter/RequestAdapter.js.map +0 -1
  554. package/dist/request/adapter/axiosAdapter.d.ts +0 -10
  555. package/dist/request/adapter/axiosAdapter.js +0 -115
  556. package/dist/request/adapter/axiosAdapter.js.map +0 -1
  557. package/dist/request/adapter/fetchAdapter.d.ts +0 -10
  558. package/dist/request/adapter/fetchAdapter.js +0 -126
  559. package/dist/request/adapter/fetchAdapter.js.map +0 -1
  560. package/dist/request/adapter/index.d.ts +0 -9
  561. package/dist/request/adapter/index.js +0 -14
  562. package/dist/request/adapter/index.js.map +0 -1
  563. package/dist/request/adapter/kyAdapter.d.ts +0 -10
  564. package/dist/request/adapter/kyAdapter.js +0 -142
  565. package/dist/request/adapter/kyAdapter.js.map +0 -1
  566. package/dist/request/adapter/undiciAdapter.d.ts +0 -10
  567. package/dist/request/adapter/undiciAdapter.js +0 -164
  568. package/dist/request/adapter/undiciAdapter.js.map +0 -1
  569. package/dist/request/adapter.d.ts +0 -1
  570. package/dist/request/core/RequestClient.d.ts +0 -134
  571. package/dist/request/core/RequestClient.js +0 -509
  572. package/dist/request/core/RequestClient.js.map +0 -1
  573. package/dist/request/core/index.d.ts +0 -5
  574. package/dist/request/core/index.js +0 -5
  575. package/dist/request/core/index.js.map +0 -1
  576. package/dist/request/core.d.ts +0 -1
  577. package/dist/request/index.d.ts +0 -1
  578. package/dist/request/index.js +0 -50
  579. package/dist/request/index.js.map +0 -1
  580. package/dist/request/plugin/RequestPlugin.d.ts +0 -170
  581. package/dist/request/plugin/RequestPlugin.js +0 -203
  582. package/dist/request/plugin/RequestPlugin.js.map +0 -1
  583. package/dist/request/plugin/cache.d.ts +0 -33
  584. package/dist/request/plugin/cache.js +0 -264
  585. package/dist/request/plugin/cache.js.map +0 -1
  586. package/dist/request/plugin/csrfPlugin.d.ts +0 -21
  587. package/dist/request/plugin/csrfPlugin.js +0 -44
  588. package/dist/request/plugin/csrfPlugin.js.map +0 -1
  589. package/dist/request/plugin/index.d.ts +0 -11
  590. package/dist/request/plugin/index.js +0 -12
  591. package/dist/request/plugin/index.js.map +0 -1
  592. package/dist/request/plugin/monitoring.d.ts +0 -112
  593. package/dist/request/plugin/monitoring.js +0 -205
  594. package/dist/request/plugin/monitoring.js.map +0 -1
  595. package/dist/request/plugin/queue.d.ts +0 -91
  596. package/dist/request/plugin/queue.js +0 -156
  597. package/dist/request/plugin/queue.js.map +0 -1
  598. package/dist/request/plugin/retry.d.ts +0 -34
  599. package/dist/request/plugin/retry.js +0 -93
  600. package/dist/request/plugin/retry.js.map +0 -1
  601. package/dist/request/plugin/validation.d.ts +0 -26
  602. package/dist/request/plugin/validation.js +0 -116
  603. package/dist/request/plugin/validation.js.map +0 -1
  604. package/dist/request/plugin.d.ts +0 -1
  605. package/dist/request/runtime/RequestContext.d.ts +0 -50
  606. package/dist/request/runtime/RequestContext.js +0 -86
  607. package/dist/request/runtime/RequestContext.js.map +0 -1
  608. package/dist/request/runtime/index.d.ts +0 -4
  609. package/dist/request/runtime/index.js +0 -5
  610. package/dist/request/runtime/index.js.map +0 -1
  611. package/dist/request/runtime.d.ts +0 -1
  612. package/dist/request/types.d.ts +0 -1
  613. package/dist/request/types.js +0 -97
  614. package/dist/request/types.js.map +0 -1
  615. package/dist/request/utils/RequestQueueManager.d.ts +0 -74
  616. package/dist/request/utils/RequestQueueManager.js +0 -160
  617. package/dist/request/utils/RequestQueueManager.js.map +0 -1
  618. package/dist/request/utils/dependencyCheck.d.ts +0 -63
  619. package/dist/request/utils/dependencyCheck.js +0 -192
  620. package/dist/request/utils/dependencyCheck.js.map +0 -1
  621. package/dist/request/utils/index.d.ts +0 -5
  622. package/dist/request/utils/index.js +0 -6
  623. package/dist/request/utils/index.js.map +0 -1
  624. package/dist/request/utils.d.ts +0 -1
  625. package/dist/state/StateManager.cjs.map +0 -1
  626. package/dist/state/StateManager.js.map +0 -1
  627. package/dist/state/adapters/AdapterFactory.cjs.map +0 -1
  628. package/dist/state/adapters/AdapterFactory.js.map +0 -1
  629. package/dist/state/adapters/DefaultAdapter.cjs.map +0 -1
  630. package/dist/state/adapters/DefaultAdapter.js.map +0 -1
  631. package/dist/state/adapters/ReduxAdapter.cjs.map +0 -1
  632. package/dist/state/adapters/ReduxAdapter.js.map +0 -1
  633. package/dist/state/adapters/ZustandAdapter.cjs.map +0 -1
  634. package/dist/state/adapters/ZustandAdapter.js.map +0 -1
  635. package/dist/state/adapters/index.cjs.map +0 -1
  636. package/dist/state/adapters/index.js.map +0 -1
  637. package/dist/state/adapters/types.cjs.map +0 -1
  638. package/dist/state/adapters/types.js.map +0 -1
  639. package/dist/state/core/DerivedStateInstance.cjs.map +0 -1
  640. package/dist/state/core/DerivedStateInstance.js.map +0 -1
  641. package/dist/state/core/StateInstance.cjs.map +0 -1
  642. package/dist/state/core/StateInstance.js.map +0 -1
  643. package/dist/state/core/StateRegistry.cjs.map +0 -1
  644. package/dist/state/core/StateRegistry.js.map +0 -1
  645. package/dist/state/core/StateScope.cjs.map +0 -1
  646. package/dist/state/core/StateScope.js.map +0 -1
  647. package/dist/state/core/index.cjs.map +0 -1
  648. package/dist/state/core/index.js.map +0 -1
  649. package/dist/state/index.cjs.map +0 -1
  650. package/dist/state/index.js.map +0 -1
  651. package/dist/state/types.cjs.map +0 -1
  652. package/dist/state/types.js.map +0 -1
  653. package/dist/state.umd.js.map +0 -1
  654. package/dist/types.cjs.map +0 -1
  655. package/dist/types.js.map +0 -1
  656. package/dist/utils/analytics.cjs.map +0 -1
  657. package/dist/utils/analytics.js.map +0 -1
  658. package/dist/utils/configSecurity.cjs.map +0 -1
  659. package/dist/utils/configSecurity.js.map +0 -1
  660. package/dist/utils/csrf.cjs.map +0 -1
  661. package/dist/utils/csrf.js.map +0 -1
  662. package/dist/utils/errors/ErrorCodes.cjs.map +0 -1
  663. package/dist/utils/errors/ErrorCodes.js.map +0 -1
  664. package/dist/utils/errors.cjs.map +0 -1
  665. package/dist/utils/errors.js.map +0 -1
  666. package/dist/utils/index.cjs.map +0 -1
  667. package/dist/utils/index.js.map +0 -1
  668. package/dist/utils/logger.cjs.map +0 -1
  669. package/dist/utils/logger.js.map +0 -1
  670. package/dist/utils/logger.types.cjs.map +0 -1
  671. package/dist/utils/logger.types.js.map +0 -1
  672. package/dist/utils/monitoring.cjs.map +0 -1
  673. package/dist/utils/monitoring.js.map +0 -1
  674. package/dist/utils/performance.cjs.map +0 -1
  675. package/dist/utils/performance.js.map +0 -1
  676. package/dist/utils/resourceLoader.cjs.map +0 -1
  677. package/dist/utils/resourceLoader.js.map +0 -1
  678. package/dist/utils/runtimeSecurity.cjs.map +0 -1
  679. package/dist/utils/runtimeSecurity.js.map +0 -1
  680. package/dist/utils/security.cjs.map +0 -1
  681. package/dist/utils/security.js.map +0 -1
  682. package/dist/utils/traceId.cjs.map +0 -1
  683. package/dist/utils/traceId.js.map +0 -1
  684. package/dist/utils/validation.cjs.map +0 -1
  685. package/dist/utils/validation.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/core/plugin.ts"],"sourcesContent":["import type { StartOptions } from './types';\nimport type { InitializationContext } from './initialization';\nimport { PluginSandbox, type PluginSandboxConfig } from './plugin/PluginSandbox';\nimport { pluginEventBus, type PluginEventBus } from './plugin/PluginEventBus';\n\n/**\n * 插件接口\n */\nexport interface Plugin<TOption = unknown> {\n /**\n * 插件名称\n */\n name: string;\n\n /**\n * 插件版本\n */\n version?: string;\n\n /**\n * 插件依赖列表(插件名称数组)\n * 优化:支持插件依赖管理\n */\n dependencies?: string[];\n\n /**\n * 插件优先级(数字越小优先级越高)\n * 优化:支持插件加载顺序控制\n */\n priority?: number;\n\n /**\n * 插件沙箱配置(用于权限控制)\n */\n sandbox?: PluginSandboxConfig;\n\n /**\n * 初始化前钩子\n */\n beforeInit?: (options: Partial<StartOptions>, sandbox: PluginSandbox, eventBus: PluginEventBus) => Promise<void> | void;\n\n /**\n * 初始化钩子\n */\n init?: (options: Partial<StartOptions>, context: InitializationContext, sandbox: PluginSandbox, eventBus: PluginEventBus) => Promise<void> | void;\n\n /**\n * 初始化后钩子\n */\n afterInit?: (options: Partial<StartOptions>, context: InitializationContext, sandbox: PluginSandbox, eventBus: PluginEventBus) => Promise<void> | void;\n\n /**\n * 销毁钩子\n */\n destroy?: () => Promise<void> | void;\n\n /**\n * 自定义属性\n */\n readonly option?: Readonly<TOption>;\n}\n\n/**\n * 插件加载选项\n */\nexport interface PluginLoadOptions {\n /**\n * 插件URL(用于动态加载)\n */\n url?: string;\n /**\n * 插件模块路径(用于动态导入)\n */\n modulePath?: string;\n /**\n * 是否立即初始化\n */\n initialize?: boolean;\n /**\n * 初始化上下文(如果立即初始化)\n */\n initContext?: InitializationContext;\n /**\n * 启动选项(如果立即初始化)\n */\n startOptions?: StartOptions;\n}\n\n/**\n * 插件管理器\n *\n * 优化:\n * 1. 支持插件依赖管理\n * 2. 支持插件优先级控制\n * 3. 支持插件生命周期管理\n * 4. 支持插件热插拔(动态加载/卸载)\n */\nexport class PluginManager {\n private plugins: Map<string, Plugin> = new Map();\n private sandboxes: Map<string, PluginSandbox> = new Map();\n private pluginStatus: Map<string, 'registered' | 'initialized' | 'destroyed' | 'loading'> = new Map();\n private pluginLoaders: Map<string, () => Promise<Plugin>> = new Map();\n\n /**\n * 注册插件\n *\n * 优化:检查插件依赖是否已注册\n */\n register(plugin: Plugin): void {\n if (this.plugins.has(plugin.name)) {\n console.warn(`插件 ${plugin.name} 已存在,将被覆盖`);\n }\n\n // 检查依赖是否已注册\n if (plugin.dependencies && plugin.dependencies.length > 0) {\n const missingDeps = plugin.dependencies.filter(\n (dep) => !this.plugins.has(dep)\n );\n if (missingDeps.length > 0) {\n console.warn(\n `插件 ${plugin.name} 的依赖未注册: ${missingDeps.join(', ')}`\n );\n }\n }\n\n this.plugins.set(plugin.name, plugin);\n this.pluginStatus.set(plugin.name, 'registered');\n\n // 创建插件沙箱\n if (plugin.sandbox) {\n const sandbox = new PluginSandbox({\n ...plugin.sandbox,\n name: plugin.name,\n });\n this.sandboxes.set(plugin.name, sandbox);\n } else {\n // 如果没有配置沙箱,创建默认沙箱(非严格模式)\n const sandbox = new PluginSandbox({\n strictMode: false,\n name: plugin.name,\n });\n this.sandboxes.set(plugin.name, sandbox);\n }\n }\n\n /**\n * 获取插件加载顺序(考虑依赖和优先级)\n *\n * @returns 插件名称数组,按加载顺序排列\n */\n private getLoadOrder(): string[] {\n const plugins = Array.from(this.plugins.values());\n\n // 按优先级排序\n const sortedPlugins = plugins.sort((a, b) => {\n const priorityA = a.priority ?? 100;\n const priorityB = b.priority ?? 100;\n return priorityA - priorityB;\n });\n\n // 构建依赖图并拓扑排序\n const visited = new Set<string>();\n const visiting = new Set<string>();\n const result: string[] = [];\n\n const visit = (pluginName: string): void => {\n if (visiting.has(pluginName)) {\n console.warn(`检测到循环依赖,涉及插件: ${pluginName}`);\n return;\n }\n if (visited.has(pluginName)) {\n return;\n }\n\n visiting.add(pluginName);\n const plugin = this.plugins.get(pluginName);\n if (plugin?.dependencies) {\n for (const dep of plugin.dependencies) {\n visit(dep);\n }\n }\n visiting.delete(pluginName);\n visited.add(pluginName);\n result.push(pluginName);\n };\n\n for (const plugin of sortedPlugins) {\n visit(plugin.name);\n }\n\n return result;\n }\n\n /**\n * 注销插件\n */\n unregister(name: string): void {\n const plugin = this.plugins.get(name);\n if (plugin && plugin.destroy) {\n plugin.destroy();\n }\n this.plugins.delete(name);\n this.sandboxes.delete(name);\n this.pluginStatus.delete(name);\n this.pluginLoaders.delete(name);\n }\n\n /**\n * 动态加载插件(热插拔)\n *\n * @param options - 插件加载选项\n * @returns 加载的插件\n */\n async loadPlugin(options: PluginLoadOptions): Promise<Plugin> {\n let plugin: Plugin;\n\n if (options.url) {\n // 从URL加载插件\n const response = await fetch(options.url);\n if (!response.ok) {\n throw new Error(`无法加载插件: ${options.url} (${response.status})`);\n }\n const pluginModule = await response.json();\n plugin = pluginModule.default || pluginModule;\n } else if (options.modulePath) {\n // 从模块路径动态导入\n const pluginModule = await import(/* @vite-ignore */ options.modulePath);\n plugin = pluginModule.default || pluginModule;\n } else {\n throw new Error('必须提供 url 或 modulePath');\n }\n\n if (!plugin || !plugin.name) {\n throw new Error('插件格式无效:必须包含 name 属性');\n }\n\n // 检查插件是否已加载\n if (this.plugins.has(plugin.name)) {\n throw new Error(`插件 ${plugin.name} 已加载`);\n }\n\n // 设置加载状态\n this.pluginStatus.set(plugin.name, 'loading');\n\n try {\n // 注册插件\n this.register(plugin);\n\n // 如果要求立即初始化\n if (options.initialize && options.initContext && options.startOptions) {\n await this.initializePlugin(plugin.name, options.startOptions, options.initContext);\n }\n\n return plugin;\n } catch (error) {\n this.pluginStatus.delete(plugin.name);\n throw error;\n }\n }\n\n /**\n * 初始化单个插件\n *\n * @param name - 插件名称\n * @param options - 启动选项\n * @param context - 初始化上下文\n */\n async initializePlugin(\n name: string,\n options: StartOptions,\n context: InitializationContext\n ): Promise<void> {\n const plugin = this.plugins.get(name);\n if (!plugin) {\n throw new Error(`插件 ${name} 未注册`);\n }\n\n const status = this.pluginStatus.get(name);\n if (status === 'initialized') {\n return; // 已经初始化\n }\n\n try {\n const sandbox = this.sandboxes.get(name);\n if (!sandbox) {\n throw new Error(`插件 ${name} 的沙箱未找到`);\n }\n\n // 执行初始化钩子\n if (plugin.init) {\n const filteredOptions = sandbox.filterConfig(options);\n await plugin.init(filteredOptions, context, sandbox, pluginEventBus);\n }\n\n this.pluginStatus.set(name, 'initialized');\n } catch (error) {\n console.error(`插件 ${name} 初始化失败:`, error);\n throw error;\n }\n }\n\n /**\n * 卸载插件(热插拔)\n *\n * @param name - 插件名称\n * @param force - 是否强制卸载(即使有依赖)\n */\n async unloadPlugin(name: string, force: boolean = false): Promise<void> {\n const plugin = this.plugins.get(name);\n if (!plugin) {\n throw new Error(`插件 ${name} 未加载`);\n }\n\n // 检查是否有其他插件依赖此插件\n if (!force) {\n const dependents = Array.from(this.plugins.values()).filter(\n (p) => p.dependencies && p.dependencies.includes(name)\n );\n if (dependents.length > 0) {\n throw new Error(\n `无法卸载插件 ${name},以下插件依赖它: ${dependents.map((p) => p.name).join(', ')}`\n );\n }\n }\n\n // 执行销毁钩子\n if (plugin.destroy) {\n try {\n await plugin.destroy();\n } catch (error) {\n console.error(`插件 ${name} 的 destroy 钩子执行失败:`, error);\n }\n }\n\n // 从事件总线移除相关监听器(如果有)\n // 注意:事件总线是全局的,这里只移除插件相关的事件\n // 实际实现可能需要更细粒度的控制\n\n // 清理插件\n this.unregister(name);\n this.pluginStatus.set(name, 'destroyed');\n }\n\n /**\n * 检查插件是否可以热加载\n *\n * @param plugin - 插件\n * @returns 是否可以热加载\n */\n canHotLoad(plugin: Plugin): boolean {\n // 检查依赖是否都已加载\n if (plugin.dependencies && plugin.dependencies.length > 0) {\n const missingDeps = plugin.dependencies.filter(\n (dep) => !this.plugins.has(dep)\n );\n if (missingDeps.length > 0) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * 注册插件加载器(用于延迟加载)\n *\n * @param name - 插件名称\n * @param loader - 加载器函数\n */\n registerLoader(name: string, loader: () => Promise<Plugin>): void {\n this.pluginLoaders.set(name, loader);\n }\n\n /**\n * 使用加载器加载插件\n *\n * @param name - 插件名称\n * @param options - 加载选项\n * @returns 加载的插件\n */\n async loadPluginByLoader(\n name: string,\n options?: Omit<PluginLoadOptions, 'url' | 'modulePath'>\n ): Promise<Plugin> {\n const loader = this.pluginLoaders.get(name);\n if (!loader) {\n throw new Error(`插件 ${name} 的加载器未注册`);\n }\n\n const plugin = await loader();\n\n if (!plugin || !plugin.name) {\n throw new Error('插件格式无效:必须包含 name 属性');\n }\n\n if (plugin.name !== name) {\n throw new Error(`插件名称不匹配: 期望 ${name},实际 ${plugin.name}`);\n }\n\n // 检查插件是否已加载\n if (this.plugins.has(plugin.name)) {\n return this.plugins.get(plugin.name)!;\n }\n\n // 设置加载状态\n this.pluginStatus.set(plugin.name, 'loading');\n\n try {\n // 注册插件\n this.register(plugin);\n\n // 如果要求立即初始化\n if (options?.initialize && options.initContext && options.startOptions) {\n await this.initializePlugin(plugin.name, options.startOptions, options.initContext);\n }\n\n return plugin;\n } catch (error) {\n this.pluginStatus.delete(plugin.name);\n throw error;\n }\n }\n\n /**\n * 获取插件\n */\n get(name: string): Plugin | undefined {\n return this.plugins.get(name);\n }\n\n /**\n * 获取所有插件\n */\n getAll(): Plugin[] {\n return Array.from(this.plugins.values());\n }\n\n /**\n * 执行初始化前钩子\n *\n * 优化:按依赖顺序执行\n */\n async executeBeforeInit(options: StartOptions): Promise<void> {\n const loadOrder = this.getLoadOrder();\n\n for (const pluginName of loadOrder) {\n const plugin = this.plugins.get(pluginName);\n if (!plugin || !plugin.beforeInit) {\n continue;\n }\n\n try {\n const sandbox = this.sandboxes.get(plugin.name);\n if (!sandbox) {\n console.warn(`插件 ${plugin.name} 的沙箱未找到`);\n continue;\n }\n\n // 根据沙箱配置过滤选项\n const filteredOptions = sandbox.filterConfig(options);\n await plugin.beforeInit(filteredOptions, sandbox, pluginEventBus);\n } catch (error) {\n console.error(`插件 ${plugin.name} 的 beforeInit 钩子执行失败:`, error);\n }\n }\n }\n\n /**\n * 执行初始化钩子\n *\n * 优化:按依赖顺序执行,并更新插件状态\n */\n async executeInit(options: StartOptions, context: InitializationContext): Promise<void> {\n const loadOrder = this.getLoadOrder();\n\n for (const pluginName of loadOrder) {\n const plugin = this.plugins.get(pluginName);\n if (!plugin || !plugin.init) {\n continue;\n }\n\n try {\n const sandbox = this.sandboxes.get(plugin.name);\n if (!sandbox) {\n console.warn(`插件 ${plugin.name} 的沙箱未找到`);\n continue;\n }\n\n // 根据沙箱配置过滤选项\n const filteredOptions = sandbox.filterConfig(options);\n await plugin.init(filteredOptions, context, sandbox, pluginEventBus);\n this.pluginStatus.set(plugin.name, 'initialized');\n } catch (error) {\n console.error(`插件 ${plugin.name} 的 init 钩子执行失败:`, error);\n }\n }\n }\n\n /**\n * 执行初始化后钩子\n *\n * 优化:按依赖顺序执行(逆序,确保依赖插件先执行)\n */\n async executeAfterInit(options: StartOptions, context: InitializationContext): Promise<void> {\n const loadOrder = this.getLoadOrder();\n // 逆序执行,确保依赖插件先执行\n const reverseOrder = [...loadOrder].reverse();\n\n for (const pluginName of reverseOrder) {\n const plugin = this.plugins.get(pluginName);\n if (!plugin || !plugin.afterInit) {\n continue;\n }\n\n try {\n const sandbox = this.sandboxes.get(plugin.name);\n if (!sandbox) {\n console.warn(`插件 ${plugin.name} 的沙箱未找到`);\n continue;\n }\n\n // 根据沙箱配置过滤选项\n const filteredOptions = sandbox.filterConfig(options);\n await plugin.afterInit(filteredOptions, context, sandbox, pluginEventBus);\n } catch (error) {\n console.error(`插件 ${plugin.name} 的 afterInit 钩子执行失败:`, error);\n }\n }\n }\n\n /**\n * 获取插件状态\n *\n * @param name - 插件名称\n * @returns 插件状态\n */\n getPluginStatus(name: string): 'registered' | 'initialized' | 'destroyed' | 'loading' | undefined {\n return this.pluginStatus.get(name);\n }\n\n /**\n * 检查插件是否已加载\n *\n * @param name - 插件名称\n * @returns 是否已加载\n */\n isLoaded(name: string): boolean {\n return this.plugins.has(name);\n }\n\n /**\n * 获取已加载的插件列表\n *\n * @returns 插件名称数组\n */\n getLoadedPlugins(): string[] {\n return Array.from(this.plugins.keys());\n }\n\n /**\n * 获取所有插件状态\n *\n * @returns 插件状态映射\n */\n getAllPluginStatus(): Map<string, 'registered' | 'initialized' | 'destroyed' | 'loading'> {\n return new Map(this.pluginStatus);\n }\n\n /**\n * 获取插件沙箱\n *\n * @param name - 插件名称\n * @returns 插件沙箱或undefined\n */\n getSandbox(name: string): PluginSandbox | undefined {\n return this.sandboxes.get(name);\n }\n\n /**\n * 获取事件总线\n */\n getEventBus(): PluginEventBus {\n return pluginEventBus;\n }\n\n /**\n * 销毁所有插件\n */\n async destroyAll(): Promise<void> {\n for (const plugin of this.plugins.values()) {\n if (plugin.destroy) {\n try {\n await plugin.destroy();\n } catch (error) {\n console.error(`插件 ${plugin.name} 的 destroy 钩子执行失败:`, error);\n }\n }\n }\n this.plugins.clear();\n }\n}\n\n/**\n * 默认插件管理器\n */\nexport const pluginManager = new PluginManager();\n\n// 导出插件相关类型和工具\nexport { PluginSandbox, PluginPermission, type PluginSandboxConfig } from './plugin/PluginSandbox';\nexport {\n PluginEventBus,\n pluginEventBus,\n type EventListener,\n type EventMetadata,\n type EventWrapper,\n type PluginEventBusConfig,\n} from './plugin/PluginEventBus';\n"],"names":["PluginEventBus","PluginManager","PluginPermission","PluginSandbox","pluginEventBus","pluginManager","register","plugin","plugins","has","name","console","warn","dependencies","length","missingDeps","filter","dep","join","set","pluginStatus","sandbox","sandboxes","strictMode","getLoadOrder","Array","from","values","sortedPlugins","sort","a","b","priorityA","priority","priorityB","visited","Set","visiting","result","visit","pluginName","add","get","delete","push","unregister","destroy","pluginLoaders","loadPlugin","options","url","response","fetch","ok","Error","status","pluginModule","json","default","modulePath","initialize","initContext","startOptions","initializePlugin","error","context","init","filteredOptions","filterConfig","unloadPlugin","force","dependents","p","includes","map","canHotLoad","registerLoader","loader","loadPluginByLoader","getAll","executeBeforeInit","loadOrder","beforeInit","executeInit","executeAfterInit","reverseOrder","reverse","afterInit","getPluginStatus","isLoaded","getLoadedPlugins","keys","getAllPluginStatus","Map","getSandbox","getEventBus","destroyAll","clear"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/core/plugin.ts"],"sourcesContent":["import type { StartOptions } from './types';\nimport type { InitializationContext } from './initialization';\nimport { PluginSandbox, type PluginSandboxConfig } from './plugin/PluginSandbox';\nimport { pluginEventBus, type PluginEventBus } from './plugin/PluginEventBus';\n\n/**\n * 插件接口\n */\nexport interface Plugin<TOption = unknown> {\n /**\n * 插件名称\n */\n name: string;\n\n /**\n * 插件版本\n */\n version?: string;\n\n /**\n * 插件依赖列表(插件名称数组)\n * 优化:支持插件依赖管理\n */\n dependencies?: string[];\n\n /**\n * 插件优先级(数字越小优先级越高)\n * 优化:支持插件加载顺序控制\n */\n priority?: number;\n\n /**\n * 插件沙箱配置(用于权限控制)\n */\n sandbox?: PluginSandboxConfig;\n\n /**\n * 初始化前钩子\n */\n beforeInit?: (options: Partial<StartOptions>, sandbox: PluginSandbox, eventBus: PluginEventBus) => Promise<void> | void;\n\n /**\n * 初始化钩子\n */\n init?: (options: Partial<StartOptions>, context: InitializationContext, sandbox: PluginSandbox, eventBus: PluginEventBus) => Promise<void> | void;\n\n /**\n * 初始化后钩子\n */\n afterInit?: (options: Partial<StartOptions>, context: InitializationContext, sandbox: PluginSandbox, eventBus: PluginEventBus) => Promise<void> | void;\n\n /**\n * 销毁钩子\n */\n destroy?: () => Promise<void> | void;\n\n /**\n * 自定义属性\n */\n readonly option?: Readonly<TOption>;\n}\n\n/**\n * 插件加载选项\n */\nexport interface PluginLoadOptions {\n /**\n * 插件URL(用于动态加载)\n */\n url?: string;\n /**\n * 插件模块路径(用于动态导入)\n */\n modulePath?: string;\n /**\n * 是否立即初始化\n */\n initialize?: boolean;\n /**\n * 初始化上下文(如果立即初始化)\n */\n initContext?: InitializationContext;\n /**\n * 启动选项(如果立即初始化)\n */\n startOptions?: StartOptions;\n}\n\n/**\n * 插件管理器\n *\n * 优化:\n * 1. 支持插件依赖管理\n * 2. 支持插件优先级控制\n * 3. 支持插件生命周期管理\n * 4. 支持插件热插拔(动态加载/卸载)\n */\nexport class PluginManager {\n private plugins: Map<string, Plugin> = new Map();\n private sandboxes: Map<string, PluginSandbox> = new Map();\n private pluginStatus: Map<string, 'registered' | 'initialized' | 'destroyed' | 'loading'> = new Map();\n private pluginLoaders: Map<string, () => Promise<Plugin>> = new Map();\n\n /**\n * 注册插件\n *\n * 优化:检查插件依赖是否已注册\n */\n register(plugin: Plugin): void {\n if (this.plugins.has(plugin.name)) {\n console.warn(`插件 ${plugin.name} 已存在,将被覆盖`);\n }\n\n // 检查依赖是否已注册\n if (plugin.dependencies && plugin.dependencies.length > 0) {\n const missingDeps = plugin.dependencies.filter(\n (dep) => !this.plugins.has(dep)\n );\n if (missingDeps.length > 0) {\n console.warn(\n `插件 ${plugin.name} 的依赖未注册: ${missingDeps.join(', ')}`\n );\n }\n }\n\n this.plugins.set(plugin.name, plugin);\n this.pluginStatus.set(plugin.name, 'registered');\n\n // 创建插件沙箱\n if (plugin.sandbox) {\n const sandbox = new PluginSandbox({\n ...plugin.sandbox,\n name: plugin.name,\n });\n this.sandboxes.set(plugin.name, sandbox);\n } else {\n // 如果没有配置沙箱,创建默认沙箱(非严格模式)\n const sandbox = new PluginSandbox({\n strictMode: false,\n name: plugin.name,\n });\n this.sandboxes.set(plugin.name, sandbox);\n }\n }\n\n /**\n * 获取插件加载顺序(考虑依赖和优先级)\n *\n * @returns 插件名称数组,按加载顺序排列\n */\n private getLoadOrder(): string[] {\n const plugins = Array.from(this.plugins.values());\n\n // 按优先级排序\n const sortedPlugins = plugins.sort((a, b) => {\n const priorityA = a.priority ?? 100;\n const priorityB = b.priority ?? 100;\n return priorityA - priorityB;\n });\n\n // 构建依赖图并拓扑排序\n const visited = new Set<string>();\n const visiting = new Set<string>();\n const result: string[] = [];\n\n const visit = (pluginName: string): void => {\n if (visiting.has(pluginName)) {\n console.warn(`检测到循环依赖,涉及插件: ${pluginName}`);\n return;\n }\n if (visited.has(pluginName)) {\n return;\n }\n\n visiting.add(pluginName);\n const plugin = this.plugins.get(pluginName);\n if (plugin?.dependencies) {\n for (const dep of plugin.dependencies) {\n visit(dep);\n }\n }\n visiting.delete(pluginName);\n visited.add(pluginName);\n result.push(pluginName);\n };\n\n for (const plugin of sortedPlugins) {\n visit(plugin.name);\n }\n\n return result;\n }\n\n /**\n * 注销插件\n */\n unregister(name: string): void {\n const plugin = this.plugins.get(name);\n if (plugin && plugin.destroy) {\n plugin.destroy();\n }\n this.plugins.delete(name);\n this.sandboxes.delete(name);\n this.pluginStatus.delete(name);\n this.pluginLoaders.delete(name);\n }\n\n /**\n * 动态加载插件(热插拔)\n *\n * @param options - 插件加载选项\n * @returns 加载的插件\n */\n async loadPlugin(options: PluginLoadOptions): Promise<Plugin> {\n let plugin: Plugin;\n\n if (options.url) {\n // 从URL加载插件\n const response = await fetch(options.url);\n if (!response.ok) {\n throw new Error(`无法加载插件: ${options.url} (${response.status})`);\n }\n const pluginModule = await response.json();\n plugin = pluginModule.default || pluginModule;\n } else if (options.modulePath) {\n // 从模块路径动态导入\n const pluginModule = await import(/* @vite-ignore */ options.modulePath);\n plugin = pluginModule.default || pluginModule;\n } else {\n throw new Error('必须提供 url 或 modulePath');\n }\n\n if (!plugin || !plugin.name) {\n throw new Error('插件格式无效:必须包含 name 属性');\n }\n\n // 检查插件是否已加载\n if (this.plugins.has(plugin.name)) {\n throw new Error(`插件 ${plugin.name} 已加载`);\n }\n\n // 设置加载状态\n this.pluginStatus.set(plugin.name, 'loading');\n\n try {\n // 注册插件\n this.register(plugin);\n\n // 如果要求立即初始化\n if (options.initialize && options.initContext && options.startOptions) {\n await this.initializePlugin(plugin.name, options.startOptions, options.initContext);\n }\n\n return plugin;\n } catch (error) {\n this.pluginStatus.delete(plugin.name);\n throw error;\n }\n }\n\n /**\n * 初始化单个插件\n *\n * @param name - 插件名称\n * @param options - 启动选项\n * @param context - 初始化上下文\n */\n async initializePlugin(\n name: string,\n options: StartOptions,\n context: InitializationContext\n ): Promise<void> {\n const plugin = this.plugins.get(name);\n if (!plugin) {\n throw new Error(`插件 ${name} 未注册`);\n }\n\n const status = this.pluginStatus.get(name);\n if (status === 'initialized') {\n return; // 已经初始化\n }\n\n try {\n const sandbox = this.sandboxes.get(name);\n if (!sandbox) {\n throw new Error(`插件 ${name} 的沙箱未找到`);\n }\n\n // 执行初始化钩子\n if (plugin.init) {\n const filteredOptions = sandbox.filterConfig(options);\n await plugin.init(filteredOptions, context, sandbox, pluginEventBus);\n }\n\n this.pluginStatus.set(name, 'initialized');\n } catch (error) {\n console.error(`插件 ${name} 初始化失败:`, error);\n throw error;\n }\n }\n\n /**\n * 卸载插件(热插拔)\n *\n * @param name - 插件名称\n * @param force - 是否强制卸载(即使有依赖)\n */\n async unloadPlugin(name: string, force: boolean = false): Promise<void> {\n const plugin = this.plugins.get(name);\n if (!plugin) {\n throw new Error(`插件 ${name} 未加载`);\n }\n\n // 检查是否有其他插件依赖此插件\n if (!force) {\n const dependents = Array.from(this.plugins.values()).filter(\n (p) => p.dependencies && p.dependencies.includes(name)\n );\n if (dependents.length > 0) {\n throw new Error(\n `无法卸载插件 ${name},以下插件依赖它: ${dependents.map((p) => p.name).join(', ')}`\n );\n }\n }\n\n // 执行销毁钩子\n if (plugin.destroy) {\n try {\n await plugin.destroy();\n } catch (error) {\n console.error(`插件 ${name} 的 destroy 钩子执行失败:`, error);\n }\n }\n\n // 从事件总线移除相关监听器(如果有)\n // 注意:事件总线是全局的,这里只移除插件相关的事件\n // 实际实现可能需要更细粒度的控制\n\n // 清理插件\n this.unregister(name);\n this.pluginStatus.set(name, 'destroyed');\n }\n\n /**\n * 检查插件是否可以热加载\n *\n * @param plugin - 插件\n * @returns 是否可以热加载\n */\n canHotLoad(plugin: Plugin): boolean {\n // 检查依赖是否都已加载\n if (plugin.dependencies && plugin.dependencies.length > 0) {\n const missingDeps = plugin.dependencies.filter(\n (dep) => !this.plugins.has(dep)\n );\n if (missingDeps.length > 0) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * 注册插件加载器(用于延迟加载)\n *\n * @param name - 插件名称\n * @param loader - 加载器函数\n */\n registerLoader(name: string, loader: () => Promise<Plugin>): void {\n this.pluginLoaders.set(name, loader);\n }\n\n /**\n * 使用加载器加载插件\n *\n * @param name - 插件名称\n * @param options - 加载选项\n * @returns 加载的插件\n */\n async loadPluginByLoader(\n name: string,\n options?: Omit<PluginLoadOptions, 'url' | 'modulePath'>\n ): Promise<Plugin> {\n const loader = this.pluginLoaders.get(name);\n if (!loader) {\n throw new Error(`插件 ${name} 的加载器未注册`);\n }\n\n const plugin = await loader();\n\n if (!plugin || !plugin.name) {\n throw new Error('插件格式无效:必须包含 name 属性');\n }\n\n if (plugin.name !== name) {\n throw new Error(`插件名称不匹配: 期望 ${name},实际 ${plugin.name}`);\n }\n\n // 检查插件是否已加载\n if (this.plugins.has(plugin.name)) {\n return this.plugins.get(plugin.name)!;\n }\n\n // 设置加载状态\n this.pluginStatus.set(plugin.name, 'loading');\n\n try {\n // 注册插件\n this.register(plugin);\n\n // 如果要求立即初始化\n if (options?.initialize && options.initContext && options.startOptions) {\n await this.initializePlugin(plugin.name, options.startOptions, options.initContext);\n }\n\n return plugin;\n } catch (error) {\n this.pluginStatus.delete(plugin.name);\n throw error;\n }\n }\n\n /**\n * 获取插件\n */\n get(name: string): Plugin | undefined {\n return this.plugins.get(name);\n }\n\n /**\n * 获取所有插件\n */\n getAll(): Plugin[] {\n return Array.from(this.plugins.values());\n }\n\n /**\n * 执行初始化前钩子\n *\n * 优化:按依赖顺序执行\n */\n async executeBeforeInit(options: StartOptions): Promise<void> {\n const loadOrder = this.getLoadOrder();\n\n for (const pluginName of loadOrder) {\n const plugin = this.plugins.get(pluginName);\n if (!plugin || !plugin.beforeInit) {\n continue;\n }\n\n try {\n const sandbox = this.sandboxes.get(plugin.name);\n if (!sandbox) {\n console.warn(`插件 ${plugin.name} 的沙箱未找到`);\n continue;\n }\n\n // 根据沙箱配置过滤选项\n const filteredOptions = sandbox.filterConfig(options);\n await plugin.beforeInit(filteredOptions, sandbox, pluginEventBus);\n } catch (error) {\n console.error(`插件 ${plugin.name} 的 beforeInit 钩子执行失败:`, error);\n }\n }\n }\n\n /**\n * 执行初始化钩子\n *\n * 优化:按依赖顺序执行,并更新插件状态\n */\n async executeInit(options: StartOptions, context: InitializationContext): Promise<void> {\n const loadOrder = this.getLoadOrder();\n\n for (const pluginName of loadOrder) {\n const plugin = this.plugins.get(pluginName);\n if (!plugin || !plugin.init) {\n continue;\n }\n\n try {\n const sandbox = this.sandboxes.get(plugin.name);\n if (!sandbox) {\n console.warn(`插件 ${plugin.name} 的沙箱未找到`);\n continue;\n }\n\n // 根据沙箱配置过滤选项\n const filteredOptions = sandbox.filterConfig(options);\n await plugin.init(filteredOptions, context, sandbox, pluginEventBus);\n this.pluginStatus.set(plugin.name, 'initialized');\n } catch (error) {\n console.error(`插件 ${plugin.name} 的 init 钩子执行失败:`, error);\n }\n }\n }\n\n /**\n * 执行初始化后钩子\n *\n * 优化:按依赖顺序执行(逆序,确保依赖插件先执行)\n */\n async executeAfterInit(options: StartOptions, context: InitializationContext): Promise<void> {\n const loadOrder = this.getLoadOrder();\n // 逆序执行,确保依赖插件先执行\n const reverseOrder = [...loadOrder].reverse();\n\n for (const pluginName of reverseOrder) {\n const plugin = this.plugins.get(pluginName);\n if (!plugin || !plugin.afterInit) {\n continue;\n }\n\n try {\n const sandbox = this.sandboxes.get(plugin.name);\n if (!sandbox) {\n console.warn(`插件 ${plugin.name} 的沙箱未找到`);\n continue;\n }\n\n // 根据沙箱配置过滤选项\n const filteredOptions = sandbox.filterConfig(options);\n await plugin.afterInit(filteredOptions, context, sandbox, pluginEventBus);\n } catch (error) {\n console.error(`插件 ${plugin.name} 的 afterInit 钩子执行失败:`, error);\n }\n }\n }\n\n /**\n * 获取插件状态\n *\n * @param name - 插件名称\n * @returns 插件状态\n */\n getPluginStatus(name: string): 'registered' | 'initialized' | 'destroyed' | 'loading' | undefined {\n return this.pluginStatus.get(name);\n }\n\n /**\n * 检查插件是否已加载\n *\n * @param name - 插件名称\n * @returns 是否已加载\n */\n isLoaded(name: string): boolean {\n return this.plugins.has(name);\n }\n\n /**\n * 获取已加载的插件列表\n *\n * @returns 插件名称数组\n */\n getLoadedPlugins(): string[] {\n return Array.from(this.plugins.keys());\n }\n\n /**\n * 获取所有插件状态\n *\n * @returns 插件状态映射\n */\n getAllPluginStatus(): Map<string, 'registered' | 'initialized' | 'destroyed' | 'loading'> {\n return new Map(this.pluginStatus);\n }\n\n /**\n * 获取插件沙箱\n *\n * @param name - 插件名称\n * @returns 插件沙箱或undefined\n */\n getSandbox(name: string): PluginSandbox | undefined {\n return this.sandboxes.get(name);\n }\n\n /**\n * 获取事件总线\n */\n getEventBus(): PluginEventBus {\n return pluginEventBus;\n }\n\n /**\n * 销毁所有插件\n */\n async destroyAll(): Promise<void> {\n for (const plugin of this.plugins.values()) {\n if (plugin.destroy) {\n try {\n await plugin.destroy();\n } catch (error) {\n console.error(`插件 ${plugin.name} 的 destroy 钩子执行失败:`, error);\n }\n }\n }\n this.plugins.clear();\n }\n}\n\n/**\n * 默认插件管理器\n */\nexport const pluginManager = new PluginManager();\n\n// 导出插件相关类型和工具\nexport { PluginSandbox, PluginPermission, type PluginSandboxConfig } from './plugin/PluginSandbox';\nexport {\n PluginEventBus,\n pluginEventBus,\n type EventListener,\n type EventMetadata,\n type EventWrapper,\n type PluginEventBusConfig,\n} from './plugin/PluginEventBus';\n"],"names":["PluginSandbox","pluginEventBus","PluginManager","register","plugin","plugins","has","name","console","warn","dependencies","length","missingDeps","filter","dep","join","set","pluginStatus","sandbox","sandboxes","strictMode","getLoadOrder","Array","from","values","sortedPlugins","sort","a","b","priorityA","priority","priorityB","visited","Set","visiting","result","visit","pluginName","add","get","delete","push","unregister","destroy","pluginLoaders","loadPlugin","options","url","response","fetch","ok","Error","status","pluginModule","json","default","modulePath","initialize","initContext","startOptions","initializePlugin","error","context","init","filteredOptions","filterConfig","unloadPlugin","force","dependents","p","includes","map","canHotLoad","registerLoader","loader","loadPluginByLoader","getAll","executeBeforeInit","loadOrder","beforeInit","executeInit","executeAfterInit","reverseOrder","reverse","afterInit","getPluginStatus","isLoaded","getLoadedPlugins","keys","getAllPluginStatus","Map","getSandbox","getEventBus","destroyAll","clear","pluginManager","PluginPermission","PluginEventBus"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/router/RouterManager.ts"],"sourcesContent":["import { logger } from '@vlian/logger';\nimport type { RouterConfig } from './types';\nimport { transformRoutes } from './utils/transform';\nimport { transformRoutesToReactRoutes } from './utils/adapters/react-router/transform';\nimport { createBrowserRouter, createHashRouter, createMemoryRouter, matchRoutes, type RouteObject } from 'react-router-dom';\nimport { RouterConfigValidator } from './validation';\nimport { getRouterLifecycleManager } from './lifecycle';\nimport { getRouterMiddlewareManager } from './middleware';\nimport { RouterError, RouterErrorCode } from './errors';\nimport { getRouteCache } from './performance/RouteCache';\nimport { getRoutePreloader } from './performance/RoutePreloader';\nimport { getRouterPluginManager, PluginLifecycleStage } from './plugin';\nimport { getRouterMonitoring } from './monitoring';\nimport { getAdapterManager } from './adapter';\nimport { createReactRouterAdapter } from './adapter/react-router';\n\nexport class RouterManager {\n private static instance: RouterManager | null = null;\n\n /**\n * 路由实例\n * 只能在 initialize 方法中赋值\n */\n private router: ReturnType<typeof createBrowserRouter> | null = null;\n\n /**\n * 是否已初始化\n */\n private initialized = false;\n\n /**\n * 路由缓存实例\n */\n private cache = getRouteCache();\n\n /**\n * 路由预加载器实例\n */\n private preloader = getRoutePreloader();\n\n /**\n * 路由插件管理器实例\n */\n private pluginManager = getRouterPluginManager();\n\n /**\n * 路由监控服务实例\n */\n private monitoring = getRouterMonitoring();\n\n /**\n * 路由适配器管理器实例\n */\n private adapterManager = getAdapterManager();\n\n private constructor() {\n // 私有构造函数\n // 注册默认的 React Router 适配器\n this.adapterManager.register({\n name: 'react-router',\n factory: createReactRouterAdapter(),\n priority: 10,\n });\n }\n /**\n * 获取单例实例\n */\n static getInstance(): RouterManager {\n if (!RouterManager.instance) {\n RouterManager.instance = new RouterManager();\n }\n return RouterManager.instance;\n }\n /**\n * 初始化路由管理器\n * \n * @param config - 路由配置\n * @param _appInstance - 应用实例(保留用于兼容性,当前未使用)\n */\n async initialize(config: RouterConfig): Promise<void> {\n // 如果路由被禁用,直接返回\n if (config.enabled === false || config.enabled === 'disabled') {\n logger.info('路由系统已禁用');\n return;\n }\n\n // 配置验证(如果启用)\n if (config.enableValidation !== false) {\n try {\n RouterConfigValidator.validate(config);\n logger.debug('路由配置验证通过');\n } catch (error) {\n logger.error('路由配置验证失败', error);\n // 开发环境下抛出错误,生产环境下记录警告但继续执行\n if (process.env.NODE_ENV === 'development') {\n throw error;\n }\n }\n }\n\n // 执行插件钩子:路由初始化前\n await this.pluginManager.executeHooks(PluginLifecycleStage.BEFORE_INIT, {\n config,\n });\n\n // 注册生命周期钩子\n if (config.hooks) {\n const lifecycleManager = getRouterLifecycleManager();\n lifecycleManager.register(config.hooks);\n logger.debug('路由生命周期钩子已注册');\n }\n\n // 转换数据(使用缓存)\n if (!config.routes) {\n throw new RouterError(\n '路由配置不能为空',\n RouterErrorCode.ROUTER_CONFIG_ERROR\n );\n }\n\n // 更新预加载策略(默认关闭,按需懒加载)\n this.preloader.updateConfig(config.preload);\n this.preloader.clear();\n\n let result;\n const cacheKey = config.routes;\n const cachedResult = this.cache.get(cacheKey);\n\n if (cachedResult) {\n logger.debug('使用缓存的路由转换结果');\n result = cachedResult;\n } else {\n // 执行插件钩子:路由转换前\n await this.pluginManager.executeHooks(PluginLifecycleStage.BEFORE_TRANSFORM, {\n config,\n });\n\n result = await transformRoutes(config.routes, config.transformOptions);\n\n // 执行插件钩子:路由转换后\n await this.pluginManager.executeHooks(PluginLifecycleStage.AFTER_TRANSFORM, {\n config,\n routes: result.routes,\n });\n\n // 缓存转换结果\n this.cache.set(cacheKey, result);\n }\n\n const enableHydrateFallback =\n config.enableHydrateFallback\n ?? Boolean((config.options as { hydrationData?: unknown } | undefined)?.hydrationData);\n\n const reactRoutes = await transformRoutesToReactRoutes(\n result.routes,\n result,\n config.defaultRouteErrorComponent,\n config.defaultRouteLoadingComponent,\n enableHydrateFallback,\n );\n\n // 注册路由到预加载器\n if (result.routes) {\n this.preloader.registerRoutes(result.routes, result);\n // 开始预加载\n this.preloader.startPreload();\n }\n\n await this.resolveInitialLazyRoutes(reactRoutes, !enableHydrateFallback);\n\n let routerInstance: ReturnType<typeof createBrowserRouter> | null = null;\n if (config.mode === 'browser') {\n routerInstance = createBrowserRouter(reactRoutes, config.options);\n } else if (config.mode === 'hash') {\n routerInstance = createHashRouter(reactRoutes, config.options);\n } else if (config.mode === 'memory') {\n routerInstance = createMemoryRouter(reactRoutes, config.options);\n }\n\n if (!routerInstance) {\n throw new RouterError(\n '路由模式不支持',\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n undefined,\n { mode: config.mode }\n );\n }\n\n // 只能在 initialize 方法中赋值\n this.router = routerInstance;\n this.initialized = true;\n\n // 执行插件钩子:路由初始化后\n await this.pluginManager.executeHooks(PluginLifecycleStage.AFTER_INIT, {\n config,\n routes: result.routes,\n });\n\n // 记录监控:路由初始化完成\n const initialPath = typeof window !== 'undefined'\n ? `${window.location.pathname}${window.location.search}${window.location.hash}`\n : this.router?.state?.location?.pathname ?? '/';\n\n this.monitoring.trackRouteAccess(\n {\n path: initialPath,\n meta: { name: 'router-init' },\n },\n undefined,\n true\n );\n\n logger.info('路由管理器初始化完成');\n }\n\n /**\n * 预解析 lazy 路由,避免首屏或重定向链路长时间停留在 hydrate fallback。\n * resolveAll=true 时会在初始化阶段解析全部 lazy 路由。\n */\n private async resolveInitialLazyRoutes(routes: RouteObject[], resolveAll: boolean = false): Promise<void> {\n if (typeof window === 'undefined') {\n return;\n }\n\n let targetRoutes: RouteObject[] = [];\n if (resolveAll) {\n const stack = [...routes];\n while (stack.length > 0) {\n const current = stack.shift();\n if (!current) {\n continue;\n }\n targetRoutes.push(current);\n if (current.children && current.children.length > 0) {\n stack.push(...current.children);\n }\n }\n } else {\n const matches = matchRoutes(routes, window.location.pathname) ?? [];\n if (matches.length === 0) {\n return;\n }\n targetRoutes = matches.map((match) => match.route);\n }\n\n await Promise.all(\n targetRoutes.map(async (route) => {\n const lazy = route.lazy;\n if (typeof lazy !== 'function') {\n return;\n }\n\n try {\n const resolved = await lazy();\n Object.assign(route, resolved);\n delete (route as RouteObject & { lazy?: unknown }).lazy;\n } catch (error) {\n logger.warn('首屏路由懒加载预解析失败,回退到 Router 默认懒加载', error);\n }\n }),\n );\n }\n\n /**\n * 获取路由实例\n * \n * @returns 路由实例,如果未初始化则返回 null\n */\n getRouter(): ReturnType<typeof createBrowserRouter> | null {\n return this.router;\n }\n\n /**\n * 检查是否已初始化\n * \n * @returns 如果已初始化返回 true,否则返回 false\n */\n isInitialized(): boolean {\n return this.initialized;\n }\n\n /**\n * 销毁路由管理器\n */\n destroy(): void {\n // 执行插件钩子:销毁\n this.pluginManager.executeHooks(PluginLifecycleStage.DESTROY, {\n config: {} as RouterConfig,\n });\n\n // 停止预加载\n this.preloader.stopPreload();\n\n this.router = null;\n this.initialized = false;\n \n // 清空生命周期钩子和中间件\n const lifecycleManager = getRouterLifecycleManager();\n lifecycleManager.clear();\n \n const middlewareManager = getRouterMiddlewareManager();\n middlewareManager.clear();\n \n logger.info('路由管理器已销毁');\n }\n\n /**\n * 获取路由缓存实例\n */\n getCache() {\n return this.cache;\n }\n\n /**\n * 获取路由预加载器实例\n */\n getPreloader() {\n return this.preloader;\n }\n\n /**\n * 获取路由插件管理器实例\n */\n getPluginManager() {\n return this.pluginManager;\n }\n\n /**\n * 获取路由监控服务实例\n */\n getMonitoring() {\n return this.monitoring;\n }\n}\n\n/**\n * 获取路由管理器\n */\nexport function getRouterManager(): RouterManager {\n return RouterManager.getInstance();\n}\n"],"names":["RouterManager","getRouterManager","getInstance","instance","initialize","config","enabled","logger","info","enableValidation","RouterConfigValidator","validate","debug","error","process","env","NODE_ENV","pluginManager","executeHooks","PluginLifecycleStage","BEFORE_INIT","hooks","lifecycleManager","getRouterLifecycleManager","register","routes","RouterError","RouterErrorCode","ROUTER_CONFIG_ERROR","preloader","updateConfig","preload","clear","result","cacheKey","cachedResult","cache","get","BEFORE_TRANSFORM","transformRoutes","transformOptions","AFTER_TRANSFORM","set","enableHydrateFallback","Boolean","options","hydrationData","reactRoutes","transformRoutesToReactRoutes","defaultRouteErrorComponent","defaultRouteLoadingComponent","registerRoutes","startPreload","resolveInitialLazyRoutes","routerInstance","mode","createBrowserRouter","createHashRouter","createMemoryRouter","undefined","router","initialized","AFTER_INIT","initialPath","window","location","pathname","search","hash","state","monitoring","trackRouteAccess","path","meta","name","resolveAll","targetRoutes","stack","length","current","shift","push","children","matches","matchRoutes","map","match","route","Promise","all","lazy","resolved","Object","assign","warn","getRouter","isInitialized","destroy","DESTROY","stopPreload","middlewareManager","getRouterMiddlewareManager","getCache","getPreloader","getPluginManager","getMonitoring","getRouteCache","getRoutePreloader","getRouterPluginManager","getRouterMonitoring","adapterManager","getAdapterManager","factory","createReactRouterAdapter","priority"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/router/RouterManager.ts"],"sourcesContent":["import { logger } from '@vlian/logger';\nimport type { RouterConfig } from './types';\nimport { transformRoutes } from './utils/transform';\nimport { transformRoutesToReactRoutes } from './utils/adapters/react-router/transform';\nimport { createBrowserRouter, createHashRouter, createMemoryRouter, matchRoutes, type RouteObject } from 'react-router-dom';\nimport { RouterConfigValidator } from './validation';\nimport { getRouterLifecycleManager } from './lifecycle';\nimport { getRouterMiddlewareManager } from './middleware';\nimport { RouterError, RouterErrorCode } from './errors';\nimport { getRouteCache } from './performance/RouteCache';\nimport { getRoutePreloader } from './performance/RoutePreloader';\nimport { getRouterPluginManager, PluginLifecycleStage } from './plugin';\nimport { getRouterMonitoring } from './monitoring';\nimport { getAdapterManager } from './adapter';\nimport { createReactRouterAdapter } from './adapter/react-router';\n\nexport class RouterManager {\n private static instance: RouterManager | null = null;\n\n /**\n * 路由实例\n * 只能在 initialize 方法中赋值\n */\n private router: ReturnType<typeof createBrowserRouter> | null = null;\n\n /**\n * 是否已初始化\n */\n private initialized = false;\n\n /**\n * 路由缓存实例\n */\n private cache = getRouteCache();\n\n /**\n * 路由预加载器实例\n */\n private preloader = getRoutePreloader();\n\n /**\n * 路由插件管理器实例\n */\n private pluginManager = getRouterPluginManager();\n\n /**\n * 路由监控服务实例\n */\n private monitoring = getRouterMonitoring();\n\n /**\n * 路由适配器管理器实例\n */\n private adapterManager = getAdapterManager();\n\n private constructor() {\n // 私有构造函数\n // 注册默认的 React Router 适配器\n this.adapterManager.register({\n name: 'react-router',\n factory: createReactRouterAdapter(),\n priority: 10,\n });\n }\n /**\n * 获取单例实例\n */\n static getInstance(): RouterManager {\n if (!RouterManager.instance) {\n RouterManager.instance = new RouterManager();\n }\n return RouterManager.instance;\n }\n /**\n * 初始化路由管理器\n * \n * @param config - 路由配置\n * @param _appInstance - 应用实例(保留用于兼容性,当前未使用)\n */\n async initialize(config: RouterConfig): Promise<void> {\n // 如果路由被禁用,直接返回\n if (config.enabled === false || config.enabled === 'disabled') {\n logger.info('路由系统已禁用');\n return;\n }\n\n // 配置验证(如果启用)\n if (config.enableValidation !== false) {\n try {\n RouterConfigValidator.validate(config);\n logger.debug('路由配置验证通过');\n } catch (error) {\n logger.error('路由配置验证失败', error);\n // 开发环境下抛出错误,生产环境下记录警告但继续执行\n if (process.env.NODE_ENV === 'development') {\n throw error;\n }\n }\n }\n\n // 执行插件钩子:路由初始化前\n await this.pluginManager.executeHooks(PluginLifecycleStage.BEFORE_INIT, {\n config,\n });\n\n // 注册生命周期钩子\n if (config.hooks) {\n const lifecycleManager = getRouterLifecycleManager();\n lifecycleManager.register(config.hooks);\n logger.debug('路由生命周期钩子已注册');\n }\n\n // 转换数据(使用缓存)\n if (!config.routes) {\n throw new RouterError(\n '路由配置不能为空',\n RouterErrorCode.ROUTER_CONFIG_ERROR\n );\n }\n\n // 更新预加载策略(默认关闭,按需懒加载)\n this.preloader.updateConfig(config.preload);\n this.preloader.clear();\n\n let result;\n const cacheKey = config.routes;\n const cachedResult = this.cache.get(cacheKey);\n\n if (cachedResult) {\n logger.debug('使用缓存的路由转换结果');\n result = cachedResult;\n } else {\n // 执行插件钩子:路由转换前\n await this.pluginManager.executeHooks(PluginLifecycleStage.BEFORE_TRANSFORM, {\n config,\n });\n\n result = await transformRoutes(config.routes, config.transformOptions);\n\n // 执行插件钩子:路由转换后\n await this.pluginManager.executeHooks(PluginLifecycleStage.AFTER_TRANSFORM, {\n config,\n routes: result.routes,\n });\n\n // 缓存转换结果\n this.cache.set(cacheKey, result);\n }\n\n const enableHydrateFallback =\n config.enableHydrateFallback\n ?? Boolean((config.options as { hydrationData?: unknown } | undefined)?.hydrationData);\n\n const reactRoutes = await transformRoutesToReactRoutes(\n result.routes,\n result,\n config.defaultRouteErrorComponent,\n config.defaultRouteLoadingComponent,\n enableHydrateFallback,\n );\n\n // 注册路由到预加载器\n if (result.routes) {\n this.preloader.registerRoutes(result.routes, result);\n // 开始预加载\n this.preloader.startPreload();\n }\n\n await this.resolveInitialLazyRoutes(reactRoutes, !enableHydrateFallback);\n\n let routerInstance: ReturnType<typeof createBrowserRouter> | null = null;\n if (config.mode === 'browser') {\n routerInstance = createBrowserRouter(reactRoutes, config.options);\n } else if (config.mode === 'hash') {\n routerInstance = createHashRouter(reactRoutes, config.options);\n } else if (config.mode === 'memory') {\n routerInstance = createMemoryRouter(reactRoutes, config.options);\n }\n\n if (!routerInstance) {\n throw new RouterError(\n '路由模式不支持',\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n undefined,\n { mode: config.mode }\n );\n }\n\n // 只能在 initialize 方法中赋值\n this.router = routerInstance;\n this.initialized = true;\n\n // 执行插件钩子:路由初始化后\n await this.pluginManager.executeHooks(PluginLifecycleStage.AFTER_INIT, {\n config,\n routes: result.routes,\n });\n\n // 记录监控:路由初始化完成\n const initialPath = typeof window !== 'undefined'\n ? `${window.location.pathname}${window.location.search}${window.location.hash}`\n : this.router?.state?.location?.pathname ?? '/';\n\n this.monitoring.trackRouteAccess(\n {\n path: initialPath,\n meta: { name: 'router-init' },\n },\n undefined,\n true\n );\n\n logger.info('路由管理器初始化完成');\n }\n\n /**\n * 预解析 lazy 路由,避免首屏或重定向链路长时间停留在 hydrate fallback。\n * resolveAll=true 时会在初始化阶段解析全部 lazy 路由。\n */\n private async resolveInitialLazyRoutes(routes: RouteObject[], resolveAll: boolean = false): Promise<void> {\n if (typeof window === 'undefined') {\n return;\n }\n\n let targetRoutes: RouteObject[] = [];\n if (resolveAll) {\n const stack = [...routes];\n while (stack.length > 0) {\n const current = stack.shift();\n if (!current) {\n continue;\n }\n targetRoutes.push(current);\n if (current.children && current.children.length > 0) {\n stack.push(...current.children);\n }\n }\n } else {\n const matches = matchRoutes(routes, window.location.pathname) ?? [];\n if (matches.length === 0) {\n return;\n }\n targetRoutes = matches.map((match) => match.route);\n }\n\n await Promise.all(\n targetRoutes.map(async (route) => {\n const lazy = route.lazy;\n if (typeof lazy !== 'function') {\n return;\n }\n\n try {\n const resolved = await lazy();\n Object.assign(route, resolved);\n delete (route as RouteObject & { lazy?: unknown }).lazy;\n } catch (error) {\n logger.warn('首屏路由懒加载预解析失败,回退到 Router 默认懒加载', error);\n }\n }),\n );\n }\n\n /**\n * 获取路由实例\n * \n * @returns 路由实例,如果未初始化则返回 null\n */\n getRouter(): ReturnType<typeof createBrowserRouter> | null {\n return this.router;\n }\n\n /**\n * 检查是否已初始化\n * \n * @returns 如果已初始化返回 true,否则返回 false\n */\n isInitialized(): boolean {\n return this.initialized;\n }\n\n /**\n * 销毁路由管理器\n */\n destroy(): void {\n // 执行插件钩子:销毁\n this.pluginManager.executeHooks(PluginLifecycleStage.DESTROY, {\n config: {} as RouterConfig,\n });\n\n // 停止预加载\n this.preloader.stopPreload();\n\n this.router = null;\n this.initialized = false;\n \n // 清空生命周期钩子和中间件\n const lifecycleManager = getRouterLifecycleManager();\n lifecycleManager.clear();\n \n const middlewareManager = getRouterMiddlewareManager();\n middlewareManager.clear();\n \n logger.info('路由管理器已销毁');\n }\n\n /**\n * 获取路由缓存实例\n */\n getCache() {\n return this.cache;\n }\n\n /**\n * 获取路由预加载器实例\n */\n getPreloader() {\n return this.preloader;\n }\n\n /**\n * 获取路由插件管理器实例\n */\n getPluginManager() {\n return this.pluginManager;\n }\n\n /**\n * 获取路由监控服务实例\n */\n getMonitoring() {\n return this.monitoring;\n }\n}\n\n/**\n * 获取路由管理器\n */\nexport function getRouterManager(): RouterManager {\n return RouterManager.getInstance();\n}\n"],"names":["logger","transformRoutes","transformRoutesToReactRoutes","createBrowserRouter","createHashRouter","createMemoryRouter","matchRoutes","RouterConfigValidator","getRouterLifecycleManager","getRouterMiddlewareManager","RouterError","RouterErrorCode","getRouteCache","getRoutePreloader","getRouterPluginManager","PluginLifecycleStage","getRouterMonitoring","getAdapterManager","createReactRouterAdapter","RouterManager","getInstance","instance","initialize","config","enabled","info","enableValidation","validate","debug","error","process","env","NODE_ENV","pluginManager","executeHooks","BEFORE_INIT","hooks","lifecycleManager","register","routes","ROUTER_CONFIG_ERROR","preloader","updateConfig","preload","clear","result","cacheKey","cachedResult","cache","get","BEFORE_TRANSFORM","transformOptions","AFTER_TRANSFORM","set","enableHydrateFallback","Boolean","options","hydrationData","reactRoutes","defaultRouteErrorComponent","defaultRouteLoadingComponent","registerRoutes","startPreload","resolveInitialLazyRoutes","routerInstance","mode","undefined","router","initialized","AFTER_INIT","initialPath","window","location","pathname","search","hash","state","monitoring","trackRouteAccess","path","meta","name","resolveAll","targetRoutes","stack","length","current","shift","push","children","matches","map","match","route","Promise","all","lazy","resolved","Object","assign","warn","getRouter","isInitialized","destroy","DESTROY","stopPreload","middlewareManager","getCache","getPreloader","getPluginManager","getMonitoring","adapterManager","factory","priority","getRouterManager"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/adapter/AdapterManager.ts"],"sourcesContent":["/**\n * 路由适配器管理器\n * 负责管理路由适配器的注册、创建和切换\n */\n\nimport { logger } from '@vlian/logger';\nimport type { IRouterAdapter, AdapterRegistration, RouterAdapterConfig } from './types';\nimport { RouterError, RouterErrorCode } from '../errors';\n\n/**\n * 路由适配器管理器\n */\nexport class AdapterManager {\n private adapters: Map<string, AdapterRegistration> = new Map();\n private currentAdapter: IRouterAdapter | null = null;\n private defaultAdapterName: string | null = null;\n\n /**\n * 注册适配器\n * \n * @param registration - 适配器注册信息\n * @returns 取消注册函数\n */\n register(registration: AdapterRegistration): () => void {\n // 验证适配器\n if (!registration.name) {\n throw new Error('适配器必须提供名称');\n }\n\n if (!registration.factory || typeof registration.factory !== 'function') {\n throw new Error('适配器必须提供工厂函数');\n }\n\n // 设置默认值\n const adapterRegistration: AdapterRegistration = {\n priority: 100,\n enabled: true,\n ...registration,\n };\n\n // 注册适配器\n this.adapters.set(registration.name, adapterRegistration);\n\n logger.debug(`路由适配器已注册: ${registration.name}`);\n\n // 如果没有默认适配器,设置为第一个注册的适配器\n if (!this.defaultAdapterName) {\n this.defaultAdapterName = registration.name;\n }\n\n // 返回取消注册函数\n return () => {\n this.unregister(registration.name);\n };\n }\n\n /**\n * 批量注册适配器\n * \n * @param registrations - 适配器注册信息数组\n */\n registerBatch(registrations: AdapterRegistration[]): void {\n registrations.forEach((registration) => this.register(registration));\n }\n\n /**\n * 取消注册适配器\n * \n * @param name - 适配器名称\n */\n unregister(name: string): void {\n if (this.adapters.has(name)) {\n this.adapters.delete(name);\n logger.debug(`路由适配器已取消注册: ${name}`);\n\n // 如果取消的是默认适配器,重置默认适配器\n if (this.defaultAdapterName === name) {\n const firstAdapter = Array.from(this.adapters.keys())[0];\n this.defaultAdapterName = firstAdapter || null;\n }\n }\n }\n\n /**\n * 创建适配器实例\n * \n * @param name - 适配器名称(可选,使用默认适配器)\n * @param config - 适配器配置\n * @returns 适配器实例\n */\n async createAdapter(\n config: RouterAdapterConfig,\n name?: string\n ): Promise<IRouterAdapter> {\n const adapterName = name || this.defaultAdapterName;\n\n if (!adapterName) {\n throw new RouterError(\n '没有可用的路由适配器',\n RouterErrorCode.ROUTER_NOT_INITIALIZED\n );\n }\n\n const registration = this.adapters.get(adapterName);\n\n if (!registration) {\n throw new RouterError(\n `路由适配器不存在: ${adapterName}`,\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n undefined,\n { adapterName }\n );\n }\n\n if (!registration.enabled) {\n throw new RouterError(\n `路由适配器已禁用: ${adapterName}`,\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n undefined,\n { adapterName }\n );\n }\n\n try {\n // 创建适配器实例\n const adapter = await registration.factory(config);\n\n // 验证适配器\n if (!adapter || typeof adapter.initialize !== 'function') {\n throw new Error('适配器实例无效');\n }\n\n // 初始化适配器\n await adapter.initialize(config);\n\n logger.info(`路由适配器已创建并初始化: ${adapterName}`);\n\n return adapter;\n } catch (error) {\n logger.error(`创建路由适配器失败: ${adapterName}`, error);\n const errorContext: Record<string, unknown> = { adapterName };\n if (error instanceof Error) {\n errorContext.originalError = error;\n }\n throw new RouterError(\n `创建路由适配器失败: ${adapterName}`,\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n error instanceof Error ? error : undefined,\n errorContext\n );\n }\n }\n\n /**\n * 设置当前适配器\n * \n * @param adapter - 适配器实例\n */\n setCurrentAdapter(adapter: IRouterAdapter): void {\n // 销毁旧的适配器\n if (this.currentAdapter && this.currentAdapter.destroy) {\n try {\n this.currentAdapter.destroy();\n } catch (error) {\n logger.warn('销毁旧适配器失败', error);\n }\n }\n\n this.currentAdapter = adapter;\n logger.debug(`当前路由适配器已设置: ${adapter.name}`);\n }\n\n /**\n * 获取当前适配器\n * \n * @returns 当前适配器实例,如果不存在返回 null\n */\n getCurrentAdapter(): IRouterAdapter | null {\n return this.currentAdapter;\n }\n\n /**\n * 设置默认适配器\n * \n * @param name - 适配器名称\n */\n setDefaultAdapter(name: string): void {\n if (!this.adapters.has(name)) {\n throw new Error(`适配器不存在: ${name}`);\n }\n\n this.defaultAdapterName = name;\n logger.debug(`默认路由适配器已设置: ${name}`);\n }\n\n /**\n * 获取默认适配器名称\n * \n * @returns 默认适配器名称\n */\n getDefaultAdapterName(): string | null {\n return this.defaultAdapterName;\n }\n\n /**\n * 获取所有适配器\n * \n * @returns 适配器注册信息数组\n */\n getAllAdapters(): AdapterRegistration[] {\n return Array.from(this.adapters.values());\n }\n\n /**\n * 获取启用的适配器\n * \n * @returns 启用的适配器注册信息数组\n */\n getEnabledAdapters(): AdapterRegistration[] {\n return Array.from(this.adapters.values()).filter((a) => a.enabled !== false);\n }\n\n /**\n * 获取适配器\n * \n * @param name - 适配器名称\n * @returns 适配器注册信息,如果不存在返回 undefined\n */\n getAdapter(name: string): AdapterRegistration | undefined {\n return this.adapters.get(name);\n }\n\n /**\n * 清空所有适配器\n */\n clear(): void {\n // 销毁当前适配器\n if (this.currentAdapter && this.currentAdapter.destroy) {\n try {\n this.currentAdapter.destroy();\n } catch (error) {\n logger.warn('销毁适配器失败', error);\n }\n }\n\n this.adapters.clear();\n this.currentAdapter = null;\n this.defaultAdapterName = null;\n logger.debug('所有路由适配器已清空');\n }\n\n /**\n * 获取适配器数量\n * \n * @returns 适配器数量\n */\n getCount(): number {\n return this.adapters.size;\n }\n}\n\n/**\n * 获取路由适配器管理器单例\n */\nlet adapterManagerInstance: AdapterManager | null = null;\n\nexport function getAdapterManager(): AdapterManager {\n if (!adapterManagerInstance) {\n adapterManagerInstance = new AdapterManager();\n }\n return adapterManagerInstance;\n}\n"],"names":["AdapterManager","getAdapterManager","register","registration","name","Error","factory","adapterRegistration","priority","enabled","adapters","set","logger","debug","defaultAdapterName","unregister","registerBatch","registrations","forEach","has","delete","firstAdapter","Array","from","keys","createAdapter","config","adapterName","RouterError","RouterErrorCode","ROUTER_NOT_INITIALIZED","get","ROUTER_CONFIG_ERROR","undefined","adapter","initialize","info","error","errorContext","originalError","setCurrentAdapter","currentAdapter","destroy","warn","getCurrentAdapter","setDefaultAdapter","getDefaultAdapterName","getAllAdapters","values","getEnabledAdapters","filter","a","getAdapter","clear","getCount","size","Map","adapterManagerInstance"],"mappings":"AAAA;;;CAGC;;;;;;;;;;;QASYA;eAAAA;;QAiQGC;eAAAA;;;wBAxQO;wBAEsB;;;;;;;;;;;;;;AAKtC,IAAA,AAAMD,iBAAN,MAAMA;IAKX;;;;;GAKC,GACDE,SAASC,YAAiC,EAAc;QACtD,QAAQ;QACR,IAAI,CAACA,aAAaC,IAAI,EAAE;YACtB,MAAM,IAAIC,MAAM;QAClB;QAEA,IAAI,CAACF,aAAaG,OAAO,IAAI,OAAOH,aAAaG,OAAO,KAAK,YAAY;YACvE,MAAM,IAAID,MAAM;QAClB;QAEA,QAAQ;QACR,MAAME,sBAA2C;YAC/CC,UAAU;YACVC,SAAS;YACT,GAAGN,YAAY;QACjB;QAEA,QAAQ;QACR,IAAI,CAACO,QAAQ,CAACC,GAAG,CAACR,aAAaC,IAAI,EAAEG;QAErCK,cAAM,CAACC,KAAK,CAAC,CAAC,UAAU,EAAEV,aAAaC,IAAI,EAAE;QAE7C,yBAAyB;QACzB,IAAI,CAAC,IAAI,CAACU,kBAAkB,EAAE;YAC5B,IAAI,CAACA,kBAAkB,GAAGX,aAAaC,IAAI;QAC7C;QAEA,WAAW;QACX,OAAO;YACL,IAAI,CAACW,UAAU,CAACZ,aAAaC,IAAI;QACnC;IACF;IAEA;;;;GAIC,GACDY,cAAcC,aAAoC,EAAQ;QACxDA,cAAcC,OAAO,CAAC,CAACf,eAAiB,IAAI,CAACD,QAAQ,CAACC;IACxD;IAEA;;;;GAIC,GACDY,WAAWX,IAAY,EAAQ;QAC7B,IAAI,IAAI,CAACM,QAAQ,CAACS,GAAG,CAACf,OAAO;YAC3B,IAAI,CAACM,QAAQ,CAACU,MAAM,CAAChB;YACrBQ,cAAM,CAACC,KAAK,CAAC,CAAC,YAAY,EAAET,MAAM;YAElC,sBAAsB;YACtB,IAAI,IAAI,CAACU,kBAAkB,KAAKV,MAAM;gBACpC,MAAMiB,eAAeC,MAAMC,IAAI,CAAC,IAAI,CAACb,QAAQ,CAACc,IAAI,GAAG,CAAC,EAAE;gBACxD,IAAI,CAACV,kBAAkB,GAAGO,gBAAgB;YAC5C;QACF;IACF;IAEA;;;;;;GAMC,GACD,MAAMI,cACJC,MAA2B,EAC3BtB,IAAa,EACY;QACzB,MAAMuB,cAAcvB,QAAQ,IAAI,CAACU,kBAAkB;QAEnD,IAAI,CAACa,aAAa;YAChB,MAAM,IAAIC,mBAAW,CACnB,cACAC,uBAAe,CAACC,sBAAsB;QAE1C;QAEA,MAAM3B,eAAe,IAAI,CAACO,QAAQ,CAACqB,GAAG,CAACJ;QAEvC,IAAI,CAACxB,cAAc;YACjB,MAAM,IAAIyB,mBAAW,CACnB,CAAC,UAAU,EAAED,aAAa,EAC1BE,uBAAe,CAACG,mBAAmB,EACnCC,WACAA,WACA;gBAAEN;YAAY;QAElB;QAEA,IAAI,CAACxB,aAAaM,OAAO,EAAE;YACzB,MAAM,IAAImB,mBAAW,CACnB,CAAC,UAAU,EAAED,aAAa,EAC1BE,uBAAe,CAACG,mBAAmB,EACnCC,WACAA,WACA;gBAAEN;YAAY;QAElB;QAEA,IAAI;YACF,UAAU;YACV,MAAMO,UAAU,MAAM/B,aAAaG,OAAO,CAACoB;YAE3C,QAAQ;YACR,IAAI,CAACQ,WAAW,OAAOA,QAAQC,UAAU,KAAK,YAAY;gBACxD,MAAM,IAAI9B,MAAM;YAClB;YAEA,SAAS;YACT,MAAM6B,QAAQC,UAAU,CAACT;YAEzBd,cAAM,CAACwB,IAAI,CAAC,CAAC,cAAc,EAAET,aAAa;YAE1C,OAAOO;QACT,EAAE,OAAOG,OAAO;YACdzB,cAAM,CAACyB,KAAK,CAAC,CAAC,WAAW,EAAEV,aAAa,EAAEU;YAC1C,MAAMC,eAAwC;gBAAEX;YAAY;YAC5D,IAAIU,iBAAiBhC,OAAO;gBAC1BiC,aAAaC,aAAa,GAAGF;YAC/B;YACA,MAAM,IAAIT,mBAAW,CACnB,CAAC,WAAW,EAAED,aAAa,EAC3BE,uBAAe,CAACG,mBAAmB,EACnCC,WACAI,iBAAiBhC,QAAQgC,QAAQJ,WACjCK;QAEJ;IACF;IAEA;;;;GAIC,GACDE,kBAAkBN,OAAuB,EAAQ;QAC/C,UAAU;QACV,IAAI,IAAI,CAACO,cAAc,IAAI,IAAI,CAACA,cAAc,CAACC,OAAO,EAAE;YACtD,IAAI;gBACF,IAAI,CAACD,cAAc,CAACC,OAAO;YAC7B,EAAE,OAAOL,OAAO;gBACdzB,cAAM,CAAC+B,IAAI,CAAC,YAAYN;YAC1B;QACF;QAEA,IAAI,CAACI,cAAc,GAAGP;QACtBtB,cAAM,CAACC,KAAK,CAAC,CAAC,YAAY,EAAEqB,QAAQ9B,IAAI,EAAE;IAC5C;IAEA;;;;GAIC,GACDwC,oBAA2C;QACzC,OAAO,IAAI,CAACH,cAAc;IAC5B;IAEA;;;;GAIC,GACDI,kBAAkBzC,IAAY,EAAQ;QACpC,IAAI,CAAC,IAAI,CAACM,QAAQ,CAACS,GAAG,CAACf,OAAO;YAC5B,MAAM,IAAIC,MAAM,CAAC,QAAQ,EAAED,MAAM;QACnC;QAEA,IAAI,CAACU,kBAAkB,GAAGV;QAC1BQ,cAAM,CAACC,KAAK,CAAC,CAAC,YAAY,EAAET,MAAM;IACpC;IAEA;;;;GAIC,GACD0C,wBAAuC;QACrC,OAAO,IAAI,CAAChC,kBAAkB;IAChC;IAEA;;;;GAIC,GACDiC,iBAAwC;QACtC,OAAOzB,MAAMC,IAAI,CAAC,IAAI,CAACb,QAAQ,CAACsC,MAAM;IACxC;IAEA;;;;GAIC,GACDC,qBAA4C;QAC1C,OAAO3B,MAAMC,IAAI,CAAC,IAAI,CAACb,QAAQ,CAACsC,MAAM,IAAIE,MAAM,CAAC,CAACC,IAAMA,EAAE1C,OAAO,KAAK;IACxE;IAEA;;;;;GAKC,GACD2C,WAAWhD,IAAY,EAAmC;QACxD,OAAO,IAAI,CAACM,QAAQ,CAACqB,GAAG,CAAC3B;IAC3B;IAEA;;GAEC,GACDiD,QAAc;QACZ,UAAU;QACV,IAAI,IAAI,CAACZ,cAAc,IAAI,IAAI,CAACA,cAAc,CAACC,OAAO,EAAE;YACtD,IAAI;gBACF,IAAI,CAACD,cAAc,CAACC,OAAO;YAC7B,EAAE,OAAOL,OAAO;gBACdzB,cAAM,CAAC+B,IAAI,CAAC,WAAWN;YACzB;QACF;QAEA,IAAI,CAAC3B,QAAQ,CAAC2C,KAAK;QACnB,IAAI,CAACZ,cAAc,GAAG;QACtB,IAAI,CAAC3B,kBAAkB,GAAG;QAC1BF,cAAM,CAACC,KAAK,CAAC;IACf;IAEA;;;;GAIC,GACDyC,WAAmB;QACjB,OAAO,IAAI,CAAC5C,QAAQ,CAAC6C,IAAI;IAC3B;;QAxPA,uBAAQ7C,YAA6C,IAAI8C;QACzD,uBAAQf,kBAAwC;QAChD,uBAAQ3B,sBAAoC;;AAuP9C;AAEA;;CAEC,GACD,IAAI2C,yBAAgD;AAE7C,SAASxD;IACd,IAAI,CAACwD,wBAAwB;QAC3BA,yBAAyB,IAAIzD;IAC/B;IACA,OAAOyD;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/adapter/AdapterManager.ts"],"sourcesContent":["/**\n * 路由适配器管理器\n * 负责管理路由适配器的注册、创建和切换\n */\n\nimport { logger } from '@vlian/logger';\nimport type { IRouterAdapter, AdapterRegistration, RouterAdapterConfig } from './types';\nimport { RouterError, RouterErrorCode } from '../errors';\n\n/**\n * 路由适配器管理器\n */\nexport class AdapterManager {\n private adapters: Map<string, AdapterRegistration> = new Map();\n private currentAdapter: IRouterAdapter | null = null;\n private defaultAdapterName: string | null = null;\n\n /**\n * 注册适配器\n * \n * @param registration - 适配器注册信息\n * @returns 取消注册函数\n */\n register(registration: AdapterRegistration): () => void {\n // 验证适配器\n if (!registration.name) {\n throw new Error('适配器必须提供名称');\n }\n\n if (!registration.factory || typeof registration.factory !== 'function') {\n throw new Error('适配器必须提供工厂函数');\n }\n\n // 设置默认值\n const adapterRegistration: AdapterRegistration = {\n priority: 100,\n enabled: true,\n ...registration,\n };\n\n // 注册适配器\n this.adapters.set(registration.name, adapterRegistration);\n\n logger.debug(`路由适配器已注册: ${registration.name}`);\n\n // 如果没有默认适配器,设置为第一个注册的适配器\n if (!this.defaultAdapterName) {\n this.defaultAdapterName = registration.name;\n }\n\n // 返回取消注册函数\n return () => {\n this.unregister(registration.name);\n };\n }\n\n /**\n * 批量注册适配器\n * \n * @param registrations - 适配器注册信息数组\n */\n registerBatch(registrations: AdapterRegistration[]): void {\n registrations.forEach((registration) => this.register(registration));\n }\n\n /**\n * 取消注册适配器\n * \n * @param name - 适配器名称\n */\n unregister(name: string): void {\n if (this.adapters.has(name)) {\n this.adapters.delete(name);\n logger.debug(`路由适配器已取消注册: ${name}`);\n\n // 如果取消的是默认适配器,重置默认适配器\n if (this.defaultAdapterName === name) {\n const firstAdapter = Array.from(this.adapters.keys())[0];\n this.defaultAdapterName = firstAdapter || null;\n }\n }\n }\n\n /**\n * 创建适配器实例\n * \n * @param name - 适配器名称(可选,使用默认适配器)\n * @param config - 适配器配置\n * @returns 适配器实例\n */\n async createAdapter(\n config: RouterAdapterConfig,\n name?: string\n ): Promise<IRouterAdapter> {\n const adapterName = name || this.defaultAdapterName;\n\n if (!adapterName) {\n throw new RouterError(\n '没有可用的路由适配器',\n RouterErrorCode.ROUTER_NOT_INITIALIZED\n );\n }\n\n const registration = this.adapters.get(adapterName);\n\n if (!registration) {\n throw new RouterError(\n `路由适配器不存在: ${adapterName}`,\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n undefined,\n { adapterName }\n );\n }\n\n if (!registration.enabled) {\n throw new RouterError(\n `路由适配器已禁用: ${adapterName}`,\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n undefined,\n { adapterName }\n );\n }\n\n try {\n // 创建适配器实例\n const adapter = await registration.factory(config);\n\n // 验证适配器\n if (!adapter || typeof adapter.initialize !== 'function') {\n throw new Error('适配器实例无效');\n }\n\n // 初始化适配器\n await adapter.initialize(config);\n\n logger.info(`路由适配器已创建并初始化: ${adapterName}`);\n\n return adapter;\n } catch (error) {\n logger.error(`创建路由适配器失败: ${adapterName}`, error);\n const errorContext: Record<string, unknown> = { adapterName };\n if (error instanceof Error) {\n errorContext.originalError = error;\n }\n throw new RouterError(\n `创建路由适配器失败: ${adapterName}`,\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n error instanceof Error ? error : undefined,\n errorContext\n );\n }\n }\n\n /**\n * 设置当前适配器\n * \n * @param adapter - 适配器实例\n */\n setCurrentAdapter(adapter: IRouterAdapter): void {\n // 销毁旧的适配器\n if (this.currentAdapter && this.currentAdapter.destroy) {\n try {\n this.currentAdapter.destroy();\n } catch (error) {\n logger.warn('销毁旧适配器失败', error);\n }\n }\n\n this.currentAdapter = adapter;\n logger.debug(`当前路由适配器已设置: ${adapter.name}`);\n }\n\n /**\n * 获取当前适配器\n * \n * @returns 当前适配器实例,如果不存在返回 null\n */\n getCurrentAdapter(): IRouterAdapter | null {\n return this.currentAdapter;\n }\n\n /**\n * 设置默认适配器\n * \n * @param name - 适配器名称\n */\n setDefaultAdapter(name: string): void {\n if (!this.adapters.has(name)) {\n throw new Error(`适配器不存在: ${name}`);\n }\n\n this.defaultAdapterName = name;\n logger.debug(`默认路由适配器已设置: ${name}`);\n }\n\n /**\n * 获取默认适配器名称\n * \n * @returns 默认适配器名称\n */\n getDefaultAdapterName(): string | null {\n return this.defaultAdapterName;\n }\n\n /**\n * 获取所有适配器\n * \n * @returns 适配器注册信息数组\n */\n getAllAdapters(): AdapterRegistration[] {\n return Array.from(this.adapters.values());\n }\n\n /**\n * 获取启用的适配器\n * \n * @returns 启用的适配器注册信息数组\n */\n getEnabledAdapters(): AdapterRegistration[] {\n return Array.from(this.adapters.values()).filter((a) => a.enabled !== false);\n }\n\n /**\n * 获取适配器\n * \n * @param name - 适配器名称\n * @returns 适配器注册信息,如果不存在返回 undefined\n */\n getAdapter(name: string): AdapterRegistration | undefined {\n return this.adapters.get(name);\n }\n\n /**\n * 清空所有适配器\n */\n clear(): void {\n // 销毁当前适配器\n if (this.currentAdapter && this.currentAdapter.destroy) {\n try {\n this.currentAdapter.destroy();\n } catch (error) {\n logger.warn('销毁适配器失败', error);\n }\n }\n\n this.adapters.clear();\n this.currentAdapter = null;\n this.defaultAdapterName = null;\n logger.debug('所有路由适配器已清空');\n }\n\n /**\n * 获取适配器数量\n * \n * @returns 适配器数量\n */\n getCount(): number {\n return this.adapters.size;\n }\n}\n\n/**\n * 获取路由适配器管理器单例\n */\nlet adapterManagerInstance: AdapterManager | null = null;\n\nexport function getAdapterManager(): AdapterManager {\n if (!adapterManagerInstance) {\n adapterManagerInstance = new AdapterManager();\n }\n return adapterManagerInstance;\n}\n"],"names":["logger","RouterError","RouterErrorCode","AdapterManager","register","registration","name","Error","factory","adapterRegistration","priority","enabled","adapters","set","debug","defaultAdapterName","unregister","registerBatch","registrations","forEach","has","delete","firstAdapter","Array","from","keys","createAdapter","config","adapterName","ROUTER_NOT_INITIALIZED","get","ROUTER_CONFIG_ERROR","undefined","adapter","initialize","info","error","errorContext","originalError","setCurrentAdapter","currentAdapter","destroy","warn","getCurrentAdapter","setDefaultAdapter","getDefaultAdapterName","getAllAdapters","values","getEnabledAdapters","filter","a","getAdapter","clear","getCount","size","Map","adapterManagerInstance","getAdapterManager"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/adapter/index.ts"],"sourcesContent":["/**\n * 路由适配器模块入口\n */\n\nexport * from './types';\nexport * from './AdapterManager';\nexport * from './react-router';\n"],"names":[],"mappings":"AAAA;;CAEC;;;;qBAEa;qBACA;qBACA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/adapter/index.ts"],"sourcesContent":["/**\n * 路由适配器模块入口\n */\n\nexport * from './types';\nexport * from './AdapterManager';\nexport * from './react-router';\n"],"names":[],"mappings":"AAAA;;CAEC,GAED,cAAc,UAAU;AACxB,cAAc,mBAAmB;AACjC,cAAc,iBAAiB"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/core/router/adapter/react-router/ReactRouterAdapter.ts"],"sourcesContent":["/**\n * React Router 适配器实现\n */\n\nimport type { IRouterAdapter, RouterAdapterConfig } from '../types';\nimport type { RouteLocation, NavigateOptions } from '../../types';\nimport type { AppInstance } from '../../../startup/AppInstance';\nimport { createBrowserRouter, createHashRouter, createMemoryRouter } from 'react-router-dom';\nimport { transformRoutesToReactRoutes } from '../../utils/adapters/react-router/transform';\nimport { transformRoutes } from '../../utils/transform';\nimport { logger } from '@vlian/logger';\n\n/**\n * React Router 适配器\n */\nexport class ReactRouterAdapter implements IRouterAdapter {\n readonly name = 'react-router';\n readonly version = '6.0.0';\n\n private router: ReturnType<typeof createBrowserRouter> | null = null;\n\n /**\n * 初始化适配器\n */\n async initialize(config: RouterAdapterConfig): Promise<void> {\n\n // 转换路由配置\n const transformResult = await transformRoutes(config.routes);\n const reactRoutes = await transformRoutesToReactRoutes(\n transformResult.routes,\n transformResult,\n config.defaultRouteErrorComponent,\n config.defaultRouteLoadingComponent,\n Boolean((config.options as { hydrationData?: unknown } | undefined)?.hydrationData),\n );\n\n // 创建路由实例\n const mode = config.mode || 'browser';\n if (mode === 'browser') {\n this.router = createBrowserRouter(reactRoutes, config.options as any);\n } else if (mode === 'hash') {\n this.router = createHashRouter(reactRoutes, config.options as any);\n } else if (mode === 'memory') {\n this.router = createMemoryRouter(reactRoutes, config.options as any);\n } else {\n throw new Error(`不支持的路由模式: ${mode}`);\n }\n\n logger.debug('React Router 适配器初始化完成');\n }\n\n /**\n * 挂载到应用实例\n */\n mount(_app: AppInstance): void {\n if (!this.router) {\n throw new Error('适配器未初始化');\n }\n\n // React Router 适配器通过 RouterProvider 挂载\n // 实际的挂载逻辑在 renderApp 中处理\n logger.debug('React Router 适配器已挂载');\n }\n\n /**\n * 导航到指定路径\n */\n navigate(to: string, options?: NavigateOptions): void {\n if (!this.router) {\n throw new Error('适配器未初始化');\n }\n\n if (options?.replace) {\n this.router.navigate(to, { replace: true, state: options.state });\n } else {\n this.router.navigate(to, { state: options?.state });\n }\n }\n\n /**\n * 获取当前路由信息\n */\n getCurrentRoute(): RouteLocation {\n if (!this.router) {\n throw new Error('适配器未初始化');\n }\n\n const state = this.router.state;\n const location = state.location;\n\n // 解析查询参数\n const query: Record<string, unknown> = {};\n if (location.search) {\n const params = new URLSearchParams(location.search);\n params.forEach((value, key) => {\n query[key] = value;\n });\n }\n\n return {\n path: location.pathname + location.hash,\n query,\n params: location.state as Record<string, unknown> | undefined,\n };\n }\n\n /**\n * 获取路由实例(用于 RouterProvider)\n */\n getRouter(): ReturnType<typeof createBrowserRouter> | null {\n return this.router;\n }\n\n /**\n * 销毁适配器\n */\n destroy(): void {\n this.router = null;\n logger.debug('React Router 适配器已销毁');\n }\n}\n\n/**\n * 创建 React Router 适配器工厂函数\n */\nexport function createReactRouterAdapter(): (_config: RouterAdapterConfig) => IRouterAdapter {\n return (_config: RouterAdapterConfig) => {\n return new ReactRouterAdapter();\n };\n}\n"],"names":["ReactRouterAdapter","createReactRouterAdapter","initialize","config","transformResult","transformRoutes","routes","reactRoutes","transformRoutesToReactRoutes","defaultRouteErrorComponent","defaultRouteLoadingComponent","Boolean","options","hydrationData","mode","router","createBrowserRouter","createHashRouter","createMemoryRouter","Error","logger","debug","mount","_app","navigate","to","replace","state","getCurrentRoute","location","query","search","params","URLSearchParams","forEach","value","key","path","pathname","hash","getRouter","destroy","name","version","_config"],"mappings":"AAAA;;CAEC;;;;;;;;;;;QAaYA;eAAAA;;QA8GGC;eAAAA;;;gCAtH0D;2BAC7B;4BACb;wBACT;;;;;;;;;;;;;;AAKhB,IAAA,AAAMD,qBAAN,MAAMA;IAMX;;GAEC,GACD,MAAME,WAAWC,MAA2B,EAAiB;QAE3D,SAAS;QACT,MAAMC,kBAAkB,MAAMC,IAAAA,2BAAe,EAACF,OAAOG,MAAM;QAC3D,MAAMC,cAAc,MAAMC,IAAAA,uCAA4B,EACpDJ,gBAAgBE,MAAM,EACtBF,iBACAD,OAAOM,0BAA0B,EACjCN,OAAOO,4BAA4B,EACnCC,QAASR,OAAOS,OAAO,EAA8CC;QAGvE,SAAS;QACT,MAAMC,OAAOX,OAAOW,IAAI,IAAI;QAC5B,IAAIA,SAAS,WAAW;YACtB,IAAI,CAACC,MAAM,GAAGC,IAAAA,mCAAmB,EAACT,aAAaJ,OAAOS,OAAO;QAC/D,OAAO,IAAIE,SAAS,QAAQ;YAC1B,IAAI,CAACC,MAAM,GAAGE,IAAAA,gCAAgB,EAACV,aAAaJ,OAAOS,OAAO;QAC5D,OAAO,IAAIE,SAAS,UAAU;YAC5B,IAAI,CAACC,MAAM,GAAGG,IAAAA,kCAAkB,EAACX,aAAaJ,OAAOS,OAAO;QAC9D,OAAO;YACL,MAAM,IAAIO,MAAM,CAAC,UAAU,EAAEL,MAAM;QACrC;QAEAM,cAAM,CAACC,KAAK,CAAC;IACf;IAEA;;GAEC,GACDC,MAAMC,IAAiB,EAAQ;QAC7B,IAAI,CAAC,IAAI,CAACR,MAAM,EAAE;YAChB,MAAM,IAAII,MAAM;QAClB;QAEA,uCAAuC;QACvC,yBAAyB;QACzBC,cAAM,CAACC,KAAK,CAAC;IACf;IAEA;;GAEC,GACDG,SAASC,EAAU,EAAEb,OAAyB,EAAQ;QACpD,IAAI,CAAC,IAAI,CAACG,MAAM,EAAE;YAChB,MAAM,IAAII,MAAM;QAClB;QAEA,IAAIP,SAASc,SAAS;YACpB,IAAI,CAACX,MAAM,CAACS,QAAQ,CAACC,IAAI;gBAAEC,SAAS;gBAAMC,OAAOf,QAAQe,KAAK;YAAC;QACjE,OAAO;YACL,IAAI,CAACZ,MAAM,CAACS,QAAQ,CAACC,IAAI;gBAAEE,OAAOf,SAASe;YAAM;QACnD;IACF;IAEA;;GAEC,GACDC,kBAAiC;QAC/B,IAAI,CAAC,IAAI,CAACb,MAAM,EAAE;YAChB,MAAM,IAAII,MAAM;QAClB;QAEA,MAAMQ,QAAQ,IAAI,CAACZ,MAAM,CAACY,KAAK;QAC/B,MAAME,WAAWF,MAAME,QAAQ;QAE/B,SAAS;QACT,MAAMC,QAAiC,CAAC;QACxC,IAAID,SAASE,MAAM,EAAE;YACnB,MAAMC,SAAS,IAAIC,gBAAgBJ,SAASE,MAAM;YAClDC,OAAOE,OAAO,CAAC,CAACC,OAAOC;gBACrBN,KAAK,CAACM,IAAI,GAAGD;YACf;QACF;QAEA,OAAO;YACLE,MAAMR,SAASS,QAAQ,GAAGT,SAASU,IAAI;YACvCT;YACAE,QAAQH,SAASF,KAAK;QACxB;IACF;IAEA;;GAEC,GACDa,YAA2D;QACzD,OAAO,IAAI,CAACzB,MAAM;IACpB;IAEA;;GAEC,GACD0B,UAAgB;QACd,IAAI,CAAC1B,MAAM,GAAG;QACdK,cAAM,CAACC,KAAK,CAAC;IACf;;QAvGA,uBAASqB,QAAO;QAChB,uBAASC,WAAU;QAEnB,uBAAQ5B,UAAwD;;AAqGlE;AAKO,SAASd;IACd,OAAO,CAAC2C;QACN,OAAO,IAAI5C;IACb;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/core/router/adapter/react-router/ReactRouterAdapter.ts"],"sourcesContent":["/**\n * React Router 适配器实现\n */\n\nimport type { IRouterAdapter, RouterAdapterConfig } from '../types';\nimport type { RouteLocation, NavigateOptions } from '../../types';\nimport type { AppInstance } from '../../../startup/AppInstance';\nimport { createBrowserRouter, createHashRouter, createMemoryRouter } from 'react-router-dom';\nimport { transformRoutesToReactRoutes } from '../../utils/adapters/react-router/transform';\nimport { transformRoutes } from '../../utils/transform';\nimport { logger } from '@vlian/logger';\n\n/**\n * React Router 适配器\n */\nexport class ReactRouterAdapter implements IRouterAdapter {\n readonly name = 'react-router';\n readonly version = '6.0.0';\n\n private router: ReturnType<typeof createBrowserRouter> | null = null;\n\n /**\n * 初始化适配器\n */\n async initialize(config: RouterAdapterConfig): Promise<void> {\n\n // 转换路由配置\n const transformResult = await transformRoutes(config.routes);\n const reactRoutes = await transformRoutesToReactRoutes(\n transformResult.routes,\n transformResult,\n config.defaultRouteErrorComponent,\n config.defaultRouteLoadingComponent,\n Boolean((config.options as { hydrationData?: unknown } | undefined)?.hydrationData),\n );\n\n // 创建路由实例\n const mode = config.mode || 'browser';\n if (mode === 'browser') {\n this.router = createBrowserRouter(reactRoutes, config.options as any);\n } else if (mode === 'hash') {\n this.router = createHashRouter(reactRoutes, config.options as any);\n } else if (mode === 'memory') {\n this.router = createMemoryRouter(reactRoutes, config.options as any);\n } else {\n throw new Error(`不支持的路由模式: ${mode}`);\n }\n\n logger.debug('React Router 适配器初始化完成');\n }\n\n /**\n * 挂载到应用实例\n */\n mount(_app: AppInstance): void {\n if (!this.router) {\n throw new Error('适配器未初始化');\n }\n\n // React Router 适配器通过 RouterProvider 挂载\n // 实际的挂载逻辑在 renderApp 中处理\n logger.debug('React Router 适配器已挂载');\n }\n\n /**\n * 导航到指定路径\n */\n navigate(to: string, options?: NavigateOptions): void {\n if (!this.router) {\n throw new Error('适配器未初始化');\n }\n\n if (options?.replace) {\n this.router.navigate(to, { replace: true, state: options.state });\n } else {\n this.router.navigate(to, { state: options?.state });\n }\n }\n\n /**\n * 获取当前路由信息\n */\n getCurrentRoute(): RouteLocation {\n if (!this.router) {\n throw new Error('适配器未初始化');\n }\n\n const state = this.router.state;\n const location = state.location;\n\n // 解析查询参数\n const query: Record<string, unknown> = {};\n if (location.search) {\n const params = new URLSearchParams(location.search);\n params.forEach((value, key) => {\n query[key] = value;\n });\n }\n\n return {\n path: location.pathname + location.hash,\n query,\n params: location.state as Record<string, unknown> | undefined,\n };\n }\n\n /**\n * 获取路由实例(用于 RouterProvider)\n */\n getRouter(): ReturnType<typeof createBrowserRouter> | null {\n return this.router;\n }\n\n /**\n * 销毁适配器\n */\n destroy(): void {\n this.router = null;\n logger.debug('React Router 适配器已销毁');\n }\n}\n\n/**\n * 创建 React Router 适配器工厂函数\n */\nexport function createReactRouterAdapter(): (_config: RouterAdapterConfig) => IRouterAdapter {\n return (_config: RouterAdapterConfig) => {\n return new ReactRouterAdapter();\n };\n}\n"],"names":["createBrowserRouter","createHashRouter","createMemoryRouter","transformRoutesToReactRoutes","transformRoutes","logger","ReactRouterAdapter","initialize","config","transformResult","routes","reactRoutes","defaultRouteErrorComponent","defaultRouteLoadingComponent","Boolean","options","hydrationData","mode","router","Error","debug","mount","_app","navigate","to","replace","state","getCurrentRoute","location","query","search","params","URLSearchParams","forEach","value","key","path","pathname","hash","getRouter","destroy","name","version","createReactRouterAdapter","_config"],"mappings":"AAAA;;CAEC;;;;;;;;;;;;;AAKD,SAASA,mBAAmB,EAAEC,gBAAgB,EAAEC,kBAAkB,QAAQ,mBAAmB;AAC7F,SAASC,4BAA4B,QAAQ,8CAA8C;AAC3F,SAASC,eAAe,QAAQ,wBAAwB;AACxD,SAASC,MAAM,QAAQ,gBAAgB;AAEvC;;CAEC,GACD,OAAO,MAAMC;IAMX;;GAEC,GACD,MAAMC,WAAWC,MAA2B,EAAiB;QAE3D,SAAS;QACT,MAAMC,kBAAkB,MAAML,gBAAgBI,OAAOE,MAAM;QAC3D,MAAMC,cAAc,MAAMR,6BACxBM,gBAAgBC,MAAM,EACtBD,iBACAD,OAAOI,0BAA0B,EACjCJ,OAAOK,4BAA4B,EACnCC,QAASN,OAAOO,OAAO,EAA8CC;QAGvE,SAAS;QACT,MAAMC,OAAOT,OAAOS,IAAI,IAAI;QAC5B,IAAIA,SAAS,WAAW;YACtB,IAAI,CAACC,MAAM,GAAGlB,oBAAoBW,aAAaH,OAAOO,OAAO;QAC/D,OAAO,IAAIE,SAAS,QAAQ;YAC1B,IAAI,CAACC,MAAM,GAAGjB,iBAAiBU,aAAaH,OAAOO,OAAO;QAC5D,OAAO,IAAIE,SAAS,UAAU;YAC5B,IAAI,CAACC,MAAM,GAAGhB,mBAAmBS,aAAaH,OAAOO,OAAO;QAC9D,OAAO;YACL,MAAM,IAAII,MAAM,CAAC,UAAU,EAAEF,MAAM;QACrC;QAEAZ,OAAOe,KAAK,CAAC;IACf;IAEA;;GAEC,GACDC,MAAMC,IAAiB,EAAQ;QAC7B,IAAI,CAAC,IAAI,CAACJ,MAAM,EAAE;YAChB,MAAM,IAAIC,MAAM;QAClB;QAEA,uCAAuC;QACvC,yBAAyB;QACzBd,OAAOe,KAAK,CAAC;IACf;IAEA;;GAEC,GACDG,SAASC,EAAU,EAAET,OAAyB,EAAQ;QACpD,IAAI,CAAC,IAAI,CAACG,MAAM,EAAE;YAChB,MAAM,IAAIC,MAAM;QAClB;QAEA,IAAIJ,SAASU,SAAS;YACpB,IAAI,CAACP,MAAM,CAACK,QAAQ,CAACC,IAAI;gBAAEC,SAAS;gBAAMC,OAAOX,QAAQW,KAAK;YAAC;QACjE,OAAO;YACL,IAAI,CAACR,MAAM,CAACK,QAAQ,CAACC,IAAI;gBAAEE,OAAOX,SAASW;YAAM;QACnD;IACF;IAEA;;GAEC,GACDC,kBAAiC;QAC/B,IAAI,CAAC,IAAI,CAACT,MAAM,EAAE;YAChB,MAAM,IAAIC,MAAM;QAClB;QAEA,MAAMO,QAAQ,IAAI,CAACR,MAAM,CAACQ,KAAK;QAC/B,MAAME,WAAWF,MAAME,QAAQ;QAE/B,SAAS;QACT,MAAMC,QAAiC,CAAC;QACxC,IAAID,SAASE,MAAM,EAAE;YACnB,MAAMC,SAAS,IAAIC,gBAAgBJ,SAASE,MAAM;YAClDC,OAAOE,OAAO,CAAC,CAACC,OAAOC;gBACrBN,KAAK,CAACM,IAAI,GAAGD;YACf;QACF;QAEA,OAAO;YACLE,MAAMR,SAASS,QAAQ,GAAGT,SAASU,IAAI;YACvCT;YACAE,QAAQH,SAASF,KAAK;QACxB;IACF;IAEA;;GAEC,GACDa,YAA2D;QACzD,OAAO,IAAI,CAACrB,MAAM;IACpB;IAEA;;GAEC,GACDsB,UAAgB;QACd,IAAI,CAACtB,MAAM,GAAG;QACdb,OAAOe,KAAK,CAAC;IACf;;QAvGA,uBAASqB,QAAO;QAChB,uBAASC,WAAU;QAEnB,uBAAQxB,UAAwD;;AAqGlE;AAEA;;CAEC,GACD,OAAO,SAASyB;IACd,OAAO,CAACC;QACN,OAAO,IAAItC;IACb;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/core/router/adapter/react-router/index.ts"],"sourcesContent":["/**\n * React Router 适配器模块入口\n */\n\nexport * from './ReactRouterAdapter';\n"],"names":[],"mappings":"AAAA;;CAEC;;;;qBAEa"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/core/router/adapter/react-router/index.ts"],"sourcesContent":["/**\n * React Router 适配器模块入口\n */\n\nexport * from './ReactRouterAdapter';\n"],"names":[],"mappings":"AAAA;;CAEC,GAED,cAAc,uBAAuB"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/adapter/types.ts"],"sourcesContent":["/**\n * 路由适配器类型定义\n */\n\nimport type { RouteConfig, RouteLocation, NavigateOptions } from '../types';\nimport type { AppInstance } from '../../startup/AppInstance';\n\n/**\n * 路由适配器接口\n * 所有路由库适配器都必须实现此接口\n */\nexport interface IRouterAdapter {\n /**\n * 适配器名称\n */\n readonly name: string;\n\n /**\n * 适配器版本\n */\n readonly version?: string;\n\n /**\n * 初始化适配器\n * \n * @param config - 路由配置\n * @returns Promise<void>\n */\n initialize(config: RouterAdapterConfig): Promise<void>;\n\n /**\n * 挂载到应用实例\n * \n * @param app - 应用实例\n */\n mount(app: AppInstance): void;\n\n /**\n * 导航到指定路径\n * \n * @param to - 目标路径或路由名称\n * @param options - 导航选项\n */\n navigate(to: string, options?: NavigateOptions): void | Promise<void>;\n\n /**\n * 获取当前路由信息\n * \n * @returns 当前路由位置信息\n */\n getCurrentRoute(): RouteLocation;\n\n /**\n * 销毁适配器\n */\n destroy?(): void;\n}\n\n/**\n * 路由适配器配置\n */\nexport interface RouterAdapterConfig {\n /**\n * 路由配置列表\n */\n routes: RouteConfig[];\n\n /**\n * 路由模式\n */\n mode?: 'browser' | 'hash' | 'memory';\n\n /**\n * 适配器特定选项\n */\n options?: Record<string, unknown>;\n\n /**\n * 默认路由错误组件\n * \n * 当路由配置中的 `errors` 为空时,将使用此组件作为错误边界。\n * 如果不提供,将使用框架内置的 `RouteErrorBoundary` 组件。\n * \n * 组件必须使用默认导出(export default)。\n */\n defaultRouteErrorComponent?: import('../types').ComponentImport;\n\n /**\n * 默认路由加载组件\n * \n * 当路由配置中的 `loading` 为空时,将使用此组件作为加载指示器。\n * 如果不提供,将使用框架内置 Loading 组件。\n * \n * 组件必须使用默认导出(export default)。\n */\n defaultRouteLoadingComponent?: import('../types').ComponentImport;\n}\n\n/**\n * 路由适配器工厂函数\n */\nexport type RouterAdapterFactory = (config: RouterAdapterConfig) => IRouterAdapter | Promise<IRouterAdapter>;\n\n/**\n * 适配器注册信息\n */\nexport interface AdapterRegistration {\n /**\n * 适配器名称\n */\n name: string;\n\n /**\n * 适配器工厂函数\n */\n factory: RouterAdapterFactory;\n\n /**\n * 适配器优先级(数字越小优先级越高)\n * @default 100\n */\n priority?: number;\n\n /**\n * 是否启用\n * @default true\n */\n enabled?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;CAEC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/adapter/types.ts"],"sourcesContent":["/**\n * 路由适配器类型定义\n */\n\nimport type { RouteConfig, RouteLocation, NavigateOptions } from '../types';\nimport type { AppInstance } from '../../startup/AppInstance';\n\n/**\n * 路由适配器接口\n * 所有路由库适配器都必须实现此接口\n */\nexport interface IRouterAdapter {\n /**\n * 适配器名称\n */\n readonly name: string;\n\n /**\n * 适配器版本\n */\n readonly version?: string;\n\n /**\n * 初始化适配器\n * \n * @param config - 路由配置\n * @returns Promise<void>\n */\n initialize(config: RouterAdapterConfig): Promise<void>;\n\n /**\n * 挂载到应用实例\n * \n * @param app - 应用实例\n */\n mount(app: AppInstance): void;\n\n /**\n * 导航到指定路径\n * \n * @param to - 目标路径或路由名称\n * @param options - 导航选项\n */\n navigate(to: string, options?: NavigateOptions): void | Promise<void>;\n\n /**\n * 获取当前路由信息\n * \n * @returns 当前路由位置信息\n */\n getCurrentRoute(): RouteLocation;\n\n /**\n * 销毁适配器\n */\n destroy?(): void;\n}\n\n/**\n * 路由适配器配置\n */\nexport interface RouterAdapterConfig {\n /**\n * 路由配置列表\n */\n routes: RouteConfig[];\n\n /**\n * 路由模式\n */\n mode?: 'browser' | 'hash' | 'memory';\n\n /**\n * 适配器特定选项\n */\n options?: Record<string, unknown>;\n\n /**\n * 默认路由错误组件\n * \n * 当路由配置中的 `errors` 为空时,将使用此组件作为错误边界。\n * 如果不提供,将使用框架内置的 `RouteErrorBoundary` 组件。\n * \n * 组件必须使用默认导出(export default)。\n */\n defaultRouteErrorComponent?: import('../types').ComponentImport;\n\n /**\n * 默认路由加载组件\n * \n * 当路由配置中的 `loading` 为空时,将使用此组件作为加载指示器。\n * 如果不提供,将使用框架内置 Loading 组件。\n * \n * 组件必须使用默认导出(export default)。\n */\n defaultRouteLoadingComponent?: import('../types').ComponentImport;\n}\n\n/**\n * 路由适配器工厂函数\n */\nexport type RouterAdapterFactory = (config: RouterAdapterConfig) => IRouterAdapter | Promise<IRouterAdapter>;\n\n/**\n * 适配器注册信息\n */\nexport interface AdapterRegistration {\n /**\n * 适配器名称\n */\n name: string;\n\n /**\n * 适配器工厂函数\n */\n factory: RouterAdapterFactory;\n\n /**\n * 适配器优先级(数字越小优先级越高)\n * @default 100\n */\n priority?: number;\n\n /**\n * 是否启用\n * @default true\n */\n enabled?: boolean;\n}\n"],"names":[],"mappings":"AAAA;;CAEC,GAqGD;;CAEC,GACD,WAsBC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/dev/RouterDevTools.tsx"],"sourcesContent":["/**\n * 路由调试工具(开发环境,无 UI 框架依赖)\n */\n\nimport React, { useState, useEffect } from 'react';\nimport { getRouterManager } from '../RouterManager';\nimport { getRouterLifecycleManager } from '../lifecycle';\nimport { getRouterMiddlewareManager } from '../middleware';\nimport { RouterNavigation } from '../navigation';\nimport type { RouteLocation } from '../types';\n\nfunction pretty(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nexport function RouterDevTools(): React.ReactElement | null {\n if (process.env.NODE_ENV !== 'development') {\n return null;\n }\n\n const [visible, setVisible] = useState(false);\n const [currentRoute, setCurrentRoute] = useState<RouteLocation | null>(null);\n const [routeState, setRouteState] = useState<Record<string, unknown>>({});\n const [lifecycleHooks, setLifecycleHooks] = useState<\n Array<{ key: number; hasBeforeEach: boolean; hasAfterEach: boolean }>\n >([]);\n const [middlewares, setMiddlewares] = useState<\n Array<{ key: number; name: string; priority: number; enabled: boolean }>\n >([]);\n\n const updateRouteInfo = () => {\n try {\n const route = RouterNavigation.getCurrentRoute();\n setCurrentRoute(route);\n\n const router = getRouterManager().getRouter();\n if (router) {\n const state = router.state;\n setRouteState({\n pathname: state.location.pathname,\n search: state.location.search || '',\n hash: state.location.hash || '',\n state: state.location.state || {},\n });\n } else {\n setRouteState({});\n }\n\n const hooks = getRouterLifecycleManager().getAll();\n setLifecycleHooks(hooks.map((hook, index) => ({\n key: index,\n hasBeforeEach: !!hook.beforeEach,\n hasAfterEach: !!hook.afterEach,\n })));\n\n const middlewareList = getRouterMiddlewareManager().getAll();\n setMiddlewares(middlewareList.map((m, index) => ({\n key: index,\n name: m.name || `middleware-${index}`,\n priority: m.priority || 100,\n enabled: m.enabled !== false,\n })));\n } catch (error) {\n console.error('更新路由信息失败', error);\n }\n };\n\n useEffect(() => {\n if (!visible) {\n return;\n }\n updateRouteInfo();\n const timer = setInterval(updateRouteInfo, 1000);\n return () => clearInterval(timer);\n }, [visible]);\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setVisible(true)}\n style={{\n position: 'fixed',\n right: 20,\n bottom: 20,\n zIndex: 9999,\n border: 'none',\n background: '#2f80ed',\n color: '#fff',\n borderRadius: 999,\n padding: '8px 12px',\n cursor: 'pointer',\n }}\n >\n 路由调试\n </button>\n\n {visible && (\n <div\n style={{\n position: 'fixed',\n top: 0,\n right: 0,\n width: 'min(800px, 96vw)',\n height: '100vh',\n zIndex: 10000,\n background: '#fff',\n borderLeft: '1px solid #d9e2ec',\n boxShadow: '-8px 0 20px rgba(0, 0, 0, 0.08)',\n padding: 16,\n overflowY: 'auto',\n }}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <h3 style={{ margin: 0 }}>路由调试工具</h3>\n <div style={{ display: 'flex', gap: 8 }}>\n <button onClick={updateRouteInfo}>刷新</button>\n <button onClick={() => setVisible(false)}>关闭</button>\n </div>\n </div>\n\n <section style={{ marginTop: 12 }}>\n <h4>当前路由</h4>\n <pre style={{ background: '#f7fafc', borderRadius: 8, padding: 12 }}>\n {pretty(currentRoute || {})}\n </pre>\n </section>\n\n <section style={{ marginTop: 12 }}>\n <h4>路由状态</h4>\n <pre style={{ background: '#f7fafc', borderRadius: 8, padding: 12 }}>\n {pretty(routeState)}\n </pre>\n </section>\n\n <section style={{ marginTop: 12 }}>\n <h4>生命周期钩子</h4>\n <pre style={{ background: '#f7fafc', borderRadius: 8, padding: 12 }}>\n {pretty(lifecycleHooks)}\n </pre>\n </section>\n\n <section style={{ marginTop: 12 }}>\n <h4>中间件</h4>\n <pre style={{ background: '#f7fafc', borderRadius: 8, padding: 12 }}>\n {pretty(middlewares)}\n </pre>\n </section>\n </div>\n )}\n </>\n );\n}\n"],"names":["RouterDevTools","pretty","value","JSON","stringify","String","process","env","NODE_ENV","visible","setVisible","useState","currentRoute","setCurrentRoute","routeState","setRouteState","lifecycleHooks","setLifecycleHooks","middlewares","setMiddlewares","updateRouteInfo","route","RouterNavigation","getCurrentRoute","router","getRouterManager","getRouter","state","pathname","location","search","hash","hooks","getRouterLifecycleManager","getAll","map","hook","index","key","hasBeforeEach","beforeEach","hasAfterEach","afterEach","middlewareList","getRouterMiddlewareManager","m","name","priority","enabled","error","console","useEffect","timer","setInterval","clearInterval","button","type","onClick","style","position","right","bottom","zIndex","border","background","color","borderRadius","padding","cursor","div","top","width","height","borderLeft","boxShadow","overflowY","display","justifyContent","alignItems","h3","margin","gap","section","marginTop","h4","pre"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/dev/RouterDevTools.tsx"],"sourcesContent":["/**\n * 路由调试工具(开发环境,无 UI 框架依赖)\n */\n\nimport React, { useState, useEffect } from 'react';\nimport { getRouterManager } from '../RouterManager';\nimport { getRouterLifecycleManager } from '../lifecycle';\nimport { getRouterMiddlewareManager } from '../middleware';\nimport { RouterNavigation } from '../navigation';\nimport type { RouteLocation } from '../types';\n\nfunction pretty(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nexport function RouterDevTools(): React.ReactElement | null {\n if (process.env.NODE_ENV !== 'development') {\n return null;\n }\n\n const [visible, setVisible] = useState(false);\n const [currentRoute, setCurrentRoute] = useState<RouteLocation | null>(null);\n const [routeState, setRouteState] = useState<Record<string, unknown>>({});\n const [lifecycleHooks, setLifecycleHooks] = useState<\n Array<{ key: number; hasBeforeEach: boolean; hasAfterEach: boolean }>\n >([]);\n const [middlewares, setMiddlewares] = useState<\n Array<{ key: number; name: string; priority: number; enabled: boolean }>\n >([]);\n\n const updateRouteInfo = () => {\n try {\n const route = RouterNavigation.getCurrentRoute();\n setCurrentRoute(route);\n\n const router = getRouterManager().getRouter();\n if (router) {\n const state = router.state;\n setRouteState({\n pathname: state.location.pathname,\n search: state.location.search || '',\n hash: state.location.hash || '',\n state: state.location.state || {},\n });\n } else {\n setRouteState({});\n }\n\n const hooks = getRouterLifecycleManager().getAll();\n setLifecycleHooks(hooks.map((hook, index) => ({\n key: index,\n hasBeforeEach: !!hook.beforeEach,\n hasAfterEach: !!hook.afterEach,\n })));\n\n const middlewareList = getRouterMiddlewareManager().getAll();\n setMiddlewares(middlewareList.map((m, index) => ({\n key: index,\n name: m.name || `middleware-${index}`,\n priority: m.priority || 100,\n enabled: m.enabled !== false,\n })));\n } catch (error) {\n console.error('更新路由信息失败', error);\n }\n };\n\n useEffect(() => {\n if (!visible) {\n return;\n }\n updateRouteInfo();\n const timer = setInterval(updateRouteInfo, 1000);\n return () => clearInterval(timer);\n }, [visible]);\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setVisible(true)}\n style={{\n position: 'fixed',\n right: 20,\n bottom: 20,\n zIndex: 9999,\n border: 'none',\n background: '#2f80ed',\n color: '#fff',\n borderRadius: 999,\n padding: '8px 12px',\n cursor: 'pointer',\n }}\n >\n 路由调试\n </button>\n\n {visible && (\n <div\n style={{\n position: 'fixed',\n top: 0,\n right: 0,\n width: 'min(800px, 96vw)',\n height: '100vh',\n zIndex: 10000,\n background: '#fff',\n borderLeft: '1px solid #d9e2ec',\n boxShadow: '-8px 0 20px rgba(0, 0, 0, 0.08)',\n padding: 16,\n overflowY: 'auto',\n }}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <h3 style={{ margin: 0 }}>路由调试工具</h3>\n <div style={{ display: 'flex', gap: 8 }}>\n <button onClick={updateRouteInfo}>刷新</button>\n <button onClick={() => setVisible(false)}>关闭</button>\n </div>\n </div>\n\n <section style={{ marginTop: 12 }}>\n <h4>当前路由</h4>\n <pre style={{ background: '#f7fafc', borderRadius: 8, padding: 12 }}>\n {pretty(currentRoute || {})}\n </pre>\n </section>\n\n <section style={{ marginTop: 12 }}>\n <h4>路由状态</h4>\n <pre style={{ background: '#f7fafc', borderRadius: 8, padding: 12 }}>\n {pretty(routeState)}\n </pre>\n </section>\n\n <section style={{ marginTop: 12 }}>\n <h4>生命周期钩子</h4>\n <pre style={{ background: '#f7fafc', borderRadius: 8, padding: 12 }}>\n {pretty(lifecycleHooks)}\n </pre>\n </section>\n\n <section style={{ marginTop: 12 }}>\n <h4>中间件</h4>\n <pre style={{ background: '#f7fafc', borderRadius: 8, padding: 12 }}>\n {pretty(middlewares)}\n </pre>\n </section>\n </div>\n )}\n </>\n );\n}\n"],"names":["React","useState","useEffect","getRouterManager","getRouterLifecycleManager","getRouterMiddlewareManager","RouterNavigation","pretty","value","JSON","stringify","String","RouterDevTools","process","env","NODE_ENV","visible","setVisible","currentRoute","setCurrentRoute","routeState","setRouteState","lifecycleHooks","setLifecycleHooks","middlewares","setMiddlewares","updateRouteInfo","route","getCurrentRoute","router","getRouter","state","pathname","location","search","hash","hooks","getAll","map","hook","index","key","hasBeforeEach","beforeEach","hasAfterEach","afterEach","middlewareList","m","name","priority","enabled","error","console","timer","setInterval","clearInterval","button","type","onClick","style","position","right","bottom","zIndex","border","background","color","borderRadius","padding","cursor","div","top","width","height","borderLeft","boxShadow","overflowY","display","justifyContent","alignItems","h3","margin","gap","section","marginTop","h4","pre"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/dev/index.ts"],"sourcesContent":["/**\n * 路由开发工具模块入口\n */\n\nexport * from './RouterDevTools';\n"],"names":[],"mappings":"AAAA;;CAEC;;;;qBAEa"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/dev/index.ts"],"sourcesContent":["/**\n * 路由开发工具模块入口\n */\n\nexport * from './RouterDevTools';\n"],"names":[],"mappings":"AAAA;;CAEC,GAED,cAAc,mBAAmB"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/dynamic/DynamicRouteManager.ts"],"sourcesContent":["/**\n * 路由动态注册管理器\n * 支持运行时动态注册和卸载路由\n */\n\nimport { logger } from '@vlian/logger';\nimport type { RouteConfig } from '../types';\nimport { getRouterManager } from '../RouterManager';\nimport { transformRoutes } from '../utils/transform';\nimport { RouterError, RouterErrorCode } from '../errors';\n\n/**\n * 动态路由注册管理器\n */\nexport class DynamicRouteManager {\n private registeredRoutes: Map<string, RouteConfig[]> = new Map();\n private routeVersion: number = 0;\n\n /**\n * 注册路由\n * \n * @param routes - 要注册的路由配置\n * @param namespace - 路由命名空间(可选,用于分组管理)\n * @returns 取消注册函数\n */\n async register(\n routes: RouteConfig[],\n namespace?: string\n ): Promise<() => Promise<void>> {\n const ns = namespace || 'default';\n\n // 验证路由配置\n if (!Array.isArray(routes) || routes.length === 0) {\n throw new RouterError(\n '路由配置必须是非空数组',\n RouterErrorCode.ROUTER_CONFIG_ERROR\n );\n }\n\n // 检查路由名称是否冲突\n const existingRoutes = this.registeredRoutes.get(ns) || [];\n const existingNames = new Set(existingRoutes.map((r) => r.name));\n const newNames = routes.map((r) => r.name);\n const conflicts = newNames.filter((name) => existingNames.has(name));\n\n if (conflicts.length > 0) {\n throw new RouterError(\n `路由名称冲突: ${conflicts.join(', ')}`,\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n undefined,\n { conflicts, namespace: ns }\n );\n }\n\n // 添加到注册表\n const currentRoutes = this.registeredRoutes.get(ns) || [];\n this.registeredRoutes.set(ns, [...currentRoutes, ...routes]);\n\n // 更新版本号\n this.routeVersion++;\n\n logger.info(`路由已注册: ${routes.length} 个路由到命名空间 \"${ns}\"`);\n\n // 返回取消注册函数\n return async () => {\n await this.unregister(routes.map((r) => r.name), ns);\n };\n }\n\n /**\n * 取消注册路由\n * \n * @param routeNames - 要取消注册的路由名称数组\n * @param namespace - 路由命名空间(可选)\n */\n async unregister(routeNames: string[], namespace?: string): Promise<void> {\n const ns = namespace || 'default';\n const routes = this.registeredRoutes.get(ns) || [];\n\n // 过滤掉要取消注册的路由\n const filteredRoutes = routes.filter((r) => !routeNames.includes(r.name));\n\n if (filteredRoutes.length === routes.length) {\n logger.warn(`未找到要取消注册的路由: ${routeNames.join(', ')}`);\n return;\n }\n\n // 更新注册表\n if (filteredRoutes.length === 0) {\n this.registeredRoutes.delete(ns);\n } else {\n this.registeredRoutes.set(ns, filteredRoutes);\n }\n\n // 更新版本号\n this.routeVersion++;\n\n logger.info(\n `路由已取消注册: ${routeNames.length} 个路由从命名空间 \"${ns}\"`\n );\n }\n\n /**\n * 获取指定命名空间的路由\n * \n * @param namespace - 路由命名空间(可选)\n * @returns 路由配置数组\n */\n getRoutes(namespace?: string): RouteConfig[] {\n const ns = namespace || 'default';\n return [...(this.registeredRoutes.get(ns) || [])];\n }\n\n /**\n * 获取所有路由\n * \n * @returns 所有命名空间的路由配置\n */\n getAllRoutes(): Map<string, RouteConfig[]> {\n return new Map(this.registeredRoutes);\n }\n\n /**\n * 清空指定命名空间的路由\n * \n * @param namespace - 路由命名空间(可选)\n */\n clear(namespace?: string): void {\n const ns = namespace || 'default';\n this.registeredRoutes.delete(ns);\n this.routeVersion++;\n logger.info(`路由命名空间已清空: \"${ns}\"`);\n }\n\n /**\n * 清空所有路由\n */\n clearAll(): void {\n this.registeredRoutes.clear();\n this.routeVersion++;\n logger.info('所有路由已清空');\n }\n\n /**\n * 获取路由版本号\n * \n * @returns 路由版本号\n */\n getVersion(): number {\n return this.routeVersion;\n }\n\n /**\n * 检查路由是否已注册\n * \n * @param routeName - 路由名称\n * @param namespace - 路由命名空间(可选)\n * @returns 如果已注册返回 true,否则返回 false\n */\n isRegistered(routeName: string, namespace?: string): boolean {\n const ns = namespace || 'default';\n const routes = this.registeredRoutes.get(ns) || [];\n return routes.some((r) => r.name === routeName);\n }\n\n /**\n * 重新加载路由\n * \n * 注意:此方法会重新初始化路由管理器,需要谨慎使用\n */\n async reload(): Promise<void> {\n const routerManager = getRouterManager();\n if (!routerManager.isInitialized()) {\n throw new RouterError(\n '路由管理器未初始化',\n RouterErrorCode.ROUTER_NOT_INITIALIZED\n );\n }\n\n // 获取所有路由\n const allRoutes: RouteConfig[] = [];\n this.registeredRoutes.forEach((routes) => {\n allRoutes.push(...routes);\n });\n\n if (allRoutes.length === 0) {\n logger.warn('没有已注册的路由,无法重新加载');\n return;\n }\n\n // 转换路由\n await transformRoutes(allRoutes);\n // const reactRoutes = await transformRoutesToReactRoutes(result.routes, result);\n\n // 重新创建路由实例\n // 注意:这里需要获取原始配置的模式和选项\n // 由于当前架构限制,这里只是示例实现\n logger.info('路由重新加载完成');\n }\n}\n\n/**\n * 获取动态路由管理器单例\n */\nlet dynamicRouteManagerInstance: DynamicRouteManager | null = null;\n\nexport function getDynamicRouteManager(): DynamicRouteManager {\n if (!dynamicRouteManagerInstance) {\n dynamicRouteManagerInstance = new DynamicRouteManager();\n }\n return dynamicRouteManagerInstance;\n}\n"],"names":["DynamicRouteManager","getDynamicRouteManager","register","routes","namespace","ns","Array","isArray","length","RouterError","RouterErrorCode","ROUTER_CONFIG_ERROR","existingRoutes","registeredRoutes","get","existingNames","Set","map","r","name","newNames","conflicts","filter","has","join","undefined","currentRoutes","set","routeVersion","logger","info","unregister","routeNames","filteredRoutes","includes","warn","delete","getRoutes","getAllRoutes","Map","clear","clearAll","getVersion","isRegistered","routeName","some","reload","routerManager","getRouterManager","isInitialized","ROUTER_NOT_INITIALIZED","allRoutes","forEach","push","transformRoutes","dynamicRouteManagerInstance"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/dynamic/DynamicRouteManager.ts"],"sourcesContent":["/**\n * 路由动态注册管理器\n * 支持运行时动态注册和卸载路由\n */\n\nimport { logger } from '@vlian/logger';\nimport type { RouteConfig } from '../types';\nimport { getRouterManager } from '../RouterManager';\nimport { transformRoutes } from '../utils/transform';\nimport { RouterError, RouterErrorCode } from '../errors';\n\n/**\n * 动态路由注册管理器\n */\nexport class DynamicRouteManager {\n private registeredRoutes: Map<string, RouteConfig[]> = new Map();\n private routeVersion: number = 0;\n\n /**\n * 注册路由\n * \n * @param routes - 要注册的路由配置\n * @param namespace - 路由命名空间(可选,用于分组管理)\n * @returns 取消注册函数\n */\n async register(\n routes: RouteConfig[],\n namespace?: string\n ): Promise<() => Promise<void>> {\n const ns = namespace || 'default';\n\n // 验证路由配置\n if (!Array.isArray(routes) || routes.length === 0) {\n throw new RouterError(\n '路由配置必须是非空数组',\n RouterErrorCode.ROUTER_CONFIG_ERROR\n );\n }\n\n // 检查路由名称是否冲突\n const existingRoutes = this.registeredRoutes.get(ns) || [];\n const existingNames = new Set(existingRoutes.map((r) => r.name));\n const newNames = routes.map((r) => r.name);\n const conflicts = newNames.filter((name) => existingNames.has(name));\n\n if (conflicts.length > 0) {\n throw new RouterError(\n `路由名称冲突: ${conflicts.join(', ')}`,\n RouterErrorCode.ROUTER_CONFIG_ERROR,\n undefined,\n undefined,\n { conflicts, namespace: ns }\n );\n }\n\n // 添加到注册表\n const currentRoutes = this.registeredRoutes.get(ns) || [];\n this.registeredRoutes.set(ns, [...currentRoutes, ...routes]);\n\n // 更新版本号\n this.routeVersion++;\n\n logger.info(`路由已注册: ${routes.length} 个路由到命名空间 \"${ns}\"`);\n\n // 返回取消注册函数\n return async () => {\n await this.unregister(routes.map((r) => r.name), ns);\n };\n }\n\n /**\n * 取消注册路由\n * \n * @param routeNames - 要取消注册的路由名称数组\n * @param namespace - 路由命名空间(可选)\n */\n async unregister(routeNames: string[], namespace?: string): Promise<void> {\n const ns = namespace || 'default';\n const routes = this.registeredRoutes.get(ns) || [];\n\n // 过滤掉要取消注册的路由\n const filteredRoutes = routes.filter((r) => !routeNames.includes(r.name));\n\n if (filteredRoutes.length === routes.length) {\n logger.warn(`未找到要取消注册的路由: ${routeNames.join(', ')}`);\n return;\n }\n\n // 更新注册表\n if (filteredRoutes.length === 0) {\n this.registeredRoutes.delete(ns);\n } else {\n this.registeredRoutes.set(ns, filteredRoutes);\n }\n\n // 更新版本号\n this.routeVersion++;\n\n logger.info(\n `路由已取消注册: ${routeNames.length} 个路由从命名空间 \"${ns}\"`\n );\n }\n\n /**\n * 获取指定命名空间的路由\n * \n * @param namespace - 路由命名空间(可选)\n * @returns 路由配置数组\n */\n getRoutes(namespace?: string): RouteConfig[] {\n const ns = namespace || 'default';\n return [...(this.registeredRoutes.get(ns) || [])];\n }\n\n /**\n * 获取所有路由\n * \n * @returns 所有命名空间的路由配置\n */\n getAllRoutes(): Map<string, RouteConfig[]> {\n return new Map(this.registeredRoutes);\n }\n\n /**\n * 清空指定命名空间的路由\n * \n * @param namespace - 路由命名空间(可选)\n */\n clear(namespace?: string): void {\n const ns = namespace || 'default';\n this.registeredRoutes.delete(ns);\n this.routeVersion++;\n logger.info(`路由命名空间已清空: \"${ns}\"`);\n }\n\n /**\n * 清空所有路由\n */\n clearAll(): void {\n this.registeredRoutes.clear();\n this.routeVersion++;\n logger.info('所有路由已清空');\n }\n\n /**\n * 获取路由版本号\n * \n * @returns 路由版本号\n */\n getVersion(): number {\n return this.routeVersion;\n }\n\n /**\n * 检查路由是否已注册\n * \n * @param routeName - 路由名称\n * @param namespace - 路由命名空间(可选)\n * @returns 如果已注册返回 true,否则返回 false\n */\n isRegistered(routeName: string, namespace?: string): boolean {\n const ns = namespace || 'default';\n const routes = this.registeredRoutes.get(ns) || [];\n return routes.some((r) => r.name === routeName);\n }\n\n /**\n * 重新加载路由\n * \n * 注意:此方法会重新初始化路由管理器,需要谨慎使用\n */\n async reload(): Promise<void> {\n const routerManager = getRouterManager();\n if (!routerManager.isInitialized()) {\n throw new RouterError(\n '路由管理器未初始化',\n RouterErrorCode.ROUTER_NOT_INITIALIZED\n );\n }\n\n // 获取所有路由\n const allRoutes: RouteConfig[] = [];\n this.registeredRoutes.forEach((routes) => {\n allRoutes.push(...routes);\n });\n\n if (allRoutes.length === 0) {\n logger.warn('没有已注册的路由,无法重新加载');\n return;\n }\n\n // 转换路由\n await transformRoutes(allRoutes);\n // const reactRoutes = await transformRoutesToReactRoutes(result.routes, result);\n\n // 重新创建路由实例\n // 注意:这里需要获取原始配置的模式和选项\n // 由于当前架构限制,这里只是示例实现\n logger.info('路由重新加载完成');\n }\n}\n\n/**\n * 获取动态路由管理器单例\n */\nlet dynamicRouteManagerInstance: DynamicRouteManager | null = null;\n\nexport function getDynamicRouteManager(): DynamicRouteManager {\n if (!dynamicRouteManagerInstance) {\n dynamicRouteManagerInstance = new DynamicRouteManager();\n }\n return dynamicRouteManagerInstance;\n}\n"],"names":["logger","getRouterManager","transformRoutes","RouterError","RouterErrorCode","DynamicRouteManager","register","routes","namespace","ns","Array","isArray","length","ROUTER_CONFIG_ERROR","existingRoutes","registeredRoutes","get","existingNames","Set","map","r","name","newNames","conflicts","filter","has","join","undefined","currentRoutes","set","routeVersion","info","unregister","routeNames","filteredRoutes","includes","warn","delete","getRoutes","getAllRoutes","Map","clear","clearAll","getVersion","isRegistered","routeName","some","reload","routerManager","isInitialized","ROUTER_NOT_INITIALIZED","allRoutes","forEach","push","dynamicRouteManagerInstance","getDynamicRouteManager"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/dynamic/index.ts"],"sourcesContent":["/**\n * 路由动态注册模块入口\n */\n\nexport * from './DynamicRouteManager';\n"],"names":[],"mappings":"AAAA;;CAEC;;;;qBAEa"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/dynamic/index.ts"],"sourcesContent":["/**\n * 路由动态注册模块入口\n */\n\nexport * from './DynamicRouteManager';\n"],"names":[],"mappings":"AAAA;;CAEC,GAED,cAAc,wBAAwB"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/errors/RouterError.ts"],"sourcesContent":["/**\n * 路由错误类型定义\n */\n\nimport { FrameworkError, ErrorSeverity, ErrorType } from '../../../utils/errors';\nimport type { ErrorSeverity as ErrorSeverityType } from '@vlian/utils';\n\n/**\n * 路由错误代码\n */\nexport enum RouterErrorCode {\n /**\n * 路由未初始化\n */\n ROUTER_NOT_INITIALIZED = 'ROUTER_NOT_INITIALIZED',\n\n /**\n * 路由配置错误\n */\n ROUTER_CONFIG_ERROR = 'ROUTER_CONFIG_ERROR',\n\n /**\n * 路由未找到\n */\n ROUTE_NOT_FOUND = 'ROUTE_NOT_FOUND',\n\n /**\n * 路由导航失败\n */\n ROUTE_NAVIGATION_FAILED = 'ROUTE_NAVIGATION_FAILED',\n\n /**\n * 路由权限不足\n */\n ROUTE_PERMISSION_DENIED = 'ROUTE_PERMISSION_DENIED',\n\n /**\n * 路由组件加载失败\n */\n ROUTE_COMPONENT_LOAD_FAILED = 'ROUTE_COMPONENT_LOAD_FAILED',\n\n /**\n * 路由转换失败\n */\n ROUTE_TRANSFORM_FAILED = 'ROUTE_TRANSFORM_FAILED',\n}\n\n/**\n * 路由错误\n */\nexport class RouterError extends FrameworkError {\n constructor(\n message: string,\n code: RouterErrorCode,\n severity: ErrorSeverityType = ErrorSeverity.MEDIUM,\n cause?: Error,\n context?: Record<string, unknown>\n ) {\n super(message, ErrorType.RUNTIME, severity, {\n code,\n originalError: cause,\n context: context || {},\n });\n this.name = 'RouterError';\n }\n}\n\n/**\n * 创建路由错误\n */\nexport function createRouterError(\n message: string,\n code: RouterErrorCode,\n severity?: ErrorSeverityType,\n cause?: Error,\n context?: Record<string, unknown>\n): RouterError {\n return new RouterError(message, code, severity, cause, context);\n}\n"],"names":["RouterError","RouterErrorCode","createRouterError","FrameworkError","message","code","severity","ErrorSeverity","MEDIUM","cause","context","ErrorType","RUNTIME","originalError","name"],"mappings":"AAAA;;CAEC;;;;;;;;;;;QAgDYA;eAAAA;;QAxCDC;eAAAA;;QA4DIC;eAAAA;;;wBAlEyC;AAMlD,IAAA,AAAKD,yCAAAA;IACV;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;WAjCSA;;AAwCL,IAAA,AAAMD,cAAN,MAAMA,oBAAoBG,sBAAc;IAC7C,YACEC,OAAe,EACfC,IAAqB,EACrBC,WAA8BC,qBAAa,CAACC,MAAM,EAClDC,KAAa,EACbC,OAAiC,CACjC;QACA,KAAK,CAACN,SAASO,iBAAS,CAACC,OAAO,EAAEN,UAAU;YAC1CD;YACAQ,eAAeJ;YACfC,SAASA,WAAW,CAAC;QACvB;QACA,IAAI,CAACI,IAAI,GAAG;IACd;AACF;AAKO,SAASZ,kBACdE,OAAe,EACfC,IAAqB,EACrBC,QAA4B,EAC5BG,KAAa,EACbC,OAAiC;IAEjC,OAAO,IAAIV,YAAYI,SAASC,MAAMC,UAAUG,OAAOC;AACzD"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/errors/RouterError.ts"],"sourcesContent":["/**\n * 路由错误类型定义\n */\n\nimport { FrameworkError, ErrorSeverity, ErrorType } from '../../../utils/errors';\nimport type { ErrorSeverity as ErrorSeverityType } from '@vlian/utils';\n\n/**\n * 路由错误代码\n */\nexport enum RouterErrorCode {\n /**\n * 路由未初始化\n */\n ROUTER_NOT_INITIALIZED = 'ROUTER_NOT_INITIALIZED',\n\n /**\n * 路由配置错误\n */\n ROUTER_CONFIG_ERROR = 'ROUTER_CONFIG_ERROR',\n\n /**\n * 路由未找到\n */\n ROUTE_NOT_FOUND = 'ROUTE_NOT_FOUND',\n\n /**\n * 路由导航失败\n */\n ROUTE_NAVIGATION_FAILED = 'ROUTE_NAVIGATION_FAILED',\n\n /**\n * 路由权限不足\n */\n ROUTE_PERMISSION_DENIED = 'ROUTE_PERMISSION_DENIED',\n\n /**\n * 路由组件加载失败\n */\n ROUTE_COMPONENT_LOAD_FAILED = 'ROUTE_COMPONENT_LOAD_FAILED',\n\n /**\n * 路由转换失败\n */\n ROUTE_TRANSFORM_FAILED = 'ROUTE_TRANSFORM_FAILED',\n}\n\n/**\n * 路由错误\n */\nexport class RouterError extends FrameworkError {\n constructor(\n message: string,\n code: RouterErrorCode,\n severity: ErrorSeverityType = ErrorSeverity.MEDIUM,\n cause?: Error,\n context?: Record<string, unknown>\n ) {\n super(message, ErrorType.RUNTIME, severity, {\n code,\n originalError: cause,\n context: context || {},\n });\n this.name = 'RouterError';\n }\n}\n\n/**\n * 创建路由错误\n */\nexport function createRouterError(\n message: string,\n code: RouterErrorCode,\n severity?: ErrorSeverityType,\n cause?: Error,\n context?: Record<string, unknown>\n): RouterError {\n return new RouterError(message, code, severity, cause, context);\n}\n"],"names":["FrameworkError","ErrorSeverity","ErrorType","RouterErrorCode","RouterError","message","code","severity","MEDIUM","cause","context","RUNTIME","originalError","name","createRouterError"],"mappings":"AAAA;;CAEC,GAED,SAASA,cAAc,EAAEC,aAAa,EAAEC,SAAS,QAAQ,wBAAwB;AAGjF;;CAEC,GACD,OAAO,IAAA,AAAKC,yCAAAA;IACV;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;WAjCSA;MAmCX;AAED;;CAEC,GACD,OAAO,MAAMC,oBAAoBJ;IAC/B,YACEK,OAAe,EACfC,IAAqB,EACrBC,WAA8BN,cAAcO,MAAM,EAClDC,KAAa,EACbC,OAAiC,CACjC;QACA,KAAK,CAACL,SAASH,UAAUS,OAAO,EAAEJ,UAAU;YAC1CD;YACAM,eAAeH;YACfC,SAASA,WAAW,CAAC;QACvB;QACA,IAAI,CAACG,IAAI,GAAG;IACd;AACF;AAEA;;CAEC,GACD,OAAO,SAASC,kBACdT,OAAe,EACfC,IAAqB,EACrBC,QAA4B,EAC5BE,KAAa,EACbC,OAAiC;IAEjC,OAAO,IAAIN,YAAYC,SAASC,MAAMC,UAAUE,OAAOC;AACzD"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/errors/index.ts"],"sourcesContent":["/**\n * 路由错误模块入口\n */\n\nexport * from './RouterError';\n"],"names":[],"mappings":"AAAA;;CAEC;;;;qBAEa"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/errors/index.ts"],"sourcesContent":["/**\n * 路由错误模块入口\n */\n\nexport * from './RouterError';\n"],"names":[],"mappings":"AAAA;;CAEC,GAED,cAAc,gBAAgB"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/router/index.ts"],"sourcesContent":["/**\n * 路由模块入口\n */\n\n// 核心类型和接口\nexport * from './types';\n\n// 路由管理器\nexport * from './RouterManager';\n\n// 中间件系统\nexport * from './middleware';\n\n// 生命周期管理\nexport * from './lifecycle';\n\n// 导航 API\nexport * from './navigation';\n\n// 配置验证\nexport * from './validation';\n\n// 错误处理\nexport * from './errors';\n\n// 动态路由注册\nexport * from './dynamic';\n\n// 性能优化\nexport * from './performance';\n\n// 插件系统\nexport * from './plugin';\n\n// 监控与日志\nexport * from './monitoring';\n\n// 适配器系统\nexport * from './adapter';\n\n// 版本管理\nexport * from './version';\n\n// 开发工具(仅在开发环境导出)\n// 注意:开发工具需要 React 和 Ant Design,仅在开发环境使用\n// 如果需要使用,请直接导入:import { RouterDevTools } from '@vlian/framework/core/router/dev';\n"],"names":[],"mappings":"AAAA;;CAEC,GAED,UAAU;;;;;qBACI;qBAGA;qBAGA;qBAGA;qBAGA;qBAGA;qBAGA;qBAGA;qBAGA;qBAGA;qBAGA;qBAGA;qBAGA;;;;;;;;;;;;;;CAEd,iBAAiB;CACjB,wCAAwC;CACxC,kFAAkF"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/router/index.ts"],"sourcesContent":["/**\n * 路由模块入口\n */\n\n// 核心类型和接口\nexport * from './types';\n\n// 路由管理器\nexport * from './RouterManager';\n\n// 中间件系统\nexport * from './middleware';\n\n// 生命周期管理\nexport * from './lifecycle';\n\n// 导航 API\nexport * from './navigation';\n\n// 配置验证\nexport * from './validation';\n\n// 错误处理\nexport * from './errors';\n\n// 动态路由注册\nexport * from './dynamic';\n\n// 性能优化\nexport * from './performance';\n\n// 插件系统\nexport * from './plugin';\n\n// 监控与日志\nexport * from './monitoring';\n\n// 适配器系统\nexport * from './adapter';\n\n// 版本管理\nexport * from './version';\n\n// 开发工具(仅在开发环境导出)\n// 注意:开发工具需要 React 和 Ant Design,仅在开发环境使用\n// 如果需要使用,请直接导入:import { RouterDevTools } from '@vlian/framework/core/router/dev';\n"],"names":[],"mappings":"AAAA;;CAEC,GAED,UAAU;AACV,cAAc,UAAU;AAExB,QAAQ;AACR,cAAc,kBAAkB;AAEhC,QAAQ;AACR,cAAc,eAAe;AAE7B,SAAS;AACT,cAAc,cAAc;AAE5B,SAAS;AACT,cAAc,eAAe;AAE7B,OAAO;AACP,cAAc,eAAe;AAE7B,OAAO;AACP,cAAc,WAAW;AAEzB,SAAS;AACT,cAAc,YAAY;AAE1B,OAAO;AACP,cAAc,gBAAgB;AAE9B,OAAO;AACP,cAAc,WAAW;AAEzB,QAAQ;AACR,cAAc,eAAe;AAE7B,QAAQ;AACR,cAAc,YAAY;AAE1B,OAAO;AACP,cAAc,YAAY,CAE1B,iBAAiB;CACjB,wCAAwC;CACxC,kFAAkF"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/core/router/lifecycle/RouterLifecycleManager.ts"],"sourcesContent":["/**\n * 路由生命周期管理器\n * 负责管理路由生命周期钩子的注册和执行\n */\n\nimport { logger } from '@vlian/logger';\nimport type { RouteLocation, RouteLifecycleHooks } from '../types';\n\n/**\n * 路由生命周期管理器\n */\nexport class RouterLifecycleManager {\n private hooks: RouteLifecycleHooks[] = [];\n\n /**\n * 注册生命周期钩子\n * \n * @param hooks - 生命周期钩子配置\n * @returns 取消注册函数\n */\n register(hooks: RouteLifecycleHooks): () => void {\n this.hooks.push(hooks);\n logger.debug('路由生命周期钩子已注册');\n\n // 返回取消注册函数\n return () => {\n const index = this.hooks.indexOf(hooks);\n if (index > -1) {\n this.hooks.splice(index, 1);\n logger.debug('路由生命周期钩子已取消注册');\n }\n };\n }\n\n /**\n * 批量注册生命周期钩子\n * \n * @param hooksArray - 生命周期钩子配置数组\n */\n registerBatch(hooksArray: RouteLifecycleHooks[]): void {\n hooksArray.forEach((hooks) => this.register(hooks));\n }\n\n /**\n * 清空所有生命周期钩子\n */\n clear(): void {\n this.hooks = [];\n logger.debug('所有路由生命周期钩子已清空');\n }\n\n /**\n * 执行路由跳转前钩子\n * \n * @param to - 目标路由\n * @param from - 来源路由\n * @returns 如果返回字符串,则跳转到该路径;如果返回 false,则阻止跳转;返回 true 或 undefined 则继续跳转\n */\n async beforeEach(\n to: RouteLocation,\n from?: RouteLocation\n ): Promise<string | false | void> {\n // 按注册顺序执行所有 beforeEach 钩子\n for (const hooks of this.hooks) {\n if (hooks.beforeEach) {\n try {\n const result = await hooks.beforeEach(to, from);\n\n // 如果返回 false,阻止跳转\n if (result === false) {\n logger.debug('路由跳转被阻止: beforeEach 返回 false');\n return false;\n }\n\n // 如果返回字符串,重定向到该路径\n if (typeof result === 'string') {\n logger.debug(`路由跳转重定向: beforeEach 返回 ${result}`);\n return result;\n }\n } catch (error) {\n logger.error('路由生命周期钩子执行失败: beforeEach', error);\n // 钩子执行失败时,默认继续跳转\n continue;\n }\n }\n }\n\n // 所有钩子都通过,允许跳转\n return undefined;\n }\n\n /**\n * 执行路由跳转后钩子\n * \n * @param to - 目标路由\n * @param from - 来源路由\n */\n async afterEach(to: RouteLocation, from?: RouteLocation): Promise<void> {\n // 按注册顺序执行所有 afterEach 钩子\n for (const hooks of this.hooks) {\n if (hooks.afterEach) {\n try {\n await hooks.afterEach(to, from);\n } catch (error) {\n logger.error('路由生命周期钩子执行失败: afterEach', error);\n // 钩子执行失败不影响路由跳转\n continue;\n }\n }\n }\n }\n\n /**\n * 获取所有生命周期钩子\n * \n * @returns 生命周期钩子配置数组\n */\n getAll(): RouteLifecycleHooks[] {\n return [...this.hooks];\n }\n\n /**\n * 获取生命周期钩子数量\n * \n * @returns 生命周期钩子数量\n */\n getCount(): number {\n return this.hooks.length;\n }\n}\n\n/**\n * 获取路由生命周期管理器单例\n */\nlet lifecycleManagerInstance: RouterLifecycleManager | null = null;\n\nexport function getRouterLifecycleManager(): RouterLifecycleManager {\n if (!lifecycleManagerInstance) {\n lifecycleManagerInstance = new RouterLifecycleManager();\n }\n return lifecycleManagerInstance;\n}\n"],"names":["RouterLifecycleManager","getRouterLifecycleManager","register","hooks","push","logger","debug","index","indexOf","splice","registerBatch","hooksArray","forEach","clear","beforeEach","to","from","result","error","undefined","afterEach","getAll","getCount","length","lifecycleManagerInstance"],"mappings":"AAAA;;;CAGC;;;;;;;;;;;QAQYA;eAAAA;;QA6HGC;eAAAA;;;wBAnIO;;;;;;;;;;;;;;AAMhB,IAAA,AAAMD,yBAAN,MAAMA;IAGX;;;;;GAKC,GACDE,SAASC,KAA0B,EAAc;QAC/C,IAAI,CAACA,KAAK,CAACC,IAAI,CAACD;QAChBE,cAAM,CAACC,KAAK,CAAC;QAEb,WAAW;QACX,OAAO;YACL,MAAMC,QAAQ,IAAI,CAACJ,KAAK,CAACK,OAAO,CAACL;YACjC,IAAII,QAAQ,CAAC,GAAG;gBACd,IAAI,CAACJ,KAAK,CAACM,MAAM,CAACF,OAAO;gBACzBF,cAAM,CAACC,KAAK,CAAC;YACf;QACF;IACF;IAEA;;;;GAIC,GACDI,cAAcC,UAAiC,EAAQ;QACrDA,WAAWC,OAAO,CAAC,CAACT,QAAU,IAAI,CAACD,QAAQ,CAACC;IAC9C;IAEA;;GAEC,GACDU,QAAc;QACZ,IAAI,CAACV,KAAK,GAAG,EAAE;QACfE,cAAM,CAACC,KAAK,CAAC;IACf;IAEA;;;;;;GAMC,GACD,MAAMQ,WACJC,EAAiB,EACjBC,IAAoB,EACY;QAChC,0BAA0B;QAC1B,KAAK,MAAMb,SAAS,IAAI,CAACA,KAAK,CAAE;YAC9B,IAAIA,MAAMW,UAAU,EAAE;gBACpB,IAAI;oBACF,MAAMG,SAAS,MAAMd,MAAMW,UAAU,CAACC,IAAIC;oBAE1C,kBAAkB;oBAClB,IAAIC,WAAW,OAAO;wBACpBZ,cAAM,CAACC,KAAK,CAAC;wBACb,OAAO;oBACT;oBAEA,kBAAkB;oBAClB,IAAI,OAAOW,WAAW,UAAU;wBAC9BZ,cAAM,CAACC,KAAK,CAAC,CAAC,uBAAuB,EAAEW,QAAQ;wBAC/C,OAAOA;oBACT;gBACF,EAAE,OAAOC,OAAO;oBACdb,cAAM,CAACa,KAAK,CAAC,4BAA4BA;oBAEzC;gBACF;YACF;QACF;QAEA,eAAe;QACf,OAAOC;IACT;IAEA;;;;;GAKC,GACD,MAAMC,UAAUL,EAAiB,EAAEC,IAAoB,EAAiB;QACtE,yBAAyB;QACzB,KAAK,MAAMb,SAAS,IAAI,CAACA,KAAK,CAAE;YAC9B,IAAIA,MAAMiB,SAAS,EAAE;gBACnB,IAAI;oBACF,MAAMjB,MAAMiB,SAAS,CAACL,IAAIC;gBAC5B,EAAE,OAAOE,OAAO;oBACdb,cAAM,CAACa,KAAK,CAAC,2BAA2BA;oBAExC;gBACF;YACF;QACF;IACF;IAEA;;;;GAIC,GACDG,SAAgC;QAC9B,OAAO;eAAI,IAAI,CAAClB,KAAK;SAAC;IACxB;IAEA;;;;GAIC,GACDmB,WAAmB;QACjB,OAAO,IAAI,CAACnB,KAAK,CAACoB,MAAM;IAC1B;;QApHA,uBAAQpB,SAA+B,EAAE;;AAqH3C;AAEA;;CAEC,GACD,IAAIqB,2BAA0D;AAEvD,SAASvB;IACd,IAAI,CAACuB,0BAA0B;QAC7BA,2BAA2B,IAAIxB;IACjC;IACA,OAAOwB;AACT"}