text: var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
  
  import React, { createElement } from 'react';
  import RouterContext from './RouterContext';
  import warning from './routerWarning';
  
  export default (function () {
    for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) {
      middlewares[_key] = arguments[_key];
    }
  
    if (process.env.NODE_ENV !== 'production') {
      middlewares.forEach(function (middleware, index) {
        process.env.NODE_ENV !== 'production' ? warning(middleware.renderRouterContext || middleware.renderRouteComponent, 'The middleware specified at index ' + index + ' does not appear to be ' + 'a valid React Router middleware.') : void 0;
      });
    }
  
    var withContext = middlewares.map(function (middleware) {
      return middleware.renderRouterContext;
    }).filter(Boolean);
    var withComponent = middlewares.map(function (middleware) {
      return middleware.renderRouteComponent;
    }).filter(Boolean);
  
    var makeCreateElement = function makeCreateElement() {
      var baseCreateElement = arguments.length <= 0 || arguments[0] === undefined ? createElement : arguments[0];
      return function (Component, props) {
        return withComponent.reduceRight(function (previous, renderRouteComponent) {
          return renderRouteComponent(previous, props);
        }, baseCreateElement(Component, props));
      };
    };
  
    return function (renderProps) {
      return withContext.reduceRight(function (previous, renderRouterContext) {
        return renderRouterContext(previous, renderProps);
      }, React.createElement(RouterContext, _extends({}, renderProps, {
        createElement: makeCreateElement(renderProps.createElement)
      })));
    };
  });