@vlian/framework 1.1.1 → 1.2.16

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 (444) hide show
  1. package/README.md +35 -1
  2. package/dist/analytics/index.cjs +24 -0
  3. package/dist/analytics/index.cjs.map +1 -0
  4. package/dist/analytics/index.d.ts +2 -0
  5. package/dist/analytics/index.js +3 -0
  6. package/dist/analytics/index.js.map +1 -0
  7. package/dist/analytics.umd.js +2406 -0
  8. package/dist/analytics.umd.js.map +1 -0
  9. package/dist/components/LocaleSwitch.cjs +118 -0
  10. package/dist/components/LocaleSwitch.cjs.map +1 -0
  11. package/dist/components/LocaleSwitch.d.ts +21 -0
  12. package/dist/components/LocaleSwitch.js +103 -0
  13. package/dist/components/LocaleSwitch.js.map +1 -0
  14. package/dist/components/ThemeSwitch.cjs +117 -0
  15. package/dist/components/ThemeSwitch.cjs.map +1 -0
  16. package/dist/components/ThemeSwitch.d.ts +20 -0
  17. package/dist/components/ThemeSwitch.js +102 -0
  18. package/dist/components/ThemeSwitch.js.map +1 -0
  19. package/dist/components/index.cjs +16 -0
  20. package/dist/components/index.cjs.map +1 -1
  21. package/dist/components/index.d.ts +5 -2
  22. package/dist/components/index.js +2 -1
  23. package/dist/components/index.js.map +1 -1
  24. package/dist/components/persistence.cjs +60 -0
  25. package/dist/components/persistence.cjs.map +1 -0
  26. package/dist/components/persistence.d.ts +12 -0
  27. package/dist/components/persistence.js +39 -0
  28. package/dist/components/persistence.js.map +1 -0
  29. package/dist/core/Test.d.ts +0 -1
  30. package/dist/core/app/AppContext.cjs +36 -30
  31. package/dist/core/app/AppContext.cjs.map +1 -1
  32. package/dist/core/app/AppContext.d.ts +9 -6
  33. package/dist/core/app/AppContext.js +36 -30
  34. package/dist/core/app/AppContext.js.map +1 -1
  35. package/dist/core/app/AppContext.types.d.ts +9 -10
  36. package/dist/core/app/AppContext.types.js.map +1 -1
  37. package/dist/core/app/BasicLayout.cjs +57 -22
  38. package/dist/core/app/BasicLayout.cjs.map +1 -1
  39. package/dist/core/app/BasicLayout.d.ts +7 -5
  40. package/dist/core/app/BasicLayout.js +57 -22
  41. package/dist/core/app/BasicLayout.js.map +1 -1
  42. package/dist/core/app/DefaultApp.cjs +104 -153
  43. package/dist/core/app/DefaultApp.cjs.map +1 -1
  44. package/dist/core/app/DefaultApp.d.ts +0 -21
  45. package/dist/core/app/DefaultApp.js +104 -153
  46. package/dist/core/app/DefaultApp.js.map +1 -1
  47. package/dist/core/app/index.d.ts +0 -1
  48. package/dist/core/config/AppConfig.cjs.map +1 -1
  49. package/dist/core/config/AppConfig.d.ts +3 -4
  50. package/dist/core/config/AppConfig.js.map +1 -1
  51. package/dist/core/config/ConfigLoader.cjs +90 -8
  52. package/dist/core/config/ConfigLoader.cjs.map +1 -1
  53. package/dist/core/config/ConfigLoader.d.ts +20 -5
  54. package/dist/core/config/ConfigLoader.js +90 -8
  55. package/dist/core/config/ConfigLoader.js.map +1 -1
  56. package/dist/core/config/ConfigValidator.d.ts +0 -1
  57. package/dist/core/config/index.d.ts +0 -1
  58. package/dist/core/dev/DevTools.cjs +141 -287
  59. package/dist/core/dev/DevTools.cjs.map +1 -1
  60. package/dist/core/dev/DevTools.d.ts +1 -32
  61. package/dist/core/dev/DevTools.js +143 -296
  62. package/dist/core/dev/DevTools.js.map +1 -1
  63. package/dist/core/error/ErrorBoundary.cjs +95 -23
  64. package/dist/core/error/ErrorBoundary.cjs.map +1 -1
  65. package/dist/core/error/ErrorBoundary.d.ts +7 -9
  66. package/dist/core/error/ErrorBoundary.js +96 -24
  67. package/dist/core/error/ErrorBoundary.js.map +1 -1
  68. package/dist/core/error/ErrorHandler.cjs +277 -0
  69. package/dist/core/error/ErrorHandler.cjs.map +1 -0
  70. package/dist/core/error/ErrorHandler.d.ts +171 -0
  71. package/dist/core/error/ErrorHandler.js +261 -0
  72. package/dist/core/error/ErrorHandler.js.map +1 -0
  73. package/dist/core/error/index.cjs +10 -0
  74. package/dist/core/error/index.cjs.map +1 -1
  75. package/dist/core/error/index.d.ts +2 -1
  76. package/dist/core/error/index.js +1 -0
  77. package/dist/core/error/index.js.map +1 -1
  78. package/dist/core/event/AppEventBus.d.ts +0 -1
  79. package/dist/core/event/frameworkEvents.d.ts +0 -1
  80. package/dist/core/event/hooks.d.ts +0 -1
  81. package/dist/core/event/index.d.ts +0 -1
  82. package/dist/core/event/types.d.ts +0 -1
  83. package/dist/core/event/useEventBus.d.ts +0 -1
  84. package/dist/core/index.cjs +2 -0
  85. package/dist/core/index.cjs.map +1 -1
  86. package/dist/core/index.d.ts +2 -1
  87. package/dist/core/index.js +2 -0
  88. package/dist/core/index.js.map +1 -1
  89. package/dist/core/initialization/InitializationErrorThrower.d.ts +0 -1
  90. package/dist/core/initialization/index.d.ts +0 -1
  91. package/dist/core/initialization/initialization.d.ts +0 -1
  92. package/dist/core/initialization/initializationErrorState.d.ts +0 -1
  93. package/dist/core/kernel/defaultAdapters.cjs +185 -0
  94. package/dist/core/kernel/defaultAdapters.cjs.map +1 -0
  95. package/dist/core/kernel/defaultAdapters.d.ts +2 -0
  96. package/dist/core/kernel/defaultAdapters.js +175 -0
  97. package/dist/core/kernel/defaultAdapters.js.map +1 -0
  98. package/dist/core/kernel/errors.cjs +71 -0
  99. package/dist/core/kernel/errors.cjs.map +1 -0
  100. package/dist/core/kernel/errors.d.ts +18 -0
  101. package/dist/core/kernel/errors.js +53 -0
  102. package/dist/core/kernel/errors.js.map +1 -0
  103. package/dist/core/kernel/index.cjs +22 -0
  104. package/dist/core/kernel/index.cjs.map +1 -0
  105. package/dist/core/kernel/index.d.ts +3 -0
  106. package/dist/core/kernel/index.js +4 -0
  107. package/dist/core/kernel/index.js.map +1 -0
  108. package/dist/core/kernel/startKernel.cjs +203 -0
  109. package/dist/core/kernel/startKernel.cjs.map +1 -0
  110. package/dist/core/kernel/startKernel.d.ts +2 -0
  111. package/dist/core/kernel/startKernel.js +193 -0
  112. package/dist/core/kernel/startKernel.js.map +1 -0
  113. package/dist/core/kernel/types.cjs +6 -0
  114. package/dist/core/kernel/types.cjs.map +1 -0
  115. package/dist/core/kernel/types.d.ts +114 -0
  116. package/dist/core/kernel/types.js +3 -0
  117. package/dist/core/kernel/types.js.map +1 -0
  118. package/dist/core/middleware.d.ts +0 -1
  119. package/dist/core/plugin/PluginEventBus.d.ts +0 -1
  120. package/dist/core/plugin/PluginSandbox.d.ts +0 -1
  121. package/dist/core/plugin.cjs +1 -1
  122. package/dist/core/plugin.cjs.map +1 -1
  123. package/dist/core/plugin.d.ts +0 -1
  124. package/dist/core/plugin.js +1 -1
  125. package/dist/core/plugin.js.map +1 -1
  126. package/dist/core/router/RouterManager.d.ts +0 -1
  127. package/dist/core/router/adapter/AdapterManager.d.ts +0 -1
  128. package/dist/core/router/adapter/index.d.ts +0 -1
  129. package/dist/core/router/adapter/react-router/ReactRouterAdapter.d.ts +0 -1
  130. package/dist/core/router/adapter/react-router/index.d.ts +0 -1
  131. package/dist/core/router/adapter/types.cjs.map +1 -1
  132. package/dist/core/router/adapter/types.d.ts +1 -2
  133. package/dist/core/router/adapter/types.js.map +1 -1
  134. package/dist/core/router/dev/RouterDevTools.cjs +148 -296
  135. package/dist/core/router/dev/RouterDevTools.cjs.map +1 -1
  136. package/dist/core/router/dev/RouterDevTools.d.ts +1 -6
  137. package/dist/core/router/dev/RouterDevTools.js +149 -301
  138. package/dist/core/router/dev/RouterDevTools.js.map +1 -1
  139. package/dist/core/router/dev/index.d.ts +0 -1
  140. package/dist/core/router/dynamic/DynamicRouteManager.d.ts +0 -1
  141. package/dist/core/router/dynamic/index.d.ts +0 -1
  142. package/dist/core/router/errors/RouterError.d.ts +0 -1
  143. package/dist/core/router/errors/index.d.ts +0 -1
  144. package/dist/core/router/index.d.ts +0 -1
  145. package/dist/core/router/lifecycle/RouterLifecycleManager.d.ts +0 -1
  146. package/dist/core/router/lifecycle/index.d.ts +0 -1
  147. package/dist/core/router/middleware/RouterMiddlewareManager.d.ts +0 -1
  148. package/dist/core/router/middleware/auth.d.ts +0 -1
  149. package/dist/core/router/middleware/index.d.ts +0 -1
  150. package/dist/core/router/middleware/types.d.ts +0 -1
  151. package/dist/core/router/monitoring/RouterMonitoring.d.ts +0 -1
  152. package/dist/core/router/monitoring/index.d.ts +0 -1
  153. package/dist/core/router/navigation/RouterNavigation.d.ts +0 -1
  154. package/dist/core/router/navigation/index.d.ts +0 -1
  155. package/dist/core/router/performance/RouteCache.d.ts +0 -1
  156. package/dist/core/router/performance/RoutePreloader.d.ts +0 -1
  157. package/dist/core/router/performance/index.d.ts +0 -1
  158. package/dist/core/router/plugin/RouterPluginManager.d.ts +0 -1
  159. package/dist/core/router/plugin/index.d.ts +0 -1
  160. package/dist/core/router/plugin/types.d.ts +0 -1
  161. package/dist/core/router/types.d.ts +1 -2
  162. package/dist/core/router/types.js.map +1 -1
  163. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs +90 -103
  164. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs.map +1 -1
  165. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.d.ts +0 -1
  166. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js +91 -104
  167. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js.map +1 -1
  168. package/dist/core/router/utils/adapters/react-router/transform.cjs +13 -4
  169. package/dist/core/router/utils/adapters/react-router/transform.cjs.map +1 -1
  170. package/dist/core/router/utils/adapters/react-router/transform.d.ts +0 -1
  171. package/dist/core/router/utils/adapters/react-router/transform.js +13 -4
  172. package/dist/core/router/utils/adapters/react-router/transform.js.map +1 -1
  173. package/dist/core/router/utils/transform.cjs +1 -1
  174. package/dist/core/router/utils/transform.cjs.map +1 -1
  175. package/dist/core/router/utils/transform.d.ts +0 -1
  176. package/dist/core/router/utils/transform.js +1 -1
  177. package/dist/core/router/utils/transform.js.map +1 -1
  178. package/dist/core/router/validation/RouterConfigValidator.d.ts +0 -1
  179. package/dist/core/router/validation/index.d.ts +0 -1
  180. package/dist/core/router/validation/schema.d.ts +0 -1
  181. package/dist/core/router/version/RouteVersionManager.d.ts +0 -1
  182. package/dist/core/router/version/index.d.ts +0 -1
  183. package/dist/core/splash/SplashScreen.cjs +101 -15
  184. package/dist/core/splash/SplashScreen.cjs.map +1 -1
  185. package/dist/core/splash/SplashScreen.d.ts +0 -1
  186. package/dist/core/splash/SplashScreen.js +101 -15
  187. package/dist/core/splash/SplashScreen.js.map +1 -1
  188. package/dist/core/splash/index.d.ts +0 -1
  189. package/dist/core/splash/splashScreenUtils.d.ts +0 -1
  190. package/dist/core/startup/AppInstance.d.ts +0 -1
  191. package/dist/core/startup/environment.d.ts +0 -1
  192. package/dist/core/startup/index.d.ts +0 -1
  193. package/dist/core/startup/initializeServices.cjs +69 -24
  194. package/dist/core/startup/initializeServices.cjs.map +1 -1
  195. package/dist/core/startup/initializeServices.d.ts +9 -3
  196. package/dist/core/startup/initializeServices.js +73 -26
  197. package/dist/core/startup/initializeServices.js.map +1 -1
  198. package/dist/core/startup/performanceTracker.d.ts +0 -1
  199. package/dist/core/startup/renderApp.cjs +110 -69
  200. package/dist/core/startup/renderApp.cjs.map +1 -1
  201. package/dist/core/startup/renderApp.d.ts +2 -3
  202. package/dist/core/startup/renderApp.js +111 -70
  203. package/dist/core/startup/renderApp.js.map +1 -1
  204. package/dist/core/startup/startApp.cjs +123 -11
  205. package/dist/core/startup/startApp.cjs.map +1 -1
  206. package/dist/core/startup/startApp.d.ts +0 -1
  207. package/dist/core/startup/startApp.js +123 -11
  208. package/dist/core/startup/startApp.js.map +1 -1
  209. package/dist/core/types.d.ts +34 -21
  210. package/dist/core/types.js.map +1 -1
  211. package/dist/core/ui-adapter/adapters.cjs +45 -0
  212. package/dist/core/ui-adapter/adapters.cjs.map +1 -0
  213. package/dist/core/ui-adapter/adapters.d.ts +4 -0
  214. package/dist/core/ui-adapter/adapters.js +27 -0
  215. package/dist/core/ui-adapter/adapters.js.map +1 -0
  216. package/dist/core/ui-adapter/index.cjs +21 -0
  217. package/dist/core/ui-adapter/index.cjs.map +1 -0
  218. package/dist/core/ui-adapter/index.d.ts +2 -0
  219. package/dist/core/ui-adapter/index.js +3 -0
  220. package/dist/core/ui-adapter/index.js.map +1 -0
  221. package/dist/core/ui-adapter/types.cjs +6 -0
  222. package/dist/core/ui-adapter/types.cjs.map +1 -0
  223. package/dist/core/ui-adapter/types.d.ts +24 -0
  224. package/dist/core/ui-adapter/types.js +3 -0
  225. package/dist/core/ui-adapter/types.js.map +1 -0
  226. package/dist/index.cjs +1 -0
  227. package/dist/index.cjs.map +1 -1
  228. package/dist/index.d.ts +1 -1
  229. package/dist/index.js +1 -0
  230. package/dist/index.js.map +1 -1
  231. package/dist/index.umd.d.ts +0 -1
  232. package/dist/index.umd.js +33004 -38475
  233. package/dist/index.umd.js.map +1 -1
  234. package/dist/library/index.d.ts +0 -1
  235. package/dist/library/locale/index.d.ts +0 -1
  236. package/dist/library/locale/langs/en-us/index.d.ts +0 -1
  237. package/dist/library/locale/langs/zh-cn/index.d.ts +0 -1
  238. package/dist/library/locale/types.d.ts +0 -1
  239. package/dist/library/storage/cache.d.ts +0 -1
  240. package/dist/library/storage/encryption.d.ts +0 -1
  241. package/dist/library/storage/index.d.ts +0 -1
  242. package/dist/request/adapter/RequestAdapter.d.ts +0 -1
  243. package/dist/request/adapter/axiosAdapter.d.ts +0 -1
  244. package/dist/request/adapter/fetchAdapter.d.ts +0 -1
  245. package/dist/request/adapter/index.d.ts +0 -1
  246. package/dist/request/adapter/kyAdapter.d.ts +0 -1
  247. package/dist/request/adapter/undiciAdapter.d.ts +0 -1
  248. package/dist/request/core/RequestClient.d.ts +0 -1
  249. package/dist/request/core/index.d.ts +0 -1
  250. package/dist/request/index.d.ts +0 -1
  251. package/dist/request/plugin/RequestPlugin.d.ts +0 -1
  252. package/dist/request/plugin/cache.d.ts +0 -1
  253. package/dist/request/plugin/csrfPlugin.d.ts +0 -1
  254. package/dist/request/plugin/index.d.ts +0 -1
  255. package/dist/request/plugin/monitoring.d.ts +0 -1
  256. package/dist/request/plugin/queue.d.ts +0 -1
  257. package/dist/request/plugin/retry.d.ts +0 -1
  258. package/dist/request/plugin/validation.d.ts +0 -1
  259. package/dist/request/runtime/RequestContext.d.ts +0 -1
  260. package/dist/request/runtime/index.d.ts +0 -1
  261. package/dist/request/types.d.ts +0 -1
  262. package/dist/request/utils/RequestQueueManager.d.ts +0 -1
  263. package/dist/request/utils/dependencyCheck.d.ts +0 -1
  264. package/dist/request/utils/index.d.ts +0 -1
  265. package/dist/request.umd.js +5392 -0
  266. package/dist/request.umd.js.map +1 -0
  267. package/dist/state/StateManager.d.ts +0 -1
  268. package/dist/state/adapters/AdapterFactory.d.ts +0 -1
  269. package/dist/state/adapters/DefaultAdapter.d.ts +0 -1
  270. package/dist/state/adapters/ReduxAdapter.d.ts +0 -1
  271. package/dist/state/adapters/ZustandAdapter.d.ts +0 -1
  272. package/dist/state/adapters/index.d.ts +0 -1
  273. package/dist/state/adapters/types.d.ts +0 -1
  274. package/dist/state/core/DerivedStateInstance.d.ts +0 -1
  275. package/dist/state/core/StateInstance.d.ts +0 -1
  276. package/dist/state/core/StateRegistry.d.ts +0 -1
  277. package/dist/state/core/StateScope.d.ts +0 -1
  278. package/dist/state/core/index.d.ts +0 -1
  279. package/dist/state/index.d.ts +0 -1
  280. package/dist/state/types.d.ts +0 -1
  281. package/dist/state.umd.js +1414 -0
  282. package/dist/state.umd.js.map +1 -0
  283. package/dist/types.d.ts +0 -1
  284. package/dist/utils/analytics.d.ts +0 -1
  285. package/dist/utils/configSecurity.d.ts +0 -1
  286. package/dist/utils/csrf.d.ts +0 -1
  287. package/dist/utils/errors/ErrorCodes.d.ts +0 -1
  288. package/dist/utils/errors.cjs +44 -1
  289. package/dist/utils/errors.cjs.map +1 -1
  290. package/dist/utils/errors.d.ts +5 -1
  291. package/dist/utils/errors.js +44 -1
  292. package/dist/utils/errors.js.map +1 -1
  293. package/dist/utils/index.d.ts +0 -1
  294. package/dist/utils/logger.d.ts +0 -1
  295. package/dist/utils/logger.types.d.ts +0 -1
  296. package/dist/utils/monitoring.d.ts +0 -1
  297. package/dist/utils/performance.d.ts +0 -1
  298. package/dist/utils/resourceLoader.d.ts +0 -1
  299. package/dist/utils/runtimeSecurity.d.ts +0 -1
  300. package/dist/utils/security.d.ts +0 -1
  301. package/dist/utils/traceId.d.ts +0 -1
  302. package/dist/utils/validation.d.ts +0 -1
  303. package/package.json +57 -8
  304. package/dist/components/index.d.ts.map +0 -1
  305. package/dist/core/Test.d.ts.map +0 -1
  306. package/dist/core/app/AppContext.d.ts.map +0 -1
  307. package/dist/core/app/AppContext.types.d.ts.map +0 -1
  308. package/dist/core/app/BasicLayout.d.ts.map +0 -1
  309. package/dist/core/app/DefaultApp.d.ts.map +0 -1
  310. package/dist/core/app/index.d.ts.map +0 -1
  311. package/dist/core/config/AppConfig.d.ts.map +0 -1
  312. package/dist/core/config/ConfigLoader.d.ts.map +0 -1
  313. package/dist/core/config/ConfigValidator.d.ts.map +0 -1
  314. package/dist/core/config/index.d.ts.map +0 -1
  315. package/dist/core/dev/DevTools.d.ts.map +0 -1
  316. package/dist/core/error/ErrorBoundary.d.ts.map +0 -1
  317. package/dist/core/error/index.d.ts.map +0 -1
  318. package/dist/core/event/AppEventBus.d.ts.map +0 -1
  319. package/dist/core/event/frameworkEvents.d.ts.map +0 -1
  320. package/dist/core/event/hooks.d.ts.map +0 -1
  321. package/dist/core/event/index.d.ts.map +0 -1
  322. package/dist/core/event/types.d.ts.map +0 -1
  323. package/dist/core/event/useEventBus.d.ts.map +0 -1
  324. package/dist/core/index.d.ts.map +0 -1
  325. package/dist/core/initialization/InitializationErrorThrower.d.ts.map +0 -1
  326. package/dist/core/initialization/index.d.ts.map +0 -1
  327. package/dist/core/initialization/initialization.d.ts.map +0 -1
  328. package/dist/core/initialization/initializationErrorState.d.ts.map +0 -1
  329. package/dist/core/middleware.d.ts.map +0 -1
  330. package/dist/core/plugin/PluginEventBus.d.ts.map +0 -1
  331. package/dist/core/plugin/PluginSandbox.d.ts.map +0 -1
  332. package/dist/core/plugin.d.ts.map +0 -1
  333. package/dist/core/router/RouterManager.d.ts.map +0 -1
  334. package/dist/core/router/adapter/AdapterManager.d.ts.map +0 -1
  335. package/dist/core/router/adapter/index.d.ts.map +0 -1
  336. package/dist/core/router/adapter/react-router/ReactRouterAdapter.d.ts.map +0 -1
  337. package/dist/core/router/adapter/react-router/index.d.ts.map +0 -1
  338. package/dist/core/router/adapter/types.d.ts.map +0 -1
  339. package/dist/core/router/dev/RouterDevTools.d.ts.map +0 -1
  340. package/dist/core/router/dev/index.d.ts.map +0 -1
  341. package/dist/core/router/dynamic/DynamicRouteManager.d.ts.map +0 -1
  342. package/dist/core/router/dynamic/index.d.ts.map +0 -1
  343. package/dist/core/router/errors/RouterError.d.ts.map +0 -1
  344. package/dist/core/router/errors/index.d.ts.map +0 -1
  345. package/dist/core/router/index.d.ts.map +0 -1
  346. package/dist/core/router/lifecycle/RouterLifecycleManager.d.ts.map +0 -1
  347. package/dist/core/router/lifecycle/index.d.ts.map +0 -1
  348. package/dist/core/router/middleware/RouterMiddlewareManager.d.ts.map +0 -1
  349. package/dist/core/router/middleware/auth.d.ts.map +0 -1
  350. package/dist/core/router/middleware/index.d.ts.map +0 -1
  351. package/dist/core/router/middleware/types.d.ts.map +0 -1
  352. package/dist/core/router/monitoring/RouterMonitoring.d.ts.map +0 -1
  353. package/dist/core/router/monitoring/index.d.ts.map +0 -1
  354. package/dist/core/router/navigation/RouterNavigation.d.ts.map +0 -1
  355. package/dist/core/router/navigation/index.d.ts.map +0 -1
  356. package/dist/core/router/performance/RouteCache.d.ts.map +0 -1
  357. package/dist/core/router/performance/RoutePreloader.d.ts.map +0 -1
  358. package/dist/core/router/performance/index.d.ts.map +0 -1
  359. package/dist/core/router/plugin/RouterPluginManager.d.ts.map +0 -1
  360. package/dist/core/router/plugin/index.d.ts.map +0 -1
  361. package/dist/core/router/plugin/types.d.ts.map +0 -1
  362. package/dist/core/router/types.d.ts.map +0 -1
  363. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.d.ts.map +0 -1
  364. package/dist/core/router/utils/adapters/react-router/transform.d.ts.map +0 -1
  365. package/dist/core/router/utils/transform.d.ts.map +0 -1
  366. package/dist/core/router/validation/RouterConfigValidator.d.ts.map +0 -1
  367. package/dist/core/router/validation/index.d.ts.map +0 -1
  368. package/dist/core/router/validation/schema.d.ts.map +0 -1
  369. package/dist/core/router/version/RouteVersionManager.d.ts.map +0 -1
  370. package/dist/core/router/version/index.d.ts.map +0 -1
  371. package/dist/core/splash/SplashScreen.d.ts.map +0 -1
  372. package/dist/core/splash/index.d.ts.map +0 -1
  373. package/dist/core/splash/splashScreenUtils.d.ts.map +0 -1
  374. package/dist/core/startup/AppInstance.d.ts.map +0 -1
  375. package/dist/core/startup/environment.d.ts.map +0 -1
  376. package/dist/core/startup/index.d.ts.map +0 -1
  377. package/dist/core/startup/initializeServices.d.ts.map +0 -1
  378. package/dist/core/startup/performanceTracker.d.ts.map +0 -1
  379. package/dist/core/startup/renderApp.d.ts.map +0 -1
  380. package/dist/core/startup/startApp.d.ts.map +0 -1
  381. package/dist/core/types.d.ts.map +0 -1
  382. package/dist/index.d.ts.map +0 -1
  383. package/dist/index.umd.d.ts.map +0 -1
  384. package/dist/library/index.d.ts.map +0 -1
  385. package/dist/library/locale/index.d.ts.map +0 -1
  386. package/dist/library/locale/langs/en-us/index.d.ts.map +0 -1
  387. package/dist/library/locale/langs/zh-cn/index.d.ts.map +0 -1
  388. package/dist/library/locale/types.d.ts.map +0 -1
  389. package/dist/library/storage/cache.d.ts.map +0 -1
  390. package/dist/library/storage/encryption.d.ts.map +0 -1
  391. package/dist/library/storage/index.d.ts.map +0 -1
  392. package/dist/request/adapter/RequestAdapter.d.ts.map +0 -1
  393. package/dist/request/adapter/axiosAdapter.d.ts.map +0 -1
  394. package/dist/request/adapter/fetchAdapter.d.ts.map +0 -1
  395. package/dist/request/adapter/index.d.ts.map +0 -1
  396. package/dist/request/adapter/kyAdapter.d.ts.map +0 -1
  397. package/dist/request/adapter/undiciAdapter.d.ts.map +0 -1
  398. package/dist/request/core/RequestClient.d.ts.map +0 -1
  399. package/dist/request/core/index.d.ts.map +0 -1
  400. package/dist/request/index.d.ts.map +0 -1
  401. package/dist/request/plugin/RequestPlugin.d.ts.map +0 -1
  402. package/dist/request/plugin/cache.d.ts.map +0 -1
  403. package/dist/request/plugin/csrfPlugin.d.ts.map +0 -1
  404. package/dist/request/plugin/index.d.ts.map +0 -1
  405. package/dist/request/plugin/monitoring.d.ts.map +0 -1
  406. package/dist/request/plugin/queue.d.ts.map +0 -1
  407. package/dist/request/plugin/retry.d.ts.map +0 -1
  408. package/dist/request/plugin/validation.d.ts.map +0 -1
  409. package/dist/request/runtime/RequestContext.d.ts.map +0 -1
  410. package/dist/request/runtime/index.d.ts.map +0 -1
  411. package/dist/request/types.d.ts.map +0 -1
  412. package/dist/request/utils/RequestQueueManager.d.ts.map +0 -1
  413. package/dist/request/utils/dependencyCheck.d.ts.map +0 -1
  414. package/dist/request/utils/index.d.ts.map +0 -1
  415. package/dist/state/StateManager.d.ts.map +0 -1
  416. package/dist/state/adapters/AdapterFactory.d.ts.map +0 -1
  417. package/dist/state/adapters/DefaultAdapter.d.ts.map +0 -1
  418. package/dist/state/adapters/ReduxAdapter.d.ts.map +0 -1
  419. package/dist/state/adapters/ZustandAdapter.d.ts.map +0 -1
  420. package/dist/state/adapters/index.d.ts.map +0 -1
  421. package/dist/state/adapters/types.d.ts.map +0 -1
  422. package/dist/state/core/DerivedStateInstance.d.ts.map +0 -1
  423. package/dist/state/core/StateInstance.d.ts.map +0 -1
  424. package/dist/state/core/StateRegistry.d.ts.map +0 -1
  425. package/dist/state/core/StateScope.d.ts.map +0 -1
  426. package/dist/state/core/index.d.ts.map +0 -1
  427. package/dist/state/index.d.ts.map +0 -1
  428. package/dist/state/types.d.ts.map +0 -1
  429. package/dist/types.d.ts.map +0 -1
  430. package/dist/utils/analytics.d.ts.map +0 -1
  431. package/dist/utils/configSecurity.d.ts.map +0 -1
  432. package/dist/utils/csrf.d.ts.map +0 -1
  433. package/dist/utils/errors/ErrorCodes.d.ts.map +0 -1
  434. package/dist/utils/errors.d.ts.map +0 -1
  435. package/dist/utils/index.d.ts.map +0 -1
  436. package/dist/utils/logger.d.ts.map +0 -1
  437. package/dist/utils/logger.types.d.ts.map +0 -1
  438. package/dist/utils/monitoring.d.ts.map +0 -1
  439. package/dist/utils/performance.d.ts.map +0 -1
  440. package/dist/utils/resourceLoader.d.ts.map +0 -1
  441. package/dist/utils/runtimeSecurity.d.ts.map +0 -1
  442. package/dist/utils/security.d.ts.map +0 -1
  443. package/dist/utils/traceId.d.ts.map +0 -1
  444. package/dist/utils/validation.d.ts.map +0 -1
