@vlian/framework 1.2.60 → 1.2.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) hide show
  1. package/dist/analytics.umd.js +1 -1
  2. package/dist/components/index.cjs +1 -1
  3. package/dist/components/index.d.ts +0 -4
  4. package/dist/components/index.js +1 -1
  5. package/dist/core-bak/Test.cjs +1 -0
  6. package/dist/core-bak/Test.d.ts +5 -0
  7. package/dist/core-bak/Test.js +1 -0
  8. package/dist/core-bak/app/AppContext.cjs +1 -0
  9. package/dist/core-bak/app/AppContext.d.ts +113 -0
  10. package/dist/core-bak/app/AppContext.js +1 -0
  11. package/dist/core-bak/app/AppContext.types.cjs +1 -0
  12. package/dist/core-bak/app/AppContext.types.d.ts +146 -0
  13. package/dist/core-bak/app/AppContext.types.js +1 -0
  14. package/dist/core-bak/app/BasicLayout.cjs +1 -0
  15. package/dist/core-bak/app/BasicLayout.d.ts +15 -0
  16. package/dist/core-bak/app/BasicLayout.js +1 -0
  17. package/dist/core-bak/app/DefaultApp.cjs +1 -0
  18. package/dist/core-bak/app/DefaultApp.d.ts +10 -0
  19. package/dist/core-bak/app/DefaultApp.js +1 -0
  20. package/dist/core-bak/app/index.cjs +1 -0
  21. package/dist/core-bak/app/index.d.ts +8 -0
  22. package/dist/core-bak/app/index.js +1 -0
  23. package/dist/core-bak/config/AppConfig.cjs +1 -0
  24. package/dist/core-bak/config/AppConfig.d.ts +88 -0
  25. package/dist/core-bak/config/AppConfig.js +1 -0
  26. package/dist/core-bak/config/ConfigLoader.cjs +1 -0
  27. package/dist/core-bak/config/ConfigLoader.d.ts +118 -0
  28. package/dist/core-bak/config/ConfigLoader.js +1 -0
  29. package/dist/core-bak/config/ConfigValidator.cjs +2 -0
  30. package/dist/core-bak/config/ConfigValidator.d.ts +84 -0
  31. package/dist/core-bak/config/ConfigValidator.js +2 -0
  32. package/dist/core-bak/config/index.cjs +1 -0
  33. package/dist/core-bak/config/index.d.ts +6 -0
  34. package/dist/core-bak/config/index.js +1 -0
  35. package/dist/core-bak/dev/DevTools.cjs +1 -0
  36. package/dist/core-bak/dev/DevTools.d.ts +16 -0
  37. package/dist/core-bak/dev/DevTools.js +1 -0
  38. package/dist/core-bak/error/ErrorBoundary.cjs +1 -0
  39. package/dist/core-bak/error/ErrorBoundary.d.ts +121 -0
  40. package/dist/core-bak/error/ErrorBoundary.js +1 -0
  41. package/dist/core-bak/error/ErrorHandler.cjs +1 -0
  42. package/dist/core-bak/error/ErrorHandler.d.ts +171 -0
  43. package/dist/core-bak/error/ErrorHandler.js +1 -0
  44. package/dist/core-bak/error/index.cjs +1 -0
  45. package/dist/core-bak/error/index.d.ts +7 -0
  46. package/dist/core-bak/error/index.js +1 -0
  47. package/dist/core-bak/event/AppEventBus.cjs +1 -0
  48. package/dist/core-bak/event/AppEventBus.d.ts +178 -0
  49. package/dist/core-bak/event/AppEventBus.js +1 -0
  50. package/dist/core-bak/event/frameworkEvents.cjs +1 -0
  51. package/dist/core-bak/event/frameworkEvents.d.ts +69 -0
  52. package/dist/core-bak/event/frameworkEvents.js +1 -0
  53. package/dist/core-bak/event/hooks.cjs +1 -0
  54. package/dist/core-bak/event/hooks.d.ts +57 -0
  55. package/dist/core-bak/event/hooks.js +1 -0
  56. package/dist/core-bak/event/index.cjs +1 -0
  57. package/dist/core-bak/event/index.d.ts +10 -0
  58. package/dist/core-bak/event/index.js +1 -0
  59. package/dist/core-bak/event/types.cjs +1 -0
  60. package/dist/core-bak/event/types.d.ts +269 -0
  61. package/dist/core-bak/event/types.js +1 -0
  62. package/dist/core-bak/event/useEventBus.cjs +1 -0
  63. package/dist/core-bak/event/useEventBus.d.ts +28 -0
  64. package/dist/core-bak/event/useEventBus.js +1 -0
  65. package/dist/core-bak/index.cjs +1 -0
  66. package/dist/core-bak/index.d.ts +54 -0
  67. package/dist/core-bak/index.js +1 -0
  68. package/dist/core-bak/initialization/InitializationErrorThrower.cjs +1 -0
  69. package/dist/core-bak/initialization/InitializationErrorThrower.d.ts +7 -0
  70. package/dist/core-bak/initialization/InitializationErrorThrower.js +1 -0
  71. package/dist/core-bak/initialization/index.cjs +1 -0
  72. package/dist/core-bak/initialization/index.d.ts +7 -0
  73. package/dist/core-bak/initialization/index.js +1 -0
  74. package/dist/core-bak/initialization/initialization.cjs +1 -0
  75. package/dist/core-bak/initialization/initialization.d.ts +69 -0
  76. package/dist/core-bak/initialization/initialization.js +1 -0
  77. package/dist/core-bak/initialization/initializationErrorState.cjs +1 -0
  78. package/dist/core-bak/initialization/initializationErrorState.d.ts +35 -0
  79. package/dist/core-bak/initialization/initializationErrorState.js +1 -0
  80. package/dist/core-bak/kernel/defaultAdapters.cjs +1 -0
  81. package/dist/core-bak/kernel/defaultAdapters.d.ts +2 -0
  82. package/dist/core-bak/kernel/defaultAdapters.js +1 -0
  83. package/dist/core-bak/kernel/errors.cjs +1 -0
  84. package/dist/core-bak/kernel/errors.d.ts +18 -0
  85. package/dist/core-bak/kernel/errors.js +1 -0
  86. package/dist/core-bak/kernel/index.cjs +1 -0
  87. package/dist/core-bak/kernel/index.d.ts +3 -0
  88. package/dist/core-bak/kernel/index.js +1 -0
  89. package/dist/core-bak/kernel/startKernel.cjs +1 -0
  90. package/dist/core-bak/kernel/startKernel.d.ts +2 -0
  91. package/dist/core-bak/kernel/startKernel.js +1 -0
  92. package/dist/core-bak/kernel/types.cjs +1 -0
  93. package/dist/core-bak/kernel/types.d.ts +114 -0
  94. package/dist/core-bak/kernel/types.js +1 -0
  95. package/dist/core-bak/middleware.cjs +1 -0
  96. package/dist/core-bak/middleware.d.ts +36 -0
  97. package/dist/core-bak/middleware.js +1 -0
  98. package/dist/core-bak/plugin/PluginEventBus.cjs +1 -0
  99. package/dist/core-bak/plugin/PluginEventBus.d.ts +169 -0
  100. package/dist/core-bak/plugin/PluginEventBus.js +1 -0
  101. package/dist/core-bak/plugin/PluginSandbox.cjs +1 -0
  102. package/dist/core-bak/plugin/PluginSandbox.d.ts +101 -0
  103. package/dist/core-bak/plugin/PluginSandbox.js +1 -0
  104. package/dist/core-bak/plugin.cjs +1 -0
  105. package/dist/core-bak/plugin.d.ts +224 -0
  106. package/dist/core-bak/plugin.js +1 -0
  107. package/dist/core-bak/router/RouterManager.cjs +1 -0
  108. package/dist/core-bak/router/RouterManager.d.ts +87 -0
  109. package/dist/core-bak/router/RouterManager.js +1 -0
  110. package/dist/core-bak/router/adapter/AdapterManager.cjs +1 -0
  111. package/dist/core-bak/router/adapter/AdapterManager.d.ts +94 -0
  112. package/dist/core-bak/router/adapter/AdapterManager.js +1 -0
  113. package/dist/core-bak/router/adapter/index.cjs +1 -0
  114. package/dist/core-bak/router/adapter/index.d.ts +6 -0
  115. package/dist/core-bak/router/adapter/index.js +1 -0
  116. package/dist/core-bak/router/adapter/react-router/ReactRouterAdapter.cjs +1 -0
  117. package/dist/core-bak/router/adapter/react-router/ReactRouterAdapter.d.ts +43 -0
  118. package/dist/core-bak/router/adapter/react-router/ReactRouterAdapter.js +1 -0
  119. package/dist/core-bak/router/adapter/react-router/index.cjs +1 -0
  120. package/dist/core-bak/router/adapter/react-router/index.d.ts +4 -0
  121. package/dist/core-bak/router/adapter/react-router/index.js +1 -0
  122. package/dist/core-bak/router/adapter/types.cjs +1 -0
  123. package/dist/core-bak/router/adapter/types.d.ts +111 -0
  124. package/dist/core-bak/router/adapter/types.js +1 -0
  125. package/dist/core-bak/router/dev/RouterDevTools.cjs +1 -0
  126. package/dist/core-bak/router/dev/RouterDevTools.d.ts +5 -0
  127. package/dist/core-bak/router/dev/RouterDevTools.js +1 -0
  128. package/dist/core-bak/router/dev/index.cjs +1 -0
  129. package/dist/core-bak/router/dev/index.d.ts +4 -0
  130. package/dist/core-bak/router/dev/index.js +1 -0
  131. package/dist/core-bak/router/dynamic/DynamicRouteManager.cjs +1 -0
  132. package/dist/core-bak/router/dynamic/DynamicRouteManager.d.ts +71 -0
  133. package/dist/core-bak/router/dynamic/DynamicRouteManager.js +1 -0
  134. package/dist/core-bak/router/dynamic/index.cjs +1 -0
  135. package/dist/core-bak/router/dynamic/index.d.ts +4 -0
  136. package/dist/core-bak/router/dynamic/index.js +1 -0
  137. package/dist/core-bak/router/errors/RouterError.cjs +1 -0
  138. package/dist/core-bak/router/errors/RouterError.d.ts +48 -0
  139. package/dist/core-bak/router/errors/RouterError.js +1 -0
  140. package/dist/core-bak/router/errors/index.cjs +1 -0
  141. package/dist/core-bak/router/errors/index.d.ts +4 -0
  142. package/dist/core-bak/router/errors/index.js +1 -0
  143. package/dist/core-bak/router/index.cjs +1 -0
  144. package/dist/core-bak/router/index.d.ts +16 -0
  145. package/dist/core-bak/router/index.js +1 -0
  146. package/dist/core-bak/router/lifecycle/RouterLifecycleManager.cjs +1 -0
  147. package/dist/core-bak/router/lifecycle/RouterLifecycleManager.d.ts +56 -0
  148. package/dist/core-bak/router/lifecycle/RouterLifecycleManager.js +1 -0
  149. package/dist/core-bak/router/lifecycle/index.cjs +1 -0
  150. package/dist/core-bak/router/lifecycle/index.d.ts +4 -0
  151. package/dist/core-bak/router/lifecycle/index.js +1 -0
  152. package/dist/core-bak/router/middleware/RouterMiddlewareManager.cjs +1 -0
  153. package/dist/core-bak/router/middleware/RouterMiddlewareManager.d.ts +61 -0
  154. package/dist/core-bak/router/middleware/RouterMiddlewareManager.js +1 -0
  155. package/dist/core-bak/router/middleware/auth.cjs +1 -0
  156. package/dist/core-bak/router/middleware/auth.d.ts +54 -0
  157. package/dist/core-bak/router/middleware/auth.js +1 -0
  158. package/dist/core-bak/router/middleware/index.cjs +1 -0
  159. package/dist/core-bak/router/middleware/index.d.ts +6 -0
  160. package/dist/core-bak/router/middleware/index.js +1 -0
  161. package/dist/core-bak/router/middleware/types.cjs +1 -0
  162. package/dist/core-bak/router/middleware/types.d.ts +82 -0
  163. package/dist/core-bak/router/middleware/types.js +1 -0
  164. package/dist/core-bak/router/monitoring/RouterMonitoring.cjs +1 -0
  165. package/dist/core-bak/router/monitoring/RouterMonitoring.d.ts +134 -0
  166. package/dist/core-bak/router/monitoring/RouterMonitoring.js +1 -0
  167. package/dist/core-bak/router/monitoring/index.cjs +1 -0
  168. package/dist/core-bak/router/monitoring/index.d.ts +4 -0
  169. package/dist/core-bak/router/monitoring/index.js +1 -0
  170. package/dist/core-bak/router/navigation/RouterNavigation.cjs +1 -0
  171. package/dist/core-bak/router/navigation/RouterNavigation.d.ts +43 -0
  172. package/dist/core-bak/router/navigation/RouterNavigation.js +1 -0
  173. package/dist/core-bak/router/navigation/index.cjs +1 -0
  174. package/dist/core-bak/router/navigation/index.d.ts +4 -0
  175. package/dist/core-bak/router/navigation/index.js +1 -0
  176. package/dist/core-bak/router/performance/RouteCache.cjs +1 -0
  177. package/dist/core-bak/router/performance/RouteCache.d.ts +113 -0
  178. package/dist/core-bak/router/performance/RouteCache.js +1 -0
  179. package/dist/core-bak/router/performance/RoutePreloader.cjs +1 -0
  180. package/dist/core-bak/router/performance/RoutePreloader.d.ts +111 -0
  181. package/dist/core-bak/router/performance/RoutePreloader.js +1 -0
  182. package/dist/core-bak/router/performance/index.cjs +1 -0
  183. package/dist/core-bak/router/performance/index.d.ts +5 -0
  184. package/dist/core-bak/router/performance/index.js +1 -0
  185. package/dist/core-bak/router/plugin/RouterPluginManager.cjs +1 -0
  186. package/dist/core-bak/router/plugin/RouterPluginManager.d.ts +74 -0
  187. package/dist/core-bak/router/plugin/RouterPluginManager.js +1 -0
  188. package/dist/core-bak/router/plugin/index.cjs +1 -0
  189. package/dist/core-bak/router/plugin/index.d.ts +5 -0
  190. package/dist/core-bak/router/plugin/index.js +1 -0
  191. package/dist/core-bak/router/plugin/types.cjs +1 -0
  192. package/dist/core-bak/router/plugin/types.d.ts +153 -0
  193. package/dist/core-bak/router/plugin/types.js +1 -0
  194. package/dist/core-bak/router/types.cjs +1 -0
  195. package/dist/core-bak/router/types.d.ts +464 -0
  196. package/dist/core-bak/router/types.js +1 -0
  197. package/dist/core-bak/router/utils/adapters/react-router/RouteErrorBoundary.cjs +1 -0
  198. package/dist/core-bak/router/utils/adapters/react-router/RouteErrorBoundary.d.ts +2 -0
  199. package/dist/core-bak/router/utils/adapters/react-router/RouteErrorBoundary.js +1 -0
  200. package/dist/core-bak/router/utils/adapters/react-router/transform.cjs +1 -0
  201. package/dist/core-bak/router/utils/adapters/react-router/transform.d.ts +5 -0
  202. package/dist/core-bak/router/utils/adapters/react-router/transform.js +1 -0
  203. package/dist/core-bak/router/utils/transform.cjs +1 -0
  204. package/dist/core-bak/router/utils/transform.d.ts +348 -0
  205. package/dist/core-bak/router/utils/transform.js +1 -0
  206. package/dist/core-bak/router/validation/RouterConfigValidator.cjs +2 -0
  207. package/dist/core-bak/router/validation/RouterConfigValidator.d.ts +121 -0
  208. package/dist/core-bak/router/validation/RouterConfigValidator.js +2 -0
  209. package/dist/core-bak/router/validation/index.cjs +1 -0
  210. package/dist/core-bak/router/validation/index.d.ts +5 -0
  211. package/dist/core-bak/router/validation/index.js +1 -0
  212. package/dist/core-bak/router/validation/schema.cjs +1 -0
  213. package/dist/core-bak/router/validation/schema.d.ts +180 -0
  214. package/dist/core-bak/router/validation/schema.js +1 -0
  215. package/dist/core-bak/router/version/RouteVersionManager.cjs +1 -0
  216. package/dist/core-bak/router/version/RouteVersionManager.d.ts +124 -0
  217. package/dist/core-bak/router/version/RouteVersionManager.js +1 -0
  218. package/dist/core-bak/router/version/index.cjs +1 -0
  219. package/dist/core-bak/router/version/index.d.ts +4 -0
  220. package/dist/core-bak/router/version/index.js +1 -0
  221. package/dist/core-bak/splash/SplashScreen.cjs +1 -0
  222. package/dist/core-bak/splash/SplashScreen.d.ts +14 -0
  223. package/dist/core-bak/splash/SplashScreen.js +1 -0
  224. package/dist/core-bak/splash/index.cjs +1 -0
  225. package/dist/core-bak/splash/index.d.ts +5 -0
  226. package/dist/core-bak/splash/index.js +1 -0
  227. package/dist/core-bak/splash/splashScreenUtils.cjs +1 -0
  228. package/dist/core-bak/splash/splashScreenUtils.d.ts +7 -0
  229. package/dist/core-bak/splash/splashScreenUtils.js +1 -0
  230. package/dist/core-bak/startup/AppInstance.cjs +1 -0
  231. package/dist/core-bak/startup/AppInstance.d.ts +138 -0
  232. package/dist/core-bak/startup/AppInstance.js +1 -0
  233. package/dist/core-bak/startup/environment.cjs +1 -0
  234. package/dist/core-bak/startup/environment.d.ts +87 -0
  235. package/dist/core-bak/startup/environment.js +1 -0
  236. package/dist/core-bak/startup/index.cjs +1 -0
  237. package/dist/core-bak/startup/index.d.ts +7 -0
  238. package/dist/core-bak/startup/index.js +1 -0
  239. package/dist/core-bak/startup/initializeServices.cjs +1 -0
  240. package/dist/core-bak/startup/initializeServices.d.ts +68 -0
  241. package/dist/core-bak/startup/initializeServices.js +1 -0
  242. package/dist/core-bak/startup/performanceTracker.cjs +1 -0
  243. package/dist/core-bak/startup/performanceTracker.d.ts +104 -0
  244. package/dist/core-bak/startup/performanceTracker.js +1 -0
  245. package/dist/core-bak/startup/renderApp.cjs +1 -0
  246. package/dist/core-bak/startup/renderApp.d.ts +70 -0
  247. package/dist/core-bak/startup/renderApp.js +1 -0
  248. package/dist/core-bak/startup/startApp.cjs +1 -0
  249. package/dist/core-bak/startup/startApp.d.ts +14 -0
  250. package/dist/core-bak/startup/startApp.js +1 -0
  251. package/dist/core-bak/types.cjs +1 -0
  252. package/dist/core-bak/types.d.ts +501 -0
  253. package/dist/core-bak/types.js +1 -0
  254. package/dist/index.cjs +1 -1
  255. package/dist/index.d.ts +0 -1
  256. package/dist/index.js +1 -1
  257. package/dist/index.umd.js +31 -246
  258. package/dist/kernel/types.d.ts +46 -3
  259. package/dist/state.umd.js +1 -1
  260. package/package.json +7 -12
package/dist/index.umd.js CHANGED
@@ -1,14 +1,14 @@
1
1
  /*!
2
- * @vlian/framework v1.2.59
2
+ * @vlian/framework v1.2.61
3
3
  * Secra Framework - 一个现代化的低代码框架
4
4
  * (c) 2026 Secra Framework Contributors
5
5
  * Licensed under Apache-2.0
6
6
  */
