60 lines
1.5 KiB
Markdown
60 lines
1.5 KiB
Markdown
# Plugin Host
|
|
|
|
A lightweight, event-driven plugin host system for Node.js applications.
|
|
|
|
## Features
|
|
|
|
- **Dynamic Plugin Loading**: Load plugins at runtime from a local directory
|
|
- **Plugin Registry**: Automatic fetching of available plugins from a remote directory
|
|
- **Hook System**: Plugins can register hooks for extensibility
|
|
- **Event System**: EventEmitter-based communication between host and plugins
|
|
- **Hot Reload**: Support for unloading and reloading plugins
|
|
- **Auto-Update**: Periodic registry updates from the plugin directory
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
## Usage
|
|
|
|
```javascript
|
|
import { PluginHost } from './src/PluginHost.js';
|
|
|
|
const host = new PluginHost({
|
|
directoryUrl: 'http://your-plugin-directory/plugins',
|
|
pluginsDir: './plugins',
|
|
autoUpdate: true,
|
|
updateInterval: 300000 // 5 minutes
|
|
});
|
|
|
|
await host.initialize();
|
|
await host.loadPlugins();
|
|
```
|
|
|
|
## Plugin Context API
|
|
|
|
Plugins receive a context object with the following API:
|
|
|
|
- `registerHook(hookName, callback)` - Register a hook
|
|
- `unregisterHook(hookName, callback)` - Unregister a hook
|
|
- `runHook(hookName, ...args)` - Execute a hook
|
|
- `getConfig(key)` - Get plugin configuration
|
|
- `log(...args)` - Log with plugin prefix
|
|
- `on(event, listener)` - Listen to host events
|
|
- `emit(event, ...args)` - Emit events
|
|
|
|
## Events
|
|
|
|
- `initialized` - Host initialized
|
|
- `registry-updated` - Plugin registry updated
|
|
- `plugin-loaded` - Plugin loaded
|
|
- `plugin-unloaded` - Plugin unloaded
|
|
- `plugin-error` - Plugin error occurred
|
|
- `shutdown` - Host shutting down
|
|
|
|
## License
|
|
|
|
MIT
|