levelheaded
Version:
⚖️ Generate object containing functions deemed operational by level
51 lines (43 loc) • 1.85 kB
JavaScript
"use strict";
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
/**
* Default Levels
* @type {String[]}
*/
var DEFAULT_LEVELS = ['debug', 'verbose', 'info', 'warn', 'error', 'critical'];
/**
* Generate object containing functions deemed operational by level
* @param {String[]} [options.levels=DEFAULT_LEVELS]
* @param {Any} [options.minimal=options.levels[0]]
* @param {Function} [options.action=console.log]
* @param {Object} [options.object={}]
* @param {Function} [options.noop=()=>undefined]
* @return {Object}
*/
module.exports = function levelheaded() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$levels = _ref.levels,
levels = _ref$levels === void 0 ? DEFAULT_LEVELS : _ref$levels,
_ref$minimal = _ref.minimal,
minimal = _ref$minimal === void 0 ? levels[0] : _ref$minimal,
_ref$action = _ref.action,
action = _ref$action === void 0 ? console.log : _ref$action,
_ref$object = _ref.object,
object = _ref$object === void 0 ? {} : _ref$object,
_ref$noop = _ref.noop,
noop = _ref$noop === void 0 ? function noop() {} : _ref$noop;
var minimum = levels.indexOf(minimal);
var enough = function enough(level) {
return levels.indexOf(level) >= minimum;
};
return levels.reduce(function (instance, level) {
return Object.assign(instance, _defineProperty({}, level, enough(level) ? function () {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return action.apply({
level: level
}, args);
} : noop));
}, object);
};