UNPKG

lodash-decorators

Version:

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

97 lines (74 loc) 2.93 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); exports['default'] = bindWrapper; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _lodashLangIsFunction = require('lodash/lang/isFunction'); var _lodashLangIsFunction2 = _interopRequireDefault(_lodashLangIsFunction); var _lodashFunctionBind = require('lodash/function/bind'); var _lodashFunctionBind2 = _interopRequireDefault(_lodashFunctionBind); var _Applicator = require('./Applicator'); var _Applicator2 = _interopRequireDefault(_Applicator); function bindWrapper() { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return function bindDecorator() { for (var _len2 = arguments.length, properties = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { properties[_key2] = arguments[_key2]; } return properties.length === 1 ? bindClass.apply(undefined, properties.concat(args)) : bindMethod.apply(undefined, properties.concat(args)); }; } ; function bindClass(target, name, descriptor) { for (var _len3 = arguments.length, args = Array(_len3 > 3 ? _len3 - 3 : 0), _key3 = 3; _key3 < _len3; _key3++) { args[_key3 - 3] = arguments[_key3]; } var keys = Reflect.ownKeys(target.prototype).forEach(function (key) { if (key !== 'constructor') { var _descriptor = Object.getOwnPropertyDescriptor(target.prototype, key); if ((0, _lodashLangIsFunction2['default'])(_descriptor.value) || (0, _lodashLangIsFunction2['default'])(_descriptor.get)) { Object.defineProperty(target.prototype, key, bindMethod(target, key, _descriptor)); } } }); } function bindMethod(target, name, descriptor) { for (var _len4 = arguments.length, args = Array(_len4 > 3 ? _len4 - 3 : 0), _key4 = 3; _key4 < _len4; _key4++) { args[_key4 - 3] = arguments[_key4]; } var value = descriptor.value; var _get = descriptor.get; var writable = descriptor.writable; return { configurable: true, // Allows the user to reassign the variable set: function set(value) { Object.defineProperty(this, name, { configurable: true, value: value, writable: writable }); }, get: function get() { var thisValue = value; if ((0, _lodashLangIsFunction2['default'])(_get)) { thisValue = _get.call(this); } var boundValue = thisValue; if ((0, _lodashLangIsFunction2['default'])(thisValue)) { boundValue = _lodashFunctionBind2['default'].apply(undefined, [thisValue, this].concat(args)); _Applicator2['default'].copyMetaData(thisValue, boundValue); } Object.defineProperty(this, name, { writable: writable, configurable: true, value: boundValue }); return boundValue; } }; } module.exports = exports['default'];