Engine Core
This is the core library used to create a new plugin engine.
Use this library if you want to create a engine for a new environment.
If you want to create an engine for an existing envrionment, use the specific library. For example :
Tutorial
- Getting Started
- Plugin Communication
- Host a Plugin with UI
- External Plugins
- Plugin Service
API
API | Description |
---|
Engine | Register plugins & redirect messages |
Manager | Activate & Deactive plugins |
Connector
The plugin connector is the main component of @remixproject/engine
, it defines how an external plugin can connect to the engine. Checkout the documentation.
Getting started
npm install @remixproject/engine
The engine works a with two classes :
PluginManager
: manage activation/deactivationEngine
: manage registration & communication
import { PluginManager, Engine, Plugin } from '@remixproject/engine'
const manager = new PluginManager()
const engine = new Engine(manager)
const plugin = new Plugin({ name: 'plugin-name' })
await engine.onload()
engine.register(plugin)
manager.activatePlugin('plugin-name')
Registration
The registration make the plugin available for activation in the engine.
To register a plugin you need:
Profile
: The ID card of your plugin.Plugin
: A class that expose the logic of the plugin.
const profile = {
name: 'console',
methods: ['print']
}
class Console extends Plugin {
constructor() {
super(profile)
}
print(msg: string) {
console.log(msg)
}
}
const consolePlugin = new Console()
engine.register(consolePlugin)
In the future this part will be manage by a Marketplace
plugin.
Activation
The activation pocess is managed by the PluginManager
.
Actvating a plugin makes it visible by other plugins. Now they can communicate.
manager.activatePlugin('console')
The PluginManager
is a plugin itself.
Communication
Plugin
exposes a simple interface to communicate with each others :
call
: Call a method exposed by another plugin (This returns always a Promise).on
: Listen on event emitted by another plugin.emit
: Emit an event broadcasted to all listeners.
This code will call the method print
from the plugin console
with the parameter 'My message'
.
plugin.call('console', 'print', 'My message')
Full code example
import { PluginManager, Engine, Plugin } from '@remixproject/engine'
const profile = {
name: 'console',
methods: ['print']
}
class Console extends Plugin {
constructor() {
super(profile)
}
print(msg: string) {
console.log(msg)
}
}
const manager = new PluginManager()
const engine = new Engine(manager)
const emptyPlugin = new Plugin({ name: 'empty' })
const consolePlugin = new Console()
await engine.onload()
engine.register([plugin, consolePlugin])
manager.activatePlugin(['empty', 'console'])
emptyPlugin.call('console', 'print', 'My message')