@vlian/framework 1.2.59 → 1.2.61

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 (154) hide show
  1. package/dist/analytics/index.cjs +1 -22
  2. package/dist/analytics.umd.js +1 -1
  3. package/dist/components/LocaleSwitch.cjs +1 -116
  4. package/dist/components/ThemeSwitch.cjs +1 -115
  5. package/dist/components/index.cjs +1 -20
  6. package/dist/components/persistence.cjs +1 -58
  7. package/dist/core/Test.cjs +1 -64
  8. package/dist/core/app/AppContext.cjs +1 -348
  9. package/dist/core/app/AppContext.types.cjs +1 -4
  10. package/dist/core/app/BasicLayout.cjs +1 -122
  11. package/dist/core/app/DefaultApp.cjs +1 -150
  12. package/dist/core/app/index.cjs +1 -41
  13. package/dist/core/config/AppConfig.cjs +1 -139
  14. package/dist/core/config/ConfigLoader.cjs +1 -323
  15. package/dist/core/config/ConfigValidator.cjs +2 -133
  16. package/dist/core/config/index.cjs +1 -28
  17. package/dist/core/dev/DevTools.cjs +1 -226
  18. package/dist/core/error/ErrorBoundary.cjs +1 -401
  19. package/dist/core/error/ErrorHandler.cjs +1 -275
  20. package/dist/core/error/index.cjs +1 -34
  21. package/dist/core/event/AppEventBus.cjs +1 -444
  22. package/dist/core/event/frameworkEvents.cjs +1 -141
  23. package/dist/core/event/hooks.cjs +1 -69
  24. package/dist/core/event/index.cjs +1 -41
  25. package/dist/core/event/types.cjs +1 -62
  26. package/dist/core/event/useEventBus.cjs +1 -25
  27. package/dist/core/index.cjs +1 -140
  28. package/dist/core/initialization/InitializationErrorThrower.cjs +1 -75
  29. package/dist/core/initialization/index.cjs +1 -26
  30. package/dist/core/initialization/initialization.cjs +1 -64
  31. package/dist/core/initialization/initializationErrorState.cjs +1 -66
  32. package/dist/core/kernel/defaultAdapters.cjs +1 -184
  33. package/dist/core/kernel/errors.cjs +1 -69
  34. package/dist/core/kernel/index.cjs +1 -20
  35. package/dist/core/kernel/startKernel.cjs +1 -200
  36. package/dist/core/kernel/types.cjs +1 -4
  37. package/dist/core/middleware.cjs +1 -73
  38. package/dist/core/plugin/PluginEventBus.cjs +1 -298
  39. package/dist/core/plugin/PluginSandbox.cjs +1 -137
  40. package/dist/core/plugin.cjs +1 -494
  41. package/dist/core/router/RouterManager.cjs +1 -286
  42. package/dist/core/router/adapter/AdapterManager.cjs +1 -235
  43. package/dist/core/router/adapter/index.cjs +1 -22
  44. package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs +1 -128
  45. package/dist/core/router/adapter/react-router/index.cjs +1 -20
  46. package/dist/core/router/adapter/types.cjs +1 -6
  47. package/dist/core/router/dev/RouterDevTools.cjs +1 -260
  48. package/dist/core/router/dev/index.cjs +1 -20
  49. package/dist/core/router/dynamic/DynamicRouteManager.cjs +1 -193
  50. package/dist/core/router/dynamic/index.cjs +1 -20
  51. package/dist/core/router/errors/RouterError.cjs +1 -61
  52. package/dist/core/router/errors/index.cjs +1 -20
  53. package/dist/core/router/index.cjs +1 -36
  54. package/dist/core/router/lifecycle/RouterLifecycleManager.cjs +1 -144
  55. package/dist/core/router/lifecycle/index.cjs +1 -20
  56. package/dist/core/router/middleware/RouterMiddlewareManager.cjs +1 -193
  57. package/dist/core/router/middleware/auth.cjs +1 -66
  58. package/dist/core/router/middleware/index.cjs +1 -22
  59. package/dist/core/router/middleware/types.cjs +1 -6
  60. package/dist/core/router/monitoring/RouterMonitoring.cjs +1 -227
  61. package/dist/core/router/monitoring/index.cjs +1 -20
  62. package/dist/core/router/navigation/RouterNavigation.cjs +1 -239
  63. package/dist/core/router/navigation/index.cjs +1 -20
  64. package/dist/core/router/performance/RouteCache.cjs +1 -305
  65. package/dist/core/router/performance/RoutePreloader.cjs +1 -292
  66. package/dist/core/router/performance/index.cjs +1 -21
  67. package/dist/core/router/plugin/RouterPluginManager.cjs +1 -262
  68. package/dist/core/router/plugin/index.cjs +1 -21
  69. package/dist/core/router/plugin/types.cjs +1 -39
  70. package/dist/core/router/types.cjs +1 -4
  71. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs +1 -129
  72. package/dist/core/router/utils/adapters/react-router/transform.cjs +1 -250
  73. package/dist/core/router/utils/transform.cjs +1 -780
  74. package/dist/core/router/validation/RouterConfigValidator.cjs +2 -83
  75. package/dist/core/router/validation/index.cjs +1 -21
  76. package/dist/core/router/validation/schema.cjs +1 -159
  77. package/dist/core/router/version/RouteVersionManager.cjs +1 -205
  78. package/dist/core/router/version/index.cjs +1 -20
  79. package/dist/core/splash/SplashScreen.cjs +1 -341
  80. package/dist/core/splash/index.cjs +1 -22
  81. package/dist/core/splash/splashScreenUtils.cjs +1 -38
  82. package/dist/core/startup/AppInstance.cjs +1 -239
  83. package/dist/core/startup/environment.cjs +1 -169
  84. package/dist/core/startup/index.cjs +1 -23
  85. package/dist/core/startup/initializeServices.cjs +1 -226
  86. package/dist/core/startup/performanceTracker.cjs +1 -179
  87. package/dist/core/startup/renderApp.cjs +1 -314
  88. package/dist/core/startup/startApp.cjs +1 -317
  89. package/dist/core/types.cjs +1 -4
  90. package/dist/index.cjs +1 -52
  91. package/dist/index.umd.cjs +1 -27
  92. package/dist/index.umd.js +1 -1
  93. package/dist/kernel/constants.cjs +1 -65
  94. package/dist/kernel/index.cjs +1 -38
  95. package/dist/kernel/kernel.cjs +1 -295
  96. package/dist/kernel/manager/cacheManager.cjs +1 -46
  97. package/dist/kernel/manager/i18n/I18nManager.cjs +1 -91
  98. package/dist/kernel/manager/i18n/i18n.persistence.cjs +1 -60
  99. package/dist/kernel/manager/i18n/i18n.schema.cjs +1 -86
  100. package/dist/kernel/manager/i18n/index.cjs +1 -11
  101. package/dist/kernel/manager/i18nManager.cjs +1 -11
  102. package/dist/kernel/manager/index.cjs +1 -28
  103. package/dist/kernel/manager/logger/LoggerManager.cjs +1 -107
  104. package/dist/kernel/manager/logger/index.cjs +1 -11
  105. package/dist/kernel/manager/logger/logger.persistence.cjs +1 -62
  106. package/dist/kernel/manager/logger/logger.schema.cjs +1 -74
  107. package/dist/kernel/manager/loggerManager.cjs +1 -11
  108. package/dist/kernel/manager/theme/ThemeManager.cjs +1 -84
  109. package/dist/kernel/manager/theme/index.cjs +1 -11
  110. package/dist/kernel/manager/theme/theme.dom.cjs +1 -61
  111. package/dist/kernel/manager/theme/theme.persistence.cjs +1 -57
  112. package/dist/kernel/manager/theme/theme.schema.cjs +1 -122
  113. package/dist/kernel/manager/themeManager.cjs +1 -11
  114. package/dist/kernel/types.cjs +1 -4
  115. package/dist/library/index.cjs +1 -19
  116. package/dist/library/locale/index.cjs +1 -39
  117. package/dist/library/locale/langs/en-us/index.cjs +1 -32
  118. package/dist/library/locale/langs/zh-cn/index.cjs +1 -32
  119. package/dist/library/locale/types.cjs +1 -4
  120. package/dist/library/storage/cache.cjs +1 -243
  121. package/dist/library/storage/encryption.cjs +1 -147
  122. package/dist/library/storage/index.cjs +1 -124
  123. package/dist/state/StateManager.cjs +1 -166
  124. package/dist/state/adapters/AdapterFactory.cjs +1 -89
  125. package/dist/state/adapters/DefaultAdapter.cjs +1 -75
  126. package/dist/state/adapters/ReduxAdapter.cjs +1 -443
  127. package/dist/state/adapters/ZustandAdapter.cjs +1 -69
  128. package/dist/state/adapters/index.cjs +1 -44
  129. package/dist/state/adapters/types.cjs +1 -20
  130. package/dist/state/core/DerivedStateInstance.cjs +1 -174
  131. package/dist/state/core/StateInstance.cjs +1 -170
  132. package/dist/state/core/StateRegistry.cjs +1 -110
  133. package/dist/state/core/StateScope.cjs +1 -137
  134. package/dist/state/core/index.cjs +1 -30
  135. package/dist/state/index.cjs +1 -30
  136. package/dist/state/types.cjs +1 -12
  137. package/dist/state.umd.js +1 -1
  138. package/dist/types.cjs +1 -4
  139. package/dist/utils/analytics.cjs +1 -217
  140. package/dist/utils/configSecurity.cjs +3 -182
  141. package/dist/utils/csrf.cjs +1 -18
  142. package/dist/utils/errors/ErrorCodes.cjs +1 -25
  143. package/dist/utils/errors.cjs +1 -111
  144. package/dist/utils/index.cjs +1 -135
  145. package/dist/utils/logger.cjs +1 -25
  146. package/dist/utils/logger.types.cjs +1 -11
  147. package/dist/utils/monitoring.cjs +1 -18
  148. package/dist/utils/performance.cjs +1 -22
  149. package/dist/utils/resourceLoader.cjs +1 -22
  150. package/dist/utils/runtimeSecurity.cjs +1 -11
  151. package/dist/utils/security.cjs +1 -19
  152. package/dist/utils/traceId.cjs +1 -37
  153. package/dist/utils/validation.cjs +1 -19
  154. package/package.json +12 -3