7
7
  (function (global, factory) {
8
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@vlian/utils'), require('@vlian/logger'), require('@vlian/monitoring'), require('react/jsx-runtime'), require('react-dom/client'), require('react'), require('react-router-dom'), require('zod'), require('react-error-boundary'), require('i18next'), require('react-i18next'), require('@vlian/csrf')) :
9
- typeof define === 'function' && define.amd ? define(['exports', '@vlian/utils', '@vlian/logger', '@vlian/monitoring', 'react/jsx-runtime', 'react-dom/client', 'react', 'react-router-dom', 'zod', 'react-error-boundary', 'i18next', 'react-i18next', '@vlian/csrf'], factory) :
10
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.vlianFramework = {}, global.VlianUtils, global.VlianLogger, global.VlianMonitoring, global.jsxRuntime, global.ReactDOMClient, global.React, global.ReactRouterDOM, global.z, global.ReactErrorBoundary, global.i18next, global.ReactI18next, global.VlianCsrf));
11
- })(this, (function (exports, vlianUtils, logger, monitoring, jsxRuntime, client, React, reactRouterDom, zod, reactErrorBoundary, i18n, reactI18next, csrf) { 'use strict';
8
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('i18next'), require('react-i18next'), require('@vlian/utils'), require('@vlian/logger'), require('@vlian/csrf'), require('@vlian/monitoring')) :
9
+ typeof define === 'function' && define.amd ? define(['exports', 'i18next', 'react-i18next', '@vlian/utils', '@vlian/logger', '@vlian/csrf', '@vlian/monitoring'], factory) :
10
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.vlianFramework = {}, global.i18next, global.ReactI18next, global.VlianUtils, global.VlianLogger, global.VlianCsrf, global.VlianMonitoring));
11
+ })(this, (function (exports, i18n, reactI18next, vlianUtils, logger, csrf, monitoring) { 'use strict';
12
12
 
13
13
  function _interopNamespaceDefault(e) {
14
14
  var n = Object.create(null);
@@ -31,169 +31,33 @@
31
31
 
32
32
  const reactI18nextInstance=i18n.use(reactI18next.initReactI18next);async function setupI18n(options,callback){await reactI18nextInstance.init(options,callback);}const $t=i18n.t;async function setLang(locale,callback){await i18n.changeLanguage(locale,callback);}
33
33
 
34
- function _define_property$K(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class MultiLevelCache{moveToHead(node){const nodeAsUnknown=node;if(nodeAsUnknown===this.head){return}if(node.prev){node.prev.next=node.next;}if(node.next){node.next.prev=node.prev;}if(nodeAsUnknown===this.tail){this.tail=node.prev;}node.prev=null;node.next=this.head;if(this.head){this.head.prev=nodeAsUnknown;}this.head=nodeAsUnknown;if(!this.tail){this.tail=nodeAsUnknown;}}removeTail(){if(!this.tail){return}const key=this.tail.key;this.memoryCache.delete(key);if(this.tail.prev){this.tail.prev.next=null;this.tail=this.tail.prev;}else {this.head=null;this.tail=null;}}async get(key){const node=this.memoryCache.get(key);if(node){const item=node.value;if(item.expiresAt>Date.now()){this.moveToHead(node);return item.data}else {this.memoryCache.delete(key);if(node===this.head){this.head=node.next;}if(node===this.tail){this.tail=node.prev;}if(node.prev){node.prev.next=node.next;}if(node.next){node.next.prev=node.prev;}}}try{const stored=await this.storage.get(key);if(stored){const item=JSON.parse(stored);if(item.expiresAt>Date.now()){this.setInMemory(key,item);return item.data}else {await this.storage.remove(key);}}}catch(error){}return null}setInMemory(key,item){let node=this.memoryCache.get(key);if(node){node.value=item;this.moveToHead(node);}else {node={key,value:item,prev:null,next:this.head};if(this.head){this.head.prev=node;}this.head=node;if(!this.tail){this.tail=node;}this.memoryCache.set(key,node);if(this.memoryCache.size>this.config.maxSize){this.removeTail();}}}async set(key,data,ttl){const expiresAt=Date.now()+(ttl||this.config.defaultTTL);const item={data,expiresAt,createdAt:Date.now()};this.setInMemory(key,item);try{await this.storage.set(key,item);}catch(error){}}async delete(key){const node=this.memoryCache.get(key);if(node){if(node.prev){node.prev.next=node.next;}if(node.next){node.next.prev=node.prev;}if(node===this.head){this.head=node.next;}if(node===this.tail){this.tail=node.prev;}this.memoryCache.delete(key);}try{await this.storage.remove(key);}catch(error){}}async clear(){this.memoryCache.clear();}async cleanup(){const now=Date.now();const keysToDelete=[];const nodesToRemove=[];for(const[key,node]of this.memoryCache.entries()){if(node.value.expiresAt<=now){keysToDelete.push(key);nodesToRemove.push(node);}}if(keysToDelete.length>0){for(const node of nodesToRemove){if(node.prev){node.prev.next=node.next;}if(node.next){node.next.prev=node.prev;}if(node===this.head){this.head=node.next;}if(node===this.tail){this.tail=node.prev;}}keysToDelete.forEach(key=>this.memoryCache.delete(key));}}constructor(storage,config={}){_define_property$K(this,"memoryCache",new Map);_define_property$K(this,"storage",void 0);_define_property$K(this,"config",void 0);_define_property$K(this,"head",null);_define_property$K(this,"tail",null);this.storage=storage;this.config={defaultTTL:config.defaultTTL??24*60*60*1e3,maxSize:config.maxSize??100};}}
35
-
36
- function _define_property$J(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}let Storage=class Storage{get local(){return this._local}get session(){return this._session}get indexedDB(){return this._indexedDB}get localCache(){return this._localCache}get sessionCache(){return this._sessionCache}static getInstance(){if(!Storage.instance){Storage.instance=new Storage;}return Storage.instance}initialize(options){const local=vlianUtils.createStorage({type:"local",prefix:options?.prefix||"vlian",defaultExpire:options?.defaultExpire||24*60*60*1e3});const session=vlianUtils.createStorage({type:"session",prefix:options?.prefix||"vlian",defaultExpire:options?.defaultExpire||24*60*60*1e3});const indexedDB=vlianUtils.createStorage({type:"indexedDB",prefix:options?.prefix||"vlian",defaultExpire:options?.defaultExpire||24*60*60*1e3,dbName:options?.tableName});this._local=local;this._session=session;this._indexedDB=indexedDB;this.cacheEnabled=options?.cache?.enabled??false;if(this.cacheEnabled){this._localCache=new MultiLevelCache(local,{defaultTTL:options?.cache?.defaultTTL,maxSize:options?.cache?.maxSize});this._sessionCache=new MultiLevelCache(session,{defaultTTL:options?.cache?.defaultTTL,maxSize:options?.cache?.maxSize});}}async cleanupCache(){if(this._localCache){await this._localCache.cleanup();}if(this._sessionCache){await this._sessionCache.cleanup();}}constructor(){_define_property$J(this,"_local",void 0);_define_property$J(this,"_session",void 0);_define_property$J(this,"_indexedDB",void 0);_define_property$J(this,"_localCache",void 0);_define_property$J(this,"_sessionCache",void 0);_define_property$J(this,"cacheEnabled",false);}};_define_property$J(Storage,"instance",null);const storage=Storage.getInstance();
37
-
38
- function _define_property$I(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class PluginSandbox{hasPermission(permission){if(!this.config.strictMode){return true}return this.permissions.has(permission)}canAccessConfig(key){if(!this.hasPermission("access_config")){return false}if(this.config.configWhitelist&&this.config.configWhitelist.length>0){return this.config.configWhitelist.includes(key)}return true}canAccessStateScope(scope){if(!this.hasPermission("access_state_manager")){return false}if(this.config.stateScopeWhitelist&&this.config.stateScopeWhitelist.length>0){return this.config.stateScopeWhitelist.includes(scope)}return true}filterConfig(config){if(!this.hasPermission("access_config")){return {}}if(!this.config.configWhitelist||this.config.configWhitelist.length===0){return config}const filtered={};for(const key of this.config.configWhitelist){if(key in config){filtered[key]=config[key];}}return filtered}getConfig(){return {...this.config}}updatePermissions(permissions){this.permissions=new Set(permissions);this.config.permissions=permissions;}constructor(config){_define_property$I(this,"config",void 0);_define_property$I(this,"permissions",void 0);this.config={strictMode:true,...config};this.permissions=new Set(config.permissions||[]);}}
39
-
40
- function _define_property$H(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class PluginEventBus{on(event,listener){if(!this.listeners.has(event)){this.listeners.set(event,new Set);}const listeners=this.listeners.get(event);listeners.add(listener);return ()=>{listeners.delete(listener);if(listeners.size===0){this.listeners.delete(event);}}}off(event,listener){const listeners=this.listeners.get(event);if(listeners){listeners.delete(listener);if(listeners.size===0){this.listeners.delete(event);}}}async emit(event,data,metadata){if(this.config.enableValidation&&!this.config.validator(event,data)){console.warn(`事件 ${event} 验证失败,已忽略`);return}const eventMetadata={source:metadata?.source,timestamp:metadata?.timestamp??Date.now(),eventId:metadata?.eventId??`event_${++this.eventCounter}`,priority:metadata?.priority??0};if(this.config.enableTracking){this.eventHistory.push({event,data,metadata:eventMetadata});if(this.eventHistory.length>this.config.maxHistorySize){this.eventHistory.shift();}}const listeners=this.listeners.get(event);if(!listeners||listeners.size===0){return}const eventWrapper={data:data,metadata:eventMetadata};const sortedListeners=Array.from(listeners);const promises=sortedListeners.map(listener=>{try{return Promise.resolve(listener(eventWrapper))}catch(error){console.error(`事件 ${event} 的监听器执行失败:`,error);return Promise.resolve()}});await Promise.allSettled(promises);}async emitData(event,data){return this.emit(event,data)}once(event,listener){const wrappedListener=async data=>{const actualData=data.data!==undefined?data.data:data;await listener(actualData);this.off(event,wrappedListener);};this.on(event,wrappedListener);}clear(){this.listeners.clear();}listenerCount(event){if(event){return this.listeners.get(event)?.size||0}let count=0;for(const listeners of this.listeners.values()){count+=listeners.size;}return count}eventNames(){return Array.from(this.listeners.keys())}getEventHistory(event,limit){if(!this.config.enableTracking){return []}let history=this.eventHistory;if(event){history=history.filter(h=>h.event===event);}if(limit){history=history.slice(-limit);}return [...history]}clearHistory(){this.eventHistory=[];}async request(event,data,timeout=5e3){return new Promise((resolve,reject)=>{const responseEvent=`${event}:response`;const requestId=`req_${Date.now()}_${Math.random()}`;const timeoutId=setTimeout(()=>{this.off(responseEvent,responseHandler);reject(new Error(`请求 ${event} 超时`));},timeout);const responseHandler=response=>{const actualResponse=response.data!==undefined?response.data:response;if(actualResponse.requestId===requestId){clearTimeout(timeoutId);this.off(responseEvent,responseHandler);resolve(actualResponse.data);}};this.on(responseEvent,responseHandler);this.emit(`${event}:request`,{requestId,data});})}onRequest(event,handler){const requestEvent=`${event}:request`;const responseEvent=`${event}:response`;return this.on(requestEvent,async wrapper=>{try{const actualWrapper=wrapper.data!==undefined?wrapper:{data:wrapper,metadata:{timestamp:Date.now()}};const response=await handler(actualWrapper.data.data,actualWrapper.metadata);this.emit(responseEvent,{requestId:actualWrapper.data.requestId,data:response});}catch(error){const actualWrapper=wrapper.data!==undefined?wrapper:{data:wrapper};this.emit(`${responseEvent}:error`,{requestId:actualWrapper.data.requestId,error:error instanceof Error?error.message:String(error)});}})}getConfig(){return {...this.config}}updateConfig(config){this.config={...this.config,...config};}constructor(config={}){_define_property$H(this,"listeners",new Map);_define_property$H(this,"eventHistory",[]);_define_property$H(this,"config",void 0);_define_property$H(this,"eventCounter",0);this.config={enableTracking:config.enableTracking??false,maxHistorySize:config.maxHistorySize??100,enableValidation:config.enableValidation??false,validator:config.validator??(()=>true)};}}const pluginEventBus=new PluginEventBus({enableTracking:process.env.NODE_ENV==="development",maxHistorySize:100,enableValidation:false});
41
-
42
- function _define_property$G(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class PluginManager{register(plugin){if(this.plugins.has(plugin.name)){console.warn(`插件 ${plugin.name} 已存在,将被覆盖`);}if(plugin.dependencies&&plugin.dependencies.length>0){const missingDeps=plugin.dependencies.filter(dep=>!this.plugins.has(dep));if(missingDeps.length>0){console.warn(`插件 ${plugin.name} 的依赖未注册: ${missingDeps.join(", ")}`);}}this.plugins.set(plugin.name,plugin);this.pluginStatus.set(plugin.name,"registered");if(plugin.sandbox){const sandbox=new PluginSandbox({...plugin.sandbox,name:plugin.name});this.sandboxes.set(plugin.name,sandbox);}else {const sandbox=new PluginSandbox({strictMode:false,name:plugin.name});this.sandboxes.set(plugin.name,sandbox);}}getLoadOrder(){const plugins=Array.from(this.plugins.values());const sortedPlugins=plugins.sort((a,b)=>{const priorityA=a.priority??100;const priorityB=b.priority??100;return priorityA-priorityB});const visited=new Set;const visiting=new Set;const result=[];const visit=pluginName=>{if(visiting.has(pluginName)){console.warn(`检测到循环依赖,涉及插件: ${pluginName}`);return}if(visited.has(pluginName)){return}visiting.add(pluginName);const plugin=this.plugins.get(pluginName);if(plugin?.dependencies){for(const dep of plugin.dependencies){visit(dep);}}visiting.delete(pluginName);visited.add(pluginName);result.push(pluginName);};for(const plugin of sortedPlugins){visit(plugin.name);}return result}unregister(name){const plugin=this.plugins.get(name);if(plugin&&plugin.destroy){plugin.destroy();}this.plugins.delete(name);this.sandboxes.delete(name);this.pluginStatus.delete(name);this.pluginLoaders.delete(name);}async loadPlugin(options){let plugin;if(options.url){const response=await fetch(options.url);if(!response.ok){throw new Error(`无法加载插件: ${options.url} (${response.status})`)}const pluginModule=await response.json();plugin=pluginModule.default||pluginModule;}else if(options.modulePath){const pluginModule=await import(options.modulePath);plugin=pluginModule.default||pluginModule;}else {throw new Error("必须提供 url 或 modulePath")}if(!plugin||!plugin.name){throw new Error("插件格式无效:必须包含 name 属性")}if(this.plugins.has(plugin.name)){throw new Error(`插件 ${plugin.name} 已加载`)}this.pluginStatus.set(plugin.name,"loading");try{this.register(plugin);if(options.initialize&&options.initContext&&options.startOptions){await this.initializePlugin(plugin.name,options.startOptions,options.initContext);}return plugin}catch(error){this.pluginStatus.delete(plugin.name);throw error}}async initializePlugin(name,options,context){const plugin=this.plugins.get(name);if(!plugin){throw new Error(`插件 ${name} 未注册`)}const status=this.pluginStatus.get(name);if(status==="initialized"){return}try{const sandbox=this.sandboxes.get(name);if(!sandbox){throw new Error(`插件 ${name} 的沙箱未找到`)}if(plugin.init){const filteredOptions=sandbox.filterConfig(options);await plugin.init(filteredOptions,context,sandbox,pluginEventBus);}this.pluginStatus.set(name,"initialized");}catch(error){console.error(`插件 ${name} 初始化失败:`,error);throw error}}async unloadPlugin(name,force=false){const plugin=this.plugins.get(name);if(!plugin){throw new Error(`插件 ${name} 未加载`)}if(!force){const dependents=Array.from(this.plugins.values()).filter(p=>p.dependencies&&p.dependencies.includes(name));if(dependents.length>0){throw new Error(`无法卸载插件 ${name},以下插件依赖它: ${dependents.map(p=>p.name).join(", ")}`)}}if(plugin.destroy){try{await plugin.destroy();}catch(error){console.error(`插件 ${name} 的 destroy 钩子执行失败:`,error);}}this.unregister(name);this.pluginStatus.set(name,"destroyed");}canHotLoad(plugin){if(plugin.dependencies&&plugin.dependencies.length>0){const missingDeps=plugin.dependencies.filter(dep=>!this.plugins.has(dep));if(missingDeps.length>0){return false}}return true}registerLoader(name,loader){this.pluginLoaders.set(name,loader);}async loadPluginByLoader(name,options){const loader=this.pluginLoaders.get(name);if(!loader){throw new Error(`插件 ${name} 的加载器未注册`)}const plugin=await loader();if(!plugin||!plugin.name){throw new Error("插件格式无效:必须包含 name 属性")}if(plugin.name!==name){throw new Error(`插件名称不匹配: 期望 ${name},实际 ${plugin.name}`)}if(this.plugins.has(plugin.name)){return this.plugins.get(plugin.name)}this.pluginStatus.set(plugin.name,"loading");try{this.register(plugin);if(options?.initialize&&options.initContext&&options.startOptions){await this.initializePlugin(plugin.name,options.startOptions,options.initContext);}return plugin}catch(error){this.pluginStatus.delete(plugin.name);throw error}}get(name){return this.plugins.get(name)}getAll(){return Array.from(this.plugins.values())}async executeBeforeInit(options){const loadOrder=this.getLoadOrder();for(const pluginName of loadOrder){const plugin=this.plugins.get(pluginName);if(!plugin||!plugin.beforeInit){continue}try{const sandbox=this.sandboxes.get(plugin.name);if(!sandbox){console.warn(`插件 ${plugin.name} 的沙箱未找到`);continue}const filteredOptions=sandbox.filterConfig(options);await plugin.beforeInit(filteredOptions,sandbox,pluginEventBus);}catch(error){console.error(`插件 ${plugin.name} 的 beforeInit 钩子执行失败:`,error);}}}async executeInit(options,context){const loadOrder=this.getLoadOrder();for(const pluginName of loadOrder){const plugin=this.plugins.get(pluginName);if(!plugin||!plugin.init){continue}try{const sandbox=this.sandboxes.get(plugin.name);if(!sandbox){console.warn(`插件 ${plugin.name} 的沙箱未找到`);continue}const filteredOptions=sandbox.filterConfig(options);await plugin.init(filteredOptions,context,sandbox,pluginEventBus);this.pluginStatus.set(plugin.name,"initialized");}catch(error){console.error(`插件 ${plugin.name} 的 init 钩子执行失败:`,error);}}}async executeAfterInit(options,context){const loadOrder=this.getLoadOrder();const reverseOrder=[...loadOrder].reverse();for(const pluginName of reverseOrder){const plugin=this.plugins.get(pluginName);if(!plugin||!plugin.afterInit){continue}try{const sandbox=this.sandboxes.get(plugin.name);if(!sandbox){console.warn(`插件 ${plugin.name} 的沙箱未找到`);continue}const filteredOptions=sandbox.filterConfig(options);await plugin.afterInit(filteredOptions,context,sandbox,pluginEventBus);}catch(error){console.error(`插件 ${plugin.name} 的 afterInit 钩子执行失败:`,error);}}}getPluginStatus(name){return this.pluginStatus.get(name)}isLoaded(name){return this.plugins.has(name)}getLoadedPlugins(){return Array.from(this.plugins.keys())}getAllPluginStatus(){return new Map(this.pluginStatus)}getSandbox(name){return this.sandboxes.get(name)}getEventBus(){return pluginEventBus}async destroyAll(){for(const plugin of this.plugins.values()){if(plugin.destroy){try{await plugin.destroy();}catch(error){console.error(`插件 ${plugin.name} 的 destroy 钩子执行失败:`,error);}}}this.plugins.clear();}constructor(){_define_property$G(this,"plugins",new Map);_define_property$G(this,"sandboxes",new Map);_define_property$G(this,"pluginStatus",new Map);_define_property$G(this,"pluginLoaders",new Map);}}const pluginManager=new PluginManager;
43
-
44
- async function initialization(options,onProgress){const startTime=Date.now();let config={};try{await pluginManager.executeBeforeInit(options);onProgress?.(5,"初始化日志系统...");logger.logger.setLevel(options.loggerLevel??logger.LogLevel.INFO);onProgress?.(30);if(options.lifecycle?.beforeInitialization){onProgress?.(35,"执行初始化前回调...");await options.lifecycle.beforeInitialization();}onProgress?.(40,"设置国际化...");setupI18n(options.locale||undefined);if(options.lifecycle?.initialization){onProgress?.(50,"初始化核心功能...");await options.lifecycle.initialization();onProgress?.(70,"核心功能初始化完成");}else {onProgress?.(70);}onProgress?.(80,"准备完成...");const duration=Date.now()-startTime;const context={config,progress:100,isReady:true,duration};await pluginManager.executeInit(options,context);await pluginManager.executeAfterInit(options,context);if(options.lifecycle?.afterInitialization){onProgress?.(90,"执行初始化后回调...");await options.lifecycle.afterInitialization(context);}onProgress?.(100,"初始化完成");return context}catch(error){logger.logger.error("初始化失败:",error);throw error}}
45
-
46
- function _define_property$F(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}let InitializationErrorState=class InitializationErrorState{setError(error){this.error=vlianUtils.errorUtils.normalizeError(error);this.listeners.forEach(listener=>listener());}getError(){return this.error}clearError(){this.error=null;this.listeners.forEach(listener=>listener());}subscribe(listener){this.listeners.add(listener);return ()=>{this.listeners.delete(listener);}}hasError(){return this.error!==null}constructor(){_define_property$F(this,"error",null);_define_property$F(this,"listeners",new Set);}};const initializationErrorState=new InitializationErrorState;
47
-
48
- const InitializationErrorThrower=()=>{const[error,setError]=React.useState(null);React.useEffect(()=>{const currentError=initializationErrorState.getError();if(currentError){setError(currentError);return}const unsubscribe=initializationErrorState.subscribe(()=>{const newError=initializationErrorState.getError();setError(newError);});return unsubscribe},[]);if(error){throw error}return null};
49
-
50
- const SplashScreen=React.memo(({options,onComplete})=>{const[progress,setProgress]=React.useState(0);const[currentStep,setCurrentStep]=React.useState("准备初始化...");const[isInitializing,setIsInitializing]=React.useState(false);const[estimatedTime,setEstimatedTime]=React.useState(null);const[isSystemDark,setIsSystemDark]=React.useState(()=>{if(typeof window==="undefined"){return false}return window.matchMedia("(prefers-color-scheme: dark)").matches});const hasCompletedRef=React.useRef(false);const onCompleteRef=React.useRef(onComplete);const optionsRef=React.useRef(options);const startTimeRef=React.useRef(Date.now());const minDisplayTimeRef=React.useRef(options.minSplashScreenTime??500);const progressUpdateTimerRef=React.useRef(null);const rafRef=React.useRef(null);const lastProgressRef=React.useRef(0);const progressHistoryRef=React.useRef([]);React.useEffect(()=>{onCompleteRef.current=onComplete;optionsRef.current=options;minDisplayTimeRef.current=options.minSplashScreenTime??500;},[onComplete,options]);const debouncedProgressUpdate=React.useCallback((progressValue,step)=>{if(rafRef.current!==null){cancelAnimationFrame(rafRef.current);}const now=Date.now();progressHistoryRef.current.push({progress:progressValue,time:now});if(progressHistoryRef.current.length>10){progressHistoryRef.current.shift();}if(progressHistoryRef.current.length>=2&&progressValue>0){const history=progressHistoryRef.current;const first=history[0];const last=history[history.length-1];const progressDelta=last.progress-first.progress;const timeDelta=last.time-first.time;if(progressDelta>0&&timeDelta>0){const progressPerMs=progressDelta/timeDelta;const remainingProgress=100-progressValue;const estimatedMs=remainingProgress/progressPerMs;setEstimatedTime(Math.max(0,Math.round(estimatedMs)));}}rafRef.current=requestAnimationFrame(()=>{setProgress(progressValue);if(step){setCurrentStep(step);}lastProgressRef.current=progressValue;rafRef.current=null;});},[]);React.useEffect(()=>{if(hasCompletedRef.current)return;hasCompletedRef.current=true;startTimeRef.current=Date.now();const performInitialization=async()=>{try{setIsInitializing(true);setProgress(0);setCurrentStep("开始初始化...");logger.logger.info("启动页开始执行初始化");const context=await initialization(optionsRef.current,(progressValue,step)=>{debouncedProgressUpdate(progressValue,step);});logger.logger.info("启动页初始化完成",context);const elapsedTime=Date.now()-startTimeRef.current;const dynamicMinTime=elapsedTime<200?Math.min(minDisplayTimeRef.current,300):minDisplayTimeRef.current;const remainingTime=Math.max(0,dynamicMinTime-elapsedTime);if(remainingTime>0){await new Promise(resolve=>setTimeout(resolve,remainingTime));}if(progressUpdateTimerRef.current){clearTimeout(progressUpdateTimerRef.current);progressUpdateTimerRef.current=null;}setProgress(100);setCurrentStep("初始化完成");onCompleteRef.current(context);}catch(error){logger.logger.error("启动页初始化失败:",error);initializationErrorState.setError(error);setCurrentStep("初始化失败,请刷新页面重试");onCompleteRef.current({config:{},progress:0,isReady:false,duration:0});}finally{setIsInitializing(false);}};performInitialization();return ()=>{if(progressUpdateTimerRef.current){clearTimeout(progressUpdateTimerRef.current);}if(rafRef.current!==null){cancelAnimationFrame(rafRef.current);}}},[debouncedProgressUpdate]);React.useEffect(()=>{if(typeof window==="undefined"){return}const mediaQuery=window.matchMedia("(prefers-color-scheme: dark)");const onSystemThemeChange=event=>{setIsSystemDark(event.matches);};setIsSystemDark(mediaQuery.matches);if(typeof mediaQuery.addEventListener==="function"){mediaQuery.addEventListener("change",onSystemThemeChange);return ()=>mediaQuery.removeEventListener("change",onSystemThemeChange)}mediaQuery.addListener(onSystemThemeChange);return ()=>mediaQuery.removeListener(onSystemThemeChange)},[]);const resolvedMode=React.useMemo(()=>{const mode=optionsRef.current.theme?.mode||"light";if(mode==="system"){return isSystemDark?"dark":"light"}return mode==="dark"?"dark":"light"},[isSystemDark]);const palette=React.useMemo(()=>{if(resolvedMode==="dark"){return {background:"#0b1220",text:"#e2e8f0",subText:"#94a3b8",track:"#1f2937",spinnerTrack:"#334155"}}return {background:"#f5f7fb",text:"#51606f",subText:"#94a3b8",track:"#e9eff5",spinnerTrack:"#d9e2ec"}},[resolvedMode]);const CustomSplashScreen=optionsRef.current.splashScreen;if(CustomSplashScreen){const customProps={progress,currentStep,isInitializing};return jsxRuntime.jsx(CustomSplashScreen,{...customProps})}return jsxRuntime.jsxs("div",{role:"status","aria-live":"polite","aria-label":"应用正在加载",style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100vh",width:"100%",gap:24,background:palette.background,color:palette.text},children:[jsxRuntime.jsx("div",{"aria-label":"加载中",style:{width:42,height:42,border:`4px solid ${palette.spinnerTrack}`,borderTopColor:"var(--app-primary-color, #2f80ed)",borderRadius:"50%",animation:"secra-spin 1s linear infinite"}}),jsxRuntime.jsxs("div",{style:{width:"300px"},children:[jsxRuntime.jsx("div",{"aria-label":`加载进度 ${progress}%`,style:{height:12,background:palette.track,borderRadius:999,overflow:"hidden"},children:jsxRuntime.jsx("div",{style:{width:`${Math.max(0,Math.min(100,progress))}%`,height:"100%",background:"var(--app-primary-color, #2f80ed)",transition:"width 0.2s ease"}})}),jsxRuntime.jsxs("div",{style:{marginTop:8,textAlign:"right",fontSize:12,color:palette.text},children:[progress,"%"]})]}),jsxRuntime.jsxs("div",{role:"status","aria-live":"polite",style:{fontSize:14,color:palette.text,textAlign:"center"},children:[currentStep,estimatedTime!==null&&estimatedTime>0&&jsxRuntime.jsxs("div",{style:{fontSize:12,color:palette.subText,marginTop:8},children:["预计还需 ",Math.ceil(estimatedTime/1e3)," 秒"]})]}),jsxRuntime.jsx("style",{children:`@keyframes secra-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }`})]})});SplashScreen.displayName="SplashScreen";
51
-
52
- function shouldShowSplashScreen(showSplashScreen){if(showSplashScreen==="never"){return false}if(showSplashScreen==="always"){return true}if(showSplashScreen==="first-time-only"){const hasVisited=sessionStorage.getItem("__framework_visited__");if(hasVisited){return false}sessionStorage.setItem("__framework_visited__","true");return true}return true}
53
-
54
- function _define_property$E(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class MiddlewareManager{use(middleware){this.middlewares.push(middleware);}remove(middleware){const index=this.middlewares.indexOf(middleware);if(index>-1){this.middlewares.splice(index,1);}}clear(){this.middlewares=[];}async execute(options,finalHandler){let index=0;const next=async()=>{if(index>=this.middlewares.length){return finalHandler()}const middleware=this.middlewares[index++];return middleware(options,next)};return next()}get count(){return this.middlewares.length}constructor(){_define_property$E(this,"middlewares",[]);}}const middlewareManager=new MiddlewareManager;
55
-
56
- function _define_property$D(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class StateInstance{get(){if(this.destroyed){throw new Error(`StateInstance ${String(this.id)} has been destroyed`)}return this.value}set(valueOrUpdater){if(this.destroyed){throw new Error(`StateInstance ${String(this.id)} has been destroyed`)}const previousValue=this.value;let newValue;if(typeof valueOrUpdater==="function"){newValue=valueOrUpdater(this.value);}else {newValue=valueOrUpdater;}let processedValue=newValue;for(const middleware of this.middleware){processedValue=middleware(processedValue,previousValue);}if(processedValue===this.value){return}this.value=processedValue;if(this.devMode){console.debug(`[StateInstance] Updated: ${String(this.id)}`,{previous:previousValue,current:this.value});}this.notifySubscribers(this.value,previousValue);}subscribe(subscriber){if(this.destroyed){throw new Error(`StateInstance ${String(this.id)} has been destroyed`)}this.subscribers.add(subscriber);if(this.devMode){console.debug(`[StateInstance] Subscribed: ${String(this.id)}`,{subscriberCount:this.subscribers.size});}return ()=>{this.subscribers.delete(subscriber);if(this.devMode){console.debug(`[StateInstance] Unsubscribed: ${String(this.id)}`,{subscriberCount:this.subscribers.size});}}}getId(){return this.id}getScope(){return this.scope}destroy(){if(this.destroyed){return}this.destroyed=true;this.subscribers.clear();this.value=undefined;if(this.devMode){console.debug(`[StateInstance] Destroyed: ${String(this.id)}`);}}isDestroyed(){return this.destroyed}notifySubscribers(value,previous){const subscribers=Array.from(this.subscribers);for(const subscriber of subscribers){try{subscriber(value,previous);}catch(error){console.error(`[StateInstance] Error in subscriber for ${String(this.id)}:`,error);}}}constructor(initialValue,options={}){_define_property$D(this,"id",void 0);_define_property$D(this,"scope",void 0);_define_property$D(this,"value",void 0);_define_property$D(this,"subscribers",new Set);_define_property$D(this,"destroyed",false);_define_property$D(this,"devMode",void 0);_define_property$D(this,"middleware",void 0);this.value=initialValue;this.id=options.id??Symbol("StateInstance");this.scope=options.scope;this.devMode=options.devMode??false;this.middleware=options.middleware??[];if(this.devMode){console.debug(`[StateInstance] Created: ${String(this.id)}`,{scope:this.scope,initialValue:this.value});}}}
57
-
58
- function _define_property$C(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class StateScopeManager{register(instance,scope){const existingScope=this.instanceToScopeMap.get(instance);if(existingScope){this.unregister(instance);}if(!this.scopeMap.has(scope)){this.scopeMap.set(scope,new Set);}const instances=this.scopeMap.get(scope);instances.add(instance);this.instanceToScopeMap.set(instance,scope);}unregister(instance){const scope=this.instanceToScopeMap.get(instance);if(!scope){return}const instances=this.scopeMap.get(scope);if(instances){instances.delete(instance);if(instances.size===0){this.scopeMap.delete(scope);}}this.instanceToScopeMap.delete(instance);}getInstances(scope){const instances=this.scopeMap.get(scope);return instances?Array.from(instances):[]}getScope(instance){return this.instanceToScopeMap.get(instance)}destroyScope(scope){const instances=this.scopeMap.get(scope);if(!instances){return}for(const instance of instances){instance.destroy();this.instanceToScopeMap.delete(instance);}this.scopeMap.delete(scope);}destroyAll(){for(const instances of this.scopeMap.values()){for(const instance of instances){instance.destroy();}}this.scopeMap.clear();this.instanceToScopeMap.clear();}getAllScopes(){return Array.from(this.scopeMap.keys())}getScopeCount(){return this.scopeMap.size}getInstanceCount(){return this.instanceToScopeMap.size}constructor(){_define_property$C(this,"scopeMap",new Map);_define_property$C(this,"instanceToScopeMap",new Map);}}
59
-
60
- function _define_property$B(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class StateRegistry{register(instance){const id=instance.getId();if(this.instances.has(id)){console.warn(`[StateRegistry] Instance with id ${String(id)} already exists, replacing...`);}this.instances.set(id,instance);const scope=instance.getScope();if(scope){this.scopeManager.register(instance,scope);}}unregister(id){const instance=this.instances.get(id);if(!instance){return}this.scopeManager.unregister(instance);instance.destroy();this.instances.delete(id);}getInstance(id){return this.instances.get(id)}getInstancesByScope(scope){return this.scopeManager.getInstances(scope)}getAllInstances(){return Array.from(this.instances.values())}destroyScope(scope){const instances=this.scopeManager.getInstances(scope);for(const instance of instances){instance.destroy();this.instances.delete(instance.getId());}this.scopeManager.destroyScope(scope);}destroyAll(){for(const instance of this.instances.values()){instance.destroy();}this.instances.clear();this.scopeManager.destroyAll();}size(){return this.instances.size}constructor(){_define_property$B(this,"instances",new Map);_define_property$B(this,"scopeManager",void 0);this.scopeManager=new StateScopeManager;}}
61
-
62
- function _define_property$A(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class DerivedStateInstance{get(){if(this.destroyed){throw new Error(`DerivedStateInstance ${String(this.id)} has been destroyed`)}return this.value}set(_valueOrUpdater){throw new Error("Derived state cannot be set directly. Modify the dependency states instead.")}subscribe(subscriber){if(this.destroyed){throw new Error(`DerivedStateInstance ${String(this.id)} has been destroyed`)}this.subscribers.add(subscriber);return ()=>{this.subscribers.delete(subscriber);}}getId(){return this.id}getScope(){return this.scope}getDependencies(){return this.config.dependencies}recompute(){if(this.destroyed||this.recomputing){return}this.recomputing=true;try{const dependencyValues=this.config.dependencies.map(dep=>dep.get());const newValue=this.config.derive(dependencyValues);const hasChanged=this.config.equalityCheck?!this.config.equalityCheck(this.value,newValue):this.value!==newValue;if(hasChanged){const previousValue=this.value;this.value=newValue;this.notifySubscribers(this.value,previousValue);}}catch(error){console.error(`[DerivedStateInstance] Error recomputing ${String(this.id)}:`,error);}finally{this.recomputing=false;}}destroy(){if(this.destroyed){return}this.destroyed=true;for(const unsubscribe of this.dependencyUnsubscribes){unsubscribe();}this.dependencyUnsubscribes.length=0;this.subscribers.clear();}isDestroyed(){return this.destroyed}setupDependencies(){for(const dependency of this.config.dependencies){const unsubscribe=dependency.subscribe(()=>{this.recompute();});this.dependencyUnsubscribes.push(unsubscribe);}}notifySubscribers(value,previous){const subscribers=Array.from(this.subscribers);for(const subscriber of subscribers){try{subscriber(value,previous);}catch(error){console.error(`[DerivedStateInstance] Error in subscriber for ${String(this.id)}:`,error);}}}constructor(config,options={}){_define_property$A(this,"id",void 0);_define_property$A(this,"scope",void 0);_define_property$A(this,"config",void 0);_define_property$A(this,"value",void 0);_define_property$A(this,"subscribers",new Set);_define_property$A(this,"dependencyUnsubscribes",[]);_define_property$A(this,"destroyed",false);_define_property$A(this,"recomputing",false);this.config=config;this.id=options.id??Symbol("DerivedStateInstance");this.scope=options.scope;this.setupDependencies();this.recompute();}}
63
-
64
- function _define_property$z(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class DefaultAdapter{createInstance(initialValue,options){if(this.destroyed){throw new Error("Adapter has been destroyed")}const instance=new StateInstance(initialValue,{id:options?.id,scope:options?.scope,devMode:options?.devMode,middleware:options?.middleware});this.instances.add(instance);return instance}destroy(){if(this.destroyed){return}for(const instance of this.instances){instance.destroy();}this.instances.clear();this.destroyed=true;}getName(){return this.name}constructor(){_define_property$z(this,"name","DefaultAdapter");_define_property$z(this,"destroyed",false);_define_property$z(this,"instances",new Set);}}
65
-
66
- function _define_property$y(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class AdapterFactory{static getDefaultAdapter(){if(!this.defaultAdapter){this.defaultAdapter=new DefaultAdapter;}return this.defaultAdapter}static createAdapter(adapterName){if(!adapterName){return this.getDefaultAdapter()}const factory=this.customAdapters.get(adapterName);if(!factory){throw new Error(`Adapter "${adapterName}" not found. Available adapters: ${Array.from(this.customAdapters.keys()).join(", ")}`)}return factory()}static registerAdapter(name,factory){if(this.customAdapters.has(name)){console.warn(`[AdapterFactory] Adapter "${name}" already registered, replacing...`);}this.customAdapters.set(name,factory);}static unregisterAdapter(name){this.customAdapters.delete(name);}static getRegisteredAdapters(){return Array.from(this.customAdapters.keys())}static reset(){if(this.defaultAdapter){this.defaultAdapter.destroy();this.defaultAdapter=null;}this.customAdapters.clear();}}_define_property$y(AdapterFactory,"defaultAdapter",null);_define_property$y(AdapterFactory,"customAdapters",new Map);
67
-
68
- function _define_property$x(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}let ReduxStateInstance=class ReduxStateInstance{get(){if(this.destroyed){throw new Error(`ReduxStateInstance ${String(this.id)} has been destroyed`)}const state=this.store.getState();return state[this.sliceName]??this.previousValue}set(valueOrUpdater){if(this.destroyed){throw new Error(`ReduxStateInstance ${String(this.id)} has been destroyed`)}const currentValue=this.get();let newValue;if(typeof valueOrUpdater==="function"){newValue=valueOrUpdater(currentValue);}else {newValue=valueOrUpdater;}let processedValue=newValue;for(const middleware of this.middleware){processedValue=middleware(processedValue,currentValue);}if(processedValue===currentValue){return}this.previousValue=currentValue;const action=this.actions.setValue(processedValue);this.store.dispatch(action);if(this.devMode){console.debug(`[ReduxStateInstance] Updated: ${String(this.id)}`,{previous:currentValue,current:processedValue,action});}}subscribe(subscriber){if(this.destroyed){throw new Error(`ReduxStateInstance ${String(this.id)} has been destroyed`)}this.subscribers.add(subscriber);if(this.devMode){console.debug(`[ReduxStateInstance] Subscribed: ${String(this.id)}`,{subscriberCount:this.subscribers.size});}return ()=>{this.subscribers.delete(subscriber);if(this.devMode){console.debug(`[ReduxStateInstance] Unsubscribed: ${String(this.id)}`,{subscriberCount:this.subscribers.size});}}}getId(){return this.id}getScope(){return this.scope}destroy(){if(this.destroyed){return}this.destroyed=true;if(this.unsubscribeStore){this.unsubscribeStore();this.unsubscribeStore=undefined;}this.subscribers.clear();if(this.devMode){console.debug(`[ReduxStateInstance] Destroyed: ${String(this.id)}`);}}isDestroyed(){return this.destroyed}notifySubscribers(){if(this.destroyed){return}try{const currentValue=this.get();if(currentValue===this.previousValue){return}const previousValue=this.previousValue;this.previousValue=currentValue;const subscribers=Array.from(this.subscribers);for(const subscriber of subscribers){try{subscriber(currentValue,previousValue);}catch(error){console.error(`[ReduxStateInstance] Error in subscriber for ${String(this.id)}:`,error);}}}catch(error){console.error(`[ReduxStateInstance] Error getting state for ${String(this.id)}:`,error);}}constructor(store,sliceName,actions,initialValue,options={}){_define_property$x(this,"id",void 0);_define_property$x(this,"scope",void 0);_define_property$x(this,"store",void 0);_define_property$x(this,"sliceName",void 0);_define_property$x(this,"actions",void 0);_define_property$x(this,"subscribers",new Set);_define_property$x(this,"unsubscribeStore",void 0);_define_property$x(this,"destroyed",false);_define_property$x(this,"devMode",void 0);_define_property$x(this,"middleware",void 0);_define_property$x(this,"previousValue",void 0);this.store=store;this.sliceName=sliceName;this.actions=actions;this.id=options.id??Symbol("ReduxStateInstance");this.scope=options.scope;this.devMode=options.devMode??false;this.middleware=options.middleware??[];this.previousValue=initialValue;this.unsubscribeStore=this.store.subscribe(()=>{this.notifySubscribers();});if(this.devMode){console.debug(`[ReduxStateInstance] Created: ${String(this.id)}`,{scope:this.scope,sliceName:this.sliceName,initialValue});}}};let DynamicReducerManager=class DynamicReducerManager{addReducer(key,reducer){this.reducers.set(key,reducer);}removeReducer(key){this.reducers.delete(key);}getRootReducer(){return this.rootReducer}hasReducer(key){return this.reducers.has(key)}constructor(){_define_property$x(this,"reducers",new Map);_define_property$x(this,"rootReducer",void 0);this.rootReducer=(state,action)=>{const stateRecord=state??{};const newState={...stateRecord};for(const[key,reducer]of this.reducers.entries()){newState[key]=reducer(stateRecord[key],action);}return newState};}};class ReduxAdapter{checkReduxAvailable(){}getOrCreateStore(){if(this.store){return this.store}try{const{configureStore}=require("@reduxjs/toolkit");this.store=configureStore({reducer:this.reducerManager.getRootReducer(),devTools:this.devMode,middleware:undefined});if(this.devMode){console.debug("[ReduxAdapter] Redux store created");}return this.store}catch(error){throw new Error("ReduxAdapter requires @reduxjs/toolkit to be installed. "+"Please install it: npm install @reduxjs/toolkit\n"+`Original error: ${error instanceof Error?error.message:String(error)}`)}}createSlice(sliceName,initialValue){try{const{createSlice}=require("@reduxjs/toolkit");const slice=createSlice({name:sliceName,initialState:initialValue,reducers:{setValue:(_state,action)=>{return action.payload??initialValue}}});return slice}catch(error){throw new Error("ReduxAdapter requires @reduxjs/toolkit to be installed. "+"Please install it: npm install @reduxjs/toolkit\n"+`Original error: ${error instanceof Error?error.message:String(error)}`)}}createInstance(initialValue,options){if(this.destroyed){throw new Error("ReduxAdapter has been destroyed")}const store=this.getOrCreateStore();const sliceName=options?.id?`secra_${String(options.id)}`:`secra_slice_${++this.sliceCounter}`;const slice=this.createSlice(sliceName,initialValue);if(!this.reducerManager.hasReducer(sliceName)){this.reducerManager.addReducer(sliceName,slice.reducer);store.replaceReducer(this.reducerManager.getRootReducer());}const instance=new ReduxStateInstance(store,sliceName,slice.actions,initialValue,{id:options?.id,scope:options?.scope,devMode:options?.devMode??this.devMode,middleware:options?.middleware});this.instances.add(instance);this.sliceToInstance.set(sliceName,instance);if(this.devMode){console.debug(`[ReduxAdapter] Created instance: ${String(instance.getId())}`,{sliceName,scope:options?.scope});}return instance}destroy(){if(this.destroyed){return}for(const instance of this.instances){instance.destroy();}for(const sliceName of this.sliceToInstance.keys()){this.reducerManager.removeReducer(sliceName);}if(this.store){this.store.replaceReducer(this.reducerManager.getRootReducer());}this.instances.clear();this.sliceToInstance.clear();this.store=null;this.destroyed=true;if(this.devMode){console.debug("[ReduxAdapter] Destroyed");}}getName(){return this.name}constructor(options){_define_property$x(this,"name","ReduxAdapter");_define_property$x(this,"destroyed",false);_define_property$x(this,"instances",new Set);_define_property$x(this,"store",null);_define_property$x(this,"sliceCounter",0);_define_property$x(this,"sliceToInstance",new Map);_define_property$x(this,"reducerManager",void 0);_define_property$x(this,"devMode",void 0);this.devMode=options?.devMode??false;this.reducerManager=new DynamicReducerManager;this.store=options?.store??null;this.checkReduxAvailable();}}
69
-
70
- function _define_property$w(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class ZustandAdapter{createInstance(_initialValue,_options){if(this.destroyed){throw new Error("Adapter has been destroyed")}throw new Error("ZustandAdapter is a placeholder implementation. "+"To use Zustand, you need to:\n"+"1. Install zustand\n"+"2. Implement a complete Zustand store integration\n"+"3. Map Zustand store methods to IStateInstance interface\n"+"See docs/state-manager.md for implementation guide.")}destroy(){if(this.destroyed){return}for(const instance of this.instances){instance.destroy();}this.instances.clear();this.destroyed=true;}getName(){return this.name}constructor(){_define_property$w(this,"name","ZustandAdapter");_define_property$w(this,"destroyed",false);_define_property$w(this,"instances",new Set);}}
71
-
72
- function _define_property$v(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class StateManager{createState(initialValue,options){if(this.destroyed){throw new Error("StateManager has been destroyed")}const mergedOptions={...options,scope:options?.scope??this.defaultScope,devMode:options?.devMode??this.devMode};const instance=this.adapter.createInstance(initialValue,mergedOptions);if(this.registry){this.registry.register(instance);}return instance}createDerivedState(config,options){if(this.destroyed){throw new Error("StateManager has been destroyed")}const mergedOptions={...options,scope:options?.scope??this.defaultScope};const instance=new DerivedStateInstance(config,mergedOptions);if(this.registry){this.registry.register(instance);}return instance}getState(id){if(!this.registry){throw new Error("Registry is not enabled. Enable it in StateManagerOptions.")}return this.registry.getInstance(id)}getStatesByScope(scope){if(!this.registry){throw new Error("Registry is not enabled. Enable it in StateManagerOptions.")}return this.registry.getInstancesByScope(scope)}getAllStates(){if(!this.registry){throw new Error("Registry is not enabled. Enable it in StateManagerOptions.")}return this.registry.getAllInstances()}destroyScope(scope){if(!this.registry){throw new Error("Registry is not enabled. Enable it in StateManagerOptions.")}this.registry.destroyScope(scope);}destroy(){if(this.destroyed){return}this.destroyed=true;if(this.registry){this.registry.destroyAll();}this.adapter.destroy();if(this.devMode){console.debug("[StateManager] Destroyed");}}isDestroyed(){return this.destroyed}getAdapter(){return this.adapter}getRegistry(){return this.registry}constructor(options={}){_define_property$v(this,"adapter",void 0);_define_property$v(this,"registry",void 0);_define_property$v(this,"defaultScope",void 0);_define_property$v(this,"devMode",void 0);_define_property$v(this,"destroyed",false);this.adapter=options.defaultAdapter??AdapterFactory.getDefaultAdapter();this.defaultScope=options.defaultScope;this.devMode=options.devMode??false;this.registry=options.enableRegistry!==false?new StateRegistry:null;if(this.devMode){console.debug("[StateManager] Initialized",{adapter:this.adapter.getName(),registryEnabled:!!this.registry,defaultScope:this.defaultScope});}}}
73
-
74
- function _define_property$u(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class AppEventBus{on(event,listener,options={}){const fullEventName=this.getFullEventName(event);const listenerId=Symbol(`listener_${++this.listenerIdCounter}`);const listenerWithOptions={listener:listener,options:{priority:options.priority??100,once:options.once??false,namespace:options.namespace??this.config.namespacePrefix,async:options.async??true},id:listenerId};if(!this.listeners.has(fullEventName)){this.listeners.set(fullEventName,new Set);}const listeners=this.listeners.get(fullEventName);listeners.add(listenerWithOptions);const sortedListeners=Array.from(listeners).sort((a,b)=>a.options.priority-b.options.priority);this.listeners.set(fullEventName,new Set(sortedListeners));return ()=>{const currentListeners=this.listeners.get(fullEventName);if(currentListeners){currentListeners.delete(listenerWithOptions);if(currentListeners.size===0){this.listeners.delete(fullEventName);}}}}off(event,listener){const fullEventName=this.getFullEventName(event);const listeners=this.listeners.get(fullEventName);if(!listeners){return}if(listener){for(const item of listeners){if(item.listener===listener){listeners.delete(item);break}}}else {listeners.clear();}if(listeners.size===0){this.listeners.delete(fullEventName);}}once(event,listener,options){return this.on(event,listener,{...options,once:true})}async emit(event,data,metadata){const fullEventName=this.getFullEventName(event);const startTime=this.config.enablePerformanceMonitoring?performance.now():0;if(this.config.enableValidation&&!this.config.validator(fullEventName,data)){logger.logger.warn(`事件 ${fullEventName} 验证失败,已忽略`);return}if(this.config.enableSecurityMode&&metadata?.source){if(!this.config.allowedSources.includes(metadata.source)){logger.logger.warn(`事件 ${fullEventName} 的来源 ${metadata.source} 不在白名单中,已忽略`);return}}const eventMetadata={source:metadata?.source,timestamp:metadata?.timestamp??Date.now(),eventId:metadata?.eventId??`event_${++this.eventCounter}`,priority:metadata?.priority??0,instanceId:metadata?.instanceId??this.config.instanceId,namespace:metadata?.namespace??this.config.namespacePrefix,...metadata};const eventWrapper={data:data,metadata:eventMetadata};if(this.middlewares.length>0){let middlewareIndex=0;let nextCalled=false;const executeMiddleware=async()=>{if(middlewareIndex<this.middlewares.length){nextCalled=false;const currentIndex=middlewareIndex;const middleware=this.middlewares[middlewareIndex++];const next=async()=>{nextCalled=true;if(currentIndex<this.middlewares.length-1){await executeMiddleware();}};await Promise.resolve(middleware(fullEventName,data,eventMetadata,next));if(!nextCalled){return}}};await executeMiddleware();if(!nextCalled&&this.middlewares.length>0){return}}const listeners=this.listeners.get(fullEventName);if(this.config.enableTracking){const executionTime=this.config.enablePerformanceMonitoring?performance.now()-startTime:undefined;this.recordEventHistory(fullEventName,data,eventMetadata,executionTime);}if(!listeners||listeners.size===0){this.updateStats(fullEventName,0);return}const executionPromises=[];const listenersToRemove=[];for(const listenerWithOptions of listeners){const executeListener=async()=>{try{if(listenerWithOptions.options.async){await Promise.resolve(listenerWithOptions.listener(eventWrapper.data,eventWrapper.metadata));}else {listenerWithOptions.listener(eventWrapper.data,eventWrapper.metadata);}if(listenerWithOptions.options.once){listenersToRemove.push(listenerWithOptions);}}catch(error){logger.logger.error(`事件 ${fullEventName} 的监听器执行失败:`,error);}};executionPromises.push(executeListener());}await Promise.allSettled(executionPromises);for(const listenerToRemove of listenersToRemove){listeners.delete(listenerToRemove);}if(listeners.size===0){this.listeners.delete(fullEventName);}const executionTime=this.config.enablePerformanceMonitoring?performance.now()-startTime:0;this.updateStats(fullEventName,executionTime,listeners.size);}emitSync(event,data,metadata){this.emit(event,data,metadata).catch(error=>{logger.logger.error(`同步发布事件 ${event} 失败:`,error);});}use(middleware){this.middlewares.push(middleware);return ()=>{const index=this.middlewares.indexOf(middleware);if(index>-1){this.middlewares.splice(index,1);}}}clear(){this.listeners.clear();}clearHistory(){this.eventHistory=[];}listenerCount(event){if(event){const fullEventName=this.getFullEventName(event);return this.listeners.get(fullEventName)?.size||0}let count=0;for(const listeners of this.listeners.values()){count+=listeners.size;}return count}eventNames(){return Array.from(this.listeners.keys())}getEventHistory(event,limit){if(!this.config.enableTracking){return []}let history=this.eventHistory;if(event){const fullEventName=this.getFullEventName(event);history=history.filter(h=>h.event===fullEventName);}if(limit){history=history.slice(-limit);}return [...history]}getStats(event){if(event){const fullEventName=this.getFullEventName(event);return this.stats.get(fullEventName)||{event:fullEventName,count:0,avgExecutionTime:0,listenerCount:0,lastTriggered:0}}return new Map(this.stats)}getConfig(){return {...this.config}}updateConfig(config){this.config={...this.config,...config};}destroy(){this.clear();this.clearHistory();this.middlewares=[];this.stats.clear();}getFullEventName(event){if(this.config.namespacePrefix){return `${this.config.namespacePrefix}${event}`}return event}recordEventHistory(event,data,metadata,executionTime){this.eventHistory.push({event,data,metadata,executionTime});if(this.eventHistory.length>this.config.maxHistorySize){this.eventHistory.shift();}}updateStats(event,executionTime,listenerCount=0){if(!this.config.enablePerformanceMonitoring){return}const existingStats=this.stats.get(event);if(existingStats){const totalTime=existingStats.avgExecutionTime*existingStats.count+executionTime;const newCount=existingStats.count+1;this.stats.set(event,{...existingStats,count:newCount,avgExecutionTime:totalTime/newCount,listenerCount,lastTriggered:Date.now()});}else {this.stats.set(event,{event,count:1,avgExecutionTime:executionTime,listenerCount,lastTriggered:Date.now()});}}constructor(config={}){_define_property$u(this,"listeners",new Map);_define_property$u(this,"eventHistory",[]);_define_property$u(this,"middlewares",[]);_define_property$u(this,"stats",new Map);_define_property$u(this,"config",void 0);_define_property$u(this,"eventCounter",0);_define_property$u(this,"listenerIdCounter",0);this.config={enableTracking:config.enableTracking??process.env.NODE_ENV==="development",maxHistorySize:config.maxHistorySize??100,enableValidation:config.enableValidation??false,validator:config.validator??(()=>true),enablePerformanceMonitoring:config.enablePerformanceMonitoring??process.env.NODE_ENV==="development",namespacePrefix:config.namespacePrefix??"",instanceId:config.instanceId,enableSecurityMode:config.enableSecurityMode??false,allowedSources:config.allowedSources??[]};}}
75
-
76
- async function withRetry(fn,config={},serviceName){const maxRetries=config.maxRetries??3;const retryDelay=config.retryDelay??1e3;const exponentialBackoff=config.exponentialBackoff??true;let lastError;for(let attempt=0;attempt<=maxRetries;attempt++){try{return await fn()}catch(error){lastError=error;if(attempt<maxRetries){const delay=exponentialBackoff?retryDelay*Math.pow(2,attempt):retryDelay;logger.logger.warn(`${serviceName} 初始化失败(尝试 ${attempt+1}/${maxRetries+1}),${delay}ms 后重试...`,error);await new Promise(resolve=>setTimeout(resolve,delay));}}}logger.logger.error(`${serviceName} 初始化失败,已重试 ${maxRetries} 次`);throw lastError}async function initializeServices(options={}){const startTime=performance.now();const retryConfig={maxRetries:options.serviceRetry?.maxRetries??3,retryDelay:options.serviceRetry?.retryDelay??1e3,exponentialBackoff:options.serviceRetry?.exponentialBackoff??true};const monitoringPromise=withRetry(()=>Promise.resolve(monitoring.initMonitoring({...options.errorMonitor,onError:error=>{logger.logger.error("监控服务捕获到错误:",error);options.errorMonitor?.onError?.(error);}})),retryConfig,"监控服务");const storagePromise=withRetry(()=>Promise.resolve().then(()=>{storage.initialize(options.storageOptions);return storage}),retryConfig,"存储服务");const stateManagerPromise=withRetry(()=>Promise.resolve().then(()=>{if(options.stateManager!==undefined){return new StateManager(options.stateManager)}else {return new StateManager({enableRegistry:true,defaultScope:"app"})}}),retryConfig,"状态管理器");const eventBusPromise=withRetry(()=>Promise.resolve().then(()=>{const eventBusConfig={enableTracking:options.eventBus?.enableTracking??process.env.NODE_ENV==="development",maxHistorySize:options.eventBus?.maxHistorySize??100,enableValidation:options.eventBus?.enableValidation??false,enablePerformanceMonitoring:options.eventBus?.enablePerformanceMonitoring??process.env.NODE_ENV==="development",namespacePrefix:options.eventBus?.namespacePrefix,instanceId:options.eventBus?.instanceId,enableSecurityMode:options.eventBus?.enableSecurityMode??false,allowedSources:options.eventBus?.allowedSources};return new AppEventBus(eventBusConfig)}),retryConfig,"事件总线");const[monitoring$1,,stateManager,eventBus]=await Promise.all([monitoringPromise,storagePromise,stateManagerPromise,eventBusPromise]);logger.logger.info("关键服务初始化完成");const performanceMonitor=new vlianUtils.PerformanceMonitor({...options.performanceMonitor,onReport:metrics=>{monitoring$1.reportPerformance(metrics);options.performanceMonitor?.onReport?.(metrics);}});if(typeof window!=="undefined"){const cleanupHandler=()=>{performanceMonitor.disconnect();window.removeEventListener("beforeunload",cleanupHandler);};window.addEventListener("beforeunload",cleanupHandler);}const criticalServicesDuration=performance.now()-startTime;logger.logger.debug(`关键服务初始化完成,耗时: ${criticalServicesDuration.toFixed(2)}ms`);const initializeNonCriticalServices=async()=>{const nonCriticalStartTime=performance.now();const scheduleInit=callback=>{if(typeof window!=="undefined"&&"requestIdleCallback"in window){window.requestIdleCallback(callback,{timeout:5e3});}else {setTimeout(callback,100);}};return new Promise(resolve=>{scheduleInit(async()=>{try{if(options.analytics){try{await withRetry(()=>Promise.resolve().then(function () { return analytics; }).then(({initAnalytics})=>{initAnalytics(options.analytics);return true}),retryConfig,"分析服务");logger.logger.debug("分析服务初始化完成");}catch(error){logger.logger.warn("分析服务初始化失败(不影响应用运行):",error);}}if(options.runtimeSecurity){try{await withRetry(()=>Promise.resolve().then(function () { return runtimeSecurity; }).then(({RuntimeSecurity})=>{RuntimeSecurity.initialize(options.runtimeSecurity);return true}),retryConfig,"运行时安全服务");logger.logger.debug("运行时安全服务初始化完成");}catch(error){logger.logger.warn("运行时安全服务初始化失败(不影响应用运行):",error);}}const nonCriticalDuration=performance.now()-nonCriticalStartTime;logger.logger.debug(`非关键服务初始化完成,耗时: ${nonCriticalDuration.toFixed(2)}ms`);}catch(error){logger.logger.warn("非关键服务初始化过程中出现错误:",error);}finally{resolve();}});})};if(monitoring$1.reportPerformance){monitoring$1.reportPerformance({serviceInitDuration:criticalServicesDuration});}return {monitoring: monitoring$1,performanceMonitor,stateManager,eventBus,initializeNonCriticalServices}}
77
-
78
- function _define_property$t(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}let AppConfigManager=class AppConfigManager{static getInstance(){if(!AppConfigManager.instance){AppConfigManager.instance=new AppConfigManager;}return AppConfigManager.instance}initialize(config){this._config={theme:config.theme||{mode:"light"},locale:config.locale||"zh-CN",antdConfig:config.antdConfig,initializationContext:config.initializationContext};}getConfig(){return {...this._config}}getTheme(){return {...this._config.theme}}setTheme(theme){if(typeof theme==="function"){this._config.theme=theme(this._config.theme);}else {this._config.theme={...theme};}}getLocale(){return this._config.locale}setLocale(locale){this._config.locale=locale;}getAntdConfig(){return this._config.antdConfig}setAntdConfig(config){this._config.antdConfig=config;}getInitializationContext(){return this._config.initializationContext}setInitializationContext(context){this._config.initializationContext=context;}constructor(){_define_property$t(this,"_config",void 0);this._config={theme:{mode:"light"},locale:"zh-CN"};}};_define_property$t(AppConfigManager,"instance",null);const appConfig=AppConfigManager.getInstance();
79
-
80
- const ThemeContext=React.createContext(undefined);const LocaleContext=React.createContext(undefined);const ConfigContext=React.createContext(undefined);const StateManagerContext=React.createContext(undefined);const ThemeProvider=React.memo(({children,initialTheme})=>{const[theme,setThemeState]=React.useState(initialTheme||appConfig.getTheme());const applyDocumentThemeClass=React.useCallback(mode=>{if(typeof window==="undefined"){return}const html=document.documentElement;html.classList.remove("light","dark");const resolvedMode=mode==="system"?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":mode||"light";html.classList.add(resolvedMode);},[]);React.useEffect(()=>{appConfig.setTheme(theme);},[theme]);React.useEffect(()=>{if(typeof window==="undefined"){return}applyDocumentThemeClass(theme.mode);if(theme.mode!=="system"){return}const mediaQuery=window.matchMedia("(prefers-color-scheme: dark)");const onSystemThemeChange=()=>applyDocumentThemeClass("system");if(typeof mediaQuery.addEventListener==="function"){mediaQuery.addEventListener("change",onSystemThemeChange);return ()=>mediaQuery.removeEventListener("change",onSystemThemeChange)}mediaQuery.addListener(onSystemThemeChange);return ()=>mediaQuery.removeListener(onSystemThemeChange)},[applyDocumentThemeClass,theme.mode]);const setTheme=React.useCallback(newTheme=>{setThemeState(prev=>{return typeof newTheme==="function"?newTheme(prev):newTheme});},[]);const value=React.useMemo(()=>({theme,setTheme}),[theme,setTheme]);return jsxRuntime.jsx(ThemeContext.Provider,{value:value,children:children})});ThemeProvider.displayName="ThemeProvider";const LocaleProvider=React.memo(({children,initialLocale})=>{const[locale,setLocaleState]=React.useState(initialLocale||appConfig.getLocale());const[isChanging,setIsChanging]=React.useState(false);React.useEffect(()=>{appConfig.setLocale(locale);},[locale]);const setLocale=React.useCallback(newLocale=>{if(newLocale===locale){return}setIsChanging(true);setLocaleState(newLocale);setLang(newLocale);requestAnimationFrame(()=>{setIsChanging(false);});},[locale]);const value=React.useMemo(()=>({locale,setLocale,isChanging}),[locale,setLocale,isChanging]);return jsxRuntime.jsx(LocaleContext.Provider,{value:value,children:children})});LocaleProvider.displayName="LocaleProvider";const AppConfigProvider=React.memo(({children,initialAntdConfig,initialInitializationContext})=>{const[antdConfig,setAntdConfigState]=React.useState(initialAntdConfig||appConfig.getAntdConfig());const[initializationContext,setInitializationContextState]=React.useState(initialInitializationContext||appConfig.getInitializationContext());React.useEffect(()=>{appConfig.setAntdConfig(antdConfig);},[antdConfig]);React.useEffect(()=>{appConfig.setInitializationContext(initializationContext);},[initializationContext]);const setAntdConfig=React.useCallback(config=>{setAntdConfigState(config);},[]);const setInitializationContext=React.useCallback(context=>{setInitializationContextState(context);},[]);const value=React.useMemo(()=>({antdConfig,initializationContext,setAntdConfig,setInitializationContext}),[antdConfig,initializationContext,setAntdConfig,setInitializationContext]);return jsxRuntime.jsx(ConfigContext.Provider,{value:value,children:children})});AppConfigProvider.displayName="AppConfigProvider";const StateManagerProvider=React.memo(({children,stateManager})=>{const value=React.useMemo(()=>({stateManager:stateManager??null}),[stateManager]);return jsxRuntime.jsx(StateManagerContext.Provider,{value:value,children:children})});StateManagerProvider.displayName="StateManagerProvider";const AppContextProvider=({children,initialTheme,initialLocale,initialAntdConfig,initialInitializationContext,stateManager,antdApp:_antdApp,uiApp:_uiApp})=>{const initializedRef=React.useRef(false);React.useEffect(()=>{if(!initializedRef.current){appConfig.initialize({theme:initialTheme,locale:initialLocale,antdConfig:initialAntdConfig,initializationContext:initialInitializationContext});initializedRef.current=true;}},[initialTheme,initialLocale,initialAntdConfig,initialInitializationContext]);return jsxRuntime.jsx(ThemeProvider,{initialTheme:initialTheme,children:jsxRuntime.jsx(LocaleProvider,{initialLocale:initialLocale,children:jsxRuntime.jsx(AppConfigProvider,{initialAntdConfig:initialAntdConfig,initialInitializationContext:initialInitializationContext,children:jsxRuntime.jsx(StateManagerProvider,{stateManager:stateManager,children:children})})})})};const useTheme=()=>{const context=React.useContext(ThemeContext);if(context===undefined){throw new Error("useTheme 必须在 AppContextProvider 内使用")}return context};const useLocale=()=>{const context=React.useContext(LocaleContext);if(context===undefined){throw new Error("useLocale 必须在 AppContextProvider 内使用")}return context};const useConfig=()=>{const context=React.useContext(ConfigContext);if(context===undefined){throw new Error("useConfig 必须在 AppContextProvider 内使用")}return context};const useStateManager=()=>{const context=React.useContext(StateManagerContext);if(context===undefined){throw new Error("useStateManager 必须在 AppContextProvider 内使用")}return context.stateManager};const useAppContext=()=>{const themeContext=useTheme();const localeContext=useLocale();const configContext=useConfig();const stateManagerContext=useStateManager();return React.useMemo(()=>({theme:themeContext.theme,locale:localeContext.locale,antdConfig:configContext.antdConfig,initializationContext:configContext.initializationContext,stateManager:stateManagerContext,setTheme:themeContext.setTheme,setLocale:localeContext.setLocale,setAntdConfig:configContext.setAntdConfig,setInitializationContext:configContext.setInitializationContext}),[themeContext.theme,localeContext.locale,configContext.antdConfig,configContext.initializationContext,stateManagerContext,themeContext.setTheme,localeContext.setLocale,configContext.setAntdConfig,configContext.setInitializationContext])};
81
-
82
- const cardStyle={background:"rgba(255, 255, 255, 0.96)",borderRadius:10,boxShadow:"0 6px 20px rgba(0, 0, 0, 0.14)",padding:20};const DefaultApp=React.memo(({title,description})=>{const displayTitle=title||$t("defaultApp.title");const displayDescription=description||$t("defaultApp.description");return jsxRuntime.jsx("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",padding:24,background:"linear-gradient(130deg, #274c77 0%, #2c7da0 42%, #61a5c2 100%)"},children:jsxRuntime.jsxs("div",{style:{maxWidth:860,width:"100%"},children:[jsxRuntime.jsxs("div",{style:{textAlign:"center",marginBottom:28,color:"#fff"},children:[jsxRuntime.jsx("div",{style:{fontSize:56,lineHeight:"60px",marginBottom:12},children:"🚀"}),jsxRuntime.jsx("h1",{style:{margin:0,fontSize:34},children:displayTitle}),jsxRuntime.jsx("p",{style:{marginTop:12,opacity:.9},children:displayDescription})]}),jsxRuntime.jsxs("div",{style:{display:"grid",gap:16},children:[jsxRuntime.jsxs("section",{style:cardStyle,children:[jsxRuntime.jsxs("h2",{style:{marginTop:0},children:["💻 ",$t("defaultApp.quickStart.title")]}),jsxRuntime.jsx("p",{children:$t("defaultApp.quickStart.description")}),jsxRuntime.jsx("pre",{style:{margin:0,background:"#f4f6f8",borderRadius:8,padding:12,overflowX:"auto"},children:$t("defaultApp.quickStart.code")})]}),jsxRuntime.jsxs("section",{style:cardStyle,children:[jsxRuntime.jsxs("h2",{style:{marginTop:0},children:["📚 ",$t("defaultApp.nextSteps.title")]}),jsxRuntime.jsxs("ul",{style:{paddingLeft:20,marginBottom:0},children:[jsxRuntime.jsx("li",{children:$t("defaultApp.nextSteps.step1")}),jsxRuntime.jsx("li",{children:$t("defaultApp.nextSteps.step2")}),jsxRuntime.jsx("li",{children:$t("defaultApp.nextSteps.step3")})]})]})]}),jsxRuntime.jsx("p",{style:{textAlign:"center",color:"rgba(255,255,255,0.88)",marginTop:18},children:$t("defaultApp.footer")})]})})});DefaultApp.displayName="DefaultApp";
83
-
84
- const BasicLayout=React.memo(({children,configProps:externalConfigProps,globalProvider})=>{const{antdConfig,theme}=useAppContext();const[isSystemDark,setIsSystemDark]=React.useState(()=>{if(typeof window==="undefined"){return false}return window.matchMedia("(prefers-color-scheme: dark)").matches});const finalConfigProps=antdConfig||externalConfigProps;React.useEffect(()=>{if(typeof window==="undefined"){return}const mediaQuery=window.matchMedia("(prefers-color-scheme: dark)");const updateSystemTheme=event=>{setIsSystemDark(event.matches);};setIsSystemDark(mediaQuery.matches);if(typeof mediaQuery.addEventListener==="function"){mediaQuery.addEventListener("change",updateSystemTheme);return ()=>mediaQuery.removeEventListener("change",updateSystemTheme)}mediaQuery.addListener(updateSystemTheme);return ()=>mediaQuery.removeListener(updateSystemTheme)},[]);const resolvedMode=theme.mode==="system"?isSystemDark?"dark":"light":theme.mode;const cssVars=React.useMemo(()=>{const vars={};if(theme.primaryColor){vars["--app-primary-color"]=theme.primaryColor;}if(finalConfigProps&&typeof finalConfigProps==="object"){const cssVariables=finalConfigProps.cssVariables;if(cssVariables&&typeof cssVariables==="object"){Object.entries(cssVariables).forEach(([key,value])=>{vars[`--${key}`]=String(value);});}}return vars},[finalConfigProps,theme.primaryColor]);const GlobalProvider=React.useMemo(()=>globalProvider?React.lazy(globalProvider):null,[globalProvider]);const renderedContent=React.useMemo(()=>{if(!GlobalProvider){return children}return jsxRuntime.jsx(React.Suspense,{fallback:null,children:jsxRuntime.jsx(GlobalProvider,{children:children})})},[GlobalProvider,children]);return jsxRuntime.jsx("div",{"data-theme-mode":resolvedMode,style:cssVars,children:renderedContent})});BasicLayout.displayName="BasicLayout";
85
-
86
- function _define_property$s(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class ErrorHandler{setMonitoring(monitoring){this.monitoring=monitoring;}async handleError(error,context){const normalizedError=vlianUtils.errorUtils.normalizeError(error);const errorWithContext=context?new vlianUtils.FrameworkError(normalizedError.message,normalizedError.type,normalizedError.severity,{code:normalizedError.code,originalError:normalizedError.originalError,context:{...normalizedError.context,...context},recoverable:normalizedError.recoverable}):normalizedError;const strategies=this.determineStrategies(errorWithContext);const handled=await this.executeStrategies(errorWithContext,strategies);let recoveredValue;let recoverable=false;if(handled&&errorWithContext.recoverable&&this.config.recoveryOptions){const recoveryResult=await this.attemptRecovery(errorWithContext);recoverable=recoveryResult.recoverable;recoveredValue=recoveryResult.value;}return {handled,recoverable,recoveredValue,strategies,error:errorWithContext}}determineStrategies(error){if(this.config.typeStrategies[error.type]){return this.config.typeStrategies[error.type]}if(this.config.severityStrategies[error.severity]){return this.config.severityStrategies[error.severity]}return this.config.defaultStrategies}async executeStrategies(error,strategies){let handled=false;for(const strategy of strategies){try{switch(strategy){case "LOG":this.logError(error);handled=true;break;case "REPORT":await this.reportError(error);handled=true;break;case "RECOVER":handled=true;break;case "FALLBACK":handled=true;break;case "IGNORE":handled=true;break}}catch(strategyError){logger.logger.warn(`错误处理策略 ${strategy} 执行失败:`,strategyError);}}return handled}logError(error){const errorInfo=vlianUtils.errorUtils.extractErrorInfo(error);switch(error.severity){case vlianUtils.ErrorSeverity.CRITICAL:case vlianUtils.ErrorSeverity.HIGH:logger.logger.error("错误:",errorInfo);break;case vlianUtils.ErrorSeverity.MEDIUM:logger.logger.warn("警告:",errorInfo);break;case vlianUtils.ErrorSeverity.LOW:logger.logger.info("信息:",errorInfo);break}if(this.config.showDetailedErrorsInDev&&process.env.NODE_ENV==="development"){const detailedError=vlianUtils.errorUtils.formatErrorForDev(error);console.error(detailedError);}}async reportError(error){if(!this.monitoring){logger.logger.debug("监控服务未配置,跳过错误上报");return}try{this.monitoring.captureError(error,{severity:error.severity,type:error.type,code:error.code,context:error.context});}catch(reportError){logger.logger.warn("错误上报失败:",reportError);}}async attemptRecovery(error){const options=this.config.recoveryOptions;if(!options){return {recoverable:false}}const maxRetries=options.maxRetries??3;const retryDelay=options.retryDelay??1e3;const exponentialBackoff=options.exponentialBackoff??true;const shouldRetry=options.shouldRetry??(()=>true);if(options.fallback){try{const fallbackValue=await Promise.resolve(options.fallback());logger.logger.info("错误已通过降级方案恢复");return {recoverable:true,value:fallbackValue}}catch(fallbackError){logger.logger.warn("降级方案执行失败:",fallbackError);}}if(error.recoverable&&shouldRetry(error,0)){for(let attempt=0;attempt<maxRetries;attempt++){if(!shouldRetry(error,attempt)){break}const delay=exponentialBackoff?retryDelay*Math.pow(2,attempt):retryDelay;logger.logger.debug(`错误恢复重试 ${attempt+1}/${maxRetries},${delay}ms 后重试...`);await new Promise(resolve=>setTimeout(resolve,delay));}}return {recoverable:error.recoverable}}static create(config){return new ErrorHandler(config)}constructor(config={}){_define_property$s(this,"config",void 0);_define_property$s(this,"monitoring",void 0);this.monitoring=config.monitoring;this.config={defaultStrategies:config.defaultStrategies??["LOG","REPORT"],severityStrategies:config.severityStrategies??{},typeStrategies:config.typeStrategies??{},recoveryOptions:config.recoveryOptions??{},showDetailedErrorsInDev:config.showDetailedErrorsInDev??true};}}let defaultErrorHandler$1=null;function getDefaultErrorHandler(){if(!defaultErrorHandler$1){defaultErrorHandler$1=new ErrorHandler;}return defaultErrorHandler$1}
87
-
88
- function ErrorBoundary({children,fallback,onError,showInConsole=true,resetKeys,onReset,onResetKeysChange}){const retryCountRef=React.useRef(0);const errorHandler=React.useMemo(()=>getDefaultErrorHandler(),[]);const handleError=React.useCallback(async(error,errorInfo)=>{const normalizedError=vlianUtils.errorUtils.normalizeError(error);const reactErrorInfo={componentStack:errorInfo.componentStack||""};const handleResult=await errorHandler.handleError(normalizedError,{componentStack:reactErrorInfo.componentStack,source:"ErrorBoundary"});if(!handleResult.handled){logger.logger.error("错误边界捕获到错误:",{error:normalizedError.toJSON(),errorInfo:{componentStack:reactErrorInfo.componentStack}});}if(onError){onError(normalizedError,reactErrorInfo);}if(showInConsole){console.error("错误边界捕获到错误:",normalizedError);console.error("错误信息:",reactErrorInfo);}},[errorHandler,onError,showInConsole]);const handleReset=()=>{initializationErrorState.clearError();if(onReset){onReset();}};const DefaultFallbackComponent=React.memo(({error,resetErrorBoundary})=>{const normalizedError=vlianUtils.errorUtils.normalizeError(error);const[retryCount,setRetryCount]=React.useState(retryCountRef.current);const[showDetails,setShowDetails]=React.useState(false);React.useEffect(()=>{setRetryCount(retryCountRef.current);},[]);const handleRetry=React.useCallback(()=>{const newCount=retryCount+1;retryCountRef.current=newCount;setRetryCount(newCount);handleReset();resetErrorBoundary();},[retryCount,resetErrorBoundary]);const handleReload=React.useCallback(()=>{window.location.reload();},[]);const userFriendlyMessage=React.useMemo(()=>{if(normalizedError.code==="NETWORK_ERROR"){return "网络连接失败,请检查您的网络设置后再尝试"}if(normalizedError.code==="TIMEOUT_ERROR"){return "请求超时,请稍后再尝试"}if(normalizedError.code==="VALIDATION_ERROR"){return "数据验证失败,请检查输入内容"}return "应用运行时发生了错误,请稍后再尝试"},[normalizedError.code]);const extraButtons=React.useMemo(()=>{const buttons=[jsxRuntime.jsx("button",{onClick:handleRetry,"aria-label":"重试加载应用",style:{border:"none",background:"var(--app-primary-color, #2f80ed)",color:"#fff",borderRadius:6,padding:"8px 14px",cursor:"pointer"},children:"重试"},"retry"),jsxRuntime.jsx("button",{onClick:()=>setShowDetails(!showDetails),"aria-label":showDetails?"隐藏错误详情":"显示错误详情",style:{border:"1px solid #cfd7df",background:"#fff",color:"#1f2933",borderRadius:6,padding:"8px 14px",cursor:"pointer"},children:showDetails?"隐藏详情":"查看详情"},"details")];if(retryCount>=1){buttons.push(jsxRuntime.jsx("button",{onClick:handleReload,"aria-label":"刷新页面",style:{border:"1px solid #cfd7df",background:"#fff",color:"#1f2933",borderRadius:6,padding:"8px 14px",cursor:"pointer"},children:"刷新页面"},"reload"));}return buttons},[retryCount,handleRetry,handleReload,showDetails]);return jsxRuntime.jsxs("div",{role:"alert","aria-live":"assertive","aria-atomic":"true",style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",minHeight:"100vh",padding:"24px"},children:[jsxRuntime.jsxs("div",{style:{maxWidth:580,width:"100%",textAlign:"center",border:"1px solid #dde5ec",borderRadius:10,padding:24,background:"#fff"},children:[jsxRuntime.jsx("div",{style:{fontSize:40,lineHeight:"44px"},children:"⚠️"}),jsxRuntime.jsx("h2",{style:{margin:"8px 0 4px"},children:"出错了"}),jsxRuntime.jsx("p",{style:{marginTop:0,color:"#52606d"},children:userFriendlyMessage}),jsxRuntime.jsx("div",{style:{display:"flex",gap:8,justifyContent:"center",flexWrap:"wrap"},children:extraButtons})]}),showDetails&&jsxRuntime.jsxs("div",{style:{marginTop:24,padding:16,backgroundColor:"#f5f5f5",borderRadius:4,maxWidth:800,width:"100%",maxHeight:400,overflow:"auto"},children:[jsxRuntime.jsx("div",{style:{marginBottom:8,fontWeight:"bold"},children:"错误详情:"}),jsxRuntime.jsxs("div",{style:{fontFamily:"monospace",fontSize:12},children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("strong",{children:"错误类型:"}),normalizedError.name]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("strong",{children:"错误代码:"}),normalizedError.code]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("strong",{children:"错误信息:"}),normalizedError.message]}),normalizedError.stack&&jsxRuntime.jsxs("div",{style:{marginTop:8},children:[jsxRuntime.jsx("strong",{children:"堆栈信息:"}),jsxRuntime.jsx("pre",{style:{whiteSpace:"pre-wrap",wordBreak:"break-word"},children:normalizedError.stack})]})]})]})]})});DefaultFallbackComponent.displayName="DefaultFallbackComponent";const defaultFallback=({error,resetErrorBoundary})=>{return jsxRuntime.jsx(DefaultFallbackComponent,{error:error,resetErrorBoundary:resetErrorBoundary})};const fallbackRender=fallback?({error,resetErrorBoundary})=>{const normalizedError=vlianUtils.errorUtils.normalizeError(error);return fallback(normalizedError,()=>{handleReset();resetErrorBoundary();})}:defaultFallback;const handleResetWithCount=()=>{retryCountRef.current=0;handleReset();};const handleResetKeysChange=(prevKeys,nextKeys)=>{retryCountRef.current=0;if(onResetKeysChange){onResetKeysChange(prevKeys,nextKeys);}};const errorBoundaryProps={fallbackRender,onError:handleError,onReset:handleResetWithCount,resetKeys,onResetKeysChange:handleResetKeysChange};return jsxRuntime.jsx(reactErrorBoundary.ErrorBoundary,{...errorBoundaryProps,children:children})}function withErrorBoundary(Component,errorBoundaryProps){const WrappedComponent=props=>{return jsxRuntime.jsx(ErrorBoundary,{...errorBoundaryProps,children:jsxRuntime.jsx(Component,{...props})})};WrappedComponent.displayName=`withErrorBoundary(${Component.displayName||Component.name||"Component"})`;return WrappedComponent}function useErrorHandler(){return error=>{initializationErrorState.setError(error);}}
89
-
90
- function _define_property$r(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}let LRUCache=class LRUCache{get(key){const item=this.cache.get(key);if(item){item.accessTime=Date.now();this.cache.delete(key);this.cache.set(key,item);}return item}set(key,value){if(this.cache.has(key)){this.cache.delete(key);}else if(this.cache.size>=this.maxSize){const firstKey=this.cache.keys().next().value;if(firstKey){this.cache.delete(firstKey);}}value.accessTime=Date.now();this.cache.set(key,value);}delete(key){return this.cache.delete(key)}clear(){this.cache.clear();}size(){return this.cache.size}cleanupExpired(cacheTTL){const now=Date.now();for(const[key,item]of this.cache.entries()){if(now-item.timestamp>cacheTTL){this.cache.delete(key);}}}constructor(maxSize=50){_define_property$r(this,"cache",new Map);_define_property$r(this,"maxSize",void 0);this.maxSize=maxSize;}};let transformCache=null;const DEFAULT_OPTIONS={pathValidation:{enablePathValidation:true,allowedPathPrefixes:["@/","./","../"],maxPathLength:500,allowAbsolutePaths:false},performance:{enableCache:true,cacheTTL:5*60*1e3,maxCacheSize:50,maxRecursionDepth:100,enableParallelProcessing:true,parallelBatchSize:10},enableDebugLog:false};function optimizedHash(str){if(str.length<100){let hash=0;for(let i=0;i<str.length;i++){const char=str.charCodeAt(i);hash=(hash<<5)-hash+char;hash=hash&hash;}return Math.abs(hash).toString(36)}let hash=0;const step=Math.max(1,Math.floor(str.length/100));for(let i=0;i<str.length;i+=step){const char=str.charCodeAt(i);hash=(hash<<5)-hash+char;hash=hash&hash;}return Math.abs(hash).toString(36)}function simpleHash(str){return optimizedHash(str)}function serializeComponentRef(value){if(typeof value==="string"){return {str:value}}if(typeof value==="function"){const fnText=String(value);return {fn:`${value.name||"anonymous"}:${fnText.length}`}}return {}}function serializeRouteConfig(route){const page=serializeComponentRef(route.page);const layout=serializeComponentRef(route.layout);const routeError=serializeComponentRef(route.error??route.errors);const loading=serializeComponentRef(route.loading);return {name:route.name,path:route.path,page:page.str,pageFn:page.fn,layout:layout.str,layoutFn:layout.fn,error:routeError.str,errorFn:routeError.fn,loading:loading.str,loadingFn:loading.fn,isGroup:route.isGroup,enableRedirection:route.enableRedirection,handle:route.handle?{title:route.handle.title,order:route.handle.order,needLogin:route.handle.needLogin,roles:Array.isArray(route.handle.roles)?[...route.handle.roles]:undefined}:undefined,children:route.children?.map(child=>serializeRouteConfig(child))}}function generateConfigHash(routes){try{if(routes.length===0){return "empty"}const serializedRoutes=routes.map(route=>serializeRouteConfig(route));const configStr=JSON.stringify(serializedRoutes);return simpleHash(configStr)}catch{return ""}}const validatedPathCache=new Set;const PATH_TRAVERSAL_REGEX=/\.\.(\/|\\)|\.\.%2[Ff]|\.\.%5[Cc]|%2[Ee]%2[Ee]%2[Ff]|%2[Ee]%2[Ee]%5[Cc]/i;const ABSOLUTE_PATH_REGEX=/^\/|^[A-Za-z]:\\/;const CONTROL_CHAR_REGEX=/[\x00-\x1f\x7f]/;const NULL_BYTE_REGEX=/%00|\\0|\x00/;const URL_SCHEME_REGEX=/^[A-Za-z][A-Za-z0-9+.-]*:/;function validatePath(path,config){if(validatedPathCache.has(path)){return {valid:true}}if(path.length>config.maxPathLength){return {valid:false,error:process.env.NODE_ENV==="development"?`路径长度超过最大限制 ${config.maxPathLength} 字符`:"路径验证失败"}}if(path.length===0){return {valid:false,error:"路径不能为空"}}if(PATH_TRAVERSAL_REGEX.test(path)){return {valid:false,error:process.env.NODE_ENV==="development"?"路径包含路径遍历字符(../),可能存在安全风险":"路径验证失败"}}if(NULL_BYTE_REGEX.test(path)){return {valid:false,error:process.env.NODE_ENV==="development"?"路径包含空字节,可能存在安全风险":"路径验证失败"}}if(CONTROL_CHAR_REGEX.test(path)){return {valid:false,error:process.env.NODE_ENV==="development"?"路径包含控制字符,可能存在安全风险":"路径验证失败"}}if(URL_SCHEME_REGEX.test(path)){return {valid:false,error:process.env.NODE_ENV==="development"?"不允许使用带协议的路径":"路径验证失败"}}if(!config.allowAbsolutePaths&&ABSOLUTE_PATH_REGEX.test(path)){return {valid:false,error:process.env.NODE_ENV==="development"?"不允许使用绝对路径":"路径验证失败"}}if(!path.startsWith("@/")&&!path.startsWith("./")&&!path.startsWith("../")){return {valid:false,error:process.env.NODE_ENV==="development"?"仅允许使用 @/、./、../ 开头的模块路径":"路径验证失败"}}if(config.allowedPathPrefixes.length>0){const prefixSet=new Set(config.allowedPathPrefixes);const isAllowed=Array.from(prefixSet).some(prefix=>path.startsWith(prefix));if(!isAllowed){return {valid:false,error:process.env.NODE_ENV==="development"?`路径不在允许的前缀列表中: ${config.allowedPathPrefixes.join(", ")}`:"路径验证失败"}}}const validation=vlianUtils.SecurityUtils.validateInput(path);if(!validation.safe){return {valid:false,error:process.env.NODE_ENV==="development"?validation.reason||"路径包含潜在的危险内容":"路径验证失败"}}if(validatedPathCache.size<1e3){validatedPathCache.add(path);}return {valid:true}}const NORMALIZE_REGEX={multipleSlashes:/\/+/g,dotSlash:/\/\.\//g,trailingDot:/\/\.$/};function normalizePath(path){return path.replace(NORMALIZE_REGEX.multipleSlashes,"/").replace(NORMALIZE_REGEX.dotSlash,"/").replace(NORMALIZE_REGEX.trailingDot,"").trim()}function isValidPathString(path){return typeof path==="string"&&path.length>0}function isComponentImport(path){return typeof path==="function"}function createDynamicImport(path){return ()=>import(path)}function extractAndValidatePath(path,map,config,options){if(isComponentImport(path)){return path}if(!isValidPathString(path)){return null}const normalizedPath=normalizePath(path);const existingImport=map.get(normalizedPath);if(existingImport!==undefined){return existingImport}if(config.enablePathValidation){const validation=validatePath(normalizedPath,config);if(!validation.valid){const errorMessage=process.env.NODE_ENV==="development"?`路径验证失败: ${validation.error}`:"路径验证失败";const error=new vlianUtils.SecurityError(errorMessage,undefined,process.env.NODE_ENV==="development"?{path:normalizedPath}:{});if(options.enableDebugLog){logger.logger.error("路径验证失败:",error);}if(process.env.NODE_ENV==="development"){throw error}else {logger.logger.warn("路径验证失败,已跳过");return null}}}const importFn=createDynamicImport(normalizedPath);map.set(normalizedPath,importFn);if(options.enableDebugLog){logger.logger.debug("提取路径:",normalizedPath);}return importFn}let StackNodePool=class StackNodePool{acquire(route,depth){if(this.pool.length>0){const node=this.pool.pop();node.route=route;node.depth=depth;return node}return {route,depth}}release(node){if(this.pool.length<this.maxPoolSize){this.pool.push(node);}}constructor(){_define_property$r(this,"pool",[]);_define_property$r(this,"maxPoolSize",100);}};const stackNodePool=new StackNodePool;async function extractPathsOnly(routes,result,config,options,maxDepth){const enableParallel=options.performance?.enableParallelProcessing??true;const batchSize=options.performance?.parallelBatchSize??10;if(enableParallel&&routes.length>batchSize){const pathsToProcess=[];const stack=[];for(let i=routes.length-1;i>=0;i--){stack.push({route:routes[i],depth:0});}while(stack.length>0){const{route,depth}=stack.pop();if(depth>maxDepth){logger.logger.warn(`路径提取达到最大深度 ${maxDepth},跳过路由:`,route.name);continue}if(route.page&&typeof route.page==="string"){pathsToProcess.push({path:route.page,map:result.pages});}if(route.layout&&typeof route.layout==="string"){pathsToProcess.push({path:route.layout,map:result.layouts});}const routeError=route.error??route.errors;if(routeError&&typeof routeError==="string"){pathsToProcess.push({path:routeError,map:result.errors});}if(route.loading&&typeof route.loading==="string"){pathsToProcess.push({path:route.loading,map:result.loadings});}if(route.children&&Array.isArray(route.children)&&route.children.length>0){for(let i=route.children.length-1;i>=0;i--){stack.push({route:route.children[i],depth:depth+1});}}}for(let i=0;i<pathsToProcess.length;i+=batchSize){const batch=pathsToProcess.slice(i,i+batchSize);await Promise.all(batch.map(({path,map})=>Promise.resolve(extractAndValidatePath(path,map,config,options))));}}else {const stack=[];for(let i=routes.length-1;i>=0;i--){stack.push(stackNodePool.acquire(routes[i],0));}while(stack.length>0){const node=stack.pop();const{route,depth}=node;if(depth>maxDepth){logger.logger.warn(`路径提取达到最大深度 ${maxDepth},跳过路由:`,route.name);stackNodePool.release(node);continue}extractAndValidatePath(route.page,result.pages,config,options);extractAndValidatePath(route.layout,result.layouts,config,options);extractAndValidatePath(route.error??route.errors,result.errors,config,options);extractAndValidatePath(route.loading,result.loadings,config,options);if(route.children&&Array.isArray(route.children)&&route.children.length>0){for(let i=route.children.length-1;i>=0;i--){stack.push(stackNodePool.acquire(route.children[i],depth+1));}}stackNodePool.release(node);}}}function cleanupExpiredCache(cacheTTL){if(transformCache){transformCache.cleanupExpired(cacheTTL);}}async function transformRoutes(routes,options={}){const startTime=performance.now();const mergedOptions={pathValidation:{...DEFAULT_OPTIONS.pathValidation,...options.pathValidation},performance:{...DEFAULT_OPTIONS.performance,...options.performance},enableDebugLog:options.enableDebugLog??DEFAULT_OPTIONS.enableDebugLog};if(!routes){if(mergedOptions.enableDebugLog){logger.logger.debug("路由配置为空,返回空结果");}return {pages:new Map,layouts:new Map,errors:new Map,loadings:new Map,routes:[]}}let routesArray;try{routesArray=typeof routes==="function"?await routes():routes;}catch(error){const err=error instanceof Error?error:new Error("路由配置加载失败");logger.logger.error("路由配置加载失败:",err);throw new vlianUtils.ValidationError("路由配置加载失败",{originalError:err})}if(!Array.isArray(routesArray)||routesArray.length===0){if(mergedOptions.enableDebugLog){logger.logger.debug("路由配置不是数组或为空,返回空结果");}return {pages:new Map,layouts:new Map,errors:new Map,loadings:new Map,routes:[]}}const cacheTTL=mergedOptions.performance.cacheTTL??DEFAULT_OPTIONS.performance.cacheTTL;const maxCacheSize=mergedOptions.performance.maxCacheSize??DEFAULT_OPTIONS.performance.maxCacheSize;if(mergedOptions.performance.enableCache){if(!transformCache||transformCache.size()!==maxCacheSize){transformCache=new LRUCache(maxCacheSize);}const configHash=generateConfigHash(routesArray);if(configHash){const cached=transformCache.get(configHash);if(cached&&Date.now()-cached.timestamp<cacheTTL){if(mergedOptions.enableDebugLog){logger.logger.debug("使用缓存结果");}return cached.result}}cleanupExpiredCache(cacheTTL);}const result={pages:new Map,layouts:new Map,errors:new Map,loadings:new Map,routes:[]};try{const extractStartTime=performance.now();const pathValidation={enablePathValidation:mergedOptions.pathValidation.enablePathValidation??DEFAULT_OPTIONS.pathValidation.enablePathValidation,allowedPathPrefixes:mergedOptions.pathValidation.allowedPathPrefixes??DEFAULT_OPTIONS.pathValidation.allowedPathPrefixes,maxPathLength:mergedOptions.pathValidation.maxPathLength??DEFAULT_OPTIONS.pathValidation.maxPathLength,allowAbsolutePaths:mergedOptions.pathValidation.allowAbsolutePaths??DEFAULT_OPTIONS.pathValidation.allowAbsolutePaths};const maxRecursionDepth=mergedOptions.performance.maxRecursionDepth??DEFAULT_OPTIONS.performance.maxRecursionDepth;await extractPathsOnly(routesArray,result,pathValidation,mergedOptions,maxRecursionDepth);const extractEndTime=performance.now();const extractDuration=extractEndTime-extractStartTime;result.routes=routesArray;const cacheStartTime=performance.now();if(mergedOptions.performance.enableCache&&transformCache){const configHash=generateConfigHash(routesArray);if(configHash){const cachedResult={pages:new Map(result.pages),layouts:new Map(result.layouts),errors:new Map(result.errors),loadings:new Map(result.loadings),routes:JSON.parse(JSON.stringify(result.routes))};transformCache.set(configHash,{result:cachedResult,timestamp:Date.now(),hash:configHash,accessTime:Date.now()});}}const cacheEndTime=performance.now();const cacheDuration=cacheEndTime-cacheStartTime;const endTime=performance.now();const totalDuration=endTime-startTime;if(mergedOptions.enableDebugLog){logger.logger.debug(`路由转换完成,总耗时: ${totalDuration.toFixed(2)}ms`,{routeCount:result.routes.length,pageCount:result.pages.size,layoutCount:result.layouts.size,errorCount:result.errors.size,loadingCount:result.loadings.size,performance:{extractDuration:`${extractDuration.toFixed(2)}ms`,cacheDuration:`${cacheDuration.toFixed(2)}ms`,totalDuration:`${totalDuration.toFixed(2)}ms`},cache:{hit:transformCache?"miss":"disabled",size:transformCache?.size()??0}});}return result}catch(error){const err=error instanceof Error?error:new Error("路由转换失败");logger.logger.error("路由转换失败:",err);throw new vlianUtils.ValidationError("路由转换失败",{originalError:err})}}
91
-
92
- const isDevelopment=process.env.NODE_ENV==="development";const RouteErrorBoundary=({error,resetErrorBoundary})=>{const[showDetails,setShowDetails]=React.useState(false);const errorObject=error!==null&&typeof error==="object"?error:null;const errorMessage=typeof errorObject?.message==="string"&&errorObject.message!==""?errorObject.message:"未知错误";const hasCause=errorObject?.cause!==undefined;const isNotFoundError=errorObject?.status===404||typeof errorObject?.statusText==="string"&&/not\s*found/i.test(errorObject.statusText)||/no routes matched location|not found|404/i.test(errorMessage);const title=isNotFoundError?"页面不存在(404)":"出错了,请稍后再试";const friendlyMessage=isNotFoundError?"访问的路由未注册或不存在,请检查访问地址。":"请稍后再试或联系技术支持";const displayMessage=isDevelopment?errorMessage:friendlyMessage;return jsxRuntime.jsx("div",{role:"alert",style:{minHeight:"100vh",display:"flex",justifyContent:"center",alignItems:"center",padding:24},children:jsxRuntime.jsxs("div",{style:{maxWidth:760,width:"100%",border:"1px solid #dde5ec",borderRadius:10,padding:20},children:[jsxRuntime.jsx("h2",{style:{marginTop:0},children:title}),jsxRuntime.jsx("p",{children:displayMessage}),jsxRuntime.jsxs("div",{style:{display:"flex",gap:8,marginBottom:12},children:[jsxRuntime.jsx("button",{onClick:resetErrorBoundary,style:{border:"none",background:"#2f80ed",color:"#fff",borderRadius:6,padding:"8px 12px",cursor:"pointer"},children:"刷新重试"}),isDevelopment&&jsxRuntime.jsx("button",{onClick:()=>setShowDetails(!showDetails),style:{border:"1px solid #cfd7df",background:"#fff",borderRadius:6,padding:"8px 12px",cursor:"pointer"},children:showDetails?"收起详情":"展开详情"})]}),isDevelopment&&showDetails&&jsxRuntime.jsxs("div",{style:{background:"#f7fafc",borderRadius:8,padding:12,fontSize:12,fontFamily:"monospace"},children:[jsxRuntime.jsxs("div",{style:{marginBottom:10},children:[jsxRuntime.jsx("strong",{children:"错误信息:"}),errorMessage]}),errorObject?.stack&&jsxRuntime.jsxs("div",{style:{marginBottom:10,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:[jsxRuntime.jsx("strong",{children:"堆栈:"}),jsxRuntime.jsx("br",{}),errorObject.stack]}),hasCause&&jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("strong",{children:"原因:"}),errorObject?.cause instanceof Error?errorObject.cause.message:String(errorObject?.cause)]})]})]})})};
93
-
94
- function DefaultRouteHydrateFallback(){return jsxRuntime.jsx("div",{style:{padding:16,textAlign:"center",color:"#5f6c7b"},children:"Loading..."})}const transformRoutesToReactRoutes=async(routes,transformResult,defaultRouteErrorComponent,defaultRouteLoadingComponent,enableHydrateFallback=false)=>{function transformRouteToReactRoutes(routes){return routes.flatMap(route=>transformRouteToReactRoute(route))}function transformRouteToReactRoute(route){const{isGroup=false,enableRedirection=false,name,path,handle,children,page,layout,error,errors,loading}=route;const routeError=error??errors;async function getErrorComponent(){if(typeof routeError==="function"){return routeError()}const errorsMap=transformResult.errors;if(typeof routeError==="string"&&routeError!==""){const errorResolver=errorsMap.get(routeError);if(!errorResolver){return null}if(typeof errorResolver==="function"){return errorResolver()}return null}if(defaultRouteErrorComponent){return defaultRouteErrorComponent()}return {default:RouteErrorBoundary}}function convertConfig(m){if(!m){return null}const{action,loader,shouldRevalidate,default:Component}=m;if(!Component){logger.logger.warn(`路由组件未找到 default 导出: ${name}`,m);}return {action,loader,shouldRevalidate,Component}}async function getLoadingComponent(){if(typeof loading==="function"){return loading()}if(typeof loading==="string"&&loading!==""){const loadingResolver=transformResult.loadings.get(loading);if(typeof loadingResolver==="function"){return loadingResolver()}}if(defaultRouteLoadingComponent){return defaultRouteLoadingComponent()}return null}async function getConfig(index=false){if(layout&&!index){if(typeof layout==="function"){const config=await layout();return convertConfig(config)}if(typeof layout==="string"){const layoutResolver=transformResult.layouts.get(layout);if(!layoutResolver){throw new Error(`未找到名为 ${layout} 的布局组件`)}const config=await layoutResolver();return convertConfig(config)}}if(page&&(!children?.length||index)){if(typeof page==="function"){const config=await page();return convertConfig(config)}if(typeof page==="string"){const viewResolver=transformResult.pages.get(page);if(!viewResolver){throw new Error(`未找到名为 ${page} 的页面组件`)}const config=await viewResolver();return convertConfig(config)}}return null}function getHandle(index=false){if((layout||isGroup)&&!index){return null}return {...handle,name,path}}const reactRoute={children:[],id:name,handle:getHandle(),lazy:async()=>{const ErrorBoundary=await getErrorComponent();const config=await getConfig();const LoadingComponent=await getLoadingComponent();const HydrateFallback=LoadingComponent?.default??DefaultRouteHydrateFallback;if(!config){return {ErrorBoundary:ErrorBoundary?.default,HydrateFallback}}return {ErrorBoundary:ErrorBoundary?.default,HydrateFallback,...config}},path};if(enableHydrateFallback){reactRoute.hydrateFallbackElement=jsxRuntime.jsx(DefaultRouteHydrateFallback,{});}if(children?.length){reactRoute.children=children.flatMap(child=>transformRouteToReactRoute(child)).sort((a,b)=>{const orderA=a.handle?.order??99;const orderB=b.handle?.order??99;return orderA-orderB});if(page&&!isGroup){reactRoute.children.unshift({handle:getHandle(true),index:true,lazy:async()=>{const ErrorBoundary=await getErrorComponent();const LoadingComponent=await getLoadingComponent();const HydrateFallback=LoadingComponent?.default??DefaultRouteHydrateFallback;const Component=page;return {ErrorBoundary:ErrorBoundary?.default,HydrateFallback,Component,...await getConfig(true)}}});}if(enableRedirection&&isGroup){const[firstChild]=reactRoute.children;if(firstChild?.path){reactRoute.children.unshift({index:true,handle:getHandle(true),element:jsxRuntime.jsx(reactRouterDom.Navigate,{to:firstChild.path,replace:true})});}}}if((!children||children.length===0)&&layout&&page&&!isGroup){reactRoute.children=[{handle:getHandle(true),index:true,lazy:async()=>{const ErrorBoundary=await getErrorComponent();const LoadingComponent=await getLoadingComponent();const HydrateFallback=LoadingComponent?.default??DefaultRouteHydrateFallback;const Component=page;return {ErrorBoundary:ErrorBoundary?.default,HydrateFallback,Component,...await getConfig(true)}}}];}return reactRoute}return transformRouteToReactRoutes(routes)};
95
-
96
- const routeItemHandleSchema=zod.z.object({title:zod.z.string().min(1,"路由标题不能为空"),i18nKey:zod.z.string().optional(),order:zod.z.number().int("排序值必须是整数"),icon:zod.z.string().optional(),hideInMenu:zod.z.boolean().optional(),hideFooter:zod.z.boolean().optional(),keepAlive:zod.z.boolean().optional(),needLogin:zod.z.boolean().optional(),roles:zod.z.array(zod.z.string()).optional(),name:zod.z.string().optional()}).passthrough();const componentImportSchema=zod.z.union([zod.z.string().min(1,"组件路径不能为空"),zod.z.function(),zod.z.null()]);const routerOptionsSchema=zod.z.object({basename:zod.z.string().optional(),future:zod.z.record(zod.z.string(),zod.z.union([zod.z.boolean(),zod.z.string(),zod.z.number()])).optional(),hydrationData:zod.z.unknown().optional(),window:zod.z.unknown().optional(),initialEntries:zod.z.array(zod.z.string()).optional(),initialIndex:zod.z.number().int().nonnegative().optional()}).passthrough();const transformOptionsSchema=zod.z.object({pathValidation:zod.z.object({enablePathValidation:zod.z.boolean().optional(),allowedPathPrefixes:zod.z.array(zod.z.string().min(1)).optional(),maxPathLength:zod.z.number().int().positive().optional(),allowAbsolutePaths:zod.z.boolean().optional()}).optional(),performance:zod.z.object({enableCache:zod.z.boolean().optional(),cacheTTL:zod.z.number().int().positive().optional(),maxCacheSize:zod.z.number().int().positive().optional(),maxRecursionDepth:zod.z.number().int().positive().optional(),enableParallelProcessing:zod.z.boolean().optional(),parallelBatchSize:zod.z.number().int().positive().optional()}).optional(),enableDebugLog:zod.z.boolean().optional()}).passthrough();const routeConfigSchema=zod.z.lazy(()=>zod.z.object({layout:componentImportSchema.optional().nullable(),page:componentImportSchema.optional().nullable(),loading:componentImportSchema.optional().nullable(),error:componentImportSchema.optional().nullable(),errors:componentImportSchema.optional().nullable(),name:zod.z.string().min(1,"路由名称不能为空"),path:zod.z.string().optional(),isGroup:zod.z.boolean().optional(),enableRedirection:zod.z.boolean().optional(),handle:routeItemHandleSchema,children:zod.z.array(routeConfigSchema).optional()}));const routerConfigSchema=zod.z.object({enabled:zod.z.union([zod.z.boolean(),zod.z.literal("disabled")]).optional(),routes:zod.z.union([zod.z.array(routeConfigSchema),zod.z.function()]).optional(),mode:zod.z.enum(["browser","hash","memory"]).optional(),options:routerOptionsSchema.optional(),pathResolve:zod.z.object({basePath:zod.z.string().optional(),pathAliases:zod.z.record(zod.z.string(),zod.z.string()).optional()}).optional(),transformOptions:transformOptionsSchema.optional(),preload:zod.z.object({strategy:zod.z.enum(["none","next-level","all","visible"]).optional(),delay:zod.z.number().int().positive().optional(),priorityThreshold:zod.z.number().int().nonnegative().optional(),timeout:zod.z.number().int().positive().optional()}).optional(),enableHydrateFallback:zod.z.boolean().optional()}).superRefine((config,ctx)=>{if(!Array.isArray(config.routes)){return}const routeNameMap=new Map;const walk=(routes,parentPath)=>{routes.forEach((route,index)=>{const currentPath=`${parentPath}[${index}]`;const existingPath=routeNameMap.get(route.name);if(existingPath){ctx.addIssue({code:zod.z.ZodIssueCode.custom,path:["routes",index,"name"],message:`路由名称重复: "${route.name}",首次定义位置 ${existingPath}`});}else {routeNameMap.set(route.name,currentPath);}if(Array.isArray(route.children)&&route.children.length>0){walk(route.children,`${currentPath}.children`);}});};walk(config.routes,"routes");});function validateRouterConfig(config){return routerConfigSchema.parse(config)}function safeValidateRouterConfig(config){return routerConfigSchema.safeParse(config)}
97
-
98
- function _define_property$q(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class ConfigValidationError extends Error{constructor(message,errors){super(message),_define_property$q(this,"errors",void 0),this.errors=errors;this.name="ConfigValidationError";}}class ConfigValidator{static validate(config,schema){const result=schema.safeParse(config);if(!result.success){throw new ConfigValidationError("配置验证失败",result.error)}return result.data}static safeValidate(config,schema){const result=schema.safeParse(config);if(result.success){return {success:true,data:result.data}}return {success:false,error:result.error}}static createStartOptionsSchema(){return zod.z.object({loggerLevel:zod.z.enum(["DEBUG","INFO","WARN","ERROR"]).optional(),showSplashScreen:zod.z.enum(["auto","always","never","first-time-only"]).optional(),minSplashScreenTime:zod.z.number().positive().optional(),security:zod.z.object({enableXSSProtection:zod.z.boolean().optional(),validateConfig:zod.z.boolean().optional(),sanitizeUserInput:zod.z.boolean().optional(),csp:zod.z.object({defaultSrc:zod.z.array(zod.z.string()).optional(),scriptSrc:zod.z.array(zod.z.string()).optional(),styleSrc:zod.z.array(zod.z.string()).optional(),imgSrc:zod.z.array(zod.z.string()).optional(),connectSrc:zod.z.array(zod.z.string()).optional(),fontSrc:zod.z.array(zod.z.string()).optional(),frameSrc:zod.z.array(zod.z.string()).optional(),allowUnsafeInline:zod.z.boolean().optional(),allowUnsafeEval:zod.z.boolean().optional()}).optional()}).optional()}).passthrough()}static validateWithFriendlyErrors(config,schema){const result=schema.safeParse(config);if(!result.success){const errorMessages=result.error.issues.map(issue=>{const path=issue.path.length>0?issue.path.join("."):"root";return `配置项 "${path}": ${issue.message}`});const friendlyMessage=`配置验证失败:
99
- ${errorMessages.join("\n")}`;throw new ConfigValidationError(friendlyMessage,result.error)}return result.data}}
100
-
101
- class RouterConfigValidator{static validate(config){const result=safeValidateRouterConfig(config);if(!result.success){const errorMessages=result.error.issues.map(issue=>{const path=issue.path.length>0?issue.path.join("."):"root";return `路由配置项 "${path}": ${issue.message}`});const friendlyMessage=`路由配置验证失败:
102
- ${errorMessages.join("\n")}`;logger.logger.error("路由配置验证失败",{errors:result.error.issues,config});throw new ConfigValidationError(friendlyMessage,result.error)}return result.data}static safeValidate(config){return safeValidateRouterConfig(config)}static validateWithSuggestions(config){const result=safeValidateRouterConfig(config);if(!result.success){const suggestions=[];result.error.issues.forEach(issue=>{const path=issue.path.join(".");if(issue.code==="invalid_type"){const invalidTypeIssue=issue;suggestions.push(`配置项 "${path}" 类型错误: 期望 ${invalidTypeIssue.expected},实际 ${invalidTypeIssue.received}`);}else if(issue.code==="too_small"){suggestions.push(`配置项 "${path}" 值太小: ${issue.message}`);}else if(issue.code==="too_big"){suggestions.push(`配置项 "${path}" 值太大: ${issue.message}`);}else {suggestions.push(`配置项 "${path}": ${issue.message}`);}});return {success:false,errors:result.error.issues,suggestions}}return {success:true,data:result.data}}}
103
-
104
- function _define_property$p(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class RouterLifecycleManager{register(hooks){this.hooks.push(hooks);logger.logger.debug("路由生命周期钩子已注册");return ()=>{const index=this.hooks.indexOf(hooks);if(index>-1){this.hooks.splice(index,1);logger.logger.debug("路由生命周期钩子已取消注册");}}}registerBatch(hooksArray){hooksArray.forEach(hooks=>this.register(hooks));}clear(){this.hooks=[];logger.logger.debug("所有路由生命周期钩子已清空");}async beforeEach(to,from){for(const hooks of this.hooks){if(hooks.beforeEach){try{const result=await hooks.beforeEach(to,from);if(result===false){logger.logger.debug("路由跳转被阻止: beforeEach 返回 false");return false}if(typeof result==="string"){logger.logger.debug(`路由跳转重定向: beforeEach 返回 ${result}`);return result}}catch(error){logger.logger.error("路由生命周期钩子执行失败: beforeEach",error);continue}}}return undefined}async afterEach(to,from){for(const hooks of this.hooks){if(hooks.afterEach){try{await hooks.afterEach(to,from);}catch(error){logger.logger.error("路由生命周期钩子执行失败: afterEach",error);continue}}}}getAll(){return [...this.hooks]}getCount(){return this.hooks.length}constructor(){_define_property$p(this,"hooks",[]);}}let lifecycleManagerInstance=null;function getRouterLifecycleManager(){if(!lifecycleManagerInstance){lifecycleManagerInstance=new RouterLifecycleManager;}return lifecycleManagerInstance}
105
-
106
- function _define_property$o(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class RouterMiddlewareManager{register(config){if(!config.middleware||typeof config.middleware!=="function"){throw new Error("中间件必须是一个函数")}const middlewareConfig={priority:100,enabled:true,...config};this.middlewares.push(middlewareConfig);this.middlewares.sort((a,b)=>(a.priority||100)-(b.priority||100));logger.logger.debug(`路由中间件已注册: ${middlewareConfig.name||"anonymous"}`);return ()=>{const index=this.middlewares.indexOf(middlewareConfig);if(index>-1){this.middlewares.splice(index,1);logger.logger.debug(`路由中间件已取消注册: ${middlewareConfig.name||"anonymous"}`);}}}registerBatch(configs){configs.forEach(config=>this.register(config));}unregister(name){const index=this.middlewares.findIndex(m=>m.name===name);if(index>-1){this.middlewares.splice(index,1);logger.logger.debug(`路由中间件已取消注册: ${name}`);}}clear(){this.middlewares=[];logger.logger.debug("所有路由中间件已清空");}async execute(context){const enabledMiddlewares=this.middlewares.filter(m=>{if(!m.enabled){return false}if(m.condition&&!m.condition(context)){return false}return true});for(const middlewareConfig of enabledMiddlewares){try{const result=await middlewareConfig.middleware(context);if(result===false){logger.logger.debug(`路由中间件阻止导航: ${middlewareConfig.name||"anonymous"} -> false`);return {allow:false,reason:"中间件返回 false"}}if(typeof result==="object"&&result!==null&&result.allow===false){logger.logger.debug(`路由中间件阻止导航: ${middlewareConfig.name||"anonymous"}`,result);if(result.redirect&&!RouterMiddlewareManager.SAFE_REDIRECT_PATH_REGEX.test(result.redirect)){logger.logger.warn(`路由中间件返回了不安全的重定向地址,已拦截: ${middlewareConfig.name||"anonymous"} -> ${result.redirect}`);return {allow:false,reason:"中间件返回了不安全的重定向地址"}}return result}if(typeof result==="string"){if(!RouterMiddlewareManager.SAFE_REDIRECT_PATH_REGEX.test(result)){logger.logger.warn(`路由中间件返回了不安全的重定向地址,已拦截: ${middlewareConfig.name||"anonymous"} -> ${result}`);return {allow:false,reason:"中间件返回了不安全的重定向地址"}}logger.logger.debug(`路由中间件重定向: ${middlewareConfig.name||"anonymous"} -> ${result}`);return {allow:false,redirect:result}}}catch(error){logger.logger.error(`路由中间件执行失败: ${middlewareConfig.name||"anonymous"}`,error);continue}}return {allow:true}}getAll(){return [...this.middlewares]}getEnabled(){return this.middlewares.filter(m=>m.enabled)}getCount(){return this.middlewares.length}constructor(){_define_property$o(this,"middlewares",[]);}}_define_property$o(RouterMiddlewareManager,"SAFE_REDIRECT_PATH_REGEX",/^(\/|\.\/|\.\.\/|#)/);let middlewareManagerInstance=null;function getRouterMiddlewareManager(){if(!middlewareManagerInstance){middlewareManagerInstance=new RouterMiddlewareManager;}return middlewareManagerInstance}
107
-
108
- function createAuthMiddleware(config){const{checkAuth,checkLogin,checkRole,loginRedirect="/login",forbiddenRedirect="/403"}=config;return async context=>{const{to}=context;const needLogin=to.meta?.needLogin||to.meta?.handle?.needLogin;if(needLogin){if(checkLogin){const isLoggedIn=await checkLogin();if(!isLoggedIn){logger.logger.debug(`路由权限拦截: 未登录,重定向到 ${loginRedirect}`);return {allow:false,redirect:loginRedirect,reason:"需要登录"}}}}const roles=to.meta?.roles||to.meta?.handle?.roles;if(roles&&Array.isArray(roles)&&roles.length>0){if(checkRole){const hasRole=await checkRole(roles);if(!hasRole){logger.logger.debug(`路由权限拦截: 无权限,重定向到 ${forbiddenRedirect}`);return {allow:false,redirect:forbiddenRedirect,reason:"无权限访问"}}}}if(checkAuth){const hasAuth=await checkAuth(context);if(!hasAuth){logger.logger.debug(`路由权限拦截: 权限检查失败,重定向到 ${forbiddenRedirect}`);return {allow:false,redirect:forbiddenRedirect,reason:"权限检查失败"}}}return {allow:true}}}
109
-
110
34
  const utils=vlianUtils__namespace;const ErrorCode=utils.ErrorCode;const ErrorMessages=utils.ErrorMessages;const getErrorMessage=utils.getErrorMessage;const getUserFriendlyMessage=utils.getUserFriendlyMessage;const ErrorType=utils.ErrorType;const ErrorSeverity=utils.ErrorSeverity;const FrameworkError=utils.FrameworkError;const InitializationError=utils.InitializationError;const ConfigError=utils.ConfigError;const StorageError=utils.StorageError;const NetworkError=utils.NetworkError;const ValidationError=utils.ValidationError;const SecurityError=utils.SecurityError;const errorUtils=utils.errorUtils;
111
35
 
112
- var RouterErrorCode=/*#__PURE__*/function(RouterErrorCode){RouterErrorCode["ROUTER_NOT_INITIALIZED"]="ROUTER_NOT_INITIALIZED";RouterErrorCode["ROUTER_CONFIG_ERROR"]="ROUTER_CONFIG_ERROR";RouterErrorCode["ROUTE_NOT_FOUND"]="ROUTE_NOT_FOUND";RouterErrorCode["ROUTE_NAVIGATION_FAILED"]="ROUTE_NAVIGATION_FAILED";RouterErrorCode["ROUTE_PERMISSION_DENIED"]="ROUTE_PERMISSION_DENIED";RouterErrorCode["ROUTE_COMPONENT_LOAD_FAILED"]="ROUTE_COMPONENT_LOAD_FAILED";RouterErrorCode["ROUTE_TRANSFORM_FAILED"]="ROUTE_TRANSFORM_FAILED";return RouterErrorCode}({});class RouterError extends FrameworkError{constructor(message,code,severity=ErrorSeverity.MEDIUM,cause,context){super(message,ErrorType.RUNTIME,severity,{code,originalError:cause,context:context||{}});this.name="RouterError";}}function createRouterError(message,code,severity,cause,context){return new RouterError(message,code,severity,cause,context)}
113
-
114
- function _define_property$n(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class RouteCache{async initPersistence(){try{if(typeof window!=="undefined"&&"indexedDB"in window){this.persistenceEnabled=true;await this.loadFromPersistence();logger.logger.debug("路由缓存持久化已启用");}}catch(error){logger.logger.warn("路由缓存持久化初始化失败",error);this.persistenceEnabled=false;}}async loadFromPersistence(){}async saveToPersistence(_key,_value){if(!this.persistenceEnabled){return}}generateKey(routes){if(typeof routes==="function"){return `fn_${routes.name||Math.random().toString(36).substring(7)}`}try{const routesStr=JSON.stringify(routes,(_key,value)=>{if(typeof value==="function"){return "[Function]"}return value});return `routes_${this.hashString(routesStr)}`}catch(error){return `routes_${Math.random().toString(36).substring(7)}`}}hashString(str){let hash=0;for(let i=0;i<str.length;i++){const char=str.charCodeAt(i);hash=(hash<<5)-hash+char;hash=hash&hash;}return Math.abs(hash).toString(36)}isExpired(item){return Date.now()>item.expiresAt}cleanup(){for(const[key,item]of this.cache.entries()){if(this.isExpired(item)){this.cache.delete(key);}}for(const[key,item]of this.matchCache.entries()){if(this.isExpired(item)){this.matchCache.delete(key);}}this.evictLRU();}evictLRU(){if(this.cache.size>this.config.maxSize){const sorted=Array.from(this.cache.entries()).sort((a,b)=>a[1].lastAccessedAt-b[1].lastAccessedAt);const toDelete=sorted.slice(0,this.cache.size-this.config.maxSize);toDelete.forEach(([key])=>this.cache.delete(key));}if(this.matchCache.size>this.config.maxSize){const sorted=Array.from(this.matchCache.entries()).sort((a,b)=>a[1].lastAccessedAt-b[1].lastAccessedAt);const toDelete=sorted.slice(0,this.matchCache.size-this.config.maxSize);toDelete.forEach(([key])=>this.matchCache.delete(key));}}startCleanupInterval(){if(this.cleanupTimer){clearInterval(this.cleanupTimer);}this.cleanupTimer=setInterval(()=>{this.cleanup();},60*1e3);}get(routes){const key=this.generateKey(routes);const item=this.cache.get(key);if(!item){this.stats.transformMisses++;return null}if(this.isExpired(item)){this.cache.delete(key);this.stats.transformMisses++;return null}item.lastAccessedAt=Date.now();item.accessCount++;this.stats.transformHits++;return item.value}set(routes,value){const key=this.generateKey(routes);const now=Date.now();const item={value,expiresAt:now+this.config.ttl,createdAt:now,accessCount:0,lastAccessedAt:now};this.cache.set(key,item);if(this.persistenceEnabled){this.saveToPersistence(key,value).catch(error=>{logger.logger.warn("保存缓存到持久化存储失败",error);});}this.evictLRU();}getMatch(path){const item=this.matchCache.get(path);if(!item){this.stats.matchMisses++;return undefined}if(this.isExpired(item)){this.matchCache.delete(path);this.stats.matchMisses++;return undefined}item.lastAccessedAt=Date.now();item.accessCount++;this.stats.matchHits++;return item.value}setMatch(path,route){const now=Date.now();const item={value:route,expiresAt:now+this.config.ttl,createdAt:now,accessCount:0,lastAccessedAt:now};this.matchCache.set(path,item);this.evictLRU();}clear(){this.cache.clear();this.matchCache.clear();this.stats={transformHits:0,transformMisses:0,matchHits:0,matchMisses:0};logger.logger.debug("路由缓存已清空");}destroy(){this.clear();if(this.cleanupTimer){clearInterval(this.cleanupTimer);this.cleanupTimer=null;}}getStats(){const totalHits=this.stats.transformHits+this.stats.matchHits;const totalAccess=totalHits+this.stats.transformMisses+this.stats.matchMisses;const hitRate=totalAccess>0?totalHits/totalAccess:0;return {transformCacheSize:this.cache.size,matchCacheSize:this.matchCache.size,totalSize:this.cache.size+this.matchCache.size,hitRate}}constructor(config={}){_define_property$n(this,"cache",new Map);_define_property$n(this,"matchCache",new Map);_define_property$n(this,"config",void 0);_define_property$n(this,"persistenceEnabled",false);_define_property$n(this,"cleanupTimer",null);_define_property$n(this,"stats",{transformHits:0,transformMisses:0,matchHits:0,matchMisses:0});this.config={maxSize:config.maxSize??50,ttl:config.ttl??5*60*1e3,enablePersistence:config.enablePersistence??false,persistenceKeyPrefix:config.persistenceKeyPrefix??"router_cache_"};if(this.config.enablePersistence&&typeof window!=="undefined"&&"indexedDB"in window){this.initPersistence();}this.startCleanupInterval();}}let routeCacheInstance=null;function getRouteCache(config){if(!routeCacheInstance){routeCacheInstance=new RouteCache(config);}return routeCacheInstance}
115
-
116
- function _define_property$m(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}var PreloadStrategy=/*#__PURE__*/function(PreloadStrategy){PreloadStrategy["NONE"]="none";PreloadStrategy["NEXT_LEVEL"]="next-level";PreloadStrategy["ALL"]="all";PreloadStrategy["VISIBLE"]="visible";return PreloadStrategy}({});class RoutePreloader{updateConfig(config={}){this.config={strategy:config.strategy??"none",delay:config.delay??1e3,priorityThreshold:config.priorityThreshold??10,timeout:config.timeout??5e3};}shouldRegister(priority){if(this.config.strategy==="none"){return false}if(this.config.strategy==="visible"&&priority>this.config.priorityThreshold){return false}return true}registerTask(key,importFn,routeName,priority){if(!this.shouldRegister(priority)){return}this.tasks.set(key,{importFn,routeName,priority,status:"pending"});}registerRoute(route){if(!route.page&&!route.layout){return}const priority=route.handle?.order??999;if(route.page&&typeof route.page==="function"){this.registerTask(`${route.name}_page`,route.page,route.name,priority);}if(route.layout&&typeof route.layout==="function"){this.registerTask(`${route.name}_layout`,route.layout,route.name,priority);}if(route.children){route.children.forEach(child=>this.registerRoute(child));}}registerRoutes(routes,resolvers){const priorityByPath=new Map;const nameByPath=new Map;const collectPriority=route=>{const priority=route.handle?.order??999;const routeName=route.name;const record=value=>{if(typeof value!=="string"){return}if(!priorityByPath.has(value)||(priorityByPath.get(value)??999)>priority){priorityByPath.set(value,priority);nameByPath.set(value,routeName);}};record(route.page);record(route.layout);record(route.error??route.errors);record(route.loading);route.children?.forEach(collectPriority);};routes.forEach(collectPriority);routes.forEach(route=>this.registerRoute(route));if(!resolvers){return}const registerResolverMap=(map,type)=>{for(const[path,importFn]of map.entries()){const routeName=nameByPath.get(path)??path;const priority=priorityByPath.get(path)??999;this.registerTask(`${routeName}_${type}_${path}`,importFn,routeName,priority);}};registerResolverMap(resolvers.pages,"page");registerResolverMap(resolvers.layouts,"layout");registerResolverMap(resolvers.errors,"error");registerResolverMap(resolvers.loadings,"loading");}async preloadRoute(routeName){const tasks=Array.from(this.tasks.values()).filter(task=>task.routeName===routeName&&task.status==="pending");if(tasks.length===0){return}await Promise.all(tasks.map(task=>this.preloadTask(task)));}async preloadTask(task){if(task.status!=="pending"){return}task.status="loading";task.startTime=Date.now();let timeoutId=null;try{const timeoutPromise=new Promise((_,reject)=>{timeoutId=setTimeout(()=>reject(new Error("预加载超时")),this.config.timeout);});await Promise.race([task.importFn(),timeoutPromise]);task.status="loaded";const duration=Date.now()-(task.startTime||0);logger.logger.debug(`路由组件预加载成功: ${task.routeName} (${duration}ms)`);}catch(error){task.status="failed";logger.logger.warn(`路由组件预加载失败: ${task.routeName}`,error);}finally{if(timeoutId){clearTimeout(timeoutId);}}}startPreload(){if(this.config.strategy==="none"){return}this.stopPreload();this.preloadTimer=setTimeout(()=>{const browserWindow=typeof window!=="undefined"?window:undefined;if(browserWindow?.requestIdleCallback){this.idleHandle=browserWindow.requestIdleCallback(()=>{this.executePreload();});return}this.executePreload();},this.config.delay);}async executePreload(){const tasks=Array.from(this.tasks.values()).filter(task=>task.status==="pending").sort((a,b)=>a.priority-b.priority);if(tasks.length===0){return}logger.logger.debug(`开始预加载 ${tasks.length} 个路由组件`);let tasksToPreload=[];switch(this.config.strategy){case "all":tasksToPreload=tasks;break;case "next-level":tasksToPreload=tasks.slice(0,Math.min(5,tasks.length));break;case "visible":tasksToPreload=tasks.filter(task=>task.priority<=this.config.priorityThreshold);break;default:return}const concurrency=3;for(let i=0;i<tasksToPreload.length;i+=concurrency){const batch=tasksToPreload.slice(i,i+concurrency);await Promise.all(batch.map(task=>this.preloadTask(task)));}logger.logger.debug("路由组件预加载完成");}stopPreload(){const browserWindow=typeof window!=="undefined"?window:undefined;if(this.preloadTimer){clearTimeout(this.preloadTimer);this.preloadTimer=null;}if(this.idleHandle!==null&&browserWindow?.cancelIdleCallback){browserWindow.cancelIdleCallback(this.idleHandle);this.idleHandle=null;}}clear(){this.tasks.clear();this.stopPreload();logger.logger.debug("路由预加载任务已清空");}getStats(){const stats={total:this.tasks.size,pending:0,loading:0,loaded:0,failed:0};for(const task of this.tasks.values()){stats[task.status]++;}return stats}constructor(config={}){_define_property$m(this,"tasks",new Map);_define_property$m(this,"config",void 0);_define_property$m(this,"preloadTimer",null);_define_property$m(this,"idleHandle",null);this.config={strategy:config.strategy??"none",delay:config.delay??1e3,priorityThreshold:config.priorityThreshold??10,timeout:config.timeout??5e3};}}let routePreloaderInstance=null;function getRoutePreloader(config){if(!routePreloaderInstance){routePreloaderInstance=new RoutePreloader(config);}return routePreloaderInstance}
117
-
118
- var PluginLifecycleStage=/*#__PURE__*/function(PluginLifecycleStage){PluginLifecycleStage["REGISTER"]="register";PluginLifecycleStage["BEFORE_INIT"]="before-init";PluginLifecycleStage["AFTER_INIT"]="after-init";PluginLifecycleStage["BEFORE_TRANSFORM"]="before-transform";PluginLifecycleStage["AFTER_TRANSFORM"]="after-transform";PluginLifecycleStage["BEFORE_MATCH"]="before-match";PluginLifecycleStage["AFTER_MATCH"]="after-match";PluginLifecycleStage["DESTROY"]="destroy";return PluginLifecycleStage}({});
119
-
120
- function _define_property$l(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class RouterPluginManager{register(plugin,options={}){if(!plugin.name){throw new Error("插件必须提供名称")}if(this.plugins.has(plugin.name)&&!options.overwrite){throw new Error(`插件 "${plugin.name}" 已存在`)}const pluginWithDefaults={priority:100,enabled:true,...plugin};if(pluginWithDefaults.dependencies){const missingDeps=pluginWithDefaults.dependencies.filter(dep=>!this.plugins.has(dep));if(missingDeps.length>0){throw new Error(`插件 "${plugin.name}" 缺少依赖: ${missingDeps.join(", ")}`)}}this.plugins.set(plugin.name,{plugin:pluginWithDefaults,status:"registered",registeredAt:Date.now()});logger.logger.debug(`路由插件已注册: ${plugin.name}`);if(pluginWithDefaults.hooks?.onRegister){try{const context={config:{},meta:{stage:PluginLifecycleStage.REGISTER}};pluginWithDefaults.hooks.onRegister(context);}catch(error){logger.logger.error(`插件注册钩子执行失败: ${plugin.name}`,error);}}return ()=>{this.unregister(plugin.name);}}registerBatch(plugins,options={}){const sortedPlugins=this.sortByDependencies(plugins);sortedPlugins.forEach(plugin=>{this.register(plugin,options);});}sortByDependencies(plugins){const sorted=[];const visited=new Set;const visiting=new Set;const visit=plugin=>{if(visiting.has(plugin.name||"")){throw new Error(`检测到循环依赖: ${plugin.name}`)}if(visited.has(plugin.name||"")){return}visiting.add(plugin.name||"");if(plugin.dependencies){plugin.dependencies.forEach(depName=>{const dep=plugins.find(p=>p.name===depName);if(dep){visit(dep);}});}visiting.delete(plugin.name||"");visited.add(plugin.name||"");sorted.push(plugin);};plugins.forEach(plugin=>{if(!visited.has(plugin.name||"")){visit(plugin);}});return sorted}unregister(name){const registration=this.plugins.get(name);if(!registration){return}if(registration.plugin.hooks?.onDestroy){try{const context={config:{},meta:{stage:PluginLifecycleStage.DESTROY}};registration.plugin.hooks.onDestroy(context);}catch(error){logger.logger.error(`插件销毁钩子执行失败: ${name}`,error);}}this.plugins.delete(name);logger.logger.debug(`路由插件已取消注册: ${name}`);}async executeHooks(stage,context){const enabledPlugins=Array.from(this.plugins.values()).filter(reg=>reg.plugin.enabled!==false).sort((a,b)=>(a.plugin.priority||100)-(b.plugin.priority||100));const hookMap={[PluginLifecycleStage.REGISTER]:"onRegister",[PluginLifecycleStage.BEFORE_INIT]:"onBeforeInit",[PluginLifecycleStage.AFTER_INIT]:"onAfterInit",[PluginLifecycleStage.BEFORE_TRANSFORM]:"onBeforeTransform",[PluginLifecycleStage.AFTER_TRANSFORM]:"onAfterTransform",[PluginLifecycleStage.BEFORE_MATCH]:"onBeforeMatch",[PluginLifecycleStage.AFTER_MATCH]:"onAfterMatch",[PluginLifecycleStage.DESTROY]:"onDestroy"};const hookName=hookMap[stage];if(!hookName){return}for(const registration of enabledPlugins){const hook=registration.plugin.hooks?.[hookName];if(hook){try{await hook(context);}catch(error){logger.logger.error(`插件钩子执行失败: ${registration.plugin.name}.${hookName}`,error);}}}}getPlugin(name){return this.plugins.get(name)?.plugin}getAllPlugins(){return Array.from(this.plugins.values()).map(reg=>reg.plugin)}getEnabledPlugins(){return Array.from(this.plugins.values()).filter(reg=>reg.plugin.enabled!==false).map(reg=>reg.plugin)}clear(){for(const[name,registration]of this.plugins.entries()){if(registration.plugin.hooks?.onDestroy){try{const context={config:{},meta:{stage:PluginLifecycleStage.DESTROY}};registration.plugin.hooks.onDestroy(context);}catch(error){logger.logger.error(`插件销毁钩子执行失败: ${name}`,error);}}}this.plugins.clear();logger.logger.debug("所有路由插件已清空");}getCount(){return this.plugins.size}constructor(){_define_property$l(this,"plugins",new Map);}}let pluginManagerInstance=null;function getRouterPluginManager(){if(!pluginManagerInstance){pluginManagerInstance=new RouterPluginManager;}return pluginManagerInstance}
121
-
122
- function _define_property$k(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class RouterMonitoring{trackRouteAccess(to,from,success=true,error){if(!this.config.enabled||!this.config.trackAccess){return}if(Math.random()>this.config.sampleRate){return}const record={path:to.path,name:to.meta?.name,timestamp:Date.now(),from:from?.path,success,error:error?.message};if(this.currentRoute&&this.currentRouteStartTime>0){record.duration=Date.now()-this.currentRouteStartTime;}this.accessRecords.push(record);if(this.accessRecords.length>this.config.maxRecords){this.accessRecords.shift();}this.monitoringService.trackEvent("route_access",{path:to.path,name:to.meta?.name,success,error:error?.message});this.currentRoute=to;this.currentRouteStartTime=Date.now();logger.logger.debug("路由访问已记录",record);}trackRoutePerformance(routeName,metrics){if(!this.config.enabled||!this.config.trackPerformance){return}if(Math.random()>this.config.sampleRate){return}const routeMetrics=this.performanceMetrics.get(routeName)||[];routeMetrics.push(metrics);if(routeMetrics.length>100){routeMetrics.shift();}this.performanceMetrics.set(routeName,routeMetrics);this.monitoringService.reportPerformance({[`route_${routeName}_match`]:metrics.matchTime||0,[`route_${routeName}_load`]:metrics.loadTime||0,[`route_${routeName}_render`]:metrics.renderTime||0,[`route_${routeName}_total`]:metrics.totalTime||0});logger.logger.debug(`路由性能指标已记录: ${routeName}`,metrics);}trackRouteError(error,context){if(!this.config.enabled||!this.config.trackErrors){return}if(Math.random()>this.config.sampleRate){return}this.monitoringService.captureError(error,{type:"router",...context});logger.logger.error("路由错误已记录",error,context);}getAccessStats(){const stats={total:this.accessRecords.length,success:0,failed:0,byPath:{},byName:{},averageDuration:0};let totalDuration=0;let durationCount=0;for(const record of this.accessRecords){if(record.success){stats.success++;}else {stats.failed++;}stats.byPath[record.path]=(stats.byPath[record.path]||0)+1;if(record.name){stats.byName[record.name]=(stats.byName[record.name]||0)+1;}if(record.duration){totalDuration+=record.duration;durationCount++;}}stats.averageDuration=durationCount>0?totalDuration/durationCount:0;return stats}getPerformanceStats(){const stats={};for(const[routeName,metrics]of this.performanceMetrics.entries()){let totalMatchTime=0;let totalLoadTime=0;let totalRenderTime=0;let totalTotalTime=0;let count=0;for(const metric of metrics){if(metric.matchTime){totalMatchTime+=metric.matchTime;}if(metric.loadTime){totalLoadTime+=metric.loadTime;}if(metric.renderTime){totalRenderTime+=metric.renderTime;}if(metric.totalTime){totalTotalTime+=metric.totalTime;}count++;}stats[routeName]={count,averageMatchTime:count>0?totalMatchTime/count:0,averageLoadTime:count>0?totalLoadTime/count:0,averageRenderTime:count>0?totalRenderTime/count:0,averageTotalTime:count>0?totalTotalTime/count:0};}return stats}clear(){this.accessRecords=[];this.performanceMetrics.clear();logger.logger.debug("路由监控记录已清空");}getReport(){return {access:this.getAccessStats(),performance:this.getPerformanceStats(),timestamp:Date.now()}}constructor(config={}){_define_property$k(this,"accessRecords",[]);_define_property$k(this,"performanceMetrics",new Map);_define_property$k(this,"config",void 0);_define_property$k(this,"monitoringService",monitoring.getMonitoring());_define_property$k(this,"currentRouteStartTime",0);_define_property$k(this,"currentRoute",void 0);this.config={enabled:config.enabled??true,trackAccess:config.trackAccess??true,trackPerformance:config.trackPerformance??true,trackErrors:config.trackErrors??true,maxRecords:config.maxRecords??1e3,sampleRate:config.sampleRate??1};}}let routerMonitoringInstance=null;function getRouterMonitoring(config){if(!routerMonitoringInstance){routerMonitoringInstance=new RouterMonitoring(config);}return routerMonitoringInstance}
123
-
124
- function _define_property$j(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class AdapterManager{register(registration){if(!registration.name){throw new Error("适配器必须提供名称")}if(!registration.factory||typeof registration.factory!=="function"){throw new Error("适配器必须提供工厂函数")}const adapterRegistration={priority:100,enabled:true,...registration};this.adapters.set(registration.name,adapterRegistration);logger.logger.debug(`路由适配器已注册: ${registration.name}`);if(!this.defaultAdapterName){this.defaultAdapterName=registration.name;}return ()=>{this.unregister(registration.name);}}registerBatch(registrations){registrations.forEach(registration=>this.register(registration));}unregister(name){if(this.adapters.has(name)){this.adapters.delete(name);logger.logger.debug(`路由适配器已取消注册: ${name}`);if(this.defaultAdapterName===name){const firstAdapter=Array.from(this.adapters.keys())[0];this.defaultAdapterName=firstAdapter||null;}}}async createAdapter(config,name){const adapterName=name||this.defaultAdapterName;if(!adapterName){throw new RouterError("没有可用的路由适配器",RouterErrorCode.ROUTER_NOT_INITIALIZED)}const registration=this.adapters.get(adapterName);if(!registration){throw new RouterError(`路由适配器不存在: ${adapterName}`,RouterErrorCode.ROUTER_CONFIG_ERROR,undefined,undefined,{adapterName})}if(!registration.enabled){throw new RouterError(`路由适配器已禁用: ${adapterName}`,RouterErrorCode.ROUTER_CONFIG_ERROR,undefined,undefined,{adapterName})}try{const adapter=await registration.factory(config);if(!adapter||typeof adapter.initialize!=="function"){throw new Error("适配器实例无效")}await adapter.initialize(config);logger.logger.info(`路由适配器已创建并初始化: ${adapterName}`);return adapter}catch(error){logger.logger.error(`创建路由适配器失败: ${adapterName}`,error);const errorContext={adapterName};if(error instanceof Error){errorContext.originalError=error;}throw new RouterError(`创建路由适配器失败: ${adapterName}`,RouterErrorCode.ROUTER_CONFIG_ERROR,undefined,error instanceof Error?error:undefined,errorContext)}}setCurrentAdapter(adapter){if(this.currentAdapter&&this.currentAdapter.destroy){try{this.currentAdapter.destroy();}catch(error){logger.logger.warn("销毁旧适配器失败",error);}}this.currentAdapter=adapter;logger.logger.debug(`当前路由适配器已设置: ${adapter.name}`);}getCurrentAdapter(){return this.currentAdapter}setDefaultAdapter(name){if(!this.adapters.has(name)){throw new Error(`适配器不存在: ${name}`)}this.defaultAdapterName=name;logger.logger.debug(`默认路由适配器已设置: ${name}`);}getDefaultAdapterName(){return this.defaultAdapterName}getAllAdapters(){return Array.from(this.adapters.values())}getEnabledAdapters(){return Array.from(this.adapters.values()).filter(a=>a.enabled!==false)}getAdapter(name){return this.adapters.get(name)}clear(){if(this.currentAdapter&&this.currentAdapter.destroy){try{this.currentAdapter.destroy();}catch(error){logger.logger.warn("销毁适配器失败",error);}}this.adapters.clear();this.currentAdapter=null;this.defaultAdapterName=null;logger.logger.debug("所有路由适配器已清空");}getCount(){return this.adapters.size}constructor(){_define_property$j(this,"adapters",new Map);_define_property$j(this,"currentAdapter",null);_define_property$j(this,"defaultAdapterName",null);}}let adapterManagerInstance=null;function getAdapterManager(){if(!adapterManagerInstance){adapterManagerInstance=new AdapterManager;}return adapterManagerInstance}
125
-
126
- function _define_property$i(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class ReactRouterAdapter{async initialize(config){const transformResult=await transformRoutes(config.routes);const reactRoutes=await transformRoutesToReactRoutes(transformResult.routes,transformResult,config.defaultRouteErrorComponent,config.defaultRouteLoadingComponent,Boolean(config.options?.hydrationData));const mode=config.mode||"browser";if(mode==="browser"){this.router=reactRouterDom.createBrowserRouter(reactRoutes,config.options);}else if(mode==="hash"){this.router=reactRouterDom.createHashRouter(reactRoutes,config.options);}else if(mode==="memory"){this.router=reactRouterDom.createMemoryRouter(reactRoutes,config.options);}else {throw new Error(`不支持的路由模式: ${mode}`)}logger.logger.debug("React Router 适配器初始化完成");}mount(_app){if(!this.router){throw new Error("适配器未初始化")}logger.logger.debug("React Router 适配器已挂载");}navigate(to,options){if(!this.router){throw new Error("适配器未初始化")}if(options?.replace){this.router.navigate(to,{replace:true,state:options.state});}else {this.router.navigate(to,{state:options?.state});}}getCurrentRoute(){if(!this.router){throw new Error("适配器未初始化")}const state=this.router.state;const location=state.location;const query={};if(location.search){const params=new URLSearchParams(location.search);params.forEach((value,key)=>{query[key]=value;});}return {path:location.pathname+location.hash,query,params:location.state}}getRouter(){return this.router}destroy(){this.router=null;logger.logger.debug("React Router 适配器已销毁");}constructor(){_define_property$i(this,"name","react-router");_define_property$i(this,"version","6.0.0");_define_property$i(this,"router",null);}}function createReactRouterAdapter(){return _config=>{return new ReactRouterAdapter}}
127
-
128
- function _define_property$h(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class RouterManager{static getInstance(){if(!RouterManager.instance){RouterManager.instance=new RouterManager;}return RouterManager.instance}async initialize(config){if(config.enabled===false||config.enabled==="disabled"){logger.logger.info("路由系统已禁用");return}if(config.enableValidation!==false){try{RouterConfigValidator.validate(config);logger.logger.debug("路由配置验证通过");}catch(error){logger.logger.error("路由配置验证失败",error);if(process.env.NODE_ENV==="development"){throw error}}}await this.pluginManager.executeHooks(PluginLifecycleStage.BEFORE_INIT,{config});if(config.hooks){const lifecycleManager=getRouterLifecycleManager();lifecycleManager.register(config.hooks);logger.logger.debug("路由生命周期钩子已注册");}if(!config.routes){throw new RouterError("路由配置不能为空",RouterErrorCode.ROUTER_CONFIG_ERROR)}this.preloader.updateConfig(config.preload);this.preloader.clear();let result;const cacheKey=config.routes;const cachedResult=this.cache.get(cacheKey);if(cachedResult){logger.logger.debug("使用缓存的路由转换结果");result=cachedResult;}else {await this.pluginManager.executeHooks(PluginLifecycleStage.BEFORE_TRANSFORM,{config});result=await transformRoutes(config.routes,config.transformOptions);await this.pluginManager.executeHooks(PluginLifecycleStage.AFTER_TRANSFORM,{config,routes:result.routes});this.cache.set(cacheKey,result);}const enableHydrateFallback=config.enableHydrateFallback??Boolean(config.options?.hydrationData);const reactRoutes=await transformRoutesToReactRoutes(result.routes,result,config.defaultRouteErrorComponent,config.defaultRouteLoadingComponent,enableHydrateFallback);if(result.routes){this.preloader.registerRoutes(result.routes,result);this.preloader.startPreload();}await this.resolveInitialLazyRoutes(reactRoutes,!enableHydrateFallback);let routerInstance=null;if(config.mode==="browser"){routerInstance=reactRouterDom.createBrowserRouter(reactRoutes,config.options);}else if(config.mode==="hash"){routerInstance=reactRouterDom.createHashRouter(reactRoutes,config.options);}else if(config.mode==="memory"){routerInstance=reactRouterDom.createMemoryRouter(reactRoutes,config.options);}if(!routerInstance){throw new RouterError("路由模式不支持",RouterErrorCode.ROUTER_CONFIG_ERROR,undefined,undefined,{mode:config.mode})}this.router=routerInstance;this.initialized=true;await this.pluginManager.executeHooks(PluginLifecycleStage.AFTER_INIT,{config,routes:result.routes});const initialPath=typeof window!=="undefined"?`${window.location.pathname}${window.location.search}${window.location.hash}`:this.router?.state?.location?.pathname??"/";this.monitoring.trackRouteAccess({path:initialPath,meta:{name:"router-init"}},undefined,true);logger.logger.info("路由管理器初始化完成");}async resolveInitialLazyRoutes(routes,resolveAll=false){if(typeof window==="undefined"){return}let targetRoutes=[];if(resolveAll){const stack=[...routes];while(stack.length>0){const current=stack.shift();if(!current){continue}targetRoutes.push(current);if(current.children&&current.children.length>0){stack.push(...current.children);}}}else {const matches=reactRouterDom.matchRoutes(routes,window.location.pathname)??[];if(matches.length===0){return}targetRoutes=matches.map(match=>match.route);}await Promise.all(targetRoutes.map(async route=>{const lazy=route.lazy;if(typeof lazy!=="function"){return}try{const resolved=await lazy();Object.assign(route,resolved);delete route.lazy;}catch(error){logger.logger.warn("首屏路由懒加载预解析失败,回退到 Router 默认懒加载",error);}}));}getRouter(){return this.router}isInitialized(){return this.initialized}destroy(){this.pluginManager.executeHooks(PluginLifecycleStage.DESTROY,{config:{}});this.preloader.stopPreload();this.router=null;this.initialized=false;const lifecycleManager=getRouterLifecycleManager();lifecycleManager.clear();const middlewareManager=getRouterMiddlewareManager();middlewareManager.clear();logger.logger.info("路由管理器已销毁");}getCache(){return this.cache}getPreloader(){return this.preloader}getPluginManager(){return this.pluginManager}getMonitoring(){return this.monitoring}constructor(){_define_property$h(this,"router",null);_define_property$h(this,"initialized",false);_define_property$h(this,"cache",getRouteCache());_define_property$h(this,"preloader",getRoutePreloader());_define_property$h(this,"pluginManager",getRouterPluginManager());_define_property$h(this,"monitoring",getRouterMonitoring());_define_property$h(this,"adapterManager",getAdapterManager());this.adapterManager.register({name:"react-router",factory:createReactRouterAdapter(),priority:10});}}_define_property$h(RouterManager,"instance",null);function getRouterManager(){return RouterManager.getInstance()}
129
-
130
- var RouterManager$1 = /*#__PURE__*/Object.freeze({
131
- __proto__: null,
132
- RouterManager: RouterManager,
133
- getRouterManager: getRouterManager
134
- });
135
-
136
- function _define_property$g(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}const OptimizedAppContent=React.memo(({options,services,context,securityConfig:_securityConfig})=>{const initialLocale=React.useMemo(()=>{return options.locale?Object.keys(options.locale)[0]||"zh-CN":"zh-CN"},[options.locale]);const shouldUseRouter=React.useMemo(()=>{const routerEnabled=options.router?options.router.enabled!==false&&options.router.enabled!=="disabled":false;if(!routerEnabled){return false}const routerManager=getRouterManager();const router=routerManager.getRouter();return router!==null},[options.router]);const router=React.useMemo(()=>{if(!shouldUseRouter){return null}const routerManager=getRouterManager();return routerManager.getRouter()},[shouldUseRouter]);const handleError=React.useCallback(error=>{services.monitoring.captureError(error);},[services.monitoring]);const appContent=React.useMemo(()=>{if(shouldUseRouter&&router){return jsxRuntime.jsx(reactRouterDom.RouterProvider,{router:router})}return options.app||jsxRuntime.jsx(DefaultApp,{})},[shouldUseRouter,router,options.app]);return jsxRuntime.jsxs(ErrorBoundary,{fallback:options.errorFallback,onError:handleError,children:[jsxRuntime.jsx(InitializationErrorThrower,{}),jsxRuntime.jsx(AppContextProvider,{initialTheme:options.theme,initialLocale:initialLocale,initialAntdConfig:options.uiProvider||options.antd,initialInitializationContext:context,stateManager:services.stateManager,antdApp:options.uiApp||options.antdApp,children:jsxRuntime.jsx(BasicLayout,{globalProvider:options.globalProvider,children:appContent})})]})});OptimizedAppContent.displayName="OptimizedAppContent";class AppRenderer{initialize(container,rootOptions){this.container=container;if(!this.root){this.root=client.createRoot(container,rootOptions);}}async renderApp(options,services,context){if(!this.root){throw new Error("渲染器未初始化,请先调用 initialize()")}const securityConfig={enableXSSProtection:options.security?.enableXSSProtection??true,validateConfig:options.security?.validateConfig??true,sanitizeUserInput:options.security?.sanitizeUserInput??true,csrf:options.security?.csrf};if(securityConfig.enableXSSProtection&&securityConfig.validateConfig){Promise.resolve().then(()=>{try{const configStr=JSON.stringify(options);const validation=vlianUtils.SecurityUtils.validateInput(configStr);if(!validation.safe){services.monitoring.captureError(new Error("配置项包含不安全内容"),{reason:validation.reason});}}catch(error){}});}if(securityConfig.enableXSSProtection&&securityConfig.csrf?.enabled!==false){import('@vlian/csrf').then(({initCSRFManager})=>{initCSRFManager({headerName:securityConfig.csrf?.headerName,cookieName:securityConfig.csrf?.cookieName,getToken:securityConfig.csrf?.getToken,validateToken:securityConfig.csrf?.validateToken});}).catch(error=>{if(process.env.NODE_ENV==="development"){console.warn("CSRF 防护初始化失败:",error);}});}this.root.render(jsxRuntime.jsx(React.StrictMode,{children:jsxRuntime.jsx(OptimizedAppContent,{options:options,services:services,context:context,securityConfig:securityConfig})}));}renderSplashScreen(options,services,onComplete){if(!this.root){throw new Error("渲染器未初始化,请先调用 initialize()")}const initialLocale=options.locale?Object.keys(options.locale)[0]||"zh-CN":"zh-CN";this.root.render(jsxRuntime.jsx(React.StrictMode,{children:jsxRuntime.jsxs(ErrorBoundary,{fallback:options.errorFallback,onError:error=>{services.monitoring.captureError(error);},children:[jsxRuntime.jsx(InitializationErrorThrower,{}),jsxRuntime.jsx(AppContextProvider,{initialTheme:options.theme,initialLocale:initialLocale,initialAntdConfig:options.uiProvider||options.antd,stateManager:services.stateManager,antdApp:options.uiApp||options.antdApp,children:jsxRuntime.jsx(BasicLayout,{globalProvider:options.globalProvider,children:jsxRuntime.jsx(SplashScreen,{options:options,onComplete:onComplete})})})]})}));}renderError(options,services){if(!this.root){throw new Error("渲染器未初始化,请先调用 initialize()")}this.root.render(jsxRuntime.jsx(React.StrictMode,{children:jsxRuntime.jsxs(ErrorBoundary,{fallback:options.errorFallback,onError:err=>{services.monitoring.captureError(err);if(options.errorMonitor?.onError){options.errorMonitor.onError(err);}},children:[jsxRuntime.jsx(InitializationErrorThrower,{}),jsxRuntime.jsx("div",{children:"框架启动失败"})]})}));}destroy(){if(this.root){this.root.unmount();this.root=null;}this.container=null;}getContainer(){return this.container}constructor(){_define_property$g(this,"root",null);_define_property$g(this,"container",null);}}
137
-
138
- function _define_property$f(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}const STARTUP_METRIC_UNITS={ms:"ms",none:""};class PerformanceTracker{recordServiceInit(duration){this.metrics.serviceInitDuration=duration;}recordInitialization(duration){this.metrics.initializationDuration=duration;}recordFirstRender(duration){this.metrics.firstRenderDuration=duration;}recordTotalStartup(duration){this.metrics.totalStartupDuration=duration;}collectWebVitals(){if(typeof window==="undefined"){return}if("PerformanceObserver"in window){try{const fcpObserver=new PerformanceObserver(list=>{for(const entry of list.getEntries()){if(entry.name==="first-contentful-paint"){this.metrics.fcp=entry.startTime;this.report();}}});fcpObserver.observe({entryTypes:["paint"]});}catch(e){}}if("PerformanceObserver"in window){try{const lcpObserver=new PerformanceObserver(list=>{const entries=list.getEntries();const lastEntry=entries[entries.length-1];this.metrics.lcp=lastEntry.startTime;this.report();});lcpObserver.observe({entryTypes:["largest-contentful-paint"]});}catch(e){}}if("PerformanceObserver"in window){try{const fidObserver=new PerformanceObserver(list=>{for(const entry of list.getEntries()){if("processingStart"in entry&&"startTime"in entry){const eventEntry=entry;this.metrics.fid=eventEntry.processingStart-eventEntry.startTime;this.report();}}});fidObserver.observe({entryTypes:["first-input"]});}catch(e){}}if("PerformanceObserver"in window){try{let clsValue=0;const clsObserver=new PerformanceObserver(list=>{for(const entry of list.getEntries()){if(!entry.hadRecentInput){clsValue+=entry.value;}}this.metrics.cls=clsValue;this.report();});clsObserver.observe({entryTypes:["layout-shift"]});}catch(e){}}}report(){if(this.monitoring.reportPerformance){this.monitoring.reportPerformance(this.metrics);}}getMetrics(){return {...this.metrics}}getTotalDuration(){return performance.now()-this.startTime}constructor(monitoring){_define_property$f(this,"monitoring",void 0);_define_property$f(this,"metrics",{});_define_property$f(this,"startTime",void 0);this.monitoring=monitoring;this.startTime=performance.now();}}
139
-
140
- function _define_property$e(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class AppInstance{initialize(container,services){if(this.initialized){throw new Error(`应用实例 ${this.id} 已经初始化`)}if(this.destroyed){throw new Error(`应用实例 ${this.id} 已销毁,无法重新初始化`)}this.services=services;this.renderer.initialize(container,this.options.rootOptions);this.performanceTracker=new PerformanceTracker(services.monitoring);this.performanceTracker.collectWebVitals();this.initialized=true;}getRenderer(){if(!this.initialized){throw new Error(`应用实例 ${this.id} 未初始化`)}return this.renderer}getServices(){if(!this.services){throw new Error(`应用实例 ${this.id} 未初始化`)}return this.services}getPerformanceTracker(){return this.performanceTracker}getEventBus(){if(!this.services){return null}return this.services.eventBus}getOptions(){return this.options}isInitialized(){return this.initialized}isDestroyed(){return this.destroyed}destroy(){if(this.destroyed){return}this.renderer.destroy();this.services=null;this.performanceTracker=null;this.destroyed=true;}constructor(id,options){_define_property$e(this,"id",void 0);_define_property$e(this,"renderer",void 0);_define_property$e(this,"services",null);_define_property$e(this,"performanceTracker",null);_define_property$e(this,"options",void 0);_define_property$e(this,"initialized",false);_define_property$e(this,"destroyed",false);this.id=id;this.options=options;this.renderer=new AppRenderer;}}class AppInstanceManager{static getInstance(){if(!AppInstanceManager.instance){AppInstanceManager.instance=new AppInstanceManager;}return AppInstanceManager.instance}createInstance(id,options={}){const instanceId=id||`app-${Date.now()}-${Math.random().toString(36).substr(2,9)}`;if(this.instances.has(instanceId)){throw new Error(`应用实例 ${instanceId} 已存在`)}const instance=new AppInstance(instanceId,options);this.instances.set(instanceId,instance);if(!this.defaultInstanceId){this.defaultInstanceId=instanceId;}return instance}getInstance(id){const instanceId=id||this.defaultInstanceId;if(!instanceId){return undefined}return this.instances.get(instanceId)}destroyInstance(id){const instanceId=id||this.defaultInstanceId;if(!instanceId){return}const instance=this.instances.get(instanceId);if(instance){instance.destroy();this.instances.delete(instanceId);if(this.defaultInstanceId===instanceId){const remainingInstances=Array.from(this.instances.keys());this.defaultInstanceId=remainingInstances.length>0?remainingInstances[0]:null;}}}getAllInstances(){return Array.from(this.instances.values())}setDefaultInstance(id){if(!this.instances.has(id)){throw new Error(`应用实例 ${id} 不存在`)}this.defaultInstanceId=id;}getDefaultInstanceId(){return this.defaultInstanceId}clear(){for(const instance of this.instances.values()){instance.destroy();}this.instances.clear();this.defaultInstanceId=null;}constructor(){_define_property$e(this,"instances",new Map);_define_property$e(this,"defaultInstanceId",null);}}_define_property$e(AppInstanceManager,"instance",null);function getAppInstanceManager(){return AppInstanceManager.getInstance()}
141
-
142
- function _define_property$d(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}var RuntimeEnvironment=/*#__PURE__*/function(RuntimeEnvironment){RuntimeEnvironment["BROWSER"]="browser";RuntimeEnvironment["SSR"]="ssr";RuntimeEnvironment["MICRO_FRONTEND"]="micro-frontend";RuntimeEnvironment["NODE"]="node";RuntimeEnvironment["UNKNOWN"]="unknown";return RuntimeEnvironment}({});class EnvironmentDetector{static getInstance(){if(!EnvironmentDetector.instance){EnvironmentDetector.instance=new EnvironmentDetector;}return EnvironmentDetector.instance}detectMicroFrontend(){if(typeof window==="undefined"){return false}return !!(window.__POWERED_BY_QIANKUN__||window.__MICRO_APP_ENVIRONMENT__||window.singleSpa||window.__SINGLE_SPA__)}detectEnvironment(){if(this.isMicroFrontend){return "micro-frontend"}if(this.isSSR){return "ssr"}if(this.isBrowser){return "browser"}if(typeof process!=="undefined"){return "node"}return "unknown"}getEnvironment(){return this.environment}isBrowserEnvironment(){return this.isBrowser}isSSREnvironment(){return this.isSSR}isMicroFrontendEnvironment(){return this.isMicroFrontend}safeGetElement(selector){if(!this.isBrowser){return null}if(typeof selector==="function"){try{return selector()}catch{return null}}try{if(selector.startsWith("#")){return document.getElementById(selector.slice(1))}return document.querySelector(selector)}catch{return null}}safeExecuteBrowserAPI(fn,fallback){if(!this.isBrowser){return fallback}try{return fn()}catch{return fallback}}constructor(){_define_property$d(this,"environment",void 0);_define_property$d(this,"isBrowser",void 0);_define_property$d(this,"isSSR",void 0);_define_property$d(this,"isMicroFrontend",void 0);this.isBrowser=typeof window!=="undefined"&&typeof document!=="undefined";this.isSSR=typeof window==="undefined"&&typeof process!=="undefined";this.isMicroFrontend=this.detectMicroFrontend();this.environment=this.detectEnvironment();}}_define_property$d(EnvironmentDetector,"instance",null);function getEnvironmentDetector(){return EnvironmentDetector.getInstance()}
143
-
144
- var FrameworkEventType=/*#__PURE__*/function(FrameworkEventType){FrameworkEventType["APP_START"]="framework:app:start";FrameworkEventType["APP_STARTED"]="framework:app:started";FrameworkEventType["APP_INIT_START"]="framework:app:init:start";FrameworkEventType["APP_INIT_COMPLETE"]="framework:app:init:complete";FrameworkEventType["APP_INIT_ERROR"]="framework:app:init:error";FrameworkEventType["APP_RENDER_START"]="framework:app:render:start";FrameworkEventType["APP_RENDER_COMPLETE"]="framework:app:render:complete";FrameworkEventType["ROUTE_CHANGE"]="framework:route:change";FrameworkEventType["ROUTE_NAVIGATE_START"]="framework:route:navigate:start";FrameworkEventType["ROUTE_NAVIGATE_COMPLETE"]="framework:route:navigate:complete";FrameworkEventType["ERROR_OCCURRED"]="framework:error:occurred";FrameworkEventType["INSTANCE_CREATED"]="framework:instance:created";FrameworkEventType["INSTANCE_DESTROYED"]="framework:instance:destroyed";FrameworkEventType["PERFORMANCE_UPDATE"]="framework:performance:update";return FrameworkEventType}({});
145
-
146
- function _define_property$c(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class FrameworkEventManager{emitAppStart(instanceId){this.eventBus.emitSync(FrameworkEventType.APP_START,{instanceId});}emitAppStarted(instanceId,duration){this.eventBus.emitSync(FrameworkEventType.APP_STARTED,{instanceId,duration});}emitAppInitStart(instanceId){this.eventBus.emitSync(FrameworkEventType.APP_INIT_START,{instanceId});}emitAppInitComplete(instanceId,context,duration){this.eventBus.emitSync(FrameworkEventType.APP_INIT_COMPLETE,{instanceId,context,duration});}emitAppInitError(instanceId,error){this.eventBus.emitSync(FrameworkEventType.APP_INIT_ERROR,{instanceId,error});}emitAppRenderStart(instanceId){this.eventBus.emitSync(FrameworkEventType.APP_RENDER_START,{instanceId});}emitAppRenderComplete(instanceId,duration){this.eventBus.emitSync(FrameworkEventType.APP_RENDER_COMPLETE,{instanceId,duration});}emitRouteChange(from,to,params){this.eventBus.emitSync(FrameworkEventType.ROUTE_CHANGE,{from,to,params});}emitRouteNavigateStart(to,options){this.eventBus.emitSync(FrameworkEventType.ROUTE_NAVIGATE_START,{to,options});}emitRouteNavigateComplete(to,duration){this.eventBus.emitSync(FrameworkEventType.ROUTE_NAVIGATE_COMPLETE,{to,duration});}emitErrorOccurred(error,context){this.eventBus.emitSync(FrameworkEventType.ERROR_OCCURRED,{error,context});}emitInstanceCreated(instanceId){this.eventBus.emitSync(FrameworkEventType.INSTANCE_CREATED,{instanceId});}emitInstanceDestroyed(instanceId){this.eventBus.emitSync(FrameworkEventType.INSTANCE_DESTROYED,{instanceId});}emitPerformanceUpdate(metrics){this.eventBus.emitSync(FrameworkEventType.PERFORMANCE_UPDATE,{metrics});}constructor(eventBus){_define_property$c(this,"eventBus",void 0);this.eventBus=eventBus;}}
147
-
148
- function _define_property$b(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}function inferRetryable(error){if(error instanceof Error){const message=error.message.toLowerCase();return message.includes("timeout")||message.includes("network")}return false}class KernelBootError extends Error{constructor(message,options){super(message),_define_property$b(this,"code",void 0),_define_property$b(this,"phase",void 0),_define_property$b(this,"severity",void 0),_define_property$b(this,"retryable",void 0),_define_property$b(this,"traceId",void 0),_define_property$b(this,"cause",void 0);this.name="KernelBootError";this.code=options.code;this.phase=options.phase;this.traceId=options.traceId;this.severity=options.severity??"high";this.retryable=options.retryable??inferRetryable(options.cause);this.cause=options.cause;}}function toKernelBootError(error,phase,traceId){if(error instanceof KernelBootError){return error}if(error instanceof Error){return new KernelBootError(error.message,{code:"KERNEL_BOOT_FAILURE",phase,traceId,cause:error})}return new KernelBootError(String(error),{code:"KERNEL_BOOT_FAILURE",phase,traceId,cause:error})}
149
-
150
- function _define_property$a(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}const defaultLoggerAdapter={initialize(options){if(options.loggerLevel){logger.logger.setLevel(options.loggerLevel);}},setLevel(level){logger.logger.setLevel(level);},debug(message,...args){logger.logger.debug(message,...args);},info(message,...args){logger.logger.info(message,...args);},warn(message,...args){logger.logger.warn(message,...args);},error(message,...args){logger.logger.error(message,...args);}};const defaultMonitoringAdapter={initialize(){monitoring.initMonitoring();},captureError(error,metadata){try{const service=monitoring.initMonitoring();service.captureError(error,metadata);}catch{logger.logger.error("监控适配器上报失败",error,metadata);}},reportMetric(name,value,tags){logger.logger.debug(`metric:${name}`,{value,tags});},reportPhase(metric){logger.logger.debug("kernel.phase.metric",metric);}};let DefaultStateAdapter=class DefaultStateAdapter{initialize(){this.instance=new StateManager({enableRegistry:true,defaultScope:"app"});}getInstance(){if(!this.instance){this.initialize();}return this.instance}destroy(){if(this.instance){this.instance.destroy();this.instance=null;}}constructor(){_define_property$a(this,"instance",null);}};let DefaultEventBusAdapter=class DefaultEventBusAdapter{initialize(options){this.bus=new AppEventBus({enableTracking:process.env.NODE_ENV==="development",maxHistorySize:100,enableValidation:false,enablePerformanceMonitoring:process.env.NODE_ENV==="development",instanceId:options.instanceId});}emit(event,payload){if(!this.bus){this.initialize({});}this.bus.emit(event,payload);}on(event,handler){if(!this.bus){this.initialize({});}return this.bus.on(event,handler)}destroy(){if(this.bus){this.bus.clear();this.bus=null;}}constructor(){_define_property$a(this,"bus",null);}};const defaultI18nAdapter={initialize(snapshot){setupI18n(snapshot.resources||{});setLang(snapshot.locale);},setLocale(locale){setLang(locale);}};const defaultThemeAdapter={initialize(snapshot){if(typeof document==="undefined"){return}applyThemeToDocument$1(snapshot);},apply(snapshot){if(typeof document==="undefined"){return}applyThemeToDocument$1(snapshot);}};function applyThemeToDocument$1(theme){const root=document.documentElement;root.classList.remove("light","dark");const resolvedMode=theme.mode==="system"?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":theme.mode;root.classList.add(resolvedMode);if(theme.primaryColor){root.style.setProperty("--app-primary-color",theme.primaryColor);}if(theme.compatibility?.shadcn){Object.entries(theme.compatibility.shadcn).forEach(([key,value])=>{root.style.setProperty(`--${key}`,String(value));});}}const defaultErrorHandler={async handle(error){logger.logger.error("Kernel 启动失败",error);return {handled:true,shouldThrow:true}}};function resolveKernelAdapters(options){return {logger:options.adapters?.logger||defaultLoggerAdapter,monitoring:options.adapters?.monitoring||defaultMonitoringAdapter,state:options.adapters?.state||new DefaultStateAdapter,eventBus:options.adapters?.eventBus||new DefaultEventBusAdapter,i18n:options.adapters?.i18n||defaultI18nAdapter,theme:options.adapters?.theme||defaultThemeAdapter,errorHandler:options.adapters?.errorHandler||defaultErrorHandler}}
151
-
152
- const DEFAULT_THEME$1={mode:"light"};const DEFAULT_I18N$1={locale:"zh-CN"};async function withOptionalTimeout(task,timeoutMs,timeoutMessage="Kernel phase timeout"){if(!timeoutMs||timeoutMs<=0){return task()}return Promise.race([task(),new Promise((_,reject)=>{setTimeout(()=>reject(new Error(timeoutMessage)),timeoutMs);})])}async function startKernel(options={}){logger.initTraceIdGenerator("kernel");const traceId=logger.generateTraceId();logger.setCurrentTraceId(traceId);const adapters=resolveKernelAdapters(options);const metrics=[];let config={};let theme={...DEFAULT_THEME$1,...options.theme||{}};let i18n={...DEFAULT_I18N$1,...options.locale||{}};const emitPhaseMetric=metric=>{metrics.push(metric);adapters.monitoring.reportPhase?.(metric);adapters.monitoring.reportMetric?.("kernel.phase.duration",metric.duration,{phase:metric.phase});adapters.eventBus.emit("kernel.phase.end",metric);};const runPhase=async(phase,fn)=>{const enabled=options.enabledPhases?.[phase];if(enabled===false){adapters.eventBus.emit("kernel.phase.skipped",{phase,traceId});return}const startTime=performance.now();adapters.eventBus.emit("kernel.phase.start",{phase,traceId,startTime});try{await withOptionalTimeout(fn,options.performance?.phaseTimeoutMs?.[phase],`Kernel phase "${phase}" timeout`);emitPhaseMetric({phase,startTime,endTime:performance.now(),duration:performance.now()-startTime});}catch(error){const bootError=toKernelBootError(error,phase,traceId);adapters.monitoring.captureError(bootError,{phase,traceId});adapters.eventBus.emit("kernel.phase.error",bootError);const result=await adapters.errorHandler.handle(bootError);if(result.shouldThrow){throw bootError}}};await runPhase("prepare",async()=>{adapters.logger.initialize?.(options);adapters.logger.info("Kernel 启动准备完成",{traceId});});await runPhase("services",async()=>{await Promise.all([Promise.resolve(adapters.monitoring.initialize?.(options)),Promise.resolve(adapters.state.initialize?.(options)),Promise.resolve(adapters.eventBus.initialize?.(options))]);});await runPhase("config",async()=>{if(options.configLoader){try{config=await options.configLoader();}catch(error){config=options.configFallback||{};}}else {config=options.configFallback||{};}});await runPhase("i18n",async()=>{await adapters.i18n.initialize(i18n);});await runPhase("theme",async()=>{await Promise.resolve(adapters.theme.initialize?.(theme));await adapters.theme.apply(theme);});await runPhase("init",async()=>{await options.lifecycle?.beforeInitialization?.();const initContext=await initialization({loggerLevel:options.loggerLevel,locale:i18n.resources,lifecycle:options.lifecycle});await options.lifecycle?.afterInitialization?.(initContext);});await runPhase("ready",async()=>{adapters.eventBus.emit("kernel.ready",{traceId,theme,locale:i18n.locale,config});});if(options.enablePostReady!==false){await runPhase("postReady",async()=>{adapters.eventBus.emit("kernel.postReady",{traceId});});}const setTheme=async partial=>{theme={...theme,...partial};await adapters.theme.apply(theme);adapters.eventBus.emit("kernel.theme.changed",{traceId,theme});};const setThemeMode=async mode=>{await setTheme({mode});};const setLocale=async locale=>{i18n={...i18n,locale};await adapters.i18n.setLocale(locale);adapters.eventBus.emit("kernel.i18n.changed",{traceId,locale});};return {traceId,getTheme:()=>({...theme}),setTheme,setThemeMode,getI18n:()=>({...i18n}),setLocale,getConfig:()=>({...config}),getStateManager:()=>adapters.state.getInstance(),getEventBus:()=>adapters.eventBus,getMetrics:()=>[...metrics],destroy:()=>{adapters.state.destroy?.();adapters.eventBus.destroy?.();adapters.eventBus.emit("kernel.destroyed",{traceId});}}}
153
-
154
- async function startApp(options={},instanceId){const startTime=performance.now();const envDetector=getEnvironmentDetector();const instanceManager=getAppInstanceManager();logger.initTraceIdGenerator("app");const traceId=logger.generateTraceId();logger.setCurrentTraceId(traceId);let frameworkEventManager=null;let kernelTraceId=null;try{const container=options.container||envDetector.safeGetElement("#root");if(!container){throw new vlianUtils.InitializationError("未找到挂载容器",undefined,{container:options.container},vlianUtils.ErrorCode.CONTAINER_NOT_FOUND)}logger.logger.info("框架启动中...");if(options.antd&&!options.uiProvider){logger.logger.warn("[deprecated] StartOptions.antd 即将废弃,请迁移到 StartOptions.uiProvider");}if(options.antdApp&&!options.uiApp){logger.logger.warn("[deprecated] StartOptions.antdApp 即将废弃,请迁移到 StartOptions.uiApp");}const appInstance=instanceManager.createInstance(instanceId,options);const finalInstanceId=appInstance.id;let services=null;let servicesInitPromise=null;const ensureServicesInitialized=async()=>{if(services){return services}if(!servicesInitPromise){servicesInitPromise=initializeServices({...options,eventBus:{...options.eventBus,instanceId:finalInstanceId}});}services=await servicesInitPromise;return services};const kernelRuntime=await startKernel({loggerLevel:options.loggerLevel,locale:{locale:(options.locale?Object.keys(options.locale)[0]:"zh-CN")||"zh-CN",resources:options.locale},theme:{mode:options.theme?.mode||"light",primaryColor:options.theme?.primaryColor,compatibility:{antd:options.uiProvider||options.antd}},adapters:{monitoring:{initialize:async()=>{await ensureServicesInitialized();},captureError:(error,metadata)=>{if(services){services.monitoring.captureError(error,metadata);}else {logger.logger.error("Kernel 监控上报失败(服务尚未初始化):",error,metadata);}},reportMetric:(name,value,tags)=>{logger.logger.debug(`[kernel.metric] ${name}`,{value,tags,instanceId:finalInstanceId});}},state:{initialize:async()=>{await ensureServicesInitialized();},getInstance:()=>services?.stateManager??null},eventBus:{initialize:async()=>{await ensureServicesInitialized();},emit:(event,payload)=>{if(services){services.eventBus.emit(event,payload);}},on:(event,handler)=>{if(!services){return ()=>{}}return services.eventBus.on(event,handler)}},errorHandler:{async handle(error){logger.logger.error("Kernel 启动阶段失败:",error);return {handled:true,shouldThrow:true}}}},enabledPhases:{init:false},enablePostReady:false});kernelTraceId=kernelRuntime.traceId;const servicesInitStart=performance.now();const resolvedServices=await ensureServicesInitialized();const servicesInitDuration=performance.now()-servicesInitStart;frameworkEventManager=new FrameworkEventManager(resolvedServices.eventBus);frameworkEventManager.emitAppStart(finalInstanceId);frameworkEventManager.emitInstanceCreated(finalInstanceId);appInstance.initialize(container,resolvedServices);const routerManager=getRouterManager();if(options.router){await routerManager.initialize(options.router);}const performanceTracker=appInstance.getPerformanceTracker();if(performanceTracker){performanceTracker.recordServiceInit(servicesInitDuration);}const shouldShowSplash=shouldShowSplashScreen(options.showSplashScreen);const renderer=appInstance.getRenderer();const renderApp=async context=>{const renderStart=performance.now();if(frameworkEventManager){frameworkEventManager.emitAppRenderStart(finalInstanceId);}await renderer.renderApp(options,resolvedServices,context);const renderDuration=performance.now()-renderStart;if(frameworkEventManager){frameworkEventManager.emitAppRenderComplete(finalInstanceId,renderDuration);}if(resolvedServices.initializeNonCriticalServices){resolvedServices.initializeNonCriticalServices().catch(error=>{logger.logger.warn("非关键服务初始化失败(不影响应用运行):",error);});}if(performanceTracker){performanceTracker.recordFirstRender(renderDuration);const totalDuration=performance.now()-startTime;performanceTracker.recordTotalStartup(totalDuration);performanceTracker.report();}if(frameworkEventManager){frameworkEventManager.emitAppStarted(finalInstanceId,performance.now()-startTime);}kernelRuntime.getEventBus().emit("kernel.postReady",{traceId:kernelRuntime.traceId,instanceId:finalInstanceId,startupDuration:performance.now()-startTime});if(process.env.NODE_ENV==="development"&&typeof window!=="undefined"){setTimeout(()=>{const devToolsContainer=document.createElement("div");devToolsContainer.id="__framework_dev_tools__";document.body.appendChild(devToolsContainer);},1e3);}};if(shouldShowSplash){const onSplashComplete=context=>{logger.logger.info("启动页初始化完成");if(frameworkEventManager){const initDuration=context.duration||0;frameworkEventManager.emitAppInitComplete(finalInstanceId,context,initDuration);}if(options.onSplashComplete){Promise.resolve(options.onSplashComplete(()=>{logger.logger.info("框架加载完成");renderApp(context);},context)).catch(error=>{logger.logger.error("onSplashComplete 回调执行失败:",error);initializationErrorState.setError(error);renderApp(context);});}else {logger.logger.info("框架加载完成");renderApp(context);}};if(frameworkEventManager){frameworkEventManager.emitAppInitStart(finalInstanceId);}renderer.renderSplashScreen(options,resolvedServices,onSplashComplete);}else {logger.logger.info("开始执行初始化(无启动页)");if(frameworkEventManager){frameworkEventManager.emitAppInitStart(finalInstanceId);}try{const initStart=performance.now();const initContext=await middlewareManager.execute(options,async()=>{return await initialization(options,(progress,step)=>{logger.logger.debug(`初始化进度: ${progress}%${step?` - ${step}`:""}`);})});const initDuration=performance.now()-initStart;if(frameworkEventManager){frameworkEventManager.emitAppInitComplete(finalInstanceId,initContext,initDuration);}if(performanceTracker){performanceTracker.recordInitialization(initDuration);}logger.logger.info("初始化完成(无启动页)",initContext);logger.logger.info("框架加载完成");void renderApp(initContext);}catch(error){logger.logger.error("初始化失败:",error);if(frameworkEventManager){frameworkEventManager.emitAppInitError(finalInstanceId,error instanceof Error?error:new Error(String(error)));}initializationErrorState.setError(error);void renderApp();}}return instanceManager}catch(error){logger.logger.error("框架启动失败:",error);if(frameworkEventManager){const errorInstanceId=instanceId||instanceManager.getInstance()?.id;if(errorInstanceId){frameworkEventManager.emitErrorOccurred(error instanceof Error?error:new Error(String(error)),{phase:"startup"});}}if(kernelTraceId){logger.logger.error("Kernel Trace 失败上下文",{traceId:kernelTraceId});}const container=options.container||envDetector.safeGetElement("#root");if(container){const errorInstance=instanceManager.getInstance();if(errorInstance&&errorInstance.isInitialized()){const renderer=errorInstance.getRenderer();const services=errorInstance.getServices();initializationErrorState.setError(error);renderer.renderError(options,services);}}throw error}}
155
-
156
- function _define_property$9(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}var ConfigFileFormat=/*#__PURE__*/function(ConfigFileFormat){ConfigFileFormat["JSON"]="json";ConfigFileFormat["YAML"]="yaml";return ConfigFileFormat}({});let ConfigChangeNotifier=class ConfigChangeNotifier{addListener(listener){this.listeners.add(listener);return ()=>{this.listeners.delete(listener);}}removeListener(listener){this.listeners.delete(listener);}notify(newConfig,oldConfig){this.listeners.forEach(listener=>{try{listener(newConfig,oldConfig);}catch(error){logger.logger.warn("配置变更监听器执行失败:",error);}});}clear(){this.listeners.clear();}constructor(){_define_property$9(this,"listeners",new Set);}};const configChangeNotifier=new ConfigChangeNotifier;class ConfigLoader{static async loadFromJSON(path){try{if(typeof window!=="undefined"){const response=await fetch(path);if(!response.ok){throw new Error(`无法加载配置文件: ${path} (${response.status})`)}return await response.json()}if(typeof require!=="undefined"){const fs=require("fs");const content=fs.readFileSync(path,"utf-8");return JSON.parse(content)}throw new Error("不支持的环境:无法加载配置文件")}catch(error){logger.logger.error(`加载JSON配置文件失败: ${path}`,error);throw error}}static async loadFromYAML(path){try{if(typeof window!=="undefined"){const response=await fetch(path);if(!response.ok){throw new Error(`无法加载配置文件: ${path} (${response.status})`)}const text=await response.text();if(typeof window.YAML!=="undefined"){return window.YAML.parse(text)}try{return JSON.parse(text)}catch{throw new Error("需要YAML解析库,请安装 yaml 包")}}if(typeof require!=="undefined"){const fs=require("fs");const yaml=require("yaml");const content=fs.readFileSync(path,"utf-8");return yaml.parse(content)}throw new Error("不支持的环境:无法加载配置文件")}catch(error){logger.logger.error(`加载YAML配置文件失败: ${path}`,error);throw error}}static async loadFromFile(options){const{path,format="json",required=false,defaultConfig={}}=options;if(!path){if(required){throw new Error("配置文件路径未指定")}return defaultConfig}try{let config;switch(format){case "json":config=await this.loadFromJSON(path);break;case "yaml":config=await this.loadFromYAML(path);break;default:throw new Error(`不支持的配置文件格式: ${format}`)}logger.logger.info(`成功加载配置文件: ${path}`);return config}catch(error){if(required){throw error}logger.logger.warn(`配置文件加载失败,使用默认配置: ${path}`,error);return defaultConfig}}static mergeConfig(base,override){const merged={...base};for(const key in override){if(!Object.prototype.hasOwnProperty.call(override,key)){continue}const baseValue=merged[key];const overrideValue=override[key];if(baseValue&&overrideValue&&typeof baseValue==="object"&&typeof overrideValue==="object"&&!Array.isArray(baseValue)&&!Array.isArray(overrideValue)){merged[key]=this.mergeConfig(baseValue,overrideValue);}else {merged[key]=overrideValue;}}return merged}static async loadFromMultipleSources(sources){let merged={};for(const source of sources){if("path"in source&&"format"in source){const fileConfig=await this.loadFromFile(source);merged=this.mergeConfig(merged,fileConfig);}else if(!("path"in source)&&!("format"in source)){merged=this.mergeConfig(merged,source);}}return merged}static loadFromEnv(prefix="FRAMEWORK_"){const config={};if(typeof process==="undefined"||!process.env){return config}for(const[key,value]of Object.entries(process.env)){if(!key.startsWith(prefix)){continue}const configKey=key.slice(prefix.length).toLowerCase().split("_").map((part,index)=>index===0?part:part.charAt(0).toUpperCase()+part.slice(1)).join("");let parsedValue=value;if(value==="true"||value==="false"){parsedValue=value==="true";}else if(!isNaN(Number(value))){parsedValue=Number(value);}else if(value?.startsWith("{")||value?.startsWith("[")){try{parsedValue=JSON.parse(value);}catch{}}config[configKey]=parsedValue;}logger.logger.debug("从环境变量加载配置:",config);return config}static async loadFromAllSources(sources=[],defaultConfig={},includeEnv=true,envPrefix="FRAMEWORK_"){const oldConfig={...defaultConfig};let merged={...defaultConfig};const fileConfigs=await this.loadFromMultipleSources(sources.filter(source=>typeof source==="object"&&"path"in source));merged=this.mergeConfig(merged,fileConfigs);if(includeEnv){const envConfig=this.loadFromEnv(envPrefix);merged=this.mergeConfig(merged,envConfig);}const codeConfigs=sources.filter(source=>typeof source==="object"&&!("path"in source));for(const codeConfig of codeConfigs){merged=this.mergeConfig(merged,codeConfig);}configChangeNotifier.notify(merged,oldConfig);return merged}static onConfigChange(listener){return configChangeNotifier.addListener(listener)}static removeConfigChangeListener(listener){configChangeNotifier.removeListener(listener);}}
157
-
158
- function _define_property$8(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class RouterNavigation{static buildTargetPath(to,query){const base=typeof window!=="undefined"&&window.location?.origin?window.location.origin:"http://localhost";const url=new URL(to,base);if(query&&Object.keys(query).length>0){const params=new URLSearchParams(url.search);Object.entries(query).forEach(([key,value])=>{if(value===undefined||value===null){params.delete(key);return}params.set(key,String(value));});url.search=params.toString();}return `${url.pathname}${url.search}${url.hash}`}static async navigateInternal(to,options,depth,visited){const startTime=performance.now();if(depth>this.MAX_REDIRECTS){throw new Error(`路由重定向次数超过上限(${this.MAX_REDIRECTS}),可能存在循环重定向`)}const targetPath=this.buildTargetPath(to,options?.query);if(visited.has(targetPath)){throw new Error(`检测到循环重定向: ${targetPath}`)}visited.add(targetPath);const routerManager=await Promise.resolve().then(function () { return RouterManager$1; }).then(m=>m.getRouterManager());const router=routerManager.getRouter();if(!router){throw new Error("路由未初始化,无法导航")}const currentLocation=this.getCurrentRoute();const targetLocation={path:targetPath,query:options?.query};const lifecycleManager=getRouterLifecycleManager();const beforeEachResult=await lifecycleManager.beforeEach(targetLocation,currentLocation);let finalPath=targetPath;if(beforeEachResult===false){logger.logger.debug("路由导航被阻止: beforeEach 返回 false");return}if(typeof beforeEachResult==="string"){logger.logger.debug(`路由导航重定向: ${beforeEachResult}`);finalPath=this.buildTargetPath(beforeEachResult);}const middlewareManager=getRouterMiddlewareManager();const middlewareContext={to:{...targetLocation,path:finalPath},from:currentLocation,options};const middlewareResult=await middlewareManager.execute(middlewareContext);if(!middlewareResult.allow){if(middlewareResult.redirect){logger.logger.debug(`路由导航被中间件重定向: ${middlewareResult.redirect}`);return this.navigateInternal(middlewareResult.redirect,{...options,query:undefined},depth+1,visited)}logger.logger.debug(`路由导航被中间件阻止: ${middlewareResult.reason||"未知原因"}`);return}try{if(options?.replace){router.navigate(finalPath,{replace:true,state:options.state});}else {router.navigate(finalPath,{state:options?.state});}await lifecycleManager.afterEach({...targetLocation,path:finalPath},currentLocation);const duration=performance.now()-startTime;routerManager.getMonitoring().trackRoutePerformance(finalPath,{totalTime:duration});}catch(error){logger.logger.error("路由导航失败",error);throw error}}static async navigate(to,options){return this.navigateInternal(to,options,0,new Set)}static getCurrentRoute(){if(typeof window==="undefined"){return {path:"/",query:{}}}const pathname=window.location.pathname;const search=window.location.search;const hash=window.location.hash;const query={};if(search){const params=new URLSearchParams(search);params.forEach((value,key)=>{query[key]=value;});}return {path:pathname+hash,query}}static async goBack(fallback){if(window.history.length>1){window.history.back();}else if(fallback){await this.navigate(fallback);}else {logger.logger.warn("没有历史记录,无法返回");}}static goForward(){window.history.forward();}static async replace(to,options){return this.navigate(to,{...options,replace:true})}}_define_property$8(RouterNavigation,"MAX_REDIRECTS",10);
159
-
160
- function _define_property$7(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class DynamicRouteManager{async register(routes,namespace){const ns=namespace||"default";if(!Array.isArray(routes)||routes.length===0){throw new RouterError("路由配置必须是非空数组",RouterErrorCode.ROUTER_CONFIG_ERROR)}const existingRoutes=this.registeredRoutes.get(ns)||[];const existingNames=new Set(existingRoutes.map(r=>r.name));const newNames=routes.map(r=>r.name);const conflicts=newNames.filter(name=>existingNames.has(name));if(conflicts.length>0){throw new RouterError(`路由名称冲突: ${conflicts.join(", ")}`,RouterErrorCode.ROUTER_CONFIG_ERROR,undefined,undefined,{conflicts,namespace:ns})}const currentRoutes=this.registeredRoutes.get(ns)||[];this.registeredRoutes.set(ns,[...currentRoutes,...routes]);this.routeVersion++;logger.logger.info(`路由已注册: ${routes.length} 个路由到命名空间 "${ns}"`);return async()=>{await this.unregister(routes.map(r=>r.name),ns);}}async unregister(routeNames,namespace){const ns=namespace||"default";const routes=this.registeredRoutes.get(ns)||[];const filteredRoutes=routes.filter(r=>!routeNames.includes(r.name));if(filteredRoutes.length===routes.length){logger.logger.warn(`未找到要取消注册的路由: ${routeNames.join(", ")}`);return}if(filteredRoutes.length===0){this.registeredRoutes.delete(ns);}else {this.registeredRoutes.set(ns,filteredRoutes);}this.routeVersion++;logger.logger.info(`路由已取消注册: ${routeNames.length} 个路由从命名空间 "${ns}"`);}getRoutes(namespace){const ns=namespace||"default";return [...this.registeredRoutes.get(ns)||[]]}getAllRoutes(){return new Map(this.registeredRoutes)}clear(namespace){const ns=namespace||"default";this.registeredRoutes.delete(ns);this.routeVersion++;logger.logger.info(`路由命名空间已清空: "${ns}"`);}clearAll(){this.registeredRoutes.clear();this.routeVersion++;logger.logger.info("所有路由已清空");}getVersion(){return this.routeVersion}isRegistered(routeName,namespace){const ns=namespace||"default";const routes=this.registeredRoutes.get(ns)||[];return routes.some(r=>r.name===routeName)}async reload(){const routerManager=getRouterManager();if(!routerManager.isInitialized()){throw new RouterError("路由管理器未初始化",RouterErrorCode.ROUTER_NOT_INITIALIZED)}const allRoutes=[];this.registeredRoutes.forEach(routes=>{allRoutes.push(...routes);});if(allRoutes.length===0){logger.logger.warn("没有已注册的路由,无法重新加载");return}await transformRoutes(allRoutes);logger.logger.info("路由重新加载完成");}constructor(){_define_property$7(this,"registeredRoutes",new Map);_define_property$7(this,"routeVersion",0);}}let dynamicRouteManagerInstance=null;function getDynamicRouteManager(){if(!dynamicRouteManagerInstance){dynamicRouteManagerInstance=new DynamicRouteManager;}return dynamicRouteManagerInstance}
161
-
162
- function _define_property$6(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class RouteVersionManager{registerVersion(version){if(!/^\d+\.\d+\.\d+/.test(version.version)){throw new Error(`无效的版本号格式: ${version.version}`)}this.versions.set(version.version,{...version,createdAt:version.createdAt||Date.now()});logger.logger.debug(`路由版本已注册: ${version.version}`);}registerMigration(fromVersion,toVersion,migration){const key=`${fromVersion}->${toVersion}`;this.migrations.set(key,migration);logger.logger.debug(`路由版本迁移已注册: ${key}`);}checkCompatibility(version){const versionInfo=this.versions.get(version);if(!versionInfo){return false}if(versionInfo.compatible===false){return false}const currentMajor=parseInt(this.config.currentVersion.split(".")[0]);const targetMajor=parseInt(version.split(".")[0]);return currentMajor===targetMajor}async migrate(fromVersion,toVersion,routes){if(fromVersion===toVersion){return routes}const migrationKey=`${fromVersion}->${toVersion}`;const migration=this.migrations.get(migrationKey);if(!migration){return this.migrateStepwise(fromVersion,toVersion,routes)}try{const migratedRoutes=await migration(fromVersion,toVersion,routes);logger.logger.info(`路由版本迁移完成: ${fromVersion} -> ${toVersion}`);return migratedRoutes}catch(error){logger.logger.error(`路由版本迁移失败: ${fromVersion} -> ${toVersion}`,error);const errorContext={fromVersion,toVersion};if(error instanceof Error){errorContext.originalError=error;}throw new RouterError(`路由版本迁移失败: ${fromVersion} -> ${toVersion}`,RouterErrorCode.ROUTE_TRANSFORM_FAILED,undefined,error instanceof Error?error:undefined,errorContext)}}async migrateStepwise(fromVersion,toVersion,routes){const allVersions=Array.from(this.versions.keys()).sort((a,b)=>{const aParts=a.split(".").map(Number);const bParts=b.split(".").map(Number);for(let i=0;i<3;i++){if(aParts[i]!==bParts[i]){return aParts[i]-bParts[i]}}return 0});const fromIndex=allVersions.indexOf(fromVersion);const toIndex=allVersions.indexOf(toVersion);if(fromIndex===-1||toIndex===-1){throw new Error(`无法找到版本迁移路径: ${fromVersion} -> ${toVersion}`)}let currentRoutes=routes;const step=fromIndex<toIndex?1:-1;for(let i=fromIndex;i!==toIndex;i+=step){const currentVersion=allVersions[i];const nextVersion=allVersions[i+step];const migrationKey=`${currentVersion}->${nextVersion}`;const migration=this.migrations.get(migrationKey);if(migration){currentRoutes=await migration(currentVersion,nextVersion,currentRoutes);}else {logger.logger.warn(`缺少迁移函数: ${migrationKey},跳过迁移`);}}return currentRoutes}getVersion(version){return this.versions.get(version)}getAllVersions(){return Array.from(this.versions.values())}getCurrentVersion(){return this.versions.get(this.config.currentVersion)}async rollback(version,routes){return this.migrate(this.config.currentVersion,version,routes)}constructor(config){_define_property$6(this,"versions",new Map);_define_property$6(this,"migrations",new Map);_define_property$6(this,"config",void 0);this.config={enableVersionCheck:config.enableVersionCheck??true,enableAutoMigration:config.enableAutoMigration??false,currentVersion:config.currentVersion};}}let versionManagerInstance=null;function getRouteVersionManager(config){if(!versionManagerInstance&&config){versionManagerInstance=new RouteVersionManager(config);}if(!versionManagerInstance){throw new Error("路由版本管理器未初始化,请先提供配置")}return versionManagerInstance}
163
-
164
- function useAppEvent(eventBus,event,listener,options){const listenerRef=React.useRef(listener);listenerRef.current=listener;const optionsRef=React.useRef(options);optionsRef.current=options;React.useEffect(()=>{const wrappedListener=(data,metadata)=>{return listenerRef.current(data,metadata)};const unsubscribe=eventBus.on(event,wrappedListener,optionsRef.current);return unsubscribe},[eventBus,event]);}function useAppEventOnce(eventBus,event,listener,options){const listenerRef=React.useRef(listener);listenerRef.current=listener;const optionsRef=React.useRef(options);optionsRef.current=options;React.useEffect(()=>{const wrappedListener=(data,metadata)=>{return listenerRef.current(data,metadata)};const unsubscribe=eventBus.once(event,wrappedListener,optionsRef.current);return unsubscribe},[eventBus,event]);}function useAppEventEmitter(eventBus){return React.useCallback((event,data,metadata)=>{return eventBus.emit(event,data,metadata)},[eventBus])}
36
+ class ConfigSecurity{static async verifySignature(config,signature,options){if(!options.enabled){return true}if(!options.publicKey){throw new SecurityError("签名验证需要提供公钥")}if(!signature||signature.length===0){throw new SecurityError("签名不能为空")}try{if(typeof window==="undefined"||!window.crypto||!window.crypto.subtle){throw new SecurityError("签名验证需要浏览器支持 Web Crypto API")}const configString=JSON.stringify(config,Object.keys(config).sort());const encoder=new TextEncoder;const data=encoder.encode(configString);const signatureBuffer=Uint8Array.from(atob(signature),c=>c.charCodeAt(0));const algorithm=options.algorithm||"RSASSA-PKCS1-v1_5";let publicKey;try{const pemHeader="-----BEGIN PUBLIC KEY-----";const pemFooter="-----END PUBLIC KEY-----";let pemKey=options.publicKey;if(!pemKey.includes(pemHeader)){pemKey=`${pemHeader}
37
+ ${pemKey}
38
+ ${pemFooter}`;}const pemContents=pemKey.replace(pemHeader,"").replace(pemFooter,"").replace(/\s/g,"");const binaryDer=Uint8Array.from(atob(pemContents),c=>c.charCodeAt(0));publicKey=await window.crypto.subtle.importKey("spki",binaryDer.buffer,{name:algorithm,hash:"SHA-256"},false,["verify"]);}catch(importError){throw new SecurityError("公钥导入失败",importError instanceof Error?importError:undefined)}const isValid=await window.crypto.subtle.verify({name:algorithm},publicKey,signatureBuffer,data);return isValid}catch(error){if(error instanceof SecurityError){throw error}throw new SecurityError("签名验证失败",error instanceof Error?error:undefined)}}static verifyOrigin(options){if(!options.allowedOrigins||options.allowedOrigins.length===0){return true}if(typeof window==="undefined"){return true}const currentOrigin=window.location.origin;const referer=document.referrer;if(options.allowedOrigins.includes(currentOrigin)){return true}if(options.verifyReferer&&referer){try{const refererOrigin=new URL(referer).origin;if(options.allowedOrigins.includes(refererOrigin)){return true}}catch{}}return false}static verifyWhitelist(config,options){const errors=[];if(options.allowedKeys&&options.allowedKeys.length>0){const configKeys=Object.keys(config);const invalidKeys=configKeys.filter(key=>!options.allowedKeys.includes(key));if(invalidKeys.length>0){errors.push(`配置包含不允许的键: ${invalidKeys.join(", ")}`);}}if(options.forbiddenKeys&&options.forbiddenKeys.length>0){const configKeys=Object.keys(config);const forbiddenFound=configKeys.filter(key=>options.forbiddenKeys.includes(key));if(forbiddenFound.length>0){errors.push(`配置包含禁止的键: ${forbiddenFound.join(", ")}`);}}if(options.valueSchema){const result=vlianUtils.Validator.validateObject(options.valueSchema,config);if(!result.valid){errors.push(...result.errors);}}return {valid:errors.length===0,errors}}static sanitizeConfig(config){const sanitized={};for(const[key,value]of Object.entries(config)){if(typeof value==="string"){const validation=vlianUtils.SecurityUtils.validateInput(value);if(validation.safe&&validation.sanitized){sanitized[key]=validation.sanitized;}else {console.warn(`配置项 ${key} 包含潜在危险内容,已跳过`);}}else if(value&&typeof value==="object"&&!Array.isArray(value)){sanitized[key]=this.sanitizeConfig(value);}else {sanitized[key]=value;}}return sanitized}static async validateConfigSecurity(config,options){const errors=[];if(options.origin){const originValid=this.verifyOrigin(options.origin);if(!originValid){errors.push("配置来源验证失败");}}if(options.whitelist){const whitelistResult=this.verifyWhitelist(config,options.whitelist);if(!whitelistResult.valid){errors.push(...whitelistResult.errors);}}return {valid:errors.length===0,errors}}}
165
39
 
166
- function useEventBus(){const instanceManager=getAppInstanceManager();const instance=instanceManager.getInstance();if(!instance){throw new Error("应用实例未找到")}const eventBus=instance.getEventBus();if(!eventBus){throw new Error("事件总线未初始化")}return eventBus}
40
+ function _define_property$e(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class AnalyticsService{startBatchTimer(){if(this.batchTimer){return}this.batchTimer=setInterval(()=>{this.flush();},this.config.batchInterval);}stopBatchTimer(){if(this.batchTimer){clearInterval(this.batchTimer);this.batchTimer=null;}}track(event){if(!this.config.enabled){return}if(Math.random()>this.config.sampleRate){return}const anonymizedEvent={...event,timestamp:Date.now(),properties:this.anonymizeProperties(event.properties)};this.eventQueue.push(anonymizedEvent);if(this.config.onEvent){this.config.onEvent(anonymizedEvent);}if(this.eventQueue.length>=this.config.batchSize){this.flush();}}trackPageView(page,properties){this.track({type:"pageview",name:"page_view",properties:{page,...properties}});}trackClick(element,properties){this.track({type:"click",name:"click",properties:{element,...properties}});}trackCustom(name,properties){this.track({type:"custom",name,properties});}trackError(error,properties){this.track({type:"error",name:"error",properties:{errorName:error.name,errorMessage:error.message,errorStack:error.stack,...properties}});}trackPerformance(metrics,properties){this.track({type:"performance",name:"performance",properties:{...metrics,...properties}});}anonymizeProperties(properties){if(!this.config.anonymize||!properties){return properties}return vlianUtils.SecurityUtils.deepSanitize(properties)}flush(){if(this.eventQueue.length===0){return}const events=[...this.eventQueue];this.eventQueue=[];if(this.config.onBatch){this.config.onBatch(events);}logger.logger.debug(`分析服务批量上报 ${events.length} 个事件`);}enable(){this.config.enabled=true;this.startBatchTimer();}disable(){this.config.enabled=false;this.stopBatchTimer();this.flush();}destroy(){this.stopBatchTimer();this.flush();}constructor(config={}){_define_property$e(this,"config",void 0);_define_property$e(this,"eventQueue",[]);_define_property$e(this,"batchTimer",null);this.config={enabled:config.enabled??true,sampleRate:config.sampleRate??1,anonymize:config.anonymize??true,onEvent:config.onEvent??(()=>{}),onBatch:config.onBatch??(()=>{}),batchSize:config.batchSize??10,batchInterval:config.batchInterval??5e3};if(this.config.enabled){this.startBatchTimer();}}}let defaultAnalyticsService=null;function initAnalytics(config){if(!defaultAnalyticsService){defaultAnalyticsService=new AnalyticsService(config);}return defaultAnalyticsService}function getAnalytics(){if(!defaultAnalyticsService){return initAnalytics()}return defaultAnalyticsService}
167
41
 
168
- function toPrettyJson(value){try{return JSON.stringify(value,null,2)}catch{return String(value)}}function DevTools({appInstance,visible,onClose}){const[performanceMetrics,setPerformanceMetrics]=React.useState({});const stateManager=useStateManager();React.useEffect(()=>{if(!visible){return}const tracker=appInstance.getPerformanceTracker();if(!tracker){return}const metrics=tracker.getMetrics();setPerformanceMetrics({serviceInitDuration:metrics.serviceInitDuration||0,initializationDuration:metrics.initializationDuration||0,firstRenderDuration:metrics.firstRenderDuration||0,totalStartupDuration:metrics.totalStartupDuration||0,fcp:metrics.fcp||0,lcp:metrics.lcp||0,fid:metrics.fid||0,cls:metrics.cls||0});},[visible,appInstance]);if(!visible){return null}const options=appInstance.getOptions();const allStates=stateManager?.getAllStates?.()||[];return jsxRuntime.jsxs("div",{style:{position:"fixed",top:0,right:0,width:"min(680px, 95vw)",height:"100vh",zIndex:9999,background:"#fff",borderLeft:"1px solid #d9e2ec",padding:16,overflowY:"auto",boxShadow:"-8px 0 20px rgba(0, 0, 0, 0.08)"},children:[jsxRuntime.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[jsxRuntime.jsx("h3",{style:{margin:0},children:"DevTools"}),jsxRuntime.jsx("button",{onClick:onClose,style:{border:"none",background:"transparent",cursor:"pointer"},children:"关闭"})]}),jsxRuntime.jsxs("section",{style:{marginTop:12},children:[jsxRuntime.jsx("h4",{children:"实例"}),jsxRuntime.jsxs("div",{children:["id: ",appInstance.id]}),jsxRuntime.jsxs("div",{children:["initialized: ",String(appInstance.isInitialized())]})]}),jsxRuntime.jsxs("section",{style:{marginTop:12},children:[jsxRuntime.jsx("h4",{children:"性能"}),jsxRuntime.jsx("pre",{style:{background:"#f7fafc",padding:10,borderRadius:8},children:toPrettyJson(performanceMetrics)})]}),jsxRuntime.jsxs("section",{style:{marginTop:12},children:[jsxRuntime.jsx("h4",{children:"状态管理"}),jsxRuntime.jsxs("div",{children:["stateCount: ",allStates.length]}),jsxRuntime.jsx("pre",{style:{background:"#f7fafc",padding:10,borderRadius:8},children:toPrettyJson(allStates.slice(0,10))})]}),jsxRuntime.jsxs("section",{style:{marginTop:12},children:[jsxRuntime.jsx("h4",{children:"配置"}),jsxRuntime.jsx("pre",{style:{background:"#f7fafc",padding:10,borderRadius:8,whiteSpace:"pre-wrap"},children:toPrettyJson(options)})]})]})}function resolvePosition(position){const style={position:"fixed",zIndex:9998};const pos=position||"bottom-right";if(pos.includes("bottom"))style.bottom=16;if(pos.includes("top"))style.top=16;if(pos.includes("right"))style.right=16;if(pos.includes("left"))style.left=16;return style}function DevToolsTrigger({appInstance,position="bottom-right"}){const[visible,setVisible]=React.useState(false);if(process.env.NODE_ENV!=="development"){return null}return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("button",{onClick:()=>setVisible(true),style:{...resolvePosition(position),border:"none",background:"#2f80ed",color:"#fff",borderRadius:999,padding:"8px 14px",cursor:"pointer"},children:"DevTools"}),jsxRuntime.jsx(DevTools,{appInstance:appInstance,visible:visible,onClose:()=>setVisible(false)})]})}
42
+ const waitTime=(time=100)=>{return new Promise(resolve=>{setTimeout(()=>{resolve(true);},time);})};
169
43
 
170
- const start=async(options={})=>{await startApp(options);};const getStateManager=()=>{const instanceManager=getAppInstanceManager();const instance=instanceManager.getInstance();if(instance){return instance.getServices().stateManager}return null};
44
+ function _define_property$d(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class StateInstance{get(){if(this.destroyed){throw new Error(`StateInstance ${String(this.id)} has been destroyed`)}return this.value}set(valueOrUpdater){if(this.destroyed){throw new Error(`StateInstance ${String(this.id)} has been destroyed`)}const previousValue=this.value;let newValue;if(typeof valueOrUpdater==="function"){newValue=valueOrUpdater(this.value);}else {newValue=valueOrUpdater;}let processedValue=newValue;for(const middleware of this.middleware){processedValue=middleware(processedValue,previousValue);}if(processedValue===this.value){return}this.value=processedValue;if(this.devMode){console.debug(`[StateInstance] Updated: ${String(this.id)}`,{previous:previousValue,current:this.value});}this.notifySubscribers(this.value,previousValue);}subscribe(subscriber){if(this.destroyed){throw new Error(`StateInstance ${String(this.id)} has been destroyed`)}this.subscribers.add(subscriber);if(this.devMode){console.debug(`[StateInstance] Subscribed: ${String(this.id)}`,{subscriberCount:this.subscribers.size});}return ()=>{this.subscribers.delete(subscriber);if(this.devMode){console.debug(`[StateInstance] Unsubscribed: ${String(this.id)}`,{subscriberCount:this.subscribers.size});}}}getId(){return this.id}getScope(){return this.scope}destroy(){if(this.destroyed){return}this.destroyed=true;this.subscribers.clear();this.value=undefined;if(this.devMode){console.debug(`[StateInstance] Destroyed: ${String(this.id)}`);}}isDestroyed(){return this.destroyed}notifySubscribers(value,previous){const subscribers=Array.from(this.subscribers);for(const subscriber of subscribers){try{subscriber(value,previous);}catch(error){console.error(`[StateInstance] Error in subscriber for ${String(this.id)}:`,error);}}}constructor(initialValue,options={}){_define_property$d(this,"id",void 0);_define_property$d(this,"scope",void 0);_define_property$d(this,"value",void 0);_define_property$d(this,"subscribers",new Set);_define_property$d(this,"destroyed",false);_define_property$d(this,"devMode",void 0);_define_property$d(this,"middleware",void 0);this.value=initialValue;this.id=options.id??Symbol("StateInstance");this.scope=options.scope;this.devMode=options.devMode??false;this.middleware=options.middleware??[];if(this.devMode){console.debug(`[StateInstance] Created: ${String(this.id)}`,{scope:this.scope,initialValue:this.value});}}}
171
45
 
172
- class ConfigSecurity{static async verifySignature(config,signature,options){if(!options.enabled){return true}if(!options.publicKey){throw new SecurityError("签名验证需要提供公钥")}if(!signature||signature.length===0){throw new SecurityError("签名不能为空")}try{if(typeof window==="undefined"||!window.crypto||!window.crypto.subtle){throw new SecurityError("签名验证需要浏览器支持 Web Crypto API")}const configString=JSON.stringify(config,Object.keys(config).sort());const encoder=new TextEncoder;const data=encoder.encode(configString);const signatureBuffer=Uint8Array.from(atob(signature),c=>c.charCodeAt(0));const algorithm=options.algorithm||"RSASSA-PKCS1-v1_5";let publicKey;try{const pemHeader="-----BEGIN PUBLIC KEY-----";const pemFooter="-----END PUBLIC KEY-----";let pemKey=options.publicKey;if(!pemKey.includes(pemHeader)){pemKey=`${pemHeader}
173
- ${pemKey}
174
- ${pemFooter}`;}const pemContents=pemKey.replace(pemHeader,"").replace(pemFooter,"").replace(/\s/g,"");const binaryDer=Uint8Array.from(atob(pemContents),c=>c.charCodeAt(0));publicKey=await window.crypto.subtle.importKey("spki",binaryDer.buffer,{name:algorithm,hash:"SHA-256"},false,["verify"]);}catch(importError){throw new SecurityError("公钥导入失败",importError instanceof Error?importError:undefined)}const isValid=await window.crypto.subtle.verify({name:algorithm},publicKey,signatureBuffer,data);return isValid}catch(error){if(error instanceof SecurityError){throw error}throw new SecurityError("签名验证失败",error instanceof Error?error:undefined)}}static verifyOrigin(options){if(!options.allowedOrigins||options.allowedOrigins.length===0){return true}if(typeof window==="undefined"){return true}const currentOrigin=window.location.origin;const referer=document.referrer;if(options.allowedOrigins.includes(currentOrigin)){return true}if(options.verifyReferer&&referer){try{const refererOrigin=new URL(referer).origin;if(options.allowedOrigins.includes(refererOrigin)){return true}}catch{}}return false}static verifyWhitelist(config,options){const errors=[];if(options.allowedKeys&&options.allowedKeys.length>0){const configKeys=Object.keys(config);const invalidKeys=configKeys.filter(key=>!options.allowedKeys.includes(key));if(invalidKeys.length>0){errors.push(`配置包含不允许的键: ${invalidKeys.join(", ")}`);}}if(options.forbiddenKeys&&options.forbiddenKeys.length>0){const configKeys=Object.keys(config);const forbiddenFound=configKeys.filter(key=>options.forbiddenKeys.includes(key));if(forbiddenFound.length>0){errors.push(`配置包含禁止的键: ${forbiddenFound.join(", ")}`);}}if(options.valueSchema){const result=vlianUtils.Validator.validateObject(options.valueSchema,config);if(!result.valid){errors.push(...result.errors);}}return {valid:errors.length===0,errors}}static sanitizeConfig(config){const sanitized={};for(const[key,value]of Object.entries(config)){if(typeof value==="string"){const validation=vlianUtils.SecurityUtils.validateInput(value);if(validation.safe&&validation.sanitized){sanitized[key]=validation.sanitized;}else {console.warn(`配置项 ${key} 包含潜在危险内容,已跳过`);}}else if(value&&typeof value==="object"&&!Array.isArray(value)){sanitized[key]=this.sanitizeConfig(value);}else {sanitized[key]=value;}}return sanitized}static async validateConfigSecurity(config,options){const errors=[];if(options.origin){const originValid=this.verifyOrigin(options.origin);if(!originValid){errors.push("配置来源验证失败");}}if(options.whitelist){const whitelistResult=this.verifyWhitelist(config,options.whitelist);if(!whitelistResult.valid){errors.push(...whitelistResult.errors);}}return {valid:errors.length===0,errors}}}
46
+ function _define_property$c(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class StateScopeManager{register(instance,scope){const existingScope=this.instanceToScopeMap.get(instance);if(existingScope){this.unregister(instance);}if(!this.scopeMap.has(scope)){this.scopeMap.set(scope,new Set);}const instances=this.scopeMap.get(scope);instances.add(instance);this.instanceToScopeMap.set(instance,scope);}unregister(instance){const scope=this.instanceToScopeMap.get(instance);if(!scope){return}const instances=this.scopeMap.get(scope);if(instances){instances.delete(instance);if(instances.size===0){this.scopeMap.delete(scope);}}this.instanceToScopeMap.delete(instance);}getInstances(scope){const instances=this.scopeMap.get(scope);return instances?Array.from(instances):[]}getScope(instance){return this.instanceToScopeMap.get(instance)}destroyScope(scope){const instances=this.scopeMap.get(scope);if(!instances){return}for(const instance of instances){instance.destroy();this.instanceToScopeMap.delete(instance);}this.scopeMap.delete(scope);}destroyAll(){for(const instances of this.scopeMap.values()){for(const instance of instances){instance.destroy();}}this.scopeMap.clear();this.instanceToScopeMap.clear();}getAllScopes(){return Array.from(this.scopeMap.keys())}getScopeCount(){return this.scopeMap.size}getInstanceCount(){return this.instanceToScopeMap.size}constructor(){_define_property$c(this,"scopeMap",new Map);_define_property$c(this,"instanceToScopeMap",new Map);}}
175
47
 
176
- var runtimeSecurity = /*#__PURE__*/Object.freeze({
177
- __proto__: null,
178
- RuntimeSecurity: vlianUtils.RuntimeSecurity
179
- });
48
+ function _define_property$b(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class StateRegistry{register(instance){const id=instance.getId();if(this.instances.has(id)){console.warn(`[StateRegistry] Instance with id ${String(id)} already exists, replacing...`);}this.instances.set(id,instance);const scope=instance.getScope();if(scope){this.scopeManager.register(instance,scope);}}unregister(id){const instance=this.instances.get(id);if(!instance){return}this.scopeManager.unregister(instance);instance.destroy();this.instances.delete(id);}getInstance(id){return this.instances.get(id)}getInstancesByScope(scope){return this.scopeManager.getInstances(scope)}getAllInstances(){return Array.from(this.instances.values())}destroyScope(scope){const instances=this.scopeManager.getInstances(scope);for(const instance of instances){instance.destroy();this.instances.delete(instance.getId());}this.scopeManager.destroyScope(scope);}destroyAll(){for(const instance of this.instances.values()){instance.destroy();}this.instances.clear();this.scopeManager.destroyAll();}size(){return this.instances.size}constructor(){_define_property$b(this,"instances",new Map);_define_property$b(this,"scopeManager",void 0);this.scopeManager=new StateScopeManager;}}
180
49
 
181
- function _define_property$5(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class AnalyticsService{startBatchTimer(){if(this.batchTimer){return}this.batchTimer=setInterval(()=>{this.flush();},this.config.batchInterval);}stopBatchTimer(){if(this.batchTimer){clearInterval(this.batchTimer);this.batchTimer=null;}}track(event){if(!this.config.enabled){return}if(Math.random()>this.config.sampleRate){return}const anonymizedEvent={...event,timestamp:Date.now(),properties:this.anonymizeProperties(event.properties)};this.eventQueue.push(anonymizedEvent);if(this.config.onEvent){this.config.onEvent(anonymizedEvent);}if(this.eventQueue.length>=this.config.batchSize){this.flush();}}trackPageView(page,properties){this.track({type:"pageview",name:"page_view",properties:{page,...properties}});}trackClick(element,properties){this.track({type:"click",name:"click",properties:{element,...properties}});}trackCustom(name,properties){this.track({type:"custom",name,properties});}trackError(error,properties){this.track({type:"error",name:"error",properties:{errorName:error.name,errorMessage:error.message,errorStack:error.stack,...properties}});}trackPerformance(metrics,properties){this.track({type:"performance",name:"performance",properties:{...metrics,...properties}});}anonymizeProperties(properties){if(!this.config.anonymize||!properties){return properties}return vlianUtils.SecurityUtils.deepSanitize(properties)}flush(){if(this.eventQueue.length===0){return}const events=[...this.eventQueue];this.eventQueue=[];if(this.config.onBatch){this.config.onBatch(events);}logger.logger.debug(`分析服务批量上报 ${events.length} 个事件`);}enable(){this.config.enabled=true;this.startBatchTimer();}disable(){this.config.enabled=false;this.stopBatchTimer();this.flush();}destroy(){this.stopBatchTimer();this.flush();}constructor(config={}){_define_property$5(this,"config",void 0);_define_property$5(this,"eventQueue",[]);_define_property$5(this,"batchTimer",null);this.config={enabled:config.enabled??true,sampleRate:config.sampleRate??1,anonymize:config.anonymize??true,onEvent:config.onEvent??(()=>{}),onBatch:config.onBatch??(()=>{}),batchSize:config.batchSize??10,batchInterval:config.batchInterval??5e3};if(this.config.enabled){this.startBatchTimer();}}}let defaultAnalyticsService=null;function initAnalytics(config){if(!defaultAnalyticsService){defaultAnalyticsService=new AnalyticsService(config);}return defaultAnalyticsService}function getAnalytics(){if(!defaultAnalyticsService){return initAnalytics()}return defaultAnalyticsService}
50
+ function _define_property$a(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class DerivedStateInstance{get(){if(this.destroyed){throw new Error(`DerivedStateInstance ${String(this.id)} has been destroyed`)}return this.value}set(_valueOrUpdater){throw new Error("Derived state cannot be set directly. Modify the dependency states instead.")}subscribe(subscriber){if(this.destroyed){throw new Error(`DerivedStateInstance ${String(this.id)} has been destroyed`)}this.subscribers.add(subscriber);return ()=>{this.subscribers.delete(subscriber);}}getId(){return this.id}getScope(){return this.scope}getDependencies(){return this.config.dependencies}recompute(){if(this.destroyed||this.recomputing){return}this.recomputing=true;try{const dependencyValues=this.config.dependencies.map(dep=>dep.get());const newValue=this.config.derive(dependencyValues);const hasChanged=this.config.equalityCheck?!this.config.equalityCheck(this.value,newValue):this.value!==newValue;if(hasChanged){const previousValue=this.value;this.value=newValue;this.notifySubscribers(this.value,previousValue);}}catch(error){console.error(`[DerivedStateInstance] Error recomputing ${String(this.id)}:`,error);}finally{this.recomputing=false;}}destroy(){if(this.destroyed){return}this.destroyed=true;for(const unsubscribe of this.dependencyUnsubscribes){unsubscribe();}this.dependencyUnsubscribes.length=0;this.subscribers.clear();}isDestroyed(){return this.destroyed}setupDependencies(){for(const dependency of this.config.dependencies){const unsubscribe=dependency.subscribe(()=>{this.recompute();});this.dependencyUnsubscribes.push(unsubscribe);}}notifySubscribers(value,previous){const subscribers=Array.from(this.subscribers);for(const subscriber of subscribers){try{subscriber(value,previous);}catch(error){console.error(`[DerivedStateInstance] Error in subscriber for ${String(this.id)}:`,error);}}}constructor(config,options={}){_define_property$a(this,"id",void 0);_define_property$a(this,"scope",void 0);_define_property$a(this,"config",void 0);_define_property$a(this,"value",void 0);_define_property$a(this,"subscribers",new Set);_define_property$a(this,"dependencyUnsubscribes",[]);_define_property$a(this,"destroyed",false);_define_property$a(this,"recomputing",false);this.config=config;this.id=options.id??Symbol("DerivedStateInstance");this.scope=options.scope;this.setupDependencies();this.recompute();}}
182
51
 
183
- var analytics = /*#__PURE__*/Object.freeze({
184
- __proto__: null,
185
- AnalyticsService: AnalyticsService,
186
- getAnalytics: getAnalytics,
187
- initAnalytics: initAnalytics
188
- });
52
+ function _define_property$9(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class DefaultAdapter{createInstance(initialValue,options){if(this.destroyed){throw new Error("Adapter has been destroyed")}const instance=new StateInstance(initialValue,{id:options?.id,scope:options?.scope,devMode:options?.devMode,middleware:options?.middleware});this.instances.add(instance);return instance}destroy(){if(this.destroyed){return}for(const instance of this.instances){instance.destroy();}this.instances.clear();this.destroyed=true;}getName(){return this.name}constructor(){_define_property$9(this,"name","DefaultAdapter");_define_property$9(this,"destroyed",false);_define_property$9(this,"instances",new Set);}}
189
53
 
190
- const waitTime=(time=100)=>{return new Promise(resolve=>{setTimeout(()=>{resolve(true);},time);})};
54
+ function _define_property$8(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class AdapterFactory{static getDefaultAdapter(){if(!this.defaultAdapter){this.defaultAdapter=new DefaultAdapter;}return this.defaultAdapter}static createAdapter(adapterName){if(!adapterName){return this.getDefaultAdapter()}const factory=this.customAdapters.get(adapterName);if(!factory){throw new Error(`Adapter "${adapterName}" not found. Available adapters: ${Array.from(this.customAdapters.keys()).join(", ")}`)}return factory()}static registerAdapter(name,factory){if(this.customAdapters.has(name)){console.warn(`[AdapterFactory] Adapter "${name}" already registered, replacing...`);}this.customAdapters.set(name,factory);}static unregisterAdapter(name){this.customAdapters.delete(name);}static getRegisteredAdapters(){return Array.from(this.customAdapters.keys())}static reset(){if(this.defaultAdapter){this.defaultAdapter.destroy();this.defaultAdapter=null;}this.customAdapters.clear();}}_define_property$8(AdapterFactory,"defaultAdapter",null);_define_property$8(AdapterFactory,"customAdapters",new Map);
191
55
 
192
- function resolveStorage(storage){if(storage){return storage}if(typeof window==="undefined"||!window.localStorage){return null}return window.localStorage}function readPersistedValue(options,defaultKey){if(options.enabled===false){return null}const targetStorage=resolveStorage(options.storage);if(!targetStorage){return null}try{return targetStorage.getItem(options.key||defaultKey)}catch{return null}}function writePersistedValue(value,options,defaultKey){if(options.enabled===false||!value){return}const targetStorage=resolveStorage(options.storage);if(!targetStorage){return}try{targetStorage.setItem(options.key||defaultKey,value);}catch{}}
56
+ function _define_property$7(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}let ReduxStateInstance=class ReduxStateInstance{get(){if(this.destroyed){throw new Error(`ReduxStateInstance ${String(this.id)} has been destroyed`)}const state=this.store.getState();return state[this.sliceName]??this.previousValue}set(valueOrUpdater){if(this.destroyed){throw new Error(`ReduxStateInstance ${String(this.id)} has been destroyed`)}const currentValue=this.get();let newValue;if(typeof valueOrUpdater==="function"){newValue=valueOrUpdater(currentValue);}else {newValue=valueOrUpdater;}let processedValue=newValue;for(const middleware of this.middleware){processedValue=middleware(processedValue,currentValue);}if(processedValue===currentValue){return}this.previousValue=currentValue;const action=this.actions.setValue(processedValue);this.store.dispatch(action);if(this.devMode){console.debug(`[ReduxStateInstance] Updated: ${String(this.id)}`,{previous:currentValue,current:processedValue,action});}}subscribe(subscriber){if(this.destroyed){throw new Error(`ReduxStateInstance ${String(this.id)} has been destroyed`)}this.subscribers.add(subscriber);if(this.devMode){console.debug(`[ReduxStateInstance] Subscribed: ${String(this.id)}`,{subscriberCount:this.subscribers.size});}return ()=>{this.subscribers.delete(subscriber);if(this.devMode){console.debug(`[ReduxStateInstance] Unsubscribed: ${String(this.id)}`,{subscriberCount:this.subscribers.size});}}}getId(){return this.id}getScope(){return this.scope}destroy(){if(this.destroyed){return}this.destroyed=true;if(this.unsubscribeStore){this.unsubscribeStore();this.unsubscribeStore=undefined;}this.subscribers.clear();if(this.devMode){console.debug(`[ReduxStateInstance] Destroyed: ${String(this.id)}`);}}isDestroyed(){return this.destroyed}notifySubscribers(){if(this.destroyed){return}try{const currentValue=this.get();if(currentValue===this.previousValue){return}const previousValue=this.previousValue;this.previousValue=currentValue;const subscribers=Array.from(this.subscribers);for(const subscriber of subscribers){try{subscriber(currentValue,previousValue);}catch(error){console.error(`[ReduxStateInstance] Error in subscriber for ${String(this.id)}:`,error);}}}catch(error){console.error(`[ReduxStateInstance] Error getting state for ${String(this.id)}:`,error);}}constructor(store,sliceName,actions,initialValue,options={}){_define_property$7(this,"id",void 0);_define_property$7(this,"scope",void 0);_define_property$7(this,"store",void 0);_define_property$7(this,"sliceName",void 0);_define_property$7(this,"actions",void 0);_define_property$7(this,"subscribers",new Set);_define_property$7(this,"unsubscribeStore",void 0);_define_property$7(this,"destroyed",false);_define_property$7(this,"devMode",void 0);_define_property$7(this,"middleware",void 0);_define_property$7(this,"previousValue",void 0);this.store=store;this.sliceName=sliceName;this.actions=actions;this.id=options.id??Symbol("ReduxStateInstance");this.scope=options.scope;this.devMode=options.devMode??false;this.middleware=options.middleware??[];this.previousValue=initialValue;this.unsubscribeStore=this.store.subscribe(()=>{this.notifySubscribers();});if(this.devMode){console.debug(`[ReduxStateInstance] Created: ${String(this.id)}`,{scope:this.scope,sliceName:this.sliceName,initialValue});}}};let DynamicReducerManager=class DynamicReducerManager{addReducer(key,reducer){this.reducers.set(key,reducer);}removeReducer(key){this.reducers.delete(key);}getRootReducer(){return this.rootReducer}hasReducer(key){return this.reducers.has(key)}constructor(){_define_property$7(this,"reducers",new Map);_define_property$7(this,"rootReducer",void 0);this.rootReducer=(state,action)=>{const stateRecord=state??{};const newState={...stateRecord};for(const[key,reducer]of this.reducers.entries()){newState[key]=reducer(stateRecord[key],action);}return newState};}};class ReduxAdapter{checkReduxAvailable(){}getOrCreateStore(){if(this.store){return this.store}try{const{configureStore}=require("@reduxjs/toolkit");this.store=configureStore({reducer:this.reducerManager.getRootReducer(),devTools:this.devMode,middleware:undefined});if(this.devMode){console.debug("[ReduxAdapter] Redux store created");}return this.store}catch(error){throw new Error("ReduxAdapter requires @reduxjs/toolkit to be installed. "+"Please install it: npm install @reduxjs/toolkit\n"+`Original error: ${error instanceof Error?error.message:String(error)}`)}}createSlice(sliceName,initialValue){try{const{createSlice}=require("@reduxjs/toolkit");const slice=createSlice({name:sliceName,initialState:initialValue,reducers:{setValue:(_state,action)=>{return action.payload??initialValue}}});return slice}catch(error){throw new Error("ReduxAdapter requires @reduxjs/toolkit to be installed. "+"Please install it: npm install @reduxjs/toolkit\n"+`Original error: ${error instanceof Error?error.message:String(error)}`)}}createInstance(initialValue,options){if(this.destroyed){throw new Error("ReduxAdapter has been destroyed")}const store=this.getOrCreateStore();const sliceName=options?.id?`secra_${String(options.id)}`:`secra_slice_${++this.sliceCounter}`;const slice=this.createSlice(sliceName,initialValue);if(!this.reducerManager.hasReducer(sliceName)){this.reducerManager.addReducer(sliceName,slice.reducer);store.replaceReducer(this.reducerManager.getRootReducer());}const instance=new ReduxStateInstance(store,sliceName,slice.actions,initialValue,{id:options?.id,scope:options?.scope,devMode:options?.devMode??this.devMode,middleware:options?.middleware});this.instances.add(instance);this.sliceToInstance.set(sliceName,instance);if(this.devMode){console.debug(`[ReduxAdapter] Created instance: ${String(instance.getId())}`,{sliceName,scope:options?.scope});}return instance}destroy(){if(this.destroyed){return}for(const instance of this.instances){instance.destroy();}for(const sliceName of this.sliceToInstance.keys()){this.reducerManager.removeReducer(sliceName);}if(this.store){this.store.replaceReducer(this.reducerManager.getRootReducer());}this.instances.clear();this.sliceToInstance.clear();this.store=null;this.destroyed=true;if(this.devMode){console.debug("[ReduxAdapter] Destroyed");}}getName(){return this.name}constructor(options){_define_property$7(this,"name","ReduxAdapter");_define_property$7(this,"destroyed",false);_define_property$7(this,"instances",new Set);_define_property$7(this,"store",null);_define_property$7(this,"sliceCounter",0);_define_property$7(this,"sliceToInstance",new Map);_define_property$7(this,"reducerManager",void 0);_define_property$7(this,"devMode",void 0);this.devMode=options?.devMode??false;this.reducerManager=new DynamicReducerManager;this.store=options?.store??null;this.checkReduxAvailable();}}
193
57
 
194
- const DEFAULT_THEME_STORAGE_KEY="vlian:theme-mode";const DEFAULT_MODES=["light","dark","system"];const DEFAULT_PERSISTENCE$1={enabled:true};const DEFAULT_LABELS$1={light:"浅色",dark:"深色",system:"跟随系统"};function isThemeMode(value){return value==="light"||value==="dark"||value==="system"}const ThemeSwitch=({modes=DEFAULT_MODES,labels=DEFAULT_LABELS$1,persistence,className,style,onChange,render})=>{const{theme,setTheme}=useTheme();const persistenceOptions=persistence||DEFAULT_PERSISTENCE$1;const hydratedRef=React.useRef(false);const lastWrittenModeRef=React.useRef(undefined);const mergedLabels=React.useMemo(()=>({...DEFAULT_LABELS$1,...labels}),[labels]);React.useEffect(()=>{if(hydratedRef.current){return}hydratedRef.current=true;const persistedMode=readPersistedValue(persistenceOptions,DEFAULT_THEME_STORAGE_KEY);if(!persistedMode||!isThemeMode(persistedMode)||!modes.includes(persistedMode)){return}if(persistedMode!==theme.mode){setTheme(prev=>({...prev,mode:persistedMode}));}},[modes,persistenceOptions,setTheme,theme.mode]);React.useEffect(()=>{const mode=theme.mode;if(!mode||lastWrittenModeRef.current===mode){return}writePersistedValue(mode,persistenceOptions,DEFAULT_THEME_STORAGE_KEY);lastWrittenModeRef.current=mode;},[persistenceOptions,theme.mode]);const currentMode=theme.mode||"light";const setMode=React.useCallback(mode=>{if(mode===currentMode){return}setTheme(prev=>({...prev,mode}));onChange?.(mode);},[currentMode,onChange,setTheme]);if(render){return render({mode:currentMode,setMode,modes,labels:mergedLabels})}return jsxRuntime.jsx("div",{className:className,style:style,role:"group","aria-label":"Theme Switch",children:modes.map(mode=>jsxRuntime.jsx("button",{type:"button",onClick:()=>setMode(mode),"aria-pressed":currentMode===mode,children:mergedLabels[mode]},mode))})};
58
+ function _define_property$6(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class ZustandAdapter{createInstance(_initialValue,_options){if(this.destroyed){throw new Error("Adapter has been destroyed")}throw new Error("ZustandAdapter is a placeholder implementation. "+"To use Zustand, you need to:\n"+"1. Install zustand\n"+"2. Implement a complete Zustand store integration\n"+"3. Map Zustand store methods to IStateInstance interface\n"+"See docs/state-manager.md for implementation guide.")}destroy(){if(this.destroyed){return}for(const instance of this.instances){instance.destroy();}this.instances.clear();this.destroyed=true;}getName(){return this.name}constructor(){_define_property$6(this,"name","ZustandAdapter");_define_property$6(this,"destroyed",false);_define_property$6(this,"instances",new Set);}}
195
59
 
196
- const DEFAULT_LOCALE_STORAGE_KEY="vlian:locale";const DEFAULT_LOCALES=["zh-CN","en-US"];const DEFAULT_PERSISTENCE={enabled:true};const DEFAULT_LABELS={"zh-CN":"中文","en-US":"English"};function isLocale(value){return value==="zh-CN"||value==="en-US"}const LocaleSwitch=({locales=DEFAULT_LOCALES,labels=DEFAULT_LABELS,persistence,className,style,onChange,render})=>{const{locale,setLocale,isChanging}=useLocale();const persistenceOptions=persistence||DEFAULT_PERSISTENCE;const hydratedRef=React.useRef(false);const lastWrittenLocaleRef=React.useRef(undefined);const mergedLabels=React.useMemo(()=>({...DEFAULT_LABELS,...labels}),[labels]);React.useEffect(()=>{if(hydratedRef.current){return}hydratedRef.current=true;const persistedLocale=readPersistedValue(persistenceOptions,DEFAULT_LOCALE_STORAGE_KEY);if(!persistedLocale||!isLocale(persistedLocale)||!locales.includes(persistedLocale)){return}if(persistedLocale!==locale){setLocale(persistedLocale);}},[locale,locales,persistenceOptions,setLocale]);React.useEffect(()=>{if(lastWrittenLocaleRef.current===locale){return}writePersistedValue(locale,persistenceOptions,DEFAULT_LOCALE_STORAGE_KEY);lastWrittenLocaleRef.current=locale;},[locale,persistenceOptions]);const handleSetLocale=React.useCallback(nextLocale=>{if(nextLocale===locale){return}setLocale(nextLocale);onChange?.(nextLocale);},[locale,onChange,setLocale]);if(render){return render({locale,isChanging:Boolean(isChanging),setLocale:handleSetLocale,locales,labels:mergedLabels})}return jsxRuntime.jsxs("label",{className:className,style:style,children:[jsxRuntime.jsx("span",{style:{display:"none"},children:"Language Switch"}),jsxRuntime.jsx("select",{"aria-label":"Language Switch",value:locale,onChange:event=>handleSetLocale(event.target.value),disabled:Boolean(isChanging),children:locales.map(item=>jsxRuntime.jsx("option",{value:item,children:mergedLabels[item]},item))})]})};
60
+ function _define_property$5(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else {obj[key]=value;}return obj}class StateManager{createState(initialValue,options){if(this.destroyed){throw new Error("StateManager has been destroyed")}const mergedOptions={...options,scope:options?.scope??this.defaultScope,devMode:options?.devMode??this.devMode};const instance=this.adapter.createInstance(initialValue,mergedOptions);if(this.registry){this.registry.register(instance);}return instance}createDerivedState(config,options){if(this.destroyed){throw new Error("StateManager has been destroyed")}const mergedOptions={...options,scope:options?.scope??this.defaultScope};const instance=new DerivedStateInstance(config,mergedOptions);if(this.registry){this.registry.register(instance);}return instance}getState(id){if(!this.registry){throw new Error("Registry is not enabled. Enable it in StateManagerOptions.")}return this.registry.getInstance(id)}getStatesByScope(scope){if(!this.registry){throw new Error("Registry is not enabled. Enable it in StateManagerOptions.")}return this.registry.getInstancesByScope(scope)}getAllStates(){if(!this.registry){throw new Error("Registry is not enabled. Enable it in StateManagerOptions.")}return this.registry.getAllInstances()}destroyScope(scope){if(!this.registry){throw new Error("Registry is not enabled. Enable it in StateManagerOptions.")}this.registry.destroyScope(scope);}destroy(){if(this.destroyed){return}this.destroyed=true;if(this.registry){this.registry.destroyAll();}this.adapter.destroy();if(this.devMode){console.debug("[StateManager] Destroyed");}}isDestroyed(){return this.destroyed}getAdapter(){return this.adapter}getRegistry(){return this.registry}constructor(options={}){_define_property$5(this,"adapter",void 0);_define_property$5(this,"registry",void 0);_define_property$5(this,"defaultScope",void 0);_define_property$5(this,"devMode",void 0);_define_property$5(this,"destroyed",false);this.adapter=options.defaultAdapter??AdapterFactory.getDefaultAdapter();this.defaultScope=options.defaultScope;this.devMode=options.devMode??false;this.registry=options.enableRegistry!==false?new StateRegistry:null;if(this.devMode){console.debug("[StateManager] Initialized",{adapter:this.adapter.getName(),registryEnabled:!!this.registry,defaultScope:this.defaultScope});}}}
197
61
 
198
62
  const DEFAULT_INSTANCE_ID="default";const DEFAULT_THEME={mode:"light"};const DEFAULT_I18N={locale:"zh-CN"};const DEFAULT_CONFIG={logger:{level:logger.LogLevel.INFO,persistence:{enabled:true,storage:"localStorage",key:"vlian:kernel:logger-level"}},cache:{enabled:true,storageOptions:{prefix:"vlian",defaultExpire:24*60*60*1e3}},theme:{initial:DEFAULT_THEME,persistence:{enabled:true,storage:"localStorage",key:"vlian:kernel:theme"}},i18n:{initial:DEFAULT_I18N,persistence:{enabled:true,storage:"localStorage",key:"vlian:kernel:i18n"}}};
199
63
 
@@ -313,18 +177,6 @@ ${pemFooter}`;}const pemContents=pemKey.replace(pemHeader,"").replace(pemFooter,
313
177
  enumerable: true,
314
178
  get: function () { return logger.setCurrentTraceId; }
315
179
  });
316
- Object.defineProperty(exports, "MonitoringService", {
317
- enumerable: true,
318
- get: function () { return monitoring.MonitoringService; }
319
- });
320
- Object.defineProperty(exports, "getMonitoring", {
321
- enumerable: true,
322
- get: function () { return monitoring.getMonitoring; }
323
- });
324
- Object.defineProperty(exports, "initMonitoring", {
325
- enumerable: true,
326
- get: function () { return monitoring.initMonitoring; }
327
- });
328
180
  Object.defineProperty(exports, "CSRFTokenManager", {
329
181
  enumerable: true,
330
182
  get: function () { return csrf.CSRFTokenManager; }
@@ -337,119 +189,52 @@ ${pemFooter}`;}const pemContents=pemKey.replace(pemHeader,"").replace(pemFooter,
337
189
  enumerable: true,
338
190
  get: function () { return csrf.initCSRFManager; }
339
191
  });
192
+ Object.defineProperty(exports, "MonitoringService", {
193
+ enumerable: true,
194
+ get: function () { return monitoring.MonitoringService; }
195
+ });
196
+ Object.defineProperty(exports, "getMonitoring", {
197
+ enumerable: true,
198
+ get: function () { return monitoring.getMonitoring; }
199
+ });
200
+ Object.defineProperty(exports, "initMonitoring", {
201
+ enumerable: true,
202
+ get: function () { return monitoring.initMonitoring; }
203
+ });
340
204
  exports.$t = $t;
341
205
  exports.AdapterFactory = AdapterFactory;
342
- exports.AdapterManager = AdapterManager;
343
206
  exports.AnalyticsService = AnalyticsService;
344
- exports.AppContextProvider = AppContextProvider;
345
- exports.AppEventBus = AppEventBus;
346
- exports.AppRenderer = AppRenderer;
347
207
  exports.ConfigError = ConfigError;
348
- exports.ConfigFileFormat = ConfigFileFormat;
349
- exports.ConfigLoader = ConfigLoader;
350
208
  exports.ConfigSecurity = ConfigSecurity;
351
- exports.ConfigValidationError = ConfigValidationError;
352
- exports.ConfigValidator = ConfigValidator;
353
209
  exports.DefaultAdapter = DefaultAdapter;
354
210
  exports.DerivedStateInstance = DerivedStateInstance;
355
- exports.DevTools = DevTools;
356
- exports.DevToolsTrigger = DevToolsTrigger;
357
- exports.DynamicRouteManager = DynamicRouteManager;
358
- exports.EnvironmentDetector = EnvironmentDetector;
359
- exports.ErrorBoundary = ErrorBoundary;
360
211
  exports.ErrorCode = ErrorCode;
361
212
  exports.ErrorMessages = ErrorMessages;
362
213
  exports.ErrorSeverity = ErrorSeverity;
363
214
  exports.ErrorType = ErrorType;
364
215
  exports.FrameworkError = FrameworkError;
365
- exports.FrameworkEventManager = FrameworkEventManager;
366
- exports.FrameworkEventType = FrameworkEventType;
367
216
  exports.InitializationError = InitializationError;
368
217
  exports.Kernel = Kernel;
369
- exports.KernelBootError = KernelBootError;
370
- exports.LocaleSwitch = LocaleSwitch;
371
- exports.MiddlewareManager = MiddlewareManager;
372
218
  exports.NetworkError = NetworkError;
373
- exports.PerformanceTracker = PerformanceTracker;
374
- exports.PluginLifecycleStage = PluginLifecycleStage;
375
- exports.PluginManager = PluginManager;
376
- exports.PreloadStrategy = PreloadStrategy;
377
- exports.ReactRouterAdapter = ReactRouterAdapter;
378
219
  exports.ReduxAdapter = ReduxAdapter;
379
- exports.RouteCache = RouteCache;
380
- exports.RoutePreloader = RoutePreloader;
381
- exports.RouteVersionManager = RouteVersionManager;
382
- exports.RouterConfigValidator = RouterConfigValidator;
383
- exports.RouterError = RouterError;
384
- exports.RouterErrorCode = RouterErrorCode;
385
- exports.RouterLifecycleManager = RouterLifecycleManager;
386
- exports.RouterManager = RouterManager;
387
- exports.RouterMiddlewareManager = RouterMiddlewareManager;
388
- exports.RouterMonitoring = RouterMonitoring;
389
- exports.RouterNavigation = RouterNavigation;
390
- exports.RouterPluginManager = RouterPluginManager;
391
- exports.RuntimeEnvironment = RuntimeEnvironment;
392
- exports.STARTUP_METRIC_UNITS = STARTUP_METRIC_UNITS;
393
220
  exports.SecurityError = SecurityError;
394
221
  exports.StateInstance = StateInstance;
395
222
  exports.StateManager = StateManager;
396
223
  exports.StateRegistry = StateRegistry;
397
224
  exports.StateScopeManager = StateScopeManager;
398
225
  exports.StorageError = StorageError;
399
- exports.ThemeSwitch = ThemeSwitch;
400
226
  exports.ValidationError = ValidationError;
401
227
  exports.ZustandAdapter = ZustandAdapter;
402
- exports.appConfig = appConfig;
403
- exports.componentImportSchema = componentImportSchema;
404
- exports.createAuthMiddleware = createAuthMiddleware;
405
- exports.createReactRouterAdapter = createReactRouterAdapter;
406
- exports.createRouterError = createRouterError;
407
228
  exports.errorUtils = errorUtils;
408
- exports.getAdapterManager = getAdapterManager;
409
229
  exports.getAnalytics = getAnalytics;
410
- exports.getAppInstanceManager = getAppInstanceManager;
411
- exports.getDynamicRouteManager = getDynamicRouteManager;
412
- exports.getEnvironmentDetector = getEnvironmentDetector;
413
230
  exports.getErrorMessage = getErrorMessage;
414
231
  exports.getKernel = getKernel;
415
- exports.getRouteCache = getRouteCache;
416
- exports.getRoutePreloader = getRoutePreloader;
417
- exports.getRouteVersionManager = getRouteVersionManager;
418
- exports.getRouterLifecycleManager = getRouterLifecycleManager;
419
- exports.getRouterManager = getRouterManager;
420
- exports.getRouterMiddlewareManager = getRouterMiddlewareManager;
421
- exports.getRouterMonitoring = getRouterMonitoring;
422
- exports.getRouterPluginManager = getRouterPluginManager;
423
- exports.getStateManager = getStateManager;
424
232
  exports.getUserFriendlyMessage = getUserFriendlyMessage;
425
233
  exports.initAnalytics = initAnalytics;
426
- exports.initializeServices = initializeServices;
427
234
  exports.kernelStartApp = kernelStartApp;
428
- exports.middlewareManager = middlewareManager;
429
- exports.pluginManager = pluginManager;
430
- exports.routeConfigSchema = routeConfigSchema;
431
- exports.routeItemHandleSchema = routeItemHandleSchema;
432
- exports.routerConfigSchema = routerConfigSchema;
433
- exports.safeValidateRouterConfig = safeValidateRouterConfig;
434
235
  exports.setLang = setLang;
435
236
  exports.setupI18n = setupI18n;
436
- exports.start = start;
437
- exports.startApp = startApp;
438
- exports.startKernel = startKernel;
439
237
  exports.startup = startup;
440
- exports.storage = storage;
441
- exports.useAppContext = useAppContext;
442
- exports.useAppEvent = useAppEvent;
443
- exports.useAppEventEmitter = useAppEventEmitter;
444
- exports.useAppEventOnce = useAppEventOnce;
445
- exports.useConfig = useConfig;
446
- exports.useErrorHandler = useErrorHandler;
447
- exports.useEventBus = useEventBus;
448
- exports.useLocale = useLocale;
449
- exports.useStateManager = useStateManager;
450
- exports.useTheme = useTheme;
451
- exports.validateRouterConfig = validateRouterConfig;
452
238
  exports.waitTime = waitTime;
453
- exports.withErrorBoundary = withErrorBoundary;
454
239
 
455
240
  }));