import { combineReducers as combine, ReducersMapObject, AnyAction, } from "redux"; import invariant from "invariant"; export const combineReducers = (reducers: ReducersMapObject) => { const combinedReducer = combine(reducers); // TODO: define state type return (state: any, action: AnyAction) => { if ( action.type && !action.type.startsWith("@@") && action.type.split("/").length > 1 ) { const namespace = action.type.split("/")[0]; const reducer = reducers[namespace]; invariant(!!reducer, `reducer ${namespace} doesn't exist`); return reducer && reducer(state, action); } return combinedReducer(state, action); }; };