UNPKG

66.5 kBSource Map (JSON)View Raw
1{"version":3,"file":"react-router.development.js","sources":["../../../../packages/react-router/index.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type {\n History,\n InitialEntry,\n Location,\n MemoryHistory,\n Path,\n To\n} from \"history\";\nimport {\n Action as NavigationType,\n createMemoryHistory,\n parsePath\n} from \"history\";\n\nexport type { Location, Path, To, NavigationType };\n\nfunction invariant(cond: any, message: string): asserts cond {\n if (!cond) throw new Error(message);\n}\n\nfunction warning(cond: any, message: string): void {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging React Router!\n //\n // This error is thrown as a convenience so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nconst alreadyWarned: Record<string, boolean> = {};\nfunction warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// CONTEXT\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level <Router> API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport type Navigator = Omit<\n History,\n \"action\" | \"location\" | \"back\" | \"forward\" | \"listen\" | \"block\"\n>;\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n}\n\nconst NavigationContext = React.createContext<NavigationContextObject>(null!);\n\nif (__DEV__) {\n NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n location: Location;\n navigationType: NavigationType;\n}\n\nconst LocationContext = React.createContext<LocationContextObject>(null!);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\ninterface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n}\n\nconst RouteContext = React.createContext<RouteContextObject>({\n outlet: null,\n matches: []\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// COMPONENTS\n///////////////////////////////////////////////////////////////////////////////\n\nexport interface MemoryRouterProps {\n basename?: string;\n children?: React.ReactNode;\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n}\n\n/**\n * A <Router> that stores all entries in memory.\n *\n * @see https://reactrouter.com/docs/en/v6/api#memoryrouter\n */\nexport function MemoryRouter({\n basename,\n children,\n initialEntries,\n initialIndex\n}: MemoryRouterProps): React.ReactElement {\n let historyRef = React.useRef<MemoryHistory>();\n if (historyRef.current == null) {\n historyRef.current = createMemoryHistory({ initialEntries, initialIndex });\n }\n\n let history = historyRef.current;\n let [state, setState] = React.useState({\n action: history.action,\n location: history.location\n });\n\n React.useLayoutEffect(() => history.listen(setState), [history]);\n\n return (\n <Router\n basename={basename}\n children={children}\n location={state.location}\n navigationType={state.action}\n navigator={history}\n />\n );\n}\n\nexport interface NavigateProps {\n to: To;\n replace?: boolean;\n state?: any;\n}\n\n/**\n * Changes the current location.\n *\n * Note: This API is mostly useful in React.Component subclasses that are not\n * able to use hooks. In functional components, we recommend you use the\n * `useNavigate` hook instead.\n *\n * @see https://reactrouter.com/docs/en/v6/api#navigate\n */\nexport function Navigate({ to, replace, state }: NavigateProps): null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of\n // the router loaded. We can help them understand how to avoid that.\n `<Navigate> may be used only in the context of a <Router> component.`\n );\n\n warning(\n !React.useContext(NavigationContext).static,\n `<Navigate> must not be used on the initial render in a <StaticRouter>. ` +\n `This is a no-op, but you should modify your code so the <Navigate> is ` +\n `only ever rendered in response to some user interaction or state change.`\n );\n\n let navigate = useNavigate();\n React.useEffect(() => {\n navigate(to, { replace, state });\n });\n\n return null;\n}\n\nexport interface OutletProps {}\n\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/docs/en/v6/api#outlet\n */\nexport function Outlet(_props: OutletProps): React.ReactElement | null {\n return useOutlet();\n}\n\nexport interface RouteProps {\n caseSensitive?: boolean;\n children?: React.ReactNode;\n element?: React.ReactElement | null;\n index?: boolean;\n path?: string;\n}\n\nexport interface PathRouteProps {\n caseSensitive?: boolean;\n children?: React.ReactNode;\n element?: React.ReactElement | null;\n index?: false;\n path: string;\n}\n\nexport interface LayoutRouteProps {\n children?: React.ReactNode;\n element?: React.ReactElement | null;\n}\n\nexport interface IndexRouteProps {\n element?: React.ReactElement | null;\n index: true;\n}\n\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/docs/en/v6/api#route\n */\nexport function Route(\n _props: PathRouteProps | LayoutRouteProps | IndexRouteProps\n): React.ReactElement | null {\n invariant(\n false,\n `A <Route> is only ever to be used as the child of <Routes> element, ` +\n `never rendered directly. Please wrap your <Route> in a <Routes>.`\n );\n}\n\nexport interface RouterProps {\n basename?: string;\n children?: React.ReactNode;\n location: Partial<Location> | string;\n navigationType?: NavigationType;\n navigator: Navigator;\n static?: boolean;\n}\n\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a <Router> directly. Instead, you'll render a\n * router that is more specific to your environment such as a <BrowserRouter>\n * in web browsers or a <StaticRouter> for server rendering.\n *\n * @see https://reactrouter.com/docs/en/v6/api#router\n */\nexport function Router({\n basename: basenameProp = \"/\",\n children = null,\n location: locationProp,\n navigationType = NavigationType.Pop,\n navigator,\n static: staticProp = false\n}: RouterProps): React.ReactElement | null {\n invariant(\n !useInRouterContext(),\n `You cannot render a <Router> inside another <Router>.` +\n ` You should never have more than one in your app.`\n );\n\n let basename = normalizePathname(basenameProp);\n let navigationContext = React.useMemo(\n () => ({ basename, navigator, static: staticProp }),\n [basename, navigator, staticProp]\n );\n\n if (typeof locationProp === \"string\") {\n locationProp = parsePath(locationProp);\n }\n\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n state = null,\n key = \"default\"\n } = locationProp;\n\n let location = React.useMemo(() => {\n let trailingPathname = stripBasename(pathname, basename);\n\n if (trailingPathname == null) {\n return null;\n }\n\n return {\n pathname: trailingPathname,\n search,\n hash,\n state,\n key\n };\n }, [basename, pathname, search, hash, state, key]);\n\n warning(\n location != null,\n `<Router basename=\"${basename}\"> is not able to match the URL ` +\n `\"${pathname}${search}${hash}\" because it does not start with the ` +\n `basename, so the <Router> won't render anything.`\n );\n\n if (location == null) {\n return null;\n }\n\n return (\n <NavigationContext.Provider value={navigationContext}>\n <LocationContext.Provider\n children={children}\n value={{ location, navigationType }}\n />\n </NavigationContext.Provider>\n );\n}\n\nexport interface RoutesProps {\n children?: React.ReactNode;\n location?: Partial<Location> | string;\n}\n\n/**\n * A container for a nested tree of <Route> elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/docs/en/v6/api#routes\n */\nexport function Routes({\n children,\n location\n}: RoutesProps): React.ReactElement | null {\n return useRoutes(createRoutesFromChildren(children), location);\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// HOOKS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/docs/en/v6/api#usehref\n */\nexport function useHref(to: To): string {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a <Router> component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to);\n\n let joinedPathname = pathname;\n if (basename !== \"/\") {\n let toPathname = getToPathname(to);\n let endsWithSlash = toPathname != null && toPathname.endsWith(\"/\");\n joinedPathname =\n pathname === \"/\"\n ? basename + (endsWithSlash ? \"/\" : \"\")\n : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a <Router>.\n *\n * @see https://reactrouter.com/docs/en/v6/api#useinroutercontext\n */\nexport function useInRouterContext(): boolean {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/docs/en/v6/api#uselocation\n */\nexport function useLocation(): Location {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a <Router> component.`\n );\n\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/docs/en/v6/api#usenavigationtype\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns true if the URL for the given \"to\" value matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * <NavLink>.\n *\n * @see https://reactrouter.com/docs/en/v6/api#usematch\n */\nexport function useMatch<ParamKey extends string = string>(\n pattern: PathPattern | string\n): PathMatch<ParamKey> | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a <Router> component.`\n );\n\n return matchPath(pattern, useLocation().pathname);\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n (to: To, options?: NavigateOptions): void;\n (delta: number): void;\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n}\n\n/**\n * Returns an imperative method for changing the location. Used by <Link>s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/docs/en/v6/api#usenavigate\n */\nexport function useNavigate(): NavigateFunction {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a <Router> component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n matches.map(match => match.pathnameBase)\n );\n\n let activeRef = React.useRef(false);\n React.useEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: { replace?: boolean; state?: any } = {}) => {\n warning(\n activeRef.current,\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`\n );\n\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname\n );\n\n if (basename !== \"/\") {\n path.pathname = joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state\n );\n },\n [basename, navigator, routePathnamesJson, locationPathname]\n );\n\n return navigate;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by <Outlet> to render child routes.\n *\n * @see https://reactrouter.com/docs/en/v6/api#useoutlet\n */\nexport function useOutlet(): React.ReactElement | null {\n return React.useContext(RouteContext).outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/docs/en/v6/api#useparams\n */\nexport function useParams<Key extends string = string>(): Readonly<\n Params<Key>\n> {\n let { matches } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/docs/en/v6/api#useresolvedpath\n */\nexport function useResolvedPath(to: To): Path {\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n matches.map(match => match.pathnameBase)\n );\n\n return React.useMemo(\n () => resolveTo(to, JSON.parse(routePathnamesJson), locationPathname),\n [to, routePathnamesJson, locationPathname]\n );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an <Outlet> to render their child route's\n * element.\n *\n * @see https://reactrouter.com/docs/en/v6/api#useroutes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial<Location> | string\n): React.ReactElement | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a <Router> component.`\n );\n\n let { matches: parentMatches } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (__DEV__) {\n // You won't get a warning about 2 different <Routes> under a <Route>\n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // <Routes>\n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // <Route path=\"blog\" element={<Blog />} />\n // <Route path=\"blog/feed\" element={<BlogFeed />} />\n // </Routes>\n //\n // function Blog() {\n // return (\n // <Routes>\n // <Route path=\"post/:id\" element={<Post />} />\n // </Routes>\n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant <Routes> (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under <Route path=\"${parentPath}\">) but the ` +\n `parent route path has no trailing \"*\". This means if you navigate ` +\n `deeper, the parent won't match anymore and therefore the child ` +\n `routes will never render.\\n\\n` +\n `Please change the parent <Route path=\"${parentPath}\"> to <Route ` +\n `path=\"${parentPath}/*\">.`\n );\n }\n\n let locationFromContext = useLocation();\n\n let location;\n if (locationArg) {\n let parsedLocationArg =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n invariant(\n parentPathnameBase === \"/\" ||\n parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`<Routes location>\\` or \\`useRoutes(routes, location)\\`, ` +\n `the location pathname must begin with the portion of the URL pathname that was ` +\n `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n let remainingPathname =\n parentPathnameBase === \"/\"\n ? pathname\n : pathname.slice(parentPathnameBase.length) || \"/\";\n let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n if (__DEV__) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n\n warning(\n matches == null ||\n matches[matches.length - 1].route.element !== undefined,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" does not have an element. ` +\n `This means it will render an <Outlet /> with a null value by default resulting in an \"empty\" page.`\n );\n }\n\n return _renderMatches(\n matches &&\n matches.map(match =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([parentPathnameBase, match.pathname]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([parentPathnameBase, match.pathnameBase])\n })\n ),\n parentMatches\n );\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `<Route>` element or an array of them. Used internally by\n * `<Routes>` to create a route config from its children.\n *\n * @see https://reactrouter.com/docs/en/v6/api#createroutesfromchildren\n */\nexport function createRoutesFromChildren(\n children: React.ReactNode\n): RouteObject[] {\n let routes: RouteObject[] = [];\n\n React.Children.forEach(children, element => {\n if (!React.isValidElement(element)) {\n // Ignore non-elements. This allows people to more easily inline\n // conditionals in their route config.\n return;\n }\n\n if (element.type === React.Fragment) {\n // Transparently support React.Fragment and its children.\n routes.push.apply(\n routes,\n createRoutesFromChildren(element.props.children)\n );\n return;\n }\n\n invariant(\n element.type === Route,\n `[${\n typeof element.type === \"string\" ? element.type : element.type.name\n }] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`\n );\n\n let route: RouteObject = {\n caseSensitive: element.props.caseSensitive,\n element: element.props.element,\n index: element.props.index,\n path: element.props.path\n };\n\n if (element.props.children) {\n route.children = createRoutesFromChildren(element.props.children);\n }\n\n routes.push(route);\n });\n\n return routes;\n}\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params<Key extends string = string> = {\n readonly [key in Key]: string | undefined;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport interface RouteObject {\n caseSensitive?: boolean;\n children?: RouteObject[];\n element?: React.ReactNode;\n index?: boolean;\n path?: string;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/docs/en/v6/api#generatepath\n */\nexport function generatePath(path: string, params: Params = {}): string {\n return path\n .replace(/:(\\w+)/g, (_, key) => {\n invariant(params[key] != null, `Missing \":${key}\" param`);\n return params[key]!;\n })\n .replace(/\\/*\\*$/, _ =>\n params[\"*\"] == null ? \"\" : params[\"*\"].replace(/^\\/*/, \"/\")\n );\n}\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface RouteMatch<ParamKey extends string = string> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params<ParamKey>;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The route object that was used to match.\n */\n route: RouteObject;\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/docs/en/v6/api#matchroutes\n */\nexport function matchRoutes(\n routes: RouteObject[],\n locationArg: Partial<Location> | string,\n basename = \"/\"\n): RouteMatch[] | null {\n let location =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n let pathname = stripBasename(location.pathname || \"/\", basename);\n\n if (pathname == null) {\n return null;\n }\n\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n matches = matchRouteBranch(branches[i], routes, pathname);\n }\n\n return matches;\n}\n\ninterface RouteMeta {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n}\n\ninterface RouteBranch {\n path: string;\n score: number;\n routesMeta: RouteMeta[];\n}\n\nfunction flattenRoutes(\n routes: RouteObject[],\n branches: RouteBranch[] = [],\n parentsMeta: RouteMeta[] = [],\n parentPath = \"\"\n): RouteBranch[] {\n routes.forEach((route, index) => {\n let meta: RouteMeta = {\n relativePath: route.path || \"\",\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index\n };\n\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path ` +\n `\"${parentPath}\" is not valid. An absolute child route path ` +\n `must start with the combined path of all its parent routes.`\n );\n\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n\n // Add the children before adding this route to the array so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n route.index !== true,\n `Index routes must not have child routes. Please remove ` +\n `all child routes from route path \"${path}\".`\n );\n\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n\n branches.push({ path, score: computeScore(path, route.index), routesMeta });\n });\n\n return branches;\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n branches.sort((a, b) =>\n a.score !== b.score\n ? b.score - a.score // Higher score first\n : compareIndexes(\n a.routesMeta.map(meta => meta.childrenIndex),\n b.routesMeta.map(meta => meta.childrenIndex)\n )\n );\n}\n\nconst paramRe = /^:\\w+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n\n if (index) {\n initialScore += indexRouteValue;\n }\n\n return segments\n .filter(s => !isSplat(s))\n .reduce(\n (score, segment) =>\n score +\n (paramRe.test(segment)\n ? dynamicSegmentValue\n : segment === \"\"\n ? emptySegmentValue\n : staticSegmentValue),\n initialScore\n );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n let siblings =\n a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n return siblings\n ? // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\n\nfunction matchRouteBranch<ParamKey extends string = string>(\n branch: RouteBranch,\n // TODO: attach original route object inside routesMeta so we don't need this arg\n routesArg: RouteObject[],\n pathname: string\n): RouteMatch<ParamKey>[] | null {\n let routes = routesArg;\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: RouteMatch[] = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname =\n matchedPathname === \"/\"\n ? pathname\n : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n\n if (!match) return null;\n\n Object.assign(matchedParams, match.params);\n\n let route = routes[meta.childrenIndex];\n\n matches.push({\n params: matchedParams,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: joinPaths([matchedPathname, match.pathnameBase]),\n route\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n\n routes = route.children!;\n }\n\n return matches;\n}\n\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\nexport function renderMatches(\n matches: RouteMatch[] | null\n): React.ReactElement | null {\n return _renderMatches(matches);\n}\n\nfunction _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = []\n): React.ReactElement | null {\n if (matches == null) return null;\n\n return matches.reduceRight((outlet, match, index) => {\n return (\n <RouteContext.Provider\n children={\n match.route.element !== undefined ? match.route.element : <Outlet />\n }\n value={{\n outlet,\n matches: parentMatches.concat(matches.slice(0, index + 1))\n }}\n />\n );\n }, null as React.ReactElement | null);\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern {\n /**\n * A string to match against a URL pathname. May contain `:id`-style segments\n * to indicate placeholders for dynamic parameters. May also end with `/*` to\n * indicate matching the rest of the URL pathname.\n */\n path: string;\n /**\n * Should be `true` if the static portions of the `path` should be matched in\n * the same case.\n */\n caseSensitive?: boolean;\n /**\n * Should be `true` if this pattern should match the entire URL pathname.\n */\n end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch<ParamKey extends string = string> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params<ParamKey>;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The pattern that was used to match.\n */\n pattern: PathPattern;\n}\n\ntype Mutable<T> = {\n -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/docs/en/v6/api#matchpath\n */\nexport function matchPath<ParamKey extends string = string>(\n pattern: PathPattern | string,\n pathname: string\n): PathMatch<ParamKey> | null {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n\n let [matcher, paramNames] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n\n let match = pathname.match(matcher);\n if (!match) return null;\n\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params: Params = paramNames.reduce<Mutable<Params>>(\n (memo, paramName, index) => {\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname\n .slice(0, matchedPathname.length - splatValue.length)\n .replace(/(.)\\/+$/, \"$1\");\n }\n\n memo[paramName] = safelyDecodeURIComponent(\n captureGroups[index] || \"\",\n paramName\n );\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern\n };\n}\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, string[]] {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n\n let paramNames: string[] = [];\n let regexpSource =\n \"^\" +\n path\n .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^$?{}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(/:(\\w+)/g, (_: string, paramName: string) => {\n paramNames.push(paramName);\n return \"([^\\\\/]+)\";\n });\n\n if (path.endsWith(\"*\")) {\n paramNames.push(\"*\");\n regexpSource +=\n path === \"*\" || path === \"/*\"\n ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else {\n regexpSource += end\n ? \"\\\\/*$\" // When matching to the end, ignore trailing slashes\n : // Otherwise, at least match a word boundary. This restricts parent\n // routes to matching only their own words and nothing more, e.g. parent\n // route \"/home\" should not match \"/home2\".\n \"(?:\\\\b|$)\";\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, paramNames];\n}\n\nfunction safelyDecodeURIComponent(value: string, paramName: string) {\n try {\n return decodeURIComponent(value);\n } catch (error) {\n warning(\n false,\n `The value for the URL param \"${paramName}\" will not be decoded because` +\n ` the string \"${value}\" is a malformed URL segment. This is probably` +\n ` due to a bad percent encoding (${error}).`\n );\n\n return value;\n }\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/docs/en/v6/api#resolvepath\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\"\n } = typeof to === \"string\" ? parsePath(to) : to;\n\n let pathname = toPathname\n ? toPathname.startsWith(\"/\")\n ? toPathname\n : resolvePathname(toPathname, fromPathname)\n : fromPathname;\n\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash)\n };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n\n relativeSegments.forEach(segment => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string\n): Path {\n let to = typeof toArg === \"string\" ? parsePath(toArg) : toArg;\n let toPathname = toArg === \"\" || to.pathname === \"\" ? \"/\" : to.pathname;\n\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `<Link to>` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n let from: string;\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // Each leading .. segment means \"go up one route\" instead of \"go up one\n // URL segment\". This is a key difference from how <a href> works and a\n // major reason we call this a \"to\" value instead of a \"href\".\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n // If there are more \"..\" segments than parent routes, resolve relative to\n // the root / URL.\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n\n let path = resolvePath(to, from);\n\n // Ensure the pathname has a trailing slash if the original to value had one.\n if (\n toPathname &&\n toPathname !== \"/\" &&\n toPathname.endsWith(\"/\") &&\n !path.pathname.endsWith(\"/\")\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\n\nfunction getToPathname(to: To): string | undefined {\n // Empty strings should be treated the same as / paths\n return to === \"\" || (to as Path).pathname === \"\"\n ? \"/\"\n : typeof to === \"string\"\n ? parsePath(to).pathname\n : to.pathname;\n}\n\nfunction stripBasename(pathname: string, basename: string): string | null {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n let nextChar = pathname.charAt(basename.length);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(basename.length) || \"/\";\n}\n\nconst joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\nconst normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\nconst normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\nconst normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\n///////////////////////////////////////////////////////////////////////////////\n// DANGER! PLEASE READ ME!\n// We provide these exports as an escape hatch in the event that you need any\n// routing data that we don't provide an explicit API for. With that said, we\n// want to cover your use case if we can, so if you feel the need to use these\n// we want to hear from you. Let us know what you're building and we'll do our\n// best to make sure we can support you!\n//\n// We consider these exports an implementation detail and do not guarantee\n// against any breaking changes, regardless of the semver release. Use with\n// extreme caution and only if you understand the consequences. Godspeed.\n///////////////////////////////////////////////////////////////////////////////\n\n/** @internal */\nexport {\n NavigationContext as UNSAFE_NavigationContext,\n LocationContext as UNSAFE_LocationContext,\n RouteContext as UNSAFE_RouteContext\n};\n"],"names":["invariant","cond","message","Error","warning","console","warn","e","alreadyWarned","warningOnce","key","NavigationContext","React","displayName","LocationContext","RouteContext","outlet","matches","MemoryRouter","basename","children","initialEntries","initialIndex","historyRef","current","createMemoryHistory","history","state","setState","action","location","listen","React.createElement","Navigate","to","replace","useInRouterContext","static","navigate","useNavigate","Outlet","_props","useOutlet","Route","Router","basenameProp","locationProp","navigationType","NavigationType","Pop","navigator","staticProp","normalizePathname","navigationContext","parsePath","pathname","search","hash","trailingPathname","stripBasename","Routes","useRoutes","createRoutesFromChildren","useHref","useResolvedPath","joinedPathname","toPathname","getToPathname","endsWithSlash","endsWith","joinPaths","createHref","useLocation","useNavigationType","useMatch","pattern","matchPath","locationPathname","routePathnamesJson","JSON","stringify","map","match","pathnameBase","activeRef","options","go","path","resolveTo","parse","push","useParams","routeMatch","length","params","routes","locationArg","parentMatches","parentParams","parentPathname","parentPathnameBase","parentRoute","route","parentPath","locationFromContext","parsedLocationArg","startsWith","remainingPathname","slice","matchRoutes","element","undefined","_renderMatches","Object","assign","forEach","type","apply","props","name","caseSensitive","index","generatePath","_","branches","flattenRoutes","rankRouteBranches","i","matchRouteBranch","parentsMeta","meta","relativePath","childrenIndex","routesMeta","concat","score","computeScore","sort","a","b","compareIndexes","paramRe","dynamicSegmentValue","indexRouteValue","emptySegmentValue","staticSegmentValue","splatPenalty","isSplat","s","segments","split","initialScore","some","filter","reduce","segment","test","siblings","every","n","branch","routesArg","matchedParams","matchedPathname","end","renderMatches","reduceRight","matcher","paramNames","compilePath","captureGroups","memo","paramName","splatValue","safelyDecodeURIComponent","regexpSource","RegExp","value","decodeURIComponent","error","resolvePath","fromPathname","resolvePathname","normalizeSearch","normalizeHash","relativeSegments","pop","join","toArg","routePathnames","from","routePathnameIndex","toSegments","shift","toLowerCase","nextChar","charAt","paths"],"mappings":"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"}
\No newline at end of file