plugin-anything v2.1.20
Inroduction
Make pluginable applications.
How does it work ?
Demo
// Custom Plugins
class CustomPluginA {
constructor(options) {
console.log('CustomPluginA options', options);
}
apply(customApp) {
customApp.hooks.hookA.tap('my plugin A', async (data) => {
console.log('CustomPluginA runs', data);
return 'a';
});
}
}
class CustomPluginB {
constructor(options) {
console.log('CustomPluginB options', options);
}
apply(customApp) {
customApp.hooks.hookB.tap('my plugin B', async (data) => {
console.log('CustomPluginB runs', data);
});
}
}
// Custom App
const { PluginAnything } = require('plugin-anything');
class CustomApp extends PluginAnything {
constructor() {
super();
// define hooks for plugin using
this.hooks = {
hookA: this.createHook(), // 'createHook' inherits from PluginAnything
hookB: this.createHook(), // 'createHook' inherits from PluginAnything
}
this.install({
plugins: [ CustomPluginA, CustomPluginB ],
})
(async () => {
// mock wait 2s
await new Promise(resolve => setTimeout(resolve, 2000))
await this.hooks.hookA.flush();
// mock wait 2s
await new Promise(resolve => setTimeout(resolve, 2000))
await this.hooks.hookB.flush();
})()
}
hooks = null;
}
new CustomApp();CustomPluginA options {}
CustomPluginB options {}
# wait 2s
CustomPluginA runs
# wait 2s
CustomPluginB runsAPIs
const pluginAnything = new PluginAnything(options: { [name: string]: any });Hook Handler: pluginAnything.createHook()
const hook = createHook();create a hook.
hook.tap(name: string, callback: Function | Promise<any>)Add callback at current hook event.
namecould be any string for event description.hook.untap(name?: string)Remove callback list whose name equals
name.When
nameis blank, clear callback list.hook.flush(type?: sync | waterfall | paralle, initData?: skip = false, paralleLimit = 3)Run all callbacks.
sync(default)run callbacks one next one.
waterfallrun callbacks one next none.
and previous returned value will be parameter of next callback.
parallerun all callbacks at the same time.
paralle-syncrun callbacks by sync sequences:
[ callback1, callback2, cakkback3 ] [ callback4, ... ] ...
hook.beforeFlush(callback)andhook.afterFlush(callback)regist callback before and after
flush.callback should be a
Functionwith return typeany | Promise<any>.example:
(async () => { hook.beforeFlush(async () => { console.log('before flush'); }); hook.afterFlush(async () => { console.log('after flush'); }); await hook.flush(); })(); // result log: before flush flushing... log: after flush
Plugins Handler: pluginAnything.install(initOptions: typeInitOptions): Array<{ [name: string]: any }>
interface typeInitOptions {
searchList?: Array<string>;
plugins?: Array<string | Function | object | Array<any>>;
presets?: Array<string | Array<any>>;
}Install plugins and return plugin list.
initOptions.searchList: Array< string >Absolute folder path list that will be used in searching plugins.
examples:
[ '/path_a/node_modules', '/path_b/node_modules' ]initOptions.plugins: Array< string | FunctionContructor | { apply(data?: any): any; [ name: string ]: any } | Array<string | FunctionContructor, object> >class MyPlugin { constructor(options) { this.options = options; }; options: {}; apply(pa) { } }
// config demo
plugins: {
'my-plugin-0',
[ 'my-plugin-1', { params: 1 } ],
[ MyPlugin, { params: 2 } ],
new MyPlugin({ params: 2 })
}
```LICENSE
MIT
3 years ago
3 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago