Skip to content

Dependency injection with promise support for Node.js

License

Notifications You must be signed in to change notification settings

asd-xiv/pluginus

Repository files navigation

CircleCI npm version Coverage Status

pluginus

Dependency injection with promise support for Node.js.

Install

npm install @asd14/pluginus

Use

plugin-1.js

exports default {
  /**
   * Which plugins need loading before this one
   *
   * @type {string[]}
   */
  depend: [],

  /**
   * Name other plugins can use to reference and use this plugin
   *
   * @type {string}
   */
  name: "PluginOne",

  /**
   * Factory function, only runs once when ititialized. The value this function
   * returns or resolves to will be passed to other plugins depending on it.
   *
   * @param {any} ...dependentPlugins
   *
   * @returns {* | Promise<*>}
   */
  create: () => {
    return new Promise(resolve => {
      setTimeout(() => {
        resolve({
          foo: "bar",
        })
      }, 50)
    })
  },
}

plugin-2.js

export default {
  depend: ["PluginOne"],

  name: "Plugin2",

  create: PluginOne => ({
    lorem: `ipsum ${PluginOne.foo}`,
  }),
}

index.js

import { pluginus } from "@asd14/pluginus"

pluginus({
  source: ["path-to-plugin1", "path-to-plugin2"],
}).then(({ PluginOne, Plugin2 }) => {
  // PluginOne
  // => {
  //   foo: "bar",
  // }
  // Plugin2
  // => {
  //   lorem: "ipsum bar",
  // }
})

Develop

git clone [email protected]:asd-xiv/pluginus.git && \
  cd pluginus && \
  npm run setup

Run all *.test.js in src folder

npm test

Watch src and examples folder for changes and re-run tests

npm run tdd

Changelog

See the releases section for details.