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,95 @@
1
+ 'use strict';/**
2
+ * TransactionManager - Manages data transactions for windows
3
+ * TransactionManager - 管理窗口的数据事务
4
+ */
5
+ class TransactionManager {
6
+ // Transaction buffers: windowId -> Map<key, operation>
7
+ // 事务缓冲区:windowId -> Map<key, operation>
8
+ buffers = new Map();
9
+ logger;
10
+ constructor(logger) {
11
+ this.logger = logger;
12
+ }
13
+ /**
14
+ * Start a transaction
15
+ * 开启事务
16
+ */
17
+ start(windowId) {
18
+ if (this.buffers.has(windowId)) {
19
+ this.logger.warn(`Transaction already started for window ${windowId}`);
20
+ return;
21
+ }
22
+ this.buffers.set(windowId, new Map());
23
+ }
24
+ /**
25
+ * Commit a transaction
26
+ * 提交事务
27
+ * @returns The buffered operations to apply, or undefined if no transaction exists
28
+ */
29
+ commit(windowId) {
30
+ const buffer = this.buffers.get(windowId);
31
+ if (!buffer) {
32
+ this.logger.warn(`No transaction to commit for window ${windowId}`);
33
+ return undefined;
34
+ }
35
+ this.buffers.delete(windowId);
36
+ return buffer;
37
+ }
38
+ /**
39
+ * Rollback a transaction
40
+ * 回滚事务
41
+ */
42
+ rollback(windowId) {
43
+ if (!this.buffers.has(windowId)) {
44
+ this.logger.warn(`No transaction to rollback for window ${windowId}`);
45
+ return;
46
+ }
47
+ this.buffers.delete(windowId);
48
+ }
49
+ /**
50
+ * Add operation to transaction
51
+ * 添加操作到事务
52
+ * @returns true if operation was buffered, false if no transaction is active
53
+ */
54
+ add(windowId, key, op) {
55
+ if (this.buffers.has(windowId)) {
56
+ this.buffers.get(windowId).set(key, op);
57
+ return true;
58
+ }
59
+ return false;
60
+ }
61
+ /**
62
+ * Check if a transaction is active for a window
63
+ * 检查窗口是否有活跃事务
64
+ */
65
+ hasTransaction(windowId) {
66
+ return this.buffers.has(windowId);
67
+ }
68
+ /**
69
+ * Get value from transaction buffer
70
+ * 从事务缓冲区获取值
71
+ */
72
+ getBufferedValue(windowId, key) {
73
+ if (this.buffers.has(windowId)) {
74
+ const buffer = this.buffers.get(windowId);
75
+ if (buffer.has(key)) {
76
+ const op = buffer.get(key);
77
+ if (op.type === 'set') {
78
+ return { has: true, value: op.value };
79
+ }
80
+ else {
81
+ // It's a delete operation, so effectively the value is undefined (but we know it's "set" to be deleted)
82
+ return { has: true, value: undefined };
83
+ }
84
+ }
85
+ }
86
+ return { has: false };
87
+ }
88
+ /**
89
+ * Clear all transactions
90
+ * 清除所有事务
91
+ */
92
+ clear() {
93
+ this.buffers.clear();
94
+ }
95
+ }exports.TransactionManager=TransactionManager;//# sourceMappingURL=TransactionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransactionManager.js","sources":["../../../../src/core/message-bus/core/TransactionManager.ts"],"sourcesContent":["import { ILogger } from '@/infrastructure/logger';\n\nexport interface TransactionOperation {\n type: 'set' | 'delete';\n value?: any;\n}\n\n/**\n * TransactionManager - Manages data transactions for windows\n * TransactionManager - 管理窗口的数据事务\n */\nexport class TransactionManager {\n // Transaction buffers: windowId -> Map<key, operation>\n // 事务缓冲区:windowId -> Map<key, operation>\n private buffers: Map<string, Map<string, TransactionOperation>> = new Map();\n private logger: ILogger;\n\n constructor(logger: ILogger) {\n this.logger = logger;\n }\n\n /**\n * Start a transaction\n * 开启事务\n */\n start(windowId: string): void {\n if (this.buffers.has(windowId)) {\n this.logger.warn(`Transaction already started for window ${windowId}`);\n return;\n }\n this.buffers.set(windowId, new Map());\n }\n\n /**\n * Commit a transaction\n * 提交事务\n * @returns The buffered operations to apply, or undefined if no transaction exists\n */\n commit(windowId: string): Map<string, TransactionOperation> | undefined {\n const buffer = this.buffers.get(windowId);\n if (!buffer) {\n this.logger.warn(`No transaction to commit for window ${windowId}`);\n return undefined;\n }\n this.buffers.delete(windowId);\n return buffer;\n }\n\n /**\n * Rollback a transaction\n * 回滚事务\n */\n rollback(windowId: string): void {\n if (!this.buffers.has(windowId)) {\n this.logger.warn(`No transaction to rollback for window ${windowId}`);\n return;\n }\n this.buffers.delete(windowId);\n }\n\n /**\n * Add operation to transaction\n * 添加操作到事务\n * @returns true if operation was buffered, false if no transaction is active\n */\n add(windowId: string, key: string, op: TransactionOperation): boolean {\n if (this.buffers.has(windowId)) {\n this.buffers.get(windowId)!.set(key, op);\n return true;\n }\n return false;\n }\n\n /**\n * Check if a transaction is active for a window\n * 检查窗口是否有活跃事务\n */\n hasTransaction(windowId: string): boolean {\n return this.buffers.has(windowId);\n }\n\n /**\n * Get value from transaction buffer\n * 从事务缓冲区获取值\n */\n getBufferedValue(windowId: string, key: string): { has: boolean; value?: any } {\n if (this.buffers.has(windowId)) {\n const buffer = this.buffers.get(windowId)!;\n if (buffer.has(key)) {\n const op = buffer.get(key)!;\n if (op.type === 'set') {\n return { has: true, value: op.value };\n } else {\n // It's a delete operation, so effectively the value is undefined (but we know it's \"set\" to be deleted)\n return { has: true, value: undefined };\n }\n }\n }\n return { has: false };\n }\n\n /**\n * Clear all transactions\n * 清除所有事务\n */\n clear(): void {\n this.buffers.clear();\n }\n}\n"],"names":[],"mappings":"aAOA;;;AAGG;MACU,kBAAkB,CAAA;;;AAGrB,IAAA,OAAO,GAAmD,IAAI,GAAG,EAAE;AACnE,IAAA,MAAM;AAEd,IAAA,WAAA,CAAY,MAAe,EAAA;AACzB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;AAEA;;;AAGG;AACH,IAAA,KAAK,CAAC,QAAgB,EAAA;QACpB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,uCAAA,EAA0C,QAAQ,CAAA,CAAE,CAAC;YACtE;QACF;QACA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC;IACvC;AAEA;;;;AAIG;AACH,IAAA,MAAM,CAAC,QAAgB,EAAA;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,oCAAA,EAAuC,QAAQ,CAAA,CAAE,CAAC;AACnE,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC7B,QAAA,OAAO,MAAM;IACf;AAEA;;;AAGG;AACH,IAAA,QAAQ,CAAC,QAAgB,EAAA;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,sCAAA,EAAyC,QAAQ,CAAA,CAAE,CAAC;YACrE;QACF;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC/B;AAEA;;;;AAIG;AACH,IAAA,GAAG,CAAC,QAAgB,EAAE,GAAW,EAAE,EAAwB,EAAA;QACzD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;AACxC,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,KAAK;IACd;AAEA;;;AAGG;AACH,IAAA,cAAc,CAAC,QAAgB,EAAA;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACnC;AAEA;;;AAGG;IACH,gBAAgB,CAAC,QAAgB,EAAE,GAAW,EAAA;QAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAE;AAC1C,YAAA,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACnB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE;AAC3B,gBAAA,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE;oBACrB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE;gBACvC;qBAAO;;oBAEL,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;gBACxC;YACF;QACF;AACA,QAAA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE;IACvB;AAEA;;;AAGG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IACtB;AACD"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * TransactionManager - Manages data transactions for windows
3
+ * TransactionManager - 管理窗口的数据事务
4
+ */
5
+ class TransactionManager {
6
+ // Transaction buffers: windowId -> Map<key, operation>
7
+ // 事务缓冲区:windowId -> Map<key, operation>
8
+ buffers = new Map();
9
+ logger;
10
+ constructor(logger) {
11
+ this.logger = logger;
12
+ }
13
+ /**
14
+ * Start a transaction
15
+ * 开启事务
16
+ */
17
+ start(windowId) {
18
+ if (this.buffers.has(windowId)) {
19
+ this.logger.warn(`Transaction already started for window ${windowId}`);
20
+ return;
21
+ }
22
+ this.buffers.set(windowId, new Map());
23
+ }
24
+ /**
25
+ * Commit a transaction
26
+ * 提交事务
27
+ * @returns The buffered operations to apply, or undefined if no transaction exists
28
+ */
29
+ commit(windowId) {
30
+ const buffer = this.buffers.get(windowId);
31
+ if (!buffer) {
32
+ this.logger.warn(`No transaction to commit for window ${windowId}`);
33
+ return undefined;
34
+ }
35
+ this.buffers.delete(windowId);
36
+ return buffer;
37
+ }
38
+ /**
39
+ * Rollback a transaction
40
+ * 回滚事务
41
+ */
42
+ rollback(windowId) {
43
+ if (!this.buffers.has(windowId)) {
44
+ this.logger.warn(`No transaction to rollback for window ${windowId}`);
45
+ return;
46
+ }
47
+ this.buffers.delete(windowId);
48
+ }
49
+ /**
50
+ * Add operation to transaction
51
+ * 添加操作到事务
52
+ * @returns true if operation was buffered, false if no transaction is active
53
+ */
54
+ add(windowId, key, op) {
55
+ if (this.buffers.has(windowId)) {
56
+ this.buffers.get(windowId).set(key, op);
57
+ return true;
58
+ }
59
+ return false;
60
+ }
61
+ /**
62
+ * Check if a transaction is active for a window
63
+ * 检查窗口是否有活跃事务
64
+ */
65
+ hasTransaction(windowId) {
66
+ return this.buffers.has(windowId);
67
+ }
68
+ /**
69
+ * Get value from transaction buffer
70
+ * 从事务缓冲区获取值
71
+ */
72
+ getBufferedValue(windowId, key) {
73
+ if (this.buffers.has(windowId)) {
74
+ const buffer = this.buffers.get(windowId);
75
+ if (buffer.has(key)) {
76
+ const op = buffer.get(key);
77
+ if (op.type === 'set') {
78
+ return { has: true, value: op.value };
79
+ }
80
+ else {
81
+ // It's a delete operation, so effectively the value is undefined (but we know it's "set" to be deleted)
82
+ return { has: true, value: undefined };
83
+ }
84
+ }
85
+ }
86
+ return { has: false };
87
+ }
88
+ /**
89
+ * Clear all transactions
90
+ * 清除所有事务
91
+ */
92
+ clear() {
93
+ this.buffers.clear();
94
+ }
95
+ }export{TransactionManager};//# sourceMappingURL=TransactionManager.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransactionManager.mjs","sources":["../../../../src/core/message-bus/core/TransactionManager.ts"],"sourcesContent":["import { ILogger } from '@/infrastructure/logger';\n\nexport interface TransactionOperation {\n type: 'set' | 'delete';\n value?: any;\n}\n\n/**\n * TransactionManager - Manages data transactions for windows\n * TransactionManager - 管理窗口的数据事务\n */\nexport class TransactionManager {\n // Transaction buffers: windowId -> Map<key, operation>\n // 事务缓冲区:windowId -> Map<key, operation>\n private buffers: Map<string, Map<string, TransactionOperation>> = new Map();\n private logger: ILogger;\n\n constructor(logger: ILogger) {\n this.logger = logger;\n }\n\n /**\n * Start a transaction\n * 开启事务\n */\n start(windowId: string): void {\n if (this.buffers.has(windowId)) {\n this.logger.warn(`Transaction already started for window ${windowId}`);\n return;\n }\n this.buffers.set(windowId, new Map());\n }\n\n /**\n * Commit a transaction\n * 提交事务\n * @returns The buffered operations to apply, or undefined if no transaction exists\n */\n commit(windowId: string): Map<string, TransactionOperation> | undefined {\n const buffer = this.buffers.get(windowId);\n if (!buffer) {\n this.logger.warn(`No transaction to commit for window ${windowId}`);\n return undefined;\n }\n this.buffers.delete(windowId);\n return buffer;\n }\n\n /**\n * Rollback a transaction\n * 回滚事务\n */\n rollback(windowId: string): void {\n if (!this.buffers.has(windowId)) {\n this.logger.warn(`No transaction to rollback for window ${windowId}`);\n return;\n }\n this.buffers.delete(windowId);\n }\n\n /**\n * Add operation to transaction\n * 添加操作到事务\n * @returns true if operation was buffered, false if no transaction is active\n */\n add(windowId: string, key: string, op: TransactionOperation): boolean {\n if (this.buffers.has(windowId)) {\n this.buffers.get(windowId)!.set(key, op);\n return true;\n }\n return false;\n }\n\n /**\n * Check if a transaction is active for a window\n * 检查窗口是否有活跃事务\n */\n hasTransaction(windowId: string): boolean {\n return this.buffers.has(windowId);\n }\n\n /**\n * Get value from transaction buffer\n * 从事务缓冲区获取值\n */\n getBufferedValue(windowId: string, key: string): { has: boolean; value?: any } {\n if (this.buffers.has(windowId)) {\n const buffer = this.buffers.get(windowId)!;\n if (buffer.has(key)) {\n const op = buffer.get(key)!;\n if (op.type === 'set') {\n return { has: true, value: op.value };\n } else {\n // It's a delete operation, so effectively the value is undefined (but we know it's \"set\" to be deleted)\n return { has: true, value: undefined };\n }\n }\n }\n return { has: false };\n }\n\n /**\n * Clear all transactions\n * 清除所有事务\n */\n clear(): void {\n this.buffers.clear();\n }\n}\n"],"names":[],"mappings":"AAOA;;;AAGG;MACU,kBAAkB,CAAA;;;AAGrB,IAAA,OAAO,GAAmD,IAAI,GAAG,EAAE;AACnE,IAAA,MAAM;AAEd,IAAA,WAAA,CAAY,MAAe,EAAA;AACzB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;AAEA;;;AAGG;AACH,IAAA,KAAK,CAAC,QAAgB,EAAA;QACpB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,uCAAA,EAA0C,QAAQ,CAAA,CAAE,CAAC;YACtE;QACF;QACA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC;IACvC;AAEA;;;;AAIG;AACH,IAAA,MAAM,CAAC,QAAgB,EAAA;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,oCAAA,EAAuC,QAAQ,CAAA,CAAE,CAAC;AACnE,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC7B,QAAA,OAAO,MAAM;IACf;AAEA;;;AAGG;AACH,IAAA,QAAQ,CAAC,QAAgB,EAAA;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,sCAAA,EAAyC,QAAQ,CAAA,CAAE,CAAC;YACrE;QACF;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC/B;AAEA;;;;AAIG;AACH,IAAA,GAAG,CAAC,QAAgB,EAAE,GAAW,EAAE,EAAwB,EAAA;QACzD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;AACxC,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,KAAK;IACd;AAEA;;;AAGG;AACH,IAAA,cAAc,CAAC,QAAgB,EAAA;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACnC;AAEA;;;AAGG;IACH,gBAAgB,CAAC,QAAgB,EAAE,GAAW,EAAA;QAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAE;AAC1C,YAAA,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACnB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE;AAC3B,gBAAA,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE;oBACrB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE;gBACvC;qBAAO;;oBAEL,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;gBACxC;YACF;QACF;AACA,QAAA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE;IACvB;AAEA;;;AAGG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IACtB;AACD"}
@@ -0,0 +1,5 @@
1
+ export * from './ManagedPort';
2
+ export * from './TransactionManager';
3
+ export * from './SubscriptionManager';
4
+ export * from './PortManager';
5
+ export * from './DataStoreManager';
@@ -0,0 +1,4 @@
1
+ export { MessageBus } from './MessageBus';
2
+ export { MessageBusClient } from './MessageBusClient';
3
+ export { setupMessageBus } from './preload';
4
+ export * from './message-bus.type';
@@ -0,0 +1 @@
1
+ 'use strict';var MessageBus=require('./MessageBus.js'),MessageBusClient=require('./MessageBusClient.js'),preload=require('./preload.js'),messageBus_type=require('./message-bus.type.js');exports.MessageBus=MessageBus.MessageBus;exports.MessageBusClient=MessageBusClient.MessageBusClient;exports.setupMessageBus=preload.setupMessageBus;Object.defineProperty(exports,"MessageProtocolType",{enumerable:true,get:function(){return messageBus_type.MessageProtocolType}});//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export{MessageBus}from'./MessageBus.mjs';export{MessageBusClient}from'./MessageBusClient.mjs';export{setupMessageBus}from'./preload.mjs';export{MessageProtocolType}from'./message-bus.type.mjs';//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,143 @@
1
+ import type { MessageBus } from './MessageBus';
2
+ import { ILogger } from '@/infrastructure/logger';
3
+ /**
4
+ * Message Bus Protocol Types
5
+ * Message Bus 协议类型
6
+ */
7
+ export declare enum MessageProtocolType {
8
+ GET = "get",
9
+ GET_RESPONSE = "get-response",
10
+ SET = "set",
11
+ DELETE = "delete",
12
+ CLEAR = "clear",
13
+ MESSAGE = "message",
14
+ SUBSCRIBE = "subscribe",
15
+ UNSUBSCRIBE = "unsubscribe",
16
+ SET_PERMISSION = "set-permission",
17
+ CONNECT = "__message_bus_ready__",
18
+ TRANSACTION_START = "transaction-start",
19
+ TRANSACTION_COMMIT = "transaction-commit",
20
+ TRANSACTION_ROLLBACK = "transaction-rollback",
21
+ UPDATE = "update",
22
+ SEND_TO_WINDOW = "send-to-window",
23
+ SEND_TO_GROUP = "send-to-group"
24
+ }
25
+ /**
26
+ * Message Bus Configuration Options
27
+ * Message Bus 配置选项
28
+ */
29
+ export interface MessageBusOptions {
30
+ /**
31
+ * Custom event name for state changes
32
+ * 自定义状态变更事件名称
33
+ * @default 'window-state-changed'
34
+ */
35
+ eventName?: string;
36
+ /**
37
+ * Logger instance
38
+ * 日志实例
39
+ */
40
+ logger?: ILogger;
41
+ /**
42
+ * Transport mode (auto, messageport, ipc)
43
+ * 传输模式
44
+ */
45
+ transportMode?: 'auto' | 'messageport' | 'ipc';
46
+ }
47
+ /**
48
+ * MessageBus Subscription Options
49
+ * MessageBus 订阅选项
50
+ */
51
+ export interface MessageBusSubscriptionOptions {
52
+ /**
53
+ * Filter function to determine if the update should be processed
54
+ * 过滤函数,用于确定是否应处理更新
55
+ */
56
+ filter?: (key: string, value: unknown) => boolean;
57
+ /**
58
+ * Specific keys to subscribe to (if not provided, subscribes to all)
59
+ * 要订阅的特定键(如果未提供,则订阅所有)
60
+ */
61
+ keys?: string[];
62
+ /**
63
+ * Debounce time in milliseconds (0 = no debounce)
64
+ * 防抖时间(毫秒)(0 = 不防抖)
65
+ * @default 0
66
+ */
67
+ debounce?: number;
68
+ }
69
+ export interface BaseEvent {
70
+ timestamp?: number;
71
+ windowId?: string;
72
+ }
73
+ export interface SetEvent<T = any> extends BaseEvent {
74
+ type: MessageProtocolType.SET;
75
+ key: string;
76
+ value: T;
77
+ oldValue?: T;
78
+ }
79
+ export interface DeleteEvent extends BaseEvent {
80
+ type: MessageProtocolType.DELETE;
81
+ key: string;
82
+ oldValue?: any;
83
+ }
84
+ export interface ClearEvent extends BaseEvent {
85
+ type: MessageProtocolType.CLEAR;
86
+ }
87
+ export interface MessageEvent<T = any> extends BaseEvent {
88
+ type: MessageProtocolType.MESSAGE;
89
+ channel: string;
90
+ value: T;
91
+ }
92
+ export type DataChangeEvent<T = any> = SetEvent<T> | DeleteEvent | ClearEvent | MessageEvent<T>;
93
+ /**
94
+ * Field Permission Mode
95
+ * 字段权限模式
96
+ */
97
+ export type FieldPermissionMode = 'read' | 'write' | 'read-write' | 'none';
98
+ /**
99
+ * Field Permission Configuration
100
+ * 字段权限配置
101
+ */
102
+ export interface FieldPermissionConfig {
103
+ mode: FieldPermissionMode;
104
+ /**
105
+ * Whether the field is read-only
106
+ * 是否只读
107
+ */
108
+ readonly?: boolean;
109
+ /**
110
+ * List of window IDs allowed to write to this field
111
+ * 允许写入此字段的窗口 ID 列表
112
+ */
113
+ allowedWindows?: string[];
114
+ }
115
+ /**
116
+ * Field Permission Type
117
+ * 字段权限类型
118
+ */
119
+ export type FieldPermission = FieldPermissionMode | FieldPermissionConfig;
120
+ /**
121
+ * Data Store Item
122
+ * 数据存储项
123
+ */
124
+ export interface DataStoreItem<T = any> {
125
+ value: T;
126
+ permission?: FieldPermission;
127
+ }
128
+ /**
129
+ * Message Handler Interface
130
+ * 消息处理函数接口
131
+ */
132
+ export interface MessageBusHandler {
133
+ eventName: string;
134
+ callback: (event: DataChangeEvent) => void;
135
+ }
136
+ /**
137
+ * Bus Message Handler Interface
138
+ * 总线消息处理函数接口
139
+ */
140
+ export interface BusMessageHandler {
141
+ name: string;
142
+ callback: (bus: MessageBus, data: any) => any;
143
+ }
@@ -0,0 +1,26 @@
1
+ 'use strict';/**
2
+ * Message Bus Protocol Types
3
+ * Message Bus 协议类型
4
+ */
5
+ exports.MessageProtocolType=void 0;
6
+ (function (MessageProtocolType) {
7
+ MessageProtocolType["GET"] = "get";
8
+ MessageProtocolType["GET_RESPONSE"] = "get-response";
9
+ MessageProtocolType["SET"] = "set";
10
+ MessageProtocolType["DELETE"] = "delete";
11
+ MessageProtocolType["CLEAR"] = "clear";
12
+ MessageProtocolType["MESSAGE"] = "message";
13
+ MessageProtocolType["SUBSCRIBE"] = "subscribe";
14
+ MessageProtocolType["UNSUBSCRIBE"] = "unsubscribe";
15
+ MessageProtocolType["SET_PERMISSION"] = "set-permission";
16
+ MessageProtocolType["CONNECT"] = "__message_bus_ready__";
17
+ // Transaction operations
18
+ MessageProtocolType["TRANSACTION_START"] = "transaction-start";
19
+ MessageProtocolType["TRANSACTION_COMMIT"] = "transaction-commit";
20
+ MessageProtocolType["TRANSACTION_ROLLBACK"] = "transaction-rollback";
21
+ // Atomic update
22
+ MessageProtocolType["UPDATE"] = "update";
23
+ // P2P Messaging
24
+ MessageProtocolType["SEND_TO_WINDOW"] = "send-to-window";
25
+ MessageProtocolType["SEND_TO_GROUP"] = "send-to-group";
26
+ })(exports.MessageProtocolType || (exports.MessageProtocolType = {}));//# sourceMappingURL=message-bus.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-bus.type.js","sources":["../../../src/core/message-bus/message-bus.type.ts"],"sourcesContent":["import type { MessageBus } from './MessageBus';\nimport { ILogger } from '@/infrastructure/logger';\n\n/**\n * Message Bus Protocol Types\n * Message Bus 协议类型\n */\nexport enum MessageProtocolType {\n GET = 'get',\n GET_RESPONSE = 'get-response',\n SET = 'set',\n DELETE = 'delete',\n CLEAR = 'clear',\n MESSAGE = 'message',\n SUBSCRIBE = 'subscribe',\n UNSUBSCRIBE = 'unsubscribe',\n SET_PERMISSION = 'set-permission',\n CONNECT = '__message_bus_ready__',\n // Transaction operations\n TRANSACTION_START = 'transaction-start',\n TRANSACTION_COMMIT = 'transaction-commit',\n TRANSACTION_ROLLBACK = 'transaction-rollback',\n // Atomic update\n UPDATE = 'update',\n // P2P Messaging\n SEND_TO_WINDOW = 'send-to-window',\n SEND_TO_GROUP = 'send-to-group',\n}\n\n/**\n * Message Bus Configuration Options\n * Message Bus 配置选项\n */\nexport interface MessageBusOptions {\n /**\n * Custom event name for state changes\n * 自定义状态变更事件名称\n * @default 'window-state-changed'\n */\n eventName?: string;\n\n /**\n * Logger instance\n * 日志实例\n */\n logger?: ILogger;\n\n /**\n * Transport mode (auto, messageport, ipc)\n * 传输模式\n */\n transportMode?: 'auto' | 'messageport' | 'ipc';\n}\n\n/**\n * MessageBus Subscription Options\n * MessageBus 订阅选项\n */\nexport interface MessageBusSubscriptionOptions {\n /**\n * Filter function to determine if the update should be processed\n * 过滤函数,用于确定是否应处理更新\n */\n filter?: (key: string, value: unknown) => boolean;\n\n /**\n * Specific keys to subscribe to (if not provided, subscribes to all)\n * 要订阅的特定键(如果未提供,则订阅所有)\n */\n keys?: string[];\n\n /**\n * Debounce time in milliseconds (0 = no debounce)\n * 防抖时间(毫秒)(0 = 不防抖)\n * @default 0\n */\n debounce?: number;\n}\n\n// Discriminated Unions for Events\n// 事件的辨识联合类型\n\nexport interface BaseEvent {\n timestamp?: number;\n windowId?: string;\n}\n\nexport interface SetEvent<T = any> extends BaseEvent {\n type: MessageProtocolType.SET;\n key: string;\n value: T;\n oldValue?: T;\n}\n\nexport interface DeleteEvent extends BaseEvent {\n type: MessageProtocolType.DELETE;\n key: string;\n oldValue?: any;\n}\n\nexport interface ClearEvent extends BaseEvent {\n type: MessageProtocolType.CLEAR;\n}\n\nexport interface MessageEvent<T = any> extends BaseEvent {\n type: MessageProtocolType.MESSAGE;\n channel: string;\n value: T;\n}\n\nexport type DataChangeEvent<T = any> = SetEvent<T> | DeleteEvent | ClearEvent | MessageEvent<T>;\n\n/**\n * Field Permission Mode\n * 字段权限模式\n */\nexport type FieldPermissionMode = 'read' | 'write' | 'read-write' | 'none';\n\n/**\n * Field Permission Configuration\n * 字段权限配置\n */\nexport interface FieldPermissionConfig {\n mode: FieldPermissionMode;\n /**\n * Whether the field is read-only\n * 是否只读\n */\n readonly?: boolean;\n /**\n * List of window IDs allowed to write to this field\n * 允许写入此字段的窗口 ID 列表\n */\n allowedWindows?: string[];\n}\n\n/**\n * Field Permission Type\n * 字段权限类型\n */\nexport type FieldPermission = FieldPermissionMode | FieldPermissionConfig;\n\n/**\n * Data Store Item\n * 数据存储项\n */\nexport interface DataStoreItem<T = any> {\n value: T;\n permission?: FieldPermission;\n}\n\n/**\n * Message Handler Interface\n * 消息处理函数接口\n */\nexport interface MessageBusHandler {\n eventName: string;\n callback: (event: DataChangeEvent) => void;\n}\n\n/**\n * Bus Message Handler Interface\n * 总线消息处理函数接口\n */\nexport interface BusMessageHandler {\n name: string;\n callback: (bus: MessageBus, data: any) => any;\n}\n"],"names":["MessageProtocolType"],"mappings":"aAGA;;;AAGG;AACSA;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,mBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,mBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,mBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,mBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,mBAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,mBAAA,CAAA,SAAA,CAAA,GAAA,uBAAiC;;AAEjC,IAAA,mBAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,mBAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC;AACzC,IAAA,mBAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;;AAE7C,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;;AAEjB,IAAA,mBAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,mBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AACjC,CAAC,EApBWA,2BAAmB,KAAnBA,2BAAmB,GAAA,EAAA,CAAA,CAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Message Bus Protocol Types
3
+ * Message Bus 协议类型
4
+ */
5
+ var MessageProtocolType;
6
+ (function (MessageProtocolType) {
7
+ MessageProtocolType["GET"] = "get";
8
+ MessageProtocolType["GET_RESPONSE"] = "get-response";
9
+ MessageProtocolType["SET"] = "set";
10
+ MessageProtocolType["DELETE"] = "delete";
11
+ MessageProtocolType["CLEAR"] = "clear";
12
+ MessageProtocolType["MESSAGE"] = "message";
13
+ MessageProtocolType["SUBSCRIBE"] = "subscribe";
14
+ MessageProtocolType["UNSUBSCRIBE"] = "unsubscribe";
15
+ MessageProtocolType["SET_PERMISSION"] = "set-permission";
16
+ MessageProtocolType["CONNECT"] = "__message_bus_ready__";
17
+ // Transaction operations
18
+ MessageProtocolType["TRANSACTION_START"] = "transaction-start";
19
+ MessageProtocolType["TRANSACTION_COMMIT"] = "transaction-commit";
20
+ MessageProtocolType["TRANSACTION_ROLLBACK"] = "transaction-rollback";
21
+ // Atomic update
22
+ MessageProtocolType["UPDATE"] = "update";
23
+ // P2P Messaging
24
+ MessageProtocolType["SEND_TO_WINDOW"] = "send-to-window";
25
+ MessageProtocolType["SEND_TO_GROUP"] = "send-to-group";
26
+ })(MessageProtocolType || (MessageProtocolType = {}));export{MessageProtocolType};//# sourceMappingURL=message-bus.type.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-bus.type.mjs","sources":["../../../src/core/message-bus/message-bus.type.ts"],"sourcesContent":["import type { MessageBus } from './MessageBus';\nimport { ILogger } from '@/infrastructure/logger';\n\n/**\n * Message Bus Protocol Types\n * Message Bus 协议类型\n */\nexport enum MessageProtocolType {\n GET = 'get',\n GET_RESPONSE = 'get-response',\n SET = 'set',\n DELETE = 'delete',\n CLEAR = 'clear',\n MESSAGE = 'message',\n SUBSCRIBE = 'subscribe',\n UNSUBSCRIBE = 'unsubscribe',\n SET_PERMISSION = 'set-permission',\n CONNECT = '__message_bus_ready__',\n // Transaction operations\n TRANSACTION_START = 'transaction-start',\n TRANSACTION_COMMIT = 'transaction-commit',\n TRANSACTION_ROLLBACK = 'transaction-rollback',\n // Atomic update\n UPDATE = 'update',\n // P2P Messaging\n SEND_TO_WINDOW = 'send-to-window',\n SEND_TO_GROUP = 'send-to-group',\n}\n\n/**\n * Message Bus Configuration Options\n * Message Bus 配置选项\n */\nexport interface MessageBusOptions {\n /**\n * Custom event name for state changes\n * 自定义状态变更事件名称\n * @default 'window-state-changed'\n */\n eventName?: string;\n\n /**\n * Logger instance\n * 日志实例\n */\n logger?: ILogger;\n\n /**\n * Transport mode (auto, messageport, ipc)\n * 传输模式\n */\n transportMode?: 'auto' | 'messageport' | 'ipc';\n}\n\n/**\n * MessageBus Subscription Options\n * MessageBus 订阅选项\n */\nexport interface MessageBusSubscriptionOptions {\n /**\n * Filter function to determine if the update should be processed\n * 过滤函数,用于确定是否应处理更新\n */\n filter?: (key: string, value: unknown) => boolean;\n\n /**\n * Specific keys to subscribe to (if not provided, subscribes to all)\n * 要订阅的特定键(如果未提供,则订阅所有)\n */\n keys?: string[];\n\n /**\n * Debounce time in milliseconds (0 = no debounce)\n * 防抖时间(毫秒)(0 = 不防抖)\n * @default 0\n */\n debounce?: number;\n}\n\n// Discriminated Unions for Events\n// 事件的辨识联合类型\n\nexport interface BaseEvent {\n timestamp?: number;\n windowId?: string;\n}\n\nexport interface SetEvent<T = any> extends BaseEvent {\n type: MessageProtocolType.SET;\n key: string;\n value: T;\n oldValue?: T;\n}\n\nexport interface DeleteEvent extends BaseEvent {\n type: MessageProtocolType.DELETE;\n key: string;\n oldValue?: any;\n}\n\nexport interface ClearEvent extends BaseEvent {\n type: MessageProtocolType.CLEAR;\n}\n\nexport interface MessageEvent<T = any> extends BaseEvent {\n type: MessageProtocolType.MESSAGE;\n channel: string;\n value: T;\n}\n\nexport type DataChangeEvent<T = any> = SetEvent<T> | DeleteEvent | ClearEvent | MessageEvent<T>;\n\n/**\n * Field Permission Mode\n * 字段权限模式\n */\nexport type FieldPermissionMode = 'read' | 'write' | 'read-write' | 'none';\n\n/**\n * Field Permission Configuration\n * 字段权限配置\n */\nexport interface FieldPermissionConfig {\n mode: FieldPermissionMode;\n /**\n * Whether the field is read-only\n * 是否只读\n */\n readonly?: boolean;\n /**\n * List of window IDs allowed to write to this field\n * 允许写入此字段的窗口 ID 列表\n */\n allowedWindows?: string[];\n}\n\n/**\n * Field Permission Type\n * 字段权限类型\n */\nexport type FieldPermission = FieldPermissionMode | FieldPermissionConfig;\n\n/**\n * Data Store Item\n * 数据存储项\n */\nexport interface DataStoreItem<T = any> {\n value: T;\n permission?: FieldPermission;\n}\n\n/**\n * Message Handler Interface\n * 消息处理函数接口\n */\nexport interface MessageBusHandler {\n eventName: string;\n callback: (event: DataChangeEvent) => void;\n}\n\n/**\n * Bus Message Handler Interface\n * 总线消息处理函数接口\n */\nexport interface BusMessageHandler {\n name: string;\n callback: (bus: MessageBus, data: any) => any;\n}\n"],"names":[],"mappings":"AAGA;;;AAGG;IACS;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,mBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,mBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,mBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,mBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,mBAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,mBAAA,CAAA,SAAA,CAAA,GAAA,uBAAiC;;AAEjC,IAAA,mBAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,mBAAA,CAAA,oBAAA,CAAA,GAAA,oBAAyC;AACzC,IAAA,mBAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;;AAE7C,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;;AAEjB,IAAA,mBAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,mBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AACjC,CAAC,EApBW,mBAAmB,KAAnB,mBAAmB,GAAA,EAAA,CAAA,CAAA"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Setup MessageBus connection in preload script
3
+ * 在 preload 脚本中设置 MessageBus 连接
4
+ *
5
+ * Call this function in your preload script to automatically
6
+ * set up the message bus port for the renderer process.
7
+ * 在 preload 脚本中调用此函数以自动为渲染进程设置消息总线端口。
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * // preload.ts
12
+ * import { setupMessageBus } from 'electron-infra-kit/message-bus';
13
+ * setupMessageBus();
14
+ * ```
15
+ */
16
+ export declare function setupMessageBus(): void;
@@ -0,0 +1,27 @@
1
+ 'use strict';var electron=require('electron'),messageBus_type=require('./message-bus.type.js'),constants=require('../window/constants.js');/**
2
+ * Setup MessageBus connection in preload script
3
+ * 在 preload 脚本中设置 MessageBus 连接
4
+ *
5
+ * Call this function in your preload script to automatically
6
+ * set up the message bus port for the renderer process.
7
+ * 在 preload 脚本中调用此函数以自动为渲染进程设置消息总线端口。
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * // preload.ts
12
+ * import { setupMessageBus } from 'electron-infra-kit/message-bus';
13
+ * setupMessageBus();
14
+ * ```
15
+ */
16
+ function setupMessageBus() {
17
+ electron.ipcRenderer.on(constants.IPC_CHANNELS.MESSAGE_BUS_PORT, (event) => {
18
+ const [port] = event.ports;
19
+ if (!port) {
20
+ console.error('[MessageBus] No port received in message-bus-port event');
21
+ return;
22
+ }
23
+ // Notify renderer process via internal message
24
+ // 通过内部消息通知渲染进程
25
+ window.postMessage({ type: messageBus_type.MessageProtocolType.CONNECT, port }, '*', [port]);
26
+ });
27
+ }exports.setupMessageBus=setupMessageBus;//# sourceMappingURL=preload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preload.js","sources":["../../../src/core/message-bus/preload.ts"],"sourcesContent":["import { ipcRenderer } from 'electron';\nimport { MessageProtocolType } from './message-bus.type';\nimport { IPC_CHANNELS } from '@/core/window/constants';\n\n/**\n * Setup MessageBus connection in preload script\n * 在 preload 脚本中设置 MessageBus 连接\n *\n * Call this function in your preload script to automatically\n * set up the message bus port for the renderer process.\n * 在 preload 脚本中调用此函数以自动为渲染进程设置消息总线端口。\n *\n * @example\n * ```typescript\n * // preload.ts\n * import { setupMessageBus } from 'electron-infra-kit/message-bus';\n * setupMessageBus();\n * ```\n */\nexport function setupMessageBus(): void {\n ipcRenderer.on(IPC_CHANNELS.MESSAGE_BUS_PORT, (event) => {\n const [port] = event.ports;\n\n if (!port) {\n console.error('[MessageBus] No port received in message-bus-port event');\n return;\n }\n\n // Notify renderer process via internal message\n // 通过内部消息通知渲染进程\n window.postMessage({ type: MessageProtocolType.CONNECT, port }, '*', [port]);\n });\n}\n"],"names":["ipcRenderer","IPC_CHANNELS","MessageProtocolType"],"mappings":"2IAIA;;;;;;;;;;;;;;AAcG;SACa,eAAe,GAAA;IAC7BA,oBAAW,CAAC,EAAE,CAACC,sBAAY,CAAC,gBAAgB,EAAE,CAAC,KAAK,KAAI;AACtD,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK;QAE1B,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC;YACxE;QACF;;;AAIA,QAAA,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAEC,mCAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AAC9E,IAAA,CAAC,CAAC;AACJ"}
@@ -0,0 +1,27 @@
1
+ import {ipcRenderer}from'electron';import {MessageProtocolType}from'./message-bus.type.mjs';import {IPC_CHANNELS}from'../window/constants.mjs';/**
2
+ * Setup MessageBus connection in preload script
3
+ * 在 preload 脚本中设置 MessageBus 连接
4
+ *
5
+ * Call this function in your preload script to automatically
6
+ * set up the message bus port for the renderer process.
7
+ * 在 preload 脚本中调用此函数以自动为渲染进程设置消息总线端口。
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * // preload.ts
12
+ * import { setupMessageBus } from 'electron-infra-kit/message-bus';
13
+ * setupMessageBus();
14
+ * ```
15
+ */
16
+ function setupMessageBus() {
17
+ ipcRenderer.on(IPC_CHANNELS.MESSAGE_BUS_PORT, (event) => {
18
+ const [port] = event.ports;
19
+ if (!port) {
20
+ console.error('[MessageBus] No port received in message-bus-port event');
21
+ return;
22
+ }
23
+ // Notify renderer process via internal message
24
+ // 通过内部消息通知渲染进程
25
+ window.postMessage({ type: MessageProtocolType.CONNECT, port }, '*', [port]);
26
+ });
27
+ }export{setupMessageBus};//# sourceMappingURL=preload.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preload.mjs","sources":["../../../src/core/message-bus/preload.ts"],"sourcesContent":["import { ipcRenderer } from 'electron';\nimport { MessageProtocolType } from './message-bus.type';\nimport { IPC_CHANNELS } from '@/core/window/constants';\n\n/**\n * Setup MessageBus connection in preload script\n * 在 preload 脚本中设置 MessageBus 连接\n *\n * Call this function in your preload script to automatically\n * set up the message bus port for the renderer process.\n * 在 preload 脚本中调用此函数以自动为渲染进程设置消息总线端口。\n *\n * @example\n * ```typescript\n * // preload.ts\n * import { setupMessageBus } from 'electron-infra-kit/message-bus';\n * setupMessageBus();\n * ```\n */\nexport function setupMessageBus(): void {\n ipcRenderer.on(IPC_CHANNELS.MESSAGE_BUS_PORT, (event) => {\n const [port] = event.ports;\n\n if (!port) {\n console.error('[MessageBus] No port received in message-bus-port event');\n return;\n }\n\n // Notify renderer process via internal message\n // 通过内部消息通知渲染进程\n window.postMessage({ type: MessageProtocolType.CONNECT, port }, '*', [port]);\n });\n}\n"],"names":[],"mappings":"+IAIA;;;;;;;;;;;;;;AAcG;SACa,eAAe,GAAA;IAC7B,WAAW,CAAC,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,KAAK,KAAI;AACtD,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK;QAE1B,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC;YACxE;QACF;;;AAIA,QAAA,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AAC9E,IAAA,CAAC,CAAC;AACJ"}
@@ -0,0 +1,40 @@
1
+ import { BrowserWindow } from 'electron';
2
+ export interface ITransport {
3
+ /**
4
+ * Transport name
5
+ */
6
+ readonly name: string;
7
+ /**
8
+ * Initialize transport
9
+ * @param onMessage Message handler
10
+ */
11
+ init(onMessage: (message: any, windowId: string) => void): void;
12
+ /**
13
+ * Register a window with the transport
14
+ * @param windowId Window ID
15
+ * @param window BrowserWindow instance
16
+ */
17
+ registerWindow(windowId: string, window: BrowserWindow): void;
18
+ /**
19
+ * Unregister a window
20
+ * @param windowId Window ID
21
+ */
22
+ unregisterWindow(windowId: string): void;
23
+ /**
24
+ * Send message to a specific window
25
+ * @param windowId Target window ID
26
+ * @param message Message payload
27
+ */
28
+ send(windowId: string, message: any): void;
29
+ /**
30
+ * Broadcast message to multiple windows
31
+ * @param message Message payload
32
+ * @param windowIds Target window IDs (optional, default to all)
33
+ * @returns Number of successful sends
34
+ */
35
+ broadcast(message: any, windowIds?: string[]): number;
36
+ /**
37
+ * Dispose transport resources
38
+ */
39
+ dispose(): void;
40
+ }
@@ -0,0 +1,18 @@
1
+ import { BrowserWindow } from 'electron';
2
+ import { ITransport } from './ITransport';
3
+ import { ILogger } from '@/infrastructure/logger';
4
+ export declare class IpcTransport implements ITransport {
5
+ readonly name = "ipc";
6
+ private logger;
7
+ private windows;
8
+ private onMessage?;
9
+ constructor(logger: ILogger);
10
+ private setupIpcListener;
11
+ private findWindowId;
12
+ init(onMessage: (message: any, windowId: string) => void): void;
13
+ registerWindow(windowId: string, window: BrowserWindow): void;
14
+ unregisterWindow(windowId: string): void;
15
+ send(windowId: string, message: any): void;
16
+ broadcast(message: any, windowIds?: string[]): number;
17
+ dispose(): void;
18
+ }