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.
- package/LICENSE +21 -0
- package/README.md +302 -0
- package/README.zh-CN.md +308 -0
- package/dist/core/error/WindowError.d.ts +56 -0
- package/dist/core/error/WindowError.js +71 -0
- package/dist/core/error/WindowError.js.map +1 -0
- package/dist/core/error/WindowError.mjs +71 -0
- package/dist/core/error/WindowError.mjs.map +1 -0
- package/dist/core/ipc/IpcHandler.d.ts +48 -0
- package/dist/core/ipc/IpcHandler.js +59 -0
- package/dist/core/ipc/IpcHandler.js.map +1 -0
- package/dist/core/ipc/IpcHandler.mjs +59 -0
- package/dist/core/ipc/IpcHandler.mjs.map +1 -0
- package/dist/core/ipc/IpcRouter.d.ts +70 -0
- package/dist/core/ipc/IpcRouter.js +143 -0
- package/dist/core/ipc/IpcRouter.js.map +1 -0
- package/dist/core/ipc/IpcRouter.mjs +143 -0
- package/dist/core/ipc/IpcRouter.mjs.map +1 -0
- package/dist/core/ipc/index.d.ts +3 -0
- package/dist/core/ipc/index.js +1 -0
- package/dist/core/ipc/index.js.map +1 -0
- package/dist/core/ipc/index.mjs +1 -0
- package/dist/core/ipc/index.mjs.map +1 -0
- package/dist/core/ipc/ipc-router.type.d.ts +73 -0
- package/dist/core/ipc/transport/index.d.ts +65 -0
- package/dist/core/ipc/transport/index.js +229 -0
- package/dist/core/ipc/transport/index.js.map +1 -0
- package/dist/core/ipc/transport/index.mjs +229 -0
- package/dist/core/ipc/transport/index.mjs.map +1 -0
- package/dist/core/ipc/transport/ipc.type.d.ts +36 -0
- package/dist/core/lifecycle/LifecycleManager.d.ts +66 -0
- package/dist/core/lifecycle/LifecycleManager.js +140 -0
- package/dist/core/lifecycle/LifecycleManager.js.map +1 -0
- package/dist/core/lifecycle/LifecycleManager.mjs +140 -0
- package/dist/core/lifecycle/LifecycleManager.mjs.map +1 -0
- package/dist/core/message-bus/MessageBus.d.ts +282 -0
- package/dist/core/message-bus/MessageBus.js +677 -0
- package/dist/core/message-bus/MessageBus.js.map +1 -0
- package/dist/core/message-bus/MessageBus.mjs +677 -0
- package/dist/core/message-bus/MessageBus.mjs.map +1 -0
- package/dist/core/message-bus/MessageBusClient.d.ts +100 -0
- package/dist/core/message-bus/MessageBusClient.js +280 -0
- package/dist/core/message-bus/MessageBusClient.js.map +1 -0
- package/dist/core/message-bus/MessageBusClient.mjs +280 -0
- package/dist/core/message-bus/MessageBusClient.mjs.map +1 -0
- package/dist/core/message-bus/core/DataStoreManager.d.ts +51 -0
- package/dist/core/message-bus/core/DataStoreManager.js +94 -0
- package/dist/core/message-bus/core/DataStoreManager.js.map +1 -0
- package/dist/core/message-bus/core/DataStoreManager.mjs +94 -0
- package/dist/core/message-bus/core/DataStoreManager.mjs.map +1 -0
- package/dist/core/message-bus/core/ManagedPort.d.ts +26 -0
- package/dist/core/message-bus/core/ManagedPort.js +55 -0
- package/dist/core/message-bus/core/ManagedPort.js.map +1 -0
- package/dist/core/message-bus/core/ManagedPort.mjs +55 -0
- package/dist/core/message-bus/core/ManagedPort.mjs.map +1 -0
- package/dist/core/message-bus/core/PortManager.d.ts +47 -0
- package/dist/core/message-bus/core/PortManager.js +114 -0
- package/dist/core/message-bus/core/PortManager.js.map +1 -0
- package/dist/core/message-bus/core/PortManager.mjs +114 -0
- package/dist/core/message-bus/core/PortManager.mjs.map +1 -0
- package/dist/core/message-bus/core/SubscriptionManager.d.ts +36 -0
- package/dist/core/message-bus/core/SubscriptionManager.js +78 -0
- package/dist/core/message-bus/core/SubscriptionManager.js.map +1 -0
- package/dist/core/message-bus/core/SubscriptionManager.mjs +78 -0
- package/dist/core/message-bus/core/SubscriptionManager.mjs.map +1 -0
- package/dist/core/message-bus/core/TransactionManager.d.ts +54 -0
- package/dist/core/message-bus/core/TransactionManager.js +95 -0
- package/dist/core/message-bus/core/TransactionManager.js.map +1 -0
- package/dist/core/message-bus/core/TransactionManager.mjs +95 -0
- package/dist/core/message-bus/core/TransactionManager.mjs.map +1 -0
- package/dist/core/message-bus/core/index.d.ts +5 -0
- package/dist/core/message-bus/index.d.ts +4 -0
- package/dist/core/message-bus/index.js +1 -0
- package/dist/core/message-bus/index.js.map +1 -0
- package/dist/core/message-bus/index.mjs +1 -0
- package/dist/core/message-bus/index.mjs.map +1 -0
- package/dist/core/message-bus/message-bus.type.d.ts +143 -0
- package/dist/core/message-bus/message-bus.type.js +26 -0
- package/dist/core/message-bus/message-bus.type.js.map +1 -0
- package/dist/core/message-bus/message-bus.type.mjs +26 -0
- package/dist/core/message-bus/message-bus.type.mjs.map +1 -0
- package/dist/core/message-bus/preload.d.ts +16 -0
- package/dist/core/message-bus/preload.js +27 -0
- package/dist/core/message-bus/preload.js.map +1 -0
- package/dist/core/message-bus/preload.mjs +27 -0
- package/dist/core/message-bus/preload.mjs.map +1 -0
- package/dist/core/message-bus/transport/ITransport.d.ts +40 -0
- package/dist/core/message-bus/transport/IpcTransport.d.ts +18 -0
- package/dist/core/message-bus/transport/IpcTransport.js +60 -0
- package/dist/core/message-bus/transport/IpcTransport.js.map +1 -0
- package/dist/core/message-bus/transport/IpcTransport.mjs +60 -0
- package/dist/core/message-bus/transport/IpcTransport.mjs.map +1 -0
- package/dist/core/message-bus/transport/MessagePortTransport.d.ts +15 -0
- package/dist/core/message-bus/transport/MessagePortTransport.js +35 -0
- package/dist/core/message-bus/transport/MessagePortTransport.js.map +1 -0
- package/dist/core/message-bus/transport/MessagePortTransport.mjs +35 -0
- package/dist/core/message-bus/transport/MessagePortTransport.mjs.map +1 -0
- package/dist/core/message-bus/transport/index.d.ts +3 -0
- package/dist/core/window/IpcSetup.d.ts +50 -0
- package/dist/core/window/IpcSetup.js +96 -0
- package/dist/core/window/IpcSetup.js.map +1 -0
- package/dist/core/window/IpcSetup.mjs +96 -0
- package/dist/core/window/IpcSetup.mjs.map +1 -0
- package/dist/core/window/WindowCreator.d.ts +66 -0
- package/dist/core/window/WindowCreator.js +168 -0
- package/dist/core/window/WindowCreator.js.map +1 -0
- package/dist/core/window/WindowCreator.mjs +168 -0
- package/dist/core/window/WindowCreator.mjs.map +1 -0
- package/dist/core/window/WindowManager.d.ts +214 -0
- package/dist/core/window/WindowManager.js +583 -0
- package/dist/core/window/WindowManager.js.map +1 -0
- package/dist/core/window/WindowManager.mjs +583 -0
- package/dist/core/window/WindowManager.mjs.map +1 -0
- package/dist/core/window/WindowStore.d.ts +136 -0
- package/dist/core/window/WindowStore.js +436 -0
- package/dist/core/window/WindowStore.js.map +1 -0
- package/dist/core/window/WindowStore.mjs +436 -0
- package/dist/core/window/WindowStore.mjs.map +1 -0
- package/dist/core/window/constants.d.ts +17 -0
- package/dist/core/window/constants.js +15 -0
- package/dist/core/window/constants.js.map +1 -0
- package/dist/core/window/constants.mjs +15 -0
- package/dist/core/window/constants.mjs.map +1 -0
- package/dist/core/window/core/MetricsManager.d.ts +14 -0
- package/dist/core/window/core/MetricsManager.js +27 -0
- package/dist/core/window/core/MetricsManager.js.map +1 -0
- package/dist/core/window/core/MetricsManager.mjs +27 -0
- package/dist/core/window/core/MetricsManager.mjs.map +1 -0
- package/dist/core/window/core/PluginExecutor.d.ts +22 -0
- package/dist/core/window/core/PluginExecutor.js +110 -0
- package/dist/core/window/core/PluginExecutor.js.map +1 -0
- package/dist/core/window/core/PluginExecutor.mjs +110 -0
- package/dist/core/window/core/PluginExecutor.mjs.map +1 -0
- package/dist/core/window/core/WindowContextManager.d.ts +26 -0
- package/dist/core/window/core/WindowContextManager.js +59 -0
- package/dist/core/window/core/WindowContextManager.js.map +1 -0
- package/dist/core/window/core/WindowContextManager.mjs +59 -0
- package/dist/core/window/core/WindowContextManager.mjs.map +1 -0
- package/dist/core/window/core/WindowLifecycle.d.ts +15 -0
- package/dist/core/window/core/WindowLifecycle.js +150 -0
- package/dist/core/window/core/WindowLifecycle.js.map +1 -0
- package/dist/core/window/core/WindowLifecycle.mjs +150 -0
- package/dist/core/window/core/WindowLifecycle.mjs.map +1 -0
- package/dist/core/window/core/WindowOperator.d.ts +90 -0
- package/dist/core/window/core/WindowOperator.js +154 -0
- package/dist/core/window/core/WindowOperator.js.map +1 -0
- package/dist/core/window/core/WindowOperator.mjs +154 -0
- package/dist/core/window/core/WindowOperator.mjs.map +1 -0
- package/dist/core/window/core/WindowRegistry.d.ts +168 -0
- package/dist/core/window/core/WindowRegistry.js +331 -0
- package/dist/core/window/core/WindowRegistry.js.map +1 -0
- package/dist/core/window/core/WindowRegistry.mjs +331 -0
- package/dist/core/window/core/WindowRegistry.mjs.map +1 -0
- package/dist/core/window/core/WindowStateManager.d.ts +40 -0
- package/dist/core/window/core/WindowStateManager.js +110 -0
- package/dist/core/window/core/WindowStateManager.js.map +1 -0
- package/dist/core/window/core/WindowStateManager.mjs +110 -0
- package/dist/core/window/core/WindowStateManager.mjs.map +1 -0
- package/dist/core/window/index.d.ts +7 -0
- package/dist/core/window/index.js +1 -0
- package/dist/core/window/index.js.map +1 -0
- package/dist/core/window/index.mjs +1 -0
- package/dist/core/window/index.mjs.map +1 -0
- package/dist/core/window/window-manager.schema.d.ts +50 -0
- package/dist/core/window/window-manager.schema.js +87 -0
- package/dist/core/window/window-manager.schema.js.map +1 -0
- package/dist/core/window/window-manager.schema.mjs +87 -0
- package/dist/core/window/window-manager.schema.mjs.map +1 -0
- package/dist/core/window/window-manager.type.d.ts +365 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +33 -0
- package/dist/index.mjs.map +1 -0
- package/dist/index.umd.js +1 -0
- package/dist/infrastructure/config/ConfigManager.d.ts +133 -0
- package/dist/infrastructure/config/ConfigManager.js +218 -0
- package/dist/infrastructure/config/ConfigManager.js.map +1 -0
- package/dist/infrastructure/config/ConfigManager.mjs +218 -0
- package/dist/infrastructure/config/ConfigManager.mjs.map +1 -0
- package/dist/infrastructure/config/index.d.ts +1 -0
- package/dist/infrastructure/debug/EnhancedDebugHelper.d.ts +106 -0
- package/dist/infrastructure/debug/EnhancedDebugHelper.js +218 -0
- package/dist/infrastructure/debug/EnhancedDebugHelper.js.map +1 -0
- package/dist/infrastructure/debug/EnhancedDebugHelper.mjs +218 -0
- package/dist/infrastructure/debug/EnhancedDebugHelper.mjs.map +1 -0
- package/dist/infrastructure/debug/PerformanceMonitor.d.ts +45 -0
- package/dist/infrastructure/debug/PerformanceMonitor.js +67 -0
- package/dist/infrastructure/debug/PerformanceMonitor.js.map +1 -0
- package/dist/infrastructure/debug/PerformanceMonitor.mjs +67 -0
- package/dist/infrastructure/debug/PerformanceMonitor.mjs.map +1 -0
- package/dist/infrastructure/debug/index.d.ts +22 -0
- package/dist/infrastructure/debug/index.js +47 -0
- package/dist/infrastructure/debug/index.js.map +1 -0
- package/dist/infrastructure/debug/index.mjs +47 -0
- package/dist/infrastructure/debug/index.mjs.map +1 -0
- package/dist/infrastructure/errors/ErrorCodes.d.ts +74 -0
- package/dist/infrastructure/errors/ErrorCodes.js +78 -0
- package/dist/infrastructure/errors/ErrorCodes.js.map +1 -0
- package/dist/infrastructure/errors/ErrorCodes.mjs +78 -0
- package/dist/infrastructure/errors/ErrorCodes.mjs.map +1 -0
- package/dist/infrastructure/errors/StandardError.d.ts +61 -0
- package/dist/infrastructure/errors/StandardError.js +84 -0
- package/dist/infrastructure/errors/StandardError.js.map +1 -0
- package/dist/infrastructure/errors/StandardError.mjs +84 -0
- package/dist/infrastructure/errors/StandardError.mjs.map +1 -0
- package/dist/infrastructure/errors/index.d.ts +13 -0
- package/dist/infrastructure/errors/index.js +24 -0
- package/dist/infrastructure/errors/index.js.map +1 -0
- package/dist/infrastructure/errors/index.mjs +24 -0
- package/dist/infrastructure/errors/index.mjs.map +1 -0
- package/dist/infrastructure/logger/ElectronLogger.d.ts +39 -0
- package/dist/infrastructure/logger/ElectronLogger.js +65 -0
- package/dist/infrastructure/logger/ElectronLogger.js.map +1 -0
- package/dist/infrastructure/logger/ElectronLogger.mjs +65 -0
- package/dist/infrastructure/logger/ElectronLogger.mjs.map +1 -0
- package/dist/infrastructure/logger/index.d.ts +2 -0
- package/dist/infrastructure/logger/logger.type.d.ts +8 -0
- package/dist/internal/types/BrandedTypes.d.ts +64 -0
- package/dist/internal/types/BrandedTypes.js +54 -0
- package/dist/internal/types/BrandedTypes.js.map +1 -0
- package/dist/internal/types/BrandedTypes.mjs +54 -0
- package/dist/internal/types/BrandedTypes.mjs.map +1 -0
- package/dist/internal/types/PerformanceOptions.d.ts +87 -0
- package/dist/internal/types/branded.d.ts +42 -0
- package/dist/internal/utils/MessageDispatcher.d.ts +67 -0
- package/dist/internal/utils/MessageDispatcher.js +96 -0
- package/dist/internal/utils/MessageDispatcher.js.map +1 -0
- package/dist/internal/utils/MessageDispatcher.mjs +96 -0
- package/dist/internal/utils/MessageDispatcher.mjs.map +1 -0
- package/dist/internal/utils/RateLimiter.d.ts +41 -0
- package/dist/internal/utils/RateLimiter.js +83 -0
- package/dist/internal/utils/RateLimiter.js.map +1 -0
- package/dist/internal/utils/RateLimiter.mjs +83 -0
- package/dist/internal/utils/RateLimiter.mjs.map +1 -0
- package/dist/internal/utils/StateKeeper.d.ts +125 -0
- package/dist/internal/utils/StateKeeper.js +334 -0
- package/dist/internal/utils/StateKeeper.js.map +1 -0
- package/dist/internal/utils/StateKeeper.mjs +334 -0
- package/dist/internal/utils/StateKeeper.mjs.map +1 -0
- package/dist/internal/utils/branded-helpers.d.ts +33 -0
- package/dist/internal/utils/index.d.ts +5 -0
- package/dist/preload/index.d.ts +45 -0
- package/dist/preload/index.js +91 -0
- package/dist/preload/index.js.map +1 -0
- package/dist/preload/index.mjs +91 -0
- package/dist/preload/index.mjs.map +1 -0
- package/dist/preload/preload.type.d.ts +15 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +1 -0
- package/dist/types.mjs.map +1 -0
- 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 @@
|
|
|
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
|
+
}
|