@vlian/framework 1.2.56 → 1.2.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (685) hide show
  1. package/README.md +15 -3
  2. package/dist/analytics/index.cjs +0 -2
  3. package/dist/analytics/index.js +1 -3
  4. package/dist/analytics.umd.js +8 -208
  5. package/dist/components/LocaleSwitch.cjs +0 -2
  6. package/dist/components/LocaleSwitch.js +1 -103
  7. package/dist/components/ThemeSwitch.cjs +0 -2
  8. package/dist/components/ThemeSwitch.js +1 -102
  9. package/dist/components/index.cjs +0 -2
  10. package/dist/components/index.js +1 -4
  11. package/dist/components/persistence.cjs +0 -2
  12. package/dist/components/persistence.js +1 -39
  13. package/dist/core/Test.cjs +0 -2
  14. package/dist/core/Test.js +1 -15
  15. package/dist/core/app/AppContext.cjs +0 -2
  16. package/dist/core/app/AppContext.js +1 -339
  17. package/dist/core/app/AppContext.types.cjs +0 -2
  18. package/dist/core/app/AppContext.types.js +1 -5
  19. package/dist/core/app/BasicLayout.cjs +0 -2
  20. package/dist/core/app/BasicLayout.js +1 -74
  21. package/dist/core/app/DefaultApp.cjs +0 -2
  22. package/dist/core/app/DefaultApp.js +1 -143
  23. package/dist/core/app/index.cjs +0 -2
  24. package/dist/core/app/index.js +1 -7
  25. package/dist/core/config/AppConfig.cjs +0 -2
  26. package/dist/core/config/AppConfig.js +1 -133
  27. package/dist/core/config/ConfigLoader.cjs +0 -2
  28. package/dist/core/config/ConfigLoader.js +1 -311
  29. package/dist/core/config/ConfigValidator.cjs +0 -2
  30. package/dist/core/config/ConfigValidator.js +2 -121
  31. package/dist/core/config/index.cjs +0 -2
  32. package/dist/core/config/index.js +1 -7
  33. package/dist/core/dev/DevTools.cjs +0 -2
  34. package/dist/core/dev/DevTools.js +1 -210
  35. package/dist/core/error/ErrorBoundary.cjs +0 -2
  36. package/dist/core/error/ErrorBoundary.js +1 -399
  37. package/dist/core/error/ErrorHandler.cjs +0 -2
  38. package/dist/core/error/ErrorHandler.js +1 -261
  39. package/dist/core/error/index.cjs +0 -2
  40. package/dist/core/error/index.js +1 -6
  41. package/dist/core/event/AppEventBus.cjs +0 -2
  42. package/dist/core/event/AppEventBus.js +1 -438
  43. package/dist/core/event/frameworkEvents.cjs +0 -2
  44. package/dist/core/event/frameworkEvents.js +1 -135
  45. package/dist/core/event/hooks.cjs +0 -2
  46. package/dist/core/event/hooks.js +1 -95
  47. package/dist/core/event/index.cjs +0 -2
  48. package/dist/core/event/index.js +1 -10
  49. package/dist/core/event/types.cjs +0 -2
  50. package/dist/core/event/types.js +1 -56
  51. package/dist/core/event/useEventBus.cjs +0 -2
  52. package/dist/core/event/useEventBus.js +1 -39
  53. package/dist/core/index.cjs +0 -2
  54. package/dist/core/index.js +1 -69
  55. package/dist/core/initialization/InitializationErrorThrower.cjs +0 -2
  56. package/dist/core/initialization/InitializationErrorThrower.js +1 -30
  57. package/dist/core/initialization/index.cjs +0 -2
  58. package/dist/core/initialization/index.js +1 -7
  59. package/dist/core/initialization/initialization.cjs +0 -2
  60. package/dist/core/initialization/initialization.js +1 -78
  61. package/dist/core/initialization/initializationErrorState.cjs +0 -2
  62. package/dist/core/initialization/initializationErrorState.js +1 -60
  63. package/dist/core/kernel/defaultAdapters.cjs +0 -2
  64. package/dist/core/kernel/defaultAdapters.js +1 -176
  65. package/dist/core/kernel/errors.cjs +0 -2
  66. package/dist/core/kernel/errors.js +1 -53
  67. package/dist/core/kernel/index.cjs +0 -2
  68. package/dist/core/kernel/index.js +1 -4
  69. package/dist/core/kernel/startKernel.cjs +0 -2
  70. package/dist/core/kernel/startKernel.js +1 -192
  71. package/dist/core/kernel/types.cjs +0 -2
  72. package/dist/core/kernel/types.js +1 -3
  73. package/dist/core/middleware.cjs +0 -2
  74. package/dist/core/middleware.js +1 -61
  75. package/dist/core/plugin/PluginEventBus.cjs +0 -2
  76. package/dist/core/plugin/PluginEventBus.js +1 -286
  77. package/dist/core/plugin/PluginSandbox.cjs +0 -2
  78. package/dist/core/plugin/PluginSandbox.js +1 -125
  79. package/dist/core/plugin.cjs +0 -2
  80. package/dist/core/plugin.js +1 -438
  81. package/dist/core/router/RouterManager.cjs +0 -2
  82. package/dist/core/router/RouterManager.js +1 -272
  83. package/dist/core/router/adapter/AdapterManager.cjs +0 -2
  84. package/dist/core/router/adapter/AdapterManager.js +1 -221
  85. package/dist/core/router/adapter/index.cjs +0 -2
  86. package/dist/core/router/adapter/index.js +1 -7
  87. package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs +0 -2
  88. package/dist/core/router/adapter/react-router/ReactRouterAdapter.js +1 -116
  89. package/dist/core/router/adapter/react-router/index.cjs +0 -2
  90. package/dist/core/router/adapter/react-router/index.js +1 -5
  91. package/dist/core/router/adapter/types.cjs +0 -2
  92. package/dist/core/router/adapter/types.js +1 -7
  93. package/dist/core/router/dev/RouterDevTools.cjs +0 -2
  94. package/dist/core/router/dev/RouterDevTools.js +1 -211
  95. package/dist/core/router/dev/index.cjs +0 -2
  96. package/dist/core/router/dev/index.js +1 -5
  97. package/dist/core/router/dynamic/DynamicRouteManager.cjs +0 -2
  98. package/dist/core/router/dynamic/DynamicRouteManager.js +1 -179
  99. package/dist/core/router/dynamic/index.cjs +0 -2
  100. package/dist/core/router/dynamic/index.js +1 -5
  101. package/dist/core/router/errors/RouterError.cjs +0 -2
  102. package/dist/core/router/errors/RouterError.js +1 -48
  103. package/dist/core/router/errors/index.cjs +0 -2
  104. package/dist/core/router/errors/index.js +1 -5
  105. package/dist/core/router/index.cjs +0 -2
  106. package/dist/core/router/index.js +1 -32
  107. package/dist/core/router/lifecycle/RouterLifecycleManager.cjs +0 -2
  108. package/dist/core/router/lifecycle/RouterLifecycleManager.js +1 -130
  109. package/dist/core/router/lifecycle/index.cjs +0 -2
  110. package/dist/core/router/lifecycle/index.js +1 -5
  111. package/dist/core/router/middleware/RouterMiddlewareManager.cjs +0 -2
  112. package/dist/core/router/middleware/RouterMiddlewareManager.js +1 -179
  113. package/dist/core/router/middleware/auth.cjs +0 -2
  114. package/dist/core/router/middleware/auth.js +1 -63
  115. package/dist/core/router/middleware/index.cjs +0 -2
  116. package/dist/core/router/middleware/index.js +1 -7
  117. package/dist/core/router/middleware/types.cjs +0 -2
  118. package/dist/core/router/middleware/types.js +1 -7
  119. package/dist/core/router/monitoring/RouterMonitoring.cjs +0 -2
  120. package/dist/core/router/monitoring/RouterMonitoring.js +1 -213
  121. package/dist/core/router/monitoring/index.cjs +0 -2
  122. package/dist/core/router/monitoring/index.js +1 -5
  123. package/dist/core/router/navigation/RouterNavigation.cjs +0 -2
  124. package/dist/core/router/navigation/RouterNavigation.js +1 -192
  125. package/dist/core/router/navigation/index.cjs +0 -2
  126. package/dist/core/router/navigation/index.js +1 -5
  127. package/dist/core/router/performance/RouteCache.cjs +0 -2
  128. package/dist/core/router/performance/RouteCache.js +1 -291
  129. package/dist/core/router/performance/RoutePreloader.cjs +0 -2
  130. package/dist/core/router/performance/RoutePreloader.js +1 -277
  131. package/dist/core/router/performance/index.cjs +0 -2
  132. package/dist/core/router/performance/index.js +1 -6
  133. package/dist/core/router/plugin/RouterPluginManager.cjs +0 -2
  134. package/dist/core/router/plugin/RouterPluginManager.js +1 -248
  135. package/dist/core/router/plugin/index.cjs +0 -2
  136. package/dist/core/router/plugin/index.js +1 -6
  137. package/dist/core/router/plugin/types.cjs +0 -2
  138. package/dist/core/router/plugin/types.js +1 -33
  139. package/dist/core/router/types.cjs +0 -2
  140. package/dist/core/router/types.js +1 -5
  141. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs +0 -2
  142. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js +1 -121
  143. package/dist/core/router/utils/adapters/react-router/transform.cjs +0 -2
  144. package/dist/core/router/utils/adapters/react-router/transform.js +1 -242
  145. package/dist/core/router/utils/transform.cjs +0 -2
  146. package/dist/core/router/utils/transform.js +1 -791
  147. package/dist/core/router/validation/RouterConfigValidator.cjs +0 -2
  148. package/dist/core/router/validation/RouterConfigValidator.js +2 -77
  149. package/dist/core/router/validation/index.cjs +0 -2
  150. package/dist/core/router/validation/index.js +1 -6
  151. package/dist/core/router/validation/schema.cjs +0 -2
  152. package/dist/core/router/validation/schema.js +1 -151
  153. package/dist/core/router/version/RouteVersionManager.cjs +0 -2
  154. package/dist/core/router/version/RouteVersionManager.js +1 -191
  155. package/dist/core/router/version/index.cjs +0 -2
  156. package/dist/core/router/version/index.js +1 -5
  157. package/dist/core/splash/SplashScreen.cjs +0 -2
  158. package/dist/core/splash/SplashScreen.js +1 -293
  159. package/dist/core/splash/index.cjs +0 -2
  160. package/dist/core/splash/index.js +1 -6
  161. package/dist/core/splash/splashScreenUtils.cjs +0 -2
  162. package/dist/core/splash/splashScreenUtils.js +1 -30
  163. package/dist/core/startup/AppInstance.cjs +0 -2
  164. package/dist/core/startup/AppInstance.js +1 -226
  165. package/dist/core/startup/environment.cjs +0 -2
  166. package/dist/core/startup/environment.js +1 -154
  167. package/dist/core/startup/index.cjs +0 -2
  168. package/dist/core/startup/index.js +1 -8
  169. package/dist/core/startup/initializeServices.cjs +0 -2
  170. package/dist/core/startup/initializeServices.js +1 -188
  171. package/dist/core/startup/performanceTracker.cjs +0 -2
  172. package/dist/core/startup/performanceTracker.js +1 -167
  173. package/dist/core/startup/renderApp.cjs +0 -2
  174. package/dist/core/startup/renderApp.js +1 -267
  175. package/dist/core/startup/startApp.cjs +0 -2
  176. package/dist/core/startup/startApp.js +1 -315
  177. package/dist/core/types.cjs +0 -2
  178. package/dist/core/types.js +1 -5
  179. package/dist/index.cjs +0 -2
  180. package/dist/index.js +1 -11
  181. package/dist/index.umd.cjs +0 -2
  182. package/dist/index.umd.js +362 -13230
  183. package/dist/kernel/constants.cjs +0 -2
  184. package/dist/kernel/constants.js +1 -43
  185. package/dist/kernel/index.cjs +0 -2
  186. package/dist/kernel/index.js +1 -4
  187. package/dist/kernel/kernel.cjs +1 -3
  188. package/dist/kernel/kernel.js +1 -273
  189. package/dist/kernel/manager/cacheManager.cjs +0 -2
  190. package/dist/kernel/manager/cacheManager.js +1 -38
  191. package/dist/kernel/manager/i18n/I18nManager.cjs +0 -2
  192. package/dist/kernel/manager/i18n/I18nManager.js +1 -83
  193. package/dist/kernel/manager/i18n/i18n.persistence.cjs +4 -3
  194. package/dist/kernel/manager/i18n/i18n.persistence.js +1 -38
  195. package/dist/kernel/manager/i18n/i18n.schema.cjs +0 -2
  196. package/dist/kernel/manager/i18n/i18n.schema.js +1 -64
  197. package/dist/kernel/manager/i18n/index.cjs +0 -2
  198. package/dist/kernel/manager/i18n/index.js +1 -3
  199. package/dist/kernel/manager/i18nManager.cjs +0 -2
  200. package/dist/kernel/manager/i18nManager.js +1 -3
  201. package/dist/kernel/manager/index.cjs +0 -2
  202. package/dist/kernel/manager/index.js +1 -6
  203. package/dist/kernel/manager/logger/LoggerManager.cjs +0 -2
  204. package/dist/kernel/manager/logger/LoggerManager.js +1 -99
  205. package/dist/kernel/manager/logger/index.cjs +0 -2
  206. package/dist/kernel/manager/logger/index.js +1 -3
  207. package/dist/kernel/manager/logger/logger.persistence.cjs +0 -2
  208. package/dist/kernel/manager/logger/logger.persistence.js +1 -43
  209. package/dist/kernel/manager/logger/logger.schema.cjs +0 -2
  210. package/dist/kernel/manager/logger/logger.schema.js +1 -55
  211. package/dist/kernel/manager/loggerManager.cjs +0 -2
  212. package/dist/kernel/manager/loggerManager.js +1 -3
  213. package/dist/kernel/manager/theme/ThemeManager.cjs +0 -2
  214. package/dist/kernel/manager/theme/ThemeManager.js +1 -76
  215. package/dist/kernel/manager/theme/index.cjs +0 -2
  216. package/dist/kernel/manager/theme/index.js +1 -3
  217. package/dist/kernel/manager/theme/theme.dom.cjs +0 -2
  218. package/dist/kernel/manager/theme/theme.dom.js +1 -45
  219. package/dist/kernel/manager/theme/theme.persistence.cjs +0 -2
  220. package/dist/kernel/manager/theme/theme.persistence.js +1 -38
  221. package/dist/kernel/manager/theme/theme.schema.cjs +0 -2
  222. package/dist/kernel/manager/theme/theme.schema.js +1 -97
  223. package/dist/kernel/manager/themeManager.cjs +0 -2
  224. package/dist/kernel/manager/themeManager.js +1 -3
  225. package/dist/kernel/types.cjs +0 -2
  226. package/dist/kernel/types.js +1 -3
  227. package/dist/library/index.cjs +0 -2
  228. package/dist/library/index.js +1 -4
  229. package/dist/library/locale/index.cjs +0 -2
  230. package/dist/library/locale/index.js +1 -12
  231. package/dist/library/locale/langs/en-us/index.cjs +0 -2
  232. package/dist/library/locale/langs/en-us/index.js +1 -24
  233. package/dist/library/locale/langs/zh-cn/index.cjs +0 -2
  234. package/dist/library/locale/langs/zh-cn/index.js +1 -24
  235. package/dist/library/locale/types.cjs +0 -2
  236. package/dist/library/locale/types.js +1 -3
  237. package/dist/library/storage/cache.cjs +0 -2
  238. package/dist/library/storage/cache.js +1 -237
  239. package/dist/library/storage/encryption.cjs +0 -2
  240. package/dist/library/storage/encryption.js +1 -141
  241. package/dist/library/storage/index.cjs +0 -2
  242. package/dist/library/storage/index.js +1 -106
  243. package/dist/state/StateManager.cjs +0 -2
  244. package/dist/state/StateManager.js +1 -160
  245. package/dist/state/adapters/AdapterFactory.cjs +0 -2
  246. package/dist/state/adapters/AdapterFactory.js +1 -85
  247. package/dist/state/adapters/DefaultAdapter.cjs +0 -2
  248. package/dist/state/adapters/DefaultAdapter.js +1 -71
  249. package/dist/state/adapters/ReduxAdapter.cjs +0 -2
  250. package/dist/state/adapters/ReduxAdapter.js +1 -439
  251. package/dist/state/adapters/ZustandAdapter.cjs +0 -2
  252. package/dist/state/adapters/ZustandAdapter.js +1 -70
  253. package/dist/state/adapters/index.cjs +0 -2
  254. package/dist/state/adapters/index.js +1 -9
  255. package/dist/state/adapters/types.cjs +0 -2
  256. package/dist/state/adapters/types.js +1 -5
  257. package/dist/state/core/DerivedStateInstance.cjs +0 -2
  258. package/dist/state/core/DerivedStateInstance.js +1 -173
  259. package/dist/state/core/StateInstance.cjs +0 -2
  260. package/dist/state/core/StateInstance.js +1 -168
  261. package/dist/state/core/StateRegistry.cjs +0 -2
  262. package/dist/state/core/StateRegistry.js +1 -106
  263. package/dist/state/core/StateScope.cjs +0 -2
  264. package/dist/state/core/StateScope.js +1 -133
  265. package/dist/state/core/index.cjs +0 -2
  266. package/dist/state/core/index.js +1 -8
  267. package/dist/state/index.cjs +0 -2
  268. package/dist/state/index.js +1 -12
  269. package/dist/state/types.cjs +0 -2
  270. package/dist/state/types.js +1 -13
  271. package/dist/state.umd.js +22 -1395
  272. package/dist/types.cjs +0 -2
  273. package/dist/types.js +1 -3
  274. package/dist/utils/analytics.cjs +0 -2
  275. package/dist/utils/analytics.js +1 -204
  276. package/dist/utils/configSecurity.cjs +0 -2
  277. package/dist/utils/configSecurity.js +3 -176
  278. package/dist/utils/csrf.cjs +0 -2
  279. package/dist/utils/csrf.js +1 -3
  280. package/dist/utils/errors/ErrorCodes.cjs +0 -2
  281. package/dist/utils/errors/ErrorCodes.js +1 -3
  282. package/dist/utils/errors.cjs +0 -2
  283. package/dist/utils/errors.js +1 -18
  284. package/dist/utils/index.cjs +0 -2
  285. package/dist/utils/index.js +1 -48
  286. package/dist/utils/logger.cjs +0 -2
  287. package/dist/utils/logger.js +1 -3
  288. package/dist/utils/logger.types.cjs +0 -2
  289. package/dist/utils/logger.types.js +1 -3
  290. package/dist/utils/monitoring.cjs +0 -2
  291. package/dist/utils/monitoring.js +1 -3
  292. package/dist/utils/performance.cjs +0 -2
  293. package/dist/utils/performance.js +1 -3
  294. package/dist/utils/resourceLoader.cjs +0 -2
  295. package/dist/utils/resourceLoader.js +1 -3
  296. package/dist/utils/runtimeSecurity.cjs +0 -2
  297. package/dist/utils/runtimeSecurity.js +1 -3
  298. package/dist/utils/security.cjs +0 -2
  299. package/dist/utils/security.js +1 -3
  300. package/dist/utils/traceId.cjs +0 -2
  301. package/dist/utils/traceId.js +1 -3
  302. package/dist/utils/validation.cjs +0 -2
  303. package/dist/utils/validation.js +1 -3
  304. package/package.json +3 -4
  305. package/dist/analytics/index.cjs.map +0 -1
  306. package/dist/analytics/index.js.map +0 -1
  307. package/dist/analytics.umd.js.map +0 -1
  308. package/dist/components/LocaleSwitch.cjs.map +0 -1
  309. package/dist/components/LocaleSwitch.js.map +0 -1
  310. package/dist/components/ThemeSwitch.cjs.map +0 -1
  311. package/dist/components/ThemeSwitch.js.map +0 -1
  312. package/dist/components/index.cjs.map +0 -1
  313. package/dist/components/index.js.map +0 -1
  314. package/dist/components/persistence.cjs.map +0 -1
  315. package/dist/components/persistence.js.map +0 -1
  316. package/dist/core/Test.cjs.map +0 -1
  317. package/dist/core/Test.js.map +0 -1
  318. package/dist/core/app/AppContext.cjs.map +0 -1
  319. package/dist/core/app/AppContext.js.map +0 -1
  320. package/dist/core/app/AppContext.types.cjs.map +0 -1
  321. package/dist/core/app/AppContext.types.js.map +0 -1
  322. package/dist/core/app/BasicLayout.cjs.map +0 -1
  323. package/dist/core/app/BasicLayout.js.map +0 -1
  324. package/dist/core/app/DefaultApp.cjs.map +0 -1
  325. package/dist/core/app/DefaultApp.js.map +0 -1
  326. package/dist/core/app/index.cjs.map +0 -1
  327. package/dist/core/app/index.js.map +0 -1
  328. package/dist/core/config/AppConfig.cjs.map +0 -1
  329. package/dist/core/config/AppConfig.js.map +0 -1
  330. package/dist/core/config/ConfigLoader.cjs.map +0 -1
  331. package/dist/core/config/ConfigLoader.js.map +0 -1
  332. package/dist/core/config/ConfigValidator.cjs.map +0 -1
  333. package/dist/core/config/ConfigValidator.js.map +0 -1
  334. package/dist/core/config/index.cjs.map +0 -1
  335. package/dist/core/config/index.js.map +0 -1
  336. package/dist/core/dev/DevTools.cjs.map +0 -1
  337. package/dist/core/dev/DevTools.js.map +0 -1
  338. package/dist/core/error/ErrorBoundary.cjs.map +0 -1
  339. package/dist/core/error/ErrorBoundary.js.map +0 -1
  340. package/dist/core/error/ErrorHandler.cjs.map +0 -1
  341. package/dist/core/error/ErrorHandler.js.map +0 -1
  342. package/dist/core/error/index.cjs.map +0 -1
  343. package/dist/core/error/index.js.map +0 -1
  344. package/dist/core/event/AppEventBus.cjs.map +0 -1
  345. package/dist/core/event/AppEventBus.js.map +0 -1
  346. package/dist/core/event/frameworkEvents.cjs.map +0 -1
  347. package/dist/core/event/frameworkEvents.js.map +0 -1
  348. package/dist/core/event/hooks.cjs.map +0 -1
  349. package/dist/core/event/hooks.js.map +0 -1
  350. package/dist/core/event/index.cjs.map +0 -1
  351. package/dist/core/event/index.js.map +0 -1
  352. package/dist/core/event/types.cjs.map +0 -1
  353. package/dist/core/event/types.js.map +0 -1
  354. package/dist/core/event/useEventBus.cjs.map +0 -1
  355. package/dist/core/event/useEventBus.js.map +0 -1
  356. package/dist/core/index.cjs.map +0 -1
  357. package/dist/core/index.js.map +0 -1
  358. package/dist/core/initialization/InitializationErrorThrower.cjs.map +0 -1
  359. package/dist/core/initialization/InitializationErrorThrower.js.map +0 -1
  360. package/dist/core/initialization/index.cjs.map +0 -1
  361. package/dist/core/initialization/index.js.map +0 -1
  362. package/dist/core/initialization/initialization.cjs.map +0 -1
  363. package/dist/core/initialization/initialization.js.map +0 -1
  364. package/dist/core/initialization/initializationErrorState.cjs.map +0 -1
  365. package/dist/core/initialization/initializationErrorState.js.map +0 -1
  366. package/dist/core/kernel/defaultAdapters.cjs.map +0 -1
  367. package/dist/core/kernel/defaultAdapters.js.map +0 -1
  368. package/dist/core/kernel/errors.cjs.map +0 -1
  369. package/dist/core/kernel/errors.js.map +0 -1
  370. package/dist/core/kernel/index.cjs.map +0 -1
  371. package/dist/core/kernel/index.js.map +0 -1
  372. package/dist/core/kernel/startKernel.cjs.map +0 -1
  373. package/dist/core/kernel/startKernel.js.map +0 -1
  374. package/dist/core/kernel/types.cjs.map +0 -1
  375. package/dist/core/kernel/types.js.map +0 -1
  376. package/dist/core/middleware.cjs.map +0 -1
  377. package/dist/core/middleware.js.map +0 -1
  378. package/dist/core/plugin/PluginEventBus.cjs.map +0 -1
  379. package/dist/core/plugin/PluginEventBus.js.map +0 -1
  380. package/dist/core/plugin/PluginSandbox.cjs.map +0 -1
  381. package/dist/core/plugin/PluginSandbox.js.map +0 -1
  382. package/dist/core/plugin.cjs.map +0 -1
  383. package/dist/core/plugin.js.map +0 -1
  384. package/dist/core/router/RouterManager.cjs.map +0 -1
  385. package/dist/core/router/RouterManager.js.map +0 -1
  386. package/dist/core/router/adapter/AdapterManager.cjs.map +0 -1
  387. package/dist/core/router/adapter/AdapterManager.js.map +0 -1
  388. package/dist/core/router/adapter/index.cjs.map +0 -1
  389. package/dist/core/router/adapter/index.js.map +0 -1
  390. package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs.map +0 -1
  391. package/dist/core/router/adapter/react-router/ReactRouterAdapter.js.map +0 -1
  392. package/dist/core/router/adapter/react-router/index.cjs.map +0 -1
  393. package/dist/core/router/adapter/react-router/index.js.map +0 -1
  394. package/dist/core/router/adapter/types.cjs.map +0 -1
  395. package/dist/core/router/adapter/types.js.map +0 -1
  396. package/dist/core/router/dev/RouterDevTools.cjs.map +0 -1
  397. package/dist/core/router/dev/RouterDevTools.js.map +0 -1
  398. package/dist/core/router/dev/index.cjs.map +0 -1
  399. package/dist/core/router/dev/index.js.map +0 -1
  400. package/dist/core/router/dynamic/DynamicRouteManager.cjs.map +0 -1
  401. package/dist/core/router/dynamic/DynamicRouteManager.js.map +0 -1
  402. package/dist/core/router/dynamic/index.cjs.map +0 -1
  403. package/dist/core/router/dynamic/index.js.map +0 -1
  404. package/dist/core/router/errors/RouterError.cjs.map +0 -1
  405. package/dist/core/router/errors/RouterError.js.map +0 -1
  406. package/dist/core/router/errors/index.cjs.map +0 -1
  407. package/dist/core/router/errors/index.js.map +0 -1
  408. package/dist/core/router/index.cjs.map +0 -1
  409. package/dist/core/router/index.js.map +0 -1
  410. package/dist/core/router/lifecycle/RouterLifecycleManager.cjs.map +0 -1
  411. package/dist/core/router/lifecycle/RouterLifecycleManager.js.map +0 -1
  412. package/dist/core/router/lifecycle/index.cjs.map +0 -1
  413. package/dist/core/router/lifecycle/index.js.map +0 -1
  414. package/dist/core/router/middleware/RouterMiddlewareManager.cjs.map +0 -1
  415. package/dist/core/router/middleware/RouterMiddlewareManager.js.map +0 -1
  416. package/dist/core/router/middleware/auth.cjs.map +0 -1
  417. package/dist/core/router/middleware/auth.js.map +0 -1
  418. package/dist/core/router/middleware/index.cjs.map +0 -1
  419. package/dist/core/router/middleware/index.js.map +0 -1
  420. package/dist/core/router/middleware/types.cjs.map +0 -1
  421. package/dist/core/router/middleware/types.js.map +0 -1
  422. package/dist/core/router/monitoring/RouterMonitoring.cjs.map +0 -1
  423. package/dist/core/router/monitoring/RouterMonitoring.js.map +0 -1
  424. package/dist/core/router/monitoring/index.cjs.map +0 -1
  425. package/dist/core/router/monitoring/index.js.map +0 -1
  426. package/dist/core/router/navigation/RouterNavigation.cjs.map +0 -1
  427. package/dist/core/router/navigation/RouterNavigation.js.map +0 -1
  428. package/dist/core/router/navigation/index.cjs.map +0 -1
  429. package/dist/core/router/navigation/index.js.map +0 -1
  430. package/dist/core/router/performance/RouteCache.cjs.map +0 -1
  431. package/dist/core/router/performance/RouteCache.js.map +0 -1
  432. package/dist/core/router/performance/RoutePreloader.cjs.map +0 -1
  433. package/dist/core/router/performance/RoutePreloader.js.map +0 -1
  434. package/dist/core/router/performance/index.cjs.map +0 -1
  435. package/dist/core/router/performance/index.js.map +0 -1
  436. package/dist/core/router/plugin/RouterPluginManager.cjs.map +0 -1
  437. package/dist/core/router/plugin/RouterPluginManager.js.map +0 -1
  438. package/dist/core/router/plugin/index.cjs.map +0 -1
  439. package/dist/core/router/plugin/index.js.map +0 -1
  440. package/dist/core/router/plugin/types.cjs.map +0 -1
  441. package/dist/core/router/plugin/types.js.map +0 -1
  442. package/dist/core/router/types.cjs.map +0 -1
  443. package/dist/core/router/types.js.map +0 -1
  444. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs.map +0 -1
  445. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js.map +0 -1
  446. package/dist/core/router/utils/adapters/react-router/transform.cjs.map +0 -1
  447. package/dist/core/router/utils/adapters/react-router/transform.js.map +0 -1
  448. package/dist/core/router/utils/transform.cjs.map +0 -1
  449. package/dist/core/router/utils/transform.js.map +0 -1
  450. package/dist/core/router/validation/RouterConfigValidator.cjs.map +0 -1
  451. package/dist/core/router/validation/RouterConfigValidator.js.map +0 -1
  452. package/dist/core/router/validation/index.cjs.map +0 -1
  453. package/dist/core/router/validation/index.js.map +0 -1
  454. package/dist/core/router/validation/schema.cjs.map +0 -1
  455. package/dist/core/router/validation/schema.js.map +0 -1
  456. package/dist/core/router/version/RouteVersionManager.cjs.map +0 -1
  457. package/dist/core/router/version/RouteVersionManager.js.map +0 -1
  458. package/dist/core/router/version/index.cjs.map +0 -1
  459. package/dist/core/router/version/index.js.map +0 -1
  460. package/dist/core/splash/SplashScreen.cjs.map +0 -1
  461. package/dist/core/splash/SplashScreen.js.map +0 -1
  462. package/dist/core/splash/index.cjs.map +0 -1
  463. package/dist/core/splash/index.js.map +0 -1
  464. package/dist/core/splash/splashScreenUtils.cjs.map +0 -1
  465. package/dist/core/splash/splashScreenUtils.js.map +0 -1
  466. package/dist/core/startup/AppInstance.cjs.map +0 -1
  467. package/dist/core/startup/AppInstance.js.map +0 -1
  468. package/dist/core/startup/environment.cjs.map +0 -1
  469. package/dist/core/startup/environment.js.map +0 -1
  470. package/dist/core/startup/index.cjs.map +0 -1
  471. package/dist/core/startup/index.js.map +0 -1
  472. package/dist/core/startup/initializeServices.cjs.map +0 -1
  473. package/dist/core/startup/initializeServices.js.map +0 -1
  474. package/dist/core/startup/performanceTracker.cjs.map +0 -1
  475. package/dist/core/startup/performanceTracker.js.map +0 -1
  476. package/dist/core/startup/renderApp.cjs.map +0 -1
  477. package/dist/core/startup/renderApp.js.map +0 -1
  478. package/dist/core/startup/startApp.cjs.map +0 -1
  479. package/dist/core/startup/startApp.js.map +0 -1
  480. package/dist/core/types.cjs.map +0 -1
  481. package/dist/core/types.js.map +0 -1
  482. package/dist/index.cjs.map +0 -1
  483. package/dist/index.js.map +0 -1
  484. package/dist/index.umd.cjs.map +0 -1
  485. package/dist/index.umd.js.map +0 -1
  486. package/dist/kernel/constants.cjs.map +0 -1
  487. package/dist/kernel/constants.js.map +0 -1
  488. package/dist/kernel/index.cjs.map +0 -1
  489. package/dist/kernel/index.js.map +0 -1
  490. package/dist/kernel/kernel.cjs.map +0 -1
  491. package/dist/kernel/kernel.js.map +0 -1
  492. package/dist/kernel/manager/cacheManager.cjs.map +0 -1
  493. package/dist/kernel/manager/cacheManager.js.map +0 -1
  494. package/dist/kernel/manager/i18n/I18nManager.cjs.map +0 -1
  495. package/dist/kernel/manager/i18n/I18nManager.js.map +0 -1
  496. package/dist/kernel/manager/i18n/i18n.persistence.cjs.map +0 -1
  497. package/dist/kernel/manager/i18n/i18n.persistence.js.map +0 -1
  498. package/dist/kernel/manager/i18n/i18n.schema.cjs.map +0 -1
  499. package/dist/kernel/manager/i18n/i18n.schema.js.map +0 -1
  500. package/dist/kernel/manager/i18n/index.cjs.map +0 -1
  501. package/dist/kernel/manager/i18n/index.js.map +0 -1
  502. package/dist/kernel/manager/i18nManager.cjs.map +0 -1
  503. package/dist/kernel/manager/i18nManager.js.map +0 -1
  504. package/dist/kernel/manager/index.cjs.map +0 -1
  505. package/dist/kernel/manager/index.js.map +0 -1
  506. package/dist/kernel/manager/logger/LoggerManager.cjs.map +0 -1
  507. package/dist/kernel/manager/logger/LoggerManager.js.map +0 -1
  508. package/dist/kernel/manager/logger/index.cjs.map +0 -1
  509. package/dist/kernel/manager/logger/index.js.map +0 -1
  510. package/dist/kernel/manager/logger/logger.persistence.cjs.map +0 -1
  511. package/dist/kernel/manager/logger/logger.persistence.js.map +0 -1
  512. package/dist/kernel/manager/logger/logger.schema.cjs.map +0 -1
  513. package/dist/kernel/manager/logger/logger.schema.js.map +0 -1
  514. package/dist/kernel/manager/loggerManager.cjs.map +0 -1
  515. package/dist/kernel/manager/loggerManager.js.map +0 -1
  516. package/dist/kernel/manager/persistence.cjs +0 -78
  517. package/dist/kernel/manager/persistence.cjs.map +0 -1
  518. package/dist/kernel/manager/persistence.d.ts +0 -3
  519. package/dist/kernel/manager/persistence.js +0 -60
  520. package/dist/kernel/manager/persistence.js.map +0 -1
  521. package/dist/kernel/manager/theme/ThemeManager.cjs.map +0 -1
  522. package/dist/kernel/manager/theme/ThemeManager.js.map +0 -1
  523. package/dist/kernel/manager/theme/index.cjs.map +0 -1
  524. package/dist/kernel/manager/theme/index.js.map +0 -1
  525. package/dist/kernel/manager/theme/theme.dom.cjs.map +0 -1
  526. package/dist/kernel/manager/theme/theme.dom.js.map +0 -1
  527. package/dist/kernel/manager/theme/theme.persistence.cjs.map +0 -1
  528. package/dist/kernel/manager/theme/theme.persistence.js.map +0 -1
  529. package/dist/kernel/manager/theme/theme.schema.cjs.map +0 -1
  530. package/dist/kernel/manager/theme/theme.schema.js.map +0 -1
  531. package/dist/kernel/manager/themeManager.cjs.map +0 -1
  532. package/dist/kernel/manager/themeManager.js.map +0 -1
  533. package/dist/kernel/types.cjs.map +0 -1
  534. package/dist/kernel/types.js.map +0 -1
  535. package/dist/library/index.cjs.map +0 -1
  536. package/dist/library/index.js.map +0 -1
  537. package/dist/library/locale/index.cjs.map +0 -1
  538. package/dist/library/locale/index.js.map +0 -1
  539. package/dist/library/locale/langs/en-us/index.cjs.map +0 -1
  540. package/dist/library/locale/langs/en-us/index.js.map +0 -1
  541. package/dist/library/locale/langs/zh-cn/index.cjs.map +0 -1
  542. package/dist/library/locale/langs/zh-cn/index.js.map +0 -1
  543. package/dist/library/locale/types.cjs.map +0 -1
  544. package/dist/library/locale/types.js.map +0 -1
  545. package/dist/library/storage/cache.cjs.map +0 -1
  546. package/dist/library/storage/cache.js.map +0 -1
  547. package/dist/library/storage/encryption.cjs.map +0 -1
  548. package/dist/library/storage/encryption.js.map +0 -1
  549. package/dist/library/storage/index.cjs.map +0 -1
  550. package/dist/library/storage/index.js.map +0 -1
  551. package/dist/request/adapter/RequestAdapter.d.ts +0 -85
  552. package/dist/request/adapter/RequestAdapter.js +0 -70
  553. package/dist/request/adapter/RequestAdapter.js.map +0 -1
  554. package/dist/request/adapter/axiosAdapter.d.ts +0 -10
  555. package/dist/request/adapter/axiosAdapter.js +0 -115
  556. package/dist/request/adapter/axiosAdapter.js.map +0 -1
  557. package/dist/request/adapter/fetchAdapter.d.ts +0 -10
  558. package/dist/request/adapter/fetchAdapter.js +0 -126
  559. package/dist/request/adapter/fetchAdapter.js.map +0 -1
  560. package/dist/request/adapter/index.d.ts +0 -9
  561. package/dist/request/adapter/index.js +0 -14
  562. package/dist/request/adapter/index.js.map +0 -1
  563. package/dist/request/adapter/kyAdapter.d.ts +0 -10
  564. package/dist/request/adapter/kyAdapter.js +0 -142
  565. package/dist/request/adapter/kyAdapter.js.map +0 -1
  566. package/dist/request/adapter/undiciAdapter.d.ts +0 -10
  567. package/dist/request/adapter/undiciAdapter.js +0 -164
  568. package/dist/request/adapter/undiciAdapter.js.map +0 -1
  569. package/dist/request/adapter.d.ts +0 -1
  570. package/dist/request/core/RequestClient.d.ts +0 -134
  571. package/dist/request/core/RequestClient.js +0 -509
  572. package/dist/request/core/RequestClient.js.map +0 -1
  573. package/dist/request/core/index.d.ts +0 -5
  574. package/dist/request/core/index.js +0 -5
  575. package/dist/request/core/index.js.map +0 -1
  576. package/dist/request/core.d.ts +0 -1
  577. package/dist/request/index.d.ts +0 -1
  578. package/dist/request/index.js +0 -50
  579. package/dist/request/index.js.map +0 -1
  580. package/dist/request/plugin/RequestPlugin.d.ts +0 -170
  581. package/dist/request/plugin/RequestPlugin.js +0 -203
  582. package/dist/request/plugin/RequestPlugin.js.map +0 -1
  583. package/dist/request/plugin/cache.d.ts +0 -33
  584. package/dist/request/plugin/cache.js +0 -264
  585. package/dist/request/plugin/cache.js.map +0 -1
  586. package/dist/request/plugin/csrfPlugin.d.ts +0 -21
  587. package/dist/request/plugin/csrfPlugin.js +0 -44
  588. package/dist/request/plugin/csrfPlugin.js.map +0 -1
  589. package/dist/request/plugin/index.d.ts +0 -11
  590. package/dist/request/plugin/index.js +0 -12
  591. package/dist/request/plugin/index.js.map +0 -1
  592. package/dist/request/plugin/monitoring.d.ts +0 -112
  593. package/dist/request/plugin/monitoring.js +0 -205
  594. package/dist/request/plugin/monitoring.js.map +0 -1
  595. package/dist/request/plugin/queue.d.ts +0 -91
  596. package/dist/request/plugin/queue.js +0 -156
  597. package/dist/request/plugin/queue.js.map +0 -1
  598. package/dist/request/plugin/retry.d.ts +0 -34
  599. package/dist/request/plugin/retry.js +0 -93
  600. package/dist/request/plugin/retry.js.map +0 -1
  601. package/dist/request/plugin/validation.d.ts +0 -26
  602. package/dist/request/plugin/validation.js +0 -116
  603. package/dist/request/plugin/validation.js.map +0 -1
  604. package/dist/request/plugin.d.ts +0 -1
  605. package/dist/request/runtime/RequestContext.d.ts +0 -50
  606. package/dist/request/runtime/RequestContext.js +0 -86
  607. package/dist/request/runtime/RequestContext.js.map +0 -1
  608. package/dist/request/runtime/index.d.ts +0 -4
  609. package/dist/request/runtime/index.js +0 -5
  610. package/dist/request/runtime/index.js.map +0 -1
  611. package/dist/request/runtime.d.ts +0 -1
  612. package/dist/request/types.d.ts +0 -1
  613. package/dist/request/types.js +0 -97
  614. package/dist/request/types.js.map +0 -1
  615. package/dist/request/utils/RequestQueueManager.d.ts +0 -74
  616. package/dist/request/utils/RequestQueueManager.js +0 -160
  617. package/dist/request/utils/RequestQueueManager.js.map +0 -1
  618. package/dist/request/utils/dependencyCheck.d.ts +0 -63
  619. package/dist/request/utils/dependencyCheck.js +0 -192
  620. package/dist/request/utils/dependencyCheck.js.map +0 -1
  621. package/dist/request/utils/index.d.ts +0 -5
  622. package/dist/request/utils/index.js +0 -6
  623. package/dist/request/utils/index.js.map +0 -1
  624. package/dist/request/utils.d.ts +0 -1
  625. package/dist/state/StateManager.cjs.map +0 -1
  626. package/dist/state/StateManager.js.map +0 -1
  627. package/dist/state/adapters/AdapterFactory.cjs.map +0 -1
  628. package/dist/state/adapters/AdapterFactory.js.map +0 -1
  629. package/dist/state/adapters/DefaultAdapter.cjs.map +0 -1
  630. package/dist/state/adapters/DefaultAdapter.js.map +0 -1
  631. package/dist/state/adapters/ReduxAdapter.cjs.map +0 -1
  632. package/dist/state/adapters/ReduxAdapter.js.map +0 -1
  633. package/dist/state/adapters/ZustandAdapter.cjs.map +0 -1
  634. package/dist/state/adapters/ZustandAdapter.js.map +0 -1
  635. package/dist/state/adapters/index.cjs.map +0 -1
  636. package/dist/state/adapters/index.js.map +0 -1
  637. package/dist/state/adapters/types.cjs.map +0 -1
  638. package/dist/state/adapters/types.js.map +0 -1
  639. package/dist/state/core/DerivedStateInstance.cjs.map +0 -1
  640. package/dist/state/core/DerivedStateInstance.js.map +0 -1
  641. package/dist/state/core/StateInstance.cjs.map +0 -1
  642. package/dist/state/core/StateInstance.js.map +0 -1
  643. package/dist/state/core/StateRegistry.cjs.map +0 -1
  644. package/dist/state/core/StateRegistry.js.map +0 -1
  645. package/dist/state/core/StateScope.cjs.map +0 -1
  646. package/dist/state/core/StateScope.js.map +0 -1
  647. package/dist/state/core/index.cjs.map +0 -1
  648. package/dist/state/core/index.js.map +0 -1
  649. package/dist/state/index.cjs.map +0 -1
  650. package/dist/state/index.js.map +0 -1
  651. package/dist/state/types.cjs.map +0 -1
  652. package/dist/state/types.js.map +0 -1
  653. package/dist/state.umd.js.map +0 -1
  654. package/dist/types.cjs.map +0 -1
  655. package/dist/types.js.map +0 -1
  656. package/dist/utils/analytics.cjs.map +0 -1
  657. package/dist/utils/analytics.js.map +0 -1
  658. package/dist/utils/configSecurity.cjs.map +0 -1
  659. package/dist/utils/configSecurity.js.map +0 -1
  660. package/dist/utils/csrf.cjs.map +0 -1
  661. package/dist/utils/csrf.js.map +0 -1
  662. package/dist/utils/errors/ErrorCodes.cjs.map +0 -1
  663. package/dist/utils/errors/ErrorCodes.js.map +0 -1
  664. package/dist/utils/errors.cjs.map +0 -1
  665. package/dist/utils/errors.js.map +0 -1
  666. package/dist/utils/index.cjs.map +0 -1
  667. package/dist/utils/index.js.map +0 -1
  668. package/dist/utils/logger.cjs.map +0 -1
  669. package/dist/utils/logger.js.map +0 -1
  670. package/dist/utils/logger.types.cjs.map +0 -1
  671. package/dist/utils/logger.types.js.map +0 -1
  672. package/dist/utils/monitoring.cjs.map +0 -1
  673. package/dist/utils/monitoring.js.map +0 -1
  674. package/dist/utils/performance.cjs.map +0 -1
  675. package/dist/utils/performance.js.map +0 -1
  676. package/dist/utils/resourceLoader.cjs.map +0 -1
  677. package/dist/utils/resourceLoader.js.map +0 -1
  678. package/dist/utils/runtimeSecurity.cjs.map +0 -1
  679. package/dist/utils/runtimeSecurity.js.map +0 -1
  680. package/dist/utils/security.cjs.map +0 -1
  681. package/dist/utils/security.js.map +0 -1
  682. package/dist/utils/traceId.cjs.map +0 -1
  683. package/dist/utils/traceId.js.map +0 -1
  684. package/dist/utils/validation.cjs.map +0 -1
  685. package/dist/utils/validation.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/splash/SplashScreen.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef, memo, useCallback } from 'react';\nimport { logger } from '@vlian/logger';\nimport { initialization, initializationErrorState } from '../initialization';\nimport type { StartOptions, SplashScreenCustomProps } from '../types';\nimport type { InitializationContext } from '../initialization';\n\ninterface SplashScreenProps {\n options: StartOptions;\n onComplete: (context: InitializationContext) => void;\n}\n\n/**\n * 启动页组件\n * \n * 在启动页中执行初始化,并使用 Ant Design 5 的 Spin 和 Progress 组件展示启动进度\n */\nconst SplashScreen: React.FC<SplashScreenProps> = memo(({ options, onComplete }) => {\n const [progress, setProgress] = useState(0);\n const [currentStep, setCurrentStep] = useState<string>('准备初始化...');\n const [isInitializing, setIsInitializing] = useState(false);\n const [estimatedTime, setEstimatedTime] = useState<number | null>(null);\n const [isSystemDark, setIsSystemDark] = useState<boolean>(() => {\n if (typeof window === 'undefined') {\n return false;\n }\n return window.matchMedia('(prefers-color-scheme: dark)').matches;\n });\n const hasCompletedRef = useRef(false);\n const onCompleteRef = useRef(onComplete);\n const optionsRef = useRef(options);\n const startTimeRef = useRef<number>(Date.now());\n const minDisplayTimeRef = useRef<number>(options.minSplashScreenTime ?? 500); // 最小显示时间,默认 500ms\n const progressUpdateTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const rafRef = useRef<number | null>(null);\n const lastProgressRef = useRef(0);\n const progressHistoryRef = useRef<Array<{ progress: number; time: number }>>([]);\n\n // 保持引用最新\n useEffect(() => {\n onCompleteRef.current = onComplete;\n optionsRef.current = options;\n minDisplayTimeRef.current = options.minSplashScreenTime ?? 500;\n }, [onComplete, options]);\n\n // 自适应防抖进度更新函数(使用 requestAnimationFrame 优化)\n const debouncedProgressUpdate = useCallback((progressValue: number, step?: string) => {\n // 取消之前的更新\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n\n // 记录进度历史用于时间预估\n const now = Date.now();\n progressHistoryRef.current.push({ progress: progressValue, time: now });\n // 只保留最近10个记录\n if (progressHistoryRef.current.length > 10) {\n progressHistoryRef.current.shift();\n }\n\n // 计算预估时间\n if (progressHistoryRef.current.length >= 2 && progressValue > 0) {\n const history = progressHistoryRef.current;\n const first = history[0]!;\n const last = history[history.length - 1]!;\n const progressDelta = last.progress - first.progress;\n const timeDelta = last.time - first.time;\n\n if (progressDelta > 0 && timeDelta > 0) {\n const progressPerMs = progressDelta / timeDelta;\n const remainingProgress = 100 - progressValue;\n const estimatedMs = remainingProgress / progressPerMs;\n setEstimatedTime(Math.max(0, Math.round(estimatedMs)));\n }\n }\n\n // 使用 requestAnimationFrame 优化更新\n rafRef.current = requestAnimationFrame(() => {\n setProgress(progressValue);\n if (step) {\n setCurrentStep(step);\n }\n lastProgressRef.current = progressValue;\n rafRef.current = null;\n });\n }, []);\n\n useEffect(() => {\n if (hasCompletedRef.current) return;\n hasCompletedRef.current = true;\n startTimeRef.current = Date.now();\n\n const performInitialization = async () => {\n try {\n setIsInitializing(true);\n setProgress(0);\n setCurrentStep('开始初始化...');\n\n logger.info('启动页开始执行初始化');\n\n // 执行初始化,传入防抖的进度回调\n const context = await initialization(optionsRef.current, (progressValue, step) => {\n debouncedProgressUpdate(progressValue, step);\n });\n\n logger.info('启动页初始化完成', context);\n\n // 动态调整最小显示时间(如果初始化很快,减少最小显示时间)\n const elapsedTime = Date.now() - startTimeRef.current;\n const dynamicMinTime = elapsedTime < 200 ? Math.min(minDisplayTimeRef.current, 300) : minDisplayTimeRef.current;\n const remainingTime = Math.max(0, dynamicMinTime - elapsedTime);\n\n if (remainingTime > 0) {\n await new Promise((resolve) => setTimeout(resolve, remainingTime));\n }\n\n // 清理防抖定时器\n if (progressUpdateTimerRef.current) {\n clearTimeout(progressUpdateTimerRef.current);\n progressUpdateTimerRef.current = null;\n }\n\n // 确保进度条显示 100%\n setProgress(100);\n setCurrentStep('初始化完成');\n\n // 初始化完成,调用回调\n onCompleteRef.current(context);\n } catch (error) {\n logger.error('启动页初始化失败:', error);\n // 设置错误状态,让 ErrorBoundary 能够捕获\n initializationErrorState.setError(error);\n setCurrentStep('初始化失败,请刷新页面重试');\n // 即使失败也调用 onComplete,让应用能够处理错误\n onCompleteRef.current({\n config: {},\n progress: 0,\n isReady: false,\n duration: 0,\n });\n } finally {\n setIsInitializing(false);\n }\n };\n\n performInitialization();\n\n // 清理函数\n return () => {\n if (progressUpdateTimerRef.current) {\n clearTimeout(progressUpdateTimerRef.current);\n }\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n };\n }, [debouncedProgressUpdate]);\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const onSystemThemeChange = (event: MediaQueryListEvent) => {\n setIsSystemDark(event.matches);\n };\n\n setIsSystemDark(mediaQuery.matches);\n\n if (typeof mediaQuery.addEventListener === 'function') {\n mediaQuery.addEventListener('change', onSystemThemeChange);\n return () => mediaQuery.removeEventListener('change', onSystemThemeChange);\n }\n\n mediaQuery.addListener(onSystemThemeChange);\n return () => mediaQuery.removeListener(onSystemThemeChange);\n }, []);\n\n const resolvedMode = React.useMemo<'light' | 'dark'>(() => {\n const mode = optionsRef.current.theme?.mode || 'light';\n if (mode === 'system') {\n return isSystemDark ? 'dark' : 'light';\n }\n return mode === 'dark' ? 'dark' : 'light';\n }, [isSystemDark]);\n\n const palette = React.useMemo(() => {\n if (resolvedMode === 'dark') {\n return {\n background: '#0b1220',\n text: '#e2e8f0',\n subText: '#94a3b8',\n track: '#1f2937',\n spinnerTrack: '#334155',\n };\n }\n\n return {\n background: '#f5f7fb',\n text: '#51606f',\n subText: '#94a3b8',\n track: '#e9eff5',\n spinnerTrack: '#d9e2ec',\n };\n }, [resolvedMode]);\n\n // 如果提供了自定义启动屏组件,使用自定义组件\n const CustomSplashScreen = optionsRef.current.splashScreen;\n if (CustomSplashScreen) {\n const customProps: SplashScreenCustomProps = {\n progress,\n currentStep,\n isInitializing,\n };\n return <CustomSplashScreen {...customProps} />;\n }\n\n // 默认启动屏 UI\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"应用正在加载\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100vh',\n width: '100%',\n gap: 24,\n background: palette.background,\n color: palette.text,\n }}\n >\n <div\n aria-label=\"加载中\"\n style={{\n width: 42,\n height: 42,\n border: `4px solid ${palette.spinnerTrack}`,\n borderTopColor: 'var(--app-primary-color, #2f80ed)',\n borderRadius: '50%',\n animation: 'secra-spin 1s linear infinite',\n }}\n />\n <div style={{ width: '300px' }}>\n <div\n aria-label={`加载进度 ${progress}%`}\n style={{\n height: 12,\n background: palette.track,\n borderRadius: 999,\n overflow: 'hidden',\n }}\n >\n <div\n style={{\n width: `${Math.max(0, Math.min(100, progress))}%`,\n height: '100%',\n background: 'var(--app-primary-color, #2f80ed)',\n transition: 'width 0.2s ease',\n }}\n />\n </div>\n <div style={{ marginTop: 8, textAlign: 'right', fontSize: 12, color: palette.text }}>\n {progress}%\n </div>\n </div>\n <div\n role=\"status\"\n aria-live=\"polite\"\n style={{\n fontSize: 14,\n color: palette.text,\n textAlign: 'center',\n }}\n >\n {currentStep}\n {estimatedTime !== null && estimatedTime > 0 && (\n <div style={{ fontSize: 12, color: palette.subText, marginTop: 8 }}>\n 预计还需 {Math.ceil(estimatedTime / 1000)} 秒\n </div>\n )}\n </div>\n <style>\n {`@keyframes secra-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }`}\n </style>\n </div>\n );\n});\n\nSplashScreen.displayName = 'SplashScreen';\n\nexport { SplashScreen };\n"],"names":["React","useEffect","useState","useRef","memo","useCallback","logger","initialization","initializationErrorState","SplashScreen","options","onComplete","progress","setProgress","currentStep","setCurrentStep","isInitializing","setIsInitializing","estimatedTime","setEstimatedTime","isSystemDark","setIsSystemDark","window","matchMedia","matches","hasCompletedRef","onCompleteRef","optionsRef","startTimeRef","Date","now","minDisplayTimeRef","minSplashScreenTime","progressUpdateTimerRef","rafRef","lastProgressRef","progressHistoryRef","current","debouncedProgressUpdate","progressValue","step","cancelAnimationFrame","push","time","length","shift","history","first","last","progressDelta","timeDelta","progressPerMs","remainingProgress","estimatedMs","Math","max","round","requestAnimationFrame","performInitialization","info","context","elapsedTime","dynamicMinTime","min","remainingTime","Promise","resolve","setTimeout","clearTimeout","error","setError","config","isReady","duration","mediaQuery","onSystemThemeChange","event","addEventListener","removeEventListener","addListener","removeListener","resolvedMode","useMemo","mode","theme","palette","background","text","subText","track","spinnerTrack","CustomSplashScreen","splashScreen","customProps","div","role","aria-live","aria-label","style","display","flexDirection","alignItems","justifyContent","height","width","gap","color","border","borderTopColor","borderRadius","animation","overflow","transition","marginTop","textAlign","fontSize","ceil","displayName"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/splash/index.ts"],"sourcesContent":["/**\n * 启动页模块统一导出\n */\n\nexport { SplashScreen } from './SplashScreen';\nexport { shouldShowSplashScreen } from './splashScreenUtils';\n"],"names":["SplashScreen","shouldShowSplashScreen"],"mappings":"AAAA;;CAEC;;;;;;;;;;;QAEQA;eAAAA,0BAAY;;QACZC;eAAAA,yCAAsB;;;8BADF;mCACU"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/splash/index.ts"],"sourcesContent":["/**\n * 启动页模块统一导出\n */\n\nexport { SplashScreen } from './SplashScreen';\nexport { shouldShowSplashScreen } from './splashScreenUtils';\n"],"names":["SplashScreen","shouldShowSplashScreen"],"mappings":"AAAA;;CAEC,GAED,SAASA,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,sBAAsB,QAAQ,sBAAsB"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/splash/splashScreenUtils.ts"],"sourcesContent":["/**\n * 判断是否应该显示启动页\n * \n * @param showSplashScreen - 启动页显示策略\n * @returns boolean\n */\nexport function shouldShowSplashScreen(\n showSplashScreen?: 'auto' | 'always' | 'never' | 'first-time-only'\n): boolean {\n // 明确指定不显示\n if (showSplashScreen === 'never') {\n return false;\n }\n\n // 明确指定总是显示\n if (showSplashScreen === 'always') {\n return true;\n }\n\n // 仅首次加载显示\n if (showSplashScreen === 'first-time-only') {\n const hasVisited = sessionStorage.getItem('__framework_visited__');\n if (hasVisited) {\n return false;\n }\n sessionStorage.setItem('__framework_visited__', 'true');\n return true;\n }\n\n // 自动判断(默认策略)\n // 这里可以根据实际情况添加更多判断逻辑\n // 例如:根据启动时间、网络状况等\n return true;\n}\n"],"names":["shouldShowSplashScreen","showSplashScreen","hasVisited","sessionStorage","getItem","setItem"],"mappings":"AAAA;;;;;CAKC;;;;+BACeA;;;eAAAA;;;AAAT,SAASA,uBACdC,gBAAkE;IAElE,UAAU;IACV,IAAIA,qBAAqB,SAAS;QAChC,OAAO;IACT;IAEA,WAAW;IACX,IAAIA,qBAAqB,UAAU;QACjC,OAAO;IACT;IAEA,UAAU;IACV,IAAIA,qBAAqB,mBAAmB;QAC1C,MAAMC,aAAaC,eAAeC,OAAO,CAAC;QAC1C,IAAIF,YAAY;YACd,OAAO;QACT;QACAC,eAAeE,OAAO,CAAC,yBAAyB;QAChD,OAAO;IACT;IAEA,aAAa;IACb,qBAAqB;IACrB,kBAAkB;IAClB,OAAO;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/splash/splashScreenUtils.ts"],"sourcesContent":["/**\n * 判断是否应该显示启动页\n * \n * @param showSplashScreen - 启动页显示策略\n * @returns boolean\n */\nexport function shouldShowSplashScreen(\n showSplashScreen?: 'auto' | 'always' | 'never' | 'first-time-only'\n): boolean {\n // 明确指定不显示\n if (showSplashScreen === 'never') {\n return false;\n }\n\n // 明确指定总是显示\n if (showSplashScreen === 'always') {\n return true;\n }\n\n // 仅首次加载显示\n if (showSplashScreen === 'first-time-only') {\n const hasVisited = sessionStorage.getItem('__framework_visited__');\n if (hasVisited) {\n return false;\n }\n sessionStorage.setItem('__framework_visited__', 'true');\n return true;\n }\n\n // 自动判断(默认策略)\n // 这里可以根据实际情况添加更多判断逻辑\n // 例如:根据启动时间、网络状况等\n return true;\n}\n"],"names":["shouldShowSplashScreen","showSplashScreen","hasVisited","sessionStorage","getItem","setItem"],"mappings":"AAAA;;;;;CAKC,GACD,OAAO,SAASA,uBACdC,gBAAkE;IAElE,UAAU;IACV,IAAIA,qBAAqB,SAAS;QAChC,OAAO;IACT;IAEA,WAAW;IACX,IAAIA,qBAAqB,UAAU;QACjC,OAAO;IACT;IAEA,UAAU;IACV,IAAIA,qBAAqB,mBAAmB;QAC1C,MAAMC,aAAaC,eAAeC,OAAO,CAAC;QAC1C,IAAIF,YAAY;YACd,OAAO;QACT;QACAC,eAAeE,OAAO,CAAC,yBAAyB;QAChD,OAAO;IACT;IAEA,aAAa;IACb,qBAAqB;IACrB,kBAAkB;IAClB,OAAO;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/startup/AppInstance.ts"],"sourcesContent":["/**\n * 应用实例管理模块\n * 支持多实例隔离\n */\n\nimport type { Container } from 'react-dom/client';\nimport type { StartOptions } from '../types';\nimport { AppRenderer } from './renderApp';\nimport type { ServicesInitResult } from './initializeServices';\nimport { PerformanceTracker } from './performanceTracker';\n\n/**\n * 应用实例\n */\nexport class AppInstance {\n /**\n * 实例ID\n */\n readonly id: string;\n\n /**\n * 应用渲染器\n */\n private renderer: AppRenderer;\n\n /**\n * 服务实例\n */\n private services: ServicesInitResult | null = null;\n\n /**\n * 性能追踪器\n */\n private performanceTracker: PerformanceTracker | null = null;\n\n /**\n * 启动配置\n */\n private options: StartOptions;\n\n /**\n * 是否已初始化\n */\n private initialized = false;\n\n /**\n * 是否已销毁\n */\n private destroyed = false;\n\n constructor(id: string, options: StartOptions) {\n this.id = id;\n this.options = options;\n this.renderer = new AppRenderer();\n }\n\n /**\n * 初始化应用实例\n * \n * @param container - React应用的挂载容器\n * @param services - 服务实例\n */\n initialize(container: Container, services: ServicesInitResult): void {\n if (this.initialized) {\n throw new Error(`应用实例 ${this.id} 已经初始化`);\n }\n\n if (this.destroyed) {\n throw new Error(`应用实例 ${this.id} 已销毁,无法重新初始化`);\n }\n\n this.services = services;\n this.renderer.initialize(container, this.options.rootOptions);\n this.performanceTracker = new PerformanceTracker(services.monitoring);\n this.performanceTracker.collectWebVitals();\n this.initialized = true;\n }\n\n /**\n * 获取渲染器\n */\n getRenderer(): AppRenderer {\n if (!this.initialized) {\n throw new Error(`应用实例 ${this.id} 未初始化`);\n }\n return this.renderer;\n }\n\n /**\n * 获取服务实例\n */\n getServices(): ServicesInitResult {\n if (!this.services) {\n throw new Error(`应用实例 ${this.id} 未初始化`);\n }\n return this.services;\n }\n\n /**\n * 获取性能追踪器\n */\n getPerformanceTracker(): PerformanceTracker | null {\n return this.performanceTracker;\n }\n\n /**\n * 获取事件总线\n */\n getEventBus(): import('../event/AppEventBus').AppEventBus | null {\n if (!this.services) {\n return null;\n }\n return this.services.eventBus;\n }\n\n /**\n * 获取启动配置\n */\n getOptions(): StartOptions {\n return this.options;\n }\n\n /**\n * 是否已初始化\n */\n isInitialized(): boolean {\n return this.initialized;\n }\n\n /**\n * 是否已销毁\n */\n isDestroyed(): boolean {\n return this.destroyed;\n }\n\n /**\n * 销毁应用实例\n */\n destroy(): void {\n if (this.destroyed) {\n return;\n }\n\n this.renderer.destroy();\n this.services = null;\n this.performanceTracker = null;\n this.destroyed = true;\n }\n}\n\n/**\n * 应用实例管理器\n */\nexport class AppInstanceManager {\n private static instance: AppInstanceManager | null = null;\n private instances: Map<string, AppInstance> = new Map();\n private defaultInstanceId: string | null = null;\n\n private constructor() {\n // 私有构造函数\n }\n\n /**\n * 获取单例实例\n */\n static getInstance(): AppInstanceManager {\n if (!AppInstanceManager.instance) {\n AppInstanceManager.instance = new AppInstanceManager();\n }\n return AppInstanceManager.instance;\n }\n\n /**\n * 创建应用实例\n * \n * @param id - 实例ID,如果不提供则自动生成\n * @param options - 启动配置选项\n * @returns 应用实例\n */\n createInstance(id?: string, options: StartOptions = {}): AppInstance {\n const instanceId = id || `app-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n \n if (this.instances.has(instanceId)) {\n throw new Error(`应用实例 ${instanceId} 已存在`);\n }\n\n const instance = new AppInstance(instanceId, options);\n this.instances.set(instanceId, instance);\n\n // 如果没有默认实例,设置为默认实例\n if (!this.defaultInstanceId) {\n this.defaultInstanceId = instanceId;\n }\n\n return instance;\n }\n\n /**\n * 获取应用实例\n * \n * @param id - 实例ID,如果不提供则返回默认实例\n * @returns 应用实例或undefined\n */\n getInstance(id?: string): AppInstance | undefined {\n const instanceId = id || this.defaultInstanceId;\n if (!instanceId) {\n return undefined;\n }\n return this.instances.get(instanceId);\n }\n\n /**\n * 销毁应用实例\n * \n * @param id - 实例ID,如果不提供则销毁默认实例\n */\n destroyInstance(id?: string): void {\n const instanceId = id || this.defaultInstanceId;\n if (!instanceId) {\n return;\n }\n\n const instance = this.instances.get(instanceId);\n if (instance) {\n instance.destroy();\n this.instances.delete(instanceId);\n\n // 如果销毁的是默认实例,重新设置默认实例\n if (this.defaultInstanceId === instanceId) {\n const remainingInstances = Array.from(this.instances.keys());\n this.defaultInstanceId = remainingInstances.length > 0 ? remainingInstances[0] : null;\n }\n }\n }\n\n /**\n * 获取所有实例\n */\n getAllInstances(): AppInstance[] {\n return Array.from(this.instances.values());\n }\n\n /**\n * 设置默认实例\n * \n * @param id - 实例ID\n */\n setDefaultInstance(id: string): void {\n if (!this.instances.has(id)) {\n throw new Error(`应用实例 ${id} 不存在`);\n }\n this.defaultInstanceId = id;\n }\n\n /**\n * 获取默认实例ID\n */\n getDefaultInstanceId(): string | null {\n return this.defaultInstanceId;\n }\n\n /**\n * 清空所有实例\n */\n clear(): void {\n for (const instance of this.instances.values()) {\n instance.destroy();\n }\n this.instances.clear();\n this.defaultInstanceId = null;\n }\n}\n\n/**\n * 获取应用实例管理器\n */\nexport function getAppInstanceManager(): AppInstanceManager {\n return AppInstanceManager.getInstance();\n}\n"],"names":["AppInstance","AppInstanceManager","getAppInstanceManager","initialize","container","services","initialized","Error","id","destroyed","renderer","options","rootOptions","performanceTracker","PerformanceTracker","monitoring","collectWebVitals","getRenderer","getServices","getPerformanceTracker","getEventBus","eventBus","getOptions","isInitialized","isDestroyed","destroy","AppRenderer","getInstance","instance","createInstance","instanceId","Date","now","Math","random","toString","substr","instances","has","set","defaultInstanceId","undefined","get","destroyInstance","delete","remainingInstances","Array","from","keys","length","getAllInstances","values","setDefaultInstance","getDefaultInstanceId","clear","Map"],"mappings":"AAAA;;;CAGC;;;;;;;;;;;QAWYA;eAAAA;;QA4IAC;eAAAA;;QA2HGC;eAAAA;;;2BA9QY;oCAEO;;;;;;;;;;;;;;AAK5B,IAAA,AAAMF,cAAN,MAAMA;IA0CX;;;;;GAKC,GACDG,WAAWC,SAAoB,EAAEC,QAA4B,EAAQ;QACnE,IAAI,IAAI,CAACC,WAAW,EAAE;YACpB,MAAM,IAAIC,MAAM,CAAC,KAAK,EAAE,IAAI,CAACC,EAAE,CAAC,MAAM,CAAC;QACzC;QAEA,IAAI,IAAI,CAACC,SAAS,EAAE;YAClB,MAAM,IAAIF,MAAM,CAAC,KAAK,EAAE,IAAI,CAACC,EAAE,CAAC,YAAY,CAAC;QAC/C;QAEA,IAAI,CAACH,QAAQ,GAAGA;QAChB,IAAI,CAACK,QAAQ,CAACP,UAAU,CAACC,WAAW,IAAI,CAACO,OAAO,CAACC,WAAW;QAC5D,IAAI,CAACC,kBAAkB,GAAG,IAAIC,sCAAkB,CAACT,SAASU,UAAU;QACpE,IAAI,CAACF,kBAAkB,CAACG,gBAAgB;QACxC,IAAI,CAACV,WAAW,GAAG;IACrB;IAEA;;GAEC,GACDW,cAA2B;QACzB,IAAI,CAAC,IAAI,CAACX,WAAW,EAAE;YACrB,MAAM,IAAIC,MAAM,CAAC,KAAK,EAAE,IAAI,CAACC,EAAE,CAAC,KAAK,CAAC;QACxC;QACA,OAAO,IAAI,CAACE,QAAQ;IACtB;IAEA;;GAEC,GACDQ,cAAkC;QAChC,IAAI,CAAC,IAAI,CAACb,QAAQ,EAAE;YAClB,MAAM,IAAIE,MAAM,CAAC,KAAK,EAAE,IAAI,CAACC,EAAE,CAAC,KAAK,CAAC;QACxC;QACA,OAAO,IAAI,CAACH,QAAQ;IACtB;IAEA;;GAEC,GACDc,wBAAmD;QACjD,OAAO,IAAI,CAACN,kBAAkB;IAChC;IAEA;;GAEC,GACDO,cAAiE;QAC/D,IAAI,CAAC,IAAI,CAACf,QAAQ,EAAE;YAClB,OAAO;QACT;QACA,OAAO,IAAI,CAACA,QAAQ,CAACgB,QAAQ;IAC/B;IAEA;;GAEC,GACDC,aAA2B;QACzB,OAAO,IAAI,CAACX,OAAO;IACrB;IAEA;;GAEC,GACDY,gBAAyB;QACvB,OAAO,IAAI,CAACjB,WAAW;IACzB;IAEA;;GAEC,GACDkB,cAAuB;QACrB,OAAO,IAAI,CAACf,SAAS;IACvB;IAEA;;GAEC,GACDgB,UAAgB;QACd,IAAI,IAAI,CAAChB,SAAS,EAAE;YAClB;QACF;QAEA,IAAI,CAACC,QAAQ,CAACe,OAAO;QACrB,IAAI,CAACpB,QAAQ,GAAG;QAChB,IAAI,CAACQ,kBAAkB,GAAG;QAC1B,IAAI,CAACJ,SAAS,GAAG;IACnB;IAlGA,YAAYD,EAAU,EAAEG,OAAqB,CAAE;QAnC/C;;GAEC,GACD,uBAASH,MAAT,KAAA;QAEA;;GAEC,GACD,uBAAQE,YAAR,KAAA;QAEA;;GAEC,GACD,uBAAQL,YAAsC;QAE9C;;GAEC,GACD,uBAAQQ,sBAAgD;QAExD;;GAEC,GACD,uBAAQF,WAAR,KAAA;QAEA;;GAEC,GACD,uBAAQL,eAAc;QAEtB;;GAEC,GACD,uBAAQG,aAAY;QAGlB,IAAI,CAACD,EAAE,GAAGA;QACV,IAAI,CAACG,OAAO,GAAGA;QACf,IAAI,CAACD,QAAQ,GAAG,IAAIgB,sBAAW;IACjC;AA+FF;AAKO,IAAA,AAAMzB,qBAAN,MAAMA;IASX;;GAEC,GACD,OAAO0B,cAAkC;QACvC,IAAI,CAAC1B,mBAAmB2B,QAAQ,EAAE;YAChC3B,mBAAmB2B,QAAQ,GAAG,IAAI3B;QACpC;QACA,OAAOA,mBAAmB2B,QAAQ;IACpC;IAEA;;;;;;GAMC,GACDC,eAAerB,EAAW,EAAEG,UAAwB,CAAC,CAAC,EAAe;QACnE,MAAMmB,aAAatB,MAAM,CAAC,IAAI,EAAEuB,KAAKC,GAAG,GAAG,CAAC,EAAEC,KAAKC,MAAM,GAAGC,QAAQ,CAAC,IAAIC,MAAM,CAAC,GAAG,IAAI;QAEvF,IAAI,IAAI,CAACC,SAAS,CAACC,GAAG,CAACR,aAAa;YAClC,MAAM,IAAIvB,MAAM,CAAC,KAAK,EAAEuB,WAAW,IAAI,CAAC;QAC1C;QAEA,MAAMF,WAAW,IAAI5B,YAAY8B,YAAYnB;QAC7C,IAAI,CAAC0B,SAAS,CAACE,GAAG,CAACT,YAAYF;QAE/B,mBAAmB;QACnB,IAAI,CAAC,IAAI,CAACY,iBAAiB,EAAE;YAC3B,IAAI,CAACA,iBAAiB,GAAGV;QAC3B;QAEA,OAAOF;IACT;IAEA;;;;;GAKC,GACDD,YAAYnB,EAAW,EAA2B;QAChD,MAAMsB,aAAatB,MAAM,IAAI,CAACgC,iBAAiB;QAC/C,IAAI,CAACV,YAAY;YACf,OAAOW;QACT;QACA,OAAO,IAAI,CAACJ,SAAS,CAACK,GAAG,CAACZ;IAC5B;IAEA;;;;GAIC,GACDa,gBAAgBnC,EAAW,EAAQ;QACjC,MAAMsB,aAAatB,MAAM,IAAI,CAACgC,iBAAiB;QAC/C,IAAI,CAACV,YAAY;YACf;QACF;QAEA,MAAMF,WAAW,IAAI,CAACS,SAAS,CAACK,GAAG,CAACZ;QACpC,IAAIF,UAAU;YACZA,SAASH,OAAO;YAChB,IAAI,CAACY,SAAS,CAACO,MAAM,CAACd;YAEtB,sBAAsB;YACtB,IAAI,IAAI,CAACU,iBAAiB,KAAKV,YAAY;gBACzC,MAAMe,qBAAqBC,MAAMC,IAAI,CAAC,IAAI,CAACV,SAAS,CAACW,IAAI;gBACzD,IAAI,CAACR,iBAAiB,GAAGK,mBAAmBI,MAAM,GAAG,IAAIJ,kBAAkB,CAAC,EAAE,GAAG;YACnF;QACF;IACF;IAEA;;GAEC,GACDK,kBAAiC;QAC/B,OAAOJ,MAAMC,IAAI,CAAC,IAAI,CAACV,SAAS,CAACc,MAAM;IACzC;IAEA;;;;GAIC,GACDC,mBAAmB5C,EAAU,EAAQ;QACnC,IAAI,CAAC,IAAI,CAAC6B,SAAS,CAACC,GAAG,CAAC9B,KAAK;YAC3B,MAAM,IAAID,MAAM,CAAC,KAAK,EAAEC,GAAG,IAAI,CAAC;QAClC;QACA,IAAI,CAACgC,iBAAiB,GAAGhC;IAC3B;IAEA;;GAEC,GACD6C,uBAAsC;QACpC,OAAO,IAAI,CAACb,iBAAiB;IAC/B;IAEA;;GAEC,GACDc,QAAc;QACZ,KAAK,MAAM1B,YAAY,IAAI,CAACS,SAAS,CAACc,MAAM,GAAI;YAC9CvB,SAASH,OAAO;QAClB;QACA,IAAI,CAACY,SAAS,CAACiB,KAAK;QACpB,IAAI,CAACd,iBAAiB,GAAG;IAC3B;IAhHA,aAAsB;QAHtB,uBAAQH,aAAsC,IAAIkB;QAClD,uBAAQf,qBAAmC;IAGzC,SAAS;IACX;AA+GF;AArHE,iBADWvC,oBACI2B,YAAsC;AA0HhD,SAAS1B;IACd,OAAOD,mBAAmB0B,WAAW;AACvC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/startup/AppInstance.ts"],"sourcesContent":["/**\n * 应用实例管理模块\n * 支持多实例隔离\n */\n\nimport type { Container } from 'react-dom/client';\nimport type { StartOptions } from '../types';\nimport { AppRenderer } from './renderApp';\nimport type { ServicesInitResult } from './initializeServices';\nimport { PerformanceTracker } from './performanceTracker';\n\n/**\n * 应用实例\n */\nexport class AppInstance {\n /**\n * 实例ID\n */\n readonly id: string;\n\n /**\n * 应用渲染器\n */\n private renderer: AppRenderer;\n\n /**\n * 服务实例\n */\n private services: ServicesInitResult | null = null;\n\n /**\n * 性能追踪器\n */\n private performanceTracker: PerformanceTracker | null = null;\n\n /**\n * 启动配置\n */\n private options: StartOptions;\n\n /**\n * 是否已初始化\n */\n private initialized = false;\n\n /**\n * 是否已销毁\n */\n private destroyed = false;\n\n constructor(id: string, options: StartOptions) {\n this.id = id;\n this.options = options;\n this.renderer = new AppRenderer();\n }\n\n /**\n * 初始化应用实例\n * \n * @param container - React应用的挂载容器\n * @param services - 服务实例\n */\n initialize(container: Container, services: ServicesInitResult): void {\n if (this.initialized) {\n throw new Error(`应用实例 ${this.id} 已经初始化`);\n }\n\n if (this.destroyed) {\n throw new Error(`应用实例 ${this.id} 已销毁,无法重新初始化`);\n }\n\n this.services = services;\n this.renderer.initialize(container, this.options.rootOptions);\n this.performanceTracker = new PerformanceTracker(services.monitoring);\n this.performanceTracker.collectWebVitals();\n this.initialized = true;\n }\n\n /**\n * 获取渲染器\n */\n getRenderer(): AppRenderer {\n if (!this.initialized) {\n throw new Error(`应用实例 ${this.id} 未初始化`);\n }\n return this.renderer;\n }\n\n /**\n * 获取服务实例\n */\n getServices(): ServicesInitResult {\n if (!this.services) {\n throw new Error(`应用实例 ${this.id} 未初始化`);\n }\n return this.services;\n }\n\n /**\n * 获取性能追踪器\n */\n getPerformanceTracker(): PerformanceTracker | null {\n return this.performanceTracker;\n }\n\n /**\n * 获取事件总线\n */\n getEventBus(): import('../event/AppEventBus').AppEventBus | null {\n if (!this.services) {\n return null;\n }\n return this.services.eventBus;\n }\n\n /**\n * 获取启动配置\n */\n getOptions(): StartOptions {\n return this.options;\n }\n\n /**\n * 是否已初始化\n */\n isInitialized(): boolean {\n return this.initialized;\n }\n\n /**\n * 是否已销毁\n */\n isDestroyed(): boolean {\n return this.destroyed;\n }\n\n /**\n * 销毁应用实例\n */\n destroy(): void {\n if (this.destroyed) {\n return;\n }\n\n this.renderer.destroy();\n this.services = null;\n this.performanceTracker = null;\n this.destroyed = true;\n }\n}\n\n/**\n * 应用实例管理器\n */\nexport class AppInstanceManager {\n private static instance: AppInstanceManager | null = null;\n private instances: Map<string, AppInstance> = new Map();\n private defaultInstanceId: string | null = null;\n\n private constructor() {\n // 私有构造函数\n }\n\n /**\n * 获取单例实例\n */\n static getInstance(): AppInstanceManager {\n if (!AppInstanceManager.instance) {\n AppInstanceManager.instance = new AppInstanceManager();\n }\n return AppInstanceManager.instance;\n }\n\n /**\n * 创建应用实例\n * \n * @param id - 实例ID,如果不提供则自动生成\n * @param options - 启动配置选项\n * @returns 应用实例\n */\n createInstance(id?: string, options: StartOptions = {}): AppInstance {\n const instanceId = id || `app-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n \n if (this.instances.has(instanceId)) {\n throw new Error(`应用实例 ${instanceId} 已存在`);\n }\n\n const instance = new AppInstance(instanceId, options);\n this.instances.set(instanceId, instance);\n\n // 如果没有默认实例,设置为默认实例\n if (!this.defaultInstanceId) {\n this.defaultInstanceId = instanceId;\n }\n\n return instance;\n }\n\n /**\n * 获取应用实例\n * \n * @param id - 实例ID,如果不提供则返回默认实例\n * @returns 应用实例或undefined\n */\n getInstance(id?: string): AppInstance | undefined {\n const instanceId = id || this.defaultInstanceId;\n if (!instanceId) {\n return undefined;\n }\n return this.instances.get(instanceId);\n }\n\n /**\n * 销毁应用实例\n * \n * @param id - 实例ID,如果不提供则销毁默认实例\n */\n destroyInstance(id?: string): void {\n const instanceId = id || this.defaultInstanceId;\n if (!instanceId) {\n return;\n }\n\n const instance = this.instances.get(instanceId);\n if (instance) {\n instance.destroy();\n this.instances.delete(instanceId);\n\n // 如果销毁的是默认实例,重新设置默认实例\n if (this.defaultInstanceId === instanceId) {\n const remainingInstances = Array.from(this.instances.keys());\n this.defaultInstanceId = remainingInstances.length > 0 ? remainingInstances[0] : null;\n }\n }\n }\n\n /**\n * 获取所有实例\n */\n getAllInstances(): AppInstance[] {\n return Array.from(this.instances.values());\n }\n\n /**\n * 设置默认实例\n * \n * @param id - 实例ID\n */\n setDefaultInstance(id: string): void {\n if (!this.instances.has(id)) {\n throw new Error(`应用实例 ${id} 不存在`);\n }\n this.defaultInstanceId = id;\n }\n\n /**\n * 获取默认实例ID\n */\n getDefaultInstanceId(): string | null {\n return this.defaultInstanceId;\n }\n\n /**\n * 清空所有实例\n */\n clear(): void {\n for (const instance of this.instances.values()) {\n instance.destroy();\n }\n this.instances.clear();\n this.defaultInstanceId = null;\n }\n}\n\n/**\n * 获取应用实例管理器\n */\nexport function getAppInstanceManager(): AppInstanceManager {\n return AppInstanceManager.getInstance();\n}\n"],"names":["AppRenderer","PerformanceTracker","AppInstance","initialize","container","services","initialized","Error","id","destroyed","renderer","options","rootOptions","performanceTracker","monitoring","collectWebVitals","getRenderer","getServices","getPerformanceTracker","getEventBus","eventBus","getOptions","isInitialized","isDestroyed","destroy","AppInstanceManager","getInstance","instance","createInstance","instanceId","Date","now","Math","random","toString","substr","instances","has","set","defaultInstanceId","undefined","get","destroyInstance","delete","remainingInstances","Array","from","keys","length","getAllInstances","values","setDefaultInstance","getDefaultInstanceId","clear","Map","getAppInstanceManager"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/startup/environment.ts"],"sourcesContent":["/**\n * 环境检测模块\n * 负责检测运行环境和提供适配能力\n */\n\n/**\n * 运行环境类型\n */\nexport enum RuntimeEnvironment {\n /**\n * 浏览器环境\n */\n BROWSER = 'browser',\n\n /**\n * 服务端渲染环境(SSR)\n */\n SSR = 'ssr',\n\n /**\n * 微前端容器环境\n */\n MICRO_FRONTEND = 'micro-frontend',\n\n /**\n * Node.js环境\n */\n NODE = 'node',\n\n /**\n * 未知环境\n */\n UNKNOWN = 'unknown',\n}\n\n/**\n * 环境检测器\n */\nexport class EnvironmentDetector {\n private static instance: EnvironmentDetector | null = null;\n private environment: RuntimeEnvironment;\n private isBrowser: boolean;\n private isSSR: boolean;\n private isMicroFrontend: boolean;\n\n private constructor() {\n this.isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n this.isSSR = typeof window === 'undefined' && typeof process !== 'undefined';\n this.isMicroFrontend = this.detectMicroFrontend();\n this.environment = this.detectEnvironment();\n }\n\n /**\n * 获取单例实例\n */\n static getInstance(): EnvironmentDetector {\n if (!EnvironmentDetector.instance) {\n EnvironmentDetector.instance = new EnvironmentDetector();\n }\n return EnvironmentDetector.instance;\n }\n\n /**\n * 检测微前端环境\n */\n private detectMicroFrontend(): boolean {\n if (typeof window === 'undefined') {\n return false;\n }\n\n // 检测是否在微前端容器中\n // 常见的微前端框架标识\n return !!(\n (window as any).__POWERED_BY_QIANKUN__ ||\n (window as any).__MICRO_APP_ENVIRONMENT__ ||\n (window as any).singleSpa ||\n (window as any).__SINGLE_SPA__\n );\n }\n\n /**\n * 检测运行环境\n */\n private detectEnvironment(): RuntimeEnvironment {\n if (this.isMicroFrontend) {\n return RuntimeEnvironment.MICRO_FRONTEND;\n }\n\n if (this.isSSR) {\n return RuntimeEnvironment.SSR;\n }\n\n if (this.isBrowser) {\n return RuntimeEnvironment.BROWSER;\n }\n\n if (typeof process !== 'undefined') {\n return RuntimeEnvironment.NODE;\n }\n\n return RuntimeEnvironment.UNKNOWN;\n }\n\n /**\n * 获取当前运行环境\n */\n getEnvironment(): RuntimeEnvironment {\n return this.environment;\n }\n\n /**\n * 是否为浏览器环境\n */\n isBrowserEnvironment(): boolean {\n return this.isBrowser;\n }\n\n /**\n * 是否为SSR环境\n */\n isSSREnvironment(): boolean {\n return this.isSSR;\n }\n\n /**\n * 是否为微前端环境\n */\n isMicroFrontendEnvironment(): boolean {\n return this.isMicroFrontend;\n }\n\n /**\n * 安全获取DOM元素(支持SSR)\n * \n * @param selector - 选择器或元素ID\n * @returns DOM元素或null\n */\n safeGetElement(selector: string | (() => HTMLElement | null)): HTMLElement | null {\n if (!this.isBrowser) {\n return null;\n }\n\n if (typeof selector === 'function') {\n try {\n return selector();\n } catch {\n return null;\n }\n }\n\n try {\n if (selector.startsWith('#')) {\n return document.getElementById(selector.slice(1));\n }\n return document.querySelector(selector);\n } catch {\n return null;\n }\n }\n\n /**\n * 安全执行浏览器API(支持SSR)\n * \n * @param fn - 要执行的函数\n * @param fallback - 非浏览器环境的回退值\n * @returns 执行结果或回退值\n */\n safeExecuteBrowserAPI<T>(\n fn: () => T,\n fallback?: T\n ): T | undefined {\n if (!this.isBrowser) {\n return fallback;\n }\n\n try {\n return fn();\n } catch {\n return fallback;\n }\n }\n}\n\n/**\n * 获取环境检测器实例\n */\nexport function getEnvironmentDetector(): EnvironmentDetector {\n return EnvironmentDetector.getInstance();\n}\n"],"names":["EnvironmentDetector","RuntimeEnvironment","getEnvironmentDetector","getInstance","instance","detectMicroFrontend","window","__POWERED_BY_QIANKUN__","__MICRO_APP_ENVIRONMENT__","singleSpa","__SINGLE_SPA__","detectEnvironment","isMicroFrontend","isSSR","isBrowser","process","getEnvironment","environment","isBrowserEnvironment","isSSREnvironment","isMicroFrontendEnvironment","safeGetElement","selector","startsWith","document","getElementById","slice","querySelector","safeExecuteBrowserAPI","fn","fallback"],"mappings":"AAAA;;;CAGC,GAED;;CAEC;;;;;;;;;;;QA+BYA;eAAAA;;QA9BDC;eAAAA;;QAkLIC;eAAAA;;;;;;;;;;;;;;;;AAlLT,IAAA,AAAKD,4CAAAA;IACV;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;WAvBSA;;AA8BL,IAAA,AAAMD,sBAAN,MAAMA;IAcX;;GAEC,GACD,OAAOG,cAAmC;QACxC,IAAI,CAACH,oBAAoBI,QAAQ,EAAE;YACjCJ,oBAAoBI,QAAQ,GAAG,IAAIJ;QACrC;QACA,OAAOA,oBAAoBI,QAAQ;IACrC;IAEA;;GAEC,GACD,AAAQC,sBAA+B;QACrC,IAAI,OAAOC,WAAW,aAAa;YACjC,OAAO;QACT;QAEA,cAAc;QACd,aAAa;QACb,OAAO,CAAC,CACN,CAAA,AAACA,OAAeC,sBAAsB,IACtC,AAACD,OAAeE,yBAAyB,IACzC,AAACF,OAAeG,SAAS,IACzB,AAACH,OAAeI,cAAc,AAAD;IAEjC;IAEA;;GAEC,GACD,AAAQC,oBAAwC;QAC9C,IAAI,IAAI,CAACC,eAAe,EAAE;YACxB;QACF;QAEA,IAAI,IAAI,CAACC,KAAK,EAAE;YACd;QACF;QAEA,IAAI,IAAI,CAACC,SAAS,EAAE;YAClB;QACF;QAEA,IAAI,OAAOC,YAAY,aAAa;YAClC;QACF;QAEA;IACF;IAEA;;GAEC,GACDC,iBAAqC;QACnC,OAAO,IAAI,CAACC,WAAW;IACzB;IAEA;;GAEC,GACDC,uBAAgC;QAC9B,OAAO,IAAI,CAACJ,SAAS;IACvB;IAEA;;GAEC,GACDK,mBAA4B;QAC1B,OAAO,IAAI,CAACN,KAAK;IACnB;IAEA;;GAEC,GACDO,6BAAsC;QACpC,OAAO,IAAI,CAACR,eAAe;IAC7B;IAEA;;;;;GAKC,GACDS,eAAeC,QAA6C,EAAsB;QAChF,IAAI,CAAC,IAAI,CAACR,SAAS,EAAE;YACnB,OAAO;QACT;QAEA,IAAI,OAAOQ,aAAa,YAAY;YAClC,IAAI;gBACF,OAAOA;YACT,EAAE,OAAM;gBACN,OAAO;YACT;QACF;QAEA,IAAI;YACF,IAAIA,SAASC,UAAU,CAAC,MAAM;gBAC5B,OAAOC,SAASC,cAAc,CAACH,SAASI,KAAK,CAAC;YAChD;YACA,OAAOF,SAASG,aAAa,CAACL;QAChC,EAAE,OAAM;YACN,OAAO;QACT;IACF;IAEA;;;;;;GAMC,GACDM,sBACEC,EAAW,EACXC,QAAY,EACG;QACf,IAAI,CAAC,IAAI,CAAChB,SAAS,EAAE;YACnB,OAAOgB;QACT;QAEA,IAAI;YACF,OAAOD;QACT,EAAE,OAAM;YACN,OAAOC;QACT;IACF;IAvIA,aAAsB;QALtB,uBAAQb,eAAR,KAAA;QACA,uBAAQH,aAAR,KAAA;QACA,uBAAQD,SAAR,KAAA;QACA,uBAAQD,mBAAR,KAAA;QAGE,IAAI,CAACE,SAAS,GAAG,OAAOR,WAAW,eAAe,OAAOkB,aAAa;QACtE,IAAI,CAACX,KAAK,GAAG,OAAOP,WAAW,eAAe,OAAOS,YAAY;QACjE,IAAI,CAACH,eAAe,GAAG,IAAI,CAACP,mBAAmB;QAC/C,IAAI,CAACY,WAAW,GAAG,IAAI,CAACN,iBAAiB;IAC3C;AAmIF;AA9IE,iBADWX,qBACII,YAAuC;AAmJjD,SAASF;IACd,OAAOF,oBAAoBG,WAAW;AACxC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/startup/environment.ts"],"sourcesContent":["/**\n * 环境检测模块\n * 负责检测运行环境和提供适配能力\n */\n\n/**\n * 运行环境类型\n */\nexport enum RuntimeEnvironment {\n /**\n * 浏览器环境\n */\n BROWSER = 'browser',\n\n /**\n * 服务端渲染环境(SSR)\n */\n SSR = 'ssr',\n\n /**\n * 微前端容器环境\n */\n MICRO_FRONTEND = 'micro-frontend',\n\n /**\n * Node.js环境\n */\n NODE = 'node',\n\n /**\n * 未知环境\n */\n UNKNOWN = 'unknown',\n}\n\n/**\n * 环境检测器\n */\nexport class EnvironmentDetector {\n private static instance: EnvironmentDetector | null = null;\n private environment: RuntimeEnvironment;\n private isBrowser: boolean;\n private isSSR: boolean;\n private isMicroFrontend: boolean;\n\n private constructor() {\n this.isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n this.isSSR = typeof window === 'undefined' && typeof process !== 'undefined';\n this.isMicroFrontend = this.detectMicroFrontend();\n this.environment = this.detectEnvironment();\n }\n\n /**\n * 获取单例实例\n */\n static getInstance(): EnvironmentDetector {\n if (!EnvironmentDetector.instance) {\n EnvironmentDetector.instance = new EnvironmentDetector();\n }\n return EnvironmentDetector.instance;\n }\n\n /**\n * 检测微前端环境\n */\n private detectMicroFrontend(): boolean {\n if (typeof window === 'undefined') {\n return false;\n }\n\n // 检测是否在微前端容器中\n // 常见的微前端框架标识\n return !!(\n (window as any).__POWERED_BY_QIANKUN__ ||\n (window as any).__MICRO_APP_ENVIRONMENT__ ||\n (window as any).singleSpa ||\n (window as any).__SINGLE_SPA__\n );\n }\n\n /**\n * 检测运行环境\n */\n private detectEnvironment(): RuntimeEnvironment {\n if (this.isMicroFrontend) {\n return RuntimeEnvironment.MICRO_FRONTEND;\n }\n\n if (this.isSSR) {\n return RuntimeEnvironment.SSR;\n }\n\n if (this.isBrowser) {\n return RuntimeEnvironment.BROWSER;\n }\n\n if (typeof process !== 'undefined') {\n return RuntimeEnvironment.NODE;\n }\n\n return RuntimeEnvironment.UNKNOWN;\n }\n\n /**\n * 获取当前运行环境\n */\n getEnvironment(): RuntimeEnvironment {\n return this.environment;\n }\n\n /**\n * 是否为浏览器环境\n */\n isBrowserEnvironment(): boolean {\n return this.isBrowser;\n }\n\n /**\n * 是否为SSR环境\n */\n isSSREnvironment(): boolean {\n return this.isSSR;\n }\n\n /**\n * 是否为微前端环境\n */\n isMicroFrontendEnvironment(): boolean {\n return this.isMicroFrontend;\n }\n\n /**\n * 安全获取DOM元素(支持SSR)\n * \n * @param selector - 选择器或元素ID\n * @returns DOM元素或null\n */\n safeGetElement(selector: string | (() => HTMLElement | null)): HTMLElement | null {\n if (!this.isBrowser) {\n return null;\n }\n\n if (typeof selector === 'function') {\n try {\n return selector();\n } catch {\n return null;\n }\n }\n\n try {\n if (selector.startsWith('#')) {\n return document.getElementById(selector.slice(1));\n }\n return document.querySelector(selector);\n } catch {\n return null;\n }\n }\n\n /**\n * 安全执行浏览器API(支持SSR)\n * \n * @param fn - 要执行的函数\n * @param fallback - 非浏览器环境的回退值\n * @returns 执行结果或回退值\n */\n safeExecuteBrowserAPI<T>(\n fn: () => T,\n fallback?: T\n ): T | undefined {\n if (!this.isBrowser) {\n return fallback;\n }\n\n try {\n return fn();\n } catch {\n return fallback;\n }\n }\n}\n\n/**\n * 获取环境检测器实例\n */\nexport function getEnvironmentDetector(): EnvironmentDetector {\n return EnvironmentDetector.getInstance();\n}\n"],"names":["RuntimeEnvironment","EnvironmentDetector","getInstance","instance","detectMicroFrontend","window","__POWERED_BY_QIANKUN__","__MICRO_APP_ENVIRONMENT__","singleSpa","__SINGLE_SPA__","detectEnvironment","isMicroFrontend","isSSR","isBrowser","process","getEnvironment","environment","isBrowserEnvironment","isSSREnvironment","isMicroFrontendEnvironment","safeGetElement","selector","startsWith","document","getElementById","slice","querySelector","safeExecuteBrowserAPI","fn","fallback","getEnvironmentDetector"],"mappings":";;;;;;;;;;;;;AAAA;;;CAGC,GAED;;CAEC,GACD,OAAO,IAAA,AAAKA,4CAAAA;IACV;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;IAGD;;GAEC;WAvBSA;MAyBX;AAED;;CAEC,GACD,OAAO,MAAMC;IAcX;;GAEC,GACD,OAAOC,cAAmC;QACxC,IAAI,CAACD,oBAAoBE,QAAQ,EAAE;YACjCF,oBAAoBE,QAAQ,GAAG,IAAIF;QACrC;QACA,OAAOA,oBAAoBE,QAAQ;IACrC;IAEA;;GAEC,GACD,AAAQC,sBAA+B;QACrC,IAAI,OAAOC,WAAW,aAAa;YACjC,OAAO;QACT;QAEA,cAAc;QACd,aAAa;QACb,OAAO,CAAC,CACN,CAAA,AAACA,OAAeC,sBAAsB,IACtC,AAACD,OAAeE,yBAAyB,IACzC,AAACF,OAAeG,SAAS,IACzB,AAACH,OAAeI,cAAc,AAAD;IAEjC;IAEA;;GAEC,GACD,AAAQC,oBAAwC;QAC9C,IAAI,IAAI,CAACC,eAAe,EAAE;YACxB;QACF;QAEA,IAAI,IAAI,CAACC,KAAK,EAAE;YACd;QACF;QAEA,IAAI,IAAI,CAACC,SAAS,EAAE;YAClB;QACF;QAEA,IAAI,OAAOC,YAAY,aAAa;YAClC;QACF;QAEA;IACF;IAEA;;GAEC,GACDC,iBAAqC;QACnC,OAAO,IAAI,CAACC,WAAW;IACzB;IAEA;;GAEC,GACDC,uBAAgC;QAC9B,OAAO,IAAI,CAACJ,SAAS;IACvB;IAEA;;GAEC,GACDK,mBAA4B;QAC1B,OAAO,IAAI,CAACN,KAAK;IACnB;IAEA;;GAEC,GACDO,6BAAsC;QACpC,OAAO,IAAI,CAACR,eAAe;IAC7B;IAEA;;;;;GAKC,GACDS,eAAeC,QAA6C,EAAsB;QAChF,IAAI,CAAC,IAAI,CAACR,SAAS,EAAE;YACnB,OAAO;QACT;QAEA,IAAI,OAAOQ,aAAa,YAAY;YAClC,IAAI;gBACF,OAAOA;YACT,EAAE,OAAM;gBACN,OAAO;YACT;QACF;QAEA,IAAI;YACF,IAAIA,SAASC,UAAU,CAAC,MAAM;gBAC5B,OAAOC,SAASC,cAAc,CAACH,SAASI,KAAK,CAAC;YAChD;YACA,OAAOF,SAASG,aAAa,CAACL;QAChC,EAAE,OAAM;YACN,OAAO;QACT;IACF;IAEA;;;;;;GAMC,GACDM,sBACEC,EAAW,EACXC,QAAY,EACG;QACf,IAAI,CAAC,IAAI,CAAChB,SAAS,EAAE;YACnB,OAAOgB;QACT;QAEA,IAAI;YACF,OAAOD;QACT,EAAE,OAAM;YACN,OAAOC;QACT;IACF;IAvIA,aAAsB;QALtB,uBAAQb,eAAR,KAAA;QACA,uBAAQH,aAAR,KAAA;QACA,uBAAQD,SAAR,KAAA;QACA,uBAAQD,mBAAR,KAAA;QAGE,IAAI,CAACE,SAAS,GAAG,OAAOR,WAAW,eAAe,OAAOkB,aAAa;QACtE,IAAI,CAACX,KAAK,GAAG,OAAOP,WAAW,eAAe,OAAOS,YAAY;QACjE,IAAI,CAACH,eAAe,GAAG,IAAI,CAACP,mBAAmB;QAC/C,IAAI,CAACY,WAAW,GAAG,IAAI,CAACN,iBAAiB;IAC3C;AAmIF;AA9IE,iBADWT,qBACIE,YAAuC;AAgJxD;;CAEC,GACD,OAAO,SAAS2B;IACd,OAAO7B,oBAAoBC,WAAW;AACxC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/startup/index.ts"],"sourcesContent":["/**\n * 启动模块统一导出\n */\n\nexport * from './initializeServices';\nexport * from './renderApp';\nexport * from './performanceTracker';\nexport * from './environment';\n"],"names":[],"mappings":"AAAA;;CAEC;;;;qBAEa;qBACA;qBACA;qBACA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/startup/index.ts"],"sourcesContent":["/**\n * 启动模块统一导出\n */\n\nexport * from './initializeServices';\nexport * from './renderApp';\nexport * from './performanceTracker';\nexport * from './environment';\n"],"names":[],"mappings":"AAAA;;CAEC,GAED,cAAc,uBAAuB;AACrC,cAAc,cAAc;AAC5B,cAAc,uBAAuB;AACrC,cAAc,gBAAgB"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/startup/initializeServices.ts"],"sourcesContent":["/**\n * 服务初始化模块\n * 负责初始化框架所需的各种服务\n */\n\nimport { logger } from '@vlian/logger';\nimport { initMonitoring } from '@vlian/monitoring';\nimport type { MonitoringService } from '@vlian/monitoring';\nimport { PerformanceMonitor } from '@vlian/utils';\nimport { storage } from '../../library';\nimport { StateManager } from '../../state';\nimport type { StartOptions } from '../types';\nimport { AppEventBus } from '../event/AppEventBus';\nimport type { AppEventBusConfig } from '../event/types';\n\n/**\n * 重试配置\n */\nexport interface RetryConfig {\n /**\n * 最大重试次数\n * @default 3\n */\n maxRetries?: number;\n /**\n * 重试延迟(毫秒)\n * @default 1000\n */\n retryDelay?: number;\n /**\n * 是否启用指数退避\n * @default true\n */\n exponentialBackoff?: boolean;\n}\n\n/**\n * 服务初始化结果\n */\nexport interface ServicesInitResult {\n /**\n * 监控服务实例\n */\n monitoring: MonitoringService;\n\n /**\n * 性能监控实例\n */\n performanceMonitor: PerformanceMonitor;\n\n /**\n * 状态管理器实例\n */\n stateManager: StateManager;\n\n /**\n * 事件总线实例\n */\n eventBus: AppEventBus;\n\n /**\n * 延迟初始化非关键服务的函数\n * 在应用渲染后调用,使用 requestIdleCallback 在空闲时初始化\n */\n initializeNonCriticalServices?: () => Promise<void>;\n}\n\n/**\n * 带重试的异步函数执行器\n */\nasync function withRetry<T>(\n fn: () => Promise<T>,\n config: RetryConfig = {},\n serviceName: string\n): Promise<T> {\n const maxRetries = config.maxRetries ?? 3;\n const retryDelay = config.retryDelay ?? 1000;\n const exponentialBackoff = config.exponentialBackoff ?? true;\n\n let lastError: unknown;\n \n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n \n if (attempt < maxRetries) {\n const delay = exponentialBackoff \n ? retryDelay * Math.pow(2, attempt)\n : retryDelay;\n \n logger.warn(\n `${serviceName} 初始化失败(尝试 ${attempt + 1}/${maxRetries + 1}),${delay}ms 后重试...`,\n error\n );\n \n await new Promise(resolve => setTimeout(resolve, delay));\n }\n }\n }\n \n logger.error(`${serviceName} 初始化失败,已重试 ${maxRetries} 次`);\n throw lastError;\n}\n\n/**\n * 初始化所有服务\n * \n * 优化:\n * 1. 区分关键服务和非关键服务\n * 2. 关键服务并行初始化,缩短首屏时间\n * 3. 非关键服务延迟到应用渲染后初始化,使用 requestIdleCallback 在空闲时初始化\n * 4. 实现服务初始化失败重试机制,提高启动成功率\n * \n * @param options - 启动配置选项\n * @returns 服务初始化结果\n */\nexport async function initializeServices(\n options: StartOptions = {}\n): Promise<ServicesInitResult> {\n const startTime = performance.now();\n \n // 重试配置\n const retryConfig: RetryConfig = {\n maxRetries: options.serviceRetry?.maxRetries ?? 3,\n retryDelay: options.serviceRetry?.retryDelay ?? 1000,\n exponentialBackoff: options.serviceRetry?.exponentialBackoff ?? true,\n };\n\n // ========== 关键服务:必须在应用渲染前初始化 ==========\n // 这些服务是应用运行的基础,必须并行初始化完成\n\n // 1. 监控服务(必须最先初始化,因为其他服务可能依赖它)\n const monitoringPromise = withRetry(\n () => Promise.resolve(initMonitoring({\n ...options.errorMonitor,\n onError: (error) => {\n logger.error('监控服务捕获到错误:', error);\n options.errorMonitor?.onError?.(error);\n },\n })),\n retryConfig,\n '监控服务'\n );\n\n // 2. 存储服务(关键服务,应用可能需要立即使用存储)\n const storagePromise = withRetry(\n () => Promise.resolve().then(() => {\n storage.initialize(options.storageOptions);\n return storage;\n }),\n retryConfig,\n '存储服务'\n );\n\n // 3. 状态管理器(关键服务,应用状态管理的基础)\n const stateManagerPromise = withRetry(\n () => Promise.resolve().then(() => {\n if (options.stateManager !== undefined) {\n return new StateManager(options.stateManager);\n } else {\n // 默认初始化状态管理器\n return new StateManager({\n enableRegistry: true,\n defaultScope: 'app',\n });\n }\n }),\n retryConfig,\n '状态管理器'\n );\n\n // 4. 事件总线(关键服务,用于应用内部通信)\n const eventBusPromise = withRetry(\n () => Promise.resolve().then(() => {\n const eventBusConfig: AppEventBusConfig = {\n enableTracking: options.eventBus?.enableTracking ?? (process.env.NODE_ENV === 'development'),\n maxHistorySize: options.eventBus?.maxHistorySize ?? 100,\n enableValidation: options.eventBus?.enableValidation ?? false,\n enablePerformanceMonitoring: options.eventBus?.enablePerformanceMonitoring ?? (process.env.NODE_ENV === 'development'),\n namespacePrefix: options.eventBus?.namespacePrefix,\n instanceId: options.eventBus?.instanceId,\n enableSecurityMode: options.eventBus?.enableSecurityMode ?? false,\n allowedSources: options.eventBus?.allowedSources,\n };\n return new AppEventBus(eventBusConfig);\n }),\n retryConfig,\n '事件总线'\n );\n\n // 并行执行关键服务初始化\n const [monitoring, , stateManager, eventBus] = await Promise.all([\n monitoringPromise,\n storagePromise,\n stateManagerPromise,\n eventBusPromise,\n ]);\n\n logger.info('关键服务初始化完成');\n\n // 初始化性能监控(依赖监控服务,必须在监控服务初始化后)\n const performanceMonitor = new PerformanceMonitor({\n ...options.performanceMonitor,\n onReport: (metrics) => {\n monitoring.reportPerformance(metrics);\n options.performanceMonitor?.onReport?.(metrics);\n },\n });\n\n // 在页面卸载时清理性能监控\n if (typeof window !== 'undefined') {\n const cleanupHandler = () => {\n performanceMonitor.disconnect();\n window.removeEventListener('beforeunload', cleanupHandler);\n };\n window.addEventListener('beforeunload', cleanupHandler);\n }\n\n const criticalServicesDuration = performance.now() - startTime;\n logger.debug(`关键服务初始化完成,耗时: ${criticalServicesDuration.toFixed(2)}ms`);\n\n // ========== 非关键服务:延迟到应用渲染后初始化 ==========\n // 这些服务不影响首屏渲染,可以在空闲时初始化\n\n /**\n * 延迟初始化非关键服务\n * 在应用渲染后调用,使用 requestIdleCallback 在空闲时初始化\n */\n const initializeNonCriticalServices = async (): Promise<void> => {\n const nonCriticalStartTime = performance.now();\n \n // 使用 requestIdleCallback 在浏览器空闲时初始化非关键服务\n // 如果不支持 requestIdleCallback,则使用 setTimeout 延迟执行\n const scheduleInit = (callback: () => void) => {\n if (typeof window !== 'undefined' && 'requestIdleCallback' in window) {\n window.requestIdleCallback(callback, { timeout: 5000 });\n } else {\n setTimeout(callback, 100);\n }\n };\n\n return new Promise<void>((resolve) => {\n scheduleInit(async () => {\n try {\n // 1. 分析服务(可选,非关键)\n if (options.analytics) {\n try {\n await withRetry(\n () => import('../../utils/analytics').then(({ initAnalytics }) => {\n initAnalytics(options.analytics!);\n return true;\n }),\n retryConfig,\n '分析服务'\n );\n logger.debug('分析服务初始化完成');\n } catch (error) {\n logger.warn('分析服务初始化失败(不影响应用运行):', error);\n }\n }\n\n // 2. 运行时安全服务(可选,非关键)\n if (options.runtimeSecurity) {\n try {\n await withRetry(\n () => import('../../utils/runtimeSecurity').then(({ RuntimeSecurity }) => {\n RuntimeSecurity.initialize(options.runtimeSecurity!);\n return true;\n }),\n retryConfig,\n '运行时安全服务'\n );\n logger.debug('运行时安全服务初始化完成');\n } catch (error) {\n logger.warn('运行时安全服务初始化失败(不影响应用运行):', error);\n }\n }\n\n const nonCriticalDuration = performance.now() - nonCriticalStartTime;\n logger.debug(`非关键服务初始化完成,耗时: ${nonCriticalDuration.toFixed(2)}ms`);\n } catch (error) {\n logger.warn('非关键服务初始化过程中出现错误:', error);\n } finally {\n resolve();\n }\n });\n });\n };\n\n // 记录关键服务初始化性能指标\n if (monitoring.reportPerformance) {\n monitoring.reportPerformance({\n serviceInitDuration: criticalServicesDuration,\n } as any);\n }\n\n return {\n monitoring,\n performanceMonitor,\n stateManager,\n eventBus,\n initializeNonCriticalServices,\n };\n}\n"],"names":["initializeServices","withRetry","fn","config","serviceName","maxRetries","retryDelay","exponentialBackoff","lastError","attempt","error","delay","Math","pow","logger","warn","Promise","resolve","setTimeout","options","startTime","performance","now","retryConfig","serviceRetry","monitoringPromise","initMonitoring","errorMonitor","onError","storagePromise","then","storage","initialize","storageOptions","stateManagerPromise","stateManager","undefined","StateManager","enableRegistry","defaultScope","eventBusPromise","eventBusConfig","enableTracking","eventBus","process","env","NODE_ENV","maxHistorySize","enableValidation","enablePerformanceMonitoring","namespacePrefix","instanceId","enableSecurityMode","allowedSources","AppEventBus","monitoring","all","info","performanceMonitor","PerformanceMonitor","onReport","metrics","reportPerformance","window","cleanupHandler","disconnect","removeEventListener","addEventListener","criticalServicesDuration","debug","toFixed","initializeNonCriticalServices","nonCriticalStartTime","scheduleInit","callback","requestIdleCallback","timeout","analytics","initAnalytics","runtimeSecurity","RuntimeSecurity","nonCriticalDuration","serviceInitDuration"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/startup/initializeServices.ts"],"sourcesContent":["/**\n * 服务初始化模块\n * 负责初始化框架所需的各种服务\n */\n\nimport { logger } from '@vlian/logger';\nimport { initMonitoring } from '@vlian/monitoring';\nimport type { MonitoringService } from '@vlian/monitoring';\nimport { PerformanceMonitor } from '@vlian/utils';\nimport { storage } from '../../library';\nimport { StateManager } from '../../state';\nimport type { StartOptions } from '../types';\nimport { AppEventBus } from '../event/AppEventBus';\nimport type { AppEventBusConfig } from '../event/types';\n\n/**\n * 重试配置\n */\nexport interface RetryConfig {\n /**\n * 最大重试次数\n * @default 3\n */\n maxRetries?: number;\n /**\n * 重试延迟(毫秒)\n * @default 1000\n */\n retryDelay?: number;\n /**\n * 是否启用指数退避\n * @default true\n */\n exponentialBackoff?: boolean;\n}\n\n/**\n * 服务初始化结果\n */\nexport interface ServicesInitResult {\n /**\n * 监控服务实例\n */\n monitoring: MonitoringService;\n\n /**\n * 性能监控实例\n */\n performanceMonitor: PerformanceMonitor;\n\n /**\n * 状态管理器实例\n */\n stateManager: StateManager;\n\n /**\n * 事件总线实例\n */\n eventBus: AppEventBus;\n\n /**\n * 延迟初始化非关键服务的函数\n * 在应用渲染后调用,使用 requestIdleCallback 在空闲时初始化\n */\n initializeNonCriticalServices?: () => Promise<void>;\n}\n\n/**\n * 带重试的异步函数执行器\n */\nasync function withRetry<T>(\n fn: () => Promise<T>,\n config: RetryConfig = {},\n serviceName: string\n): Promise<T> {\n const maxRetries = config.maxRetries ?? 3;\n const retryDelay = config.retryDelay ?? 1000;\n const exponentialBackoff = config.exponentialBackoff ?? true;\n\n let lastError: unknown;\n \n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n \n if (attempt < maxRetries) {\n const delay = exponentialBackoff \n ? retryDelay * Math.pow(2, attempt)\n : retryDelay;\n \n logger.warn(\n `${serviceName} 初始化失败(尝试 ${attempt + 1}/${maxRetries + 1}),${delay}ms 后重试...`,\n error\n );\n \n await new Promise(resolve => setTimeout(resolve, delay));\n }\n }\n }\n \n logger.error(`${serviceName} 初始化失败,已重试 ${maxRetries} 次`);\n throw lastError;\n}\n\n/**\n * 初始化所有服务\n * \n * 优化:\n * 1. 区分关键服务和非关键服务\n * 2. 关键服务并行初始化,缩短首屏时间\n * 3. 非关键服务延迟到应用渲染后初始化,使用 requestIdleCallback 在空闲时初始化\n * 4. 实现服务初始化失败重试机制,提高启动成功率\n * \n * @param options - 启动配置选项\n * @returns 服务初始化结果\n */\nexport async function initializeServices(\n options: StartOptions = {}\n): Promise<ServicesInitResult> {\n const startTime = performance.now();\n \n // 重试配置\n const retryConfig: RetryConfig = {\n maxRetries: options.serviceRetry?.maxRetries ?? 3,\n retryDelay: options.serviceRetry?.retryDelay ?? 1000,\n exponentialBackoff: options.serviceRetry?.exponentialBackoff ?? true,\n };\n\n // ========== 关键服务:必须在应用渲染前初始化 ==========\n // 这些服务是应用运行的基础,必须并行初始化完成\n\n // 1. 监控服务(必须最先初始化,因为其他服务可能依赖它)\n const monitoringPromise = withRetry(\n () => Promise.resolve(initMonitoring({\n ...options.errorMonitor,\n onError: (error) => {\n logger.error('监控服务捕获到错误:', error);\n options.errorMonitor?.onError?.(error);\n },\n })),\n retryConfig,\n '监控服务'\n );\n\n // 2. 存储服务(关键服务,应用可能需要立即使用存储)\n const storagePromise = withRetry(\n () => Promise.resolve().then(() => {\n storage.initialize(options.storageOptions);\n return storage;\n }),\n retryConfig,\n '存储服务'\n );\n\n // 3. 状态管理器(关键服务,应用状态管理的基础)\n const stateManagerPromise = withRetry(\n () => Promise.resolve().then(() => {\n if (options.stateManager !== undefined) {\n return new StateManager(options.stateManager);\n } else {\n // 默认初始化状态管理器\n return new StateManager({\n enableRegistry: true,\n defaultScope: 'app',\n });\n }\n }),\n retryConfig,\n '状态管理器'\n );\n\n // 4. 事件总线(关键服务,用于应用内部通信)\n const eventBusPromise = withRetry(\n () => Promise.resolve().then(() => {\n const eventBusConfig: AppEventBusConfig = {\n enableTracking: options.eventBus?.enableTracking ?? (process.env.NODE_ENV === 'development'),\n maxHistorySize: options.eventBus?.maxHistorySize ?? 100,\n enableValidation: options.eventBus?.enableValidation ?? false,\n enablePerformanceMonitoring: options.eventBus?.enablePerformanceMonitoring ?? (process.env.NODE_ENV === 'development'),\n namespacePrefix: options.eventBus?.namespacePrefix,\n instanceId: options.eventBus?.instanceId,\n enableSecurityMode: options.eventBus?.enableSecurityMode ?? false,\n allowedSources: options.eventBus?.allowedSources,\n };\n return new AppEventBus(eventBusConfig);\n }),\n retryConfig,\n '事件总线'\n );\n\n // 并行执行关键服务初始化\n const [monitoring, , stateManager, eventBus] = await Promise.all([\n monitoringPromise,\n storagePromise,\n stateManagerPromise,\n eventBusPromise,\n ]);\n\n logger.info('关键服务初始化完成');\n\n // 初始化性能监控(依赖监控服务,必须在监控服务初始化后)\n const performanceMonitor = new PerformanceMonitor({\n ...options.performanceMonitor,\n onReport: (metrics) => {\n monitoring.reportPerformance(metrics);\n options.performanceMonitor?.onReport?.(metrics);\n },\n });\n\n // 在页面卸载时清理性能监控\n if (typeof window !== 'undefined') {\n const cleanupHandler = () => {\n performanceMonitor.disconnect();\n window.removeEventListener('beforeunload', cleanupHandler);\n };\n window.addEventListener('beforeunload', cleanupHandler);\n }\n\n const criticalServicesDuration = performance.now() - startTime;\n logger.debug(`关键服务初始化完成,耗时: ${criticalServicesDuration.toFixed(2)}ms`);\n\n // ========== 非关键服务:延迟到应用渲染后初始化 ==========\n // 这些服务不影响首屏渲染,可以在空闲时初始化\n\n /**\n * 延迟初始化非关键服务\n * 在应用渲染后调用,使用 requestIdleCallback 在空闲时初始化\n */\n const initializeNonCriticalServices = async (): Promise<void> => {\n const nonCriticalStartTime = performance.now();\n \n // 使用 requestIdleCallback 在浏览器空闲时初始化非关键服务\n // 如果不支持 requestIdleCallback,则使用 setTimeout 延迟执行\n const scheduleInit = (callback: () => void) => {\n if (typeof window !== 'undefined' && 'requestIdleCallback' in window) {\n window.requestIdleCallback(callback, { timeout: 5000 });\n } else {\n setTimeout(callback, 100);\n }\n };\n\n return new Promise<void>((resolve) => {\n scheduleInit(async () => {\n try {\n // 1. 分析服务(可选,非关键)\n if (options.analytics) {\n try {\n await withRetry(\n () => import('../../utils/analytics').then(({ initAnalytics }) => {\n initAnalytics(options.analytics!);\n return true;\n }),\n retryConfig,\n '分析服务'\n );\n logger.debug('分析服务初始化完成');\n } catch (error) {\n logger.warn('分析服务初始化失败(不影响应用运行):', error);\n }\n }\n\n // 2. 运行时安全服务(可选,非关键)\n if (options.runtimeSecurity) {\n try {\n await withRetry(\n () => import('../../utils/runtimeSecurity').then(({ RuntimeSecurity }) => {\n RuntimeSecurity.initialize(options.runtimeSecurity!);\n return true;\n }),\n retryConfig,\n '运行时安全服务'\n );\n logger.debug('运行时安全服务初始化完成');\n } catch (error) {\n logger.warn('运行时安全服务初始化失败(不影响应用运行):', error);\n }\n }\n\n const nonCriticalDuration = performance.now() - nonCriticalStartTime;\n logger.debug(`非关键服务初始化完成,耗时: ${nonCriticalDuration.toFixed(2)}ms`);\n } catch (error) {\n logger.warn('非关键服务初始化过程中出现错误:', error);\n } finally {\n resolve();\n }\n });\n });\n };\n\n // 记录关键服务初始化性能指标\n if (monitoring.reportPerformance) {\n monitoring.reportPerformance({\n serviceInitDuration: criticalServicesDuration,\n } as any);\n }\n\n return {\n monitoring,\n performanceMonitor,\n stateManager,\n eventBus,\n initializeNonCriticalServices,\n };\n}\n"],"names":["logger","initMonitoring","PerformanceMonitor","storage","StateManager","AppEventBus","withRetry","fn","config","serviceName","maxRetries","retryDelay","exponentialBackoff","lastError","attempt","error","delay","Math","pow","warn","Promise","resolve","setTimeout","initializeServices","options","startTime","performance","now","retryConfig","serviceRetry","monitoringPromise","errorMonitor","onError","storagePromise","then","initialize","storageOptions","stateManagerPromise","stateManager","undefined","enableRegistry","defaultScope","eventBusPromise","eventBusConfig","enableTracking","eventBus","process","env","NODE_ENV","maxHistorySize","enableValidation","enablePerformanceMonitoring","namespacePrefix","instanceId","enableSecurityMode","allowedSources","monitoring","all","info","performanceMonitor","onReport","metrics","reportPerformance","window","cleanupHandler","disconnect","removeEventListener","addEventListener","criticalServicesDuration","debug","toFixed","initializeNonCriticalServices","nonCriticalStartTime","scheduleInit","callback","requestIdleCallback","timeout","analytics","initAnalytics","runtimeSecurity","RuntimeSecurity","nonCriticalDuration","serviceInitDuration"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/startup/performanceTracker.ts"],"sourcesContent":["/**\n * 性能追踪模块\n * 负责收集和上报启动性能指标\n */\n\nimport type { MonitoringService } from '@vlian/monitoring';\n\n/**\n * 启动性能指标单位常量\n */\nexport const STARTUP_METRIC_UNITS = {\n /**\n * 毫秒单位\n */\n ms: 'ms',\n /**\n * 无单位(分数)\n */\n none: '',\n} as const;\n\n/**\n * 启动性能指标\n */\nexport interface StartupPerformanceMetrics {\n /**\n * 服务初始化耗时\n * 单位:毫秒(ms)\n */\n serviceInitDuration?: number;\n\n /**\n * 初始化耗时\n * 单位:毫秒(ms)\n */\n initializationDuration?: number;\n\n /**\n * 首次渲染耗时\n * 单位:毫秒(ms)\n */\n firstRenderDuration?: number;\n\n /**\n * 总启动耗时\n * 单位:毫秒(ms)\n */\n totalStartupDuration?: number;\n\n /**\n * 首次内容绘制时间(FCP)\n * 单位:毫秒(ms)\n */\n fcp?: number;\n\n /**\n * 最大内容绘制时间(LCP)\n * 单位:毫秒(ms)\n */\n lcp?: number;\n\n /**\n * 首次输入延迟(FID)\n * 单位:毫秒(ms)\n */\n fid?: number;\n\n /**\n * 累积布局偏移(CLS)\n * 单位:无(分数)\n */\n cls?: number;\n}\n\n/**\n * 性能追踪器\n */\nexport class PerformanceTracker {\n private monitoring: MonitoringService;\n private metrics: StartupPerformanceMetrics = {};\n private startTime: number;\n\n constructor(monitoring: MonitoringService) {\n this.monitoring = monitoring;\n this.startTime = performance.now();\n }\n\n /**\n * 记录服务初始化耗时\n */\n recordServiceInit(duration: number): void {\n this.metrics.serviceInitDuration = duration;\n }\n\n /**\n * 记录初始化耗时\n */\n recordInitialization(duration: number): void {\n this.metrics.initializationDuration = duration;\n }\n\n /**\n * 记录首次渲染耗时\n */\n recordFirstRender(duration: number): void {\n this.metrics.firstRenderDuration = duration;\n }\n\n /**\n * 记录总启动耗时\n */\n recordTotalStartup(duration: number): void {\n this.metrics.totalStartupDuration = duration;\n }\n\n /**\n * 收集Web Vitals指标\n */\n collectWebVitals(): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n // 收集FCP(首次内容绘制)\n if ('PerformanceObserver' in window) {\n try {\n const fcpObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (entry.name === 'first-contentful-paint') {\n this.metrics.fcp = entry.startTime;\n this.report();\n }\n }\n });\n fcpObserver.observe({ entryTypes: ['paint'] });\n } catch (e) {\n // 忽略错误\n }\n }\n\n // 收集LCP(最大内容绘制)\n if ('PerformanceObserver' in window) {\n try {\n const lcpObserver = new PerformanceObserver((list) => {\n const entries = list.getEntries();\n const lastEntry = entries[entries.length - 1];\n this.metrics.lcp = lastEntry.startTime;\n this.report();\n });\n lcpObserver.observe({ entryTypes: ['largest-contentful-paint'] });\n } catch (e) {\n // 忽略错误\n }\n }\n\n // 收集FID(首次输入延迟)\n if ('PerformanceObserver' in window) {\n try {\n const fidObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n // PerformanceEventTiming 类型检查\n if ('processingStart' in entry && 'startTime' in entry) {\n const eventEntry = entry as PerformanceEventTiming;\n this.metrics.fid = eventEntry.processingStart - eventEntry.startTime;\n this.report();\n }\n }\n });\n fidObserver.observe({ entryTypes: ['first-input'] });\n } catch (e) {\n // 忽略错误\n }\n }\n\n // 收集CLS(累积布局偏移)\n if ('PerformanceObserver' in window) {\n try {\n let clsValue = 0;\n const clsObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (!(entry as any).hadRecentInput) {\n clsValue += (entry as any).value;\n }\n }\n this.metrics.cls = clsValue;\n this.report();\n });\n clsObserver.observe({ entryTypes: ['layout-shift'] });\n } catch (e) {\n // 忽略错误\n }\n }\n }\n\n /**\n * 上报性能指标\n */\n report(): void {\n if (this.monitoring.reportPerformance) {\n this.monitoring.reportPerformance(this.metrics);\n }\n }\n\n /**\n * 获取所有指标\n */\n getMetrics(): StartupPerformanceMetrics {\n return { ...this.metrics };\n }\n\n /**\n * 获取总启动耗时\n */\n getTotalDuration(): number {\n return performance.now() - this.startTime;\n }\n}\n"],"names":["PerformanceTracker","STARTUP_METRIC_UNITS","ms","none","recordServiceInit","duration","metrics","serviceInitDuration","recordInitialization","initializationDuration","recordFirstRender","firstRenderDuration","recordTotalStartup","totalStartupDuration","collectWebVitals","window","fcpObserver","PerformanceObserver","list","entry","getEntries","name","fcp","startTime","report","observe","entryTypes","e","lcpObserver","entries","lastEntry","length","lcp","fidObserver","eventEntry","fid","processingStart","clsValue","clsObserver","hadRecentInput","value","cls","monitoring","reportPerformance","getMetrics","getTotalDuration","performance","now"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/startup/performanceTracker.ts"],"sourcesContent":["/**\n * 性能追踪模块\n * 负责收集和上报启动性能指标\n */\n\nimport type { MonitoringService } from '@vlian/monitoring';\n\n/**\n * 启动性能指标单位常量\n */\nexport const STARTUP_METRIC_UNITS = {\n /**\n * 毫秒单位\n */\n ms: 'ms',\n /**\n * 无单位(分数)\n */\n none: '',\n} as const;\n\n/**\n * 启动性能指标\n */\nexport interface StartupPerformanceMetrics {\n /**\n * 服务初始化耗时\n * 单位:毫秒(ms)\n */\n serviceInitDuration?: number;\n\n /**\n * 初始化耗时\n * 单位:毫秒(ms)\n */\n initializationDuration?: number;\n\n /**\n * 首次渲染耗时\n * 单位:毫秒(ms)\n */\n firstRenderDuration?: number;\n\n /**\n * 总启动耗时\n * 单位:毫秒(ms)\n */\n totalStartupDuration?: number;\n\n /**\n * 首次内容绘制时间(FCP)\n * 单位:毫秒(ms)\n */\n fcp?: number;\n\n /**\n * 最大内容绘制时间(LCP)\n * 单位:毫秒(ms)\n */\n lcp?: number;\n\n /**\n * 首次输入延迟(FID)\n * 单位:毫秒(ms)\n */\n fid?: number;\n\n /**\n * 累积布局偏移(CLS)\n * 单位:无(分数)\n */\n cls?: number;\n}\n\n/**\n * 性能追踪器\n */\nexport class PerformanceTracker {\n private monitoring: MonitoringService;\n private metrics: StartupPerformanceMetrics = {};\n private startTime: number;\n\n constructor(monitoring: MonitoringService) {\n this.monitoring = monitoring;\n this.startTime = performance.now();\n }\n\n /**\n * 记录服务初始化耗时\n */\n recordServiceInit(duration: number): void {\n this.metrics.serviceInitDuration = duration;\n }\n\n /**\n * 记录初始化耗时\n */\n recordInitialization(duration: number): void {\n this.metrics.initializationDuration = duration;\n }\n\n /**\n * 记录首次渲染耗时\n */\n recordFirstRender(duration: number): void {\n this.metrics.firstRenderDuration = duration;\n }\n\n /**\n * 记录总启动耗时\n */\n recordTotalStartup(duration: number): void {\n this.metrics.totalStartupDuration = duration;\n }\n\n /**\n * 收集Web Vitals指标\n */\n collectWebVitals(): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n // 收集FCP(首次内容绘制)\n if ('PerformanceObserver' in window) {\n try {\n const fcpObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (entry.name === 'first-contentful-paint') {\n this.metrics.fcp = entry.startTime;\n this.report();\n }\n }\n });\n fcpObserver.observe({ entryTypes: ['paint'] });\n } catch (e) {\n // 忽略错误\n }\n }\n\n // 收集LCP(最大内容绘制)\n if ('PerformanceObserver' in window) {\n try {\n const lcpObserver = new PerformanceObserver((list) => {\n const entries = list.getEntries();\n const lastEntry = entries[entries.length - 1];\n this.metrics.lcp = lastEntry.startTime;\n this.report();\n });\n lcpObserver.observe({ entryTypes: ['largest-contentful-paint'] });\n } catch (e) {\n // 忽略错误\n }\n }\n\n // 收集FID(首次输入延迟)\n if ('PerformanceObserver' in window) {\n try {\n const fidObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n // PerformanceEventTiming 类型检查\n if ('processingStart' in entry && 'startTime' in entry) {\n const eventEntry = entry as PerformanceEventTiming;\n this.metrics.fid = eventEntry.processingStart - eventEntry.startTime;\n this.report();\n }\n }\n });\n fidObserver.observe({ entryTypes: ['first-input'] });\n } catch (e) {\n // 忽略错误\n }\n }\n\n // 收集CLS(累积布局偏移)\n if ('PerformanceObserver' in window) {\n try {\n let clsValue = 0;\n const clsObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (!(entry as any).hadRecentInput) {\n clsValue += (entry as any).value;\n }\n }\n this.metrics.cls = clsValue;\n this.report();\n });\n clsObserver.observe({ entryTypes: ['layout-shift'] });\n } catch (e) {\n // 忽略错误\n }\n }\n }\n\n /**\n * 上报性能指标\n */\n report(): void {\n if (this.monitoring.reportPerformance) {\n this.monitoring.reportPerformance(this.metrics);\n }\n }\n\n /**\n * 获取所有指标\n */\n getMetrics(): StartupPerformanceMetrics {\n return { ...this.metrics };\n }\n\n /**\n * 获取总启动耗时\n */\n getTotalDuration(): number {\n return performance.now() - this.startTime;\n }\n}\n"],"names":["STARTUP_METRIC_UNITS","ms","none","PerformanceTracker","recordServiceInit","duration","metrics","serviceInitDuration","recordInitialization","initializationDuration","recordFirstRender","firstRenderDuration","recordTotalStartup","totalStartupDuration","collectWebVitals","window","fcpObserver","PerformanceObserver","list","entry","getEntries","name","fcp","startTime","report","observe","entryTypes","e","lcpObserver","entries","lastEntry","length","lcp","fidObserver","eventEntry","fid","processingStart","clsValue","clsObserver","hadRecentInput","value","cls","monitoring","reportPerformance","getMetrics","getTotalDuration","performance","now"],"mappings":"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"}
@@ -1 +0,0 @@
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 '@vlian/monitoring';\nimport type { StateManager } from '../../state';\nimport { SplashScreen } from '../splash';\nimport { SecurityUtils } from '@vlian/utils';\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('@vlian/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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"}
@@ -1 +0,0 @@
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 '@vlian/monitoring';\nimport type { StateManager } from '../../state';\nimport { SplashScreen } from '../splash';\nimport { SecurityUtils } from '@vlian/utils';\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('@vlian/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":["createRoot","StrictMode","useMemo","useCallback","memo","BasicLayout","DefaultApp","AppContextProvider","ErrorBoundary","InitializationErrorThrower","SplashScreen","SecurityUtils","getRouterManager","RouterProvider","OptimizedAppContent","options","services","context","securityConfig","_securityConfig","initialLocale","locale","Object","keys","shouldUseRouter","routerEnabled","router","enabled","routerManager","getRouter","handleError","error","monitoring","captureError","appContent","app","fallback","errorFallback","onError","initialTheme","theme","initialAntdConfig","uiProvider","antd","initialInitializationContext","stateManager","antdApp","uiApp","globalProvider","displayName","AppRenderer","initialize","container","rootOptions","root","renderApp","Error","enableXSSProtection","security","validateConfig","sanitizeUserInput","csrf","Promise","resolve","then","configStr","JSON","stringify","validation","validateInput","safe","reason","initCSRFManager","headerName","cookieName","getToken","validateToken","catch","process","env","NODE_ENV","console","warn","render","renderSplashScreen","onComplete","renderError","err","errorMonitor","div","destroy","unmount","getContainer"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/startup/startApp.ts"],"sourcesContent":["/**\n * 应用启动主函数\n * 重构后的启动逻辑,集成所有新功能\n */\n\nimport { logger } from '@vlian/logger';\nimport { ErrorCode, InitializationError } from '@vlian/utils';\nimport { initTraceIdGenerator, generateTraceId, setCurrentTraceId } from '../../utils/traceId';\nimport type { StartOptions } from '../types';\nimport { shouldShowSplashScreen } from '../splash';\nimport { initialization, initializationErrorState } from '../initialization/index';\nimport { middlewareManager } from '../middleware';\nimport { initializeServices } from './initializeServices';\nimport type { ServicesInitResult } from './initializeServices';\nimport { AppInstanceManager, getAppInstanceManager } from './AppInstance';\nimport { getEnvironmentDetector } from './environment';\nimport { getRouterManager } from '../router/RouterManager';\nimport { FrameworkEventManager } from '../event/frameworkEvents';\nimport { startKernel } from '../kernel';\n\n/**\n * 启动应用\n *\n * @param options - 启动配置选项\n * @param instanceId - 应用实例ID(可选,用于多实例场景)\n * @returns 应用实例\n */\nexport async function startApp(\n options: StartOptions = {},\n instanceId?: string\n): Promise<AppInstanceManager> {\n const startTime = performance.now();\n const envDetector = getEnvironmentDetector();\n const instanceManager = getAppInstanceManager();\n\n // 初始化追踪 ID 生成器\n initTraceIdGenerator('app');\n const traceId = generateTraceId();\n setCurrentTraceId(traceId);\n\n // 框架事件管理器(在服务初始化后创建)\n let frameworkEventManager: FrameworkEventManager | null = null;\n let kernelTraceId: string | null = null;\n\n try {\n // 1. 环境检测和容器获取\n const container = options.container || envDetector.safeGetElement('#root');\n if (!container) {\n throw new InitializationError(\n '未找到挂载容器',\n undefined,\n { container: options.container },\n ErrorCode.CONTAINER_NOT_FOUND\n );\n }\n\n logger.info('框架启动中...');\n\n if (options.antd && !options.uiProvider) {\n logger.warn('[deprecated] StartOptions.antd 即将废弃,请迁移到 StartOptions.uiProvider');\n }\n if (options.antdApp && !options.uiApp) {\n logger.warn('[deprecated] StartOptions.antdApp 即将废弃,请迁移到 StartOptions.uiApp');\n }\n\n // 2. 创建应用实例\n const appInstance = instanceManager.createInstance(instanceId, options);\n const finalInstanceId = appInstance.id;\n let services: ServicesInitResult | null = null;\n\n // 使用单次 Promise 防止重复初始化,提升加载速度并保证可观测数据一致。\n let servicesInitPromise: Promise<ServicesInitResult> | null = null;\n const ensureServicesInitialized = async (): Promise<ServicesInitResult> => {\n if (services) {\n return services;\n }\n if (!servicesInitPromise) {\n servicesInitPromise = initializeServices({\n ...options,\n eventBus: {\n ...options.eventBus,\n instanceId: finalInstanceId,\n },\n });\n }\n services = await servicesInitPromise;\n return services;\n };\n\n // 3. 使用无 UI Kernel 管理启动阶段(配置、主题、i18n、服务注入、统一错误处理)\n const kernelRuntime = await startKernel({\n loggerLevel: options.loggerLevel,\n locale: {\n locale: (options.locale ? (Object.keys(options.locale)[0] as any) : 'zh-CN') || 'zh-CN',\n resources: options.locale as any,\n },\n theme: {\n mode: options.theme?.mode || 'light',\n primaryColor: options.theme?.primaryColor,\n compatibility: {\n antd: (options.uiProvider || options.antd) as unknown as Record<string, unknown> | undefined,\n },\n },\n adapters: {\n monitoring: {\n initialize: async () => {\n await ensureServicesInitialized();\n },\n captureError: (error, metadata) => {\n if (services) {\n services.monitoring.captureError(error, metadata);\n } else {\n logger.error('Kernel 监控上报失败(服务尚未初始化):', error, metadata);\n }\n },\n reportMetric: (name, value, tags) => {\n logger.debug(`[kernel.metric] ${name}`, { value, tags, instanceId: finalInstanceId });\n },\n },\n state: {\n initialize: async () => {\n await ensureServicesInitialized();\n },\n getInstance: () => services?.stateManager ?? null,\n },\n eventBus: {\n initialize: async () => {\n await ensureServicesInitialized();\n },\n emit: (event, payload) => {\n if (services) {\n services.eventBus.emit(event as any, payload as any);\n }\n },\n on: (event, handler) => {\n if (!services) {\n return () => {};\n }\n return services.eventBus.on(event as any, handler as any);\n },\n },\n errorHandler: {\n async handle(error) {\n logger.error('Kernel 启动阶段失败:', error);\n return { handled: true, shouldThrow: true };\n },\n },\n },\n enabledPhases: {\n init: false,\n },\n enablePostReady: false,\n });\n kernelTraceId = kernelRuntime.traceId;\n\n const servicesInitStart = performance.now();\n const resolvedServices = await ensureServicesInitialized();\n const servicesInitDuration = performance.now() - servicesInitStart;\n\n // 创建框架事件管理器\n frameworkEventManager = new FrameworkEventManager(resolvedServices.eventBus);\n\n // 触发应用启动事件(使用真实的事件总线)\n frameworkEventManager.emitAppStart(finalInstanceId);\n\n // 触发实例创建事件\n frameworkEventManager.emitInstanceCreated(finalInstanceId);\n\n // 4. 初始化应用实例\n appInstance.initialize(container, resolvedServices);\n\n // 5. 初始化路由管理器\n const routerManager = getRouterManager();\n if (options.router) {\n await routerManager.initialize(options.router);\n }\n\n // 6. 性能追踪\n const performanceTracker = appInstance.getPerformanceTracker();\n if (performanceTracker) {\n performanceTracker.recordServiceInit(servicesInitDuration);\n }\n\n // 6. 是否显示启动页\n const shouldShowSplash = shouldShowSplashScreen(options.showSplashScreen);\n\n const renderer = appInstance.getRenderer();\n\n // 8. 渲染应用函数\n const renderApp = async (context?: Awaited<ReturnType<typeof initialization>>) => {\n const renderStart = performance.now();\n\n // 触发渲染开始事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppRenderStart(finalInstanceId);\n }\n\n await renderer.renderApp(options, resolvedServices, context);\n const renderDuration = performance.now() - renderStart;\n\n // 触发渲染完成事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppRenderComplete(finalInstanceId, renderDuration);\n }\n\n // 优化:在应用渲染完成后,延迟初始化非关键服务\n // 使用 requestIdleCallback 在浏览器空闲时初始化,不影响用户体验\n if (resolvedServices.initializeNonCriticalServices) {\n resolvedServices.initializeNonCriticalServices().catch((error) => {\n logger.warn('非关键服务初始化失败(不影响应用运行):', error);\n });\n }\n\n if (performanceTracker) {\n performanceTracker.recordFirstRender(renderDuration);\n const totalDuration = performance.now() - startTime;\n performanceTracker.recordTotalStartup(totalDuration);\n performanceTracker.report();\n }\n\n // 触发应用启动完成事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppStarted(finalInstanceId, performance.now() - startTime);\n }\n\n // 统一发出 Kernel post-ready 事件,供可观测系统消费。\n kernelRuntime.getEventBus().emit('kernel.postReady', {\n traceId: kernelRuntime.traceId,\n instanceId: finalInstanceId,\n startupDuration: performance.now() - startTime,\n });\n\n // 开发模式下显示开发工具\n if (process.env.NODE_ENV === 'development' && typeof window !== 'undefined') {\n // 延迟显示开发工具,避免影响首次渲染\n setTimeout(() => {\n const devToolsContainer = document.createElement('div');\n devToolsContainer.id = '__framework_dev_tools__';\n document.body.appendChild(devToolsContainer);\n\n // 这里需要动态导入React来渲染开发工具\n // 为了简化,暂时注释掉,后续可以完善\n // import('react-dom/client').then(({ createRoot }) => {\n // const root = createRoot(devToolsContainer);\n // root.render(<DevToolsTrigger appInstance={appInstance} />);\n // });\n }, 1000);\n }\n };\n\n if (shouldShowSplash) {\n // 场景1: 显示启动页,初始化在启动页中完成\n const onSplashComplete = (context: Awaited<ReturnType<typeof initialization>>) => {\n logger.info('启动页初始化完成');\n\n // 触发初始化完成事件\n if (frameworkEventManager) {\n const initDuration = context.duration || 0;\n frameworkEventManager.emitAppInitComplete(finalInstanceId, context, initDuration);\n }\n\n if (options.onSplashComplete) {\n Promise.resolve(\n options.onSplashComplete(() => {\n logger.info('框架加载完成');\n renderApp(context);\n }, context)\n ).catch((error) => {\n logger.error('onSplashComplete 回调执行失败:', error);\n initializationErrorState.setError(error);\n renderApp(context);\n });\n } else {\n logger.info('框架加载完成');\n renderApp(context);\n }\n };\n\n // 触发初始化开始事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppInitStart(finalInstanceId);\n }\n\n // 渲染启动页\n renderer.renderSplashScreen(options, resolvedServices, onSplashComplete);\n } else {\n // 场景2: 不显示启动页,直接执行初始化\n logger.info('开始执行初始化(无启动页)');\n\n // 触发初始化开始事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppInitStart(finalInstanceId);\n }\n\n try {\n const initStart = performance.now();\n\n // 使用中间件包装初始化函数\n const initContext = await middlewareManager.execute(\n options,\n async () => {\n return await initialization(options, (progress, step) => {\n logger.debug(`初始化进度: ${progress}%${step ? ` - ${step}` : ''}`);\n });\n }\n );\n\n const initDuration = performance.now() - initStart;\n\n // 触发初始化完成事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppInitComplete(finalInstanceId, initContext, initDuration);\n }\n\n if (performanceTracker) {\n performanceTracker.recordInitialization(initDuration);\n }\n\n logger.info('初始化完成(无启动页)', initContext);\n logger.info('框架加载完成');\n void renderApp(initContext);\n } catch (error) {\n logger.error('初始化失败:', error);\n\n // 触发初始化错误事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppInitError(\n finalInstanceId,\n error instanceof Error ? error : new Error(String(error))\n );\n }\n\n initializationErrorState.setError(error);\n void renderApp();\n }\n }\n\n return instanceManager;\n } catch (error) {\n logger.error('框架启动失败:', error);\n\n // 触发错误事件\n if (frameworkEventManager) {\n const errorInstanceId = instanceId || instanceManager.getInstance()?.id;\n if (errorInstanceId) {\n frameworkEventManager.emitErrorOccurred(\n error instanceof Error ? error : new Error(String(error)),\n { phase: 'startup' }\n );\n }\n }\n\n if (kernelTraceId) {\n logger.error('Kernel Trace 失败上下文', { traceId: kernelTraceId });\n }\n\n // 如果容器存在,尝试渲染错误页面\n const container = options.container || envDetector.safeGetElement('#root');\n if (container) {\n const errorInstance = instanceManager.getInstance();\n if (errorInstance && errorInstance.isInitialized()) {\n const renderer = errorInstance.getRenderer();\n const services = errorInstance.getServices();\n initializationErrorState.setError(error);\n renderer.renderError(options, services);\n }\n }\n\n throw error;\n }\n}\n"],"names":["startApp","options","instanceId","startTime","performance","now","envDetector","getEnvironmentDetector","instanceManager","getAppInstanceManager","initTraceIdGenerator","traceId","generateTraceId","setCurrentTraceId","frameworkEventManager","kernelTraceId","container","safeGetElement","InitializationError","undefined","ErrorCode","CONTAINER_NOT_FOUND","logger","info","antd","uiProvider","warn","antdApp","uiApp","appInstance","createInstance","finalInstanceId","id","services","servicesInitPromise","ensureServicesInitialized","initializeServices","eventBus","kernelRuntime","startKernel","loggerLevel","locale","Object","keys","resources","theme","mode","primaryColor","compatibility","adapters","monitoring","initialize","captureError","error","metadata","reportMetric","name","value","tags","debug","state","getInstance","stateManager","emit","event","payload","on","handler","errorHandler","handle","handled","shouldThrow","enabledPhases","init","enablePostReady","servicesInitStart","resolvedServices","servicesInitDuration","FrameworkEventManager","emitAppStart","emitInstanceCreated","routerManager","getRouterManager","router","performanceTracker","getPerformanceTracker","recordServiceInit","shouldShowSplash","shouldShowSplashScreen","showSplashScreen","renderer","getRenderer","renderApp","context","renderStart","emitAppRenderStart","renderDuration","emitAppRenderComplete","initializeNonCriticalServices","catch","recordFirstRender","totalDuration","recordTotalStartup","report","emitAppStarted","getEventBus","startupDuration","process","env","NODE_ENV","window","setTimeout","devToolsContainer","document","createElement","body","appendChild","onSplashComplete","initDuration","duration","emitAppInitComplete","Promise","resolve","initializationErrorState","setError","emitAppInitStart","renderSplashScreen","initStart","initContext","middlewareManager","execute","initialization","progress","step","recordInitialization","emitAppInitError","Error","String","errorInstanceId","emitErrorOccurred","phase","errorInstance","isInitialized","getServices","renderError"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/core/startup/startApp.ts"],"sourcesContent":["/**\n * 应用启动主函数\n * 重构后的启动逻辑,集成所有新功能\n */\n\nimport { logger } from '@vlian/logger';\nimport { ErrorCode, InitializationError } from '@vlian/utils';\nimport { initTraceIdGenerator, generateTraceId, setCurrentTraceId } from '../../utils/traceId';\nimport type { StartOptions } from '../types';\nimport { shouldShowSplashScreen } from '../splash';\nimport { initialization, initializationErrorState } from '../initialization/index';\nimport { middlewareManager } from '../middleware';\nimport { initializeServices } from './initializeServices';\nimport type { ServicesInitResult } from './initializeServices';\nimport { AppInstanceManager, getAppInstanceManager } from './AppInstance';\nimport { getEnvironmentDetector } from './environment';\nimport { getRouterManager } from '../router/RouterManager';\nimport { FrameworkEventManager } from '../event/frameworkEvents';\nimport { startKernel } from '../kernel';\n\n/**\n * 启动应用\n *\n * @param options - 启动配置选项\n * @param instanceId - 应用实例ID(可选,用于多实例场景)\n * @returns 应用实例\n */\nexport async function startApp(\n options: StartOptions = {},\n instanceId?: string\n): Promise<AppInstanceManager> {\n const startTime = performance.now();\n const envDetector = getEnvironmentDetector();\n const instanceManager = getAppInstanceManager();\n\n // 初始化追踪 ID 生成器\n initTraceIdGenerator('app');\n const traceId = generateTraceId();\n setCurrentTraceId(traceId);\n\n // 框架事件管理器(在服务初始化后创建)\n let frameworkEventManager: FrameworkEventManager | null = null;\n let kernelTraceId: string | null = null;\n\n try {\n // 1. 环境检测和容器获取\n const container = options.container || envDetector.safeGetElement('#root');\n if (!container) {\n throw new InitializationError(\n '未找到挂载容器',\n undefined,\n { container: options.container },\n ErrorCode.CONTAINER_NOT_FOUND\n );\n }\n\n logger.info('框架启动中...');\n\n if (options.antd && !options.uiProvider) {\n logger.warn('[deprecated] StartOptions.antd 即将废弃,请迁移到 StartOptions.uiProvider');\n }\n if (options.antdApp && !options.uiApp) {\n logger.warn('[deprecated] StartOptions.antdApp 即将废弃,请迁移到 StartOptions.uiApp');\n }\n\n // 2. 创建应用实例\n const appInstance = instanceManager.createInstance(instanceId, options);\n const finalInstanceId = appInstance.id;\n let services: ServicesInitResult | null = null;\n\n // 使用单次 Promise 防止重复初始化,提升加载速度并保证可观测数据一致。\n let servicesInitPromise: Promise<ServicesInitResult> | null = null;\n const ensureServicesInitialized = async (): Promise<ServicesInitResult> => {\n if (services) {\n return services;\n }\n if (!servicesInitPromise) {\n servicesInitPromise = initializeServices({\n ...options,\n eventBus: {\n ...options.eventBus,\n instanceId: finalInstanceId,\n },\n });\n }\n services = await servicesInitPromise;\n return services;\n };\n\n // 3. 使用无 UI Kernel 管理启动阶段(配置、主题、i18n、服务注入、统一错误处理)\n const kernelRuntime = await startKernel({\n loggerLevel: options.loggerLevel,\n locale: {\n locale: (options.locale ? (Object.keys(options.locale)[0] as any) : 'zh-CN') || 'zh-CN',\n resources: options.locale as any,\n },\n theme: {\n mode: options.theme?.mode || 'light',\n primaryColor: options.theme?.primaryColor,\n compatibility: {\n antd: (options.uiProvider || options.antd) as unknown as Record<string, unknown> | undefined,\n },\n },\n adapters: {\n monitoring: {\n initialize: async () => {\n await ensureServicesInitialized();\n },\n captureError: (error, metadata) => {\n if (services) {\n services.monitoring.captureError(error, metadata);\n } else {\n logger.error('Kernel 监控上报失败(服务尚未初始化):', error, metadata);\n }\n },\n reportMetric: (name, value, tags) => {\n logger.debug(`[kernel.metric] ${name}`, { value, tags, instanceId: finalInstanceId });\n },\n },\n state: {\n initialize: async () => {\n await ensureServicesInitialized();\n },\n getInstance: () => services?.stateManager ?? null,\n },\n eventBus: {\n initialize: async () => {\n await ensureServicesInitialized();\n },\n emit: (event, payload) => {\n if (services) {\n services.eventBus.emit(event as any, payload as any);\n }\n },\n on: (event, handler) => {\n if (!services) {\n return () => {};\n }\n return services.eventBus.on(event as any, handler as any);\n },\n },\n errorHandler: {\n async handle(error) {\n logger.error('Kernel 启动阶段失败:', error);\n return { handled: true, shouldThrow: true };\n },\n },\n },\n enabledPhases: {\n init: false,\n },\n enablePostReady: false,\n });\n kernelTraceId = kernelRuntime.traceId;\n\n const servicesInitStart = performance.now();\n const resolvedServices = await ensureServicesInitialized();\n const servicesInitDuration = performance.now() - servicesInitStart;\n\n // 创建框架事件管理器\n frameworkEventManager = new FrameworkEventManager(resolvedServices.eventBus);\n\n // 触发应用启动事件(使用真实的事件总线)\n frameworkEventManager.emitAppStart(finalInstanceId);\n\n // 触发实例创建事件\n frameworkEventManager.emitInstanceCreated(finalInstanceId);\n\n // 4. 初始化应用实例\n appInstance.initialize(container, resolvedServices);\n\n // 5. 初始化路由管理器\n const routerManager = getRouterManager();\n if (options.router) {\n await routerManager.initialize(options.router);\n }\n\n // 6. 性能追踪\n const performanceTracker = appInstance.getPerformanceTracker();\n if (performanceTracker) {\n performanceTracker.recordServiceInit(servicesInitDuration);\n }\n\n // 6. 是否显示启动页\n const shouldShowSplash = shouldShowSplashScreen(options.showSplashScreen);\n\n const renderer = appInstance.getRenderer();\n\n // 8. 渲染应用函数\n const renderApp = async (context?: Awaited<ReturnType<typeof initialization>>) => {\n const renderStart = performance.now();\n\n // 触发渲染开始事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppRenderStart(finalInstanceId);\n }\n\n await renderer.renderApp(options, resolvedServices, context);\n const renderDuration = performance.now() - renderStart;\n\n // 触发渲染完成事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppRenderComplete(finalInstanceId, renderDuration);\n }\n\n // 优化:在应用渲染完成后,延迟初始化非关键服务\n // 使用 requestIdleCallback 在浏览器空闲时初始化,不影响用户体验\n if (resolvedServices.initializeNonCriticalServices) {\n resolvedServices.initializeNonCriticalServices().catch((error) => {\n logger.warn('非关键服务初始化失败(不影响应用运行):', error);\n });\n }\n\n if (performanceTracker) {\n performanceTracker.recordFirstRender(renderDuration);\n const totalDuration = performance.now() - startTime;\n performanceTracker.recordTotalStartup(totalDuration);\n performanceTracker.report();\n }\n\n // 触发应用启动完成事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppStarted(finalInstanceId, performance.now() - startTime);\n }\n\n // 统一发出 Kernel post-ready 事件,供可观测系统消费。\n kernelRuntime.getEventBus().emit('kernel.postReady', {\n traceId: kernelRuntime.traceId,\n instanceId: finalInstanceId,\n startupDuration: performance.now() - startTime,\n });\n\n // 开发模式下显示开发工具\n if (process.env.NODE_ENV === 'development' && typeof window !== 'undefined') {\n // 延迟显示开发工具,避免影响首次渲染\n setTimeout(() => {\n const devToolsContainer = document.createElement('div');\n devToolsContainer.id = '__framework_dev_tools__';\n document.body.appendChild(devToolsContainer);\n\n // 这里需要动态导入React来渲染开发工具\n // 为了简化,暂时注释掉,后续可以完善\n // import('react-dom/client').then(({ createRoot }) => {\n // const root = createRoot(devToolsContainer);\n // root.render(<DevToolsTrigger appInstance={appInstance} />);\n // });\n }, 1000);\n }\n };\n\n if (shouldShowSplash) {\n // 场景1: 显示启动页,初始化在启动页中完成\n const onSplashComplete = (context: Awaited<ReturnType<typeof initialization>>) => {\n logger.info('启动页初始化完成');\n\n // 触发初始化完成事件\n if (frameworkEventManager) {\n const initDuration = context.duration || 0;\n frameworkEventManager.emitAppInitComplete(finalInstanceId, context, initDuration);\n }\n\n if (options.onSplashComplete) {\n Promise.resolve(\n options.onSplashComplete(() => {\n logger.info('框架加载完成');\n renderApp(context);\n }, context)\n ).catch((error) => {\n logger.error('onSplashComplete 回调执行失败:', error);\n initializationErrorState.setError(error);\n renderApp(context);\n });\n } else {\n logger.info('框架加载完成');\n renderApp(context);\n }\n };\n\n // 触发初始化开始事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppInitStart(finalInstanceId);\n }\n\n // 渲染启动页\n renderer.renderSplashScreen(options, resolvedServices, onSplashComplete);\n } else {\n // 场景2: 不显示启动页,直接执行初始化\n logger.info('开始执行初始化(无启动页)');\n\n // 触发初始化开始事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppInitStart(finalInstanceId);\n }\n\n try {\n const initStart = performance.now();\n\n // 使用中间件包装初始化函数\n const initContext = await middlewareManager.execute(\n options,\n async () => {\n return await initialization(options, (progress, step) => {\n logger.debug(`初始化进度: ${progress}%${step ? ` - ${step}` : ''}`);\n });\n }\n );\n\n const initDuration = performance.now() - initStart;\n\n // 触发初始化完成事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppInitComplete(finalInstanceId, initContext, initDuration);\n }\n\n if (performanceTracker) {\n performanceTracker.recordInitialization(initDuration);\n }\n\n logger.info('初始化完成(无启动页)', initContext);\n logger.info('框架加载完成');\n void renderApp(initContext);\n } catch (error) {\n logger.error('初始化失败:', error);\n\n // 触发初始化错误事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppInitError(\n finalInstanceId,\n error instanceof Error ? error : new Error(String(error))\n );\n }\n\n initializationErrorState.setError(error);\n void renderApp();\n }\n }\n\n return instanceManager;\n } catch (error) {\n logger.error('框架启动失败:', error);\n\n // 触发错误事件\n if (frameworkEventManager) {\n const errorInstanceId = instanceId || instanceManager.getInstance()?.id;\n if (errorInstanceId) {\n frameworkEventManager.emitErrorOccurred(\n error instanceof Error ? error : new Error(String(error)),\n { phase: 'startup' }\n );\n }\n }\n\n if (kernelTraceId) {\n logger.error('Kernel Trace 失败上下文', { traceId: kernelTraceId });\n }\n\n // 如果容器存在,尝试渲染错误页面\n const container = options.container || envDetector.safeGetElement('#root');\n if (container) {\n const errorInstance = instanceManager.getInstance();\n if (errorInstance && errorInstance.isInitialized()) {\n const renderer = errorInstance.getRenderer();\n const services = errorInstance.getServices();\n initializationErrorState.setError(error);\n renderer.renderError(options, services);\n }\n }\n\n throw error;\n }\n}\n"],"names":["logger","ErrorCode","InitializationError","initTraceIdGenerator","generateTraceId","setCurrentTraceId","shouldShowSplashScreen","initialization","initializationErrorState","middlewareManager","initializeServices","getAppInstanceManager","getEnvironmentDetector","getRouterManager","FrameworkEventManager","startKernel","startApp","options","instanceId","startTime","performance","now","envDetector","instanceManager","traceId","frameworkEventManager","kernelTraceId","container","safeGetElement","undefined","CONTAINER_NOT_FOUND","info","antd","uiProvider","warn","antdApp","uiApp","appInstance","createInstance","finalInstanceId","id","services","servicesInitPromise","ensureServicesInitialized","eventBus","kernelRuntime","loggerLevel","locale","Object","keys","resources","theme","mode","primaryColor","compatibility","adapters","monitoring","initialize","captureError","error","metadata","reportMetric","name","value","tags","debug","state","getInstance","stateManager","emit","event","payload","on","handler","errorHandler","handle","handled","shouldThrow","enabledPhases","init","enablePostReady","servicesInitStart","resolvedServices","servicesInitDuration","emitAppStart","emitInstanceCreated","routerManager","router","performanceTracker","getPerformanceTracker","recordServiceInit","shouldShowSplash","showSplashScreen","renderer","getRenderer","renderApp","context","renderStart","emitAppRenderStart","renderDuration","emitAppRenderComplete","initializeNonCriticalServices","catch","recordFirstRender","totalDuration","recordTotalStartup","report","emitAppStarted","getEventBus","startupDuration","process","env","NODE_ENV","window","setTimeout","devToolsContainer","document","createElement","body","appendChild","onSplashComplete","initDuration","duration","emitAppInitComplete","Promise","resolve","setError","emitAppInitStart","renderSplashScreen","initStart","initContext","execute","progress","step","recordInitialization","emitAppInitError","Error","String","errorInstanceId","emitErrorOccurred","phase","errorInstance","isInitialized","getServices","renderError"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/core/types.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/core/types.ts"],"sourcesContent":["import { LogLevel } from '@vlian/logger';\nimport type { LangType } from '../library/locale/types';\nimport { Container, RootOptions } from 'react-dom/client';\nimport { type ComponentType, type PropsWithChildren, type ReactElement, type ReactNode } from 'react';\nimport { type InitializationContext } from './initialization';\nimport type { StorageOptions } from '../types';\nimport type { ThemeConfig } from './app';\nimport type { FrameworkError } from '@vlian/utils';\nimport type { RouterConfig } from './router/types';\n\nexport type UIProviderConfig = Record<string, unknown>;\nexport type UIAppConfig = Record<string, unknown>;\nexport type GlobalProviderComponent = ComponentType<PropsWithChildren>;\nexport type GlobalProviderLoader = () => Promise<{ default: GlobalProviderComponent }>;\n\n/**\n * 生命周期钩子函数类型\n */\nexport type ManagerLifecycle = {\n /**\n * 在初始化之前执行\n */\n beforeInitialization?: () => Promise<void> | void;\n\n /**\n * 初始化\n */\n initialization?: () => Promise<void> | void;\n\n /**\n * 在初始化之后执行\n * \n * @param context - 初始化上下文,包含配置、进度、耗时等信息\n * \n * @example\n * ```typescript\n * start({\n * lifecycle: {\n * afterInitialization: (context) => {\n * console.log('初始化完成', context);\n * },\n * },\n * });\n * ```\n */\n afterInitialization?: (context: InitializationContext) => Promise<void> | void;\n};\n\n\n/**\n * 启动配置选项\n */\nexport interface StartOptions {\n /**\n * React 应用的挂载容器\n * \n * 用于指定 React 应用渲染的目标 DOM 元素。如果不提供,框架将自动查找页面中\n * 的根元素(通常为 id=\"root\" 的元素)作为默认容器。\n * \n * @example\n * ```typescript\n * import { start } from '@vlian/framework';\n * \n * // 使用默认容器(自动查找 id=\"root\" 的元素)\n * start({});\n * \n * // 指定自定义容器\n * const container = document.getElementById('app');\n * start({ container });\n * ```\n */\n container?: Container;\n /**\n * React 根节点的配置选项\n * \n * 用于配置 React 18+ 的 createRoot 方法的选项,包括:\n * - `onRecoverableError`: 错误恢复回调函数\n * - `identifierPrefix`: 用于标识符前缀,用于服务端渲染的 hydration\n * \n * 这些选项将传递给 `react-dom/client` 的 `createRoot` 方法。\n * \n * @example\n * ```typescript\n * import { start } from '@vlian/framework';\n * \n * start({\n * rootOptions: {\n * onRecoverableError: (error) => {\n * console.error('React 错误恢复:', error);\n * },\n * identifierPrefix: 'my-app-',\n * },\n * });\n * ```\n */\n rootOptions?: RootOptions;\n /**\n * 应用根组件\n * \n * 用于指定要渲染的 React 应用根组件。\n * \n * @example\n * ```typescript\n * import { start } from '@vlian/framework';\n * import App from './App';\n * \n * start({\n * app: <App />,\n * });\n * ```\n */\n app?: ReactElement;\n /**\n * 是否显示启动页\n * - 'auto': 自动判断(推荐)\n * - 'always': 总是显示\n * - 'never': 从不显示\n * - 'first-time-only': 仅首次加载显示\n * \n * @default 'auto'\n */\n showSplashScreen?: 'auto' | 'always' | 'never' | 'first-time-only';\n\n /**\n * 启动页最小显示时间(毫秒)\n * \n * 用于避免启动页闪烁,确保用户能看到启动过程。\n * 如果初始化完成时间小于此值,将等待至最小时间后再隐藏启动页。\n * \n * @default 500\n * \n * @example\n * ```typescript\n * start({\n * minSplashScreenTime: 1000, // 至少显示 1 秒\n * });\n * ```\n */\n minSplashScreenTime?: number;\n\n /**\n * 路由配置\n * \n * 配置应用的路由系统,支持内置路由、自定义路由和禁用路由三种模式。\n * \n * @example\n * ```typescript\n * start({\n * router: {\n * enabled: true,\n * routes: [\n * {\n * path: '/login',\n * page: LoginPage,\n * },\n * {\n * path: '/',\n * layout: MainLayout,\n * children: [\n * {\n * path: 'dashboard',\n * page: DashboardPage,\n * meta: { title: '仪表盘' },\n * },\n * ],\n * },\n * ],\n * },\n * });\n * ```\n */\n router?: RouterConfig;\n /**\n * 日志级别\n */\n loggerLevel?: LogLevel;\n /**\n * 生命周期钩子\n */\n lifecycle?: ManagerLifecycle;\n /**\n * 国际化\n */\n locale?: Record<LangType, Record<string, unknown>>;\n /**\n * 启动页完成回调\n * 仅在显示启动页时,启动页完成初始化后调用\n * 可以在这里执行额外的操作,然后调用 complete() 继续\n * \n * @example\n * ```typescript\n * start({\n * onSplashComplete: (complete, context) => {\n * // 执行额外操作\n * await doSomething();\n * // 完成后继续\n * complete();\n * },\n * });\n * ```\n */\n onSplashComplete?: (\n complete: () => void,\n context: InitializationContext\n ) => Promise<void> | void;\n\n /**\n * 存储配置\n */\n storageOptions?: StorageOptions;\n\n /**\n * IndexedDB 表名\n */\n indexedDBTableName?: string;\n\n /**\n * UI Provider 配置(框架无关)\n * 可由 UI 适配器消费,适配到 antd/shadcn 等实现。\n */\n uiProvider?: UIProviderConfig;\n\n /**\n * UI App 基础配置(框架无关)\n * 可用于通知、弹窗、消息容器等能力的统一注入。\n */\n uiApp?: UIAppConfig;\n\n /**\n * 全局 UI 包裹组件懒加载器\n * \n * 组件会在 BasicLayout 中统一包裹 children。\n * 需返回带 default 导出的 React 组件模块。\n *\n * @example\n * ```typescript\n * start({\n * globalProvider: () => import('./components/AntdGlobalProvider'),\n * });\n * ```\n */\n globalProvider?: GlobalProviderLoader;\n\n /**\n * @deprecated 使用 uiProvider 替代\n */\n antd?: Record<string, unknown>;\n\n /**\n * @deprecated 使用 uiApp 替代\n */\n antdApp?: Record<string, unknown>;\n\n /**\n * 主题配置\n * \n * @example\n * ```typescript\n * start({\n * theme: {\n * mode: 'dark',\n * primaryColor: '#1890ff',\n * },\n * });\n * ```\n */\n theme?: ThemeConfig;\n\n /**\n * 运行时安全配置\n */\n runtimeSecurity?: import('../utils/runtimeSecurity').RuntimeSecurityOptions;\n\n /**\n * 配置安全选项\n */\n configSecurity?: import('../utils/configSecurity').ConfigSecurityOptions;\n\n /**\n * 性能监控配置\n */\n performanceMonitor?: import('../utils/performance').PerformanceMonitorConfig;\n\n /**\n * 错误监控配置\n */\n errorMonitor?: import('@vlian/monitoring').ErrorMonitorConfig;\n\n /**\n * 分析服务配置\n */\n analytics?: import('../utils/analytics').AnalyticsConfig;\n\n /**\n * 状态管理器配置\n * \n * 配置框架的状态管理器,支持自定义适配器和作用域设置。\n * 如果不提供,将使用默认配置创建状态管理器。\n * \n * @example\n * ```typescript\n * import { start } from '@vlian/framework';\n * \n * start({\n * stateManager: {\n * enableRegistry: true,\n * defaultScope: 'app',\n * devMode: true,\n * },\n * });\n * ```\n */\n stateManager?: import('../state').StateManagerOptions;\n\n /**\n * 事件总线配置\n * \n * 配置应用级事件系统,支持事件追踪、性能监控、安全模式等。\n * 如果不提供,将使用默认配置创建事件总线。\n * \n * @example\n * ```typescript\n * import { start } from '@vlian/framework';\n * \n * start({\n * eventBus: {\n * enableTracking: true,\n * maxHistorySize: 200,\n * enablePerformanceMonitoring: true,\n * namespacePrefix: 'my-app:',\n * },\n * });\n * ```\n */\n eventBus?: {\n enableTracking?: boolean;\n maxHistorySize?: number;\n enableValidation?: boolean;\n validator?: (event: string, data: unknown) => boolean;\n enablePerformanceMonitoring?: boolean;\n namespacePrefix?: string;\n instanceId?: string;\n enableSecurityMode?: boolean;\n allowedSources?: string[];\n };\n\n /**\n * 自定义启动屏组件\n * \n * 如果提供,将使用自定义组件替代默认的启动屏 UI。\n * 自定义组件将接收初始化进度、当前步骤和初始化状态作为 props。\n * \n * @example\n * ```typescript\n * import { start } from '@vlian/framework';\n * \n * const CustomSplashScreen = ({ progress, currentStep, isInitializing }) => {\n * return (\n * <div>\n * <h1>加载中...</h1>\n * <div>进度: {progress}%</div>\n * <div>步骤: {currentStep}</div>\n * </div>\n * );\n * };\n * \n * start({\n * splashScreen: CustomSplashScreen,\n * });\n * ```\n */\n splashScreen?: React.ComponentType<SplashScreenCustomProps>;\n\n /**\n * 自定义错误反馈组件\n * \n * 如果提供,将使用自定义的错误 UI 替代默认错误 UI。\n * 自定义组件将接收错误对象和重置函数作为参数。\n * \n * @param error - 标准化后的框架错误对象\n * @param resetError - 重置错误边界的函数,调用后可以尝试重新渲染子组件\n * @returns 错误 UI 的 React 节点\n * \n * @example\n * ```typescript\n * import { start } from '@vlian/framework';\n * start({\n * errorFallback: (error, reset) => (\n * <div>\n * <h2>自定义错误标题</h2>\n * <p>{error.message}</p>\n * <button onClick={reset}>重试</button>\n * </div>\n * ),\n * });\n * ```\n */\n errorFallback?: (error: FrameworkError, resetError: () => void) => ReactNode;\n\n /**\n * 安全配置选项\n * \n * 用于配置框架的安全策略,包括 XSS 防护、配置验证等。\n * 框架默认启用所有安全策略,确保应用安全。\n * \n * @example\n * ```typescript\n * start({\n * security: {\n * enableXSSProtection: true, // 默认启用\n * validateConfig: true, // 默认启用\n * sanitizeUserInput: true, // 默认启用\n * },\n * });\n * ```\n */\n security?: {\n /**\n * 是否启用 XSS 防护\n * @default true\n */\n enableXSSProtection?: boolean;\n /**\n * 是否验证配置项安全性\n * @default true\n */\n validateConfig?: boolean;\n /**\n * 是否清理用户输入\n * @default true\n */\n sanitizeUserInput?: boolean;\n /**\n * CSP(内容安全策略)配置\n */\n csp?: {\n defaultSrc?: string[];\n scriptSrc?: string[];\n styleSrc?: string[];\n imgSrc?: string[];\n connectSrc?: string[];\n fontSrc?: string[];\n frameSrc?: string[];\n allowUnsafeInline?: boolean;\n allowUnsafeEval?: boolean;\n };\n /**\n * CSRF 防护配置\n */\n csrf?: {\n /**\n * 是否启用 CSRF 防护\n * @default true\n */\n enabled?: boolean;\n /**\n * CSRF Token 获取函数\n * 如果不提供,框架会自动从 cookie 或 header 中获取\n */\n getToken?: () => string | Promise<string>;\n /**\n * CSRF Token 验证函数\n * 如果不提供,框架会使用默认验证逻辑\n */\n validateToken?: (token: string) => boolean | Promise<boolean>;\n /**\n * CSRF Token 请求头名称\n * @default 'X-CSRF-Token'\n */\n headerName?: string;\n /**\n * CSRF Token Cookie 名称\n * @default 'csrf-token'\n */\n cookieName?: string;\n };\n };\n \n /**\n * 服务初始化重试配置\n * \n * 用于配置服务初始化失败时的重试策略。\n * \n * @example\n * ```typescript\n * start({\n * serviceRetry: {\n * maxRetries: 3,\n * retryDelay: 1000,\n * exponentialBackoff: true,\n * },\n * });\n * ```\n */\n serviceRetry?: {\n /**\n * 最大重试次数\n * @default 3\n */\n maxRetries?: number;\n /**\n * 重试延迟(毫秒)\n * @default 1000\n */\n retryDelay?: number;\n /**\n * 是否启用指数退避\n * @default true\n */\n exponentialBackoff?: boolean;\n };\n}\n\n/**\n * 自定义启动屏组件的 Props\n */\nexport interface SplashScreenCustomProps {\n /**\n * 初始化进度(0-100)\n */\n progress: number;\n\n /**\n * 当前步骤描述\n */\n currentStep: string;\n\n /**\n * 是否正在初始化\n */\n isInitializing: boolean;\n}\n"],"names":[],"mappings":"AAigBA;;CAEC,GACD,WAeC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { setupI18n, setLang, $t } from './library';\n\nexport * from './core';\nexport * from './utils';\nexport * from './state';\nexport * from './components';\n\n/**\n * 国际化\n **/\nexport { setupI18n, setLang, $t };\n\n\nexport { Kernel, startup, getKernel, kernelStartApp } from './kernel';\nexport type {\n KernelStartOptions as KernelStartupOptions,\n KernelConfig as KernelRuntimeConfig,\n KernelTimingMetric as KernelRuntimeTimingMetric,\n KernelManager as RuntimeKernelManager,\n KernelRenderContext\n} from './kernel';\n"],"names":["$t","Kernel","getKernel","kernelStartApp","setLang","setupI18n","startup"],"mappings":";;;;;;;;;;;QAU6BA;eAAAA,WAAE;;QAGtBC;eAAAA,cAAM;;QAAWC;eAAAA,iBAAS;;QAAEC;eAAAA,sBAAc;;QAH/BC;eAAAA,gBAAO;;QAAlBC;eAAAA,kBAAS;;QAGDC;eAAAA,eAAO;;;yBAbe;qBAEzB;qBACA;qBACA;qBACA;wBAQ6C"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { setupI18n, setLang, $t } from './library';\n\nexport * from './core';\nexport * from './utils';\nexport * from './state';\nexport * from './components';\n\n/**\n * 国际化\n **/\nexport { setupI18n, setLang, $t };\n\n\nexport { Kernel, startup, getKernel, kernelStartApp } from './kernel';\nexport type {\n KernelStartOptions as KernelStartupOptions,\n KernelConfig as KernelRuntimeConfig,\n KernelTimingMetric as KernelRuntimeTimingMetric,\n KernelManager as RuntimeKernelManager,\n KernelRenderContext\n} from './kernel';\n"],"names":["setupI18n","setLang","$t","Kernel","startup","getKernel","kernelStartApp"],"mappings":"AAAA,SAASA,SAAS,EAAEC,OAAO,EAAEC,EAAE,QAAQ,YAAY;AAEnD,cAAc,SAAS;AACvB,cAAc,UAAU;AACxB,cAAc,UAAU;AACxB,cAAc,eAAe;AAE7B;;EAEE,GACF,SAASF,SAAS,EAAEC,OAAO,EAAEC,EAAE,GAAG;AAGlC,SAASC,MAAM,EAAEC,OAAO,EAAEC,SAAS,EAAEC,cAAc,QAAQ,WAAW"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.umd.ts"],"sourcesContent":["/**\n * UMD 入口文件\n * \n * 此文件用于构建 UMD 格式的包,在浏览器环境中会将框架暴露为 window.vlianFramework\n * Rollup 会自动处理 UMD 格式的导出,此文件只需要重新导出所有内容\n */\n\n// 重新导出所有内容\nexport * from './index';\n\n// 在浏览器环境中,Rollup 会将 UMD 格式的导出自动赋值给全局变量\n// 全局变量名称在 rollup.config.js 中配置为 'vlianFramework'\n// 因此最终会通过 window.vlianFramework 访问\n"],"names":[],"mappings":"AAAA;;;;;CAKC,GAED,WAAW;;;;;qBACG;;;;;;;;;;;;;;CAEd,uCAAuC;CACvC,iDAAiD;CACjD,mCAAmC"}