Easily create hooks and let users plug their own logic across your code to make it extensible by everyone with new features.
We encourage your to read the detailed tutorial on how to create a plugin architected with Plug and Play published by Adaltas.
Here is the documentation:
Library and application authors define hooks, see ./samples/simple-js/lib.js
:
const plugandplay = require("plug-and-play");
const plugins = plugandplay();
module.exports = {
// Create and export a new Plug and Play instance
plugins: plugins,
// Our core library function
print: function () {
// Wrap-up code
plugins.call({
// Identify this hook with a name
name: "hooks:print",
// Expose arguments to plugins authors
args: {
data: { message: "hello" },
},
// Default implementation
handler: ({ data }) => {
// Original library
console.log(data.message);
},
});
},
};
Users and pluging authors can now register their own hooks, see ./samples/simple-js/index.js
:
const mysuperlibrary = require("./lib");
mysuperlibrary.plugins.register({
hooks: {
"hooks:print": ({ data }, handler) => {
// Alter the argument
data.message = "Hello World";
// Print a message before the library code
console.log(">>>>>>>>>>>");
// Call the original handler
const result = handler.call(null, { data: data });
// Print a message after the library code
console.log("<<<<<<<<<<<");
return result;
},
},
});
mysuperlibrary.print();
While the original print
function was only printing Hello
to stdout, the introduction of this new plugin prints:
>>>>>>>>>>>
Hello world
<<<<<<<<<<<
./samples/simple-js/index.js
./samples/simple-ts/index.ts ping
./samples/advanced-ts/index.ts ping pong