electron-infra-kit 0.0.2

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 (254) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +302 -0
  3. package/README.zh-CN.md +308 -0
  4. package/dist/core/error/WindowError.d.ts +56 -0
  5. package/dist/core/error/WindowError.js +71 -0
  6. package/dist/core/error/WindowError.js.map +1 -0
  7. package/dist/core/error/WindowError.mjs +71 -0
  8. package/dist/core/error/WindowError.mjs.map +1 -0
  9. package/dist/core/ipc/IpcHandler.d.ts +48 -0
  10. package/dist/core/ipc/IpcHandler.js +59 -0
  11. package/dist/core/ipc/IpcHandler.js.map +1 -0
  12. package/dist/core/ipc/IpcHandler.mjs +59 -0
  13. package/dist/core/ipc/IpcHandler.mjs.map +1 -0
  14. package/dist/core/ipc/IpcRouter.d.ts +70 -0
  15. package/dist/core/ipc/IpcRouter.js +143 -0
  16. package/dist/core/ipc/IpcRouter.js.map +1 -0
  17. package/dist/core/ipc/IpcRouter.mjs +143 -0
  18. package/dist/core/ipc/IpcRouter.mjs.map +1 -0
  19. package/dist/core/ipc/index.d.ts +3 -0
  20. package/dist/core/ipc/index.js +1 -0
  21. package/dist/core/ipc/index.js.map +1 -0
  22. package/dist/core/ipc/index.mjs +1 -0
  23. package/dist/core/ipc/index.mjs.map +1 -0
  24. package/dist/core/ipc/ipc-router.type.d.ts +73 -0
  25. package/dist/core/ipc/transport/index.d.ts +65 -0
  26. package/dist/core/ipc/transport/index.js +229 -0
  27. package/dist/core/ipc/transport/index.js.map +1 -0
  28. package/dist/core/ipc/transport/index.mjs +229 -0
  29. package/dist/core/ipc/transport/index.mjs.map +1 -0
  30. package/dist/core/ipc/transport/ipc.type.d.ts +36 -0
  31. package/dist/core/lifecycle/LifecycleManager.d.ts +66 -0
  32. package/dist/core/lifecycle/LifecycleManager.js +140 -0
  33. package/dist/core/lifecycle/LifecycleManager.js.map +1 -0
  34. package/dist/core/lifecycle/LifecycleManager.mjs +140 -0
  35. package/dist/core/lifecycle/LifecycleManager.mjs.map +1 -0
  36. package/dist/core/message-bus/MessageBus.d.ts +282 -0
  37. package/dist/core/message-bus/MessageBus.js +677 -0
  38. package/dist/core/message-bus/MessageBus.js.map +1 -0
  39. package/dist/core/message-bus/MessageBus.mjs +677 -0
  40. package/dist/core/message-bus/MessageBus.mjs.map +1 -0
  41. package/dist/core/message-bus/MessageBusClient.d.ts +100 -0
  42. package/dist/core/message-bus/MessageBusClient.js +280 -0
  43. package/dist/core/message-bus/MessageBusClient.js.map +1 -0
  44. package/dist/core/message-bus/MessageBusClient.mjs +280 -0
  45. package/dist/core/message-bus/MessageBusClient.mjs.map +1 -0
  46. package/dist/core/message-bus/core/DataStoreManager.d.ts +51 -0
  47. package/dist/core/message-bus/core/DataStoreManager.js +94 -0
  48. package/dist/core/message-bus/core/DataStoreManager.js.map +1 -0
  49. package/dist/core/message-bus/core/DataStoreManager.mjs +94 -0
  50. package/dist/core/message-bus/core/DataStoreManager.mjs.map +1 -0
  51. package/dist/core/message-bus/core/ManagedPort.d.ts +26 -0
  52. package/dist/core/message-bus/core/ManagedPort.js +55 -0
  53. package/dist/core/message-bus/core/ManagedPort.js.map +1 -0
  54. package/dist/core/message-bus/core/ManagedPort.mjs +55 -0
  55. package/dist/core/message-bus/core/ManagedPort.mjs.map +1 -0
  56. package/dist/core/message-bus/core/PortManager.d.ts +47 -0
  57. package/dist/core/message-bus/core/PortManager.js +114 -0
  58. package/dist/core/message-bus/core/PortManager.js.map +1 -0
  59. package/dist/core/message-bus/core/PortManager.mjs +114 -0
  60. package/dist/core/message-bus/core/PortManager.mjs.map +1 -0
  61. package/dist/core/message-bus/core/SubscriptionManager.d.ts +36 -0
  62. package/dist/core/message-bus/core/SubscriptionManager.js +78 -0
  63. package/dist/core/message-bus/core/SubscriptionManager.js.map +1 -0
  64. package/dist/core/message-bus/core/SubscriptionManager.mjs +78 -0
  65. package/dist/core/message-bus/core/SubscriptionManager.mjs.map +1 -0
  66. package/dist/core/message-bus/core/TransactionManager.d.ts +54 -0
  67. package/dist/core/message-bus/core/TransactionManager.js +95 -0
  68. package/dist/core/message-bus/core/TransactionManager.js.map +1 -0
  69. package/dist/core/message-bus/core/TransactionManager.mjs +95 -0
  70. package/dist/core/message-bus/core/TransactionManager.mjs.map +1 -0
  71. package/dist/core/message-bus/core/index.d.ts +5 -0
  72. package/dist/core/message-bus/index.d.ts +4 -0
  73. package/dist/core/message-bus/index.js +1 -0
  74. package/dist/core/message-bus/index.js.map +1 -0
  75. package/dist/core/message-bus/index.mjs +1 -0
  76. package/dist/core/message-bus/index.mjs.map +1 -0
  77. package/dist/core/message-bus/message-bus.type.d.ts +143 -0
  78. package/dist/core/message-bus/message-bus.type.js +26 -0
  79. package/dist/core/message-bus/message-bus.type.js.map +1 -0
  80. package/dist/core/message-bus/message-bus.type.mjs +26 -0
  81. package/dist/core/message-bus/message-bus.type.mjs.map +1 -0
  82. package/dist/core/message-bus/preload.d.ts +16 -0
  83. package/dist/core/message-bus/preload.js +27 -0
  84. package/dist/core/message-bus/preload.js.map +1 -0
  85. package/dist/core/message-bus/preload.mjs +27 -0
  86. package/dist/core/message-bus/preload.mjs.map +1 -0
  87. package/dist/core/message-bus/transport/ITransport.d.ts +40 -0
  88. package/dist/core/message-bus/transport/IpcTransport.d.ts +18 -0
  89. package/dist/core/message-bus/transport/IpcTransport.js +60 -0
  90. package/dist/core/message-bus/transport/IpcTransport.js.map +1 -0
  91. package/dist/core/message-bus/transport/IpcTransport.mjs +60 -0
  92. package/dist/core/message-bus/transport/IpcTransport.mjs.map +1 -0
  93. package/dist/core/message-bus/transport/MessagePortTransport.d.ts +15 -0
  94. package/dist/core/message-bus/transport/MessagePortTransport.js +35 -0
  95. package/dist/core/message-bus/transport/MessagePortTransport.js.map +1 -0
  96. package/dist/core/message-bus/transport/MessagePortTransport.mjs +35 -0
  97. package/dist/core/message-bus/transport/MessagePortTransport.mjs.map +1 -0
  98. package/dist/core/message-bus/transport/index.d.ts +3 -0
  99. package/dist/core/window/IpcSetup.d.ts +50 -0
  100. package/dist/core/window/IpcSetup.js +96 -0
  101. package/dist/core/window/IpcSetup.js.map +1 -0
  102. package/dist/core/window/IpcSetup.mjs +96 -0
  103. package/dist/core/window/IpcSetup.mjs.map +1 -0
  104. package/dist/core/window/WindowCreator.d.ts +66 -0
  105. package/dist/core/window/WindowCreator.js +168 -0
  106. package/dist/core/window/WindowCreator.js.map +1 -0
  107. package/dist/core/window/WindowCreator.mjs +168 -0
  108. package/dist/core/window/WindowCreator.mjs.map +1 -0
  109. package/dist/core/window/WindowManager.d.ts +214 -0
  110. package/dist/core/window/WindowManager.js +583 -0
  111. package/dist/core/window/WindowManager.js.map +1 -0
  112. package/dist/core/window/WindowManager.mjs +583 -0
  113. package/dist/core/window/WindowManager.mjs.map +1 -0
  114. package/dist/core/window/WindowStore.d.ts +136 -0
  115. package/dist/core/window/WindowStore.js +436 -0
  116. package/dist/core/window/WindowStore.js.map +1 -0
  117. package/dist/core/window/WindowStore.mjs +436 -0
  118. package/dist/core/window/WindowStore.mjs.map +1 -0
  119. package/dist/core/window/constants.d.ts +17 -0
  120. package/dist/core/window/constants.js +15 -0
  121. package/dist/core/window/constants.js.map +1 -0
  122. package/dist/core/window/constants.mjs +15 -0
  123. package/dist/core/window/constants.mjs.map +1 -0
  124. package/dist/core/window/core/MetricsManager.d.ts +14 -0
  125. package/dist/core/window/core/MetricsManager.js +27 -0
  126. package/dist/core/window/core/MetricsManager.js.map +1 -0
  127. package/dist/core/window/core/MetricsManager.mjs +27 -0
  128. package/dist/core/window/core/MetricsManager.mjs.map +1 -0
  129. package/dist/core/window/core/PluginExecutor.d.ts +22 -0
  130. package/dist/core/window/core/PluginExecutor.js +110 -0
  131. package/dist/core/window/core/PluginExecutor.js.map +1 -0
  132. package/dist/core/window/core/PluginExecutor.mjs +110 -0
  133. package/dist/core/window/core/PluginExecutor.mjs.map +1 -0
  134. package/dist/core/window/core/WindowContextManager.d.ts +26 -0
  135. package/dist/core/window/core/WindowContextManager.js +59 -0
  136. package/dist/core/window/core/WindowContextManager.js.map +1 -0
  137. package/dist/core/window/core/WindowContextManager.mjs +59 -0
  138. package/dist/core/window/core/WindowContextManager.mjs.map +1 -0
  139. package/dist/core/window/core/WindowLifecycle.d.ts +15 -0
  140. package/dist/core/window/core/WindowLifecycle.js +150 -0
  141. package/dist/core/window/core/WindowLifecycle.js.map +1 -0
  142. package/dist/core/window/core/WindowLifecycle.mjs +150 -0
  143. package/dist/core/window/core/WindowLifecycle.mjs.map +1 -0
  144. package/dist/core/window/core/WindowOperator.d.ts +90 -0
  145. package/dist/core/window/core/WindowOperator.js +154 -0
  146. package/dist/core/window/core/WindowOperator.js.map +1 -0
  147. package/dist/core/window/core/WindowOperator.mjs +154 -0
  148. package/dist/core/window/core/WindowOperator.mjs.map +1 -0
  149. package/dist/core/window/core/WindowRegistry.d.ts +168 -0
  150. package/dist/core/window/core/WindowRegistry.js +331 -0
  151. package/dist/core/window/core/WindowRegistry.js.map +1 -0
  152. package/dist/core/window/core/WindowRegistry.mjs +331 -0
  153. package/dist/core/window/core/WindowRegistry.mjs.map +1 -0
  154. package/dist/core/window/core/WindowStateManager.d.ts +40 -0
  155. package/dist/core/window/core/WindowStateManager.js +110 -0
  156. package/dist/core/window/core/WindowStateManager.js.map +1 -0
  157. package/dist/core/window/core/WindowStateManager.mjs +110 -0
  158. package/dist/core/window/core/WindowStateManager.mjs.map +1 -0
  159. package/dist/core/window/index.d.ts +7 -0
  160. package/dist/core/window/index.js +1 -0
  161. package/dist/core/window/index.js.map +1 -0
  162. package/dist/core/window/index.mjs +1 -0
  163. package/dist/core/window/index.mjs.map +1 -0
  164. package/dist/core/window/window-manager.schema.d.ts +50 -0
  165. package/dist/core/window/window-manager.schema.js +87 -0
  166. package/dist/core/window/window-manager.schema.js.map +1 -0
  167. package/dist/core/window/window-manager.schema.mjs +87 -0
  168. package/dist/core/window/window-manager.schema.mjs.map +1 -0
  169. package/dist/core/window/window-manager.type.d.ts +365 -0
  170. package/dist/index.d.ts +25 -0
  171. package/dist/index.js +33 -0
  172. package/dist/index.js.map +1 -0
  173. package/dist/index.mjs +33 -0
  174. package/dist/index.mjs.map +1 -0
  175. package/dist/index.umd.js +1 -0
  176. package/dist/infrastructure/config/ConfigManager.d.ts +133 -0
  177. package/dist/infrastructure/config/ConfigManager.js +218 -0
  178. package/dist/infrastructure/config/ConfigManager.js.map +1 -0
  179. package/dist/infrastructure/config/ConfigManager.mjs +218 -0
  180. package/dist/infrastructure/config/ConfigManager.mjs.map +1 -0
  181. package/dist/infrastructure/config/index.d.ts +1 -0
  182. package/dist/infrastructure/debug/EnhancedDebugHelper.d.ts +106 -0
  183. package/dist/infrastructure/debug/EnhancedDebugHelper.js +218 -0
  184. package/dist/infrastructure/debug/EnhancedDebugHelper.js.map +1 -0
  185. package/dist/infrastructure/debug/EnhancedDebugHelper.mjs +218 -0
  186. package/dist/infrastructure/debug/EnhancedDebugHelper.mjs.map +1 -0
  187. package/dist/infrastructure/debug/PerformanceMonitor.d.ts +45 -0
  188. package/dist/infrastructure/debug/PerformanceMonitor.js +67 -0
  189. package/dist/infrastructure/debug/PerformanceMonitor.js.map +1 -0
  190. package/dist/infrastructure/debug/PerformanceMonitor.mjs +67 -0
  191. package/dist/infrastructure/debug/PerformanceMonitor.mjs.map +1 -0
  192. package/dist/infrastructure/debug/index.d.ts +22 -0
  193. package/dist/infrastructure/debug/index.js +47 -0
  194. package/dist/infrastructure/debug/index.js.map +1 -0
  195. package/dist/infrastructure/debug/index.mjs +47 -0
  196. package/dist/infrastructure/debug/index.mjs.map +1 -0
  197. package/dist/infrastructure/errors/ErrorCodes.d.ts +74 -0
  198. package/dist/infrastructure/errors/ErrorCodes.js +78 -0
  199. package/dist/infrastructure/errors/ErrorCodes.js.map +1 -0
  200. package/dist/infrastructure/errors/ErrorCodes.mjs +78 -0
  201. package/dist/infrastructure/errors/ErrorCodes.mjs.map +1 -0
  202. package/dist/infrastructure/errors/StandardError.d.ts +61 -0
  203. package/dist/infrastructure/errors/StandardError.js +84 -0
  204. package/dist/infrastructure/errors/StandardError.js.map +1 -0
  205. package/dist/infrastructure/errors/StandardError.mjs +84 -0
  206. package/dist/infrastructure/errors/StandardError.mjs.map +1 -0
  207. package/dist/infrastructure/errors/index.d.ts +13 -0
  208. package/dist/infrastructure/errors/index.js +24 -0
  209. package/dist/infrastructure/errors/index.js.map +1 -0
  210. package/dist/infrastructure/errors/index.mjs +24 -0
  211. package/dist/infrastructure/errors/index.mjs.map +1 -0
  212. package/dist/infrastructure/logger/ElectronLogger.d.ts +39 -0
  213. package/dist/infrastructure/logger/ElectronLogger.js +65 -0
  214. package/dist/infrastructure/logger/ElectronLogger.js.map +1 -0
  215. package/dist/infrastructure/logger/ElectronLogger.mjs +65 -0
  216. package/dist/infrastructure/logger/ElectronLogger.mjs.map +1 -0
  217. package/dist/infrastructure/logger/index.d.ts +2 -0
  218. package/dist/infrastructure/logger/logger.type.d.ts +8 -0
  219. package/dist/internal/types/BrandedTypes.d.ts +64 -0
  220. package/dist/internal/types/BrandedTypes.js +54 -0
  221. package/dist/internal/types/BrandedTypes.js.map +1 -0
  222. package/dist/internal/types/BrandedTypes.mjs +54 -0
  223. package/dist/internal/types/BrandedTypes.mjs.map +1 -0
  224. package/dist/internal/types/PerformanceOptions.d.ts +87 -0
  225. package/dist/internal/types/branded.d.ts +42 -0
  226. package/dist/internal/utils/MessageDispatcher.d.ts +67 -0
  227. package/dist/internal/utils/MessageDispatcher.js +96 -0
  228. package/dist/internal/utils/MessageDispatcher.js.map +1 -0
  229. package/dist/internal/utils/MessageDispatcher.mjs +96 -0
  230. package/dist/internal/utils/MessageDispatcher.mjs.map +1 -0
  231. package/dist/internal/utils/RateLimiter.d.ts +41 -0
  232. package/dist/internal/utils/RateLimiter.js +83 -0
  233. package/dist/internal/utils/RateLimiter.js.map +1 -0
  234. package/dist/internal/utils/RateLimiter.mjs +83 -0
  235. package/dist/internal/utils/RateLimiter.mjs.map +1 -0
  236. package/dist/internal/utils/StateKeeper.d.ts +125 -0
  237. package/dist/internal/utils/StateKeeper.js +334 -0
  238. package/dist/internal/utils/StateKeeper.js.map +1 -0
  239. package/dist/internal/utils/StateKeeper.mjs +334 -0
  240. package/dist/internal/utils/StateKeeper.mjs.map +1 -0
  241. package/dist/internal/utils/branded-helpers.d.ts +33 -0
  242. package/dist/internal/utils/index.d.ts +5 -0
  243. package/dist/preload/index.d.ts +45 -0
  244. package/dist/preload/index.js +91 -0
  245. package/dist/preload/index.js.map +1 -0
  246. package/dist/preload/index.mjs +91 -0
  247. package/dist/preload/index.mjs.map +1 -0
  248. package/dist/preload/preload.type.d.ts +15 -0
  249. package/dist/types.d.ts +7 -0
  250. package/dist/types.js +1 -0
  251. package/dist/types.js.map +1 -0
  252. package/dist/types.mjs +1 -0
  253. package/dist/types.mjs.map +1 -0
  254. package/package.json +143 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LifecycleManager.mjs","sources":["../../../src/core/lifecycle/LifecycleManager.ts"],"sourcesContent":["import { Logger, ILogger } from '@/infrastructure/logger';\nimport WindowManager from '@/core/window/WindowManager';\nimport IpcRouter from '@/core/ipc/IpcRouter';\nimport { MessageBus } from '@/core/message-bus/MessageBus';\nimport { WindowManagerConfig } from '@/core/window/window-manager.type';\nimport { DebugHelper } from '@/infrastructure/debug';\n\n/**\n * Lifecycle Configuration\n * 生命周期配置\n */\nexport interface LifecycleConfig extends WindowManagerConfig {\n /**\n * Whether to automatically start on instantiation (default: false)\n * 是否在实例化时自动启动 (默认: false)\n */\n autoStart?: boolean;\n\n /**\n * Existing IpcRouter instance\n * 现有的 IpcRouter 实例\n */\n ipcRouter?: IpcRouter;\n\n /**\n * Existing WindowManager instance\n * 现有的 WindowManager 实例\n */\n windowManager?: WindowManager;\n\n /**\n * Existing MessageBus instance\n * 现有的 MessageBus 实例\n */\n messageBus?: MessageBus;\n}\n\n/**\n * Lifecycle Manager\n * 生命周期管理器\n *\n * Orchestrates the startup and shutdown of the Electron Toolkit modules.\n * 编排 Electron Toolkit 模块的启动和关闭。\n */\nexport class LifecycleManager {\n public windowManager?: WindowManager;\n public ipcRouter?: IpcRouter;\n public messageBus?: MessageBus;\n private logger: ILogger;\n private isStarted = false;\n private config: LifecycleConfig;\n\n /**\n * Create LifecycleManager instance\n * 创建 LifecycleManager 实例\n * @param config - Configuration object\n */\n constructor(config: LifecycleConfig = {}) {\n this.config = config;\n this.logger = config.logger || new Logger({ appName: 'LifecycleManager' });\n\n if (config.autoStart) {\n this.startup().catch((err) => {\n this.logger.error(`Auto-startup failed: ${err}`);\n });\n }\n }\n\n /**\n * Start up all services\n * 启动所有服务\n */\n async startup(): Promise<void> {\n if (this.isStarted) {\n this.logger.warn('LifecycleManager already started');\n return;\n }\n\n try {\n this.logger.info('Starting up Electron Toolkit services...');\n\n // 1. Initialize IpcRouter (Foundation for communication)\n // 1. 初始化 IpcRouter (通信基础)\n this.ipcRouter = this.config.ipcRouter || new IpcRouter({ logger: this.config.logger });\n this.logger.info('IpcRouter initialized');\n\n // 2. Initialize MessageBus (Cross-window communication)\n // 2. 初始化 MessageBus (跨窗口通信)\n this.messageBus = this.config.messageBus || new MessageBus({ logger: this.config.logger });\n\n // 3. Initialize WindowManager (Core window management)\n // 3. 初始化 WindowManager (核心窗口管理)\n this.windowManager =\n this.config.windowManager ||\n new WindowManager({\n ...this.config,\n ipcRouter: this.ipcRouter,\n messageBus: this.messageBus,\n });\n // Wait for WindowManager initialization (plugins, etc.)\n await this.windowManager.ready();\n this.logger.info('WindowManager initialized');\n\n // 4. Connect MessageBus to WindowManager\n // 4. 连接 MessageBus 到 WindowManager\n this.messageBus.autoRegisterWindows(this.windowManager);\n this.logger.info('MessageBus initialized');\n\n // 4. Setup Debug Mode if enabled\n // 4. 如果启用,设置调试模式\n if (this.config.isDevelopment || process.env.NODE_ENV === 'development') {\n DebugHelper.enableDebugMode();\n DebugHelper.register('windowManager', this.windowManager);\n DebugHelper.register('ipcRouter', this.ipcRouter);\n DebugHelper.register('messageBus', this.messageBus);\n DebugHelper.register('lifecycleManager', this);\n this.logger.info('Debug mode enabled');\n }\n\n this.isStarted = true;\n this.logger.info('Startup completed successfully');\n } catch (error) {\n this.logger.error(`Startup failed: ${error}`);\n await this.shutdown(); // Cleanup partial initialization\n throw error;\n }\n }\n\n /**\n * Shut down all services gracefully\n * 优雅地关闭所有服务\n */\n async shutdown(): Promise<void> {\n this.logger.info('Shutting down Electron Toolkit services...');\n\n // Shutdown in reverse order of initialization\n // 按初始化的逆序关闭\n\n // 1. Dispose MessageBus\n if (this.messageBus) {\n try {\n this.messageBus.dispose();\n this.logger.info('MessageBus disposed');\n } catch (e) {\n this.logger.warn(`MessageBus dispose error: ${e}`);\n }\n this.messageBus = undefined;\n }\n\n // 2. Dispose WindowManager (closes all windows)\n if (this.windowManager) {\n try {\n if (typeof this.windowManager.dispose === 'function') {\n await this.windowManager.dispose();\n this.logger.info('WindowManager disposed');\n } else {\n // Fallback if dispose is not implemented\n this.windowManager.stopCleanupProtection();\n // Ideally we should close all windows here, but we rely on WindowManager's dispose\n }\n } catch (e) {\n this.logger.warn(`WindowManager dispose error: ${e}`);\n }\n this.windowManager = undefined;\n }\n\n // 3. Dispose IpcRouter\n if (this.ipcRouter) {\n try {\n this.ipcRouter.dispose();\n this.logger.info('IpcRouter disposed');\n } catch (e) {\n this.logger.warn(`IpcRouter dispose error: ${e}`);\n }\n this.ipcRouter = undefined;\n }\n\n this.isStarted = false;\n this.logger.info('Shutdown completed');\n }\n\n /**\n * Get initialization status\n * 获取初始化状态\n */\n public get started(): boolean {\n return this.isStarted;\n }\n}\n"],"names":["Logger"],"mappings":"qSAqCA;;;;;;AAMG;MACU,gBAAgB,CAAA;AACpB,IAAA,aAAa;AACb,IAAA,SAAS;AACT,IAAA,UAAU;AACT,IAAA,MAAM;IACN,SAAS,GAAG,KAAK;AACjB,IAAA,MAAM;AAEd;;;;AAIG;AACH,IAAA,WAAA,CAAY,SAA0B,EAAE,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAIA,cAAM,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE1E,QAAA,IAAI,MAAM,CAAC,SAAS,EAAE;YACpB,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,KAAI;gBAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,qBAAA,EAAwB,GAAG,CAAA,CAAE,CAAC;AAClD,YAAA,CAAC,CAAC;QACJ;IACF;AAEA;;;AAGG;AACH,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC;YACpD;QACF;AAEA,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC;;;YAI5D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACvF,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC;;;YAIzC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;;;AAI1F,YAAA,IAAI,CAAC,aAAa;gBAChB,IAAI,CAAC,MAAM,CAAC,aAAa;AACzB,oBAAA,IAAI,aAAa,CAAC;wBAChB,GAAG,IAAI,CAAC,MAAM;wBACd,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,UAAU,EAAE,IAAI,CAAC,UAAU;AAC5B,qBAAA,CAAC;;AAEJ,YAAA,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAChC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC;;;YAI7C,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC;AACvD,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC;;;AAI1C,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE;gBACvE,WAAW,CAAC,eAAe,EAAE;gBAC7B,WAAW,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC;gBACzD,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjD,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC;AACnD,gBAAA,WAAW,CAAC,QAAQ,CAAC,kBAAkB,EAAE,IAAI,CAAC;AAC9C,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC;YACxC;AAEA,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC;QACpD;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,gBAAA,EAAmB,KAAK,CAAA,CAAE,CAAC;AAC7C,YAAA,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;AACtB,YAAA,MAAM,KAAK;QACb;IACF;AAEA;;;AAGG;AACH,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC;;;;AAM9D,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACzB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC;YACzC;YAAE,OAAO,CAAC,EAAE;gBACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,0BAAA,EAA6B,CAAC,CAAA,CAAE,CAAC;YACpD;AACA,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;QAC7B;;AAGA,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI;gBACF,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,KAAK,UAAU,EAAE;AACpD,oBAAA,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AAClC,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC;gBAC5C;qBAAO;;AAEL,oBAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE;;gBAE5C;YACF;YAAE,OAAO,CAAC,EAAE;gBACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,6BAAA,EAAgC,CAAC,CAAA,CAAE,CAAC;YACvD;AACA,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS;QAChC;;AAGA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACxB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC;YACxC;YAAE,OAAO,CAAC,EAAE;gBACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,yBAAA,EAA4B,CAAC,CAAA,CAAE,CAAC;YACnD;AACA,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC5B;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC;IACxC;AAEA;;;AAGG;AACH,IAAA,IAAW,OAAO,GAAA;QAChB,OAAO,IAAI,CAAC,SAAS;IACvB;AACD"}
@@ -0,0 +1,282 @@
1
+ import { BrowserWindow } from 'electron';
2
+ import { EventEmitter } from 'events';
3
+ import { ILogger } from '@/infrastructure/logger';
4
+ import { MessageDispatcher } from '@/internal/utils/MessageDispatcher';
5
+ import { FieldPermission, MessageBusHandler, BusMessageHandler, MessageBusOptions } from './message-bus.type';
6
+ import type WindowManager from '@/core/window/WindowManager';
7
+ import { TransactionManager } from './core/TransactionManager';
8
+ import { SubscriptionManager } from './core/SubscriptionManager';
9
+ import { DataStoreManager } from './core/DataStoreManager';
10
+ /**
11
+ * MessageBus - Multi-window state synchronization and communication bridge
12
+ * MessageBus - 多窗口状态同步与通信桥梁
13
+ *
14
+ * Design patterns / 设计模式:
15
+ * - Shared State (Instance-based): Singleton instance holds shared state (单例实例持有共享状态)
16
+ * - Transport Layer Abstraction: Decouples communication mechanism (传输层抽象:解耦通信机制)
17
+ * - Permission Control: Field-level + Window-level dual permission (权限控制:字段级 + 窗口级双重权限)
18
+ * - Message Proxy: Unified communication interface (消息代理:统一的通信接口)
19
+ * - Componentized: Delegates responsibilities to core managers (组件化:将职责委托给核心管理器)
20
+ */
21
+ export declare class MessageBus extends EventEmitter {
22
+ private eventName;
23
+ protected logger: ILogger;
24
+ protected subscriptionManager: SubscriptionManager;
25
+ protected transactionManager: TransactionManager;
26
+ protected dataStoreManager: DataStoreManager;
27
+ private transport;
28
+ private transportMode;
29
+ private windows;
30
+ protected dispatcher: MessageDispatcher<MessageBus>;
31
+ private groupResolver?;
32
+ private watchCallbacks;
33
+ private windowSubscriptions;
34
+ /**
35
+ * Create a new MessageBus instance
36
+ * 创建一个新的 MessageBus 实例
37
+ *
38
+ * @param options - Configuration options
39
+ */
40
+ constructor(options?: MessageBusOptions);
41
+ /**
42
+ * Select transport mode
43
+ * 选择传输模式
44
+ */
45
+ private selectTransportMode;
46
+ /**
47
+ * Create transport instance
48
+ * 创建传输实例
49
+ */
50
+ private createTransport;
51
+ /**
52
+ * Handle incoming message from transport
53
+ * 处理来自传输层的消息
54
+ */
55
+ private handleTransportMessage;
56
+ /**
57
+ * Register a window with MessageBus
58
+ * 注册窗口到 MessageBus
59
+ * @param windowId - Window ID (窗口 ID)
60
+ * @param window - BrowserWindow instance (BrowserWindow 实例)
61
+ */
62
+ registerWindow(windowId: string, window: BrowserWindow): void;
63
+ /**
64
+ * Unregister a window from MessageBus
65
+ * 从 MessageBus 注销窗口
66
+ * @param windowId - Window ID (窗口 ID)
67
+ */
68
+ unregisterWindow(windowId: string): void;
69
+ /**
70
+ * Auto register/unregister windows with WindowManager
71
+ * 自动注册/注销窗口与 WindowManager
72
+ * @param windowManager - WindowManager instance (WindowManager 实例)
73
+ */
74
+ autoRegisterWindows(windowManager: WindowManager): void;
75
+ /**
76
+ * Dispose all resources
77
+ * 释放所有资源
78
+ */
79
+ dispose(): void;
80
+ /**
81
+ * Register a single event handler
82
+ * 注册单个事件处理器
83
+ * @param handler - Event handler (事件处理器)
84
+ */
85
+ registerHandler(handler: MessageBusHandler): void;
86
+ /**
87
+ * Batch register event handlers
88
+ * 批量注册事件处理器
89
+ * @param handlers - Array of event handlers (事件处理器数组)
90
+ */
91
+ registerHandlers(handlers: MessageBusHandler[]): void;
92
+ /**
93
+ * Unregister a single event handler
94
+ * 注销单个事件处理器
95
+ * @param handler - Event handler (事件处理器)
96
+ */
97
+ unregisterHandler(handler: MessageBusHandler): void;
98
+ /**
99
+ * Batch unregister event handlers
100
+ * 批量注销事件处理器
101
+ * @param handlers - Array of event handlers (事件处理器数组)
102
+ */
103
+ unregisterHandlers(handlers: MessageBusHandler[]): void;
104
+ /**
105
+ * Get data
106
+ * 获取数据
107
+ * @param key - Data key, returns all data if not provided (数据键,不传则返回所有数据)
108
+ * @returns Data value or all data (数据值或所有数据)
109
+ */
110
+ getData(key?: string): any;
111
+ /**
112
+ * Check permission
113
+ * 检查权限
114
+ * @param key - Data key (数据键)
115
+ * @param windowId - Operation window ID (操作窗口 ID)
116
+ * @param operation - Operation type (操作类型)
117
+ * @returns Result object with success flag and error message (包含成功标志和错误消息的结果对象)
118
+ */
119
+ private checkPermission;
120
+ /**
121
+ * Set data (with permission check and transaction support)
122
+ * 设置数据(带权限验证和事务支持)
123
+ * @param key - Data key (数据键)
124
+ * @param value - Data value (数据值)
125
+ * @param windowId - Operation window ID (操作窗口 ID)
126
+ * @param eventName - Optional event name (可选的事件名称)
127
+ * @param skipTransaction - Whether to skip transaction check (是否跳过事务检查)
128
+ * @returns Result object with success flag and error message (包含成功标志和错误消息的结果对象)
129
+ */
130
+ setData(key: string, value: any, windowId?: string, eventName?: string, skipTransaction?: boolean): {
131
+ success: boolean;
132
+ error?: string;
133
+ };
134
+ /**
135
+ * Delete data
136
+ * 删除数据
137
+ * @param key - Data key (数据键)
138
+ * @param windowId - Operation window ID (操作窗口 ID)
139
+ * @param eventName - Optional event name (可选的事件名称)
140
+ * @param skipTransaction - Whether to skip transaction check (是否跳过事务检查)
141
+ * @returns Result object with success flag and error message (包含成功标志和错误消息的结果对象)
142
+ */
143
+ deleteData(key: string, windowId?: string, eventName?: string, skipTransaction?: boolean): {
144
+ success: boolean;
145
+ error?: string;
146
+ };
147
+ /**
148
+ * Start a transaction
149
+ * 开启事务
150
+ * @param windowId - Window ID (窗口 ID)
151
+ */
152
+ startTransaction(windowId: string): void;
153
+ /**
154
+ * Commit a transaction
155
+ * 提交事务
156
+ * @param windowId - Window ID (窗口 ID)
157
+ */
158
+ commitTransaction(windowId: string): void;
159
+ /**
160
+ * Rollback a transaction
161
+ * 回滚事务
162
+ * @param windowId - Window ID (窗口 ID)
163
+ */
164
+ rollbackTransaction(windowId: string): void;
165
+ /**
166
+ * Watch for data changes (Main Process)
167
+ * 监听数据变化(主进程)
168
+ *
169
+ * ⚠️ IMPORTANT: You must call the returned unsubscribe function to prevent memory leaks
170
+ * ⚠️ 重要:必须调用返回的取消订阅函数以防止内存泄漏
171
+ *
172
+ * @param key - Data key to watch (监听的键)
173
+ * @param callback - Callback function (回调函数)
174
+ * @param windowId - Optional window ID to bind lifecycle (可选的窗口 ID,用于绑定生命周期)
175
+ * @returns Unsubscribe function (取消订阅函数)
176
+ */
177
+ watch(key: string, callback: (newValue: any, oldValue: any) => void, windowId?: string): () => void;
178
+ /**
179
+ * Atomic update
180
+ * 原子更新
181
+ * @param key - Data key (数据键)
182
+ * @param updater - Updater function or new value (更新函数或新值)
183
+ * @param windowId - Window ID (窗口 ID)
184
+ */
185
+ updateData(key: string, updater: (oldVal: any) => any, windowId?: string): {
186
+ success: boolean;
187
+ error?: string;
188
+ };
189
+ /**
190
+ * Set field permission
191
+ * 设置字段权限
192
+ * @param key - Data key (数据键)
193
+ * @param permission - Permission object (权限对象)
194
+ */
195
+ setFieldPermission(key: string, permission: FieldPermission): void;
196
+ /**
197
+ * Get registered windows list (for debugging)
198
+ * 获取已注册的窗口列表(调试用)
199
+ * @returns Array of registered window IDs (已注册的窗口 ID 数组)
200
+ */
201
+ getRegisteredWindows(): string[];
202
+ /**
203
+ * Register message handler
204
+ * 注册消息处理器
205
+ * @param handler - Bus message handler (总线消息处理器)
206
+ */
207
+ registerMessageHandler(handler: BusMessageHandler): void;
208
+ /**
209
+ * Register default handlers
210
+ * 注册默认处理器
211
+ */
212
+ private registerDefaultHandlers;
213
+ /**
214
+ * Handle message
215
+ * 处理消息
216
+ * @param name - Message name (消息名称)
217
+ * @param data - Message data (消息数据)
218
+ * @returns Result of handler (处理器结果)
219
+ */
220
+ handleMessage(name: string, data: any): any;
221
+ /**
222
+ * Initialize communication listener (optional)
223
+ * 初始化通信监听器(可选)
224
+ *
225
+ * Allows renderer process to read/write data directly via unified channel.
226
+ * 允许渲染进程通过统一通道直接读写数据。
227
+ */
228
+ initializeListener(): void;
229
+ /**
230
+ * Set group resolver
231
+ * 设置分组解析器
232
+ * @param resolver - Group resolver function (分组解析函数)
233
+ */
234
+ setGroupResolver(resolver: (group: string) => string[]): void;
235
+ /**
236
+ * Send message to specific window
237
+ * 发送消息到指定窗口
238
+ * @param windowId - Target window ID (目标窗口 ID)
239
+ * @param channel - Channel name (频道名称)
240
+ * @param data - Message data (消息数据)
241
+ * @returns Success or not (是否成功)
242
+ */
243
+ sendToWindow(windowId: string, channel: string, data: any): boolean;
244
+ /**
245
+ * Send message to a group of windows
246
+ * 发送消息到一组窗口
247
+ * @param group - Group name (组名)
248
+ * @param channel - Channel name (频道名称)
249
+ * @param data - Message data (消息数据)
250
+ * @returns Number of successful sends (成功发送的数量)
251
+ */
252
+ sendToGroup(group: string, channel: string, data: any): number;
253
+ /**
254
+ * Broadcast message to specific windows
255
+ * 广播消息到指定的一组窗口
256
+ * @param windowIds - Target window IDs (目标窗口 ID 列表)
257
+ * @param channel - Channel name (频道名称)
258
+ * @param data - Message data (消息数据)
259
+ * @returns Number of successful sends (成功发送的数量)
260
+ */
261
+ broadcastToWindows(windowIds: string[], channel: string, data: any): number;
262
+ /**
263
+ * Subscribe to specific keys
264
+ * 订阅特定的 key
265
+ * @param windowId - Window ID (窗口 ID)
266
+ * @param keys - Keys to subscribe (订阅的 key 列表)
267
+ */
268
+ subscribe(windowId: string, keys: string[]): void;
269
+ /**
270
+ * Unsubscribe from specific keys
271
+ * 取消订阅特定的 key
272
+ * @param windowId - Window ID (窗口 ID)
273
+ * @param keys - Keys to unsubscribe (取消订阅的 key 列表)
274
+ */
275
+ unsubscribe(windowId: string, keys: string[]): void;
276
+ /**
277
+ * Broadcast changes to all windows via Transport
278
+ * 通过传输层广播变更到所有窗口
279
+ * @param event - Data change event (数据变更事件)
280
+ */
281
+ private broadcastChange;
282
+ }