content: import React from 'react';
  import invariant from 'invariant';
  import { createRouteFromReactElement as _createRouteFromReactElement } from './RouteUtils';
  import { formatPattern } from './PatternUtils';
  import { falsy } from './InternalPropTypes';
  
  var _React$PropTypes = React.PropTypes;
  var string = _React$PropTypes.string;
  var object = _React$PropTypes.object;
  
  /**
   * A <Redirect> is used to declare another URL path a client should
   * be sent to when they request a given URL.
   *
   * Redirects are placed alongside routes in the route configuration
   * and are traversed in the same manner.
   */
  
  var Redirect = React.createClass({
    displayName: 'Redirect',
  
  
    statics: {
      createRouteFromReactElement: function createRouteFromReactElement(element) {
        var route = _createRouteFromReactElement(element);
  
        if (route.from) route.path = route.from;
  
        route.onEnter = function (nextState, replace) {
          var location = nextState.location;
          var params = nextState.params;
  
  
          var pathname = void 0;
          if (route.to.charAt(0) === '/') {
            pathname = formatPattern(route.to, params);
          } else if (!route.to) {
            pathname = location.pathname;
          } else {
            var routeIndex = nextState.routes.indexOf(route);
            var parentPattern = Redirect.getRoutePattern(nextState.routes, routeIndex - 1);
            var pattern = parentPattern.replace(/\/*$/, '/') + route.to;
            pathname = formatPattern(pattern, params);
          }
  
          replace({
            pathname: pathname,
            query: route.query || location.query,
            state: route.state || location.state
          });
        };
  
        return route;
      },
      getRoutePattern: function getRoutePattern(routes, routeIndex) {
        var parentPattern = '';
  
        for (var i = routeIndex; i >= 0; i--) {
          var route = routes[i];
          var pattern = route.path || '';
  
          parentPattern = pattern.replace(/\/*$/, '/') + parentPattern;
  
          if (pattern.indexOf('/') === 0) break;
        }
  
        return '/' + parentPattern;
      }
    },
  
    propTypes: {
      path: string,
      from: string, // Alias for path
      to: string.isRequired,
      query: object,
      state: object,
      onEnter: falsy,
      children: falsy
    },
  
    /* istanbul ignore next: sanity check */
    render: function render() {
      !false ? process.env.NODE_ENV !== 'production' ? invariant(false, '<Redirect> elements are for router configuration only and should not be rendered') : invariant(false) : void 0;
    }
  });
  
  export default Redirect;