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,71 @@
|
|
|
1
|
+
'use strict';/**
|
|
2
|
+
* Window Error Codes
|
|
3
|
+
* 窗口错误代码
|
|
4
|
+
*/
|
|
5
|
+
exports.WindowErrorCode=void 0;
|
|
6
|
+
(function (WindowErrorCode) {
|
|
7
|
+
// Configuration Errors (1000-1999)
|
|
8
|
+
WindowErrorCode[WindowErrorCode["CONFIG_INVALID"] = 1001] = "CONFIG_INVALID";
|
|
9
|
+
WindowErrorCode[WindowErrorCode["CONFIG_MISSING"] = 1002] = "CONFIG_MISSING";
|
|
10
|
+
// Window Management Errors (2000-2999)
|
|
11
|
+
WindowErrorCode[WindowErrorCode["WINDOW_NOT_FOUND"] = 2001] = "WINDOW_NOT_FOUND";
|
|
12
|
+
WindowErrorCode[WindowErrorCode["WINDOW_CREATION_FAILED"] = 2002] = "WINDOW_CREATION_FAILED";
|
|
13
|
+
WindowErrorCode[WindowErrorCode["WINDOW_ALREADY_EXISTS"] = 2003] = "WINDOW_ALREADY_EXISTS";
|
|
14
|
+
WindowErrorCode[WindowErrorCode["WINDOW_LIMIT_REACHED"] = 2004] = "WINDOW_LIMIT_REACHED";
|
|
15
|
+
WindowErrorCode[WindowErrorCode["WINDOW_DESTROYED"] = 2005] = "WINDOW_DESTROYED";
|
|
16
|
+
// IPC/Communication Errors (3000-3999)
|
|
17
|
+
WindowErrorCode[WindowErrorCode["IPC_CONNECTION_FAILED"] = 3001] = "IPC_CONNECTION_FAILED";
|
|
18
|
+
WindowErrorCode[WindowErrorCode["IPC_TIMEOUT"] = 3002] = "IPC_TIMEOUT";
|
|
19
|
+
WindowErrorCode[WindowErrorCode["IPC_HANDLER_ERROR"] = 3003] = "IPC_HANDLER_ERROR";
|
|
20
|
+
// System/Internal Errors (5000-5999)
|
|
21
|
+
WindowErrorCode[WindowErrorCode["INTERNAL_ERROR"] = 5001] = "INTERNAL_ERROR";
|
|
22
|
+
WindowErrorCode[WindowErrorCode["DEPENDENCY_MISSING"] = 5002] = "DEPENDENCY_MISSING";
|
|
23
|
+
})(exports.WindowErrorCode || (exports.WindowErrorCode = {}));
|
|
24
|
+
/**
|
|
25
|
+
* Window Error Class
|
|
26
|
+
* 窗口错误类
|
|
27
|
+
*
|
|
28
|
+
* Structured error handling for the WindowManager
|
|
29
|
+
* 为 WindowManager 提供结构化的错误处理
|
|
30
|
+
*/
|
|
31
|
+
class WindowError extends Error {
|
|
32
|
+
code;
|
|
33
|
+
originalError;
|
|
34
|
+
details;
|
|
35
|
+
suggestion;
|
|
36
|
+
constructor(options) {
|
|
37
|
+
super(options.message);
|
|
38
|
+
this.name = 'WindowError';
|
|
39
|
+
this.code = options.code;
|
|
40
|
+
this.originalError = options.originalError;
|
|
41
|
+
this.details = options.details;
|
|
42
|
+
this.suggestion = options.suggestion;
|
|
43
|
+
// Fix prototype chain for custom errors
|
|
44
|
+
Object.setPrototypeOf(this, WindowError.prototype);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get error category based on code
|
|
48
|
+
* 根据错误代码获取错误类别
|
|
49
|
+
*/
|
|
50
|
+
getErrorCategory() {
|
|
51
|
+
if (this.code >= 1000 && this.code < 2000)
|
|
52
|
+
return 'configuration';
|
|
53
|
+
if (this.code >= 2000 && this.code < 3000)
|
|
54
|
+
return 'window';
|
|
55
|
+
if (this.code >= 3000 && this.code < 4000)
|
|
56
|
+
return 'ipc';
|
|
57
|
+
if (this.code >= 5000 && this.code < 6000)
|
|
58
|
+
return 'system';
|
|
59
|
+
return 'unknown';
|
|
60
|
+
}
|
|
61
|
+
toJSON() {
|
|
62
|
+
return {
|
|
63
|
+
name: this.name,
|
|
64
|
+
message: this.message,
|
|
65
|
+
code: this.code,
|
|
66
|
+
category: this.getErrorCategory(),
|
|
67
|
+
details: this.details,
|
|
68
|
+
suggestion: this.suggestion,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}exports.WindowError=WindowError;//# sourceMappingURL=WindowError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WindowError.js","sources":["../../../src/core/error/WindowError.ts"],"sourcesContent":["/**\n * Window Error Codes\n * 窗口错误代码\n */\nexport enum WindowErrorCode {\n // Configuration Errors (1000-1999)\n CONFIG_INVALID = 1001,\n CONFIG_MISSING = 1002,\n\n // Window Management Errors (2000-2999)\n WINDOW_NOT_FOUND = 2001,\n WINDOW_CREATION_FAILED = 2002,\n WINDOW_ALREADY_EXISTS = 2003,\n WINDOW_LIMIT_REACHED = 2004,\n WINDOW_DESTROYED = 2005,\n\n // IPC/Communication Errors (3000-3999)\n IPC_CONNECTION_FAILED = 3001,\n IPC_TIMEOUT = 3002,\n IPC_HANDLER_ERROR = 3003,\n\n // System/Internal Errors (5000-5999)\n INTERNAL_ERROR = 5001,\n DEPENDENCY_MISSING = 5002,\n}\n\n/**\n * Window Error Options\n * 窗口错误选项\n */\nexport interface WindowErrorOptions {\n code: WindowErrorCode;\n message: string;\n originalError?: Error | unknown;\n details?: Record<string, any>;\n suggestion?: string;\n}\n\n/**\n * Window Error Class\n * 窗口错误类\n *\n * Structured error handling for the WindowManager\n * 为 WindowManager 提供结构化的错误处理\n */\nexport class WindowError extends Error {\n public readonly code: WindowErrorCode;\n public readonly originalError?: Error | unknown;\n public readonly details?: Record<string, any>;\n public readonly suggestion?: string;\n\n constructor(options: WindowErrorOptions) {\n super(options.message);\n this.name = 'WindowError';\n this.code = options.code;\n this.originalError = options.originalError;\n this.details = options.details;\n this.suggestion = options.suggestion;\n\n // Fix prototype chain for custom errors\n Object.setPrototypeOf(this, WindowError.prototype);\n }\n\n /**\n * Get error category based on code\n * 根据错误代码获取错误类别\n */\n public getErrorCategory(): 'configuration' | 'window' | 'ipc' | 'system' | 'unknown' {\n if (this.code >= 1000 && this.code < 2000) return 'configuration';\n if (this.code >= 2000 && this.code < 3000) return 'window';\n if (this.code >= 3000 && this.code < 4000) return 'ipc';\n if (this.code >= 5000 && this.code < 6000) return 'system';\n return 'unknown';\n }\n\n public toJSON() {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n category: this.getErrorCategory(),\n details: this.details,\n suggestion: this.suggestion,\n };\n }\n}\n"],"names":["WindowErrorCode"],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Window Error Codes
|
|
3
|
+
* 窗口错误代码
|
|
4
|
+
*/
|
|
5
|
+
var WindowErrorCode;
|
|
6
|
+
(function (WindowErrorCode) {
|
|
7
|
+
// Configuration Errors (1000-1999)
|
|
8
|
+
WindowErrorCode[WindowErrorCode["CONFIG_INVALID"] = 1001] = "CONFIG_INVALID";
|
|
9
|
+
WindowErrorCode[WindowErrorCode["CONFIG_MISSING"] = 1002] = "CONFIG_MISSING";
|
|
10
|
+
// Window Management Errors (2000-2999)
|
|
11
|
+
WindowErrorCode[WindowErrorCode["WINDOW_NOT_FOUND"] = 2001] = "WINDOW_NOT_FOUND";
|
|
12
|
+
WindowErrorCode[WindowErrorCode["WINDOW_CREATION_FAILED"] = 2002] = "WINDOW_CREATION_FAILED";
|
|
13
|
+
WindowErrorCode[WindowErrorCode["WINDOW_ALREADY_EXISTS"] = 2003] = "WINDOW_ALREADY_EXISTS";
|
|
14
|
+
WindowErrorCode[WindowErrorCode["WINDOW_LIMIT_REACHED"] = 2004] = "WINDOW_LIMIT_REACHED";
|
|
15
|
+
WindowErrorCode[WindowErrorCode["WINDOW_DESTROYED"] = 2005] = "WINDOW_DESTROYED";
|
|
16
|
+
// IPC/Communication Errors (3000-3999)
|
|
17
|
+
WindowErrorCode[WindowErrorCode["IPC_CONNECTION_FAILED"] = 3001] = "IPC_CONNECTION_FAILED";
|
|
18
|
+
WindowErrorCode[WindowErrorCode["IPC_TIMEOUT"] = 3002] = "IPC_TIMEOUT";
|
|
19
|
+
WindowErrorCode[WindowErrorCode["IPC_HANDLER_ERROR"] = 3003] = "IPC_HANDLER_ERROR";
|
|
20
|
+
// System/Internal Errors (5000-5999)
|
|
21
|
+
WindowErrorCode[WindowErrorCode["INTERNAL_ERROR"] = 5001] = "INTERNAL_ERROR";
|
|
22
|
+
WindowErrorCode[WindowErrorCode["DEPENDENCY_MISSING"] = 5002] = "DEPENDENCY_MISSING";
|
|
23
|
+
})(WindowErrorCode || (WindowErrorCode = {}));
|
|
24
|
+
/**
|
|
25
|
+
* Window Error Class
|
|
26
|
+
* 窗口错误类
|
|
27
|
+
*
|
|
28
|
+
* Structured error handling for the WindowManager
|
|
29
|
+
* 为 WindowManager 提供结构化的错误处理
|
|
30
|
+
*/
|
|
31
|
+
class WindowError extends Error {
|
|
32
|
+
code;
|
|
33
|
+
originalError;
|
|
34
|
+
details;
|
|
35
|
+
suggestion;
|
|
36
|
+
constructor(options) {
|
|
37
|
+
super(options.message);
|
|
38
|
+
this.name = 'WindowError';
|
|
39
|
+
this.code = options.code;
|
|
40
|
+
this.originalError = options.originalError;
|
|
41
|
+
this.details = options.details;
|
|
42
|
+
this.suggestion = options.suggestion;
|
|
43
|
+
// Fix prototype chain for custom errors
|
|
44
|
+
Object.setPrototypeOf(this, WindowError.prototype);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get error category based on code
|
|
48
|
+
* 根据错误代码获取错误类别
|
|
49
|
+
*/
|
|
50
|
+
getErrorCategory() {
|
|
51
|
+
if (this.code >= 1000 && this.code < 2000)
|
|
52
|
+
return 'configuration';
|
|
53
|
+
if (this.code >= 2000 && this.code < 3000)
|
|
54
|
+
return 'window';
|
|
55
|
+
if (this.code >= 3000 && this.code < 4000)
|
|
56
|
+
return 'ipc';
|
|
57
|
+
if (this.code >= 5000 && this.code < 6000)
|
|
58
|
+
return 'system';
|
|
59
|
+
return 'unknown';
|
|
60
|
+
}
|
|
61
|
+
toJSON() {
|
|
62
|
+
return {
|
|
63
|
+
name: this.name,
|
|
64
|
+
message: this.message,
|
|
65
|
+
code: this.code,
|
|
66
|
+
category: this.getErrorCategory(),
|
|
67
|
+
details: this.details,
|
|
68
|
+
suggestion: this.suggestion,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}export{WindowError,WindowErrorCode};//# sourceMappingURL=WindowError.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WindowError.mjs","sources":["../../../src/core/error/WindowError.ts"],"sourcesContent":["/**\n * Window Error Codes\n * 窗口错误代码\n */\nexport enum WindowErrorCode {\n // Configuration Errors (1000-1999)\n CONFIG_INVALID = 1001,\n CONFIG_MISSING = 1002,\n\n // Window Management Errors (2000-2999)\n WINDOW_NOT_FOUND = 2001,\n WINDOW_CREATION_FAILED = 2002,\n WINDOW_ALREADY_EXISTS = 2003,\n WINDOW_LIMIT_REACHED = 2004,\n WINDOW_DESTROYED = 2005,\n\n // IPC/Communication Errors (3000-3999)\n IPC_CONNECTION_FAILED = 3001,\n IPC_TIMEOUT = 3002,\n IPC_HANDLER_ERROR = 3003,\n\n // System/Internal Errors (5000-5999)\n INTERNAL_ERROR = 5001,\n DEPENDENCY_MISSING = 5002,\n}\n\n/**\n * Window Error Options\n * 窗口错误选项\n */\nexport interface WindowErrorOptions {\n code: WindowErrorCode;\n message: string;\n originalError?: Error | unknown;\n details?: Record<string, any>;\n suggestion?: string;\n}\n\n/**\n * Window Error Class\n * 窗口错误类\n *\n * Structured error handling for the WindowManager\n * 为 WindowManager 提供结构化的错误处理\n */\nexport class WindowError extends Error {\n public readonly code: WindowErrorCode;\n public readonly originalError?: Error | unknown;\n public readonly details?: Record<string, any>;\n public readonly suggestion?: string;\n\n constructor(options: WindowErrorOptions) {\n super(options.message);\n this.name = 'WindowError';\n this.code = options.code;\n this.originalError = options.originalError;\n this.details = options.details;\n this.suggestion = options.suggestion;\n\n // Fix prototype chain for custom errors\n Object.setPrototypeOf(this, WindowError.prototype);\n }\n\n /**\n * Get error category based on code\n * 根据错误代码获取错误类别\n */\n public getErrorCategory(): 'configuration' | 'window' | 'ipc' | 'system' | 'unknown' {\n if (this.code >= 1000 && this.code < 2000) return 'configuration';\n if (this.code >= 2000 && this.code < 3000) return 'window';\n if (this.code >= 3000 && this.code < 4000) return 'ipc';\n if (this.code >= 5000 && this.code < 6000) return 'system';\n return 'unknown';\n }\n\n public toJSON() {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n category: this.getErrorCategory(),\n details: this.details,\n suggestion: this.suggestion,\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { IpcHandlerCallback } from './ipc-router.type';
|
|
2
|
+
import { ZodType } from 'zod';
|
|
3
|
+
/**
|
|
4
|
+
* IPC Handler Class
|
|
5
|
+
* IPC 处理器类
|
|
6
|
+
*
|
|
7
|
+
* Wraps IPC message handling logic with type support
|
|
8
|
+
* 封装带类型支持的 IPC 消息处理逻辑
|
|
9
|
+
*
|
|
10
|
+
* @template Context - Context/API type (上下文/API 类型)
|
|
11
|
+
* @template T - Input data type (输入数据类型)
|
|
12
|
+
* @template R - Return value type (返回值类型)
|
|
13
|
+
*/
|
|
14
|
+
export default class IpcHandler<Context = Record<string, any>, T = any, R = any> {
|
|
15
|
+
private _name;
|
|
16
|
+
private _event;
|
|
17
|
+
private _callback;
|
|
18
|
+
private _schema?;
|
|
19
|
+
/**
|
|
20
|
+
* Create IPC Handler instance
|
|
21
|
+
* 创建 IPC 处理器实例
|
|
22
|
+
* @param name - Handler name (处理器名称)
|
|
23
|
+
* @param event - Event to listen for (要监听的事件)
|
|
24
|
+
* @param callback - Callback function triggered on event (事件触发时的回调函数)
|
|
25
|
+
* @param schema - Optional Zod schema for input validation (可选的输入校验 Zod Schema)
|
|
26
|
+
*/
|
|
27
|
+
constructor(name: string, event: string, callback: IpcHandlerCallback<Context, T, R>, schema?: ZodType<T>);
|
|
28
|
+
/**
|
|
29
|
+
* Get handler name
|
|
30
|
+
* 获取处理器名称
|
|
31
|
+
*/
|
|
32
|
+
get name(): string;
|
|
33
|
+
/**
|
|
34
|
+
* Get event name
|
|
35
|
+
* 获取事件名称
|
|
36
|
+
*/
|
|
37
|
+
get event(): string;
|
|
38
|
+
/**
|
|
39
|
+
* Get callback function
|
|
40
|
+
* 获取回调函数
|
|
41
|
+
*/
|
|
42
|
+
get callback(): IpcHandlerCallback<Context, T, R>;
|
|
43
|
+
/**
|
|
44
|
+
* Get validation schema
|
|
45
|
+
* 获取校验 Schema
|
|
46
|
+
*/
|
|
47
|
+
get schema(): ZodType<T> | undefined;
|
|
48
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
'use strict';/**
|
|
2
|
+
* IPC Handler Class
|
|
3
|
+
* IPC 处理器类
|
|
4
|
+
*
|
|
5
|
+
* Wraps IPC message handling logic with type support
|
|
6
|
+
* 封装带类型支持的 IPC 消息处理逻辑
|
|
7
|
+
*
|
|
8
|
+
* @template Context - Context/API type (上下文/API 类型)
|
|
9
|
+
* @template T - Input data type (输入数据类型)
|
|
10
|
+
* @template R - Return value type (返回值类型)
|
|
11
|
+
*/
|
|
12
|
+
class IpcHandler {
|
|
13
|
+
_name;
|
|
14
|
+
_event;
|
|
15
|
+
_callback;
|
|
16
|
+
_schema;
|
|
17
|
+
/**
|
|
18
|
+
* Create IPC Handler instance
|
|
19
|
+
* 创建 IPC 处理器实例
|
|
20
|
+
* @param name - Handler name (处理器名称)
|
|
21
|
+
* @param event - Event to listen for (要监听的事件)
|
|
22
|
+
* @param callback - Callback function triggered on event (事件触发时的回调函数)
|
|
23
|
+
* @param schema - Optional Zod schema for input validation (可选的输入校验 Zod Schema)
|
|
24
|
+
*/
|
|
25
|
+
constructor(name, event, callback, schema) {
|
|
26
|
+
this._name = name;
|
|
27
|
+
this._event = event;
|
|
28
|
+
this._callback = callback;
|
|
29
|
+
this._schema = schema;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get handler name
|
|
33
|
+
* 获取处理器名称
|
|
34
|
+
*/
|
|
35
|
+
get name() {
|
|
36
|
+
return this._name;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get event name
|
|
40
|
+
* 获取事件名称
|
|
41
|
+
*/
|
|
42
|
+
get event() {
|
|
43
|
+
return this._event;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get callback function
|
|
47
|
+
* 获取回调函数
|
|
48
|
+
*/
|
|
49
|
+
get callback() {
|
|
50
|
+
return this._callback;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get validation schema
|
|
54
|
+
* 获取校验 Schema
|
|
55
|
+
*/
|
|
56
|
+
get schema() {
|
|
57
|
+
return this._schema;
|
|
58
|
+
}
|
|
59
|
+
}module.exports=IpcHandler;//# sourceMappingURL=IpcHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IpcHandler.js","sources":["../../../src/core/ipc/IpcHandler.ts"],"sourcesContent":["import { IpcHandlerCallback } from './ipc-router.type';\nimport { ZodType } from 'zod';\n\n/**\n * IPC Handler Class\n * IPC 处理器类\n *\n * Wraps IPC message handling logic with type support\n * 封装带类型支持的 IPC 消息处理逻辑\n *\n * @template Context - Context/API type (上下文/API 类型)\n * @template T - Input data type (输入数据类型)\n * @template R - Return value type (返回值类型)\n */\nexport default class IpcHandler<Context = Record<string, any>, T = any, R = any> {\n private _name: string;\n private _event: string;\n private _callback: IpcHandlerCallback<Context, T, R>;\n private _schema?: ZodType<T>;\n\n /**\n * Create IPC Handler instance\n * 创建 IPC 处理器实例\n * @param name - Handler name (处理器名称)\n * @param event - Event to listen for (要监听的事件)\n * @param callback - Callback function triggered on event (事件触发时的回调函数)\n * @param schema - Optional Zod schema for input validation (可选的输入校验 Zod Schema)\n */\n constructor(\n name: string,\n event: string,\n callback: IpcHandlerCallback<Context, T, R>,\n schema?: ZodType<T>\n ) {\n this._name = name;\n this._event = event;\n this._callback = callback;\n this._schema = schema;\n }\n\n /**\n * Get handler name\n * 获取处理器名称\n */\n get name(): string {\n return this._name;\n }\n\n /**\n * Get event name\n * 获取事件名称\n */\n get event(): string {\n return this._event;\n }\n\n /**\n * Get callback function\n * 获取回调函数\n */\n get callback(): IpcHandlerCallback<Context, T, R> {\n return this._callback;\n }\n\n /**\n * Get validation schema\n * 获取校验 Schema\n */\n get schema(): ZodType<T> | undefined {\n return this._schema;\n }\n}\n"],"names":[],"mappings":"aAGA;;;;;;;;;;AAUG;AACW,MAAO,UAAU,CAAA;AACrB,IAAA,KAAK;AACL,IAAA,MAAM;AACN,IAAA,SAAS;AACT,IAAA,OAAO;AAEf;;;;;;;AAOG;AACH,IAAA,WAAA,CACE,IAAY,EACZ,KAAa,EACb,QAA2C,EAC3C,MAAmB,EAAA;AAEnB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;IACvB;AAEA;;;AAGG;AACH,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA;;;AAGG;AACH,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA;;;AAGG;AACH,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA;;;AAGG;AACH,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;AACD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IPC Handler Class
|
|
3
|
+
* IPC 处理器类
|
|
4
|
+
*
|
|
5
|
+
* Wraps IPC message handling logic with type support
|
|
6
|
+
* 封装带类型支持的 IPC 消息处理逻辑
|
|
7
|
+
*
|
|
8
|
+
* @template Context - Context/API type (上下文/API 类型)
|
|
9
|
+
* @template T - Input data type (输入数据类型)
|
|
10
|
+
* @template R - Return value type (返回值类型)
|
|
11
|
+
*/
|
|
12
|
+
class IpcHandler {
|
|
13
|
+
_name;
|
|
14
|
+
_event;
|
|
15
|
+
_callback;
|
|
16
|
+
_schema;
|
|
17
|
+
/**
|
|
18
|
+
* Create IPC Handler instance
|
|
19
|
+
* 创建 IPC 处理器实例
|
|
20
|
+
* @param name - Handler name (处理器名称)
|
|
21
|
+
* @param event - Event to listen for (要监听的事件)
|
|
22
|
+
* @param callback - Callback function triggered on event (事件触发时的回调函数)
|
|
23
|
+
* @param schema - Optional Zod schema for input validation (可选的输入校验 Zod Schema)
|
|
24
|
+
*/
|
|
25
|
+
constructor(name, event, callback, schema) {
|
|
26
|
+
this._name = name;
|
|
27
|
+
this._event = event;
|
|
28
|
+
this._callback = callback;
|
|
29
|
+
this._schema = schema;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get handler name
|
|
33
|
+
* 获取处理器名称
|
|
34
|
+
*/
|
|
35
|
+
get name() {
|
|
36
|
+
return this._name;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get event name
|
|
40
|
+
* 获取事件名称
|
|
41
|
+
*/
|
|
42
|
+
get event() {
|
|
43
|
+
return this._event;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get callback function
|
|
47
|
+
* 获取回调函数
|
|
48
|
+
*/
|
|
49
|
+
get callback() {
|
|
50
|
+
return this._callback;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get validation schema
|
|
54
|
+
* 获取校验 Schema
|
|
55
|
+
*/
|
|
56
|
+
get schema() {
|
|
57
|
+
return this._schema;
|
|
58
|
+
}
|
|
59
|
+
}export{IpcHandler as default};//# sourceMappingURL=IpcHandler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IpcHandler.mjs","sources":["../../../src/core/ipc/IpcHandler.ts"],"sourcesContent":["import { IpcHandlerCallback } from './ipc-router.type';\nimport { ZodType } from 'zod';\n\n/**\n * IPC Handler Class\n * IPC 处理器类\n *\n * Wraps IPC message handling logic with type support\n * 封装带类型支持的 IPC 消息处理逻辑\n *\n * @template Context - Context/API type (上下文/API 类型)\n * @template T - Input data type (输入数据类型)\n * @template R - Return value type (返回值类型)\n */\nexport default class IpcHandler<Context = Record<string, any>, T = any, R = any> {\n private _name: string;\n private _event: string;\n private _callback: IpcHandlerCallback<Context, T, R>;\n private _schema?: ZodType<T>;\n\n /**\n * Create IPC Handler instance\n * 创建 IPC 处理器实例\n * @param name - Handler name (处理器名称)\n * @param event - Event to listen for (要监听的事件)\n * @param callback - Callback function triggered on event (事件触发时的回调函数)\n * @param schema - Optional Zod schema for input validation (可选的输入校验 Zod Schema)\n */\n constructor(\n name: string,\n event: string,\n callback: IpcHandlerCallback<Context, T, R>,\n schema?: ZodType<T>\n ) {\n this._name = name;\n this._event = event;\n this._callback = callback;\n this._schema = schema;\n }\n\n /**\n * Get handler name\n * 获取处理器名称\n */\n get name(): string {\n return this._name;\n }\n\n /**\n * Get event name\n * 获取事件名称\n */\n get event(): string {\n return this._event;\n }\n\n /**\n * Get callback function\n * 获取回调函数\n */\n get callback(): IpcHandlerCallback<Context, T, R> {\n return this._callback;\n }\n\n /**\n * Get validation schema\n * 获取校验 Schema\n */\n get schema(): ZodType<T> | undefined {\n return this._schema;\n }\n}\n"],"names":[],"mappings":"AAGA;;;;;;;;;;AAUG;AACW,MAAO,UAAU,CAAA;AACrB,IAAA,KAAK;AACL,IAAA,MAAM;AACN,IAAA,SAAS;AACT,IAAA,OAAO;AAEf;;;;;;;AAOG;AACH,IAAA,WAAA,CACE,IAAY,EACZ,KAAa,EACb,QAA2C,EAC3C,MAAmB,EAAA;AAEnB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;IACvB;AAEA;;;AAGG;AACH,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA;;;AAGG;AACH,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA;;;AAGG;AACH,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA;;;AAGG;AACH,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;AACD"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import IpcHandler from './IpcHandler';
|
|
2
|
+
import { IpcRequest, IpcSchema, IpcDefinition } from './ipc-router.type';
|
|
3
|
+
import { ILogger } from '@/infrastructure/logger';
|
|
4
|
+
import { RateLimitConfig } from '@/internal/utils/RateLimiter';
|
|
5
|
+
export default class IpcRouter<Api extends Record<string, any> = Record<string, any>, Schema extends IpcSchema = Record<string, IpcDefinition>> {
|
|
6
|
+
private _api;
|
|
7
|
+
private dispatcher;
|
|
8
|
+
private rateLimiter;
|
|
9
|
+
constructor(options?: {
|
|
10
|
+
logger?: ILogger;
|
|
11
|
+
defaultRateLimit?: RateLimitConfig;
|
|
12
|
+
});
|
|
13
|
+
/**
|
|
14
|
+
* Add a single IPC handler
|
|
15
|
+
* 添加单个IPC处理器
|
|
16
|
+
* @param handler - IPC handler instance (IPC处理器实例)
|
|
17
|
+
*/
|
|
18
|
+
addHandler<K extends keyof Schema>(handler: IpcHandler<Api, Schema[K]['payload'], Schema[K]['response']> & {
|
|
19
|
+
name: K;
|
|
20
|
+
}): void;
|
|
21
|
+
/**
|
|
22
|
+
* Add multiple IPC handlers
|
|
23
|
+
* 添加多个IPC处理器
|
|
24
|
+
* @param handlers - Array of IPC handler instances (IPC处理器实例数组)
|
|
25
|
+
*/
|
|
26
|
+
addHandlers(handlers: (IpcHandler<Api, any, any> & {
|
|
27
|
+
name: keyof Schema;
|
|
28
|
+
})[]): void;
|
|
29
|
+
/**
|
|
30
|
+
* Set rate limit for a specific handler
|
|
31
|
+
* 为特定处理器设置限流
|
|
32
|
+
* @param handlerName - Handler name (处理器名称)
|
|
33
|
+
* @param config - Rate limit configuration (限流配置)
|
|
34
|
+
*/
|
|
35
|
+
setRateLimit(handlerName: keyof Schema, config: RateLimitConfig): void;
|
|
36
|
+
/**
|
|
37
|
+
* Remove IPC handler by name
|
|
38
|
+
* 移除指定名称的IPC处理器
|
|
39
|
+
* @param name - Handler name (处理器名称)
|
|
40
|
+
*/
|
|
41
|
+
removeHandler(name: string): void;
|
|
42
|
+
/**
|
|
43
|
+
* Trigger callback of specified IPC handler
|
|
44
|
+
* 触发指定名称的IPC处理器回调
|
|
45
|
+
* @param data - Object containing handler name and data (包含处理器名称和数据的对象)
|
|
46
|
+
* @param senderId - Optional sender ID (e.g. window ID) for rate limiting (可选的发送者 ID,用于限流)
|
|
47
|
+
* @returns Return value of the callback function (回调函数的返回值)
|
|
48
|
+
*/
|
|
49
|
+
handle<K extends keyof Schema>(data: IpcRequest<Schema[K]['payload']> & {
|
|
50
|
+
name: K;
|
|
51
|
+
}, senderId?: number | string): Promise<Schema[K]['response']>;
|
|
52
|
+
/**
|
|
53
|
+
* Inject API (Dependencies)
|
|
54
|
+
* 注入 API (依赖)
|
|
55
|
+
* @param name - API Name (API 名称)
|
|
56
|
+
* @param api - API Instance (API 实例)
|
|
57
|
+
*/
|
|
58
|
+
addApi(name: keyof Api, api: any): void;
|
|
59
|
+
/**
|
|
60
|
+
* Inject multiple APIs (Batch)
|
|
61
|
+
* 批量注入 API
|
|
62
|
+
* @param apis - Object containing API instances (包含 API 实例的对象)
|
|
63
|
+
*/
|
|
64
|
+
addApis(apis: Partial<Api>): void;
|
|
65
|
+
/**
|
|
66
|
+
* Dispose IpcRouter
|
|
67
|
+
* 释放 IpcRouter
|
|
68
|
+
*/
|
|
69
|
+
dispose(): void;
|
|
70
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
'use strict';var zod=require('zod'),MessageDispatcher=require('../../internal/utils/MessageDispatcher.js'),index=require('../../infrastructure/errors/index.js'),RateLimiter=require('../../internal/utils/RateLimiter.js'),PerformanceMonitor=require('../../infrastructure/debug/PerformanceMonitor.js');// Define the schema for IpcRequest
|
|
2
|
+
// 定义 IpcRequest 的 Schema
|
|
3
|
+
const IpcRequestSchema = zod.z.object({
|
|
4
|
+
name: zod.z.string({ message: 'Handler name is required' }),
|
|
5
|
+
payload: zod.z.unknown().optional(),
|
|
6
|
+
});
|
|
7
|
+
class IpcRouter {
|
|
8
|
+
_api = {};
|
|
9
|
+
dispatcher;
|
|
10
|
+
rateLimiter;
|
|
11
|
+
constructor(options = {}) {
|
|
12
|
+
this.dispatcher = new MessageDispatcher.MessageDispatcher('IpcRouter', options.logger);
|
|
13
|
+
this.rateLimiter = new RateLimiter.RateLimiter({
|
|
14
|
+
logger: options.logger,
|
|
15
|
+
defaultLimit: options.defaultRateLimit,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Add a single IPC handler
|
|
20
|
+
* 添加单个IPC处理器
|
|
21
|
+
* @param handler - IPC handler instance (IPC处理器实例)
|
|
22
|
+
*/
|
|
23
|
+
addHandler(handler) {
|
|
24
|
+
this.dispatcher.register(handler.name, handler.callback, handler.schema);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Add multiple IPC handlers
|
|
28
|
+
* 添加多个IPC处理器
|
|
29
|
+
* @param handlers - Array of IPC handler instances (IPC处理器实例数组)
|
|
30
|
+
*/
|
|
31
|
+
addHandlers(handlers) {
|
|
32
|
+
handlers.forEach((handler) => this.addHandler(handler));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Set rate limit for a specific handler
|
|
36
|
+
* 为特定处理器设置限流
|
|
37
|
+
* @param handlerName - Handler name (处理器名称)
|
|
38
|
+
* @param config - Rate limit configuration (限流配置)
|
|
39
|
+
*/
|
|
40
|
+
setRateLimit(handlerName, config) {
|
|
41
|
+
this.rateLimiter.setLimit(handlerName, config);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Remove IPC handler by name
|
|
45
|
+
* 移除指定名称的IPC处理器
|
|
46
|
+
* @param name - Handler name (处理器名称)
|
|
47
|
+
*/
|
|
48
|
+
removeHandler(name) {
|
|
49
|
+
this.dispatcher.unregister(name);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Trigger callback of specified IPC handler
|
|
53
|
+
* 触发指定名称的IPC处理器回调
|
|
54
|
+
* @param data - Object containing handler name and data (包含处理器名称和数据的对象)
|
|
55
|
+
* @param senderId - Optional sender ID (e.g. window ID) for rate limiting (可选的发送者 ID,用于限流)
|
|
56
|
+
* @returns Return value of the callback function (回调函数的返回值)
|
|
57
|
+
*/
|
|
58
|
+
handle(data, senderId) {
|
|
59
|
+
const perf = PerformanceMonitor.PerformanceMonitor.getInstance();
|
|
60
|
+
const measureId = `ipc-${String(data.name)}-${Date.now()}`;
|
|
61
|
+
const handleAsync = async () => {
|
|
62
|
+
try {
|
|
63
|
+
perf.startMeasure(measureId, 'IPC Call', { handler: String(data.name), senderId });
|
|
64
|
+
// 0. Rate Limiting Check
|
|
65
|
+
// 0. 限流检查
|
|
66
|
+
if (senderId !== undefined) {
|
|
67
|
+
const rateLimitKey = `${senderId}:${String(data.name)}`;
|
|
68
|
+
const allowed = this.rateLimiter.check(rateLimitKey, String(data.name));
|
|
69
|
+
if (!allowed) {
|
|
70
|
+
throw new index.IpcHandlerError(String(data.name), new Error(`Rate limit exceeded for handler "${String(data.name)}"`));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Runtime validation using Zod (Envelope validation)
|
|
74
|
+
// 使用 Zod 进行运行时校验 (信封校验)
|
|
75
|
+
const validationResult = IpcRequestSchema.safeParse(data);
|
|
76
|
+
if (!validationResult.success) {
|
|
77
|
+
console.warn('[IpcRouter] Invalid IPC request data:', validationResult.error.format());
|
|
78
|
+
throw new index.IpcHandlerError('validation', new Error(`Invalid IPC request: ${validationResult.error.message}`));
|
|
79
|
+
}
|
|
80
|
+
// Payload validation if schema exists
|
|
81
|
+
// 如果存在 Schema,则进行 Payload 校验
|
|
82
|
+
const schema = this.dispatcher.getMetadata(data.name);
|
|
83
|
+
if (schema) {
|
|
84
|
+
const payloadResult = schema.safeParse(data.payload);
|
|
85
|
+
if (!payloadResult.success) {
|
|
86
|
+
console.warn(`[IpcRouter] Invalid payload for handler "${String(data.name)}":`, payloadResult.error.message);
|
|
87
|
+
throw new index.IpcHandlerError(String(data.name), new Error(`Invalid payload: ${payloadResult.error.message}`));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// 1. Dependency Injection (inject this._api)
|
|
91
|
+
// 1. 依赖注入 (注入 this._api)
|
|
92
|
+
const context = { ...this._api };
|
|
93
|
+
// 2. Dispatch
|
|
94
|
+
// 2. 分发
|
|
95
|
+
const result = await Promise.resolve(this.dispatcher.dispatch(data.name, context, data.payload));
|
|
96
|
+
perf.endMeasure(measureId, { status: 'success' });
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
perf.endMeasure(measureId, {
|
|
101
|
+
status: 'error',
|
|
102
|
+
error: error instanceof Error ? error.message : String(error),
|
|
103
|
+
});
|
|
104
|
+
// Error handling
|
|
105
|
+
// 错误处理
|
|
106
|
+
if (error instanceof index.IpcHandlerError) {
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
throw new index.IpcHandlerError(String(data.name), error);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
return handleAsync();
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Inject API (Dependencies)
|
|
116
|
+
* 注入 API (依赖)
|
|
117
|
+
* @param name - API Name (API 名称)
|
|
118
|
+
* @param api - API Instance (API 实例)
|
|
119
|
+
*/
|
|
120
|
+
addApi(name, api) {
|
|
121
|
+
this._api[name] = api;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Inject multiple APIs (Batch)
|
|
125
|
+
* 批量注入 API
|
|
126
|
+
* @param apis - Object containing API instances (包含 API 实例的对象)
|
|
127
|
+
*/
|
|
128
|
+
addApis(apis) {
|
|
129
|
+
Object.entries(apis).forEach(([name, api]) => {
|
|
130
|
+
this.addApi(name, api);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Dispose IpcRouter
|
|
135
|
+
* 释放 IpcRouter
|
|
136
|
+
*/
|
|
137
|
+
dispose() {
|
|
138
|
+
this.rateLimiter.stopCleanup();
|
|
139
|
+
this.rateLimiter.clear();
|
|
140
|
+
this.dispatcher.clear();
|
|
141
|
+
this._api = {};
|
|
142
|
+
}
|
|
143
|
+
}module.exports=IpcRouter;//# sourceMappingURL=IpcRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IpcRouter.js","sources":["../../../src/core/ipc/IpcRouter.ts"],"sourcesContent":["import IpcHandler from './IpcHandler';\nimport { IpcRequest, IpcSchema, IpcDefinition } from './ipc-router.type';\nimport { z } from 'zod';\nimport { MessageDispatcher } from '@/internal/utils/MessageDispatcher';\nimport { ILogger } from '@/infrastructure/logger';\nimport { IpcHandlerError } from '@/infrastructure/errors';\nimport { RateLimiter, RateLimitConfig } from '@/internal/utils/RateLimiter';\nimport { PerformanceMonitor } from '@/infrastructure/debug';\n\n// Define the schema for IpcRequest\n// 定义 IpcRequest 的 Schema\nconst IpcRequestSchema = z.object({\n name: z.string({ message: 'Handler name is required' }),\n payload: z.unknown().optional(),\n});\n\nexport default class IpcRouter<\n Api extends Record<string, any> = Record<string, any>,\n Schema extends IpcSchema = Record<string, IpcDefinition>,\n> {\n private _api: Api = {} as Api;\n private dispatcher: MessageDispatcher<Api>;\n private rateLimiter: RateLimiter;\n\n constructor(options: { logger?: ILogger; defaultRateLimit?: RateLimitConfig } = {}) {\n this.dispatcher = new MessageDispatcher('IpcRouter', options.logger);\n this.rateLimiter = new RateLimiter({\n logger: options.logger,\n defaultLimit: options.defaultRateLimit,\n });\n }\n\n /**\n * Add a single IPC handler\n * 添加单个IPC处理器\n * @param handler - IPC handler instance (IPC处理器实例)\n */\n addHandler<K extends keyof Schema>(\n handler: IpcHandler<Api, Schema[K]['payload'], Schema[K]['response']> & {\n name: K;\n }\n ): void {\n this.dispatcher.register(handler.name as string, handler.callback, handler.schema);\n }\n\n /**\n * Add multiple IPC handlers\n * 添加多个IPC处理器\n * @param handlers - Array of IPC handler instances (IPC处理器实例数组)\n */\n addHandlers(handlers: (IpcHandler<Api, any, any> & { name: keyof Schema })[]): void {\n handlers.forEach((handler) => this.addHandler(handler as any));\n }\n\n /**\n * Set rate limit for a specific handler\n * 为特定处理器设置限流\n * @param handlerName - Handler name (处理器名称)\n * @param config - Rate limit configuration (限流配置)\n */\n setRateLimit(handlerName: keyof Schema, config: RateLimitConfig): void {\n this.rateLimiter.setLimit(handlerName as string, config);\n }\n\n /**\n * Remove IPC handler by name\n * 移除指定名称的IPC处理器\n * @param name - Handler name (处理器名称)\n */\n removeHandler(name: string): void {\n this.dispatcher.unregister(name);\n }\n\n /**\n * Trigger callback of specified IPC handler\n * 触发指定名称的IPC处理器回调\n * @param data - Object containing handler name and data (包含处理器名称和数据的对象)\n * @param senderId - Optional sender ID (e.g. window ID) for rate limiting (可选的发送者 ID,用于限流)\n * @returns Return value of the callback function (回调函数的返回值)\n */\n handle<K extends keyof Schema>(\n data: IpcRequest<Schema[K]['payload']> & { name: K },\n senderId?: number | string\n ): Promise<Schema[K]['response']> {\n const perf = PerformanceMonitor.getInstance();\n const measureId = `ipc-${String(data.name)}-${Date.now()}`;\n\n const handleAsync = async (): Promise<Schema[K]['response']> => {\n try {\n perf.startMeasure(measureId, 'IPC Call', { handler: String(data.name), senderId });\n\n // 0. Rate Limiting Check\n // 0. 限流检查\n if (senderId !== undefined) {\n const rateLimitKey = `${senderId}:${String(data.name)}`;\n const allowed = this.rateLimiter.check(rateLimitKey, String(data.name));\n if (!allowed) {\n throw new IpcHandlerError(\n String(data.name),\n new Error(`Rate limit exceeded for handler \"${String(data.name)}\"`)\n );\n }\n }\n\n // Runtime validation using Zod (Envelope validation)\n // 使用 Zod 进行运行时校验 (信封校验)\n const validationResult = IpcRequestSchema.safeParse(data);\n\n if (!validationResult.success) {\n console.warn('[IpcRouter] Invalid IPC request data:', validationResult.error.format());\n throw new IpcHandlerError(\n 'validation',\n new Error(`Invalid IPC request: ${validationResult.error.message}`)\n );\n }\n\n // Payload validation if schema exists\n // 如果存在 Schema,则进行 Payload 校验\n const schema = this.dispatcher.getMetadata(data.name as string) as\n | z.ZodType<any>\n | undefined;\n if (schema) {\n const payloadResult = schema.safeParse(data.payload);\n if (!payloadResult.success) {\n console.warn(\n `[IpcRouter] Invalid payload for handler \"${String(data.name)}\":`,\n payloadResult.error.message\n );\n throw new IpcHandlerError(\n String(data.name),\n new Error(`Invalid payload: ${payloadResult.error.message}`)\n );\n }\n }\n\n // 1. Dependency Injection (inject this._api)\n // 1. 依赖注入 (注入 this._api)\n const context = { ...this._api };\n\n // 2. Dispatch\n // 2. 分发\n const result = await Promise.resolve(\n this.dispatcher.dispatch(data.name as string, context, data.payload)\n );\n\n perf.endMeasure(measureId, { status: 'success' });\n return result as Schema[K]['response'];\n } catch (error: any) {\n perf.endMeasure(measureId, {\n status: 'error',\n error: error instanceof Error ? error.message : String(error),\n });\n\n // Error handling\n // 错误处理\n if (error instanceof IpcHandlerError) {\n throw error;\n }\n throw new IpcHandlerError(String(data.name), error);\n }\n };\n\n return handleAsync();\n }\n\n /**\n * Inject API (Dependencies)\n * 注入 API (依赖)\n * @param name - API Name (API 名称)\n * @param api - API Instance (API 实例)\n */\n addApi(name: keyof Api, api: any): void {\n this._api[name] = api;\n }\n\n /**\n * Inject multiple APIs (Batch)\n * 批量注入 API\n * @param apis - Object containing API instances (包含 API 实例的对象)\n */\n addApis(apis: Partial<Api>): void {\n Object.entries(apis).forEach(([name, api]) => {\n this.addApi(name as keyof Api, api);\n });\n }\n\n /**\n * Dispose IpcRouter\n * 释放 IpcRouter\n */\n dispose(): void {\n this.rateLimiter.stopCleanup();\n this.rateLimiter.clear();\n this.dispatcher.clear();\n this._api = {} as Api;\n }\n}\n"],"names":["z","MessageDispatcher","RateLimiter","PerformanceMonitor","IpcHandlerError"],"mappings":"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"}
|