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
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
|
+
[](https://www.npmjs.com/package/electron-infra-kit)
|
|
4
|
+
[](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**
|
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
# Electron Infra Kit
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/electron-infra-kit)
|
|
4
|
+
[](https://www.npmjs.com/package/electron-infra-kit)
|
|
5
|
+
[](https://github.com/chunhaofen/electron-infra-kit.git/actions/workflows/ci.yml)
|
|
6
|
+
[](https://github.com/chunhaofen/electron-infra-kit.git/blob/main/LICENSE)
|
|
7
|
+
[](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
|
+
}
|