base

base is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting with a handful of common methods, like <code>set</code>, <code>get</code>, <code>del</code> and <code>use</code>.

base

base is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting with a handful of common methods, like set, get, del and use.

(TOC generated by verb using markdown-toc)

Install with npm:

$ npm i base --save
var base = require('base');

inherit

function App() {
  base.call(this);
}
base.extend(App);
 
var app = new App();
app.set('a', 'b');
app.get('a');
//=> 'b'; 

instantiate

var app = base();
app.set('foo', 'bar');
console.log(app.foo);
//=> 'bar' 

Inherit or instantiate with a namespace

A .namespace() method is exposed on the exported function to allow you to create a custom namespace for setting/getting on the instance.

var Base = require('base')
var base = Base.namespace('cache');
 
var app = base();
app.set('foo', 'bar');
console.log(app.cache.foo);
//=> 'bar' 

All of the methods from cache-base are exposed on the base API, as well as the following methods.

Base

Create an instance of Base with options.

Params

  • options {Object}

Example

var app = new Base();
app.set('foo', 'bar');
console.log(app.get('foo'));
//=> 'bar' 

.is

Set the given name on app._name and app.is* properties. Used for doing lookups in plugins.

Params

  • name {String}
  • returns {Boolean}

Example

app.is('foo');
console.log(app._name);
//=> 'foo' 
console.log(app.isFoo);
//=> true 
app.is('bar');
console.log(app.isFoo);
//=> true 
console.log(app.isBar);
//=> true 
console.log(app._name);
//=> 'bar' 

.isRegistered

Returns true if a plugin has already been registered on an instance.

Plugin implementors are encouraged to use this first thing in a plugin to prevent the plugin from being called more than once on the same instance.

Params

  • name {String}: The plugin name.
  • register {Boolean}: If the plugin if not already registered, to record it as being registered pass true as the second argument.
  • returns {Boolean}: Returns true if a plugin is already registered.

Events

  • emits: plugin Emits the name of the plugin.

Example

var base = new Base();
base.use(function(app) {
  if (app.isRegistered('myPlugin')) return;
  // do stuff to `app` 
});
 
// to also record the plugin as being registered 
base.use(function(app) {
  if (app.isRegistered('myPlugin', true)) return;
  // do stuff to `app` 
});

.use

Define a plugin function to be called immediately upon init. Plugins are chainable and the only parameter exposed to the plugin is the application instance.

Params

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

Events

  • emits: use with no arguments.

Example

var app = new Base()
  .use(foo)
  .use(bar)
  .use(baz)

.lazy

Lazily invoke a registered plugin. Note that this method can only be used with:

  1. plugins that add a single method or property to app
  2. plugins that do not (themselves) add a getter/setter property (they're already lazy)
  3. plugins that do not return a function

Params

  • prop {String}: The name of the property or method added by the plugin.
  • fn {Function}: The plugin function
  • options {Object}: Options to use when the plugin is invoked.
  • returns {Object}: Returns the instance for chaining

Example

app.lazy('store', require('base-store'));

.define

Define a non-enumerable property on the instance. Dot-notation is not supported with define.

Params

  • key {String}: The name of the property to define.
  • value {any}
  • returns {Object}: Returns the instance for chaining.

Events

  • emits: define with key and value as arguments.

Example

// arbitrary `render` function using lodash `template` 
define('render', function(strlocals) {
  return _.template(str)(locals);
});

.mixin

Mix property key onto the Base prototype. If base-methods is inherited using Base.extend this method will be overridden by a new mixin method that will only add properties to the prototype of the inheriting application.

Params

  • key {String}
  • val {Object|Array}
  • returns {Object}: Returns the instance for chaining.

.use

Static method for adding global plugin functions that will be added to an instance when created.

Params

  • fn {Function}: Plugin function to use on each instance.

Example

Base.use(function(app) {
  app.foo = 'bar';
});
var app = new Base();
console.log(app.foo);
//=> 'bar' 

.extend

Static method for inheriting both the prototype and static methods of the Base class. See [class-utils][] for more details.

.Base.mixin

Static method for adding mixins to the prototype. When a function is returned from the mixin plugin, it will be added to an array so it can be used on inheriting classes via Base.mixins(Child).

Params

  • fn {Function}: Function to call

Example

Base.mixin(function fn(proto) {
  proto.foo = function(msg) {
    return 'foo ' + msg;
  };
  return fn;
});

.Base.mixins

Static method for running currently saved global mixin functions against a child constructor.

Params

  • Child {Function}: Constructor function of a child class

Example

Base.extend(Child);
Base.mixins(Child);

.inherit

Similar to util.inherit, but copies all static properties, prototype properties, and descriptors from Provider to Receiver. [class-utils] for more details.

Statements   : 100% ( 85/85 )
Branches     : 100% ( 22/22 )
Functions    : 100% ( 19/19 )
Lines        : 100% ( 84/84 )

There are a number of different plugins available for extending base. Let us know if you create your own!

  • base-argv: Plugin that post-processes the argv object from simplify how args are mapped to options, tasks… more | homepage
  • base-cli: Plugin for base-methods that maps built-in methods to CLI args (also supports methods from a… more | homepage
  • base-config: base-methods plugin that adds a config method for mapping declarative configuration values to other 'base'… more | homepage
  • base-cwd: Base plugin that adds a getter/setter for the current working directory. | homepage
  • base-data: adds a data method to base-methods. | homepage
  • base-fs: base-methods plugin that adds vinyl-fs methods to your 'base' application for working with the file… more | homepage
  • base-fs-rename: Plugin for 'base' applications that adds a rename method that can be passed to app.dest()more | homepage
  • base-generators: Adds project-generator support to your base application. | homepage
  • base-list: base-runner plugin that prompts the user to choose from a list of registered applications and… more | homepage
  • base-option: Adds a few options methods to base, like option, enable and disable. See the readme… more | homepage
  • base-pipeline: base-methods plugin that adds pipeline and plugin methods for dynamically composing streaming plugin pipelines. | homepage
  • base-pkg: Base plugin for adding a pkg object with get/set methods for getting data from package.json… more | homepage
  • base-plugins: Upgrade's plugin support in base-methods to allow plugins to be called any time after init. | homepage
  • base-project: Base plugin that adds a project getter to the instance, for getting the name of… more | homepage
  • base-questions: Plugin for base-methods that adds methods for prompting the user and storing the answers on… more | homepage
  • base-runner: Orchestrate multiple instances of base-methods at once. | homepage
  • base-store: Plugin for getting and persisting config values with your base-methods application. Adds a 'store' object… more | homepage
  • base-task: base plugin that provides a very thin wrapper around https://github.com/doowb/composer for adding task methods to… more | homepage
  • base-tree: Add a tree method to generate a hierarchical tree structure representing nested applications and child… more | homepage

Install dev dependencies:

$ npm i -d && npm test

Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.

Jon Schlinkert

Copyright © 2016 Jon Schlinkert

Released under the MIT license.


This file was generated by verb on February 11, 2016.