react-router 5.2.0 → 5.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"react-router.min.js","sources":["../modules/createNameContext.js","../modules/HistoryContext.js","../modules/RouterContext.js","../modules/Router.js","../modules/MemoryRouter.js","../modules/Lifecycle.js","../modules/Prompt.js","../modules/generatePath.js","../modules/Redirect.js","../modules/matchPath.js","../modules/Route.js","../modules/StaticRouter.js","../modules/Switch.js","../modules/withRouter.js","../modules/hooks.js"],"sourcesContent":["// TODO: Replace with React.createContext once we can assume React 16+\nimport createContext from \"mini-create-react-context\";\n\nconst createNamedContext = name => {\n const context = createContext();\n context.displayName = name;\n\n return context;\n};\n\nexport default createNamedContext;\n","import createNamedContext from \"./createNameContext\";\n\nconst historyContext = /*#__PURE__*/ createNamedContext(\"Router-History\");\nexport default historyContext;\n","// TODO: Replace with React.createContext once we can assume React 16+\nimport createContext from \"mini-create-react-context\";\n\nconst createNamedContext = name => {\n const context = createContext();\n context.displayName = name;\n\n return context;\n};\n\nconst context = /*#__PURE__*/ createNamedContext(\"Router\");\nexport default context;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport warning from \"tiny-warning\";\n\nimport HistoryContext from \"./HistoryContext.js\";\nimport RouterContext from \"./RouterContext.js\";\n\n/**\n * The public API for putting history on context.\n */\nclass Router extends React.Component {\n static computeRootMatch(pathname) {\n return { path: \"/\", url: \"/\", params: {}, isExact: pathname === \"/\" };\n }\n\n constructor(props) {\n super(props);\n\n this.state = {\n location: props.history.location\n };\n\n // This is a bit of a hack. We have to start listening for location\n // changes here in the constructor in case there are any <Redirect>s\n // on the initial render. If there are, they will replace/push when\n // they mount and since cDM fires in children before parents, we may\n // get a new location before the <Router> is mounted.\n this._isMounted = false;\n this._pendingLocation = null;\n\n if (!props.staticContext) {\n this.unlisten = props.history.listen(location => {\n if (this._isMounted) {\n this.setState({ location });\n } else {\n this._pendingLocation = location;\n }\n });\n }\n }\n\n componentDidMount() {\n this._isMounted = true;\n\n if (this._pendingLocation) {\n this.setState({ location: this._pendingLocation });\n }\n }\n\n componentWillUnmount() {\n if (this.unlisten) this.unlisten();\n }\n\n render() {\n return (\n <RouterContext.Provider\n value={{\n history: this.props.history,\n location: this.state.location,\n match: Router.computeRootMatch(this.state.location.pathname),\n staticContext: this.props.staticContext\n }}\n >\n <HistoryContext.Provider\n children={this.props.children || null}\n value={this.props.history}\n />\n </RouterContext.Provider>\n );\n }\n}\n\nif (__DEV__) {\n Router.propTypes = {\n children: PropTypes.node,\n history: PropTypes.object.isRequired,\n staticContext: PropTypes.object\n };\n\n Router.prototype.componentDidUpdate = function(prevProps) {\n warning(\n prevProps.history === this.props.history,\n \"You cannot change <Router history>\"\n );\n };\n}\n\nexport default Router;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createMemoryHistory as createHistory } from \"history\";\nimport warning from \"tiny-warning\";\n\nimport Router from \"./Router.js\";\n\n/**\n * The public API for a <Router> that stores location in memory.\n */\nclass MemoryRouter extends React.Component {\n history = createHistory(this.props);\n\n render() {\n return <Router history={this.history} children={this.props.children} />;\n }\n}\n\nif (__DEV__) {\n MemoryRouter.propTypes = {\n initialEntries: PropTypes.array,\n initialIndex: PropTypes.number,\n getUserConfirmation: PropTypes.func,\n keyLength: PropTypes.number,\n children: PropTypes.node\n };\n\n MemoryRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \"<MemoryRouter> ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { MemoryRouter as Router }`.\"\n );\n };\n}\n\nexport default MemoryRouter;\n","import React from \"react\";\n\nclass Lifecycle extends React.Component {\n componentDidMount() {\n if (this.props.onMount) this.props.onMount.call(this, this);\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.onUpdate) this.props.onUpdate.call(this, this, prevProps);\n }\n\n componentWillUnmount() {\n if (this.props.onUnmount) this.props.onUnmount.call(this, this);\n }\n\n render() {\n return null;\n }\n}\n\nexport default Lifecycle;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\n\nimport Lifecycle from \"./Lifecycle.js\";\nimport RouterContext from \"./RouterContext.js\";\n\n/**\n * The public API for prompting the user before navigating away from a screen.\n */\nfunction Prompt({ message, when = true }) {\n return (\n <RouterContext.Consumer>\n {context => {\n invariant(context, \"You should not use <Prompt> outside a <Router>\");\n\n if (!when || context.staticContext) return null;\n\n const method = context.history.block;\n\n return (\n <Lifecycle\n onMount={self => {\n self.release = method(message);\n }}\n onUpdate={(self, prevProps) => {\n if (prevProps.message !== message) {\n self.release();\n self.release = method(message);\n }\n }}\n onUnmount={self => {\n self.release();\n }}\n message={message}\n />\n );\n }}\n </RouterContext.Consumer>\n );\n}\n\nif (__DEV__) {\n const messageType = PropTypes.oneOfType([PropTypes.func, PropTypes.string]);\n\n Prompt.propTypes = {\n when: PropTypes.bool,\n message: messageType.isRequired\n };\n}\n\nexport default Prompt;\n","import pathToRegexp from \"path-to-regexp\";\n\nconst cache = {};\nconst cacheLimit = 10000;\nlet cacheCount = 0;\n\nfunction compilePath(path) {\n if (cache[path]) return cache[path];\n\n const generator = pathToRegexp.compile(path);\n\n if (cacheCount < cacheLimit) {\n cache[path] = generator;\n cacheCount++;\n }\n\n return generator;\n}\n\n/**\n * Public API for generating a URL pathname from a path and parameters.\n */\nfunction generatePath(path = \"/\", params = {}) {\n return path === \"/\" ? path : compilePath(path)(params, { pretty: true });\n}\n\nexport default generatePath;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createLocation, locationsAreEqual } from \"history\";\nimport invariant from \"tiny-invariant\";\n\nimport Lifecycle from \"./Lifecycle.js\";\nimport RouterContext from \"./RouterContext.js\";\nimport generatePath from \"./generatePath.js\";\n\n/**\n * The public API for navigating programmatically with a component.\n */\nfunction Redirect({ computedMatch, to, push = false }) {\n return (\n <RouterContext.Consumer>\n {context => {\n invariant(context, \"You should not use <Redirect> outside a <Router>\");\n\n const { history, staticContext } = context;\n\n const method = push ? history.push : history.replace;\n const location = createLocation(\n computedMatch\n ? typeof to === \"string\"\n ? generatePath(to, computedMatch.params)\n : {\n ...to,\n pathname: generatePath(to.pathname, computedMatch.params)\n }\n : to\n );\n\n // When rendering in a static context,\n // set the new location immediately.\n if (staticContext) {\n method(location);\n return null;\n }\n\n return (\n <Lifecycle\n onMount={() => {\n method(location);\n }}\n onUpdate={(self, prevProps) => {\n const prevLocation = createLocation(prevProps.to);\n if (\n !locationsAreEqual(prevLocation, {\n ...location,\n key: prevLocation.key\n })\n ) {\n method(location);\n }\n }}\n to={to}\n />\n );\n }}\n </RouterContext.Consumer>\n );\n}\n\nif (__DEV__) {\n Redirect.propTypes = {\n push: PropTypes.bool,\n from: PropTypes.string,\n to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired\n };\n}\n\nexport default Redirect;\n","import pathToRegexp from \"path-to-regexp\";\n\nconst cache = {};\nconst cacheLimit = 10000;\nlet cacheCount = 0;\n\nfunction compilePath(path, options) {\n const cacheKey = `${options.end}${options.strict}${options.sensitive}`;\n const pathCache = cache[cacheKey] || (cache[cacheKey] = {});\n\n if (pathCache[path]) return pathCache[path];\n\n const keys = [];\n const regexp = pathToRegexp(path, keys, options);\n const result = { regexp, keys };\n\n if (cacheCount < cacheLimit) {\n pathCache[path] = result;\n cacheCount++;\n }\n\n return result;\n}\n\n/**\n * Public API for matching a URL pathname to a path.\n */\nfunction matchPath(pathname, options = {}) {\n if (typeof options === \"string\" || Array.isArray(options)) {\n options = { path: options };\n }\n\n const { path, exact = false, strict = false, sensitive = false } = options;\n\n const paths = [].concat(path);\n\n return paths.reduce((matched, path) => {\n if (!path && path !== \"\") return null;\n if (matched) return matched;\n\n const { regexp, keys } = compilePath(path, {\n end: exact,\n strict,\n sensitive\n });\n const match = regexp.exec(pathname);\n\n if (!match) return null;\n\n const [url, ...values] = match;\n const isExact = pathname === url;\n\n if (exact && !isExact) return null;\n\n return {\n path, // the path used to match\n url: path === \"/\" && url === \"\" ? \"/\" : url, // the matched portion of the URL\n isExact, // whether or not we matched exactly\n params: keys.reduce((memo, key, index) => {\n memo[key.name] = values[index];\n return memo;\n }, {})\n };\n }, null);\n}\n\nexport default matchPath;\n","import React from \"react\";\nimport { isValidElementType } from \"react-is\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport RouterContext from \"./RouterContext.js\";\nimport matchPath from \"./matchPath.js\";\n\nfunction isEmptyChildren(children) {\n return React.Children.count(children) === 0;\n}\n\nfunction evalChildrenDev(children, props, path) {\n const value = children(props);\n\n warning(\n value !== undefined,\n \"You returned `undefined` from the `children` function of \" +\n `<Route${path ? ` path=\"${path}\"` : \"\"}>, but you ` +\n \"should have returned a React element or `null`\"\n );\n\n return value || null;\n}\n\n/**\n * The public API for matching a single path and rendering.\n */\nclass Route extends React.Component {\n render() {\n return (\n <RouterContext.Consumer>\n {context => {\n invariant(context, \"You should not use <Route> outside a <Router>\");\n\n const location = this.props.location || context.location;\n const match = this.props.computedMatch\n ? this.props.computedMatch // <Switch> already computed the match for us\n : this.props.path\n ? matchPath(location.pathname, this.props)\n : context.match;\n\n const props = { ...context, location, match };\n\n let { children, component, render } = this.props;\n\n // Preact uses an empty array as children by\n // default, so use null if that's the case.\n if (Array.isArray(children) && children.length === 0) {\n children = null;\n }\n\n return (\n <RouterContext.Provider value={props}>\n {props.match\n ? children\n ? typeof children === \"function\"\n ? __DEV__\n ? evalChildrenDev(children, props, this.props.path)\n : children(props)\n : children\n : component\n ? React.createElement(component, props)\n : render\n ? render(props)\n : null\n : typeof children === \"function\"\n ? __DEV__\n ? evalChildrenDev(children, props, this.props.path)\n : children(props)\n : null}\n </RouterContext.Provider>\n );\n }}\n </RouterContext.Consumer>\n );\n }\n}\n\nif (__DEV__) {\n Route.propTypes = {\n children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n component: (props, propName) => {\n if (props[propName] && !isValidElementType(props[propName])) {\n return new Error(\n `Invalid prop 'component' supplied to 'Route': the prop is not a valid React component`\n );\n }\n },\n exact: PropTypes.bool,\n location: PropTypes.object,\n path: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string)\n ]),\n render: PropTypes.func,\n sensitive: PropTypes.bool,\n strict: PropTypes.bool\n };\n\n Route.prototype.componentDidMount = function() {\n warning(\n !(\n this.props.children &&\n !isEmptyChildren(this.props.children) &&\n this.props.component\n ),\n \"You should not use <Route component> and <Route children> in the same route; <Route component> will be ignored\"\n );\n\n warning(\n !(\n this.props.children &&\n !isEmptyChildren(this.props.children) &&\n this.props.render\n ),\n \"You should not use <Route render> and <Route children> in the same route; <Route render> will be ignored\"\n );\n\n warning(\n !(this.props.component && this.props.render),\n \"You should not use <Route component> and <Route render> in the same route; <Route render> will be ignored\"\n );\n };\n\n Route.prototype.componentDidUpdate = function(prevProps) {\n warning(\n !(this.props.location && !prevProps.location),\n '<Route> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.'\n );\n\n warning(\n !(!this.props.location && prevProps.location),\n '<Route> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.'\n );\n };\n}\n\nexport default Route;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createLocation, createPath } from \"history\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport Router from \"./Router.js\";\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === \"/\" ? path : \"/\" + path;\n}\n\nfunction addBasename(basename, location) {\n if (!basename) return location;\n\n return {\n ...location,\n pathname: addLeadingSlash(basename) + location.pathname\n };\n}\n\nfunction stripBasename(basename, location) {\n if (!basename) return location;\n\n const base = addLeadingSlash(basename);\n\n if (location.pathname.indexOf(base) !== 0) return location;\n\n return {\n ...location,\n pathname: location.pathname.substr(base.length)\n };\n}\n\nfunction createURL(location) {\n return typeof location === \"string\" ? location : createPath(location);\n}\n\nfunction staticHandler(methodName) {\n return () => {\n invariant(false, \"You cannot %s with <StaticRouter>\", methodName);\n };\n}\n\nfunction noop() {}\n\n/**\n * The public top-level API for a \"static\" <Router>, so-called because it\n * can't actually change the current location. Instead, it just records\n * location changes in a context object. Useful mainly in testing and\n * server-rendering scenarios.\n */\nclass StaticRouter extends React.Component {\n navigateTo(location, action) {\n const { basename = \"\", context = {} } = this.props;\n context.action = action;\n context.location = addBasename(basename, createLocation(location));\n context.url = createURL(context.location);\n }\n\n handlePush = location => this.navigateTo(location, \"PUSH\");\n handleReplace = location => this.navigateTo(location, \"REPLACE\");\n handleListen = () => noop;\n handleBlock = () => noop;\n\n render() {\n const { basename = \"\", context = {}, location = \"/\", ...rest } = this.props;\n\n const history = {\n createHref: path => addLeadingSlash(basename + createURL(path)),\n action: \"POP\",\n location: stripBasename(basename, createLocation(location)),\n push: this.handlePush,\n replace: this.handleReplace,\n go: staticHandler(\"go\"),\n goBack: staticHandler(\"goBack\"),\n goForward: staticHandler(\"goForward\"),\n listen: this.handleListen,\n block: this.handleBlock\n };\n\n return <Router {...rest} history={history} staticContext={context} />;\n }\n}\n\nif (__DEV__) {\n StaticRouter.propTypes = {\n basename: PropTypes.string,\n context: PropTypes.object,\n location: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n };\n\n StaticRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \"<StaticRouter> ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { StaticRouter as Router }`.\"\n );\n };\n}\n\nexport default StaticRouter;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport RouterContext from \"./RouterContext.js\";\nimport matchPath from \"./matchPath.js\";\n\n/**\n * The public API for rendering the first <Route> that matches.\n */\nclass Switch extends React.Component {\n render() {\n return (\n <RouterContext.Consumer>\n {context => {\n invariant(context, \"You should not use <Switch> outside a <Router>\");\n\n const location = this.props.location || context.location;\n\n let element, match;\n\n // We use React.Children.forEach instead of React.Children.toArray().find()\n // here because toArray adds keys to all child elements and we do not want\n // to trigger an unmount/remount for two <Route>s that render the same\n // component at different URLs.\n React.Children.forEach(this.props.children, child => {\n if (match == null && React.isValidElement(child)) {\n element = child;\n\n const path = child.props.path || child.props.from;\n\n match = path\n ? matchPath(location.pathname, { ...child.props, path })\n : context.match;\n }\n });\n\n return match\n ? React.cloneElement(element, { location, computedMatch: match })\n : null;\n }}\n </RouterContext.Consumer>\n );\n }\n}\n\nif (__DEV__) {\n Switch.propTypes = {\n children: PropTypes.node,\n location: PropTypes.object\n };\n\n Switch.prototype.componentDidUpdate = function(prevProps) {\n warning(\n !(this.props.location && !prevProps.location),\n '<Switch> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.'\n );\n\n warning(\n !(!this.props.location && prevProps.location),\n '<Switch> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.'\n );\n };\n}\n\nexport default Switch;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport hoistStatics from \"hoist-non-react-statics\";\nimport invariant from \"tiny-invariant\";\n\nimport RouterContext from \"./RouterContext.js\";\n\n/**\n * A public higher-order component to access the imperative API\n */\nfunction withRouter(Component) {\n const displayName = `withRouter(${Component.displayName || Component.name})`;\n const C = props => {\n const { wrappedComponentRef, ...remainingProps } = props;\n\n return (\n <RouterContext.Consumer>\n {context => {\n invariant(\n context,\n `You should not use <${displayName} /> outside a <Router>`\n );\n return (\n <Component\n {...remainingProps}\n {...context}\n ref={wrappedComponentRef}\n />\n );\n }}\n </RouterContext.Consumer>\n );\n };\n\n C.displayName = displayName;\n C.WrappedComponent = Component;\n\n if (__DEV__) {\n C.propTypes = {\n wrappedComponentRef: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.func,\n PropTypes.object\n ])\n };\n }\n\n return hoistStatics(C, Component);\n}\n\nexport default withRouter;\n","import React from \"react\";\nimport invariant from \"tiny-invariant\";\n\nimport Context from \"./RouterContext.js\";\nimport HistoryContext from \"./HistoryContext.js\";\nimport matchPath from \"./matchPath.js\";\n\nconst useContext = React.useContext;\n\nexport function useHistory() {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useHistory()\"\n );\n }\n\n return useContext(HistoryContext);\n}\n\nexport function useLocation() {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useLocation()\"\n );\n }\n\n return useContext(Context).location;\n}\n\nexport function useParams() {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useParams()\"\n );\n }\n\n const match = useContext(Context).match;\n return match ? match.params : {};\n}\n\nexport function useRouteMatch(path) {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useRouteMatch()\"\n );\n }\n\n const location = useLocation();\n const match = useContext(Context).match;\n\n return path ? matchPath(location.pathname, path) : match;\n}\n"],"names":["createNamedContext","name","context","createContext","displayName","historyContext","Router","props","state","location","history","_isMounted","_pendingLocation","staticContext","unlisten","listen","_this","setState","computeRootMatch","pathname","path","url","params","isExact","componentDidMount","this","componentWillUnmount","render","React","RouterContext","Provider","value","match","HistoryContext","children","Component","MemoryRouter","createHistory","Lifecycle","onMount","call","componentDidUpdate","prevProps","onUpdate","onUnmount","Prompt","message","when","Consumer","invariant","method","block","self","release","cache","cacheLimit","cacheCount","compilePath","generator","pathToRegexp","compile","generatePath","pretty","Redirect","computedMatch","to","push","replace","createLocation","prevLocation","locationsAreEqual","key","options","cacheKey","end","strict","sensitive","pathCache","keys","result","regexp","matchPath","Array","isArray","exact","concat","reduce","matched","exec","values","memo","index","Route","component","length","createElement","addLeadingSlash","charAt","addBasename","basename","stripBasename","base","indexOf","substr","createURL","createPath","staticHandler","methodName","noop","StaticRouter","handlePush","navigateTo","handleReplace","handleListen","handleBlock","action","rest","createHref","go","goBack","goForward","Switch","element","Children","forEach","child","isValidElement","from","cloneElement","withRouter","C","wrappedComponentRef","remainingProps","ref","WrappedComponent","hoistStatics","useContext","useHistory","useLocation","Context","useParams","useRouteMatch"],"mappings":"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"}
1
+ {"version":3,"file":"react-router.min.js","sources":["../modules/createNamedContext.js","../modules/HistoryContext.js","../modules/RouterContext.js","../modules/Router.js","../modules/MemoryRouter.js","../modules/Lifecycle.js","../modules/Prompt.js","../modules/generatePath.js","../modules/Redirect.js","../modules/matchPath.js","../modules/Route.js","../modules/StaticRouter.js","../modules/Switch.js","../modules/withRouter.js","../modules/hooks.js"],"sourcesContent":["// TODO: Replace with React.createContext once we can assume React 16+\nimport createContext from \"mini-create-react-context\";\n\nconst createNamedContext = name => {\n const context = createContext();\n context.displayName = name;\n\n return context;\n};\n\nexport default createNamedContext;\n","import createNamedContext from \"./createNamedContext\";\n\nconst historyContext = /*#__PURE__*/ createNamedContext(\"Router-History\");\nexport default historyContext;\n","import createNamedContext from \"./createNamedContext\";\n\nconst context = /*#__PURE__*/ createNamedContext(\"Router\");\nexport default context;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport warning from \"tiny-warning\";\n\nimport HistoryContext from \"./HistoryContext.js\";\nimport RouterContext from \"./RouterContext.js\";\n\n/**\n * The public API for putting history on context.\n */\nclass Router extends React.Component {\n static computeRootMatch(pathname) {\n return { path: \"/\", url: \"/\", params: {}, isExact: pathname === \"/\" };\n }\n\n constructor(props) {\n super(props);\n\n this.state = {\n location: props.history.location\n };\n\n // This is a bit of a hack. We have to start listening for location\n // changes here in the constructor in case there are any <Redirect>s\n // on the initial render. If there are, they will replace/push when\n // they mount and since cDM fires in children before parents, we may\n // get a new location before the <Router> is mounted.\n this._isMounted = false;\n this._pendingLocation = null;\n\n if (!props.staticContext) {\n this.unlisten = props.history.listen(location => {\n this._pendingLocation = location;\n });\n }\n }\n\n componentDidMount() {\n this._isMounted = true;\n\n if (this.unlisten) {\n // Any pre-mount location changes have been captured at\n // this point, so unregister the listener.\n this.unlisten();\n }\n if (!this.props.staticContext) {\n this.unlisten = this.props.history.listen(location => {\n if (this._isMounted) {\n this.setState({ location });\n }\n });\n }\n if (this._pendingLocation) {\n this.setState({ location: this._pendingLocation });\n }\n }\n\n componentWillUnmount() {\n if (this.unlisten) {\n this.unlisten();\n this._isMounted = false;\n this._pendingLocation = null;\n }\n }\n\n render() {\n return (\n <RouterContext.Provider\n value={{\n history: this.props.history,\n location: this.state.location,\n match: Router.computeRootMatch(this.state.location.pathname),\n staticContext: this.props.staticContext\n }}\n >\n <HistoryContext.Provider\n children={this.props.children || null}\n value={this.props.history}\n />\n </RouterContext.Provider>\n );\n }\n}\n\nif (__DEV__) {\n Router.propTypes = {\n children: PropTypes.node,\n history: PropTypes.object.isRequired,\n staticContext: PropTypes.object\n };\n\n Router.prototype.componentDidUpdate = function(prevProps) {\n warning(\n prevProps.history === this.props.history,\n \"You cannot change <Router history>\"\n );\n };\n}\n\nexport default Router;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createMemoryHistory as createHistory } from \"history\";\nimport warning from \"tiny-warning\";\n\nimport Router from \"./Router.js\";\n\n/**\n * The public API for a <Router> that stores location in memory.\n */\nclass MemoryRouter extends React.Component {\n history = createHistory(this.props);\n\n render() {\n return <Router history={this.history} children={this.props.children} />;\n }\n}\n\nif (__DEV__) {\n MemoryRouter.propTypes = {\n initialEntries: PropTypes.array,\n initialIndex: PropTypes.number,\n getUserConfirmation: PropTypes.func,\n keyLength: PropTypes.number,\n children: PropTypes.node\n };\n\n MemoryRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \"<MemoryRouter> ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { MemoryRouter as Router }`.\"\n );\n };\n}\n\nexport default MemoryRouter;\n","import React from \"react\";\n\nclass Lifecycle extends React.Component {\n componentDidMount() {\n if (this.props.onMount) this.props.onMount.call(this, this);\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.onUpdate) this.props.onUpdate.call(this, this, prevProps);\n }\n\n componentWillUnmount() {\n if (this.props.onUnmount) this.props.onUnmount.call(this, this);\n }\n\n render() {\n return null;\n }\n}\n\nexport default Lifecycle;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\n\nimport Lifecycle from \"./Lifecycle.js\";\nimport RouterContext from \"./RouterContext.js\";\n\n/**\n * The public API for prompting the user before navigating away from a screen.\n */\nfunction Prompt({ message, when = true }) {\n return (\n <RouterContext.Consumer>\n {context => {\n invariant(context, \"You should not use <Prompt> outside a <Router>\");\n\n if (!when || context.staticContext) return null;\n\n const method = context.history.block;\n\n return (\n <Lifecycle\n onMount={self => {\n self.release = method(message);\n }}\n onUpdate={(self, prevProps) => {\n if (prevProps.message !== message) {\n self.release();\n self.release = method(message);\n }\n }}\n onUnmount={self => {\n self.release();\n }}\n message={message}\n />\n );\n }}\n </RouterContext.Consumer>\n );\n}\n\nif (__DEV__) {\n const messageType = PropTypes.oneOfType([PropTypes.func, PropTypes.string]);\n\n Prompt.propTypes = {\n when: PropTypes.bool,\n message: messageType.isRequired\n };\n}\n\nexport default Prompt;\n","import pathToRegexp from \"path-to-regexp\";\n\nconst cache = {};\nconst cacheLimit = 10000;\nlet cacheCount = 0;\n\nfunction compilePath(path) {\n if (cache[path]) return cache[path];\n\n const generator = pathToRegexp.compile(path);\n\n if (cacheCount < cacheLimit) {\n cache[path] = generator;\n cacheCount++;\n }\n\n return generator;\n}\n\n/**\n * Public API for generating a URL pathname from a path and parameters.\n */\nfunction generatePath(path = \"/\", params = {}) {\n return path === \"/\" ? path : compilePath(path)(params, { pretty: true });\n}\n\nexport default generatePath;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createLocation, locationsAreEqual } from \"history\";\nimport invariant from \"tiny-invariant\";\n\nimport Lifecycle from \"./Lifecycle.js\";\nimport RouterContext from \"./RouterContext.js\";\nimport generatePath from \"./generatePath.js\";\n\n/**\n * The public API for navigating programmatically with a component.\n */\nfunction Redirect({ computedMatch, to, push = false }) {\n return (\n <RouterContext.Consumer>\n {context => {\n invariant(context, \"You should not use <Redirect> outside a <Router>\");\n\n const { history, staticContext } = context;\n\n const method = push ? history.push : history.replace;\n const location = createLocation(\n computedMatch\n ? typeof to === \"string\"\n ? generatePath(to, computedMatch.params)\n : {\n ...to,\n pathname: generatePath(to.pathname, computedMatch.params)\n }\n : to\n );\n\n // When rendering in a static context,\n // set the new location immediately.\n if (staticContext) {\n method(location);\n return null;\n }\n\n return (\n <Lifecycle\n onMount={() => {\n method(location);\n }}\n onUpdate={(self, prevProps) => {\n const prevLocation = createLocation(prevProps.to);\n if (\n !locationsAreEqual(prevLocation, {\n ...location,\n key: prevLocation.key\n })\n ) {\n method(location);\n }\n }}\n to={to}\n />\n );\n }}\n </RouterContext.Consumer>\n );\n}\n\nif (__DEV__) {\n Redirect.propTypes = {\n push: PropTypes.bool,\n from: PropTypes.string,\n to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired\n };\n}\n\nexport default Redirect;\n","import pathToRegexp from \"path-to-regexp\";\n\nconst cache = {};\nconst cacheLimit = 10000;\nlet cacheCount = 0;\n\nfunction compilePath(path, options) {\n const cacheKey = `${options.end}${options.strict}${options.sensitive}`;\n const pathCache = cache[cacheKey] || (cache[cacheKey] = {});\n\n if (pathCache[path]) return pathCache[path];\n\n const keys = [];\n const regexp = pathToRegexp(path, keys, options);\n const result = { regexp, keys };\n\n if (cacheCount < cacheLimit) {\n pathCache[path] = result;\n cacheCount++;\n }\n\n return result;\n}\n\n/**\n * Public API for matching a URL pathname to a path.\n */\nfunction matchPath(pathname, options = {}) {\n if (typeof options === \"string\" || Array.isArray(options)) {\n options = { path: options };\n }\n\n const { path, exact = false, strict = false, sensitive = false } = options;\n\n const paths = [].concat(path);\n\n return paths.reduce((matched, path) => {\n if (!path && path !== \"\") return null;\n if (matched) return matched;\n\n const { regexp, keys } = compilePath(path, {\n end: exact,\n strict,\n sensitive\n });\n const match = regexp.exec(pathname);\n\n if (!match) return null;\n\n const [url, ...values] = match;\n const isExact = pathname === url;\n\n if (exact && !isExact) return null;\n\n return {\n path, // the path used to match\n url: path === \"/\" && url === \"\" ? \"/\" : url, // the matched portion of the URL\n isExact, // whether or not we matched exactly\n params: keys.reduce((memo, key, index) => {\n memo[key.name] = values[index];\n return memo;\n }, {})\n };\n }, null);\n}\n\nexport default matchPath;\n","import React from \"react\";\nimport { isValidElementType } from \"react-is\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport RouterContext from \"./RouterContext.js\";\nimport matchPath from \"./matchPath.js\";\n\nfunction isEmptyChildren(children) {\n return React.Children.count(children) === 0;\n}\n\nfunction evalChildrenDev(children, props, path) {\n const value = children(props);\n\n warning(\n value !== undefined,\n \"You returned `undefined` from the `children` function of \" +\n `<Route${path ? ` path=\"${path}\"` : \"\"}>, but you ` +\n \"should have returned a React element or `null`\"\n );\n\n return value || null;\n}\n\n/**\n * The public API for matching a single path and rendering.\n */\nclass Route extends React.Component {\n render() {\n return (\n <RouterContext.Consumer>\n {context => {\n invariant(context, \"You should not use <Route> outside a <Router>\");\n\n const location = this.props.location || context.location;\n const match = this.props.computedMatch\n ? this.props.computedMatch // <Switch> already computed the match for us\n : this.props.path\n ? matchPath(location.pathname, this.props)\n : context.match;\n\n const props = { ...context, location, match };\n\n let { children, component, render } = this.props;\n\n // Preact uses an empty array as children by\n // default, so use null if that's the case.\n if (Array.isArray(children) && isEmptyChildren(children)) {\n children = null;\n }\n\n return (\n <RouterContext.Provider value={props}>\n {props.match\n ? children\n ? typeof children === \"function\"\n ? __DEV__\n ? evalChildrenDev(children, props, this.props.path)\n : children(props)\n : children\n : component\n ? React.createElement(component, props)\n : render\n ? render(props)\n : null\n : typeof children === \"function\"\n ? __DEV__\n ? evalChildrenDev(children, props, this.props.path)\n : children(props)\n : null}\n </RouterContext.Provider>\n );\n }}\n </RouterContext.Consumer>\n );\n }\n}\n\nif (__DEV__) {\n Route.propTypes = {\n children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n component: (props, propName) => {\n if (props[propName] && !isValidElementType(props[propName])) {\n return new Error(\n `Invalid prop 'component' supplied to 'Route': the prop is not a valid React component`\n );\n }\n },\n exact: PropTypes.bool,\n location: PropTypes.object,\n path: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string)\n ]),\n render: PropTypes.func,\n sensitive: PropTypes.bool,\n strict: PropTypes.bool\n };\n\n Route.prototype.componentDidMount = function() {\n warning(\n !(\n this.props.children &&\n !isEmptyChildren(this.props.children) &&\n this.props.component\n ),\n \"You should not use <Route component> and <Route children> in the same route; <Route component> will be ignored\"\n );\n\n warning(\n !(\n this.props.children &&\n !isEmptyChildren(this.props.children) &&\n this.props.render\n ),\n \"You should not use <Route render> and <Route children> in the same route; <Route render> will be ignored\"\n );\n\n warning(\n !(this.props.component && this.props.render),\n \"You should not use <Route component> and <Route render> in the same route; <Route render> will be ignored\"\n );\n };\n\n Route.prototype.componentDidUpdate = function(prevProps) {\n warning(\n !(this.props.location && !prevProps.location),\n '<Route> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.'\n );\n\n warning(\n !(!this.props.location && prevProps.location),\n '<Route> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.'\n );\n };\n}\n\nexport default Route;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createLocation, createPath } from \"history\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport Router from \"./Router.js\";\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === \"/\" ? path : \"/\" + path;\n}\n\nfunction addBasename(basename, location) {\n if (!basename) return location;\n\n return {\n ...location,\n pathname: addLeadingSlash(basename) + location.pathname\n };\n}\n\nfunction stripBasename(basename, location) {\n if (!basename) return location;\n\n const base = addLeadingSlash(basename);\n\n if (location.pathname.indexOf(base) !== 0) return location;\n\n return {\n ...location,\n pathname: location.pathname.substr(base.length)\n };\n}\n\nfunction createURL(location) {\n return typeof location === \"string\" ? location : createPath(location);\n}\n\nfunction staticHandler(methodName) {\n return () => {\n invariant(false, \"You cannot %s with <StaticRouter>\", methodName);\n };\n}\n\nfunction noop() {}\n\n/**\n * The public top-level API for a \"static\" <Router>, so-called because it\n * can't actually change the current location. Instead, it just records\n * location changes in a context object. Useful mainly in testing and\n * server-rendering scenarios.\n */\nclass StaticRouter extends React.Component {\n navigateTo(location, action) {\n const { basename = \"\", context = {} } = this.props;\n context.action = action;\n context.location = addBasename(basename, createLocation(location));\n context.url = createURL(context.location);\n }\n\n handlePush = location => this.navigateTo(location, \"PUSH\");\n handleReplace = location => this.navigateTo(location, \"REPLACE\");\n handleListen = () => noop;\n handleBlock = () => noop;\n\n render() {\n const { basename = \"\", context = {}, location = \"/\", ...rest } = this.props;\n\n const history = {\n createHref: path => addLeadingSlash(basename + createURL(path)),\n action: \"POP\",\n location: stripBasename(basename, createLocation(location)),\n push: this.handlePush,\n replace: this.handleReplace,\n go: staticHandler(\"go\"),\n goBack: staticHandler(\"goBack\"),\n goForward: staticHandler(\"goForward\"),\n listen: this.handleListen,\n block: this.handleBlock\n };\n\n return <Router {...rest} history={history} staticContext={context} />;\n }\n}\n\nif (__DEV__) {\n StaticRouter.propTypes = {\n basename: PropTypes.string,\n context: PropTypes.object,\n location: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n };\n\n StaticRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \"<StaticRouter> ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { StaticRouter as Router }`.\"\n );\n };\n}\n\nexport default StaticRouter;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport RouterContext from \"./RouterContext.js\";\nimport matchPath from \"./matchPath.js\";\n\n/**\n * The public API for rendering the first <Route> that matches.\n */\nclass Switch extends React.Component {\n render() {\n return (\n <RouterContext.Consumer>\n {context => {\n invariant(context, \"You should not use <Switch> outside a <Router>\");\n\n const location = this.props.location || context.location;\n\n let element, match;\n\n // We use React.Children.forEach instead of React.Children.toArray().find()\n // here because toArray adds keys to all child elements and we do not want\n // to trigger an unmount/remount for two <Route>s that render the same\n // component at different URLs.\n React.Children.forEach(this.props.children, child => {\n if (match == null && React.isValidElement(child)) {\n element = child;\n\n const path = child.props.path || child.props.from;\n\n match = path\n ? matchPath(location.pathname, { ...child.props, path })\n : context.match;\n }\n });\n\n return match\n ? React.cloneElement(element, { location, computedMatch: match })\n : null;\n }}\n </RouterContext.Consumer>\n );\n }\n}\n\nif (__DEV__) {\n Switch.propTypes = {\n children: PropTypes.node,\n location: PropTypes.object\n };\n\n Switch.prototype.componentDidUpdate = function(prevProps) {\n warning(\n !(this.props.location && !prevProps.location),\n '<Switch> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.'\n );\n\n warning(\n !(!this.props.location && prevProps.location),\n '<Switch> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.'\n );\n };\n}\n\nexport default Switch;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport hoistStatics from \"hoist-non-react-statics\";\nimport invariant from \"tiny-invariant\";\n\nimport RouterContext from \"./RouterContext.js\";\n\n/**\n * A public higher-order component to access the imperative API\n */\nfunction withRouter(Component) {\n const displayName = `withRouter(${Component.displayName || Component.name})`;\n const C = props => {\n const { wrappedComponentRef, ...remainingProps } = props;\n\n return (\n <RouterContext.Consumer>\n {context => {\n invariant(\n context,\n `You should not use <${displayName} /> outside a <Router>`\n );\n return (\n <Component\n {...remainingProps}\n {...context}\n ref={wrappedComponentRef}\n />\n );\n }}\n </RouterContext.Consumer>\n );\n };\n\n C.displayName = displayName;\n C.WrappedComponent = Component;\n\n if (__DEV__) {\n C.propTypes = {\n wrappedComponentRef: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.func,\n PropTypes.object\n ])\n };\n }\n\n return hoistStatics(C, Component);\n}\n\nexport default withRouter;\n","import React from \"react\";\nimport invariant from \"tiny-invariant\";\n\nimport RouterContext from \"./RouterContext.js\";\nimport HistoryContext from \"./HistoryContext.js\";\nimport matchPath from \"./matchPath.js\";\n\nconst useContext = React.useContext;\n\nexport function useHistory() {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useHistory()\"\n );\n }\n\n return useContext(HistoryContext);\n}\n\nexport function useLocation() {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useLocation()\"\n );\n }\n\n return useContext(RouterContext).location;\n}\n\nexport function useParams() {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useParams()\"\n );\n }\n\n const match = useContext(RouterContext).match;\n return match ? match.params : {};\n}\n\nexport function useRouteMatch(path) {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useRouteMatch()\"\n );\n }\n\n const location = useLocation();\n const match = useContext(RouterContext).match;\n return path ? matchPath(location.pathname, path) : match;\n}\n"],"names":["createNamedContext","name","context","createContext","displayName","historyContext","Router","props","state","location","history","_isMounted","_pendingLocation","staticContext","unlisten","listen","computeRootMatch","pathname","path","url","params","isExact","componentDidMount","this","_this2","setState","componentWillUnmount","render","React","RouterContext","Provider","value","match","HistoryContext","children","Component","MemoryRouter","createHistory","_this","Lifecycle","onMount","call","componentDidUpdate","prevProps","onUpdate","onUnmount","Prompt","message","when","Consumer","invariant","method","block","self","release","cache","cacheLimit","cacheCount","compilePath","generator","pathToRegexp","compile","generatePath","pretty","Redirect","computedMatch","to","push","replace","createLocation","prevLocation","locationsAreEqual","key","options","cacheKey","end","strict","sensitive","pathCache","keys","result","regexp","matchPath","Array","isArray","exact","concat","reduce","matched","exec","values","memo","index","isEmptyChildren","Children","count","Route","component","createElement","addLeadingSlash","charAt","addBasename","basename","stripBasename","base","indexOf","substr","length","createURL","createPath","staticHandler","methodName","noop","StaticRouter","handlePush","navigateTo","handleReplace","handleListen","handleBlock","action","rest","createHref","go","goBack","goForward","Switch","element","forEach","child","isValidElement","from","cloneElement","withRouter","C","wrappedComponentRef","remainingProps","ref","WrappedComponent","hoistStatics","useContext","useHistory","useLocation","useParams","useRouteMatch"],"mappings":"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"}
@@ -19,29 +19,15 @@ var createNamedContext = function createNamedContext(name) {
19
19
  return context;
20
20
  };
