javascript-decorators
Version:
70 lines (59 loc) • 1.99 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports._doesNotMutate = exports._immutable = undefined;
var _deepcopy = require('deepcopy');
var _deepcopy2 = _interopRequireDefault(_deepcopy);
var _deepEqual = require('deep-equal');
var _deepEqual2 = _interopRequireDefault(_deepEqual);
var _helpers = require('./helpers');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Base decorator function for immutability
*
* @method _basefunc
*
*
* @return { function } decorator function
*/
var _immutable = exports._immutable = function _immutable() {
return function (key, target, descriptor) {
var func = descriptor.value;
(0, _helpers.descriptorIsFunc)(key, func);
descriptor.value = function () {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var newArgs = args.reduce(function (previousval, currentval) {
previousval.push((0, _deepcopy2.default)(currentval));
return previousval;
}, []);
return func.apply(this, newArgs);
};
return descriptor;
};
}; /**
* Mutability related decorators
*
* @author Avraam Mavridis <avr.mav@gmail.com>
*
*/
var _doesNotMutate = exports._doesNotMutate = function _doesNotMutate() {
return function (key, target, descriptor) {
var func = descriptor.value;
(0, _helpers.descriptorIsFunc)(key, func);
descriptor.value = function () {
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
var tempArgs = (0, _deepcopy2.default)(args);
var returnValue = func.apply(this, args);
if (!(0, _deepEqual2.default)(args, tempArgs)) {
throw Error(target + ' mutates the passed values');
}
return returnValue;
};
return descriptor;
};
};
;