chai-autoload-plugins
Version:
Automatically load chai plugins declared in package.json
58 lines (51 loc) • 2.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.loadPlugins = loadPlugins;
exports.loadPackagePlugins = loadPackagePlugins;
var _matcher = require('./matcher');
/**
* Load plugins from a list, including/excluding some based on a given configuration
* @param {string[]} plugins List of plugins
* @param {function(plugin:string): *} loadPlugin Function that loads a plugin
* @param {object} settings Settings
* @property {?(string|string[])} settings.include Regular expression, or array of names to include
* @property {?(string|string[])} settings.exclude Regular expression, or array of names to exclude
* (takes precence over `include`)
* @return {*[]} Values returned by `loadPlugin`
*/
function loadPlugins(plugins, loadPlugin, _ref) {
var include = _ref.include,
exclude = _ref.exclude;
return plugins.filter((0, _matcher.buildFilter)(include, exclude)).map(loadPlugin);
}
/**
* Load Chai plugins of a package
* @param {object} packageDefinition Content of `package.json`
* @property {string[]} devDependencies=[] List of all available plugins
* @property {?object} chaiAutoloadPlugins={} Settings
* @property {?(string|string[])} chaiAutoloadPlugins.include Regular expression, or array of names
* to include
* @property {?(string|string[])} chaiAutoloadPlugins.exclude Regular expression, or array of names
* to exclude (takes precence over
* `include`)
* @param {?function(name: string): object} _require=require CommonJS-like `require` method
* @param {?object} chai=_require('chai') Chai
*/
function loadPackagePlugins(packageDefinition) {
var _require = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : require;
var chai = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _require('chai');
var _packageDefinition$de = packageDefinition.devDependencies,
devDependencies = _packageDefinition$de === undefined ? [] : _packageDefinition$de,
_packageDefinition$ch = packageDefinition.chaiAutoloadPlugins,
config = _packageDefinition$ch === undefined ? {} : _packageDefinition$ch;
var plugins = Object.keys(devDependencies);
var loadPlugin = function loadPlugin(name) {
var plugin = _require(name);
if (typeof plugin === 'function') return chai.use(plugin);
return null;
};
var cfg = Object.assign({ include: '(^chai-|-chai$)', exclude: [] }, config);
return loadPlugins(plugins, loadPlugin, cfg);
}