21
21
 
22
- var historyContext =
23
- /*#__PURE__*/
24
- createNamedContext("Router-History");
22
+ var historyContext = /*#__PURE__*/createNamedContext("Router-History");
25
23
 
26
- // TODO: Replace with React.createContext once we can assume React 16+
27
-
28
- var createNamedContext$1 = function createNamedContext(name) {
29
- var context = createContext();
30
- context.displayName = name;
31
- return context;
32
- };
33
-
34
- var context =
35
- /*#__PURE__*/
36
- createNamedContext$1("Router");
24
+ var context = /*#__PURE__*/createNamedContext("Router");
37
25
 
38
26
  /**
39
27
  * The public API for putting history on context.
40
28
  */
41
29
 
42
- var Router =
43
- /*#__PURE__*/
44
- function (_React$Component) {
30
+ var Router = /*#__PURE__*/function (_React$Component) {
45
31
  _inheritsLoose(Router, _React$Component);
46
32
 
47
33
  Router.computeRootMatch = function computeRootMatch(pathname) {
@@ -70,13 +56,7 @@ function (_React$Component) {
70
56
 
71
57
  if (!props.staticContext) {
72
58
  _this.unlisten = props.history.listen(function (location) {
73
- if (_this._isMounted) {
74
- _this.setState({
75
- location: location
76
- });
77
- } else {
78
- _this._pendingLocation = location;
79
- }
59
+ _this._pendingLocation = location;
80
60
  });
81
61
  }
82
62
 
@@ -86,8 +66,26 @@ function (_React$Component) {
86
66
  var _proto = Router.prototype;
87
67
 
88
68
  _proto.componentDidMount = function componentDidMount() {
69
+ var _this2 = this;
70
+
89
71
  this._isMounted = true;
90
72
 
73
+ if (this.unlisten) {
74
+ // Any pre-mount location changes have been captured at
75
+ // this point, so unregister the listener.
76
+ this.unlisten();
77
+ }
78
+
79
+ if (!this.props.staticContext) {
80
+ this.unlisten = this.props.history.listen(function (location) {
81
+ if (_this2._isMounted) {
82
+ _this2.setState({
83
+ location: location
84
+ });
85
+ }
86
+ });
87
+ }
88
+
91
89
  if (this._pendingLocation) {
92
90
  this.setState({
93
91
  location: this._pendingLocation
@@ -96,18 +94,22 @@ function (_React$Component) {
96
94
  };
97
95
 
98
96
  _proto.componentWillUnmount = function componentWillUnmount() {
99
- if (this.unlisten) this.unlisten();
97
+ if (this.unlisten) {
98
+ this.unlisten();
99
+ this._isMounted = false;
100
+ this._pendingLocation = null;
101
+ }
100
102
  };
101
103
 
102
104
  _proto.render = function render() {
103
- return React.createElement(context.Provider, {
105
+ return /*#__PURE__*/React.createElement(context.Provider, {
104
106
  value: {
105
107
  history: this.props.history,
106
108
  location: this.state.location,
107
109
  match: Router.computeRootMatch(this.state.location.pathname),
108
110
  staticContext: this.props.staticContext
109
111
  }
110
- }, React.createElement(historyContext.Provider, {
112
+ }, /*#__PURE__*/React.createElement(historyContext.Provider, {
111
113
  children: this.props.children || null,
112
114
  value: this.props.history
113
115
  }));
@@ -132,9 +134,7 @@ if (process.env.NODE_ENV !== "production") {
132
134
  * The public API for a <Router> that stores location in memory.
133
135
  */
134
136
 
135
- var MemoryRouter =
136
- /*#__PURE__*/
137
- function (_React$Component) {
137
+ var MemoryRouter = /*#__PURE__*/function (_React$Component) {
138
138
  _inheritsLoose(MemoryRouter, _React$Component);
139
139
 
140
140
  function MemoryRouter() {
@@ -152,7 +152,7 @@ function (_React$Component) {
152
152
  var _proto = MemoryRouter.prototype;
153
153
 
154
154
  _proto.render = function render() {
155
- return React.createElement(Router, {
155
+ return /*#__PURE__*/React.createElement(Router, {
156
156
  history: this.history,
157
157
  children: this.props.children
158
158
  });
@@ -175,9 +175,7 @@ if (process.env.NODE_ENV !== "production") {
175
175
  };
176
176
  }
177
177
 
178
- var Lifecycle =
179
- /*#__PURE__*/
180
- function (_React$Component) {
178
+ var Lifecycle = /*#__PURE__*/function (_React$Component) {
181
179
  _inheritsLoose(Lifecycle, _React$Component);
182
180
 
183
181
  function Lifecycle() {
@@ -213,11 +211,11 @@ function Prompt(_ref) {
213
211
  var message = _ref.message,
214
212
  _ref$when = _ref.when,
215
213
  when = _ref$when === void 0 ? true : _ref$when;
216
- return React.createElement(context.Consumer, null, function (context) {
214
+ return /*#__PURE__*/React.createElement(context.Consumer, null, function (context) {
217
215
  !context ? process.env.NODE_ENV !== "production" ? invariant(false, "You should not use <Prompt> outside a <Router>") : invariant(false) : void 0;
218
216
  if (!when || context.staticContext) return null;
219
217
  var method = context.history.block;
220
- return React.createElement(Lifecycle, {
218
+ return /*#__PURE__*/React.createElement(Lifecycle, {
221
219
  onMount: function onMount(self) {
222
220
  self.release = method(message);
223
221
  },
@@ -286,7 +284,7 @@ function Redirect(_ref) {
286
284
  to = _ref.to,
287
285
  _ref$push = _ref.push,
288
286
  push = _ref$push === void 0 ? false : _ref$push;
289
- return React.createElement(context.Consumer, null, function (context) {
287
+ return /*#__PURE__*/React.createElement(context.Consumer, null, function (context) {
290
288
  !context ? process.env.NODE_ENV !== "production" ? invariant(false, "You should not use <Redirect> outside a <Router>") : invariant(false) : void 0;
291
289
  var history = context.history,
292
290
  staticContext = context.staticContext;
@@ -301,7 +299,7 @@ function Redirect(_ref) {
301
299
  return null;
302
300
  }
303
301
 
304
- return React.createElement(Lifecycle, {
302
+ return /*#__PURE__*/React.createElement(Lifecycle, {
305
303
  onMount: function onMount() {
306
304
  method(location);
307
305
  },
@@ -421,9 +419,7 @@ function evalChildrenDev(children, props, path) {
421
419
  */
422
420
 
423
421
 
424
- var Route =
425
- /*#__PURE__*/
426
- function (_React$Component) {
422
+ var Route = /*#__PURE__*/function (_React$Component) {
427
423
  _inheritsLoose(Route, _React$Component);
428
424
 
429
425
  function Route() {
@@ -435,7 +431,7 @@ function (_React$Component) {
435
431
  _proto.render = function render() {
436
432
  var _this = this;
437
433
 
438
- return React.createElement(context.Consumer, null, function (context$1) {
434
+ return /*#__PURE__*/React.createElement(context.Consumer, null, function (context$1) {
439
435
  !context$1 ? process.env.NODE_ENV !== "production" ? invariant(false, "You should not use <Route> outside a <Router>") : invariant(false) : void 0;
440
436
  var location = _this.props.location || context$1.location;
441
437
  var match = _this.props.computedMatch ? _this.props.computedMatch // <Switch> already computed the match for us
@@ -452,13 +448,13 @@ function (_React$Component) {
452
448
  render = _this$props.render; // Preact uses an empty array as children by
453
449
  // default, so use null if that's the case.
454
450
 
455
- if (Array.isArray(children) && children.length === 0) {
451
+ if (Array.isArray(children) && isEmptyChildren(children)) {
456
452
  children = null;
457
453
  }
458
454
 
459
- return React.createElement(context.Provider, {
455
+ return /*#__PURE__*/React.createElement(context.Provider, {
460
456
  value: props
461
- }, props.match ? children ? typeof children === "function" ? process.env.NODE_ENV !== "production" ? evalChildrenDev(children, props, _this.props.path) : children(props) : children : component ? React.createElement(component, props) : render ? render(props) : null : typeof children === "function" ? process.env.NODE_ENV !== "production" ? evalChildrenDev(children, props, _this.props.path) : children(props) : null);
457
+ }, props.match ? children ? typeof children === "function" ? process.env.NODE_ENV !== "production" ? evalChildrenDev(children, props, _this.props.path) : children(props) : children : component ? /*#__PURE__*/React.createElement(component, props) : render ? render(props) : null : typeof children === "function" ? process.env.NODE_ENV !== "production" ? evalChildrenDev(children, props, _this.props.path) : children(props) : null);
462
458
  });
463
459
  };
464
460
 
@@ -532,9 +528,7 @@ function noop() {}
532
528
  */
533
529
 
534
530
 
535
- var StaticRouter =
536
- /*#__PURE__*/
537
- function (_React$Component) {
531
+ var StaticRouter = /*#__PURE__*/function (_React$Component) {
538
532
  _inheritsLoose(StaticRouter, _React$Component);
539
533
 
540
534
  function StaticRouter() {
@@ -602,7 +596,7 @@ function (_React$Component) {
602
596
  listen: this.handleListen,
603
597
  block: this.handleBlock
604
598
  };
605
- return React.createElement(Router, _extends({}, rest, {
599
+ return /*#__PURE__*/React.createElement(Router, _extends({}, rest, {
606
600
  history: history,
607
601
  staticContext: context
608
602
  }));
@@ -627,9 +621,7 @@ if (process.env.NODE_ENV !== "production") {
627
621
  * The public API for rendering the first <Route> that matches.
628
622
  */
629
623
 
630
- var Switch =
631
- /*#__PURE__*/
632
- function (_React$Component) {
624
+ var Switch = /*#__PURE__*/function (_React$Component) {
633
625
  _inheritsLoose(Switch, _React$Component);
634
626
 
635
627
  function Switch() {
@@ -641,7 +633,7 @@ function (_React$Component) {
641
633
  _proto.render = function render() {
642
634
  var _this = this;
643
635
 
644
- return React.createElement(context.Consumer, null, function (context) {
636
+ return /*#__PURE__*/React.createElement(context.Consumer, null, function (context) {
645
637
  !context ? process.env.NODE_ENV !== "production" ? invariant(false, "You should not use <Switch> outside a <Router>") : invariant(false) : void 0;
646
638
  var location = _this.props.location || context.location;
647
639
  var element, match; // We use React.Children.forEach instead of React.Children.toArray().find()
@@ -650,7 +642,7 @@ function (_React$Component) {
650
642
  // component at different URLs.
651
643
 
652
644
  React.Children.forEach(_this.props.children, function (child) {
653
- if (match == null && React.isValidElement(child)) {
645
+ if (match == null && /*#__PURE__*/React.isValidElement(child)) {
654
646
  element = child;
655
647
  var path = child.props.path || child.props.from;
656
648
  match = path ? matchPath(location.pathname, _extends({}, child.props, {
@@ -658,7 +650,7 @@ function (_React$Component) {
658
650
  })) : context.match;
659
651
  }
660
652
  });
661
- return match ? React.cloneElement(element, {
653
+ return match ? /*#__PURE__*/React.cloneElement(element, {
662
654
  location: location,
663
655
  computedMatch: match
664
656
  }) : null;
@@ -691,9 +683,9 @@ function withRouter(Component) {
691
683
  var wrappedComponentRef = props.wrappedComponentRef,
692
684
  remainingProps = _objectWithoutPropertiesLoose(props, ["wrappedComponentRef"]);
693
685
 
694
- return React.createElement(context.Consumer, null, function (context) {
686
+ return /*#__PURE__*/React.createElement(context.Consumer, null, function (context) {
695
687
  !context ? process.env.NODE_ENV !== "production" ? invariant(false, "You should not use <" + displayName + " /> outside a <Router>") : invariant(false) : void 0;
696
- return React.createElement(Component, _extends({}, remainingProps, context, {
688
+ return /*#__PURE__*/React.createElement(Component, _extends({}, remainingProps, context, {
697
689
  ref: wrappedComponentRef
698
690
  }));
699
691
  });