lodash-decorators
Version:
A collection of decorators using lodash at it's core.
79 lines (56 loc) • 2.37 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', {
value: true
});
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _lodashStringCapitalize = require('lodash/string/capitalize');
var _lodashStringCapitalize2 = _interopRequireDefault(_lodashStringCapitalize);
var _lodashObjectForOwn = require('lodash/object/forOwn');
var _lodashObjectForOwn2 = _interopRequireDefault(_lodashObjectForOwn);
var _lodashObjectAssign = require('lodash/object/assign');
var _lodashObjectAssign2 = _interopRequireDefault(_lodashObjectAssign);
var _lodashFunction = require('lodash/function');
var _lodashFunction2 = _interopRequireDefault(_lodashFunction);
var _bind = require('./bind');
var _bind2 = _interopRequireDefault(_bind);
var _tap = require('./tap');
var _tap2 = _interopRequireDefault(_tap);
var _decoratorFactory = require('./decoratorFactory');
var _Applicator = require('./Applicator');
var methods = {
instance: {
single: ['once'],
pre: ['debounce', 'throttle', 'memoize'],
post: ['after', 'before']
},
proto: {
single: ['spread', 'rearg', 'negate'],
pre: ['ary', 'curry', 'curryRight', 'restParam'],
partial: ['partial', 'partialRight'],
wrap: ['wrap'],
compose: ['compose', 'flow', 'flowRight', 'backflow'],
partialed: ['delay', 'defer']
}
};
var result = {};
(0, _lodashObjectForOwn2['default'])(methods, function (hash, createType) {
(0, _lodashObjectForOwn2['default'])(hash, function (list, type) {
result = list.reduce(function (res, fnName) {
res[fnName] = createType === 'instance' ? (0, _decoratorFactory.createInstanceDecorator)(_lodashFunction2['default'][fnName], _Applicator.applicators[type]) : (0, _decoratorFactory.createDecorator)(_lodashFunction2['default'][fnName], _Applicator.applicators[type]);
return res;
}, result);
});
});
// All other decorators
(0, _lodashObjectAssign2['default'])(result, {
bind: _bind2['default'],
tap: _tap2['default']
});
// Provide aliases @memoize => @Memoize
// This is for users who prefer capitalized decorators and
// can prevent naming collissions.
(0, _lodashObjectForOwn2['default'])(result, function (value, key) {
return result[(0, _lodashStringCapitalize2['default'])(key)] = value;
});
exports['default'] = result;
module.exports = exports['default'];