UNPKG

javascript-decorators

Version:
70 lines (59 loc) 1.99 kB
'use strict'; 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; }; };