@@ -1,314 +1 @@
1
- /**
2
- * 应用渲染模块
3
- * 负责渲染React应用
4
- */ "use strict";
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- Object.defineProperty(exports, "AppRenderer", {
9
- enumerable: true,
10
- get: function() {
11
- return AppRenderer;
12
- }
13
- });
14
- const _jsxruntime = require("react/jsx-runtime");
15
- const _client = require("react-dom/client");
16
- const _react = require("react");
17
- const _app = require("../app");
18
- const _error = require("../error");
19
- const _initialization = require("../initialization");
20
- const _splash = require("../splash");
21
- const _utils = require("@vlian/utils");
22
- const _RouterManager = require("../router/RouterManager");
23
- const _reactrouterdom = require("react-router-dom");
24
- function _define_property(obj, key, value) {
25
- if (key in obj) {
26
- Object.defineProperty(obj, key, {
27
- value: value,
28
- enumerable: true,
29
- configurable: true,
30
- writable: true
31
- });
32
- } else {
33
- obj[key] = value;
34
- }
35
- return obj;
36
- }
37
- function _getRequireWildcardCache(nodeInterop) {
38
- if (typeof WeakMap !== "function") return null;
39
- var cacheBabelInterop = new WeakMap();
40
- var cacheNodeInterop = new WeakMap();
41
- return (_getRequireWildcardCache = function(nodeInterop) {
42
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
43
- })(nodeInterop);
44
- }
45
- function _interop_require_wildcard(obj, nodeInterop) {
46
- if (!nodeInterop && obj && obj.__esModule) {
47
- return obj;
48
- }
49
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
50
- return {
51
- default: obj
52
- };
53
- }
54
- var cache = _getRequireWildcardCache(nodeInterop);
55
- if (cache && cache.has(obj)) {
56
- return cache.get(obj);
57
- }
58
- var newObj = {
59
- __proto__: null
60
- };
61
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
62
- for(var key in obj){
63
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
64
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
65
- if (desc && (desc.get || desc.set)) {
66
- Object.defineProperty(newObj, key, desc);
67
- } else {
68
- newObj[key] = obj[key];
69
- }
70
- }
71
- }
72
- newObj.default = obj;
73
- if (cache) {
74
- cache.set(obj, newObj);
75
- }
76
- return newObj;
77
- }
78
- const OptimizedAppContent = /*#__PURE__*/ (0, _react.memo)(({ options, services, context, // securityConfig 用于未来扩展,当前暂不使用
79
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
80
- securityConfig: _securityConfig })=>{
81
- // 优化:使用 useMemo 缓存初始语言计算
82
- const initialLocale = (0, _react.useMemo)(()=>{
83
- return options.locale ? Object.keys(options.locale)[0] || 'zh-CN' : 'zh-CN';
84
- }, [
85
- options.locale
86
- ]);
87
- // 优化:使用 useMemo 缓存路由判断结果
88
- const shouldUseRouter = (0, _react.useMemo)(()=>{
89
- const routerEnabled = options.router ? options.router.enabled !== false && options.router.enabled !== 'disabled' : false;
90
- if (!routerEnabled) {
91
- return false;
92
- }
93
- const routerManager = (0, _RouterManager.getRouterManager)();
94
- const router = routerManager.getRouter();
95
- return router !== null;
96
- }, [
97
- options.router
98
- ]);
99
- // 优化:使用 useMemo 缓存路由实例
100
- const router = (0, _react.useMemo)(()=>{
101
- if (!shouldUseRouter) {
102
- return null;
103
- }
104
- const routerManager = (0, _RouterManager.getRouterManager)();
105
- return routerManager.getRouter();
106
- }, [
107
- shouldUseRouter
108
- ]);
109
- // 优化:使用 useCallback 缓存错误处理函数
110
- const handleError = (0, _react.useCallback)((error)=>{
111
- services.monitoring.captureError(error);
112
- }, [
113
- services.monitoring
114
- ]);
115
- // 优化:使用 useMemo 缓存应用内容
116
- const appContent = (0, _react.useMemo)(()=>{
117
- if (shouldUseRouter && router) {
118
- return /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactrouterdom.RouterProvider, {
119
- router: router
120
- });
121
- }
122
- return options.app || /*#__PURE__*/ (0, _jsxruntime.jsx)(_app.DefaultApp, {});
123
- }, [
124
- shouldUseRouter,
125
- router,
126
- options.app
127
- ]);
128
- return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_error.ErrorBoundary, {
129
- fallback: options.errorFallback,
130
- onError: handleError,
131
- children: [
132
- /*#__PURE__*/ (0, _jsxruntime.jsx)(_initialization.InitializationErrorThrower, {}),
133
- /*#__PURE__*/ (0, _jsxruntime.jsx)(_app.AppContextProvider, {
134
- initialTheme: options.theme,
135
- initialLocale: initialLocale,
136
- initialAntdConfig: options.uiProvider || options.antd,
137
- initialInitializationContext: context,
138
- stateManager: services.stateManager,
139
- antdApp: options.uiApp || options.antdApp,
140
- children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_app.BasicLayout, {
141
- globalProvider: options.globalProvider,
142
- children: appContent
143
- })
144
- })
145
- ]
146
- });
147
- });
148
- OptimizedAppContent.displayName = 'OptimizedAppContent';
149
- let AppRenderer = class AppRenderer {
150
- /**
151
- * 初始化渲染器
152
- *
153
- * @param container - React应用的挂载容器
154
- * @param rootOptions - React根节点配置选项
155
- */ initialize(container, rootOptions) {
156
- this.container = container;
157
- if (!this.root) {
158
- this.root = (0, _client.createRoot)(container, rootOptions);
159
- }
160
- }
161
- /**
162
- * 渲染应用
163
- *
164
- * 优化:
165
- * 1. 默认启用安全防护(XSS防护)
166
- * 2. 优化组件渲染性能,使用 useMemo 缓存计算结果
167
- * 3. 将安全配置计算提取到初始化阶段
168
- *
169
- * @param options - 启动配置选项
170
- * @param services - 服务实例
171
- * @param context - 初始化上下文(可选)
172
- */ async renderApp(options, services, context) {
173
- if (!this.root) {
174
- throw new Error('渲染器未初始化,请先调用 initialize()');
175
- }
176
- // 优化:安全配置在初始化阶段计算(在 startApp 中预计算)
177
- // 这里只使用预计算的值,避免在渲染时重复计算
178
- const securityConfig = {
179
- enableXSSProtection: options.security?.enableXSSProtection ?? true,
180
- validateConfig: options.security?.validateConfig ?? true,
181
- sanitizeUserInput: options.security?.sanitizeUserInput ?? true,
182
- csrf: options.security?.csrf
183
- };
184
- // 优化:安全验证在初始化阶段完成,这里只进行必要的运行时检查
185
- // 如果启用了安全模式(默认启用),对配置进行验证
186
- if (securityConfig.enableXSSProtection && securityConfig.validateConfig) {
187
- // 异步验证配置,不阻塞渲染
188
- Promise.resolve().then(()=>{
189
- try {
190
- const configStr = JSON.stringify(options);
191
- const validation = _utils.SecurityUtils.validateInput(configStr);
192
- if (!validation.safe) {
193
- services.monitoring.captureError(new Error('配置项包含不安全内容'), {
194
- reason: validation.reason
195
- });
196
- }
197
- } catch (error) {
198
- // 忽略序列化错误(某些配置项可能包含不可序列化的内容)
199
- }
200
- });
201
- }
202
- // 初始化 CSRF 防护(如果启用,异步执行,不阻塞渲染)
203
- if (securityConfig.enableXSSProtection && securityConfig.csrf?.enabled !== false) {
204
- Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("@vlian/csrf"))).then(({ initCSRFManager })=>{
205
- initCSRFManager({
206
- headerName: securityConfig.csrf?.headerName,
207
- cookieName: securityConfig.csrf?.cookieName,
208
- getToken: securityConfig.csrf?.getToken,
209
- validateToken: securityConfig.csrf?.validateToken
210
- });
211
- }).catch((error)=>{
212
- // CSRF 初始化失败不影响应用启动,但记录警告
213
- if (process.env.NODE_ENV === 'development') {
214
- console.warn('CSRF 防护初始化失败:', error);
215
- }
216
- });
217
- }
218
- // 使用优化的应用内容组件,内部使用 useMemo 缓存计算结果
219
- this.root.render(/*#__PURE__*/ (0, _jsxruntime.jsx)(_react.StrictMode, {
220
- children: /*#__PURE__*/ (0, _jsxruntime.jsx)(OptimizedAppContent, {
221
- options: options,
222
- services: services,
223
- context: context,
224
- securityConfig: securityConfig
225
- })
226
- }));
227
- }
228
- /**
229
- * 渲染启动页
230
- *
231
- * 注意:启动页不使用 RouterWrapper,因为启动页应该在路由系统之前渲染
232
- *
233
- * @param options - 启动配置选项
234
- * @param services - 服务实例
235
- * @param onComplete - 启动页完成回调
236
- */ renderSplashScreen(options, services, onComplete) {
237
- if (!this.root) {
238
- throw new Error('渲染器未初始化,请先调用 initialize()');
239
- }
240
- // 获取初始语言(从 locale 配置中推断,或使用默认值)
241
- const initialLocale = options.locale ? Object.keys(options.locale)[0] || 'zh-CN' : 'zh-CN';
242
- this.root.render(/*#__PURE__*/ (0, _jsxruntime.jsx)(_react.StrictMode, {
243
- children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_error.ErrorBoundary, {
244
- fallback: options.errorFallback,
245
- onError: (error)=>{
246
- services.monitoring.captureError(error);
247
- },
248
- children: [
249
- /*#__PURE__*/ (0, _jsxruntime.jsx)(_initialization.InitializationErrorThrower, {}),
250
- /*#__PURE__*/ (0, _jsxruntime.jsx)(_app.AppContextProvider, {
251
- initialTheme: options.theme,
252
- initialLocale: initialLocale,
253
- initialAntdConfig: options.uiProvider || options.antd,
254
- stateManager: services.stateManager,
255
- antdApp: options.uiApp || options.antdApp,
256
- children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_app.BasicLayout, {
257
- globalProvider: options.globalProvider,
258
- children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_splash.SplashScreen, {
259
- options: options,
260
- onComplete: onComplete
261
- })
262
- })
263
- })
264
- ]
265
- })
266
- }));
267
- }
268
- /**
269
- * 渲染错误页面
270
- *
271
- * @param options - 启动配置选项
272
- * @param services - 服务实例
273
- * @param error - 错误信息
274
- */ renderError(options, services) {
275
- if (!this.root) {
276
- throw new Error('渲染器未初始化,请先调用 initialize()');
277
- }
278
- this.root.render(/*#__PURE__*/ (0, _jsxruntime.jsx)(_react.StrictMode, {
279
- children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_error.ErrorBoundary, {
280
- fallback: options.errorFallback,
281
- onError: (err)=>{
282
- services.monitoring.captureError(err);
283
- if (options.errorMonitor?.onError) {
284
- options.errorMonitor.onError(err);
285
- }
286
- },
287
- children: [
288
- /*#__PURE__*/ (0, _jsxruntime.jsx)(_initialization.InitializationErrorThrower, {}),
289
- /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
290
- children: "框架启动失败"
291
- })
292
- ]
293
- })
294
- }));
295
- }
296
- /**
297
- * 销毁渲染器
298
- */ destroy() {
299
- if (this.root) {
300
- this.root.unmount();
301
- this.root = null;
302
- }
303
- this.container = null;
304
- }
305
- /**
306
- * 获取容器
307
- */ getContainer() {
308
- return this.container;
309
- }
310
- constructor(){
311
- _define_property(this, "root", null);
312
- _define_property(this, "container", null);
313
- }
314
- };
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"AppRenderer",{enumerable:true,get:function(){return AppRenderer}});const _jsxruntime=require("react/jsx-runtime");const _client=require("react-dom/client");const _react=require("react");const _app=require("../app");const _error=require("../error");const _initialization=require("../initialization");const _splash=require("../splash");const _utils=require("@vlian/utils");const _RouterManager=require("../router/RouterManager");const _reactrouterdom=require("react-router-dom");function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap;var cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interop_require_wildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj}}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj)}var newObj={__proto__:null};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc)}else{newObj[key]=obj[key]}}}newObj.default=obj;if(cache){cache.set(obj,newObj)}return newObj}const OptimizedAppContent=(0,_react.memo)(({options,services,context,securityConfig:_securityConfig})=>{const initialLocale=(0,_react.useMemo)(()=>{return options.locale?Object.keys(options.locale)[0]||"zh-CN":"zh-CN"},[options.locale]);const shouldUseRouter=(0,_react.useMemo)(()=>{const routerEnabled=options.router?options.router.enabled!==false&&options.router.enabled!=="disabled":false;if(!routerEnabled){return false}const routerManager=(0,_RouterManager.getRouterManager)();const router=routerManager.getRouter();return router!==null},[options.router]);const router=(0,_react.useMemo)(()=>{if(!shouldUseRouter){return null}const routerManager=(0,_RouterManager.getRouterManager)();return routerManager.getRouter()},[shouldUseRouter]);const handleError=(0,_react.useCallback)(error=>{services.monitoring.captureError(error)},[services.monitoring]);const appContent=(0,_react.useMemo)(()=>{if(shouldUseRouter&&router){return(0,_jsxruntime.jsx)(_reactrouterdom.RouterProvider,{router:router})}return options.app||(0,_jsxruntime.jsx)(_app.DefaultApp,{})},[shouldUseRouter,router,options.app]);return(0,_jsxruntime.jsxs)(_error.ErrorBoundary,{fallback:options.errorFallback,onError:handleError,children:[(0,_jsxruntime.jsx)(_initialization.InitializationErrorThrower,{}),(0,_jsxruntime.jsx)(_app.AppContextProvider,{initialTheme:options.theme,initialLocale:initialLocale,initialAntdConfig:options.uiProvider||options.antd,initialInitializationContext:context,stateManager:services.stateManager,antdApp:options.uiApp||options.antdApp,children:(0,_jsxruntime.jsx)(_app.BasicLayout,{globalProvider:options.globalProvider,children:appContent})})]})});OptimizedAppContent.displayName="OptimizedAppContent";let AppRenderer=class AppRenderer{initialize(container,rootOptions){this.container=container;if(!this.root){this.root=(0,_client.createRoot)(container,rootOptions)}}async renderApp(options,services,context){if(!this.root){throw new Error("渲染器未初始化,请先调用 initialize()")}const securityConfig={enableXSSProtection:options.security?.enableXSSProtection??true,validateConfig:options.security?.validateConfig??true,sanitizeUserInput:options.security?.sanitizeUserInput??true,csrf:options.security?.csrf};if(securityConfig.enableXSSProtection&&securityConfig.validateConfig){Promise.resolve().then(()=>{try{const configStr=JSON.stringify(options);const validation=_utils.SecurityUtils.validateInput(configStr);if(!validation.safe){services.monitoring.captureError(new Error("配置项包含不安全内容"),{reason:validation.reason})}}catch(error){}})}if(securityConfig.enableXSSProtection&&securityConfig.csrf?.enabled!==false){Promise.resolve().then(()=>/*#__PURE__*/_interop_require_wildcard(require("@vlian/csrf"))).then(({initCSRFManager})=>{initCSRFManager({headerName:securityConfig.csrf?.headerName,cookieName:securityConfig.csrf?.cookieName,getToken:securityConfig.csrf?.getToken,validateToken:securityConfig.csrf?.validateToken})}).catch(error=>{if(process.env.NODE_ENV==="development"){console.warn("CSRF 防护初始化失败:",error)}})}this.root.render((0,_jsxruntime.jsx)(_react.StrictMode,{children:(0,_jsxruntime.jsx)(OptimizedAppContent,{options:options,services:services,context:context,securityConfig:securityConfig})}))}renderSplashScreen(options,services,onComplete){if(!this.root){throw new Error("渲染器未初始化,请先调用 initialize()")}const initialLocale=options.locale?Object.keys(options.locale)[0]||"zh-CN":"zh-CN";this.root.render((0,_jsxruntime.jsx)(_react.StrictMode,{children:(0,_jsxruntime.jsxs)(_error.ErrorBoundary,{fallback:options.errorFallback,onError:error=>{services.monitoring.captureError(error)},children:[(0,_jsxruntime.jsx)(_initialization.InitializationErrorThrower,{}),(0,_jsxruntime.jsx)(_app.AppContextProvider,{initialTheme:options.theme,initialLocale:initialLocale,initialAntdConfig:options.uiProvider||options.antd,stateManager:services.stateManager,antdApp:options.uiApp||options.antdApp,children:(0,_jsxruntime.jsx)(_app.BasicLayout,{globalProvider:options.globalProvider,children:(0,_jsxruntime.jsx)(_splash.SplashScreen,{options:options,onComplete:onComplete})})})]})}))}renderError(options,services){if(!this.root){throw new Error("渲染器未初始化,请先调用 initialize()")}this.root.render((0,_jsxruntime.jsx)(_react.StrictMode,{children:(0,_jsxruntime.jsxs)(_error.ErrorBoundary,{fallback:options.errorFallback,onError:err=>{services.monitoring.captureError(err);if(options.errorMonitor?.onError){options.errorMonitor.onError(err)}},children:[(0,_jsxruntime.jsx)(_initialization.InitializationErrorThrower,{}),(0,_jsxruntime.jsx)("div",{children:"框架启动失败"})]})}))}destroy(){if(this.root){this.root.unmount();this.root=null}this.container=null}getContainer(){return this.container}constructor(){_define_property(this,"root",null);_define_property(this,"container",null)}};
@@ -1,317 +1 @@
1
- /**
2
- * 应用启动主函数
3
- * 重构后的启动逻辑,集成所有新功能
4
- */ "use strict";
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- Object.defineProperty(exports, "startApp", {
9
- enumerable: true,
10
- get: function() {
11
- return startApp;
12
- }
13
- });
14
- const _logger = require("@vlian/logger");
15
- const _utils = require("@vlian/utils");
16
- const _traceId = require("../../utils/traceId");
17
- const _splash = require("../splash");
18
- const _index = require("../initialization/index");
19
- const _middleware = require("../middleware");
20
- const _initializeServices = require("./initializeServices");
21
- const _AppInstance = require("./AppInstance");
22
- const _environment = require("./environment");
23
- const _RouterManager = require("../router/RouterManager");
24
- const _frameworkEvents = require("../event/frameworkEvents");
25
- const _kernel = require("../kernel");
26
- async function startApp(options = {}, instanceId) {
27
- const startTime = performance.now();
28
- const envDetector = (0, _environment.getEnvironmentDetector)();
29
- const instanceManager = (0, _AppInstance.getAppInstanceManager)();
30
- // 初始化追踪 ID 生成器
31
- (0, _traceId.initTraceIdGenerator)('app');
32
- const traceId = (0, _traceId.generateTraceId)();
33
- (0, _traceId.setCurrentTraceId)(traceId);
34
- // 框架事件管理器(在服务初始化后创建)
35
- let frameworkEventManager = null;
36
- let kernelTraceId = null;
37
- try {
38
- // 1. 环境检测和容器获取
39
- const container = options.container || envDetector.safeGetElement('#root');
40
- if (!container) {
41
- throw new _utils.InitializationError('未找到挂载容器', undefined, {
42
- container: options.container
43
- }, _utils.ErrorCode.CONTAINER_NOT_FOUND);
44
- }
45
- _logger.logger.info('框架启动中...');
46
- if (options.antd && !options.uiProvider) {
47
- _logger.logger.warn('[deprecated] StartOptions.antd 即将废弃,请迁移到 StartOptions.uiProvider');
48
- }
49
- if (options.antdApp && !options.uiApp) {
50
- _logger.logger.warn('[deprecated] StartOptions.antdApp 即将废弃,请迁移到 StartOptions.uiApp');
51
- }
52
- // 2. 创建应用实例
53
- const appInstance = instanceManager.createInstance(instanceId, options);
54
- const finalInstanceId = appInstance.id;
55
- let services = null;
56
- // 使用单次 Promise 防止重复初始化,提升加载速度并保证可观测数据一致。
57
- let servicesInitPromise = null;
58
- const ensureServicesInitialized = async ()=>{
59
- if (services) {
60
- return services;
61
- }
62
- if (!servicesInitPromise) {
63
- servicesInitPromise = (0, _initializeServices.initializeServices)({
64
- ...options,
65
- eventBus: {
66
- ...options.eventBus,
67
- instanceId: finalInstanceId
68
- }
69
- });
70
- }
71
- services = await servicesInitPromise;
72
- return services;
73
- };
74
- // 3. 使用无 UI Kernel 管理启动阶段(配置、主题、i18n、服务注入、统一错误处理)
75
- const kernelRuntime = await (0, _kernel.startKernel)({
76
- loggerLevel: options.loggerLevel,
77
- locale: {
78
- locale: (options.locale ? Object.keys(options.locale)[0] : 'zh-CN') || 'zh-CN',
79
- resources: options.locale
80
- },
81
- theme: {
82
- mode: options.theme?.mode || 'light',
83
- primaryColor: options.theme?.primaryColor,
84
- compatibility: {
85
- antd: options.uiProvider || options.antd
86
- }
87
- },
88
- adapters: {
89
- monitoring: {
90
- initialize: async ()=>{
91
- await ensureServicesInitialized();
92
- },
93
- captureError: (error, metadata)=>{
94
- if (services) {
95
- services.monitoring.captureError(error, metadata);
96
- } else {
97
- _logger.logger.error('Kernel 监控上报失败(服务尚未初始化):', error, metadata);
98
- }
99
- },
100
- reportMetric: (name, value, tags)=>{
101
- _logger.logger.debug(`[kernel.metric] ${name}`, {
102
- value,
103
- tags,
104
- instanceId: finalInstanceId
105
- });
106
- }
107
- },
108
- state: {
109
- initialize: async ()=>{
110
- await ensureServicesInitialized();
111
- },
112
- getInstance: ()=>services?.stateManager ?? null
113
- },
114
- eventBus: {
115
- initialize: async ()=>{
116
- await ensureServicesInitialized();
117
- },
118
- emit: (event, payload)=>{
119
- if (services) {
120
- services.eventBus.emit(event, payload);
121
- }
122
- },
123
- on: (event, handler)=>{
124
- if (!services) {
125
- return ()=>{};
126
- }
127
- return services.eventBus.on(event, handler);
128
- }
129
- },
130
- errorHandler: {
131
- async handle (error) {
132
- _logger.logger.error('Kernel 启动阶段失败:', error);
133
- return {
134
- handled: true,
135
- shouldThrow: true
136
- };
137
- }
138
- }
139
- },
140
- enabledPhases: {
141
- init: false
142
- },
143
- enablePostReady: false
144
- });
145
- kernelTraceId = kernelRuntime.traceId;
146
- const servicesInitStart = performance.now();
147
- const resolvedServices = await ensureServicesInitialized();
148
- const servicesInitDuration = performance.now() - servicesInitStart;
149
- // 创建框架事件管理器
150
- frameworkEventManager = new _frameworkEvents.FrameworkEventManager(resolvedServices.eventBus);
151
- // 触发应用启动事件(使用真实的事件总线)
152
- frameworkEventManager.emitAppStart(finalInstanceId);
153
- // 触发实例创建事件
154
- frameworkEventManager.emitInstanceCreated(finalInstanceId);
155
- // 4. 初始化应用实例
156
- appInstance.initialize(container, resolvedServices);
157
- // 5. 初始化路由管理器
158
- const routerManager = (0, _RouterManager.getRouterManager)();
159
- if (options.router) {
160
- await routerManager.initialize(options.router);
161
- }
162
- // 6. 性能追踪
163
- const performanceTracker = appInstance.getPerformanceTracker();
164
- if (performanceTracker) {
165
- performanceTracker.recordServiceInit(servicesInitDuration);
166
- }
167
- // 6. 是否显示启动页
168
- const shouldShowSplash = (0, _splash.shouldShowSplashScreen)(options.showSplashScreen);
169
- const renderer = appInstance.getRenderer();
170
- // 8. 渲染应用函数
171
- const renderApp = async (context)=>{
172
- const renderStart = performance.now();
173
- // 触发渲染开始事件
174
- if (frameworkEventManager) {
175
- frameworkEventManager.emitAppRenderStart(finalInstanceId);
176
- }
177
- await renderer.renderApp(options, resolvedServices, context);
178
- const renderDuration = performance.now() - renderStart;
179
- // 触发渲染完成事件
180
- if (frameworkEventManager) {
181
- frameworkEventManager.emitAppRenderComplete(finalInstanceId, renderDuration);
182
- }
183
- // 优化:在应用渲染完成后,延迟初始化非关键服务
184
- // 使用 requestIdleCallback 在浏览器空闲时初始化,不影响用户体验
185
- if (resolvedServices.initializeNonCriticalServices) {
186
- resolvedServices.initializeNonCriticalServices().catch((error)=>{
187
- _logger.logger.warn('非关键服务初始化失败(不影响应用运行):', error);
188
- });
189
- }
190
- if (performanceTracker) {
191
- performanceTracker.recordFirstRender(renderDuration);
192
- const totalDuration = performance.now() - startTime;
193
- performanceTracker.recordTotalStartup(totalDuration);
194
- performanceTracker.report();
195
- }
196
- // 触发应用启动完成事件
197
- if (frameworkEventManager) {
198
- frameworkEventManager.emitAppStarted(finalInstanceId, performance.now() - startTime);
199
- }
200
- // 统一发出 Kernel post-ready 事件,供可观测系统消费。
201
- kernelRuntime.getEventBus().emit('kernel.postReady', {
202
- traceId: kernelRuntime.traceId,
203
- instanceId: finalInstanceId,
204
- startupDuration: performance.now() - startTime
205
- });
206
- // 开发模式下显示开发工具
207
- if (process.env.NODE_ENV === 'development' && typeof window !== 'undefined') {
208
- // 延迟显示开发工具,避免影响首次渲染
209
- setTimeout(()=>{
210
- const devToolsContainer = document.createElement('div');
211
- devToolsContainer.id = '__framework_dev_tools__';
212
- document.body.appendChild(devToolsContainer);
213
- // 这里需要动态导入React来渲染开发工具
214
- // 为了简化,暂时注释掉,后续可以完善
215
- // import('react-dom/client').then(({ createRoot }) => {
216
- // const root = createRoot(devToolsContainer);
217
- // root.render(<DevToolsTrigger appInstance={appInstance} />);
218
- // });
219
- }, 1000);
220
- }
221
- };
222
- if (shouldShowSplash) {
223
- // 场景1: 显示启动页,初始化在启动页中完成
224
- const onSplashComplete = (context)=>{
225
- _logger.logger.info('启动页初始化完成');
226
- // 触发初始化完成事件
227
- if (frameworkEventManager) {
228
- const initDuration = context.duration || 0;
229
- frameworkEventManager.emitAppInitComplete(finalInstanceId, context, initDuration);
230
- }
231
- if (options.onSplashComplete) {
232
- Promise.resolve(options.onSplashComplete(()=>{
233
- _logger.logger.info('框架加载完成');
234
- renderApp(context);
235
- }, context)).catch((error)=>{
236
- _logger.logger.error('onSplashComplete 回调执行失败:', error);
237
- _index.initializationErrorState.setError(error);
238
- renderApp(context);
239
- });
240
- } else {
241
- _logger.logger.info('框架加载完成');
242
- renderApp(context);
243
- }
244
- };
245
- // 触发初始化开始事件
246
- if (frameworkEventManager) {
247
- frameworkEventManager.emitAppInitStart(finalInstanceId);
248
- }
249
- // 渲染启动页
250
- renderer.renderSplashScreen(options, resolvedServices, onSplashComplete);
251
- } else {
252
- // 场景2: 不显示启动页,直接执行初始化
253
- _logger.logger.info('开始执行初始化(无启动页)');
254
- // 触发初始化开始事件
255
- if (frameworkEventManager) {
256
- frameworkEventManager.emitAppInitStart(finalInstanceId);
257
- }
258
- try {
259
- const initStart = performance.now();
260
- // 使用中间件包装初始化函数
261
- const initContext = await _middleware.middlewareManager.execute(options, async ()=>{
262
- return await (0, _index.initialization)(options, (progress, step)=>{
263
- _logger.logger.debug(`初始化进度: ${progress}%${step ? ` - ${step}` : ''}`);
264
- });
265
- });
266
- const initDuration = performance.now() - initStart;
267
- // 触发初始化完成事件
268
- if (frameworkEventManager) {
269
- frameworkEventManager.emitAppInitComplete(finalInstanceId, initContext, initDuration);
270
- }
271
- if (performanceTracker) {
272
- performanceTracker.recordInitialization(initDuration);
273
- }
274
- _logger.logger.info('初始化完成(无启动页)', initContext);
275
- _logger.logger.info('框架加载完成');
276
- void renderApp(initContext);
277
- } catch (error) {
278
- _logger.logger.error('初始化失败:', error);
279
- // 触发初始化错误事件
280
- if (frameworkEventManager) {
281
- frameworkEventManager.emitAppInitError(finalInstanceId, error instanceof Error ? error : new Error(String(error)));
282
- }
283
- _index.initializationErrorState.setError(error);
284
- void renderApp();
285
- }
286
- }
287
- return instanceManager;
288
- } catch (error) {
289
- _logger.logger.error('框架启动失败:', error);
290
- // 触发错误事件
291
- if (frameworkEventManager) {
292
- const errorInstanceId = instanceId || instanceManager.getInstance()?.id;
293
- if (errorInstanceId) {
294
- frameworkEventManager.emitErrorOccurred(error instanceof Error ? error : new Error(String(error)), {
295
- phase: 'startup'
296
- });
297
- }
298
- }
299
- if (kernelTraceId) {
300
- _logger.logger.error('Kernel Trace 失败上下文', {
301
- traceId: kernelTraceId
302
- });
303
- }
304
- // 如果容器存在,尝试渲染错误页面
305
- const container = options.container || envDetector.safeGetElement('#root');
306
- if (container) {
307
- const errorInstance = instanceManager.getInstance();
308
- if (errorInstance && errorInstance.isInitialized()) {
309
- const renderer = errorInstance.getRenderer();
310
- const services = errorInstance.getServices();
311
- _index.initializationErrorState.setError(error);
312
- renderer.renderError(options, services);
313
- }
314
- }
315
- throw error;
316
- }
317
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"startApp",{enumerable:true,get:function(){return startApp}});const _logger=require("@vlian/logger");const _utils=require("@vlian/utils");const _traceId=require("../../utils/traceId");const _splash=require("../splash");const _index=require("../initialization/index");const _middleware=require("../middleware");const _initializeServices=require("./initializeServices");const _AppInstance=require("./AppInstance");const _environment=require("./environment");const _RouterManager=require("../router/RouterManager");const _frameworkEvents=require("../event/frameworkEvents");const _kernel=require("../kernel");async function startApp(options={},instanceId){const startTime=performance.now();const envDetector=(0,_environment.getEnvironmentDetector)();const instanceManager=(0,_AppInstance.getAppInstanceManager)();(0,_traceId.initTraceIdGenerator)("app");const traceId=(0,_traceId.generateTraceId)();(0,_traceId.setCurrentTraceId)(traceId);let frameworkEventManager=null;let kernelTraceId=null;try{const container=options.container||envDetector.safeGetElement("#root");if(!container){throw new _utils.InitializationError("未找到挂载容器",undefined,{container:options.container},_utils.ErrorCode.CONTAINER_NOT_FOUND)}_logger.logger.info("框架启动中...");if(options.antd&&!options.uiProvider){_logger.logger.warn("[deprecated] StartOptions.antd 即将废弃,请迁移到 StartOptions.uiProvider")}if(options.antdApp&&!options.uiApp){_logger.logger.warn("[deprecated] StartOptions.antdApp 即将废弃,请迁移到 StartOptions.uiApp")}const appInstance=instanceManager.createInstance(instanceId,options);const finalInstanceId=appInstance.id;let services=null;let servicesInitPromise=null;const ensureServicesInitialized=async()=>{if(services){return services}if(!servicesInitPromise){servicesInitPromise=(0,_initializeServices.initializeServices)({...options,eventBus:{...options.eventBus,instanceId:finalInstanceId}})}services=await servicesInitPromise;return services};const kernelRuntime=await (0,_kernel.startKernel)({loggerLevel:options.loggerLevel,locale:{locale:(options.locale?Object.keys(options.locale)[0]:"zh-CN")||"zh-CN",resources:options.locale},theme:{mode:options.theme?.mode||"light",primaryColor:options.theme?.primaryColor,compatibility:{antd:options.uiProvider||options.antd}},adapters:{monitoring:{initialize:async()=>{await ensureServicesInitialized()},captureError:(error,metadata)=>{if(services){services.monitoring.captureError(error,metadata)}else{_logger.logger.error("Kernel 监控上报失败(服务尚未初始化):",error,metadata)}},reportMetric:(name,value,tags)=>{_logger.logger.debug(`[kernel.metric] ${name}`,{value,tags,instanceId:finalInstanceId})}},state:{initialize:async()=>{await ensureServicesInitialized()},getInstance:()=>services?.stateManager??null},eventBus:{initialize:async()=>{await ensureServicesInitialized()},emit:(event,payload)=>{if(services){services.eventBus.emit(event,payload)}},on:(event,handler)=>{if(!services){return()=>{}}return services.eventBus.on(event,handler)}},errorHandler:{async handle(error){_logger.logger.error("Kernel 启动阶段失败:",error);return{handled:true,shouldThrow:true}}}},enabledPhases:{init:false},enablePostReady:false});kernelTraceId=kernelRuntime.traceId;const servicesInitStart=performance.now();const resolvedServices=await ensureServicesInitialized();const servicesInitDuration=performance.now()-servicesInitStart;frameworkEventManager=new _frameworkEvents.FrameworkEventManager(resolvedServices.eventBus);frameworkEventManager.emitAppStart(finalInstanceId);frameworkEventManager.emitInstanceCreated(finalInstanceId);appInstance.initialize(container,resolvedServices);const routerManager=(0,_RouterManager.getRouterManager)();if(options.router){await routerManager.initialize(options.router)}const performanceTracker=appInstance.getPerformanceTracker();if(performanceTracker){performanceTracker.recordServiceInit(servicesInitDuration)}const shouldShowSplash=(0,_splash.shouldShowSplashScreen)(options.showSplashScreen);const renderer=appInstance.getRenderer();const renderApp=async context=>{const renderStart=performance.now();if(frameworkEventManager){frameworkEventManager.emitAppRenderStart(finalInstanceId)}await renderer.renderApp(options,resolvedServices,context);const renderDuration=performance.now()-renderStart;if(frameworkEventManager){frameworkEventManager.emitAppRenderComplete(finalInstanceId,renderDuration)}if(resolvedServices.initializeNonCriticalServices){resolvedServices.initializeNonCriticalServices().catch(error=>{_logger.logger.warn("非关键服务初始化失败(不影响应用运行):",error)})}if(performanceTracker){performanceTracker.recordFirstRender(renderDuration);const totalDuration=performance.now()-startTime;performanceTracker.recordTotalStartup(totalDuration);performanceTracker.report()}if(frameworkEventManager){frameworkEventManager.emitAppStarted(finalInstanceId,performance.now()-startTime)}kernelRuntime.getEventBus().emit("kernel.postReady",{traceId:kernelRuntime.traceId,instanceId:finalInstanceId,startupDuration:performance.now()-startTime});if(process.env.NODE_ENV==="development"&&typeof window!=="undefined"){setTimeout(()=>{const devToolsContainer=document.createElement("div");devToolsContainer.id="__framework_dev_tools__";document.body.appendChild(devToolsContainer)},1e3)}};if(shouldShowSplash){const onSplashComplete=context=>{_logger.logger.info("启动页初始化完成");if(frameworkEventManager){const initDuration=context.duration||0;frameworkEventManager.emitAppInitComplete(finalInstanceId,context,initDuration)}if(options.onSplashComplete){Promise.resolve(options.onSplashComplete(()=>{_logger.logger.info("框架加载完成");renderApp(context)},context)).catch(error=>{_logger.logger.error("onSplashComplete 回调执行失败:",error);_index.initializationErrorState.setError(error);renderApp(context)})}else{_logger.logger.info("框架加载完成");renderApp(context)}};if(frameworkEventManager){frameworkEventManager.emitAppInitStart(finalInstanceId)}renderer.renderSplashScreen(options,resolvedServices,onSplashComplete)}else{_logger.logger.info("开始执行初始化(无启动页)");if(frameworkEventManager){frameworkEventManager.emitAppInitStart(finalInstanceId)}try{const initStart=performance.now();const initContext=await _middleware.middlewareManager.execute(options,async()=>{return await (0,_index.initialization)(options,(progress,step)=>{_logger.logger.debug(`初始化进度: ${progress}%${step?` - ${step}`:""}`)})});const initDuration=performance.now()-initStart;if(frameworkEventManager){frameworkEventManager.emitAppInitComplete(finalInstanceId,initContext,initDuration)}if(performanceTracker){performanceTracker.recordInitialization(initDuration)}_logger.logger.info("初始化完成(无启动页)",initContext);_logger.logger.info("框架加载完成");void renderApp(initContext)}catch(error){_logger.logger.error("初始化失败:",error);if(frameworkEventManager){frameworkEventManager.emitAppInitError(finalInstanceId,error instanceof Error?error:new Error(String(error)))}_index.initializationErrorState.setError(error);void renderApp()}}return instanceManager}catch(error){_logger.logger.error("框架启动失败:",error);if(frameworkEventManager){const errorInstanceId=instanceId||instanceManager.getInstance()?.id;if(errorInstanceId){frameworkEventManager.emitErrorOccurred(error instanceof Error?error:new Error(String(error)),{phase:"startup"})}}if(kernelTraceId){_logger.logger.error("Kernel Trace 失败上下文",{traceId:kernelTraceId})}const container=options.container||envDetector.safeGetElement("#root");if(container){const errorInstance=instanceManager.getInstance();if(errorInstance&&errorInstance.isInitialized()){const renderer=errorInstance.getRenderer();const services=errorInstance.getServices();_index.initializationErrorState.setError(error);renderer.renderError(options,services)}}throw error}}
@@ -1,4 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});