updux/dist/buildMiddleware/index.js
Yanick Champoux 057226dfd1 compile
2019-11-06 19:07:06 -05:00

37 lines
1.5 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fp_1 = __importDefault(require("lodash/fp"));
const MiddlewareFor = (type, mw) => api => next => action => {
if (type !== '*' && action.type !== type)
return next(action);
return mw(api)(next)(action);
};
function sliceMw(slice, mw) {
return (api) => {
const getSliceState = () => fp_1.default.get(slice, api.getState());
const getRootState = api.getRootState || api.getState;
return mw({ ...api, getState: getSliceState, getRootState });
};
}
function buildMiddleware(effects = {}, actions = {}, subduxes = {}) {
const subMiddlewares = fp_1.default.flow(fp_1.default.mapValues(fp_1.default.get('middleware')), fp_1.default.toPairs, fp_1.default.filter(x => x[1]), fp_1.default.map(([slice, mw]) => sliceMw(slice, mw)))(subduxes);
return (api) => {
for (let type in actions) {
const ac = actions[type];
api.dispatch[type] = (...args) => api.dispatch(ac(...args));
}
return (original_next) => {
return [
...fp_1.default.toPairs(effects).map(([type, effect]) => MiddlewareFor(type, effect)),
...subMiddlewares
]
.filter(x => x)
.reduceRight((next, mw) => mw(api)(next), original_next);
};
};
}
exports.default = buildMiddleware;
//# sourceMappingURL=index.js.map