3.0.2 • Published 3 years ago

pluggers v3.0.2

Weekly downloads
2
License
MIT
Repository
github
Last release
3 years ago

Pluggers

npm CircleCI Codecov

A convenient plugin manager library.

pluggers is designed to make modular projects easier to create. recursive-install is recommended for making plugins truly independent.

Warning: there are breaking changes for those who are upgrading from pre-v3 to v3.

Features & Plans

  • Synchronous or Asynchronous plugin loading
  • Flexible access between plugins
  • Priority-based load order (explicit or automatic)

Installation

Use the package manager npm to install pluggers.

npm install --save pluggers

Usage

./plugin1.js

// ./plugin1.js
const Plugger = require("pluggers").default;

const plugin = new Plugger("plugin1");

plugin.pluginCallbacks.init = () => {
  const test = "Hello World!";
  return test;
};

module.exports = plugin;

./plugin2.js

// ./plugin2.js
const Plugger = require("pluggers").default;

// Error will be thrown if the plugin is using a used name ("plugin1") when loaded
const plugin = new Plugger("plugin2");

// Error will be thrown if a plugin named "plugin1" is not loaded
plugin.requirePlugin({ name: "plugin1" });

plugin.pluginCallbacks.init = (plugins) => {
  const { plugin1 } = plugins;
  console.log(plugin1);
};

module.exports = plugin;

./master.js

// ./master.js
const Plugger = require("pluggers").default;

// Create instance
const master = new Plugger("master");

// Add plugins
master.addPlugin(require("./plugin1"));
master.addPlugin(require("./plugin2"));

master.initAll().then(() => {
  console.log("Complete!");
});

The above codes will print "Hello World!" and then "Complete!" if master.js is executed.

API

Check out this documentation page.

How Priorities Work

There are 3 types of priorities that can be used, in order of the load order:

  • Positive priority, which is from 0 to Infinity.\ Plugins with positive number priorities will be initialized with the order from the lowest number (0) to the highest number (Infinity).

  • Undefined priority\ Plugins with undefined priorities will be initialized after plugins with positive number priorities with the order of which plugin gets loaded with addPlugin() first.

  • Negative priority, which is from -Infinity to -1.\ Negative priorities work like how negative indexes work in Python (ex: a plugin with the priority of -1 will be initialized last, -2 will be initialized second last, etc). Plugins with negative priorities will be processed after plugins with positive number priorities and undefined priorities, with the order from the lowest number (-Infinity) to the highest number (-1), and will be initialized according to their respective priorities.

All types of priorities are stackable, for example:

...
loader.addPlugin(plugin1, { priority: 1 }); // this will be initialized first
loader.addPlugin(plugin2, { priority: 1 }); // this will be initialized after 'plugin1'. Note that its priority is the same as 'plugin1'

loader.initAll();

Because of their nature, plugins with negative priorities will be processed differently:

...
loader.addPlugin(plugin1, { priority: 1 }); // this will be initialized first
loader.addPlugin(plugin2, { priority: 1 });

loader.addPlugin(plugin3, { priority: -2 }) // this will be initialized after 'plugin1', before 'plugin2'
loader.addPlugin(plugin4, { priority: -1 }) // this will be initialized after 'plugin2'

loader.initAll(); // Load order: 'plugin1', 'plugin3', 'plugin2', 'plugin4'

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

License

MIT

2.3.0

3 years ago

2.3.1

3 years ago

3.0.2

3 years ago

3.0.1

3 years ago

3.0.0

3 years ago

2.2.1

4 years ago

2.2.0

4 years ago

2.2.3

4 years ago

2.2.2

4 years ago

2.2.4

4 years ago

2.2.1-0

4 years ago

2.2.0-0

4 years ago

2.2.0-1

4 years ago

2.1.4

4 years ago

2.1.3

4 years ago

2.1.2

4 years ago

2.1.1

4 years ago

2.0.3

4 years ago

2.0.2

4 years ago

2.1.0

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

1.2.0

4 years ago

1.0.2

4 years ago

1.1.0

4 years ago

1.0.1

4 years ago

1.2.2

4 years ago

1.3.0

4 years ago

1.2.1

4 years ago

1.0.3

4 years ago

0.3.0

4 years ago

0.3.2

4 years ago

0.3.1

4 years ago

0.2.2

6 years ago

0.2.1

6 years ago

0.2.0

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago

0.0.1

6 years ago