UNPKG

lodash-decorators

Version:

A collection of decorators using lodash at it's core.

101 lines (70 loc) 3.37 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); exports.createDecorator = createDecorator; exports.createInstanceDecorator = createInstanceDecorator; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _lodashObjectForOwn = require('lodash/object/forOwn'); var _lodashObjectForOwn2 = _interopRequireDefault(_lodashObjectForOwn); var _lodashLangIsFunction = require('lodash/lang/isFunction'); var _lodashLangIsFunction2 = _interopRequireDefault(_lodashLangIsFunction); var _lodashFunctionPartial = require('lodash/function/partial'); var _lodashFunctionPartial2 = _interopRequireDefault(_lodashFunctionPartial); var _utilsCompositeKeyWeakMap = require('./utils/CompositeKeyWeakMap'); var _utilsCompositeKeyWeakMap2 = _interopRequireDefault(_utilsCompositeKeyWeakMap); var _Applicator = require('./Applicator'); var _Applicator2 = _interopRequireDefault(_Applicator); var applicators = _Applicator2['default'].applicators; function createDecorator(method) { var applicator = arguments[1] === undefined ? applicators.pre : arguments[1]; return applicator === applicators.single ? wrapper() : wrapper; function wrapper() { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return function decorator(target, name, descriptor) { var value = descriptor.value; var get = descriptor.get; if (get) { descriptor.get = _Applicator2['default'].invoke.apply(_Applicator2['default'], [applicator, method, target, get].concat(args)); _Applicator2['default'].copyMetaData(get, descriptor.get); } else if (value) { descriptor.value = _Applicator2['default'].invoke.apply(_Applicator2['default'], [applicator, method, target, value].concat(args)); _Applicator2['default'].copyMetaData(value, descriptor.value); } return descriptor; }; }; } function createInstanceDecorator(method) { var applicator = arguments[1] === undefined ? applicators.pre : arguments[1]; var objectMap = new _utilsCompositeKeyWeakMap2['default'](); return applicator === applicators.single ? wrapper() : wrapper; function wrapper() { for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } return function decorator(target, name, descriptor) { var value = descriptor.value; var get = descriptor.get; var toWrap = get ? get : value; if (get) { descriptor.get = _Applicator2['default'].copyMetaData(toWrap, instanceDecoratorWrapper); } else { descriptor.value = _Applicator2['default'].copyMetaData(toWrap, instanceDecoratorWrapper); } return descriptor; function instanceDecoratorWrapper() { for (var _len3 = arguments.length, methodArgs = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { methodArgs[_key3] = arguments[_key3]; } if (!objectMap.has([this, toWrap])) { objectMap.set([this, toWrap], _Applicator2['default'].invoke.apply(_Applicator2['default'], [applicator, method, this, toWrap].concat(args))); } var fn = objectMap.get([this, toWrap]); return fn.apply(this, methodArgs); }; }; }; }