27 lines
898 B
JavaScript
27 lines
898 B
JavaScript
|
"use strict";
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.default = buildMiddleware;
|
||
|
|
||
|
var _fp = _interopRequireDefault(require("lodash/fp"));
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
const MiddlewareFor = (type, mw) => api => next => action => {
|
||
|
if (type !== '*' && action.type !== type) return next(action);
|
||
|
return mw(api)(next)(action);
|
||
|
};
|
||
|
|
||
|
function buildMiddleware(effects = {}, actions = {}, subduxes = {}) {
|
||
|
return api => {
|
||
|
for (let type in actions) {
|
||
|
api.dispatch[type] = (...args) => api.dispatch(actions[type](...args));
|
||
|
}
|
||
|
|
||
|
return original_next => {
|
||
|
return [..._fp.default.toPairs(effects).map(([type, effect]) => MiddlewareFor(type, effect)), ..._fp.default.map('middleware', subduxes)].filter(x => x).reduceRight((next, mw) => mw(api)(next), original_next);
|
||
|
};
|
||
|
};
|
||
|
}
|