swyft-plugins
v1.0.8
Published
Plugin system for JavaScript projects
Downloads
23
Readme
Have you ever wanted to create a plugin system for your JS app? Well, now you can, easily.
Info
If you call onStart or onExit, it will execute those functions of all of the plugins at the same time. onInvoke is plugin specific and will only execute for the plugin you mention.
They all accept array of arguments, so you can pass data to the plugin. You can also return data from the plugin using invoke to the app (using generics).
You can call onStart, onExit and onInvoke whenever you want. init calls upon itself on the start of the app.
Install
npm i swyft-plugins
Usage
Create plugins.ts
file:
import { PluginManager } from 'swyft-plugins';
const pluginManager = new PluginManager();
// DO NOT MODIFY ANYTHING ABOVE THIS LINE
// ADD YOUR PLUGINS BELOW THIS LINE
pluginManager.registerPlugin(require('./plugins/samplePlugin'));
// DO NOT MODIFY ANYTHING BELOW THIS LINE
pluginManager.initializePlugins();
export default pluginManager;
Create plugins/samplePlugin.ts
:
import { Plugin } from "swyft-plugins";
const samplePlugin: Plugin = {
name: "samplePlugin",
init() {
console.log("SamplePlugin: Initialized.");
},
onStart() {
console.log("SamplePlugin: App has started.");
},
onExit() {
console.log("SamplePlugin: App is exiting.");
},
async onInvoke<T>(...e: any[]): Promise<T> {
console.log("SamplePlugin: Invoked.");
return Promise.resolve("hi" as unknown as T)
},
};
export = { ...samplePlugin };
Call it in your app:
import pluginManager from './plugins';
// DO NOT MODIFY ANYTHING ABOVE THIS LINE
console.log('This is the main application.');
const callMe = async () => {
const test = await pluginManager.invoke("samplePlugin");
console.log(test)
};
callMe();
Changelog
Made invoke asynchronous, as well as created an optional generic type for it, so you can explicitly define your return types.