hookpoint
v4.1.0
Published
hooks system for custom plugins
Downloads
68,594
Readme
hookPoint
hooks system for custom plugins
Installation
npm install hookpoint
Hook types
Each hook triggers every added function in a loop.
SeriesHook. This hook simply calls every function added in a row.
LastOutHook. A bail hook allows exiting early. When any of the tapped function returns anything, the bail hook will stop executing the remaining ones.
Waterfall. A waterfall hook also calls each added function in a row. It passes a return value from each function to the next function.
All hooks allow exiting early. To exit early a method must be passed to the constructor for detecting this case.
Usage
All Hook constructors take one optional argument, which is a list of argument names as strings.
const hook = new SeriesHook<[string, number], boolean>();
The best practice is to expose all hooks of a class in a hooks
property:
class HttpFile {
constructor() {
this.hooks = {
parse: new SeriesHook<[String, ParseContext], ParseResult>(),
replaceVariables: new WaterfallHook<[string, ReplaceVariableContext], string>()
};
}
}
Other people can now use these hooks:
const httpFile = new HttpFile();
httpFile.hooks.parse.addHook("javascript", (text, context) => addExecuteAction(text));
It's required to pass a id to identify the plugin/reason.
Interception
All Hooks offer an additional interception API:
httpFile.hooks.parse.addInterceptor({
beforeLoop: async function checkUserCancellation(
hookContext: models.HookTriggerContext<[models.ProcessorContext], boolean>
) {
const context = hookContext.args[0];
if (context.progress?.isCanceled?.()) {
log.trace('process canceled by user');
return false;
}
return true;
},
})