higher-order-reducers
Version:
A library of simple everyday reducer utility functions
34 lines (25 loc) • 987 B
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _isPlainObject = require('is-plain-object');
var _isPlainObject2 = _interopRequireDefault(_isPlainObject);
var _objectAssign = require('object-assign');
var _objectAssign2 = _interopRequireDefault(_objectAssign);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var merge = function merge(reducer) {
if (typeof reducer !== 'function') {
throw new Error('Argument supplied to `merge` is not a reducer');
}
return function (state, action) {
if (!(0, _isPlainObject2.default)(state)) {
throw new Error('`merge` only works with plain object states');
}
var nextState = reducer(state, action);
if (!(0, _isPlainObject2.default)(nextState)) {
throw new Error('The reducer in `merge` did not return a plain object');
}
return (0, _objectAssign2.default)({}, state, nextState);
};
};
exports.default = merge;