code: function applyMiddleware() {
    for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) {
      middlewares[_key] = arguments[_key];
    }
  
    return function (createStore) {
      return function (reducer, preloadedState, enhancer) {
        var store = createStore(reducer, preloadedState, enhancer);
        var _dispatch = store.dispatch;
        var chain = [];
  
        var middlewareAPI = {
          getState: store.getState,
          dispatch: function dispatch(action) {
            return _dispatch(action);
          }
        };
        chain = middlewares.map(function (middleware) {
          return middleware(middlewareAPI);
        });
        _dispatch = _compose2.default.apply(undefined, chain)(store.dispatch);
  
        return _extends({}, store, {
          dispatch: _dispatch
        });
      };
    };
  }
docs: 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.