@@ -75,10 +75,81 @@ function _interop_require_wildcard(obj, nodeInterop) {
75
75
  }
76
76
  return newObj;
77
77
  }
78
+ const OptimizedAppContent = /*#__PURE__*/ (0, _react.memo)(({ options, services, context, // securityConfig 用于未来扩展,当前暂不使用
79
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
80
+ securityConfig: _securityConfig })=>{
81
+ // 优化:使用 useMemo 缓存初始语言计算
82
+ const initialLocale = (0, _react.useMemo)(()=>{
83
+ return options.locale ? Object.keys(options.locale)[0] || 'zh-CN' : 'zh-CN';
84
+ }, [
85
+ options.locale
86
+ ]);
87
+ // 优化:使用 useMemo 缓存路由判断结果
88
+ const shouldUseRouter = (0, _react.useMemo)(()=>{
89
+ const routerEnabled = options.router ? options.router.enabled !== false && options.router.enabled !== 'disabled' : false;
90
+ if (!routerEnabled) {
91
+ return false;
92
+ }
93
+ const routerManager = (0, _RouterManager.getRouterManager)();
94
+ const router = routerManager.getRouter();
95
+ return router !== null;
96
+ }, [
97
+ options.router
98
+ ]);
99
+ // 优化:使用 useMemo 缓存路由实例
100
+ const router = (0, _react.useMemo)(()=>{
101
+ if (!shouldUseRouter) {
102
+ return null;
103
+ }
104
+ const routerManager = (0, _RouterManager.getRouterManager)();
105
+ return routerManager.getRouter();
106
+ }, [
107
+ shouldUseRouter
108
+ ]);
109
+ // 优化:使用 useCallback 缓存错误处理函数
110
+ const handleError = (0, _react.useCallback)((error)=>{
111
+ services.monitoring.captureError(error);
112
+ }, [
113
+ services.monitoring
114
+ ]);
115
+ // 优化:使用 useMemo 缓存应用内容
116
+ const appContent = (0, _react.useMemo)(()=>{
117
+ if (shouldUseRouter && router) {
118
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactrouterdom.RouterProvider, {
119
+ router: router
120
+ });
121
+ }
122
+ return options.app || /*#__PURE__*/ (0, _jsxruntime.jsx)(_app.DefaultApp, {});
123
+ }, [
124
+ shouldUseRouter,
125
+ router,
126
+ options.app
127
+ ]);
128
+ return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_error.ErrorBoundary, {
129
+ fallback: options.errorFallback,
130
+ onError: handleError,
131
+ children: [
132
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_initialization.InitializationErrorThrower, {}),
133
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_app.AppContextProvider, {
134
+ initialTheme: options.theme,
135
+ initialLocale: initialLocale,
136
+ initialAntdConfig: options.uiProvider || options.antd,
137
+ initialInitializationContext: context,
138
+ stateManager: services.stateManager,
139
+ antdApp: options.uiApp || options.antdApp,
140
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_app.BasicLayout, {
141
+ globalProvider: options.globalProvider,
142
+ children: appContent
143
+ })
144
+ })
145
+ ]
146
+ });
147
+ });
148
+ OptimizedAppContent.displayName = 'OptimizedAppContent';
78
149
  let AppRenderer = class AppRenderer {
79
150
  /**
80
151
  * 初始化渲染器
81
- *
152
+ *
82
153
  * @param container - React应用的挂载容器
83
154
  * @param rootOptions - React根节点配置选项
84
155
  */ initialize(container, rootOptions) {
@@ -89,12 +160,12 @@ let AppRenderer = class AppRenderer {
89
160
  }
90
161
  /**
91
162
  * 渲染应用
92
- *
163
+ *
93
164
  * 优化:
94
165
  * 1. 默认启用安全防护(XSS防护)
95
- * 2. 优化组件渲染性能
96
- * 3. 缓存计算结果,避免重复计算
97
- *
166
+ * 2. 优化组件渲染性能,使用 useMemo 缓存计算结果
167
+ * 3. 将安全配置计算提取到初始化阶段
168
+ *
98
169
  * @param options - 启动配置选项
99
170
  * @param services - 服务实例
100
171
  * @param context - 初始化上下文(可选)
@@ -102,30 +173,19 @@ let AppRenderer = class AppRenderer {
102
173
  if (!this.root) {
103
174
  throw new Error('渲染器未初始化,请先调用 initialize()');
104
175
  }
105
- // 获取初始语言(从 locale 配置中推断,或使用默认值)
106
- const initialLocale = options.locale ? Object.keys(options.locale)[0] || 'zh-CN' : 'zh-CN';
107
- // 检查路由是否已启用
108
- // 路由启用的条件:配置了 router 且 enabled !== false 且 enabled !== 'disabled'
109
- const routerEnabled = options.router ? options.router.enabled !== false && options.router.enabled !== 'disabled' : false;
110
- // 检查路由管理器是否已初始化(运行时状态)
111
- const routerManager = (0, _RouterManager.getRouterManager)();
112
- const router = routerManager.getRouter();
113
- // const isRouterInitialized = routerManager.isRouterEnabled();
114
- // 如果路由已启用且已初始化,使用 RouterProvider(路由系统接管渲染)
115
- // 否则直接渲染应用内容(不使用路由系统)
116
- const shouldUseRouter = routerEnabled && router !== null;
117
- // 安全性增强:应用默认安全策略
118
- // 默认启用 XSS 防护、配置验证和用户输入清理
176
+ // 优化:安全配置在初始化阶段计算(在 startApp 中预计算)
177
+ // 这里只使用预计算的值,避免在渲染时重复计算
119
178
  const securityConfig = {
120
179
  enableXSSProtection: options.security?.enableXSSProtection ?? true,
121
180
  validateConfig: options.security?.validateConfig ?? true,
122
181
  sanitizeUserInput: options.security?.sanitizeUserInput ?? true,
123
182
  csrf: options.security?.csrf
124
183
  };
184
+ // 优化:安全验证在初始化阶段完成,这里只进行必要的运行时检查
125
185
  // 如果启用了安全模式(默认启用),对配置进行验证
126
- if (securityConfig.enableXSSProtection) {
127
- if (securityConfig.validateConfig) {
128
- // 验证配置项中可能包含的字符串内容
186
+ if (securityConfig.enableXSSProtection && securityConfig.validateConfig) {
187
+ // 异步验证配置,不阻塞渲染
188
+ Promise.resolve().then(()=>{
129
189
  try {
130
190
  const configStr = JSON.stringify(options);
131
191
  const validation = _security.SecurityUtils.validateInput(configStr);
@@ -137,59 +197,39 @@ let AppRenderer = class AppRenderer {
137
197
  } catch (error) {
138
198
  // 忽略序列化错误(某些配置项可能包含不可序列化的内容)
139
199
  }
140
- }
141
- // 初始化 CSRF 防护(如果启用)
142
- if (securityConfig.csrf?.enabled !== false) {
143
- // 异步初始化 CSRF,但不阻塞渲染
144
- Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../../utils/csrf"))).then(({ initCSRFManager })=>{
145
- initCSRFManager({
146
- headerName: securityConfig.csrf?.headerName,
147
- cookieName: securityConfig.csrf?.cookieName,
148
- getToken: securityConfig.csrf?.getToken,
149
- validateToken: securityConfig.csrf?.validateToken
150
- });
151
- }).catch((error)=>{
152
- // CSRF 初始化失败不影响应用启动,但记录警告
153
- if (process.env.NODE_ENV === 'development') {
154
- console.warn('CSRF 防护初始化失败:', error);
155
- }
200
+ });
201
+ }
202
+ // 初始化 CSRF 防护(如果启用,异步执行,不阻塞渲染)
203
+ if (securityConfig.enableXSSProtection && securityConfig.csrf?.enabled !== false) {
204
+ Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../../utils/csrf"))).then(({ initCSRFManager })=>{
205
+ initCSRFManager({
206
+ headerName: securityConfig.csrf?.headerName,
207
+ cookieName: securityConfig.csrf?.cookieName,
208
+ getToken: securityConfig.csrf?.getToken,
209
+ validateToken: securityConfig.csrf?.validateToken
156
210
  });
157
- }
211
+ }).catch((error)=>{
212
+ // CSRF 初始化失败不影响应用启动,但记录警告
213
+ if (process.env.NODE_ENV === 'development') {
214
+ console.warn('CSRF 防护初始化失败:', error);
215
+ }
216
+ });
158
217
  }
159
- // 优化:缓存错误处理函数,避免每次渲染都创建新函数
160
- const handleError = (error)=>{
161
- services.monitoring.captureError(error);
162
- };
218
+ // 使用优化的应用内容组件,内部使用 useMemo 缓存计算结果
163
219
  this.root.render(/*#__PURE__*/ (0, _jsxruntime.jsx)(_react.StrictMode, {
164
- children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_error.ErrorBoundary, {
165
- fallback: options.errorFallback,
166
- onError: handleError,
167
- children: [
168
- /*#__PURE__*/ (0, _jsxruntime.jsx)(_initialization.InitializationErrorThrower, {}),
169
- /*#__PURE__*/ (0, _jsxruntime.jsx)(_app.AppContextProvider, {
170
- initialTheme: options.theme,
171
- initialLocale: initialLocale,
172
- initialAntdConfig: options.antd,
173
- initialInitializationContext: context,
174
- stateManager: services.stateManager,
175
- antdApp: options.antdApp,
176
- children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_app.BasicLayout, {
177
- children: shouldUseRouter ? // 启用路由时,使用 RouterProvider(路由内容由路由配置决定)
178
- /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactrouterdom.RouterProvider, {
179
- router: router
180
- }) : // 未启用路由时,直接渲染应用内容
181
- options.app || /*#__PURE__*/ (0, _jsxruntime.jsx)(_app.DefaultApp, {})
182
- })
183
- })
184
- ]
220
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(OptimizedAppContent, {
221
+ options: options,
222
+ services: services,
223
+ context: context,
224
+ securityConfig: securityConfig
185
225
  })
186
226
  }));
