function mapValues(obj, fn) { return Object.keys(obj).reduce((result, key) => { result[key] = fn(obj[key], key); return result; }, {});}
function pick(obj, fn) { return Object.keys(obj).reduce((result, key) => { if (fn(obj[key])) { result[key] = obj[key]; } return result; }, {});}
function bindActionCreator(actionCreator, dispatch) { return (...args) => dispatch(actionCreator(...args));}
export function bindActionCreators(actionCreators, dispatch) { return typeof actionCreators === 'function' ? bindActionCreator(actionCreators, dispatch) : mapValues(actionCreators, actionCreator => bindActionCreator(actionCreator, dispatch) );}
export function compose(...funcs) { return arg => funcs.reduceRight((composed, f) => f(composed), arg);}
export function applyMiddleware(...middlewares) { return (next) => (reducer, initialState) => { var store = next(reducer, initialState); var dispatch = store.dispatch; var chain = [];
chain = middlewares.map(middleware => middleware({ getState: store.getState, dispatch: (action) => dispatch(action) })); dispatch = compose(...chain)(store.dispatch);
return { ...store, dispatch }; };}
export function combineReducers(reducers) { var finalReducers = pick(reducers, (val) => typeof val === 'function'); return (state = {}, action) => mapValues(finalReducers, (reducer, key) => reducer(state[key], action) );}
export function createStore(reducer, initialState) { var currentReducer = reducer; var currentState = initialState; var listeners = []; var isDispatching = false;
function getState() { return currentState; }
function subscribe(listener) { listeners.push(listener);
return function unsubscribe() { var index = listeners.indexOf(listener); listeners.splice(index, 1); }; }
function dispatch(action) { if (isDispatching) { throw new Error('Reducers may not dispatch actions.'); }
try { isDispatching = true; currentState = currentReducer(currentState, action); } finally { isDispatching = false; }
listeners.slice().forEach(listener => listener()); return action; }
function (nextReducer) { currentReducer = nextReducer; dispatch({ type: '@@redux/INIT' }); }
dispatch({ type: '@@redux/INIT' });
return { dispatch, subscribe, getState, replaceReducer };}
123456789
101112131415161718192021222324252627282930313233343536373839404142434445464748
495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
Recommended