@nteract/myths
Version:
A redux-observable framework for better locality of dependencies
36 lines • 1.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeConfigureStore = void 0;
const redux_1 = require("redux");
const redux_observable_1 = require("redux-observable");
const operators_1 = require("rxjs/operators");
exports.makeConfigureStore = () => (definition) => {
var _a, _b;
const reducers = definition.packages
.map(pkg => ({ [pkg.name]: pkg.rootReducer }))
.reduce(Object.assign, {});
const rootReducer = redux_1.combineReducers(Object.assign((_a = definition.reducers) !== null && _a !== void 0 ? _a : {}, {
__private__: redux_1.combineReducers(reducers),
}));
const epicMiddleware = redux_observable_1.createEpicMiddleware({
dependencies: (_b = definition.epicDependencies) !== null && _b !== void 0 ? _b : {},
});
const rootEpic = (action$, store$, dependencies) => {
var _a;
return redux_observable_1.combineEpics(...((_a = definition.epics) !== null && _a !== void 0 ? _a : []), ...definition.packages
.map(pkg => pkg.makeRootEpic()))(action$, store$, dependencies).pipe(operators_1.catchError((error, source) => {
console.error(error);
return source;
}));
};
return ((initialState) => {
var _a;
const baseEnhancer = redux_1.applyMiddleware(epicMiddleware, ...((_a = definition.epicMiddleware) !== null && _a !== void 0 ? _a : []));
const store = redux_1.createStore(rootReducer, initialState, definition.enhancer
? definition.enhancer(baseEnhancer)
: baseEnhancer);
epicMiddleware.run(rootEpic);
return store;
});
};
//# sourceMappingURL=store.js.map