187
227
  }
188
228
  /**
189
229
  * 渲染启动页
190
- *
230
+ *
191
231
  * 注意:启动页不使用 RouterWrapper,因为启动页应该在路由系统之前渲染
192
- *
232
+ *
193
233
  * @param options - 启动配置选项
194
234
  * @param services - 服务实例
195
235
  * @param onComplete - 启动页完成回调
@@ -210,10 +250,11 @@ let AppRenderer = class AppRenderer {
210
250
  /*#__PURE__*/ (0, _jsxruntime.jsx)(_app.AppContextProvider, {
211
251
  initialTheme: options.theme,
212
252
  initialLocale: initialLocale,
213
- initialAntdConfig: options.antd,
253
+ initialAntdConfig: options.uiProvider || options.antd,
214
254
  stateManager: services.stateManager,
215
- antdApp: options.antdApp,
255
+ antdApp: options.uiApp || options.antdApp,
216
256
  children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_app.BasicLayout, {
257
+ globalProvider: options.globalProvider,
217
258
  children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_splash.SplashScreen, {
218
259
  options: options,
219
260
  onComplete: onComplete
@@ -226,7 +267,7 @@ let AppRenderer = class AppRenderer {
226
267
  }
227
268
  /**
228
269
  * 渲染错误页面
229
- *
270
+ *
230
271
  * @param options - 启动配置选项
231
272
  * @param services - 服务实例
232
273
  * @param error - 错误信息
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/startup/renderApp.tsx"],"sourcesContent":["/**\n * 应用渲染模块\n * 负责渲染React应用\n */\n\nimport { createRoot } from 'react-dom/client';\nimport type { Root } from 'react-dom/client';\nimport { StrictMode } from 'react';\nimport type { Container, RootOptions } from 'react-dom/client';\nimport { BasicLayout, DefaultApp, AppContextProvider } from '../app';\nimport type { LangType } from '../../library/locale/types';\nimport { ErrorBoundary } from '../error';\nimport { InitializationErrorThrower } from '../initialization';\nimport type { StartOptions } from '../types';\nimport type { InitializationContext } from '../initialization';\nimport type { MonitoringService } from '../../utils/monitoring';\nimport type { StateManager } from '../../state';\nimport { SplashScreen } from '../splash';\nimport { SecurityUtils } from '../../utils/security';\nimport { getRouterManager } from '../router/RouterManager';\nimport { RouterProvider } from \"react-router-dom\";\n\n/**\n * 应用渲染器\n */\nexport class AppRenderer {\n private root: Root | null = null;\n private container: Container | null = null;\n\n /**\n * 初始化渲染器\n * \n * @param container - React应用的挂载容器\n * @param rootOptions - React根节点配置选项\n */\n initialize(container: Container, rootOptions?: RootOptions): void {\n this.container = container;\n if (!this.root) {\n this.root = createRoot(container, rootOptions);\n }\n }\n\n /**\n * 渲染应用\n * \n * 优化:\n * 1. 默认启用安全防护(XSS防护)\n * 2. 优化组件渲染性能\n * 3. 缓存计算结果,避免重复计算\n * \n * @param options - 启动配置选项\n * @param services - 服务实例\n * @param context - 初始化上下文(可选)\n */\n async renderApp(\n options: StartOptions,\n services: {\n monitoring: MonitoringService;\n stateManager: StateManager;\n },\n context?: InitializationContext\n ): Promise<void> {\n if (!this.root) {\n throw new Error('渲染器未初始化,请先调用 initialize()');\n }\n\n // 获取初始语言(从 locale 配置中推断,或使用默认值)\n const initialLocale: LangType = options.locale\n ? (Object.keys(options.locale)[0] as LangType) || 'zh-CN'\n : 'zh-CN';\n\n // 检查路由是否已启用\n // 路由启用的条件:配置了 router 且 enabled !== false 且 enabled !== 'disabled'\n const routerEnabled = options.router\n ? options.router.enabled !== false && options.router.enabled !== 'disabled'\n : false;\n \n // 检查路由管理器是否已初始化(运行时状态)\n const routerManager = getRouterManager();\n const router = routerManager.getRouter();\n // const isRouterInitialized = routerManager.isRouterEnabled();\n\n // 如果路由已启用且已初始化,使用 RouterProvider(路由系统接管渲染)\n // 否则直接渲染应用内容(不使用路由系统)\n const shouldUseRouter = routerEnabled && router !== null;\n\n // 安全性增强:应用默认安全策略\n // 默认启用 XSS 防护、配置验证和用户输入清理\n const securityConfig = {\n enableXSSProtection: options.security?.enableXSSProtection ?? true,\n validateConfig: options.security?.validateConfig ?? true,\n sanitizeUserInput: options.security?.sanitizeUserInput ?? true,\n csrf: options.security?.csrf,\n };\n\n // 如果启用了安全模式(默认启用),对配置进行验证\n if (securityConfig.enableXSSProtection) {\n if (securityConfig.validateConfig) {\n // 验证配置项中可能包含的字符串内容\n try {\n const configStr = JSON.stringify(options);\n const validation = SecurityUtils.validateInput(configStr);\n if (!validation.safe) {\n services.monitoring.captureError(\n new Error('配置项包含不安全内容'),\n { reason: validation.reason }\n );\n }\n } catch (error) {\n // 忽略序列化错误(某些配置项可能包含不可序列化的内容)\n }\n }\n\n // 初始化 CSRF 防护(如果启用)\n if (securityConfig.csrf?.enabled !== false) {\n // 异步初始化 CSRF,但不阻塞渲染\n import('../../utils/csrf').then(({ initCSRFManager }) => {\n initCSRFManager({\n headerName: securityConfig.csrf?.headerName,\n cookieName: securityConfig.csrf?.cookieName,\n getToken: securityConfig.csrf?.getToken,\n validateToken: securityConfig.csrf?.validateToken,\n });\n }).catch((error) => {\n // CSRF 初始化失败不影响应用启动,但记录警告\n if (process.env.NODE_ENV === 'development') {\n console.warn('CSRF 防护初始化失败:', error);\n }\n });\n }\n }\n\n // 优化:缓存错误处理函数,避免每次渲染都创建新函数\n const handleError = (error: unknown) => {\n services.monitoring.captureError(error);\n };\n\n this.root.render(\n <StrictMode>\n <ErrorBoundary\n fallback={options.errorFallback}\n onError={handleError}\n >\n <InitializationErrorThrower />\n <AppContextProvider\n initialTheme={options.theme}\n initialLocale={initialLocale}\n initialAntdConfig={options.antd}\n initialInitializationContext={context}\n stateManager={services.stateManager}\n antdApp={options.antdApp}\n >\n <BasicLayout>\n {shouldUseRouter ? (\n // 启用路由时,使用 RouterProvider(路由内容由路由配置决定)\n <RouterProvider router={router} />\n ) : (\n // 未启用路由时,直接渲染应用内容\n options.app || <DefaultApp />\n )}\n </BasicLayout>\n </AppContextProvider>\n </ErrorBoundary>\n </StrictMode>\n );\n }\n\n /**\n * 渲染启动页\n * \n * 注意:启动页不使用 RouterWrapper,因为启动页应该在路由系统之前渲染\n * \n * @param options - 启动配置选项\n * @param services - 服务实例\n * @param onComplete - 启动页完成回调\n */\n renderSplashScreen(\n options: StartOptions,\n services: {\n monitoring: MonitoringService;\n stateManager: StateManager;\n },\n onComplete: (context: InitializationContext) => void\n ): void {\n if (!this.root) {\n throw new Error('渲染器未初始化,请先调用 initialize()');\n }\n\n // 获取初始语言(从 locale 配置中推断,或使用默认值)\n const initialLocale: LangType = options.locale\n ? (Object.keys(options.locale)[0] as LangType) || 'zh-CN'\n : 'zh-CN';\n\n this.root.render(\n <StrictMode>\n <ErrorBoundary\n fallback={options.errorFallback}\n onError={(error) => {\n services.monitoring.captureError(error);\n }}\n >\n <InitializationErrorThrower />\n <AppContextProvider\n initialTheme={options.theme}\n initialLocale={initialLocale}\n initialAntdConfig={options.antd}\n stateManager={services.stateManager}\n antdApp={options.antdApp}\n >\n {/* \n 启动页不使用 RouterWrapper,因为:\n 1. 启动页应该在路由系统初始化之前渲染\n 2. 启动页完成后才会渲染主应用,此时路由系统已经初始化完成\n */}\n <BasicLayout>\n <SplashScreen options={options} onComplete={onComplete} />\n </BasicLayout>\n </AppContextProvider>\n </ErrorBoundary>\n </StrictMode>\n );\n }\n\n /**\n * 渲染错误页面\n * \n * @param options - 启动配置选项\n * @param services - 服务实例\n * @param error - 错误信息\n */\n renderError(\n options: StartOptions,\n services: {\n monitoring: MonitoringService;\n }\n ): void {\n if (!this.root) {\n throw new Error('渲染器未初始化,请先调用 initialize()');\n }\n\n this.root.render(\n <StrictMode>\n <ErrorBoundary\n fallback={options.errorFallback}\n onError={(err) => {\n services.monitoring.captureError(err);\n if (options.errorMonitor?.onError) {\n options.errorMonitor.onError(err);\n }\n }}\n >\n <InitializationErrorThrower />\n <div>框架启动失败</div>\n </ErrorBoundary>\n </StrictMode>\n );\n }\n\n /**\n * 销毁渲染器\n */\n destroy(): void {\n if (this.root) {\n this.root.unmount();\n this.root = null;\n }\n this.container = null;\n }\n\n /**\n * 获取容器\n */\n getContainer(): Container | null {\n return this.container;\n }\n}\n"],"names":["AppRenderer","initialize","container","rootOptions","root","createRoot","renderApp","options","services","context","Error","initialLocale","locale","Object","keys","routerEnabled","router","enabled","routerManager","getRouterManager","getRouter","shouldUseRouter","securityConfig","enableXSSProtection","security","validateConfig","sanitizeUserInput","csrf","configStr","JSON","stringify","validation","SecurityUtils","validateInput","safe","monitoring","captureError","reason","error","then","initCSRFManager","headerName","cookieName","getToken","validateToken","catch","process","env","NODE_ENV","console","warn","handleError","render","StrictMode","ErrorBoundary","fallback","errorFallback","onError","InitializationErrorThrower","AppContextProvider","initialTheme","theme","initialAntdConfig","antd","initialInitializationContext","stateManager","antdApp","BasicLayout","RouterProvider","app","DefaultApp","renderSplashScreen","onComplete","SplashScreen","renderError","err","errorMonitor","div","destroy","unmount","getContainer"],"mappings":"AAAA;;;CAGC;;;;+BAsBYA;;;eAAAA;;;;wBApBc;uBAEA;qBAEiC;uBAE9B;gCACa;wBAKd;0BACC;+BACG;gCACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKxB,IAAA,AAAMA,cAAN,MAAMA;IAIX;;;;;GAKC,GACDC,WAAWC,SAAoB,EAAEC,WAAyB,EAAQ;QAChE,IAAI,CAACD,SAAS,GAAGA;QACjB,IAAI,CAAC,IAAI,CAACE,IAAI,EAAE;YACd,IAAI,CAACA,IAAI,GAAGC,IAAAA,kBAAU,EAACH,WAAWC;QACpC;IACF;IAEA;;;;;;;;;;;GAWC,GACD,MAAMG,UACJC,OAAqB,EACrBC,QAGC,EACDC,OAA+B,EAChB;QACf,IAAI,CAAC,IAAI,CAACL,IAAI,EAAE;YACd,MAAM,IAAIM,MAAM;QAClB;QAEA,gCAAgC;QAChC,MAAMC,gBAA0BJ,QAAQK,MAAM,GAC1C,AAACC,OAAOC,IAAI,CAACP,QAAQK,MAAM,CAAC,CAAC,EAAE,IAAiB,UAChD;QAEJ,YAAY;QACZ,kEAAkE;QAClE,MAAMG,gBAAgBR,QAAQS,MAAM,GAChCT,QAAQS,MAAM,CAACC,OAAO,KAAK,SAASV,QAAQS,MAAM,CAACC,OAAO,KAAK,aAC/D;QAEJ,uBAAuB;QACvB,MAAMC,gBAAgBC,IAAAA,+BAAgB;QACtC,MAAMH,SAASE,cAAcE,SAAS;QACtC,+DAA+D;QAE/D,2CAA2C;QAC3C,sBAAsB;QACtB,MAAMC,kBAAkBN,iBAAiBC,WAAW;QAEpD,iBAAiB;QACjB,0BAA0B;QAC1B,MAAMM,iBAAiB;YACrBC,qBAAqBhB,QAAQiB,QAAQ,EAAED,uBAAuB;YAC9DE,gBAAgBlB,QAAQiB,QAAQ,EAAEC,kBAAkB;YACpDC,mBAAmBnB,QAAQiB,QAAQ,EAAEE,qBAAqB;YAC1DC,MAAMpB,QAAQiB,QAAQ,EAAEG;QAC1B;QAEA,0BAA0B;QAC1B,IAAIL,eAAeC,mBAAmB,EAAE;YACtC,IAAID,eAAeG,cAAc,EAAE;gBACjC,mBAAmB;gBACnB,IAAI;oBACF,MAAMG,YAAYC,KAAKC,SAAS,CAACvB;oBACjC,MAAMwB,aAAaC,uBAAa,CAACC,aAAa,CAACL;oBAC/C,IAAI,CAACG,WAAWG,IAAI,EAAE;wBACpB1B,SAAS2B,UAAU,CAACC,YAAY,CAC9B,IAAI1B,MAAM,eACV;4BAAE2B,QAAQN,WAAWM,MAAM;wBAAC;oBAEhC;gBACF,EAAE,OAAOC,OAAO;gBACd,6BAA6B;gBAC/B;YACF;YAEA,oBAAoB;YACpB,IAAIhB,eAAeK,IAAI,EAAEV,YAAY,OAAO;gBAC1C,oBAAoB;gBACpB,mEAAA,QAAO,sBAAoBsB,IAAI,CAAC,CAAC,EAAEC,eAAe,EAAE;oBAClDA,gBAAgB;wBACdC,YAAYnB,eAAeK,IAAI,EAAEc;wBACjCC,YAAYpB,eAAeK,IAAI,EAAEe;wBACjCC,UAAUrB,eAAeK,IAAI,EAAEgB;wBAC/BC,eAAetB,eAAeK,IAAI,EAAEiB;oBACtC;gBACF,GAAGC,KAAK,CAAC,CAACP;oBACR,0BAA0B;oBAC1B,IAAIQ,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;wBAC1CC,QAAQC,IAAI,CAAC,iBAAiBZ;oBAChC;gBACF;YACF;QACF;QAEA,2BAA2B;QAC3B,MAAMa,cAAc,CAACb;YACnB9B,SAAS2B,UAAU,CAACC,YAAY,CAACE;QACnC;QAEA,IAAI,CAAClC,IAAI,CAACgD,MAAM,eACd,qBAACC,iBAAU;sBACT,cAAA,sBAACC,oBAAa;gBACZC,UAAUhD,QAAQiD,aAAa;gBAC/BC,SAASN;;kCAET,qBAACO,0CAA0B;kCAC3B,qBAACC,uBAAkB;wBACjBC,cAAcrD,QAAQsD,KAAK;wBAC3BlD,eAAeA;wBACfmD,mBAAmBvD,QAAQwD,IAAI;wBAC/BC,8BAA8BvD;wBAC9BwD,cAAczD,SAASyD,YAAY;wBACnCC,SAAS3D,QAAQ2D,OAAO;kCAExB,cAAA,qBAACC,gBAAW;sCACT9C,kBACC,uCAAuC;0CACvC,qBAAC+C,8BAAc;gCAACpD,QAAQA;iCAExB,kBAAkB;4BAClBT,QAAQ8D,GAAG,kBAAI,qBAACC,eAAU;;;;;;IAOxC;IAEA;;;;;;;;GAQC,GACDC,mBACEhE,OAAqB,EACrBC,QAGC,EACDgE,UAAoD,EAC9C;QACN,IAAI,CAAC,IAAI,CAACpE,IAAI,EAAE;YACd,MAAM,IAAIM,MAAM;QAClB;QAEA,gCAAgC;QAChC,MAAMC,gBAA0BJ,QAAQK,MAAM,GAC1C,AAACC,OAAOC,IAAI,CAACP,QAAQK,MAAM,CAAC,CAAC,EAAE,IAAiB,UAChD;QAEJ,IAAI,CAACR,IAAI,CAACgD,MAAM,eACd,qBAACC,iBAAU;sBACT,cAAA,sBAACC,oBAAa;gBACZC,UAAUhD,QAAQiD,aAAa;gBAC/BC,SAAS,CAACnB;oBACR9B,SAAS2B,UAAU,CAACC,YAAY,CAACE;gBACnC;;kCAEA,qBAACoB,0CAA0B;kCAC3B,qBAACC,uBAAkB;wBACjBC,cAAcrD,QAAQsD,KAAK;wBAC3BlD,eAAeA;wBACfmD,mBAAmBvD,QAAQwD,IAAI;wBAC/BE,cAAczD,SAASyD,YAAY;wBACnCC,SAAS3D,QAAQ2D,OAAO;kCAOxB,cAAA,qBAACC,gBAAW;sCACV,cAAA,qBAACM,oBAAY;gCAAClE,SAASA;gCAASiE,YAAYA;;;;;;;IAMxD;IAEA;;;;;;GAMC,GACDE,YACEnE,OAAqB,EACrBC,QAEC,EACK;QACN,IAAI,CAAC,IAAI,CAACJ,IAAI,EAAE;YACd,MAAM,IAAIM,MAAM;QAClB;QAEA,IAAI,CAACN,IAAI,CAACgD,MAAM,eACd,qBAACC,iBAAU;sBACT,cAAA,sBAACC,oBAAa;gBACZC,UAAUhD,QAAQiD,aAAa;gBAC/BC,SAAS,CAACkB;oBACRnE,SAAS2B,UAAU,CAACC,YAAY,CAACuC;oBACjC,IAAIpE,QAAQqE,YAAY,EAAEnB,SAAS;wBACjClD,QAAQqE,YAAY,CAACnB,OAAO,CAACkB;oBAC/B;gBACF;;kCAEA,qBAACjB,0CAA0B;kCAC3B,qBAACmB;kCAAI;;;;;IAIb;IAEA;;GAEC,GACDC,UAAgB;QACd,IAAI,IAAI,CAAC1E,IAAI,EAAE;YACb,IAAI,CAACA,IAAI,CAAC2E,OAAO;YACjB,IAAI,CAAC3E,IAAI,GAAG;QACd;QACA,IAAI,CAACF,SAAS,GAAG;IACnB;IAEA;;GAEC,GACD8E,eAAiC;QAC/B,OAAO,IAAI,CAAC9E,SAAS;IACvB;;QAxPA,uBAAQE,QAAoB;QAC5B,uBAAQF,aAA8B;;AAwPxC"}
1
+ {"version":3,"sources":["../../../src/core/startup/renderApp.tsx"],"sourcesContent":["/**\n * 应用渲染模块\n * 负责渲染React应用\n */\n\nimport { createRoot } from 'react-dom/client';\nimport type { Root } from 'react-dom/client';\nimport { StrictMode, useMemo, useCallback, memo } from 'react';\nimport type { Container, RootOptions } from 'react-dom/client';\nimport { BasicLayout, DefaultApp, AppContextProvider } from '../app';\nimport type { LangType } from '../../library/locale/types';\nimport { ErrorBoundary } from '../error';\nimport { InitializationErrorThrower } from '../initialization';\nimport type { StartOptions } from '../types';\nimport type { InitializationContext } from '../initialization';\nimport type { MonitoringService } from '../../utils/monitoring';\nimport type { StateManager } from '../../state';\nimport { SplashScreen } from '../splash';\nimport { SecurityUtils } from '../../utils/security';\nimport { getRouterManager } from '../router/RouterManager';\nimport { RouterProvider } from \"react-router-dom\";\n\n/**\n * 安全配置类型\n */\ninterface SecurityConfig {\n enableXSSProtection: boolean;\n validateConfig: boolean;\n sanitizeUserInput: boolean;\n csrf?: StartOptions['security'] extends infer S\n ? S extends { csrf?: infer C }\n ? C\n : never\n : never;\n}\n\n/**\n * 优化的应用内容组件\n * 使用 useMemo 缓存计算结果,提升渲染性能\n */\ninterface OptimizedAppContentProps {\n options: StartOptions;\n services: {\n monitoring: MonitoringService;\n stateManager: StateManager;\n };\n context?: InitializationContext;\n securityConfig: SecurityConfig;\n}\n\nconst OptimizedAppContent = memo<OptimizedAppContentProps>(({\n options,\n services,\n context,\n // securityConfig 用于未来扩展,当前暂不使用\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n securityConfig: _securityConfig,\n}) => {\n // 优化:使用 useMemo 缓存初始语言计算\n const initialLocale = useMemo<LangType>(() => {\n return options.locale\n ? (Object.keys(options.locale)[0] as LangType) || 'zh-CN'\n : 'zh-CN';\n }, [options.locale]);\n\n // 优化:使用 useMemo 缓存路由判断结果\n const shouldUseRouter = useMemo(() => {\n const routerEnabled = options.router\n ? options.router.enabled !== false && options.router.enabled !== 'disabled'\n : false;\n\n if (!routerEnabled) {\n return false;\n }\n\n const routerManager = getRouterManager();\n const router = routerManager.getRouter();\n return router !== null;\n }, [options.router]);\n\n // 优化:使用 useMemo 缓存路由实例\n const router = useMemo(() => {\n if (!shouldUseRouter) {\n return null;\n }\n const routerManager = getRouterManager();\n return routerManager.getRouter();\n }, [shouldUseRouter]);\n\n // 优化:使用 useCallback 缓存错误处理函数\n const handleError = useCallback((error: unknown) => {\n services.monitoring.captureError(error);\n }, [services.monitoring]);\n\n // 优化:使用 useMemo 缓存应用内容\n const appContent = useMemo(() => {\n if (shouldUseRouter && router) {\n return <RouterProvider router={router} />;\n }\n return options.app || <DefaultApp />;\n }, [shouldUseRouter, router, options.app]);\n\n return (\n <ErrorBoundary\n fallback={options.errorFallback}\n onError={handleError}\n >\n <InitializationErrorThrower />\n <AppContextProvider\n initialTheme={options.theme}\n initialLocale={initialLocale}\n initialAntdConfig={options.uiProvider || options.antd}\n initialInitializationContext={context}\n stateManager={services.stateManager}\n antdApp={options.uiApp || options.antdApp}\n >\n <BasicLayout globalProvider={options.globalProvider}>\n {appContent}\n </BasicLayout>\n </AppContextProvider>\n </ErrorBoundary>\n );\n});\n\nOptimizedAppContent.displayName = 'OptimizedAppContent';\n\n/**\n * 应用渲染器\n */\nexport class AppRenderer {\n private root: Root | null = null;\n private container: Container | null = null;\n\n /**\n * 初始化渲染器\n *\n * @param container - React应用的挂载容器\n * @param rootOptions - React根节点配置选项\n */\n initialize(container: Container, rootOptions?: RootOptions): void {\n this.container = container;\n if (!this.root) {\n this.root = createRoot(container, rootOptions);\n }\n }\n\n /**\n * 渲染应用\n *\n * 优化:\n * 1. 默认启用安全防护(XSS防护)\n * 2. 优化组件渲染性能,使用 useMemo 缓存计算结果\n * 3. 将安全配置计算提取到初始化阶段\n *\n * @param options - 启动配置选项\n * @param services - 服务实例\n * @param context - 初始化上下文(可选)\n */\n async renderApp(\n options: StartOptions,\n services: {\n monitoring: MonitoringService;\n stateManager: StateManager;\n },\n context?: InitializationContext\n ): Promise<void> {\n if (!this.root) {\n throw new Error('渲染器未初始化,请先调用 initialize()');\n }\n\n // 优化:安全配置在初始化阶段计算(在 startApp 中预计算)\n // 这里只使用预计算的值,避免在渲染时重复计算\n const securityConfig: SecurityConfig = {\n enableXSSProtection: options.security?.enableXSSProtection ?? true,\n validateConfig: options.security?.validateConfig ?? true,\n sanitizeUserInput: options.security?.sanitizeUserInput ?? true,\n csrf: options.security?.csrf,\n };\n\n // 优化:安全验证在初始化阶段完成,这里只进行必要的运行时检查\n // 如果启用了安全模式(默认启用),对配置进行验证\n if (securityConfig.enableXSSProtection && securityConfig.validateConfig) {\n // 异步验证配置,不阻塞渲染\n Promise.resolve().then(() => {\n try {\n const configStr = JSON.stringify(options);\n const validation = SecurityUtils.validateInput(configStr);\n if (!validation.safe) {\n services.monitoring.captureError(\n new Error('配置项包含不安全内容'),\n { reason: validation.reason }\n );\n }\n } catch (error) {\n // 忽略序列化错误(某些配置项可能包含不可序列化的内容)\n }\n });\n }\n\n // 初始化 CSRF 防护(如果启用,异步执行,不阻塞渲染)\n if (securityConfig.enableXSSProtection && securityConfig.csrf?.enabled !== false) {\n import('../../utils/csrf').then(({ initCSRFManager }) => {\n initCSRFManager({\n headerName: securityConfig.csrf?.headerName,\n cookieName: securityConfig.csrf?.cookieName,\n getToken: securityConfig.csrf?.getToken,\n validateToken: securityConfig.csrf?.validateToken,\n });\n }).catch((error) => {\n // CSRF 初始化失败不影响应用启动,但记录警告\n if (process.env.NODE_ENV === 'development') {\n console.warn('CSRF 防护初始化失败:', error);\n }\n });\n }\n\n // 使用优化的应用内容组件,内部使用 useMemo 缓存计算结果\n this.root.render(\n <StrictMode>\n <OptimizedAppContent\n options={options}\n services={services}\n context={context}\n securityConfig={securityConfig}\n />\n </StrictMode>\n );\n }\n\n /**\n * 渲染启动页\n *\n * 注意:启动页不使用 RouterWrapper,因为启动页应该在路由系统之前渲染\n *\n * @param options - 启动配置选项\n * @param services - 服务实例\n * @param onComplete - 启动页完成回调\n */\n renderSplashScreen(\n options: StartOptions,\n services: {\n monitoring: MonitoringService;\n stateManager: StateManager;\n },\n onComplete: (context: InitializationContext) => void\n ): void {\n if (!this.root) {\n throw new Error('渲染器未初始化,请先调用 initialize()');\n }\n\n // 获取初始语言(从 locale 配置中推断,或使用默认值)\n const initialLocale: LangType = options.locale\n ? (Object.keys(options.locale)[0] as LangType) || 'zh-CN'\n : 'zh-CN';\n\n this.root.render(\n <StrictMode>\n <ErrorBoundary\n fallback={options.errorFallback}\n onError={(error) => {\n services.monitoring.captureError(error);\n }}\n >\n <InitializationErrorThrower />\n <AppContextProvider\n initialTheme={options.theme}\n initialLocale={initialLocale}\n initialAntdConfig={options.uiProvider || options.antd}\n stateManager={services.stateManager}\n antdApp={options.uiApp || options.antdApp}\n >\n {/*\n 启动页不使用 RouterWrapper,因为:\n 1. 启动页应该在路由系统初始化之前渲染\n 2. 启动页完成后才会渲染主应用,此时路由系统已经初始化完成\n */}\n <BasicLayout globalProvider={options.globalProvider}>\n <SplashScreen options={options} onComplete={onComplete} />\n </BasicLayout>\n </AppContextProvider>\n </ErrorBoundary>\n </StrictMode>\n );\n }\n\n /**\n * 渲染错误页面\n *\n * @param options - 启动配置选项\n * @param services - 服务实例\n * @param error - 错误信息\n */\n renderError(\n options: StartOptions,\n services: {\n monitoring: MonitoringService;\n }\n ): void {\n if (!this.root) {\n throw new Error('渲染器未初始化,请先调用 initialize()');\n }\n\n this.root.render(\n <StrictMode>\n <ErrorBoundary\n fallback={options.errorFallback}\n onError={(err) => {\n services.monitoring.captureError(err);\n if (options.errorMonitor?.onError) {\n options.errorMonitor.onError(err);\n }\n }}\n >\n <InitializationErrorThrower />\n <div>框架启动失败</div>\n </ErrorBoundary>\n </StrictMode>\n );\n }\n\n /**\n * 销毁渲染器\n */\n destroy(): void {\n if (this.root) {\n this.root.unmount();\n this.root = null;\n }\n this.container = null;\n }\n\n /**\n * 获取容器\n */\n getContainer(): Container | null {\n return this.container;\n }\n}\n"],"names":["AppRenderer","OptimizedAppContent","memo","options","services","context","securityConfig","_securityConfig","initialLocale","useMemo","locale","Object","keys","shouldUseRouter","routerEnabled","router","enabled","routerManager","getRouterManager","getRouter","handleError","useCallback","error","monitoring","captureError","appContent","RouterProvider","app","DefaultApp","ErrorBoundary","fallback","errorFallback","onError","InitializationErrorThrower","AppContextProvider","initialTheme","theme","initialAntdConfig","uiProvider","antd","initialInitializationContext","stateManager","antdApp","uiApp","BasicLayout","globalProvider","displayName","initialize","container","rootOptions","root","createRoot","renderApp","Error","enableXSSProtection","security","validateConfig","sanitizeUserInput","csrf","Promise","resolve","then","configStr","JSON","stringify","validation","SecurityUtils","validateInput","safe","reason","initCSRFManager","headerName","cookieName","getToken","validateToken","catch","process","env","NODE_ENV","console","warn","render","StrictMode","renderSplashScreen","onComplete","SplashScreen","renderError","err","errorMonitor","div","destroy","unmount","getContainer"],"mappings":"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"}
@@ -25,8 +25,8 @@ export declare class AppRenderer {
25
25
  *
26
26
  * 优化:
27
27
  * 1. 默认启用安全防护(XSS防护)
28
- * 2. 优化组件渲染性能
29
- * 3. 缓存计算结果,避免重复计算
28
+ * 2. 优化组件渲染性能,使用 useMemo 缓存计算结果
29
+ * 3. 将安全配置计算提取到初始化阶段
30
30
  *
31
31
  * @param options - 启动配置选项
32
32
  * @param services - 服务实例
@@ -68,4 +68,3 @@ export declare class AppRenderer {
68
68
  */
69
69
  getContainer(): Container | null;
70
70
  }
71
- //# sourceMappingURL=renderApp.d.ts.map
@@ -16,7 +16,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
16
16
  * 应用渲染模块
17
17
  * 负责渲染React应用
18
18
  */ import { createRoot } from "react-dom/client";
19
- import { StrictMode } from "react";
19
+ import { StrictMode, useMemo, useCallback, memo } from "react";
20
20
  import { BasicLayout, DefaultApp, AppContextProvider } from "../app";
21
21
  import { ErrorBoundary } from "../error";
22
22
  import { InitializationErrorThrower } from "../initialization";
@@ -24,12 +24,83 @@ import { SplashScreen } from "../splash";
24
24
  import { SecurityUtils } from "../../utils/security";
25
25
  import { getRouterManager } from "../router/RouterManager";
26
26
  import { RouterProvider } from "react-router-dom";
27
+ const OptimizedAppContent = /*#__PURE__*/ memo(({ options, services, context, // securityConfig 用于未来扩展,当前暂不使用
28
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
29
+ securityConfig: _securityConfig })=>{
30
+ // 优化:使用 useMemo 缓存初始语言计算
31
+ const initialLocale = useMemo(()=>{
32
+ return options.locale ? Object.keys(options.locale)[0] || 'zh-CN' : 'zh-CN';
33
+ }, [
34
+ options.locale
35
+ ]);
36
+ // 优化:使用 useMemo 缓存路由判断结果
37
+ const shouldUseRouter = useMemo(()=>{
38
+ const routerEnabled = options.router ? options.router.enabled !== false && options.router.enabled !== 'disabled' : false;
39
+ if (!routerEnabled) {
40
+ return false;
41
+ }
42
+ const routerManager = getRouterManager();
43
+ const router = routerManager.getRouter();
44
+ return router !== null;
45
+ }, [
46
+ options.router
47
+ ]);
48
+ // 优化:使用 useMemo 缓存路由实例
49
+ const router = useMemo(()=>{
50
+ if (!shouldUseRouter) {
51
+ return null;
52
+ }
53
+ const routerManager = getRouterManager();
54
+ return routerManager.getRouter();
55
+ }, [
56
+ shouldUseRouter
57
+ ]);
58
+ // 优化:使用 useCallback 缓存错误处理函数
59
+ const handleError = useCallback((error)=>{
60
+ services.monitoring.captureError(error);
61
+ }, [
62
+ services.monitoring
63
+ ]);
64
+ // 优化:使用 useMemo 缓存应用内容
65
+ const appContent = useMemo(()=>{
66
+ if (shouldUseRouter && router) {
67
+ return /*#__PURE__*/ _jsx(RouterProvider, {
68
+ router: router
69
+ });
70
+ }
71
+ return options.app || /*#__PURE__*/ _jsx(DefaultApp, {});
72
+ }, [
73
+ shouldUseRouter,
74
+ router,
75
+ options.app
76
+ ]);
77
+ return /*#__PURE__*/ _jsxs(ErrorBoundary, {
78
+ fallback: options.errorFallback,
79
+ onError: handleError,
80
+ children: [
81
+ /*#__PURE__*/ _jsx(InitializationErrorThrower, {}),
82
+ /*#__PURE__*/ _jsx(AppContextProvider, {
83
+ initialTheme: options.theme,
84
+ initialLocale: initialLocale,
85
+ initialAntdConfig: options.uiProvider || options.antd,
86
+ initialInitializationContext: context,
87
+ stateManager: services.stateManager,
88
+ antdApp: options.uiApp || options.antdApp,
89
+ children: /*#__PURE__*/ _jsx(BasicLayout, {
90
+ globalProvider: options.globalProvider,
91
+ children: appContent
92
+ })
93
+ })
94
+ ]
95
+ });
96
+ });
97
+ OptimizedAppContent.displayName = 'OptimizedAppContent';
27
98
  /**
28
99
  * 应用渲染器
29
100
  */ export class AppRenderer {
30
101
  /**
31
102
  * 初始化渲染器
32
- *
103
+ *
33
104
  * @param container - React应用的挂载容器
34
105
  * @param rootOptions - React根节点配置选项
35
106
  */ initialize(container, rootOptions) {
@@ -40,12 +111,12 @@ import { RouterProvider } from "react-router-dom";
40
111
  }
41
112
  /**
42
113
  * 渲染应用
43
- *
114
+ *
44
115
  * 优化:
45
116
  * 1. 默认启用安全防护(XSS防护)
46
- * 2. 优化组件渲染性能
47
- * 3. 缓存计算结果,避免重复计算
48
- *
117
+ * 2. 优化组件渲染性能,使用 useMemo 缓存计算结果
118
+ * 3. 将安全配置计算提取到初始化阶段
119
+ *
49
120
  * @param options - 启动配置选项
50
121
  * @param services - 服务实例
51
122
  * @param context - 初始化上下文(可选)
@@ -53,30 +124,19 @@ import { RouterProvider } from "react-router-dom";
53
124
  if (!this.root) {
54
125
  throw new Error('渲染器未初始化,请先调用 initialize()');
55
126
  }
56
- // 获取初始语言(从 locale 配置中推断,或使用默认值)
57
- const initialLocale = options.locale ? Object.keys(options.locale)[0] || 'zh-CN' : 'zh-CN';
58
- // 检查路由是否已启用
59
- // 路由启用的条件:配置了 router 且 enabled !== false 且 enabled !== 'disabled'
60
- const routerEnabled = options.router ? options.router.enabled !== false && options.router.enabled !== 'disabled' : false;
61
- // 检查路由管理器是否已初始化(运行时状态)
62
- const routerManager = getRouterManager();
63
- const router = routerManager.getRouter();
64
- // const isRouterInitialized = routerManager.isRouterEnabled();
65
- // 如果路由已启用且已初始化,使用 RouterProvider(路由系统接管渲染)
66
- // 否则直接渲染应用内容(不使用路由系统)
67
- const shouldUseRouter = routerEnabled && router !== null;
68
- // 安全性增强:应用默认安全策略
69
- // 默认启用 XSS 防护、配置验证和用户输入清理
127
+ // 优化:安全配置在初始化阶段计算(在 startApp 中预计算)
128
+ // 这里只使用预计算的值,避免在渲染时重复计算
70
129
  const securityConfig = {
71
130
  enableXSSProtection: options.security?.enableXSSProtection ?? true,
72
131
  validateConfig: options.security?.validateConfig ?? true,
73
132
  sanitizeUserInput: options.security?.sanitizeUserInput ?? true,
74
133
  csrf: options.security?.csrf
75
134
  };
135
+ // 优化:安全验证在初始化阶段完成,这里只进行必要的运行时检查
76
136
  // 如果启用了安全模式(默认启用),对配置进行验证
77
- if (securityConfig.enableXSSProtection) {
78
- if (securityConfig.validateConfig) {
79
- // 验证配置项中可能包含的字符串内容
137
+ if (securityConfig.enableXSSProtection && securityConfig.validateConfig) {
138
+ // 异步验证配置,不阻塞渲染
139
+ Promise.resolve().then(()=>{
80
140
  try {
81
141
  const configStr = JSON.stringify(options);
82
142
  const validation = SecurityUtils.validateInput(configStr);
@@ -88,59 +148,39 @@ import { RouterProvider } from "react-router-dom";
88
148
  } catch (error) {
89
149
  // 忽略序列化错误(某些配置项可能包含不可序列化的内容)
90
150
  }
91
- }
92
- // 初始化 CSRF 防护(如果启用)
93
- if (securityConfig.csrf?.enabled !== false) {
94
- // 异步初始化 CSRF,但不阻塞渲染
95
- import("../../utils/csrf").then(({ initCSRFManager })=>{
96
- initCSRFManager({
97
- headerName: securityConfig.csrf?.headerName,
98
- cookieName: securityConfig.csrf?.cookieName,
99
- getToken: securityConfig.csrf?.getToken,
100
- validateToken: securityConfig.csrf?.validateToken
101
- });
102
- }).catch((error)=>{
103
- // CSRF 初始化失败不影响应用启动,但记录警告
104
- if (process.env.NODE_ENV === 'development') {
105
- console.warn('CSRF 防护初始化失败:', error);
106
- }
151
+ });
152
+ }
153
+ // 初始化 CSRF 防护(如果启用,异步执行,不阻塞渲染)
154
+ if (securityConfig.enableXSSProtection && securityConfig.csrf?.enabled !== false) {
155
+ import("../../utils/csrf").then(({ initCSRFManager })=>{
156
+ initCSRFManager({
157
+ headerName: securityConfig.csrf?.headerName,
158
+ cookieName: securityConfig.csrf?.cookieName,
159
+ getToken: securityConfig.csrf?.getToken,
160
+ validateToken: securityConfig.csrf?.validateToken
107
161
  });
108
- }
162
+ }).catch((error)=>{
163
+ // CSRF 初始化失败不影响应用启动,但记录警告
164
+ if (process.env.NODE_ENV === 'development') {
165
+ console.warn('CSRF 防护初始化失败:', error);
166
+ }
167
+ });
109
168
  }
110
- // 优化:缓存错误处理函数,避免每次渲染都创建新函数
111
- const handleError = (error)=>{
112
- services.monitoring.captureError(error);
113
- };
169
+ // 使用优化的应用内容组件,内部使用 useMemo 缓存计算结果
114
170
  this.root.render(/*#__PURE__*/ _jsx(StrictMode, {
115
- children: /*#__PURE__*/ _jsxs(ErrorBoundary, {
116
- fallback: options.errorFallback,
117
- onError: handleError,
118
- children: [
119
- /*#__PURE__*/ _jsx(InitializationErrorThrower, {}),
120
- /*#__PURE__*/ _jsx(AppContextProvider, {
121
- initialTheme: options.theme,
122
- initialLocale: initialLocale,
123
- initialAntdConfig: options.antd,
124
- initialInitializationContext: context,
125
- stateManager: services.stateManager,
126
- antdApp: options.antdApp,
127
- children: /*#__PURE__*/ _jsx(BasicLayout, {
128
- children: shouldUseRouter ? // 启用路由时,使用 RouterProvider(路由内容由路由配置决定)
129
- /*#__PURE__*/ _jsx(RouterProvider, {
130
- router: router
131
- }) : // 未启用路由时,直接渲染应用内容
132
- options.app || /*#__PURE__*/ _jsx(DefaultApp, {})
133
- })
134
- })
135
- ]
171
+ children: /*#__PURE__*/ _jsx(OptimizedAppContent, {
172
+ options: options,
173
+ services: services,
174
+ context: context,
175
+ securityConfig: securityConfig
136
176
  })
137
177
  }));
138
178
  }
139
179
  /**
140
180
  * 渲染启动页
141
- *
181
+ *
142
182
  * 注意:启动页不使用 RouterWrapper,因为启动页应该在路由系统之前渲染
143
- *
183
+ *
144
184
  * @param options - 启动配置选项
145
185
  * @param services - 服务实例
146
186
  * @param onComplete - 启动页完成回调
@@ -161,10 +201,11 @@ import { RouterProvider } from "react-router-dom";
161
201
  /*#__PURE__*/ _jsx(AppContextProvider, {
162
202
  initialTheme: options.theme,
163
203
  initialLocale: initialLocale,
164
- initialAntdConfig: options.antd,
204
+ initialAntdConfig: options.uiProvider || options.antd,
165
205
  stateManager: services.stateManager,
166
- antdApp: options.antdApp,
206
+ antdApp: options.uiApp || options.antdApp,
167
207
  children: /*#__PURE__*/ _jsx(BasicLayout, {
208
+ globalProvider: options.globalProvider,
168
209
  children: /*#__PURE__*/ _jsx(SplashScreen, {
169
210
  options: options,
170
211
  onComplete: onComplete
@@ -177,7 +218,7 @@ import { RouterProvider } from "react-router-dom";
177
218
  }
178
219
  /**
179
220
  * 渲染错误页面
180
- *
221
+ *
181
222
  * @param options - 启动配置选项
182
223
  * @param services - 服务实例
183
224
  * @param error - 错误信息