# base-plugins

> Adds 'smart plugin' support to your base application.

Latest version **1.0.0** (published 2017-04-01) · MIT license · 0 weekly downloads

## Install

```sh
npm install base-plugins
pnpm add base-plugins
yarn add base-plugins
bun add base-plugins
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2017-04-01 |
| First published | 2015-10-07 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=0.10.0 |
| Dependencies | 4 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 22 |
| Author | Jon Schlinkert |
| Maintainers | doowb, jonschlinkert |
| Keywords | api, app, application, base, base-plugin, baseplugin, building-blocks, create, framework, plugin, plugins, tool, toolkit, tools |

## Links

- npm: https://www.npmjs.com/package/base-plugins
- Repository: https://github.com/node-base/base-plugins
- Issues: https://github.com/node-base/base-plugins/issues
- npm.io page: https://npm.io/package/base-plugins

## Dependencies (4)

- [isobject](https://npm.io/package/isobject.md) ^3.0.0
- [is-registered](https://npm.io/package/is-registered.md) ^0.1.5
- [define-property](https://npm.io/package/define-property.md) ^0.2.5
- [is-valid-instance](https://npm.io/package/is-valid-instance.md) ^0.3.0

## Alternatives

- [@sveltejs/kit](https://npm.io/package/@sveltejs/kit.md) — 2.2M weekly downloads
- [@atlaskit/theme](https://npm.io/package/@atlaskit/theme.md) — 402.0K weekly downloads
- [@tangle-network/brand](https://npm.io/package/@tangle-network/brand.md) — 10.0K weekly downloads
- [seneca](https://npm.io/package/seneca.md) — 7.4K weekly downloads
- [@bsb/base](https://npm.io/package/@bsb/base.md) — 7.2K weekly downloads

## Recent versions

- 1.0.0 (latest) — 2017-04-01
- 0.4.13 — 2016-06-03
- 0.4.12 — 2016-05-24
- 0.4.10 — 2016-03-25
- 0.4.6 — 2016-03-15
- 0.4.5 — 2016-03-11
- 0.4.4 — 2016-02-25
- 0.4.3 — 2016-02-19
- 0.4.1 — 2015-10-29
- 0.4.0 — 2015-10-29
- 0.3.1 — 2015-10-28
- 0.3.0 — 2015-10-24
- 0.2.1 — 2015-10-10
- 0.2.0 — 2015-10-10
- 0.1.1 — 2015-10-08
- … 1 more at https://npm.io/package/base-plugins/versions

## README

# base-plugins [![NPM version](https://img.shields.io/npm/v/base-plugins.svg?style=flat)](https://www.npmjs.com/package/base-plugins) [![NPM monthly downloads](https://img.shields.io/npm/dm/base-plugins.svg?style=flat)](https://npmjs.org/package/base-plugins)  [![NPM total downloads](https://img.shields.io/npm/dt/base-plugins.svg?style=flat)](https://npmjs.org/package/base-plugins) [![Linux Build Status](https://img.shields.io/travis/node-base/base-plugins.svg?style=flat&label=Travis)](https://travis-ci.org/node-base/base-plugins)

> Adds 'smart plugin' support to your base application.

## Install

Install with [npm](https://www.npmjs.com/):

```sh
$ npm install --save base-plugins
```

**What does this do?**

This plugin augments the generic plugin functionality that ships with [base](https://github.com/node-base/base).

* Without this plugin, any plugins that registered with the `use` method and are only called once upon init.
* With this plugin, other plugins that return a function will be pushed onto a `plugins` array, and can be called again later with the `run` method.

## Usage

```js
var plugins = require('base-plugins');
var Base = require('base');
var base = new Base();

// register the `plugins` plugin
base.use(plugins());
```

## Examples

### .use example

Once the `use` method is called:

1. a `fns` array is added to the instance for storing plugin functions
2. a `run` method is added to the instance for running stored plugins
3. the `use` method is modified so that anytime a function is returned by a plugin, the function will be pushed onto the `fns` array. Aside from that, you shouldn't see any difference in how the `use` method works.

## .run example

The `run` method iterates over the `fns` array and calls each stored plugin function on the given object.

```js
var collection = {};
base.use(function(app) {
  app.x = 'y';
  return function(obj) {
    obj.a = 'b';
  };
});
base.run(collection);

console.log(base.x);
//=> 'y'
console.log(collection.a);
//=> 'b'
```

## API

### [.use](index.js#L54)

Define a plugin function to be called immediately upon init. The only parameter exposed to the plugin is the application instance.

Also, if a plugin returns a function, the function will be pushed
onto the `fns` array, allowing the plugin to be called at a
later point, elsewhere in the application.

**Params**

* `fn` **{Function}**: plugin function to call
* `returns` **{Object}**: Returns the item instance for chaining.

**Example**

```js
// define a plugin
function foo(app) {
  // do stuff
}

// register plugins
var app = new Base()
  .use(foo)
  .use(bar)
  .use(baz)
```

### [.run](index.js#L69)

Run all plugins

**Params**

* `value` **{Object}**: Object to be modified by plugins.
* `returns` **{Object}**: Returns the item instance for chaining.

**Example**

```js
var config = {};
app.run(config);
```

## About

### Related projects

* [base-cli](https://www.npmjs.com/package/base-cli): Plugin for base-methods that maps built-in methods to CLI args (also supports methods from a… [more](https://github.com/node-base/base-cli) | [homepage](https://github.com/node-base/base-cli "Plugin for base-methods that maps built-in methods to CLI args (also supports methods from a few plugins, like 'base-store', 'base-options' and 'base-data'.")
* [base-config](https://www.npmjs.com/package/base-config): base-methods plugin that adds a `config` method for mapping declarative configuration values to other 'base… [more](https://github.com/node-base/base-config) | [homepage](https://github.com/node-base/base-config "base-methods plugin that adds a `config` method for mapping declarative configuration values to other 'base' methods or custom functions.")
* [base-data](https://www.npmjs.com/package/base-data): adds a `data` method to base-methods. | [homepage](https://github.com/node-base/base-data "adds a `data` method to base-methods.")
* [base-fs](https://www.npmjs.com/package/base-fs): base-methods plugin that adds vinyl-fs methods to your 'base' application for working with the file… [more](https://github.com/node-base/base-fs) | [homepage](https://github.com/node-base/base-fs "base-methods plugin that adds vinyl-fs methods to your 'base' application for working with the file system, like src, dest, copy and symlink.")
* [base-option](https://www.npmjs.com/package/base-option): Adds a few options methods to base, like `option`, `enable` and `disable`. See the readme… [more](https://github.com/node-base/base-option) | [homepage](https://github.com/node-base/base-option "Adds a few options methods to base, like `option`, `enable` and `disable`. See the readme for the full API.")
* [base](https://www.npmjs.com/package/base): Framework for rapidly creating high quality node.js applications, using plugins like building blocks | [homepage](https://github.com/node-base/base "Framework for rapidly creating high quality node.js applications, using plugins like building blocks")

### Contributing

Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).

### Building docs

_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_

To generate the readme, run the following command:

```sh
$ npm install -g verbose/verb#dev verb-generate-readme && verb
```

### Running tests

Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:

```sh
$ npm install && npm test
```

### Author

**Jon Schlinkert**

* [github/jonschlinkert](https://github.com/jonschlinkert)
* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)

### License

Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
Released under the [MIT License](LICENSE).

***

_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.3, on April 01, 2017._

---
_Source: https://npm.io/package/base-plugins · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
