@vlian/framework 1.1.1 → 1.2.1

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 (44) hide show
  1. package/README.md +35 -1
  2. package/dist/core/config/ConfigLoader.cjs +90 -8
  3. package/dist/core/config/ConfigLoader.cjs.map +1 -1
  4. package/dist/core/config/ConfigLoader.d.ts +20 -4
  5. package/dist/core/config/ConfigLoader.d.ts.map +1 -1
  6. package/dist/core/config/ConfigLoader.js +90 -8
  7. package/dist/core/config/ConfigLoader.js.map +1 -1
  8. package/dist/core/error/ErrorBoundary.cjs +23 -9
  9. package/dist/core/error/ErrorBoundary.cjs.map +1 -1
  10. package/dist/core/error/ErrorBoundary.d.ts.map +1 -1
  11. package/dist/core/error/ErrorBoundary.js +23 -9
  12. package/dist/core/error/ErrorBoundary.js.map +1 -1
  13. package/dist/core/error/ErrorHandler.cjs +277 -0
  14. package/dist/core/error/ErrorHandler.cjs.map +1 -0
  15. package/dist/core/error/ErrorHandler.d.ts +172 -0
  16. package/dist/core/error/ErrorHandler.d.ts.map +1 -0
  17. package/dist/core/error/ErrorHandler.js +261 -0
  18. package/dist/core/error/ErrorHandler.js.map +1 -0
  19. package/dist/core/error/index.cjs +10 -0
  20. package/dist/core/error/index.cjs.map +1 -1
  21. package/dist/core/error/index.d.ts +2 -0
  22. package/dist/core/error/index.d.ts.map +1 -1
  23. package/dist/core/error/index.js +1 -0
  24. package/dist/core/error/index.js.map +1 -1
  25. package/dist/core/startup/initializeServices.cjs +69 -24
  26. package/dist/core/startup/initializeServices.cjs.map +1 -1
  27. package/dist/core/startup/initializeServices.d.ts +9 -2
  28. package/dist/core/startup/initializeServices.d.ts.map +1 -1
  29. package/dist/core/startup/initializeServices.js +73 -26
  30. package/dist/core/startup/initializeServices.js.map +1 -1
  31. package/dist/core/startup/renderApp.cjs +100 -61
  32. package/dist/core/startup/renderApp.cjs.map +1 -1
  33. package/dist/core/startup/renderApp.d.ts +2 -2
  34. package/dist/core/startup/renderApp.d.ts.map +1 -1
  35. package/dist/core/startup/renderApp.js +101 -62
  36. package/dist/core/startup/renderApp.js.map +1 -1
  37. package/dist/core/startup/startApp.cjs +7 -0
  38. package/dist/core/startup/startApp.cjs.map +1 -1
  39. package/dist/core/startup/startApp.d.ts.map +1 -1
  40. package/dist/core/startup/startApp.js +7 -0
  41. package/dist/core/startup/startApp.js.map +1 -1
  42. package/dist/index.umd.js +32434 -39284
  43. package/dist/index.umd.js.map +1 -1
  44. package/package.json +40 -6
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/startup/startApp.ts"],"sourcesContent":["/**\n * 应用启动主函数\n * 重构后的启动逻辑,集成所有新功能\n */\n\nimport { logger } from '../../utils';\nimport { ErrorCode, InitializationError } from '../../utils/errors';\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 { AppInstanceManager, getAppInstanceManager } from './AppInstance';\nimport { getEnvironmentDetector } from './environment';\nimport { getRouterManager } from '../router/RouterManager';\nimport { FrameworkEventManager } from '../event/frameworkEvents';\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\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 // 2. 创建应用实例\n const appInstance = instanceManager.createInstance(instanceId, options);\n const finalInstanceId = appInstance.id;\n\n // 3. 初始化服务(并行)\n const servicesInitStart = performance.now();\n const services = await initializeServices({\n ...options,\n eventBus: {\n ...options.eventBus,\n instanceId: finalInstanceId,\n },\n });\n const servicesInitDuration = performance.now() - servicesInitStart;\n\n // 创建框架事件管理器\n frameworkEventManager = new FrameworkEventManager(services.eventBus);\n \n // 触发应用启动事件(使用真实的事件总线)\n frameworkEventManager.emitAppStart(finalInstanceId);\n \n // 触发实例创建事件\n frameworkEventManager.emitInstanceCreated(finalInstanceId);\n\n // 4. 初始化应用实例\n appInstance.initialize(container, services);\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, services, context);\n const renderDuration = performance.now() - renderStart;\n\n // 触发渲染完成事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppRenderComplete(finalInstanceId, renderDuration);\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 // 开发模式下显示开发工具\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, services, 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 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 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 // 如果容器存在,尝试渲染错误页面\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","container","safeGetElement","InitializationError","undefined","ErrorCode","CONTAINER_NOT_FOUND","logger","info","appInstance","createInstance","finalInstanceId","id","servicesInitStart","services","initializeServices","eventBus","servicesInitDuration","FrameworkEventManager","emitAppStart","emitInstanceCreated","initialize","routerManager","getRouterManager","router","performanceTracker","getPerformanceTracker","recordServiceInit","shouldShowSplash","shouldShowSplashScreen","showSplashScreen","renderer","getRenderer","renderApp","context","renderStart","emitAppRenderStart","renderDuration","emitAppRenderComplete","recordFirstRender","totalDuration","recordTotalStartup","report","emitAppStarted","process","env","NODE_ENV","window","setTimeout","devToolsContainer","document","createElement","body","appendChild","onSplashComplete","initDuration","duration","emitAppInitComplete","Promise","resolve","catch","error","initializationErrorState","setError","emitAppInitStart","renderSplashScreen","initStart","initContext","middlewareManager","execute","initialization","progress","step","debug","recordInitialization","emitAppInitError","Error","String","errorInstanceId","getInstance","emitErrorOccurred","phase","errorInstance","isInitialized","getServices","renderError"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/core/startup/startApp.ts"],"sourcesContent":["/**\n * 应用启动主函数\n * 重构后的启动逻辑,集成所有新功能\n */\n\nimport { logger } from '../../utils';\nimport { ErrorCode, InitializationError } from '../../utils/errors';\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 { AppInstanceManager, getAppInstanceManager } from './AppInstance';\nimport { getEnvironmentDetector } from './environment';\nimport { getRouterManager } from '../router/RouterManager';\nimport { FrameworkEventManager } from '../event/frameworkEvents';\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\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 // 2. 创建应用实例\n const appInstance = instanceManager.createInstance(instanceId, options);\n const finalInstanceId = appInstance.id;\n\n // 3. 初始化服务(并行)\n const servicesInitStart = performance.now();\n const services = await initializeServices({\n ...options,\n eventBus: {\n ...options.eventBus,\n instanceId: finalInstanceId,\n },\n });\n const servicesInitDuration = performance.now() - servicesInitStart;\n\n // 创建框架事件管理器\n frameworkEventManager = new FrameworkEventManager(services.eventBus);\n \n // 触发应用启动事件(使用真实的事件总线)\n frameworkEventManager.emitAppStart(finalInstanceId);\n \n // 触发实例创建事件\n frameworkEventManager.emitInstanceCreated(finalInstanceId);\n\n // 4. 初始化应用实例\n appInstance.initialize(container, services);\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, services, context);\n const renderDuration = performance.now() - renderStart;\n\n // 触发渲染完成事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppRenderComplete(finalInstanceId, renderDuration);\n }\n\n // 优化:在应用渲染完成后,延迟初始化非关键服务\n // 使用 requestIdleCallback 在浏览器空闲时初始化,不影响用户体验\n if (services.initializeNonCriticalServices) {\n services.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 // 开发模式下显示开发工具\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, services, 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 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 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 // 如果容器存在,尝试渲染错误页面\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","container","safeGetElement","InitializationError","undefined","ErrorCode","CONTAINER_NOT_FOUND","logger","info","appInstance","createInstance","finalInstanceId","id","servicesInitStart","services","initializeServices","eventBus","servicesInitDuration","FrameworkEventManager","emitAppStart","emitInstanceCreated","initialize","routerManager","getRouterManager","router","performanceTracker","getPerformanceTracker","recordServiceInit","shouldShowSplash","shouldShowSplashScreen","showSplashScreen","renderer","getRenderer","renderApp","context","renderStart","emitAppRenderStart","renderDuration","emitAppRenderComplete","initializeNonCriticalServices","catch","error","warn","recordFirstRender","totalDuration","recordTotalStartup","report","emitAppStarted","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","debug","recordInitialization","emitAppInitError","Error","String","errorInstanceId","getInstance","emitErrorOccurred","phase","errorInstance","isInitialized","getServices","renderError"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"startApp.d.ts","sourceRoot":"","sources":["../../../src/core/startup/startApp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAK7C,OAAO,EAAE,kBAAkB,EAAyB,MAAM,eAAe,CAAC;AAK1E;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,GAAE,YAAiB,EAC1B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC,CA0O7B"}
1
+ {"version":3,"file":"startApp.d.ts","sourceRoot":"","sources":["../../../src/core/startup/startApp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAK7C,OAAO,EAAE,kBAAkB,EAAyB,MAAM,eAAe,CAAC;AAK1E;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,GAAE,YAAiB,EAC1B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAkP7B"}
@@ -84,6 +84,13 @@ import { FrameworkEventManager } from "../event/frameworkEvents";
84
84
  if (frameworkEventManager) {
85
85
  frameworkEventManager.emitAppRenderComplete(finalInstanceId, renderDuration);
86
86
  }
87
+ // 优化:在应用渲染完成后,延迟初始化非关键服务
88
+ // 使用 requestIdleCallback 在浏览器空闲时初始化,不影响用户体验
89
+ if (services.initializeNonCriticalServices) {
90
+ services.initializeNonCriticalServices().catch((error)=>{
91
+ logger.warn('非关键服务初始化失败(不影响应用运行):', error);
92
+ });
93
+ }
87
94
  if (performanceTracker) {
88
95
  performanceTracker.recordFirstRender(renderDuration);
89
96
  const totalDuration = performance.now() - startTime;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/startup/startApp.ts"],"sourcesContent":["/**\n * 应用启动主函数\n * 重构后的启动逻辑,集成所有新功能\n */\n\nimport { logger } from '../../utils';\nimport { ErrorCode, InitializationError } from '../../utils/errors';\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 { AppInstanceManager, getAppInstanceManager } from './AppInstance';\nimport { getEnvironmentDetector } from './environment';\nimport { getRouterManager } from '../router/RouterManager';\nimport { FrameworkEventManager } from '../event/frameworkEvents';\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\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 // 2. 创建应用实例\n const appInstance = instanceManager.createInstance(instanceId, options);\n const finalInstanceId = appInstance.id;\n\n // 3. 初始化服务(并行)\n const servicesInitStart = performance.now();\n const services = await initializeServices({\n ...options,\n eventBus: {\n ...options.eventBus,\n instanceId: finalInstanceId,\n },\n });\n const servicesInitDuration = performance.now() - servicesInitStart;\n\n // 创建框架事件管理器\n frameworkEventManager = new FrameworkEventManager(services.eventBus);\n \n // 触发应用启动事件(使用真实的事件总线)\n frameworkEventManager.emitAppStart(finalInstanceId);\n \n // 触发实例创建事件\n frameworkEventManager.emitInstanceCreated(finalInstanceId);\n\n // 4. 初始化应用实例\n appInstance.initialize(container, services);\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, services, context);\n const renderDuration = performance.now() - renderStart;\n\n // 触发渲染完成事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppRenderComplete(finalInstanceId, renderDuration);\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 // 开发模式下显示开发工具\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, services, 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 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 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 // 如果容器存在,尝试渲染错误页面\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","startApp","options","instanceId","startTime","performance","now","envDetector","instanceManager","traceId","frameworkEventManager","container","safeGetElement","undefined","CONTAINER_NOT_FOUND","info","appInstance","createInstance","finalInstanceId","id","servicesInitStart","services","eventBus","servicesInitDuration","emitAppStart","emitInstanceCreated","initialize","routerManager","router","performanceTracker","getPerformanceTracker","recordServiceInit","shouldShowSplash","showSplashScreen","renderer","getRenderer","renderApp","context","renderStart","emitAppRenderStart","renderDuration","emitAppRenderComplete","recordFirstRender","totalDuration","recordTotalStartup","report","emitAppStarted","process","env","NODE_ENV","window","setTimeout","devToolsContainer","document","createElement","body","appendChild","onSplashComplete","initDuration","duration","emitAppInitComplete","Promise","resolve","catch","error","setError","emitAppInitStart","renderSplashScreen","initStart","initContext","execute","progress","step","debug","recordInitialization","emitAppInitError","Error","String","errorInstanceId","getInstance","emitErrorOccurred","phase","errorInstance","isInitialized","getServices","renderError"],"mappings":"AAAA;;;CAGC,GAED,SAASA,MAAM,QAAQ,cAAc;AACrC,SAASC,SAAS,EAAEC,mBAAmB,QAAQ,qBAAqB;AACpE,SAASC,oBAAoB,EAAEC,eAAe,EAAEC,iBAAiB,QAAQ,sBAAsB;AAE/F,SAASC,sBAAsB,QAAQ,YAAY;AACnD,SAASC,cAAc,EAAEC,wBAAwB,QAAQ,0BAA0B;AACnF,SAASC,iBAAiB,QAAQ,gBAAgB;AAClD,SAASC,kBAAkB,QAAQ,uBAAuB;AAC1D,SAA6BC,qBAAqB,QAAQ,gBAAgB;AAC1E,SAASC,sBAAsB,QAAQ,gBAAgB;AACvD,SAASC,gBAAgB,QAAQ,0BAA0B;AAC3D,SAASC,qBAAqB,QAAQ,2BAA2B;AAEjE;;;;;;CAMC,GACD,OAAO,eAAeC,SACpBC,UAAwB,CAAC,CAAC,EAC1BC,UAAmB;IAEnB,MAAMC,YAAYC,YAAYC,GAAG;IACjC,MAAMC,cAAcT;IACpB,MAAMU,kBAAkBX;IAExB,eAAe;IACfR,qBAAqB;IACrB,MAAMoB,UAAUnB;IAChBC,kBAAkBkB;IAElB,qBAAqB;IACrB,IAAIC,wBAAsD;IAE1D,IAAI;QACF,eAAe;QACf,MAAMC,YAAYT,QAAQS,SAAS,IAAIJ,YAAYK,cAAc,CAAC;QAClE,IAAI,CAACD,WAAW;YACd,MAAM,IAAIvB,oBACR,WACAyB,WACA;gBAAEF,WAAWT,QAAQS,SAAS;YAAC,GAC/BxB,UAAU2B,mBAAmB;QAEjC;QAEA5B,OAAO6B,IAAI,CAAC;QAEZ,YAAY;QACZ,MAAMC,cAAcR,gBAAgBS,cAAc,CAACd,YAAYD;QAC/D,MAAMgB,kBAAkBF,YAAYG,EAAE;QAEtC,eAAe;QACf,MAAMC,oBAAoBf,YAAYC,GAAG;QACzC,MAAMe,WAAW,MAAMzB,mBAAmB;YACxC,GAAGM,OAAO;YACVoB,UAAU;gBACR,GAAGpB,QAAQoB,QAAQ;gBACnBnB,YAAYe;YACd;QACF;QACA,MAAMK,uBAAuBlB,YAAYC,GAAG,KAAKc;QAEjD,YAAY;QACZV,wBAAwB,IAAIV,sBAAsBqB,SAASC,QAAQ;QAEnE,sBAAsB;QACtBZ,sBAAsBc,YAAY,CAACN;QAEnC,WAAW;QACXR,sBAAsBe,mBAAmB,CAACP;QAE1C,aAAa;QACbF,YAAYU,UAAU,CAACf,WAAWU;QAElC,cAAc;QACd,MAAMM,gBAAgB5B;QACtB,IAAIG,QAAQ0B,MAAM,EAAE;YAClB,MAAMD,cAAcD,UAAU,CAACxB,QAAQ0B,MAAM;QAC/C;QAEA,UAAU;QACV,MAAMC,qBAAqBb,YAAYc,qBAAqB;QAC5D,IAAID,oBAAoB;YACtBA,mBAAmBE,iBAAiB,CAACR;QACvC;QAEA,aAAa;QACb,MAAMS,mBAAmBxC,uBAAuBU,QAAQ+B,gBAAgB;QAExE,MAAMC,WAAWlB,YAAYmB,WAAW;QAExC,YAAY;QACZ,MAAMC,YAAY,OAAOC;YACvB,MAAMC,cAAcjC,YAAYC,GAAG;YAEnC,WAAW;YACX,IAAII,uBAAuB;gBACzBA,sBAAsB6B,kBAAkB,CAACrB;YAC3C;YAEA,MAAMgB,SAASE,SAAS,CAAClC,SAASmB,UAAUgB;YAC5C,MAAMG,iBAAiBnC,YAAYC,GAAG,KAAKgC;YAE3C,WAAW;YACX,IAAI5B,uBAAuB;gBACzBA,sBAAsB+B,qBAAqB,CAACvB,iBAAiBsB;YAC/D;YAEA,IAAIX,oBAAoB;gBACtBA,mBAAmBa,iBAAiB,CAACF;gBACrC,MAAMG,gBAAgBtC,YAAYC,GAAG,KAAKF;gBAC1CyB,mBAAmBe,kBAAkB,CAACD;gBACtCd,mBAAmBgB,MAAM;YAC3B;YAEA,aAAa;YACb,IAAInC,uBAAuB;gBACzBA,sBAAsBoC,cAAc,CAAC5B,iBAAiBb,YAAYC,GAAG,KAAKF;YAC5E;YAEA,cAAc;YACd,IAAI2C,QAAQC,GAAG,CAACC,QAAQ,KAAK,iBAAiB,OAAOC,WAAW,aAAa;gBAC3E,oBAAoB;gBACpBC,WAAW;oBACT,MAAMC,oBAAoBC,SAASC,aAAa,CAAC;oBACjDF,kBAAkBjC,EAAE,GAAG;oBACvBkC,SAASE,IAAI,CAACC,WAAW,CAACJ;gBAE1B,uBAAuB;gBACvB,oBAAoB;gBACpB,wDAAwD;gBACxD,gDAAgD;gBAChD,gEAAgE;gBAChE,MAAM;gBACR,GAAG;YACL;QACF;QAEA,IAAIpB,kBAAkB;YACpB,wBAAwB;YACxB,MAAMyB,mBAAmB,CAACpB;gBACxBnD,OAAO6B,IAAI,CAAC;gBAEZ,YAAY;gBACZ,IAAIL,uBAAuB;oBACzB,MAAMgD,eAAerB,QAAQsB,QAAQ,IAAI;oBACzCjD,sBAAsBkD,mBAAmB,CAAC1C,iBAAiBmB,SAASqB;gBACtE;gBAEA,IAAIxD,QAAQuD,gBAAgB,EAAE;oBAC5BI,QAAQC,OAAO,CACb5D,QAAQuD,gBAAgB,CAAC;wBACvBvE,OAAO6B,IAAI,CAAC;wBACZqB,UAAUC;oBACZ,GAAGA,UACH0B,KAAK,CAAC,CAACC;wBACP9E,OAAO8E,KAAK,CAAC,4BAA4BA;wBACzCtE,yBAAyBuE,QAAQ,CAACD;wBAClC5B,UAAUC;oBACZ;gBACF,OAAO;oBACLnD,OAAO6B,IAAI,CAAC;oBACZqB,UAAUC;gBACZ;YACF;YAEA,YAAY;YACZ,IAAI3B,uBAAuB;gBACzBA,sBAAsBwD,gBAAgB,CAAChD;YACzC;YAEA,QAAQ;YACRgB,SAASiC,kBAAkB,CAACjE,SAASmB,UAAUoC;QACjD,OAAO;YACL,sBAAsB;YACtBvE,OAAO6B,IAAI,CAAC;YAEZ,YAAY;YACZ,IAAIL,uBAAuB;gBACzBA,sBAAsBwD,gBAAgB,CAAChD;YACzC;YAEA,IAAI;gBACF,MAAMkD,YAAY/D,YAAYC,GAAG;gBAEjC,eAAe;gBACf,MAAM+D,cAAc,MAAM1E,kBAAkB2E,OAAO,CACjDpE,SACA;oBACE,OAAO,MAAMT,eAAeS,SAAS,CAACqE,UAAUC;wBAC9CtF,OAAOuF,KAAK,CAAC,CAAC,OAAO,EAAEF,SAAS,CAAC,EAAEC,OAAO,CAAC,GAAG,EAAEA,MAAM,GAAG,IAAI;oBAC/D;gBACF;gBAGF,MAAMd,eAAerD,YAAYC,GAAG,KAAK8D;gBAEzC,YAAY;gBACZ,IAAI1D,uBAAuB;oBACzBA,sBAAsBkD,mBAAmB,CAAC1C,iBAAiBmD,aAAaX;gBAC1E;gBAEA,IAAI7B,oBAAoB;oBACtBA,mBAAmB6C,oBAAoB,CAAChB;gBAC1C;gBAEAxE,OAAO6B,IAAI,CAAC,eAAesD;gBAC3BnF,OAAO6B,IAAI,CAAC;gBACZqB,UAAUiC;YACZ,EAAE,OAAOL,OAAO;gBACd9E,OAAO8E,KAAK,CAAC,UAAUA;gBAEvB,YAAY;gBACZ,IAAItD,uBAAuB;oBACzBA,sBAAsBiE,gBAAgB,CACpCzD,iBACA8C,iBAAiBY,QAAQZ,QAAQ,IAAIY,MAAMC,OAAOb;gBAEtD;gBAEAtE,yBAAyBuE,QAAQ,CAACD;gBAClC5B;YACF;QACF;QAEA,OAAO5B;IACT,EAAE,OAAOwD,OAAO;QACd9E,OAAO8E,KAAK,CAAC,WAAWA;QAExB,SAAS;QACT,IAAItD,uBAAuB;YACzB,MAAMoE,kBAAkB3E,cAAcK,gBAAgBuE,WAAW,IAAI5D;YACrE,IAAI2D,iBAAiB;gBACnBpE,sBAAsBsE,iBAAiB,CACrChB,iBAAiBY,QAAQZ,QAAQ,IAAIY,MAAMC,OAAOb,SAClD;oBAAEiB,OAAO;gBAAU;YAEvB;QACF;QAEA,kBAAkB;QAClB,MAAMtE,YAAYT,QAAQS,SAAS,IAAIJ,YAAYK,cAAc,CAAC;QAClE,IAAID,WAAW;YACb,MAAMuE,gBAAgB1E,gBAAgBuE,WAAW;YACjD,IAAIG,iBAAiBA,cAAcC,aAAa,IAAI;gBAClD,MAAMjD,WAAWgD,cAAc/C,WAAW;gBAC1C,MAAMd,WAAW6D,cAAcE,WAAW;gBAC1C1F,yBAAyBuE,QAAQ,CAACD;gBAClC9B,SAASmD,WAAW,CAACnF,SAASmB;YAChC;QACF;QAEA,MAAM2C;IACR;AACF"}
1
+ {"version":3,"sources":["../../../src/core/startup/startApp.ts"],"sourcesContent":["/**\n * 应用启动主函数\n * 重构后的启动逻辑,集成所有新功能\n */\n\nimport { logger } from '../../utils';\nimport { ErrorCode, InitializationError } from '../../utils/errors';\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 { AppInstanceManager, getAppInstanceManager } from './AppInstance';\nimport { getEnvironmentDetector } from './environment';\nimport { getRouterManager } from '../router/RouterManager';\nimport { FrameworkEventManager } from '../event/frameworkEvents';\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\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 // 2. 创建应用实例\n const appInstance = instanceManager.createInstance(instanceId, options);\n const finalInstanceId = appInstance.id;\n\n // 3. 初始化服务(并行)\n const servicesInitStart = performance.now();\n const services = await initializeServices({\n ...options,\n eventBus: {\n ...options.eventBus,\n instanceId: finalInstanceId,\n },\n });\n const servicesInitDuration = performance.now() - servicesInitStart;\n\n // 创建框架事件管理器\n frameworkEventManager = new FrameworkEventManager(services.eventBus);\n \n // 触发应用启动事件(使用真实的事件总线)\n frameworkEventManager.emitAppStart(finalInstanceId);\n \n // 触发实例创建事件\n frameworkEventManager.emitInstanceCreated(finalInstanceId);\n\n // 4. 初始化应用实例\n appInstance.initialize(container, services);\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, services, context);\n const renderDuration = performance.now() - renderStart;\n\n // 触发渲染完成事件\n if (frameworkEventManager) {\n frameworkEventManager.emitAppRenderComplete(finalInstanceId, renderDuration);\n }\n\n // 优化:在应用渲染完成后,延迟初始化非关键服务\n // 使用 requestIdleCallback 在浏览器空闲时初始化,不影响用户体验\n if (services.initializeNonCriticalServices) {\n services.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 // 开发模式下显示开发工具\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, services, 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 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 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 // 如果容器存在,尝试渲染错误页面\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","startApp","options","instanceId","startTime","performance","now","envDetector","instanceManager","traceId","frameworkEventManager","container","safeGetElement","undefined","CONTAINER_NOT_FOUND","info","appInstance","createInstance","finalInstanceId","id","servicesInitStart","services","eventBus","servicesInitDuration","emitAppStart","emitInstanceCreated","initialize","routerManager","router","performanceTracker","getPerformanceTracker","recordServiceInit","shouldShowSplash","showSplashScreen","renderer","getRenderer","renderApp","context","renderStart","emitAppRenderStart","renderDuration","emitAppRenderComplete","initializeNonCriticalServices","catch","error","warn","recordFirstRender","totalDuration","recordTotalStartup","report","emitAppStarted","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","debug","recordInitialization","emitAppInitError","Error","String","errorInstanceId","getInstance","emitErrorOccurred","phase","errorInstance","isInitialized","getServices","renderError"],"mappings":"AAAA;;;CAGC,GAED,SAASA,MAAM,QAAQ,cAAc;AACrC,SAASC,SAAS,EAAEC,mBAAmB,QAAQ,qBAAqB;AACpE,SAASC,oBAAoB,EAAEC,eAAe,EAAEC,iBAAiB,QAAQ,sBAAsB;AAE/F,SAASC,sBAAsB,QAAQ,YAAY;AACnD,SAASC,cAAc,EAAEC,wBAAwB,QAAQ,0BAA0B;AACnF,SAASC,iBAAiB,QAAQ,gBAAgB;AAClD,SAASC,kBAAkB,QAAQ,uBAAuB;AAC1D,SAA6BC,qBAAqB,QAAQ,gBAAgB;AAC1E,SAASC,sBAAsB,QAAQ,gBAAgB;AACvD,SAASC,gBAAgB,QAAQ,0BAA0B;AAC3D,SAASC,qBAAqB,QAAQ,2BAA2B;AAEjE;;;;;;CAMC,GACD,OAAO,eAAeC,SACpBC,UAAwB,CAAC,CAAC,EAC1BC,UAAmB;IAEnB,MAAMC,YAAYC,YAAYC,GAAG;IACjC,MAAMC,cAAcT;IACpB,MAAMU,kBAAkBX;IAExB,eAAe;IACfR,qBAAqB;IACrB,MAAMoB,UAAUnB;IAChBC,kBAAkBkB;IAElB,qBAAqB;IACrB,IAAIC,wBAAsD;IAE1D,IAAI;QACF,eAAe;QACf,MAAMC,YAAYT,QAAQS,SAAS,IAAIJ,YAAYK,cAAc,CAAC;QAClE,IAAI,CAACD,WAAW;YACd,MAAM,IAAIvB,oBACR,WACAyB,WACA;gBAAEF,WAAWT,QAAQS,SAAS;YAAC,GAC/BxB,UAAU2B,mBAAmB;QAEjC;QAEA5B,OAAO6B,IAAI,CAAC;QAEZ,YAAY;QACZ,MAAMC,cAAcR,gBAAgBS,cAAc,CAACd,YAAYD;QAC/D,MAAMgB,kBAAkBF,YAAYG,EAAE;QAEtC,eAAe;QACf,MAAMC,oBAAoBf,YAAYC,GAAG;QACzC,MAAMe,WAAW,MAAMzB,mBAAmB;YACxC,GAAGM,OAAO;YACVoB,UAAU;gBACR,GAAGpB,QAAQoB,QAAQ;gBACnBnB,YAAYe;YACd;QACF;QACA,MAAMK,uBAAuBlB,YAAYC,GAAG,KAAKc;QAEjD,YAAY;QACZV,wBAAwB,IAAIV,sBAAsBqB,SAASC,QAAQ;QAEnE,sBAAsB;QACtBZ,sBAAsBc,YAAY,CAACN;QAEnC,WAAW;QACXR,sBAAsBe,mBAAmB,CAACP;QAE1C,aAAa;QACbF,YAAYU,UAAU,CAACf,WAAWU;QAElC,cAAc;QACd,MAAMM,gBAAgB5B;QACtB,IAAIG,QAAQ0B,MAAM,EAAE;YAClB,MAAMD,cAAcD,UAAU,CAACxB,QAAQ0B,MAAM;QAC/C;QAEA,UAAU;QACV,MAAMC,qBAAqBb,YAAYc,qBAAqB;QAC5D,IAAID,oBAAoB;YACtBA,mBAAmBE,iBAAiB,CAACR;QACvC;QAEA,aAAa;QACb,MAAMS,mBAAmBxC,uBAAuBU,QAAQ+B,gBAAgB;QAExE,MAAMC,WAAWlB,YAAYmB,WAAW;QAExC,YAAY;QACZ,MAAMC,YAAY,OAAOC;YACvB,MAAMC,cAAcjC,YAAYC,GAAG;YAEnC,WAAW;YACX,IAAII,uBAAuB;gBACzBA,sBAAsB6B,kBAAkB,CAACrB;YAC3C;YAEA,MAAMgB,SAASE,SAAS,CAAClC,SAASmB,UAAUgB;YAC5C,MAAMG,iBAAiBnC,YAAYC,GAAG,KAAKgC;YAE3C,WAAW;YACX,IAAI5B,uBAAuB;gBACzBA,sBAAsB+B,qBAAqB,CAACvB,iBAAiBsB;YAC/D;YAEA,yBAAyB;YACzB,4CAA4C;YAC5C,IAAInB,SAASqB,6BAA6B,EAAE;gBAC1CrB,SAASqB,6BAA6B,GAAGC,KAAK,CAAC,CAACC;oBAC9C1D,OAAO2D,IAAI,CAAC,wBAAwBD;gBACtC;YACF;YAEA,IAAIf,oBAAoB;gBACtBA,mBAAmBiB,iBAAiB,CAACN;gBACrC,MAAMO,gBAAgB1C,YAAYC,GAAG,KAAKF;gBAC1CyB,mBAAmBmB,kBAAkB,CAACD;gBACtClB,mBAAmBoB,MAAM;YAC3B;YAEA,aAAa;YACb,IAAIvC,uBAAuB;gBACzBA,sBAAsBwC,cAAc,CAAChC,iBAAiBb,YAAYC,GAAG,KAAKF;YAC5E;YAEA,cAAc;YACd,IAAI+C,QAAQC,GAAG,CAACC,QAAQ,KAAK,iBAAiB,OAAOC,WAAW,aAAa;gBAC3E,oBAAoB;gBACpBC,WAAW;oBACT,MAAMC,oBAAoBC,SAASC,aAAa,CAAC;oBACjDF,kBAAkBrC,EAAE,GAAG;oBACvBsC,SAASE,IAAI,CAACC,WAAW,CAACJ;gBAE1B,uBAAuB;gBACvB,oBAAoB;gBACpB,wDAAwD;gBACxD,gDAAgD;gBAChD,gEAAgE;gBAChE,MAAM;gBACR,GAAG;YACL;QACF;QAEA,IAAIxB,kBAAkB;YACpB,wBAAwB;YACxB,MAAM6B,mBAAmB,CAACxB;gBACxBnD,OAAO6B,IAAI,CAAC;gBAEZ,YAAY;gBACZ,IAAIL,uBAAuB;oBACzB,MAAMoD,eAAezB,QAAQ0B,QAAQ,IAAI;oBACzCrD,sBAAsBsD,mBAAmB,CAAC9C,iBAAiBmB,SAASyB;gBACtE;gBAEA,IAAI5D,QAAQ2D,gBAAgB,EAAE;oBAC5BI,QAAQC,OAAO,CACbhE,QAAQ2D,gBAAgB,CAAC;wBACvB3E,OAAO6B,IAAI,CAAC;wBACZqB,UAAUC;oBACZ,GAAGA,UACHM,KAAK,CAAC,CAACC;wBACP1D,OAAO0D,KAAK,CAAC,4BAA4BA;wBACzClD,yBAAyByE,QAAQ,CAACvB;wBAClCR,UAAUC;oBACZ;gBACF,OAAO;oBACLnD,OAAO6B,IAAI,CAAC;oBACZqB,UAAUC;gBACZ;YACF;YAEA,YAAY;YACZ,IAAI3B,uBAAuB;gBACzBA,sBAAsB0D,gBAAgB,CAAClD;YACzC;YAEA,QAAQ;YACRgB,SAASmC,kBAAkB,CAACnE,SAASmB,UAAUwC;QACjD,OAAO;YACL,sBAAsB;YACtB3E,OAAO6B,IAAI,CAAC;YAEZ,YAAY;YACZ,IAAIL,uBAAuB;gBACzBA,sBAAsB0D,gBAAgB,CAAClD;YACzC;YAEA,IAAI;gBACF,MAAMoD,YAAYjE,YAAYC,GAAG;gBAEjC,eAAe;gBACf,MAAMiE,cAAc,MAAM5E,kBAAkB6E,OAAO,CACjDtE,SACA;oBACE,OAAO,MAAMT,eAAeS,SAAS,CAACuE,UAAUC;wBAC9CxF,OAAOyF,KAAK,CAAC,CAAC,OAAO,EAAEF,SAAS,CAAC,EAAEC,OAAO,CAAC,GAAG,EAAEA,MAAM,GAAG,IAAI;oBAC/D;gBACF;gBAGF,MAAMZ,eAAezD,YAAYC,GAAG,KAAKgE;gBAEzC,YAAY;gBACZ,IAAI5D,uBAAuB;oBACzBA,sBAAsBsD,mBAAmB,CAAC9C,iBAAiBqD,aAAaT;gBAC1E;gBAEA,IAAIjC,oBAAoB;oBACtBA,mBAAmB+C,oBAAoB,CAACd;gBAC1C;gBAEA5E,OAAO6B,IAAI,CAAC,eAAewD;gBAC3BrF,OAAO6B,IAAI,CAAC;gBACZqB,UAAUmC;YACZ,EAAE,OAAO3B,OAAO;gBACd1D,OAAO0D,KAAK,CAAC,UAAUA;gBAEvB,YAAY;gBACZ,IAAIlC,uBAAuB;oBACzBA,sBAAsBmE,gBAAgB,CACpC3D,iBACA0B,iBAAiBkC,QAAQlC,QAAQ,IAAIkC,MAAMC,OAAOnC;gBAEtD;gBAEAlD,yBAAyByE,QAAQ,CAACvB;gBAClCR;YACF;QACF;QAEA,OAAO5B;IACT,EAAE,OAAOoC,OAAO;QACd1D,OAAO0D,KAAK,CAAC,WAAWA;QAExB,SAAS;QACT,IAAIlC,uBAAuB;YACzB,MAAMsE,kBAAkB7E,cAAcK,gBAAgByE,WAAW,IAAI9D;YACrE,IAAI6D,iBAAiB;gBACnBtE,sBAAsBwE,iBAAiB,CACrCtC,iBAAiBkC,QAAQlC,QAAQ,IAAIkC,MAAMC,OAAOnC,SAClD;oBAAEuC,OAAO;gBAAU;YAEvB;QACF;QAEA,kBAAkB;QAClB,MAAMxE,YAAYT,QAAQS,SAAS,IAAIJ,YAAYK,cAAc,CAAC;QAClE,IAAID,WAAW;YACb,MAAMyE,gBAAgB5E,gBAAgByE,WAAW;YACjD,IAAIG,iBAAiBA,cAAcC,aAAa,IAAI;gBAClD,MAAMnD,WAAWkD,cAAcjD,WAAW;gBAC1C,MAAMd,WAAW+D,cAAcE,WAAW;gBAC1C5F,yBAAyByE,QAAQ,CAACvB;gBAClCV,SAASqD,WAAW,CAACrF,SAASmB;YAChC;QACF;QAEA,MAAMuB;IACR;AACF"}