old_contents: import compose from './compose';
  
  /**
   * Creates a store enhancer that applies middleware to the dispatch method
   * of the Redux store. This is handy for a variety of tasks, such as expressing
   * asynchronous actions in a concise manner, or logging every action payload.
   *
   * See `redux-thunk` package as an example of the Redux middleware.
   *
   * Because middleware is potentially asynchronous, this should be the first
   * store enhancer in the composition chain.
   *
   * Note that each middleware will be given the `dispatch` and `getState` functions
   * as named arguments.
   *
   * @param {...Function} middlewares The middleware chain to be applied.
   * @returns {Function} A store enhancer applying the middleware.
   */
  export default function applyMiddleware(...middlewares) {
    return function applyGivenMiddleware(createStore) {
      middlewares = middlewares.slice();
      middlewares.reverse();
  
      return function createStoreWithMiddleware(reducer, initialState) {
        const store = createStore(reducer, initialState);
  
        let dispatch = store.dispatch;
        let middlewareAPI = {
          getState: store.getState,
          dispatch: (action) => dispatch(action)
        };
        middlewares.forEach(middleware =>
          dispatch = middleware(store)(dispatch)
        );
  
        return Object.assign({}, store, { dispatch });
      };
    }
  }
  
new_contents: import compose from './compose';
  
  /**
   * Creates a store enhancer that applies middleware to the dispatch method
   * of the Redux store. This is handy for a variety of tasks, such as expressing
   * asynchronous actions in a concise manner, or logging every action payload.
   *
   * See `redux-thunk` package as an example of the Redux middleware.
   *
   * Because middleware is potentially asynchronous, this should be the first
   * store enhancer in the composition chain.
   *
   * Note that each middleware will be given the `dispatch` and `getState` functions
   * as named arguments.
   *
   * @param {...Function} middlewares The middleware chain to be applied.
   * @returns {Function} A store enhancer applying the middleware.
   */
  export default function applyMiddleware(...middlewares) {
    return (next) => (reducer, initialState) => {
      var store = next(reducer, initialState);
      var dispatch = store.dispatch;
      var chain = [];
  
      var middlewareAPI = {
        getState: store.getState,
        dispatch: (action) => dispatch(action)
      };
      chain = middlewares.map(middleware => middleware(middlewareAPI));
      dispatch = compose(...chain, store.dispatch);
  
      return {
        ...store,
        dispatch
      };
    };
  }
  
subject: Fix accidental broken impl