electron-infra-kit 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +302 -0
  3. package/README.zh-CN.md +308 -0
  4. package/dist/core/error/WindowError.d.ts +56 -0
  5. package/dist/core/error/WindowError.js +71 -0
  6. package/dist/core/error/WindowError.js.map +1 -0
  7. package/dist/core/error/WindowError.mjs +71 -0
  8. package/dist/core/error/WindowError.mjs.map +1 -0
  9. package/dist/core/ipc/IpcHandler.d.ts +48 -0
  10. package/dist/core/ipc/IpcHandler.js +59 -0
  11. package/dist/core/ipc/IpcHandler.js.map +1 -0
  12. package/dist/core/ipc/IpcHandler.mjs +59 -0
  13. package/dist/core/ipc/IpcHandler.mjs.map +1 -0
  14. package/dist/core/ipc/IpcRouter.d.ts +70 -0
  15. package/dist/core/ipc/IpcRouter.js +143 -0
  16. package/dist/core/ipc/IpcRouter.js.map +1 -0
  17. package/dist/core/ipc/IpcRouter.mjs +143 -0
  18. package/dist/core/ipc/IpcRouter.mjs.map +1 -0
  19. package/dist/core/ipc/index.d.ts +3 -0
  20. package/dist/core/ipc/index.js +1 -0
  21. package/dist/core/ipc/index.js.map +1 -0
  22. package/dist/core/ipc/index.mjs +1 -0
  23. package/dist/core/ipc/index.mjs.map +1 -0
  24. package/dist/core/ipc/ipc-router.type.d.ts +73 -0
  25. package/dist/core/ipc/transport/index.d.ts +65 -0
  26. package/dist/core/ipc/transport/index.js +229 -0
  27. package/dist/core/ipc/transport/index.js.map +1 -0
  28. package/dist/core/ipc/transport/index.mjs +229 -0
  29. package/dist/core/ipc/transport/index.mjs.map +1 -0
  30. package/dist/core/ipc/transport/ipc.type.d.ts +36 -0
  31. package/dist/core/lifecycle/LifecycleManager.d.ts +66 -0
  32. package/dist/core/lifecycle/LifecycleManager.js +140 -0
  33. package/dist/core/lifecycle/LifecycleManager.js.map +1 -0
  34. package/dist/core/lifecycle/LifecycleManager.mjs +140 -0
  35. package/dist/core/lifecycle/LifecycleManager.mjs.map +1 -0
  36. package/dist/core/message-bus/MessageBus.d.ts +282 -0
  37. package/dist/core/message-bus/MessageBus.js +677 -0
  38. package/dist/core/message-bus/MessageBus.js.map +1 -0
  39. package/dist/core/message-bus/MessageBus.mjs +677 -0
  40. package/dist/core/message-bus/MessageBus.mjs.map +1 -0
  41. package/dist/core/message-bus/MessageBusClient.d.ts +100 -0
  42. package/dist/core/message-bus/MessageBusClient.js +280 -0
  43. package/dist/core/message-bus/MessageBusClient.js.map +1 -0
  44. package/dist/core/message-bus/MessageBusClient.mjs +280 -0
  45. package/dist/core/message-bus/MessageBusClient.mjs.map +1 -0
  46. package/dist/core/message-bus/core/DataStoreManager.d.ts +51 -0
  47. package/dist/core/message-bus/core/DataStoreManager.js +94 -0
  48. package/dist/core/message-bus/core/DataStoreManager.js.map +1 -0
  49. package/dist/core/message-bus/core/DataStoreManager.mjs +94 -0
  50. package/dist/core/message-bus/core/DataStoreManager.mjs.map +1 -0
  51. package/dist/core/message-bus/core/ManagedPort.d.ts +26 -0
  52. package/dist/core/message-bus/core/ManagedPort.js +55 -0
  53. package/dist/core/message-bus/core/ManagedPort.js.map +1 -0
  54. package/dist/core/message-bus/core/ManagedPort.mjs +55 -0
  55. package/dist/core/message-bus/core/ManagedPort.mjs.map +1 -0
  56. package/dist/core/message-bus/core/PortManager.d.ts +47 -0
  57. package/dist/core/message-bus/core/PortManager.js +114 -0
  58. package/dist/core/message-bus/core/PortManager.js.map +1 -0
  59. package/dist/core/message-bus/core/PortManager.mjs +114 -0
  60. package/dist/core/message-bus/core/PortManager.mjs.map +1 -0
  61. package/dist/core/message-bus/core/SubscriptionManager.d.ts +36 -0
  62. package/dist/core/message-bus/core/SubscriptionManager.js +78 -0
  63. package/dist/core/message-bus/core/SubscriptionManager.js.map +1 -0
  64. package/dist/core/message-bus/core/SubscriptionManager.mjs +78 -0
  65. package/dist/core/message-bus/core/SubscriptionManager.mjs.map +1 -0
  66. package/dist/core/message-bus/core/TransactionManager.d.ts +54 -0
  67. package/dist/core/message-bus/core/TransactionManager.js +95 -0
  68. package/dist/core/message-bus/core/TransactionManager.js.map +1 -0
  69. package/dist/core/message-bus/core/TransactionManager.mjs +95 -0
  70. package/dist/core/message-bus/core/TransactionManager.mjs.map +1 -0
  71. package/dist/core/message-bus/core/index.d.ts +5 -0
  72. package/dist/core/message-bus/index.d.ts +4 -0
  73. package/dist/core/message-bus/index.js +1 -0
  74. package/dist/core/message-bus/index.js.map +1 -0
  75. package/dist/core/message-bus/index.mjs +1 -0
  76. package/dist/core/message-bus/index.mjs.map +1 -0
  77. package/dist/core/message-bus/message-bus.type.d.ts +143 -0
  78. package/dist/core/message-bus/message-bus.type.js +26 -0
  79. package/dist/core/message-bus/message-bus.type.js.map +1 -0
  80. package/dist/core/message-bus/message-bus.type.mjs +26 -0
  81. package/dist/core/message-bus/message-bus.type.mjs.map +1 -0
  82. package/dist/core/message-bus/preload.d.ts +16 -0
  83. package/dist/core/message-bus/preload.js +27 -0
  84. package/dist/core/message-bus/preload.js.map +1 -0
  85. package/dist/core/message-bus/preload.mjs +27 -0
  86. package/dist/core/message-bus/preload.mjs.map +1 -0
  87. package/dist/core/message-bus/transport/ITransport.d.ts +40 -0
  88. package/dist/core/message-bus/transport/IpcTransport.d.ts +18 -0
  89. package/dist/core/message-bus/transport/IpcTransport.js +60 -0
  90. package/dist/core/message-bus/transport/IpcTransport.js.map +1 -0
  91. package/dist/core/message-bus/transport/IpcTransport.mjs +60 -0
  92. package/dist/core/message-bus/transport/IpcTransport.mjs.map +1 -0
  93. package/dist/core/message-bus/transport/MessagePortTransport.d.ts +15 -0
  94. package/dist/core/message-bus/transport/MessagePortTransport.js +35 -0
  95. package/dist/core/message-bus/transport/MessagePortTransport.js.map +1 -0
  96. package/dist/core/message-bus/transport/MessagePortTransport.mjs +35 -0
  97. package/dist/core/message-bus/transport/MessagePortTransport.mjs.map +1 -0
  98. package/dist/core/message-bus/transport/index.d.ts +3 -0
  99. package/dist/core/window/IpcSetup.d.ts +50 -0
  100. package/dist/core/window/IpcSetup.js +96 -0
  101. package/dist/core/window/IpcSetup.js.map +1 -0
  102. package/dist/core/window/IpcSetup.mjs +96 -0
  103. package/dist/core/window/IpcSetup.mjs.map +1 -0
  104. package/dist/core/window/WindowCreator.d.ts +66 -0
  105. package/dist/core/window/WindowCreator.js +168 -0
  106. package/dist/core/window/WindowCreator.js.map +1 -0
  107. package/dist/core/window/WindowCreator.mjs +168 -0
  108. package/dist/core/window/WindowCreator.mjs.map +1 -0
  109. package/dist/core/window/WindowManager.d.ts +214 -0
  110. package/dist/core/window/WindowManager.js +583 -0
  111. package/dist/core/window/WindowManager.js.map +1 -0
  112. package/dist/core/window/WindowManager.mjs +583 -0
  113. package/dist/core/window/WindowManager.mjs.map +1 -0
  114. package/dist/core/window/WindowStore.d.ts +136 -0
  115. package/dist/core/window/WindowStore.js +436 -0
  116. package/dist/core/window/WindowStore.js.map +1 -0
  117. package/dist/core/window/WindowStore.mjs +436 -0
  118. package/dist/core/window/WindowStore.mjs.map +1 -0
  119. package/dist/core/window/constants.d.ts +17 -0
  120. package/dist/core/window/constants.js +15 -0
  121. package/dist/core/window/constants.js.map +1 -0
  122. package/dist/core/window/constants.mjs +15 -0
  123. package/dist/core/window/constants.mjs.map +1 -0
  124. package/dist/core/window/core/MetricsManager.d.ts +14 -0
  125. package/dist/core/window/core/MetricsManager.js +27 -0
  126. package/dist/core/window/core/MetricsManager.js.map +1 -0
  127. package/dist/core/window/core/MetricsManager.mjs +27 -0
  128. package/dist/core/window/core/MetricsManager.mjs.map +1 -0
  129. package/dist/core/window/core/PluginExecutor.d.ts +22 -0
  130. package/dist/core/window/core/PluginExecutor.js +110 -0
  131. package/dist/core/window/core/PluginExecutor.js.map +1 -0
  132. package/dist/core/window/core/PluginExecutor.mjs +110 -0
  133. package/dist/core/window/core/PluginExecutor.mjs.map +1 -0
  134. package/dist/core/window/core/WindowContextManager.d.ts +26 -0
  135. package/dist/core/window/core/WindowContextManager.js +59 -0
  136. package/dist/core/window/core/WindowContextManager.js.map +1 -0
  137. package/dist/core/window/core/WindowContextManager.mjs +59 -0
  138. package/dist/core/window/core/WindowContextManager.mjs.map +1 -0
  139. package/dist/core/window/core/WindowLifecycle.d.ts +15 -0
  140. package/dist/core/window/core/WindowLifecycle.js +150 -0
  141. package/dist/core/window/core/WindowLifecycle.js.map +1 -0
  142. package/dist/core/window/core/WindowLifecycle.mjs +150 -0
  143. package/dist/core/window/core/WindowLifecycle.mjs.map +1 -0
  144. package/dist/core/window/core/WindowOperator.d.ts +90 -0
  145. package/dist/core/window/core/WindowOperator.js +154 -0
  146. package/dist/core/window/core/WindowOperator.js.map +1 -0
  147. package/dist/core/window/core/WindowOperator.mjs +154 -0
  148. package/dist/core/window/core/WindowOperator.mjs.map +1 -0
  149. package/dist/core/window/core/WindowRegistry.d.ts +168 -0
  150. package/dist/core/window/core/WindowRegistry.js +331 -0
  151. package/dist/core/window/core/WindowRegistry.js.map +1 -0
  152. package/dist/core/window/core/WindowRegistry.mjs +331 -0
  153. package/dist/core/window/core/WindowRegistry.mjs.map +1 -0
  154. package/dist/core/window/core/WindowStateManager.d.ts +40 -0
  155. package/dist/core/window/core/WindowStateManager.js +110 -0
  156. package/dist/core/window/core/WindowStateManager.js.map +1 -0
  157. package/dist/core/window/core/WindowStateManager.mjs +110 -0
  158. package/dist/core/window/core/WindowStateManager.mjs.map +1 -0
  159. package/dist/core/window/index.d.ts +7 -0
  160. package/dist/core/window/index.js +1 -0
  161. package/dist/core/window/index.js.map +1 -0
  162. package/dist/core/window/index.mjs +1 -0
  163. package/dist/core/window/index.mjs.map +1 -0
  164. package/dist/core/window/window-manager.schema.d.ts +50 -0
  165. package/dist/core/window/window-manager.schema.js +87 -0
  166. package/dist/core/window/window-manager.schema.js.map +1 -0
  167. package/dist/core/window/window-manager.schema.mjs +87 -0
  168. package/dist/core/window/window-manager.schema.mjs.map +1 -0
  169. package/dist/core/window/window-manager.type.d.ts +365 -0
  170. package/dist/index.d.ts +25 -0
  171. package/dist/index.js +33 -0
  172. package/dist/index.js.map +1 -0
  173. package/dist/index.mjs +33 -0
  174. package/dist/index.mjs.map +1 -0
  175. package/dist/index.umd.js +1 -0
  176. package/dist/infrastructure/config/ConfigManager.d.ts +133 -0
  177. package/dist/infrastructure/config/ConfigManager.js +218 -0
  178. package/dist/infrastructure/config/ConfigManager.js.map +1 -0
  179. package/dist/infrastructure/config/ConfigManager.mjs +218 -0
  180. package/dist/infrastructure/config/ConfigManager.mjs.map +1 -0
  181. package/dist/infrastructure/config/index.d.ts +1 -0
  182. package/dist/infrastructure/debug/EnhancedDebugHelper.d.ts +106 -0
  183. package/dist/infrastructure/debug/EnhancedDebugHelper.js +218 -0
  184. package/dist/infrastructure/debug/EnhancedDebugHelper.js.map +1 -0
  185. package/dist/infrastructure/debug/EnhancedDebugHelper.mjs +218 -0
  186. package/dist/infrastructure/debug/EnhancedDebugHelper.mjs.map +1 -0
  187. package/dist/infrastructure/debug/PerformanceMonitor.d.ts +45 -0
  188. package/dist/infrastructure/debug/PerformanceMonitor.js +67 -0
  189. package/dist/infrastructure/debug/PerformanceMonitor.js.map +1 -0
  190. package/dist/infrastructure/debug/PerformanceMonitor.mjs +67 -0
  191. package/dist/infrastructure/debug/PerformanceMonitor.mjs.map +1 -0
  192. package/dist/infrastructure/debug/index.d.ts +22 -0
  193. package/dist/infrastructure/debug/index.js +47 -0
  194. package/dist/infrastructure/debug/index.js.map +1 -0
  195. package/dist/infrastructure/debug/index.mjs +47 -0
  196. package/dist/infrastructure/debug/index.mjs.map +1 -0
  197. package/dist/infrastructure/errors/ErrorCodes.d.ts +74 -0
  198. package/dist/infrastructure/errors/ErrorCodes.js +78 -0
  199. package/dist/infrastructure/errors/ErrorCodes.js.map +1 -0
  200. package/dist/infrastructure/errors/ErrorCodes.mjs +78 -0
  201. package/dist/infrastructure/errors/ErrorCodes.mjs.map +1 -0
  202. package/dist/infrastructure/errors/StandardError.d.ts +61 -0
  203. package/dist/infrastructure/errors/StandardError.js +84 -0
  204. package/dist/infrastructure/errors/StandardError.js.map +1 -0
  205. package/dist/infrastructure/errors/StandardError.mjs +84 -0
  206. package/dist/infrastructure/errors/StandardError.mjs.map +1 -0
  207. package/dist/infrastructure/errors/index.d.ts +13 -0
  208. package/dist/infrastructure/errors/index.js +24 -0
  209. package/dist/infrastructure/errors/index.js.map +1 -0
  210. package/dist/infrastructure/errors/index.mjs +24 -0
  211. package/dist/infrastructure/errors/index.mjs.map +1 -0
  212. package/dist/infrastructure/logger/ElectronLogger.d.ts +39 -0
  213. package/dist/infrastructure/logger/ElectronLogger.js +65 -0
  214. package/dist/infrastructure/logger/ElectronLogger.js.map +1 -0
  215. package/dist/infrastructure/logger/ElectronLogger.mjs +65 -0
  216. package/dist/infrastructure/logger/ElectronLogger.mjs.map +1 -0
  217. package/dist/infrastructure/logger/index.d.ts +2 -0
  218. package/dist/infrastructure/logger/logger.type.d.ts +8 -0
  219. package/dist/internal/types/BrandedTypes.d.ts +64 -0
  220. package/dist/internal/types/BrandedTypes.js +54 -0
  221. package/dist/internal/types/BrandedTypes.js.map +1 -0
  222. package/dist/internal/types/BrandedTypes.mjs +54 -0
  223. package/dist/internal/types/BrandedTypes.mjs.map +1 -0
  224. package/dist/internal/types/PerformanceOptions.d.ts +87 -0
  225. package/dist/internal/types/branded.d.ts +42 -0
  226. package/dist/internal/utils/MessageDispatcher.d.ts +67 -0
  227. package/dist/internal/utils/MessageDispatcher.js +96 -0
  228. package/dist/internal/utils/MessageDispatcher.js.map +1 -0
  229. package/dist/internal/utils/MessageDispatcher.mjs +96 -0
  230. package/dist/internal/utils/MessageDispatcher.mjs.map +1 -0
  231. package/dist/internal/utils/RateLimiter.d.ts +41 -0
  232. package/dist/internal/utils/RateLimiter.js +83 -0
  233. package/dist/internal/utils/RateLimiter.js.map +1 -0
  234. package/dist/internal/utils/RateLimiter.mjs +83 -0
  235. package/dist/internal/utils/RateLimiter.mjs.map +1 -0
  236. package/dist/internal/utils/StateKeeper.d.ts +125 -0
  237. package/dist/internal/utils/StateKeeper.js +334 -0
  238. package/dist/internal/utils/StateKeeper.js.map +1 -0
  239. package/dist/internal/utils/StateKeeper.mjs +334 -0
  240. package/dist/internal/utils/StateKeeper.mjs.map +1 -0
  241. package/dist/internal/utils/branded-helpers.d.ts +33 -0
  242. package/dist/internal/utils/index.d.ts +5 -0
  243. package/dist/preload/index.d.ts +45 -0
  244. package/dist/preload/index.js +91 -0
  245. package/dist/preload/index.js.map +1 -0
  246. package/dist/preload/index.mjs +91 -0
  247. package/dist/preload/index.mjs.map +1 -0
  248. package/dist/preload/preload.type.d.ts +15 -0
  249. package/dist/types.d.ts +7 -0
  250. package/dist/types.js +1 -0
  251. package/dist/types.js.map +1 -0
  252. package/dist/types.mjs +1 -0
  253. package/dist/types.mjs.map +1 -0
  254. package/package.json +143 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 chunhaofen
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,302 @@
1
+ # Electron Infra Kit
2
+
3
+ [![npm version](https://img.shields.io/npm/v/electron-infra-kit.svg)](https://www.npmjs.com/package/electron-infra-kit)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+
6
+ A comprehensive infrastructure kit for Electron applications, featuring a robust window manager with state persistence, inter-window communication, and full TypeScript support.
7
+
8
+ ## ✨ Features
9
+
10
+ - 🪟 **Window Manager** - Lifecycle management, state persistence, plugin system
11
+ - 🔌 **IPC Router** - Type-safe communication with dependency injection
12
+ - 🌉 **Message Bus** - Real-time state sync across windows via MessageChannel
13
+ - ⚙️ **Config Manager** - Persistent configuration with Zod validation
14
+ - 🐛 **Debug Tools** - Performance monitoring and development utilities
15
+ - 📋 **Type Safety** - Full TypeScript support with runtime validation
16
+
17
+ ## 📦 Installation
18
+
19
+ ```bash
20
+ npm install electron-infra-kit
21
+ # or
22
+ pnpm add electron-infra-kit
23
+ ```
24
+
25
+ **Requirements**: Electron >= 22.0.0, TypeScript >= 5.0.0, Node.js >= 18.0.0
26
+
27
+ ## 🚀 Quick Start
28
+
29
+ ```typescript
30
+ import { app } from 'electron';
31
+ import { createElectronToolkit } from 'electron-infra-kit';
32
+
33
+ app.whenReady().then(async () => {
34
+ // Initialize kit
35
+ const { windowManager, ipcRouter, messageBus } = createElectronToolkit({
36
+ isDevelopment: process.env.NODE_ENV === 'development',
37
+ });
38
+
39
+ // Wait for initialization
40
+ await windowManager.ready();
41
+
42
+ // Create window
43
+ await windowManager.create({
44
+ name: 'main',
45
+ title: 'My App',
46
+ width: 1024,
47
+ height: 768,
48
+ });
49
+ });
50
+ ```
51
+
52
+ **That's it!** You now have:
53
+
54
+ - ✅ Window management with state persistence
55
+ - ✅ Type-safe IPC communication
56
+ - ✅ Cross-window state synchronization
57
+ - ✅ Performance monitoring (in dev mode)
58
+
59
+ ## 📖 Documentation
60
+
61
+ ### Getting Started
62
+
63
+ - **[Quick Start Guide](./QUICKSTART.md)** - Get up and running in 5 minutes
64
+ - **[Complete Example](./guides/COOKBOOK.md)** - Full working example with all features
65
+
66
+ ### Core Concepts
67
+
68
+ - **[Window Manager](./guides/core/window/README.md)** - Window lifecycle and management
69
+ - **[IPC Router](./guides/core/ipc/README.md)** - Type-safe inter-process communication
70
+ - **[Message Bus](./guides/core/message-bus/README.md)** - State synchronization
71
+ - **[Lifecycle Manager](./guides/core/lifecycle/README.md)** - Application lifecycle
72
+
73
+ ### Advanced Topics
74
+
75
+ - **[Type Safety Guide](./guides/type-safety/TYPE_SAFETY.md)** - TypeScript best practices
76
+ - **[Performance Optimization](./guides/performance/PERFORMANCE.md)** - Tips and tricks
77
+ - **[Error Handling](./guides/infrastructure/errors/ERROR_HANDLING.md)** - Robust error management
78
+ - **[Debugging](./guides/infrastructure/debug/README.md)** - Development tools
79
+
80
+ ### API Reference
81
+
82
+ - **[Full API Documentation](./guides/README.md)** - Complete API reference
83
+ - **[Type Definitions](./src/types.ts)** - TypeScript types
84
+
85
+ ## 💡 Key Concepts
86
+
87
+ ### Window Manager
88
+
89
+ <details>
90
+ <summary><b>Architecture Diagram</b></summary>
91
+
92
+ ```
93
+ ┌───────────────────┐
94
+ │ WindowStore │
95
+ │ (Core Facade) │
96
+ └─────────┬─────────┘
97
+
98
+ ┌────────────────┬───────────────┼─────────────────┐
99
+ ▼ ▼ ▼ ▼
100
+ ┌────────────┐ ┌────────────┐ ┌──────────────┐ ┌──────────────┐
101
+ │ Registry │ │ Operator │ │ StateManager │ │ ContextMgr │
102
+ │ (Storage) │ │ (Actions) │ │ (Persistence)│ │ (Ctx Data) │
103
+ └────────────┘ └────────────┘ └──────────────┘ └──────────────┘
104
+
105
+
106
+ │ composes
107
+
108
+ ┌─────────┴─────────┐
109
+ │ WindowManager │
110
+ │ (High-Level API) │
111
+ └─────────┬─────────┘
112
+
113
+
114
+ ┌──────────────┐
115
+ │ Plugins │
116
+ │ & Lifecycle │
117
+ └──────────────┘
118
+ ```
119
+
120
+ </details>
121
+
122
+ ```typescript
123
+ // Create and manage windows
124
+ const windowId = await windowManager.create({
125
+ name: 'editor',
126
+ width: 800,
127
+ height: 600,
128
+ });
129
+
130
+ // Close window (new unified API)
131
+ windowManager.close(windowId);
132
+ ```
133
+
134
+ ### IPC Router
135
+
136
+ <details>
137
+ <summary><b>Architecture Diagram</b></summary>
138
+
139
+ ```
140
+ Renderer Process Main Process
141
+ ┌──────────────────────┐ ┌─────────────────────────────────────┐
142
+ │ │ │ │
143
+ │ ipcRenderer.invoke │─────────►│ ipcMain.handle('channel') │
144
+ │ (name, data) │ │ │ │
145
+ │ │ │ ▼ │
146
+ │ │ │ ┌─────────────┐ │
147
+ │ │ │ │ IpcRouter │ │
148
+ │ │ │ └─────────────┘ │
149
+ │ │ │ │ │
150
+ │ │ │ 1. Validate Request (Zod) │
151
+ │ │ │ 2. Find Handler by 'name' │
152
+ │ │ │ 3. Inject API (DI Container) │
153
+ │ │ │ │ │
154
+ │ │ │ ▼ │
155
+ │ │ │ ┌─────────────┐ │
156
+ │ │ │ │ IpcHandler │ │
157
+ │ │ │ │ (Business) │◄── APIs │
158
+ │ │ │ └─────────────┘ │
159
+ │ │ │ │ │
160
+ │ │ │ ▼ │
161
+ │ │ │ Return Result │
162
+ │ │ │ (Promise<Result>) │
163
+ │ │ │ │
164
+ └──────────────────────┘ └─────────────────────────────────────┘
165
+ ```
166
+
167
+ </details>
168
+
169
+ ```typescript
170
+ // Define type-safe handlers
171
+ const handler = new IpcHandler(
172
+ 'getUser',
173
+ 'user',
174
+ async (context, payload: { id: string }) => {
175
+ return { id: payload.id, name: 'User' };
176
+ },
177
+ z.object({ id: z.string() })
178
+ );
179
+
180
+ ipcRouter.addHandler(handler);
181
+ ```
182
+
183
+ ### Message Bus
184
+
185
+ <details>
186
+ <summary><b>Architecture Diagram</b></summary>
187
+
188
+ ```
189
+ Main Process Renderer Process
190
+ ┌─────────────────────────────┐ ┌──────────────────────┐
191
+ │ MessageBus │ │ Window A │
192
+ │ (Shared Instance) │ │ (MessagePort Client) │
193
+ │ │◄──IPC────┤ │
194
+ │ ┌───────────────────────┐ │ │ Local Cache │
195
+ │ │ DataStore (Map) │ │ └──────────▲───────────┘
196
+ │ │ - key: value │ │ │
197
+ │ │ - permission │ │ │
198
+ │ └──────────▲────────────┘ │ │
199
+ │ │ │ ┌──────────▼───────────┐
200
+ │ ┌──────────▼────────────┐ │ │ Window B │
201
+ │ │ MessageDispatcher │──┼─Broadcast│ (MessagePort Client) │
202
+ │ └──────────┬────────────┘ │─────────►│ │
203
+ │ │ │ │ Local Cache │
204
+ │ ┌──────────▼────────────┐ │ └──────────────────────┘
205
+ │ │ WindowPorts (Map) │ │
206
+ │ │ - winId: MessagePort │ │
207
+ │ └───────────────────────┘ │
208
+ └─────────────────────────────┘
209
+ ```
210
+
211
+ </details>
212
+
213
+ ```typescript
214
+ // Sync state across windows
215
+ messageBus.setData('theme', 'dark');
216
+
217
+ // Watch for changes (remember to unsubscribe!)
218
+ const unsubscribe = messageBus.watch('theme', (newValue) => {
219
+ console.log('Theme changed:', newValue);
220
+ });
221
+ ```
222
+
223
+ ## 🎯 Use Cases
224
+
225
+ - **Multi-window IDEs** - Code editors with multiple panels
226
+ - **Design Tools** - Apps with canvas, properties, and toolbars
227
+ - **Collaboration Apps** - Real-time state sync across windows
228
+ - **Enterprise Apps** - Large-scale applications with complex workflows
229
+
230
+ ## 🏗️ Architecture
231
+
232
+ ```
233
+ ┌─────────────────────────────────────────┐
234
+ │ LifecycleManager │
235
+ │ (Orchestrates everything) │
236
+ └─────────────────────────────────────────┘
237
+
238
+ ┌─────────────┼─────────────┐
239
+ ▼ ▼ ▼
240
+ ┌─────────┐ ┌─────────┐ ┌─────────┐
241
+ │ Window │◄─┤ IPC │◄─┤ Message │
242
+ │ Manager │ │ Router │ │ Bus │
243
+ └─────────┘ └─────────┘ └─────────┘
244
+ ```
245
+
246
+ **Design Principles**:
247
+
248
+ - 🎯 Separation of Concerns - Each module has a single responsibility
249
+ - 🔒 Type Safety First - Full TypeScript support with runtime validation
250
+ - ⚡ Performance Optimized - MessageChannel-based communication
251
+ - 🔌 Extensible - Plugin system for custom functionality
252
+ - 🛡️ Secure by Default - Context isolation and sandboxing
253
+
254
+ ## 📂 Directory Structure
255
+
256
+ ```
257
+ electron-infra-kit/
258
+ ├── src/ # Source code
259
+ │ ├── core/ # Core modules
260
+ │ │ ├── window/ # Window Manager
261
+ │ │ ├── ipc/ # IPC Router
262
+ │ │ ├── message-bus/ # Message Bus
263
+ │ │ └── lifecycle/ # Lifecycle Manager
264
+ │ ├── infrastructure/ # Infrastructure modules
265
+ │ │ ├── config/ # Configuration
266
+ │ │ ├── debug/ # Debugging tools
267
+ │ │ ├── errors/ # Error handling
268
+ │ │ └── logger/ # Logging
269
+ │ └── preload/ # Preload scripts
270
+ ├── examples/ # Example projects
271
+ └── guides/ # Documentation
272
+ ```
273
+
274
+ ## 🤝 Contributing
275
+
276
+ We welcome contributions! See [DEVELOPMENT.md](./DEVELOPMENT.md) for:
277
+
278
+ - Development setup
279
+ - Coding standards
280
+ - Commit conventions
281
+ - Release process
282
+
283
+ ## 📄 License
284
+
285
+ [MIT](./LICENSE) © [chunhaofen](https://github.com/chunhaofen)
286
+
287
+ ---
288
+
289
+ ## 🔗 Links
290
+
291
+ - **[GitHub Repository](https://github.com/chunhaofen/electron-infra-kit)**
292
+ - **[npm Package](https://www.npmjs.com/package/electron-infra-kit)**
293
+ - **[Issue Tracker](https://github.com/chunhaofen/electron-infra-kit/issues)**
294
+ - **[Changelog](./CHANGELOG.md)**
295
+
296
+ ## ⭐ Star History
297
+
298
+ If you find this project helpful, please consider giving it a star! ⭐
299
+
300
+ ---
301
+
302
+ **Made with ❤️ for the Electron community**
@@ -0,0 +1,308 @@
1
+ # Electron Infra Kit
2
+
3
+ [![npm version](https://img.shields.io/npm/v/electron-infra-kit.svg)](https://www.npmjs.com/package/electron-infra-kit)
4
+ [![npm downloads](https://img.shields.io/npm/dm/electron-infra-kit.svg)](https://www.npmjs.com/package/electron-infra-kit)
5
+ [![CI](https://github.com/chunhaofen/electron-infra-kit.git/actions/workflows/ci.yml/badge.svg)](https://github.com/chunhaofen/electron-infra-kit.git/actions/workflows/ci.yml)
6
+ [![License](https://img.shields.io/npm/l/electron-infra-kit.svg)](https://github.com/chunhaofen/electron-infra-kit.git/blob/main/LICENSE)
7
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.0-blue.svg)](https://www.typescriptlang.org/)
8
+
9
+ [English](./README.md) | 简体中文
10
+
11
+ 为 Electron 应用打造的综合基础设施工具包,提供窗口管理、IPC 路由和状态同步功能。
12
+
13
+ ## ✨ 特性
14
+
15
+ - 🪟 **窗口管理器** - 生命周期管理、状态持久化、插件系统
16
+ - 🔌 **IPC 路由** - 类型安全的通信,支持依赖注入
17
+ - 🌉 **消息总线** - 基于 MessageChannel 的跨窗口实时状态同步
18
+ - ⚙️ **配置管理器** - 持久化配置,支持 Zod 验证
19
+ - 🐛 **调试工具** - 性能监控和开发工具
20
+ - 📋 **类型安全** - 完整的 TypeScript 支持和运行时验证
21
+
22
+ ## 📦 安装
23
+
24
+ ```bash
25
+ npm install electron-infra-kit
26
+ # 或
27
+ pnpm add electron-infra-kit
28
+ ```
29
+
30
+ **依赖要求**: Electron >= 22.0.0, TypeScript >= 5.0.0, Node.js >= 18.0.0
31
+
32
+ ## 🚀 快速开始
33
+
34
+ ```typescript
35
+ import { app } from 'electron';
36
+ import { createElectronToolkit } from 'electron-infra-kit';
37
+
38
+ app.whenReady().then(async () => {
39
+ // 初始化工具包
40
+ const { windowManager, ipcRouter, messageBus } = createElectronToolkit({
41
+ isDevelopment: process.env.NODE_ENV === 'development',
42
+ });
43
+
44
+ // 等待初始化完成
45
+ await windowManager.ready();
46
+
47
+ // 创建窗口
48
+ await windowManager.create({
49
+ name: 'main',
50
+ title: '我的应用',
51
+ width: 1024,
52
+ height: 768,
53
+ });
54
+ });
55
+ ```
56
+
57
+ **就这么简单!** 你现在拥有:
58
+
59
+ - ✅ 带状态持久化的窗口管理
60
+ - ✅ 类型安全的 IPC 通信
61
+ - ✅ 跨窗口状态同步
62
+ - ✅ 性能监控(开发模式)
63
+
64
+ ## 📖 文档
65
+
66
+ ### 入门指南
67
+
68
+ - **[快速开始](./QUICKSTART.zh-CN.md)** - 5分钟快速上手
69
+ - **[完整示例](./guides/COOKBOOK.zh-CN.md)** - 包含所有功能的完整示例
70
+ - **[迁移指南](./IMPROVEMENTS.md)** - 从旧版本升级
71
+
72
+ ### 核心概念
73
+
74
+ - **[窗口管理器](./guides/core/window/README.zh-CN.md)** - 窗口生命周期和管理
75
+ - **[IPC 路由](./guides/core/ipc/README.zh-CN.md)** - 类型安全的进程间通信
76
+ - **[消息总线](./guides/core/message-bus/README.zh-CN.md)** - 状态同步
77
+ - **[生命周期管理器](./guides/core/lifecycle/README.zh-CN.md)** - 应用生命周期
78
+
79
+ ### 进阶主题
80
+
81
+ - **[类型安全指南](./guides/type-safety/TYPE_SAFETY.zh-CN.md)** - TypeScript 最佳实践
82
+ - **[性能优化](./guides/performance/PERFORMANCE.zh-CN.md)** - 技巧和窍门
83
+ - **[错误处理](./guides/infrastructure/errors/ERROR_HANDLING.zh-CN.md)** - 健壮的错误管理
84
+ - **[调试](./guides/infrastructure/debug/README.zh-CN.md)** - 开发工具
85
+
86
+ ### API 参考
87
+
88
+ - **[完整 API 文档](./guides/README.zh-CN.md)** - 完整的 API 参考
89
+ - **[类型定义](./src/types.ts)** - TypeScript 类型
90
+
91
+ ## 💡 核心概念
92
+
93
+ ### 窗口管理器
94
+
95
+ <details>
96
+ <summary><b>架构图</b></summary>
97
+
98
+ ```
99
+ ┌───────────────────┐
100
+ │ WindowStore │
101
+ │ (核心门面) │
102
+ └─────────┬─────────┘
103
+
104
+ ┌────────────────┬───────────────┼─────────────────┐
105
+ ▼ ▼ ▼ ▼
106
+ ┌────────────┐ ┌────────────┐ ┌──────────────┐ ┌──────────────┐
107
+ │ Registry │ │ Operator │ │ StateManager │ │ ContextMgr │
108
+ │ (存储) │ │ (操作) │ │ (持久化) │ │ (上下文数据) │
109
+ └────────────┘ └────────────┘ └──────────────┘ └──────────────┘
110
+
111
+
112
+ │ 组合
113
+
114
+ ┌─────────┴─────────┐
115
+ │ WindowManager │
116
+ │ (高级 API) │
117
+ └─────────┬─────────┘
118
+
119
+
120
+ ┌──────────────┐
121
+ │ Plugins │
122
+ │ & Lifecycle │
123
+ └──────────────┘
124
+ ```
125
+
126
+ </details>
127
+
128
+ ```typescript
129
+ // 创建和管理窗口
130
+ const windowId = await windowManager.create({
131
+ name: 'editor',
132
+ width: 800,
133
+ height: 600,
134
+ });
135
+
136
+ // 关闭窗口(新的统一 API)
137
+ windowManager.close(windowId);
138
+ ```
139
+
140
+ ### IPC 路由
141
+
142
+ <details>
143
+ <summary><b>架构图</b></summary>
144
+
145
+ ```
146
+ 渲染进程 (Renderer) 主进程 (Main)
147
+ ┌──────────────────────┐ ┌─────────────────────────────────────┐
148
+ │ │ │ │
149
+ │ ipcRenderer.invoke │─────────►│ ipcMain.handle('channel') │
150
+ │ (name, data) │ │ │ │
151
+ │ │ │ ▼ │
152
+ │ │ │ ┌─────────────┐ │
153
+ │ │ │ │ IpcRouter │ │
154
+ │ │ │ └─────────────┘ │
155
+ │ │ │ │ │
156
+ │ │ │ 1. 验证请求 (Zod) │
157
+ │ │ │ 2. 查找处理器 ('name') │
158
+ │ │ │ 3. 注入 API (DI 容器) │
159
+ │ │ │ │ │
160
+ │ │ │ ▼ │
161
+ │ │ │ ┌─────────────┐ │
162
+ │ │ │ │ IpcHandler │ │
163
+ │ │ │ │ (业务逻辑) │◄── APIs │
164
+ │ │ │ └─────────────┘ │
165
+ │ │ │ │ │
166
+ │ │ │ ▼ │
167
+ │ │ │ 返回结果 │
168
+ │ │ │ (Promise<Result>) │
169
+ │ │ │ │
170
+ └──────────────────────┘ └─────────────────────────────────────┘
171
+ ```
172
+
173
+ </details>
174
+
175
+ ```typescript
176
+ // 定义类型安全的处理器
177
+ const handler = new IpcHandler(
178
+ 'getUser',
179
+ 'user',
180
+ async (context, payload: { id: string }) => {
181
+ return { id: payload.id, name: '用户' };
182
+ },
183
+ z.object({ id: z.string() })
184
+ );
185
+
186
+ ipcRouter.addHandler(handler);
187
+ ```
188
+
189
+ ### 消息总线
190
+
191
+ <details>
192
+ <summary><b>架构图</b></summary>
193
+
194
+ ```
195
+ 主进程 (Main) 渲染进程 (Renderer)
196
+ ┌─────────────────────────────┐ ┌──────────────────────┐
197
+ │ MessageBus │ │ 窗口 A │
198
+ │ (共享实例) │ │ (MessagePort Client) │
199
+ │ │◄──IPC────┤ │
200
+ │ ┌───────────────────────┐ │ │ 本地缓存 │
201
+ │ │ DataStore (Map) │ │ └──────────▲───────────┘
202
+ │ │ - key: value │ │ │
203
+ │ │ - permission │ │ │
204
+ │ └──────────▲────────────┘ │ │
205
+ │ │ │ ┌──────────▼───────────┐
206
+ │ ┌──────────▼────────────┐ │ │ 窗口 B │
207
+ │ │ MessageDispatcher │──┼─广播─────│ (MessagePort Client) │
208
+ │ └──────────┬────────────┘ │─────────►│ │
209
+ │ │ │ │ 本地缓存 │
210
+ │ ┌──────────▼────────────┐ │ └──────────────────────┘
211
+ │ │ WindowPorts (Map) │ │
212
+ │ │ - winId: MessagePort │ │
213
+ │ └───────────────────────┘ │
214
+ └─────────────────────────────┘
215
+ ```
216
+
217
+ </details>
218
+
219
+ ```typescript
220
+ // 跨窗口同步状态
221
+ messageBus.setData('theme', 'dark');
222
+
223
+ // 监听变化(记得取消订阅!)
224
+ const unsubscribe = messageBus.watch('theme', (newValue) => {
225
+ console.log('主题变更:', newValue);
226
+ });
227
+ ```
228
+
229
+ ## 🎯 适用场景
230
+
231
+ - **多窗口 IDE** - 带有多个面板的代码编辑器
232
+ - **设计工具** - 包含画布、属性和工具栏的应用
233
+ - **协作应用** - 跨窗口实时状态同步
234
+ - **企业应用** - 具有复杂工作流的大型应用
235
+
236
+ ## 🏗️ 架构
237
+
238
+ ```
239
+ ┌─────────────────────────────────────────┐
240
+ │ LifecycleManager │
241
+ │ (编排所有模块) │
242
+ └─────────────────────────────────────────┘
243
+
244
+ ┌─────────────┼─────────────┐
245
+ ▼ ▼ ▼
246
+ ┌─────────┐ ┌─────────┐ ┌─────────┐
247
+ │ Window │◄─┤ IPC │◄─┤ Message │
248
+ │ Manager │ │ Router │ │ Bus │
249
+ └─────────┘ └─────────┘ └─────────┘
250
+ ```
251
+
252
+ **设计原则**:
253
+
254
+ - 🎯 关注点分离 - 每个模块都有单一职责
255
+ - 🔒 类型安全优先 - 完整的 TypeScript 支持和运行时验证
256
+ - ⚡ 性能优化 - 基于 MessageChannel 的通信
257
+ - 🔌 可扩展 - 插件系统支持自定义功能
258
+ - 🛡️ 默认安全 - 上下文隔离和沙箱机制
259
+
260
+ ## 📂 目录结构
261
+
262
+ ```
263
+ electron-infra-kit/
264
+ ├── src/ # 源代码
265
+ │ ├── core/ # 核心模块
266
+ │ │ ├── window/ # 窗口管理器
267
+ │ │ ├── ipc/ # IPC 路由
268
+ │ │ ├── message-bus/ # 消息总线
269
+ │ │ └── lifecycle/ # 生命周期管理器
270
+ │ ├── infrastructure/ # 基础设施模块
271
+ │ │ ├── config/ # 配置管理
272
+ │ │ ├── debug/ # 调试工具
273
+ │ │ ├── errors/ # 错误处理
274
+ │ │ └── logger/ # 日志记录
275
+ │ └── preload/ # 预加载脚本
276
+ ├── examples/ # 示例项目
277
+ └── guides/ # 文档指南
278
+ ```
279
+
280
+ ## 🤝 贡献
281
+
282
+ 欢迎提交贡献!请查看 [DEVELOPMENT.md](./DEVELOPMENT.md) 了解:
283
+
284
+ - 开发环境设置
285
+ - 代码规范
286
+ - 提交规范
287
+ - 发布流程
288
+
289
+ ## 📄 许可证
290
+
291
+ [MIT](./LICENSE) © [chunhaofen](https://github.com/chunhaofen)
292
+
293
+ ---
294
+
295
+ ## 🔗 链接
296
+
297
+ - **[GitHub 仓库](https://github.com/chunhaofen/electron-infra-kit)**
298
+ - **[npm 包](https://www.npmjs.com/package/electron-infra-kit)**
299
+ - **[问题追踪](https://github.com/chunhaofen/electron-infra-kit/issues)**
300
+ - **[更新日志](./CHANGELOG.md)**
301
+
302
+ ## ⭐ Star 历史
303
+
304
+ 如果这个项目对你有帮助,请考虑给它一个 star!⭐
305
+
306
+ ---
307
+
308
+ **用 ❤️ 为 Electron 社区打造**
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Window Error Codes
3
+ * 窗口错误代码
4
+ */
5
+ export declare enum WindowErrorCode {
6
+ CONFIG_INVALID = 1001,
7
+ CONFIG_MISSING = 1002,
8
+ WINDOW_NOT_FOUND = 2001,
9
+ WINDOW_CREATION_FAILED = 2002,
10
+ WINDOW_ALREADY_EXISTS = 2003,
11
+ WINDOW_LIMIT_REACHED = 2004,
12
+ WINDOW_DESTROYED = 2005,
13
+ IPC_CONNECTION_FAILED = 3001,
14
+ IPC_TIMEOUT = 3002,
15
+ IPC_HANDLER_ERROR = 3003,
16
+ INTERNAL_ERROR = 5001,
17
+ DEPENDENCY_MISSING = 5002
18
+ }
19
+ /**
20
+ * Window Error Options
21
+ * 窗口错误选项
22
+ */
23
+ export interface WindowErrorOptions {
24
+ code: WindowErrorCode;
25
+ message: string;
26
+ originalError?: Error | unknown;
27
+ details?: Record<string, any>;
28
+ suggestion?: string;
29
+ }
30
+ /**
31
+ * Window Error Class
32
+ * 窗口错误类
33
+ *
34
+ * Structured error handling for the WindowManager
35
+ * 为 WindowManager 提供结构化的错误处理
36
+ */
37
+ export declare class WindowError extends Error {
38
+ readonly code: WindowErrorCode;
39
+ readonly originalError?: Error | unknown;
40
+ readonly details?: Record<string, any>;
41
+ readonly suggestion?: string;
42
+ constructor(options: WindowErrorOptions);
43
+ /**
44
+ * Get error category based on code
45
+ * 根据错误代码获取错误类别
46
+ */
47
+ getErrorCategory(): 'configuration' | 'window' | 'ipc' | 'system' | 'unknown';
48
+ toJSON(): {
49
+ name: string;
50
+ message: string;
51
+ code: WindowErrorCode;
52
+ category: "ipc" | "window" | "unknown" | "configuration" | "system";
53
+ details: Record<string, any> | undefined;
54
+ suggestion: string | undefined;
55
+ };
56
+ }