adaltas / node-plug-and-play

Easily create hooks and let users plug their own logic across your code to make it extensible by everyone with new features.
MIT License
54 stars 2 forks source link

Build Status

Node.js Plug-And-Play package

Easily create hooks and let users plug their own logic across your code to make it extensible by everyone with new features.

Main features

Learning

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:

Quick example

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
<<<<<<<<<<<

Available examples