{"version":3,"file":"router.cjs.js","sources":["../history.ts","../utils.ts","../router.ts"],"sourcesContent":["////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Pop = \"POP\",\n\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Push = \"PUSH\",\n\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n /**\n * A URL pathname, beginning with a /.\n */\n pathname: string;\n\n /**\n * A URL search string, beginning with a ?.\n */\n search: string;\n\n /**\n * A URL fragment identifier, beginning with a #.\n */\n hash: string;\n}\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location extends Path {\n /**\n * A value of arbitrary data associated with this location.\n */\n state: any;\n\n /**\n * A unique string associated with this location. May be used to safely store\n * and retrieve data in some other storage API, like `localStorage`.\n *\n * Note: This value is always \"default\" on the initial location.\n */\n key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n /**\n * The action that triggered the change.\n */\n action: Action;\n\n /**\n * The new location.\n */\n location: Location;\n\n /**\n * The delta between this location and the former location in the history stack\n */\n delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. May be either a URL or the pieces of a\n * URL path.\n */\nexport type To = string | Partial;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n /**\n * The last action that modified the current location. This will always be\n * Action.Pop when a history instance is first created. This value is mutable.\n */\n readonly action: Action;\n\n /**\n * The current location. This value is mutable.\n */\n readonly location: Location;\n\n /**\n * Returns a valid href for the given `to` value that may be used as\n * the value of an attribute.\n *\n * @param to - The destination URL\n */\n createHref(to: To): string;\n\n /**\n * Returns a URL for the given `to` value\n *\n * @param to - The destination URL\n */\n createURL(to: To): URL;\n\n /**\n * Encode a location the same way window.history would do (no-op for memory\n * history) so we ensure our PUSH/REPLACE navigations for data routers\n * behave the same as POP\n *\n * @param to Unencoded path\n */\n encodeLocation(to: To): Path;\n\n /**\n * Pushes a new location onto the history stack, increasing its length by one.\n * If there were any entries in the stack after the current one, they are\n * lost.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n push(to: To, state?: any): void;\n\n /**\n * Replaces the current location in the history stack with a new one. The\n * location that was replaced will no longer be available.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n replace(to: To, state?: any): void;\n\n /**\n * Navigates `n` entries backward/forward in the history stack relative to the\n * current index. For example, a \"back\" navigation would use go(-1).\n *\n * @param delta - The delta in the stack index\n */\n go(delta: number): void;\n\n /**\n * Sets up a listener that will be called whenever the current location\n * changes.\n *\n * @param listener - A function that will be called when the location changes\n * @returns unlisten - A function that may be used to stop listening\n */\n listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n usr: any;\n key?: string;\n idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial;\n\nexport type MemoryHistoryOptions = {\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n /**\n * The current index in the history stack.\n */\n readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n options: MemoryHistoryOptions = {}\n): MemoryHistory {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries: Location[]; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) =>\n createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index === 0 ? \"default\" : undefined\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n function clampIndex(n: number): number {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation(): Location {\n return entries[index];\n }\n function createMemoryLocation(\n to: To,\n state: any = null,\n key?: string\n ): Location {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n\n function createHref(to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n let history: MemoryHistory = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to: To) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\",\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn: Listener) {\n listener = fn;\n return () => {\n listener = null;\n };\n },\n };\n\n return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n options: BrowserHistoryOptions = {}\n): BrowserHistory {\n function createBrowserLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let { pathname, search, hash } = window.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createBrowserHref(window: Window, to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n options: HashHistoryOptions = {}\n): HashHistory {\n function createHashLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n } = parsePath(window.location.hash.substr(1));\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createHashHref(window: Window, to: To) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n\n function validateHashLocation(location: Location, to: To) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant(\n value: T | null | undefined,\n message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\nfunction warning(cond: any, message: string) {\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 history!\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\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n return {\n usr: location.state,\n key: location.key,\n idx: index,\n };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n current: string | Location,\n to: To,\n state: any = null,\n key?: string\n): Readonly {\n let location: Readonly = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...(typeof to === \"string\" ? parsePath(to) : to),\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: (to && (to as Location).key) || key || createKey(),\n };\n return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n}: Partial) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial {\n let parsedPath: Partial = {};\n\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n\n if (path) {\n parsedPath.pathname = path;\n }\n }\n\n return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n window?: Window;\n v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n createHref: (window: Window, to: To) => string,\n validateLocation: ((location: Location, to: To) => void) | null,\n options: UrlHistoryOptions = {}\n): UrlHistory {\n let { window = document.defaultView!, v5Compat = false } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n let index = getIndex()!;\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n\n function getIndex(): number {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n\n function push(to: To, state?: any) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n\n function replace(to: To, state?: any) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n\n function createURL(to: To): URL {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base =\n window.location.origin !== \"null\"\n ? window.location.origin\n : window.location.href;\n\n let href = typeof to === \"string\" ? to : createPath(to);\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href}`\n );\n return new URL(href, base);\n }\n\n let history: History = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn: Listener) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n },\n };\n\n return history;\n}\n\n//#endregion\n","import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n [routeId: string]: any;\n}\n\nexport enum ResultType {\n data = \"data\",\n deferred = \"deferred\",\n redirect = \"redirect\",\n error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n type: ResultType.data;\n data: any;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n type: ResultType.deferred;\n deferredData: DeferredData;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n type: ResultType.redirect;\n status: number;\n location: string;\n revalidate: boolean;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n type: ResultType.error;\n error: any;\n headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n | SuccessResult\n | DeferredResult\n | RedirectResult\n | ErrorResult;\n\nexport type MutationFormMethod = \"post\" | \"put\" | \"patch\" | \"delete\";\nexport type FormMethod = \"get\" | MutationFormMethod;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\";\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport interface Submission {\n formMethod: FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n}\n\n/**\n * @private\n * Arguments passed to route loader/action functions. Same for now but we keep\n * this as a private implementation detail in case they diverge in the future.\n */\ninterface DataFunctionArgs {\n request: Request;\n params: Params;\n context?: any;\n}\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs extends DataFunctionArgs {}\n\n/**\n * Route loader function signature\n */\nexport interface LoaderFunction {\n (args: LoaderFunctionArgs): Promise | Response | Promise | any;\n}\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (args: ActionFunctionArgs): Promise | Response | Promise | any;\n}\n\n/**\n * Route shouldRevalidate function signature. This runs after any submission\n * (navigation or fetcher), so we flatten the navigation/fetcher submission\n * onto the arguments. It shouldn't matter whether it came from a navigation\n * or a fetcher, what really matters is the URLs and the formData since loaders\n * have to re-run based on the data models that were potentially mutated.\n */\nexport interface ShouldRevalidateFunction {\n (args: {\n currentUrl: URL;\n currentParams: AgnosticDataRouteMatch[\"params\"];\n nextUrl: URL;\n nextParams: AgnosticDataRouteMatch[\"params\"];\n formMethod?: Submission[\"formMethod\"];\n formAction?: Submission[\"formAction\"];\n formEncType?: Submission[\"formEncType\"];\n formData?: Submission[\"formData\"];\n actionResult?: DataResult;\n defaultShouldRevalidate: boolean;\n }): boolean;\n}\n\n/**\n * Base RouteObject with common props shared by all types of routes\n */\ntype AgnosticBaseRouteObject = {\n caseSensitive?: boolean;\n path?: string;\n id?: string;\n loader?: LoaderFunction;\n action?: ActionFunction;\n hasErrorBoundary?: boolean;\n shouldRevalidate?: ShouldRevalidateFunction;\n handle?: any;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n children?: undefined;\n index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n children?: AgnosticRouteObject[];\n index?: false;\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 type AgnosticRouteObject =\n | AgnosticIndexRouteObject\n | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n children?: AgnosticDataRouteObject[];\n id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n | AgnosticDataIndexRouteObject\n | AgnosticDataNonIndexRouteObject;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam =\n // split path into individual path segments\n Path extends `${infer L}/${infer R}`\n ? _PathParam | _PathParam\n : // find params after `:`\n Path extends `:${infer Param}`\n ? Param extends `${infer Optional}?`\n ? Optional\n : Param\n : // otherwise, there aren't any params present\n never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\ntype PathParam =\n // check if path is just a wildcard\n Path extends \"*\"\n ? \"*\"\n : // look for wildcard at the end of the path\n Path extends `${infer Rest}/*`\n ? \"*\" | _PathParam\n : // look for params in the absence of wildcards\n _PathParam;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey =\n // if could not find path params, fallback to `string`\n [PathParam] extends [never] ? string : PathParam;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params = {\n readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\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: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n extends AgnosticRouteMatch {}\n\nfunction isIndexRoute(\n route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n routes: AgnosticRouteObject[],\n parentPath: number[] = [],\n allIds: Set = new Set()\n): AgnosticDataRouteObject[] {\n return routes.map((route, index) => {\n let treePath = [...parentPath, index];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n !allIds.has(id),\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n allIds.add(id);\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = { ...route, id };\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n id,\n children: route.children\n ? convertRoutesToDataRoutes(route.children, treePath, allIds)\n : undefined,\n };\n return pathOrLayoutRoute;\n }\n });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nexport function matchRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename = \"/\"\n): AgnosticRouteMatch[] | 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(\n branches[i],\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n safelyDecodeURI(pathname)\n );\n }\n\n return matches;\n}\n\ninterface RouteMeta<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n route: RouteObjectType;\n}\n\ninterface RouteBranch<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n path: string;\n score: number;\n routesMeta: RouteMeta[];\n}\n\nfunction flattenRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n branches: RouteBranch[] = [],\n parentsMeta: RouteMeta[] = [],\n parentPath = \"\"\n): RouteBranch[] {\n let flattenRoute = (\n route: RouteObjectType,\n index: number,\n relativePath?: string\n ) => {\n let meta: RouteMeta = {\n relativePath:\n relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route,\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 // Our types know better, but runtime JS may not!\n // @ts-expect-error\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({\n path,\n score: computeScore(path, route.index),\n routesMeta,\n });\n };\n routes.forEach((route, index) => {\n // coarse-grain check for optional params\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n\n return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n\n let [first, ...rest] = segments;\n\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n let result: string[] = [];\n\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explodes _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(\n ...restExploded.map((subpath) =>\n subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n\n // Then if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n\n // for absolute paths, ensure `/` instead of empty segment\n return result.map((exploded) =>\n path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\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<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n branch: RouteBranch,\n pathname: string\n): AgnosticRouteMatch[] | null {\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: AgnosticRouteMatch[] = [];\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 = meta.route;\n\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams as Params,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route,\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n\n return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nexport function generatePath(\n originalPath: Path,\n params: {\n [key in PathParam]: string | null;\n } = {} as any\n): string {\n let path = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\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 path = path.replace(/\\*$/, \"/*\") as Path;\n }\n\n return (\n path\n .replace(\n /^:(\\w+)(\\??)/g,\n (_, key: PathParam, optional: string | undefined) => {\n let param = params[key];\n if (optional === \"?\") {\n return param == null ? \"\" : param;\n }\n if (param == null) {\n invariant(false, `Missing \":${key}\" param`);\n }\n return param;\n }\n )\n .replace(\n /\\/:(\\w+)(\\??)/g,\n (_, key: PathParam, optional: string | undefined) => {\n let param = params[key];\n if (optional === \"?\") {\n return param == null ? \"\" : `/${param}`;\n }\n if (param == null) {\n invariant(false, `Missing \":${key}\" param`);\n }\n return `/${param}`;\n }\n )\n // Remove any optional markers from optional static segments\n .replace(/\\?/g, \"\")\n .replace(/(\\/?)\\*/, (_, prefix, __, str) => {\n const star = \"*\" as PathParam;\n\n if (params[star] == null) {\n // If no splat was provided, trim the trailing slash _unless_ it's\n // the entire path\n return str === \"/*\" ? \"/\" : \"\";\n }\n\n // Apply the splat\n return `${prefix}${params[star]}`;\n })\n );\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: Path;\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 {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\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 = {\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/utils/match-path\n */\nexport function matchPath<\n ParamKey extends ParamParseKey,\n Path extends string\n>(\n pattern: PathPattern | Path,\n pathname: string\n): PathMatch | 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>(\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 if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n // Nothing to match for \"\" or \"/\"\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, paramNames];\n}\n\nfunction safelyDecodeURI(value: string) {\n try {\n return decodeURI(value);\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is is a ` +\n `malformed URL segment. This is probably due to a bad percent ` +\n `encoding (${error}).`\n );\n\n return value;\n }\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 * @private\n */\nexport function stripBasename(\n pathname: string,\n basename: string\n): string | null {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\")\n ? basename.length - 1\n : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * @private\n */\nexport function 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 @remix-run/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\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\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 getInvalidPathError(\n char: string,\n field: string,\n dest: string,\n path: Partial\n) {\n return (\n `Cannot include a '${char}' character in a manually specified ` +\n `\\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the ` +\n `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n `a string in and the router will parse it for you.`\n );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * \n * \n * \n *\n * \n * \n * }> // <-- Does not contribute\n * // <-- Does not contribute\n * \n * \n */\nexport function getPathContributingMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n return matches.filter(\n (match, index) =>\n index === 0 || (match.route.path && match.route.path.length > 0)\n );\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string,\n isPathRelative = false\n): Path {\n let to: Partial;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n let from: string;\n\n // Routing is relative to the current pathname if explicitly requested.\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 `` 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 if (isPathRelative || 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 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\" had one\n let hasExplicitTrailingSlash =\n toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash =\n (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (\n !path.pathname.endsWith(\"/\") &&\n (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\n\n/**\n * @private\n */\nexport function 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\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = (\n data: Data,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n return new Response(JSON.stringify(data), {\n ...responseInit,\n headers,\n });\n};\n\nexport interface TrackedPromise extends Promise {\n _tracked?: boolean;\n _data?: any;\n _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n private pendingKeysSet: Set = new Set();\n private controller: AbortController;\n private abortPromise: Promise;\n private unlistenAbortSignal: () => void;\n private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n new Set();\n data: Record;\n init?: ResponseInit;\n deferredKeys: string[] = [];\n\n constructor(data: Record, responseInit?: ResponseInit) {\n invariant(\n data && typeof data === \"object\" && !Array.isArray(data),\n \"defer() only accepts plain objects\"\n );\n\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject: (e: AbortedDeferredError) => void;\n this.abortPromise = new Promise((_, r) => (reject = r));\n this.controller = new AbortController();\n let onAbort = () =>\n reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () =>\n this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n\n this.data = Object.entries(data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: this.trackPromise(key, value),\n }),\n {}\n );\n\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n\n this.init = responseInit;\n }\n\n private trackPromise(\n key: string,\n value: Promise | unknown\n ): TrackedPromise | unknown {\n if (!(value instanceof Promise)) {\n return value;\n }\n\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n (data) => this.onSettle(promise, key, null, data as unknown),\n (error) => this.onSettle(promise, key, error as unknown)\n );\n\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n return promise;\n }\n\n private onSettle(\n promise: TrackedPromise,\n key: string,\n error: unknown,\n data?: unknown\n ): unknown {\n if (\n this.controller.signal.aborted &&\n error instanceof AbortedDeferredError\n ) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", { get: () => error });\n return Promise.reject(error);\n }\n\n this.pendingKeysSet.delete(key);\n\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n\n if (error) {\n Object.defineProperty(promise, \"_error\", { get: () => error });\n this.emit(false, key);\n return Promise.reject(error);\n }\n\n Object.defineProperty(promise, \"_data\", { get: () => data });\n this.emit(false, key);\n return data;\n }\n\n private emit(aborted: boolean, settledKey?: string) {\n this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n }\n\n subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n\n async resolveData(signal: AbortSignal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise((resolve) => {\n this.subscribe((aborted) => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n\n get unwrappedData() {\n invariant(\n this.data !== null && this.done,\n \"Can only unwrap data on initialized and settled deferreds\"\n );\n\n return Object.entries(this.data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: unwrapTrackedPromise(value),\n }),\n {}\n );\n }\n\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n return (\n value instanceof Promise && (value as TrackedPromise)._tracked === true\n );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\n\nexport type DeferFunction = (\n data: Record,\n init?: number | ResponseInit\n) => DeferredData;\n\nexport const defer: DeferFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n url: string,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n */\nexport class ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n error?: Error;\n internal: boolean;\n\n constructor(\n status: number,\n statusText: string | undefined,\n data: any,\n internal = false\n ) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n return (\n error != null &&\n typeof error.status === \"number\" &&\n typeof error.statusText === \"string\" &&\n typeof error.internal === \"boolean\" &&\n \"data\" in error\n );\n}\n","import type { History, Location, Path, To } from \"./history\";\nimport {\n Action as HistoryAction,\n createLocation,\n createPath,\n invariant,\n parsePath,\n} from \"./history\";\nimport type {\n DataResult,\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n DeferredResult,\n ErrorResult,\n FormEncType,\n FormMethod,\n RedirectResult,\n RouteData,\n AgnosticRouteObject,\n Submission,\n SuccessResult,\n AgnosticRouteMatch,\n MutationFormMethod,\n ShouldRevalidateFunction,\n} from \"./utils\";\nimport {\n DeferredData,\n ErrorResponse,\n ResultType,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n warning,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the basename for the router\n */\n get basename(): RouterInit[\"basename\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the current state of the router\n */\n get state(): RouterState;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the routes for this router instance\n */\n get routes(): AgnosticDataRouteObject[];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Initialize the router, including adding history listeners and kicking off\n * initial data fetches. Returns a function to cleanup listeners and abort\n * any in-progress loads\n */\n initialize(): Router;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Subscribe to router.state updates\n *\n * @param fn function to call with the new state\n */\n subscribe(fn: RouterSubscriber): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Enable scroll restoration behavior in the router\n *\n * @param savedScrollPositions Object that will manage positions, in case\n * it's being restored from sessionStorage\n * @param getScrollPosition Function to get the active Y scroll position\n * @param getKey Function to get the key to use for restoration\n */\n enableScrollRestoration(\n savedScrollPositions: Record,\n getScrollPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Navigate forward/backward in the history stack\n * @param to Delta to move in the history stack\n */\n navigate(to: number): Promise;\n\n /**\n * Navigate to the given path\n * @param to Path to navigate to\n * @param opts Navigation options (method, submission, etc.)\n */\n navigate(to: To, opts?: RouterNavigateOptions): Promise;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a fetcher load/submission\n *\n * @param key Fetcher key\n * @param routeId Route that owns the fetcher\n * @param href href to fetch\n * @param opts Fetcher options, (method, submission, etc.)\n */\n fetch(\n key: string,\n routeId: string,\n href: string,\n opts?: RouterNavigateOptions\n ): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a revalidation of all current route loaders and fetcher loads\n */\n revalidate(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to create an href for the given location\n * @param location\n */\n createHref(location: Location | URL): string;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to URL encode a destination path according to the internal\n * history implementation\n * @param to\n */\n encodeLocation(to: To): Path;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get/create a fetcher for the given key\n * @param key\n */\n getFetcher(key?: string): Fetcher;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete the fetcher for a given key\n * @param key\n */\n deleteFetcher(key?: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Cleanup listeners and abort any in-progress loads\n */\n dispose(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get a navigation blocker\n * @param key The identifier for the blocker\n * @param fn The blocker function implementation\n */\n getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete a navigation blocker\n * @param key The identifier for the blocker\n */\n deleteBlocker(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal fetch AbortControllers accessed by unit tests\n */\n _internalFetchControllers: Map;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal pending DeferredData instances accessed by unit tests\n */\n _internalActiveDeferreds: Map;\n}\n\n/**\n * State maintained internally by the router. During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n /**\n * The action of the most recent navigation\n */\n historyAction: HistoryAction;\n\n /**\n * The current location reflected by the router\n */\n location: Location;\n\n /**\n * The current set of route matches\n */\n matches: AgnosticDataRouteMatch[];\n\n /**\n * Tracks whether we've completed our initial data load\n */\n initialized: boolean;\n\n /**\n * Current scroll position we should start at for a new view\n * - number -> scroll position to restore to\n * - false -> do not restore scroll at all (used during submissions)\n * - null -> don't have a saved position, scroll to hash or top of page\n */\n restoreScrollPosition: number | false | null;\n\n /**\n * Indicate whether this navigation should skip resetting the scroll position\n * if we are unable to restore the scroll position\n */\n preventScrollReset: boolean;\n\n /**\n * Tracks the state of the current navigation\n */\n navigation: Navigation;\n\n /**\n * Tracks any in-progress revalidations\n */\n revalidation: RevalidationState;\n\n /**\n * Data from the loaders for the current matches\n */\n loaderData: RouteData;\n\n /**\n * Data from the action for the current matches\n */\n actionData: RouteData | null;\n\n /**\n * Errors caught from loaders for the current matches\n */\n errors: RouteData | null;\n\n /**\n * Map of current fetchers\n */\n fetchers: Map;\n\n /**\n * Map of current blockers\n */\n blockers: Map;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n Pick\n>;\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n basename?: string;\n routes: AgnosticRouteObject[];\n history: History;\n hydrationData?: HydrationState;\n}\n\n/**\n * State returned from a server-side query() call\n */\nexport interface StaticHandlerContext {\n basename: Router[\"basename\"];\n location: RouterState[\"location\"];\n matches: RouterState[\"matches\"];\n loaderData: RouterState[\"loaderData\"];\n actionData: RouterState[\"actionData\"];\n errors: RouterState[\"errors\"];\n statusCode: number;\n loaderHeaders: Record;\n actionHeaders: Record;\n activeDeferreds: Record | null;\n _deepestRenderedBoundaryId?: string | null;\n}\n\n/**\n * A StaticHandler instance manages a singular SSR navigation/fetch event\n */\nexport interface StaticHandler {\n dataRoutes: AgnosticDataRouteObject[];\n query(\n request: Request,\n opts?: { requestContext?: unknown }\n ): Promise;\n queryRoute(\n request: Request,\n opts?: { routeId?: string; requestContext?: unknown }\n ): Promise;\n}\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (state: RouterState): void;\n}\n\ninterface UseMatchesMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: unknown;\n handle: unknown;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n (location: Location, matches: UseMatchesMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\n/**\n * Options for a navigate() call for a Link navigation\n */\ntype LinkNavigateOptions = {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n};\n\n/**\n * Options for a navigate() call for a Form navigation\n */\ntype SubmissionNavigateOptions = {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n formMethod?: FormMethod;\n formEncType?: FormEncType;\n formData: FormData;\n};\n\n/**\n * Options to pass to navigate() for either a Link or Form navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions =\n | Omit\n | Omit;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n Idle: {\n state: \"idle\";\n location: undefined;\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n formData: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: FormMethod | undefined;\n formAction: string | undefined;\n formEncType: FormEncType | undefined;\n formData: FormData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates = {\n Idle: {\n state: \"idle\";\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n formData: undefined;\n data: TData | undefined;\n \" _hasFetcherDoneAnything \"?: boolean;\n };\n Loading: {\n state: \"loading\";\n formMethod: FormMethod | undefined;\n formAction: string | undefined;\n formEncType: FormEncType | undefined;\n formData: FormData | undefined;\n data: TData | undefined;\n \" _hasFetcherDoneAnything \"?: boolean;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n data: TData | undefined;\n \" _hasFetcherDoneAnything \"?: boolean;\n };\n};\n\nexport type Fetcher =\n FetcherStates[keyof FetcherStates];\n\ninterface BlockerBlocked {\n state: \"blocked\";\n reset(): void;\n proceed(): void;\n location: Location;\n}\n\ninterface BlockerUnblocked {\n state: \"unblocked\";\n reset: undefined;\n proceed: undefined;\n location: undefined;\n}\n\ninterface BlockerProceeding {\n state: \"proceeding\";\n reset: undefined;\n proceed: undefined;\n location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n /**\n * startNavigation does not need to complete the navigation because we\n * redirected or got interrupted\n */\n shortCircuited?: boolean;\n}\n\ninterface HandleActionResult extends ShortCircuitable {\n /**\n * Error thrown from the current action, keyed by the route containing the\n * error boundary to render the error. To be committed to the state after\n * loaders have completed\n */\n pendingActionError?: RouteData;\n /**\n * Data returned from the current action, keyed by the route owning the action.\n * To be committed to the state after loaders have completed\n */\n pendingActionData?: RouteData;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n /**\n * loaderData returned from the current set of loaders\n */\n loaderData?: RouterState[\"loaderData\"];\n /**\n * errors thrown from the current set of loaders\n */\n errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n routeId: string;\n path: string;\n match: AgnosticDataRouteMatch;\n matches: AgnosticDataRouteMatch[];\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n}\n\n/**\n * Wrapper object to allow us to throw any response out from callLoaderOrAction\n * for queryRouter while preserving whether or not it was thrown or returned\n * from the loader/action\n */\ninterface QueryRouteResponse {\n type: ResultType.data | ResultType.error;\n response: Response;\n}\n\nconst validMutationMethodsArr: MutationFormMethod[] = [\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n];\nconst validMutationMethods = new Set(\n validMutationMethodsArr\n);\n\nconst validRequestMethodsArr: FormMethod[] = [\n \"get\",\n ...validMutationMethodsArr,\n];\nconst validRequestMethods = new Set(validRequestMethodsArr);\n\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\n\nexport const IDLE_NAVIGATION: NavigationStates[\"Idle\"] = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n};\n\nexport const IDLE_FETCHER: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n};\n\nexport const IDLE_BLOCKER: BlockerUnblocked = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined,\n};\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nconst isBrowser =\n typeof window !== \"undefined\" &&\n typeof window.document !== \"undefined\" &&\n typeof window.document.createElement !== \"undefined\";\nconst isServer = !isBrowser;\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Create a router and listen to history POP navigations\n */\nexport function createRouter(init: RouterInit): Router {\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let dataRoutes = convertRoutesToDataRoutes(init.routes);\n // Cleanup function for history\n let unlistenHistory: (() => void) | null = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions: Record | null = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition: GetScrollPositionFunction | null = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n\n let initialMatches = matchRoutes(\n dataRoutes,\n init.history.location,\n init.basename\n );\n let initialErrors: RouteData | null = null;\n\n if (initialMatches == null) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname,\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n }\n\n let initialized =\n !initialMatches.some((m) => m.route.loader) || init.hydrationData != null;\n\n let router: Router;\n let state: RouterState = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n fetchers: new Map(),\n blockers: new Map(),\n };\n\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction: HistoryAction = HistoryAction.Pop;\n\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n\n // AbortController for the active navigation\n let pendingNavigationController: AbortController | null;\n\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidate()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes: string[] = [];\n\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads: string[] = [];\n\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map();\n\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map();\n\n // Fetchers that triggered redirect navigations from their actions\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map();\n\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map();\n\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let ignoreNextHistoryUpdate = false;\n\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (ignoreNextHistoryUpdate) {\n ignoreNextHistoryUpdate = false;\n return;\n }\n\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location \" +\n \"that was not created by @remix-run/router. This will fail silently in \" +\n \"production. This can happen if you are navigating outside the router \" +\n \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n \"router navigation APIs. This can also happen if you are using \" +\n \"createHashRouter and the user manually changes the URL.\"\n );\n\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction,\n });\n\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n ignoreNextHistoryUpdate = true;\n init.history.go(delta * -1);\n\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location,\n });\n // Re-do the same POP navigation we just blocked\n init.history.go(delta);\n },\n reset() {\n deleteBlocker(blockerKey!);\n updateState({ blockers: new Map(router.state.blockers) });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n if (!state.initialized) {\n startNavigation(HistoryAction.Pop, state.location);\n }\n\n return router;\n }\n\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n\n // Subscribe to state updates for the router\n function subscribe(fn: RouterSubscriber) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n\n // Update our state and notify the calling context of the change\n function updateState(newState: Partial): void {\n state = {\n ...state,\n ...newState,\n };\n subscribers.forEach((subscriber) => subscriber(state));\n }\n\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(\n location: Location,\n newState: Partial>\n ): void {\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload =\n state.actionData != null &&\n state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n state.navigation.state === \"loading\" &&\n location.state?._isRedirect !== true;\n\n let actionData: RouteData | null;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData\n ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n )\n : state.loaderData;\n\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n for (let [key] of blockerFunctions) {\n deleteBlocker(key);\n }\n\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset =\n pendingPreventScrollReset === true ||\n (state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n location.state?._isRedirect !== true);\n\n updateState({\n ...newState, // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(\n location,\n newState.matches || state.matches\n ),\n preventScrollReset,\n blockers: new Map(state.blockers),\n });\n\n if (isUninterruptedRevalidation) {\n // If this was an uninterrupted revalidation then do not touch history\n } else if (pendingAction === HistoryAction.Pop) {\n // Do nothing for POP - URL has already been updated\n } else if (pendingAction === HistoryAction.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === HistoryAction.Replace) {\n init.history.replace(location, location.state);\n }\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n cancelledFetcherLoads = [];\n }\n\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(\n to: number | To,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(to, opts);\n\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation),\n };\n\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n let historyAction = HistoryAction.Push;\n\n if (userReplace === true) {\n historyAction = HistoryAction.Replace;\n } else if (userReplace === false) {\n // no-op\n } else if (\n submission != null &&\n isMutationMethod(submission.formMethod) &&\n submission.formAction === state.location.pathname + state.location.search\n ) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = HistoryAction.Replace;\n }\n\n let preventScrollReset =\n opts && \"preventScrollReset\" in opts\n ? opts.preventScrollReset === true\n : undefined;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation,\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n deleteBlocker(blockerKey!);\n updateState({ blockers: new Map(state.blockers) });\n },\n });\n return;\n }\n\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n });\n }\n\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true,\n });\n return;\n }\n\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n { overrideNavigation: state.navigation }\n );\n }\n\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(\n historyAction: HistoryAction,\n location: Location,\n opts?: {\n submission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponse;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n }\n ): Promise {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation =\n (opts && opts.startUninterruptedRevalidation) === true;\n\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(dataRoutes, location, init.basename);\n\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(dataRoutes);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(location, {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n });\n return;\n }\n\n // Short circuit if it's only a hash change and not a mutation submission\n // For example, on /page#hash and submit a
which will\n // default to a navigation to /page\n if (\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches });\n return;\n }\n\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let pendingActionData: RouteData | undefined;\n let pendingError: RouteData | undefined;\n\n if (opts && opts.pendingError) {\n // If we have a pendingError, it means the user attempted a GET submission\n // with binary FormData so assign here and skip to handleLoaders. That\n // way we handle calling loaders above the boundary etc. It's not really\n // different from an actionError in that sense.\n pendingError = {\n [findNearestBoundary(matches).route.id]: opts.pendingError,\n };\n } else if (\n opts &&\n opts.submission &&\n isMutationMethod(opts.submission.formMethod)\n ) {\n // Call action if we received an action submission\n let actionOutput = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n { replace: opts.replace }\n );\n\n if (actionOutput.shortCircuited) {\n return;\n }\n\n pendingActionData = actionOutput.pendingActionData;\n pendingError = actionOutput.pendingActionError;\n\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n ...opts.submission,\n };\n loadingNavigation = navigation;\n\n // Create a GET request for the loaders\n request = new Request(request.url, { signal: request.signal });\n }\n\n // Call loaders\n let { shortCircuited, loaderData, errors } = await handleLoaders(\n request,\n location,\n matches,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.replace,\n pendingActionData,\n pendingError\n );\n\n if (shortCircuited) {\n return;\n }\n\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n loaderData,\n errors,\n });\n }\n\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(\n request: Request,\n location: Location,\n submission: Submission,\n matches: AgnosticDataRouteMatch[],\n opts?: { replace?: boolean }\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n ...submission,\n };\n updateState({ navigation });\n\n // Call our action and get the result\n let result: DataResult;\n let actionMatch = getTargetMatch(matches, location);\n\n if (!actionMatch.route.action) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id,\n }),\n };\n } else {\n result = await callLoaderOrAction(\n \"action\",\n request,\n actionMatch,\n matches,\n router.basename\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n }\n\n if (isRedirectResult(result)) {\n let replace: boolean;\n if (opts && opts.replace != null) {\n replace = opts.replace;\n } else {\n // If the user didn't explicity indicate replace behavior, replace if\n // we redirected to the exact same location we're currently at to avoid\n // double back-buttons\n replace =\n result.location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(state, result, { submission, replace });\n return { shortCircuited: true };\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n // By default, all submissions are REPLACE navigations, but if the\n // action threw an error that'll be rendered in an errorElement, we fall\n // back to PUSH so that the user can use the back button to get back to\n // the pre-submission form location to try again\n if ((opts && opts.replace) !== true) {\n pendingAction = HistoryAction.Push;\n }\n\n return {\n // Send back an empty object we can use to clear out any prior actionData\n pendingActionData: {},\n pendingActionError: { [boundaryMatch.route.id]: result.error },\n };\n }\n\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n return {\n pendingActionData: { [actionMatch.route.id]: result.data },\n };\n }\n\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n overrideNavigation?: Navigation,\n submission?: Submission,\n replace?: boolean,\n pendingActionData?: RouteData,\n pendingError?: RouteData\n ): Promise {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation = overrideNavigation;\n if (!loadingNavigation) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n ...submission,\n };\n loadingNavigation = navigation;\n }\n\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission = submission\n ? submission\n : loadingNavigation.formMethod &&\n loadingNavigation.formAction &&\n loadingNavigation.formData &&\n loadingNavigation.formEncType\n ? {\n formMethod: loadingNavigation.formMethod,\n formAction: loadingNavigation.formAction,\n formData: loadingNavigation.formData,\n formEncType: loadingNavigation.formEncType,\n }\n : undefined;\n\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n pendingActionData,\n pendingError,\n fetchLoadMatches\n );\n\n // Cancel pending deferreds for no-longer-matched routes or routes we're\n // about to reload. Note that if this is an action reload we would have\n // already cancelled all pending deferreds so this would be a no-op\n cancelActiveDeferreds(\n (routeId) =>\n !(matches && matches.some((m) => m.route.id === routeId)) ||\n (matchesToLoad && matchesToLoad.some((m) => m.route.id === routeId))\n );\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n completeNavigation(location, {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingError || null,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n });\n return { shortCircuited: true };\n }\n\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n if (!isUninterruptedRevalidation) {\n revalidatingFetchers.forEach((rf) => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n data: fetcher && fetcher.data,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n let actionData = pendingActionData || state.actionData;\n updateState({\n navigation: loadingNavigation,\n ...(actionData\n ? Object.keys(actionData).length === 0\n ? { actionData: null }\n : { actionData }\n : {}),\n ...(revalidatingFetchers.length > 0\n ? { fetchers: new Map(state.fetchers) }\n : {}),\n });\n }\n\n pendingNavigationLoadId = ++incrementingLoadId;\n revalidatingFetchers.forEach((rf) =>\n fetchControllers.set(rf.key, pendingNavigationController!)\n );\n\n let { results, loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n request\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect(results);\n if (redirect) {\n await startRedirectNavigation(state, redirect, { replace });\n return { shortCircuited: true };\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n matchesToLoad,\n loaderResults,\n pendingError,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe((aborted) => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n\n markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n\n return {\n loaderData,\n errors,\n ...(didAbortFetchLoads || revalidatingFetchers.length > 0\n ? { fetchers: new Map(state.fetchers) }\n : {}),\n };\n }\n\n function getFetcher(key: string): Fetcher {\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(\n key: string,\n routeId: string,\n href: string,\n opts?: RouterFetchOptions\n ) {\n if (isServer) {\n throw new Error(\n \"router.fetch() was called during the server render, but it shouldn't be. \" +\n \"You are likely calling a useFetcher() method in the body of your component. \" +\n \"Try moving it to a useEffect or a callback.\"\n );\n }\n\n if (fetchControllers.has(key)) abortFetcher(key);\n\n let matches = matchRoutes(dataRoutes, href, init.basename);\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: href })\n );\n return;\n }\n\n let { path, submission } = normalizeNavigateOptions(href, opts, true);\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(key, routeId, path, match, matches, submission);\n return;\n }\n\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, { routeId, path, match, matches });\n handleFetcherLoader(key, routeId, path, match, matches, submission);\n }\n\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n requestMatches: AgnosticDataRouteMatch[],\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error);\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n ...submission,\n data: existingFetcher && existingFetcher.data,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(key, fetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n\n // Call the action for the fetcher\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n fetchControllers.set(key, abortController);\n\n let actionResult = await callLoaderOrAction(\n \"action\",\n fetchRequest,\n match,\n requestMatches,\n router.basename\n );\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by ou our own fetcher\n // re-submit which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n fetchRedirectIds.add(key);\n let loadingFetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n ...submission,\n data: undefined,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(key, loadingFetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n\n return startRedirectNavigation(state, actionResult, {\n isFetchActionRedirect: true,\n });\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n\n nextLocation,\n abortController.signal\n );\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(dataRoutes, state.navigation.location, init.basename)\n : state.matches;\n\n invariant(matches, \"Didn't find any matches after fetcher action\");\n\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n\n let loadFetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n data: actionResult.data,\n ...submission,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(key, loadFetcher);\n\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n { [match.route.id]: actionResult.data },\n undefined, // No need to send through errors since we short circuit above\n fetchLoadMatches\n );\n\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers\n .filter((rf) => rf.key !== key)\n .forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n data: existingFetcher && existingFetcher.data,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(staleKey, revalidatingFetcher);\n fetchControllers.set(staleKey, abortController);\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let { results, loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n revalidationRequest\n );\n\n if (abortController.signal.aborted) {\n return;\n }\n\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n let redirect = findRedirect(results);\n if (redirect) {\n return startRedirectNavigation(state, redirect);\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n state.matches,\n matchesToLoad,\n loaderResults,\n undefined,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n let doneFetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: actionResult.data,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(key, doneFetcher);\n\n let didAbortFetchLoads = abortStaleFetchLoads(loadId);\n\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (\n state.navigation.state === \"loading\" &&\n loadId > pendingNavigationLoadId\n ) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers),\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n ...(didAbortFetchLoads ? { fetchers: new Map(state.fetchers) } : {}),\n });\n isRevalidationRequired = false;\n }\n }\n\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n // Put this fetcher into it's loading state\n let loadingFetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n ...submission,\n data: existingFetcher && existingFetcher.data,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(key, loadingFetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n\n // Call the loader for this fetcher route match\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n fetchControllers.set(key, abortController);\n let result: DataResult = await callLoaderOrAction(\n \"loader\",\n fetchRequest,\n match,\n matches,\n router.basename\n );\n\n // Deferred isn't supported for fetcher loads, await everything and treat it\n // as a normal load. resolveDeferredData will return undefined if this\n // fetcher gets aborted, so we just leave result untouched and short circuit\n // below if that happens\n if (isDeferredResult(result)) {\n result =\n (await resolveDeferredData(result, fetchRequest.signal, true)) ||\n result;\n }\n\n // We can delete this so long as we weren't aborted by ou our own fetcher\n // re-load which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n\n if (fetchRequest.signal.aborted) {\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n await startRedirectNavigation(state, result);\n return;\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n state.fetchers.delete(key);\n // TODO: In remix, this would reset to IDLE_NAVIGATION if it was a catch -\n // do we need to behave any differently with our non-redirect errors?\n // What if it was a non-redirect Response?\n updateState({\n fetchers: new Map(state.fetchers),\n errors: {\n [boundaryMatch.route.id]: result.error,\n },\n });\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n let doneFetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: result.data,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(key, doneFetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(\n state: RouterState,\n redirect: RedirectResult,\n {\n submission,\n replace,\n isFetchActionRedirect,\n }: {\n submission?: Submission;\n replace?: boolean;\n isFetchActionRedirect?: boolean;\n } = {}\n ) {\n if (redirect.revalidate) {\n isRevalidationRequired = true;\n }\n\n let redirectLocation = createLocation(\n state.location,\n redirect.location,\n // TODO: This can be removed once we get rid of useTransition in Remix v2\n {\n _isRedirect: true,\n ...(isFetchActionRedirect ? { _isFetchActionRedirect: true } : {}),\n }\n );\n invariant(\n redirectLocation,\n \"Expected a location on the redirect navigation\"\n );\n\n // Check if this an absolute external redirect that goes to a new origin\n if (\n ABSOLUTE_URL_REGEX.test(redirect.location) &&\n isBrowser &&\n typeof window?.location !== \"undefined\"\n ) {\n let newOrigin = init.history.createURL(redirect.location).origin;\n if (window.location.origin !== newOrigin) {\n if (replace) {\n window.location.replace(redirect.location);\n } else {\n window.location.assign(redirect.location);\n }\n return;\n }\n }\n\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n\n let redirectHistoryAction =\n replace === true ? HistoryAction.Replace : HistoryAction.Push;\n\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let { formMethod, formAction, formEncType, formData } = state.navigation;\n if (!submission && formMethod && formAction && formData && formEncType) {\n submission = {\n formMethod,\n formAction,\n formEncType,\n formData,\n };\n }\n\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n if (\n redirectPreserveMethodStatusCodes.has(redirect.status) &&\n submission &&\n isMutationMethod(submission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...submission,\n formAction: redirect.location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // Otherwise, we kick off a new loading navigation, preserving the\n // submission info for the duration of this navigation\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation: {\n state: \"loading\",\n location: redirectLocation,\n formMethod: submission ? submission.formMethod : undefined,\n formAction: submission ? submission.formAction : undefined,\n formEncType: submission ? submission.formEncType : undefined,\n formData: submission ? submission.formData : undefined,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n }\n }\n\n async function callLoadersAndMaybeResolveData(\n currentMatches: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n fetchersToLoad: RevalidatingFetcher[],\n request: Request\n ) {\n // Call all navigation loaders and revalidating fetcher loaders in parallel,\n // then slice off the results into separate arrays so we can handle them\n // accordingly\n let results = await Promise.all([\n ...matchesToLoad.map((match) =>\n callLoaderOrAction(\"loader\", request, match, matches, router.basename)\n ),\n ...fetchersToLoad.map((f) =>\n callLoaderOrAction(\n \"loader\",\n createClientSideRequest(init.history, f.path, request.signal),\n f.match,\n f.matches,\n router.basename\n )\n ),\n ]);\n let loaderResults = results.slice(0, matchesToLoad.length);\n let fetcherResults = results.slice(matchesToLoad.length);\n\n await Promise.all([\n resolveDeferredResults(\n currentMatches,\n matchesToLoad,\n loaderResults,\n request.signal,\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n request.signal,\n true\n ),\n ]);\n\n return { results, loaderResults, fetcherResults };\n }\n\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.push(key);\n abortFetcher(key);\n }\n });\n }\n\n function setFetcherError(key: string, routeId: string, error: any) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState({\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n });\n }\n\n function deleteFetcher(key: string): void {\n if (fetchControllers.has(key)) abortFetcher(key);\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n state.fetchers.delete(key);\n }\n\n function abortFetcher(key: string) {\n let controller = fetchControllers.get(key);\n invariant(controller, `Expected fetch controller: ${key}`);\n controller.abort();\n fetchControllers.delete(key);\n }\n\n function markFetchersDone(keys: string[]) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: fetcher.data,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): void {\n let doneKeys = [];\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n }\n }\n markFetchersDone(doneKeys);\n }\n\n function abortStaleFetchLoads(landedId: number): boolean {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n\n function getBlocker(key: string, fn: BlockerFunction) {\n let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n\n return blocker;\n }\n\n function deleteBlocker(key: string) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key: string, newBlocker: Blocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(\n (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n\n state.blockers.set(key, newBlocker);\n updateState({ blockers: new Map(state.blockers) });\n }\n\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n }: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n }): string | undefined {\n if (blockerFunctions.size === 0) {\n return;\n }\n\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n\n function cancelActiveDeferreds(\n predicate?: (routeId: string) => boolean\n ): string[] {\n let cancelledRouteIds: string[] = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the component\n function enableScrollRestoration(\n positions: Record,\n getPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || ((location) => location.key);\n\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered \n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollRestorationKey && getScrollPosition) {\n let userMatches = matches.map((m) =>\n createUseMatchesMatch(m, state.loaderData)\n );\n let key = getScrollRestorationKey(location, userMatches) || location.key;\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions && getScrollRestorationKey && getScrollPosition) {\n let userMatches = matches.map((m) =>\n createUseMatchesMatch(m, state.loaderData)\n );\n let key = getScrollRestorationKey(location, userMatches) || location.key;\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n router = {\n get basename() {\n return init.basename;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to: To) => init.history.createHref(to),\n encodeLocation: (to: To) => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: {\n basename?: string;\n }\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let dataRoutes = convertRoutesToDataRoutes(routes);\n let basename = (opts ? opts.basename : null) || \"/\";\n\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n */\n async function query(\n request: Request,\n { requestContext }: { requestContext?: unknown } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method.toLowerCase();\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"head\") {\n let error = getInternalRouterError(405, { method });\n let { matches: methodNotAllowedMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n } else if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let result = await queryImpl(request, location, matches, requestContext);\n if (isResponse(result)) {\n return result;\n }\n\n // When returning StaticHandlerContext, we patch back in the location here\n // since we need it for React Context. But this helps keep our submit and\n // loadRouteData operating on a Request instead of a Location\n return { location, basename, ...result };\n }\n\n /**\n * The queryRoute() method is intended for targeted route requests, either\n * for fetch ?_data requests or resource route requests. In this case, we\n * are only ever calling a single action or loader, and we are returning the\n * returned value directly. In most cases, this will be a Response returned\n * from the action/loader, but it may be a primitive or other value as well -\n * and in such cases the calling context should handle that accordingly.\n *\n * We do respect the throw/return differentiation, so if an action/loader\n * throws, then this method will throw the value. This is important so we\n * can do proper boundary identification in Remix where a thrown Response\n * must go to the Catch Boundary but a returned Response is happy-path.\n *\n * One thing to note is that any Router-initiated Errors that make sense\n * to associate with a status code will be thrown as an ErrorResponse\n * instance which include the raw Error, such that the calling context can\n * serialize the error as they see fit while including the proper response\n * code. Examples here are 404 and 405 errors that occur prior to reaching\n * any user-defined loaders.\n */\n async function queryRoute(\n request: Request,\n {\n routeId,\n requestContext,\n }: { requestContext?: unknown; routeId?: string } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method.toLowerCase();\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"head\" && method !== \"options\") {\n throw getInternalRouterError(405, { method });\n } else if (!matches) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let match = routeId\n ? matches.find((m) => m.route.id === routeId)\n : getTargetMatch(matches, location);\n\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId,\n });\n } else if (!match) {\n // This should never hit I don't think?\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n match\n );\n if (isResponse(result)) {\n return result;\n }\n\n let error = result.errors ? Object.values(result.errors)[0] : undefined;\n if (error !== undefined) {\n // If we got back result.errors, that means the loader/action threw\n // _something_ that wasn't a Response, but it's not guaranteed/required\n // to be an `instanceof Error` either, so we have to use throw here to\n // preserve the \"error\" state outside of queryImpl.\n throw error;\n }\n\n // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n\n if (result.loaderData) {\n let data = Object.values(result.loaderData)[0];\n if (result.activeDeferreds?.[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n\n return undefined;\n }\n\n async function queryImpl(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n routeMatch?: AgnosticDataRouteMatch\n ): Promise | Response> {\n invariant(\n request.signal,\n \"query()/queryRoute() requests must contain an AbortController signal\"\n );\n\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(\n request,\n matches,\n routeMatch || getTargetMatch(matches, location),\n requestContext,\n routeMatch != null\n );\n return result;\n }\n\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n routeMatch\n );\n return isResponse(result)\n ? result\n : {\n ...result,\n actionData: null,\n actionHeaders: {},\n };\n } catch (e) {\n // If the user threw/returned a Response in callLoaderOrAction, we throw\n // it to bail out and then return or throw here based on whether the user\n // returned or threw\n if (isQueryRouteResponse(e)) {\n if (e.type === ResultType.error && !isRedirectResponse(e.response)) {\n throw e.response;\n }\n return e.response;\n }\n // Redirects are always returned since they don't propagate to catch\n // boundaries\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n\n async function submit(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n actionMatch: AgnosticDataRouteMatch,\n requestContext: unknown,\n isRouteRequest: boolean\n ): Promise | Response> {\n let result: DataResult;\n\n if (!actionMatch.route.action) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id,\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n } else {\n result = await callLoaderOrAction(\n \"action\",\n request,\n actionMatch,\n matches,\n basename,\n true,\n isRouteRequest,\n requestContext\n );\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(`${method}() call aborted`);\n }\n }\n\n if (isRedirectResult(result)) {\n // Uhhhh - this should never happen, we should always throw these from\n // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n // can get back on the \"throw all redirect responses\" train here should\n // this ever happen :/\n throw new Response(null, {\n status: result.status,\n headers: {\n Location: result.location,\n },\n });\n }\n\n if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, { type: \"defer-action\" });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n }\n\n if (isRouteRequest) {\n // Note: This should only be non-Response values if we get here, since\n // isRouteRequest should throw any Response received in callLoaderOrAction\n if (isErrorResult(result)) {\n throw result.error;\n }\n\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: { [actionMatch.route.id]: result.data },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n let context = await loadRouteData(\n request,\n matches,\n requestContext,\n undefined,\n {\n [boundaryMatch.route.id]: result.error,\n }\n );\n\n // action status codes take precedence over loader status codes\n return {\n ...context,\n statusCode: isRouteErrorResponse(result.error)\n ? result.error.status\n : 500,\n actionData: null,\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n // Create a GET request for the loaders\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal,\n });\n let context = await loadRouteData(loaderRequest, matches, requestContext);\n\n return {\n ...context,\n // action status codes take precedence over loader status codes\n ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n actionData: {\n [actionMatch.route.id]: result.data,\n },\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n async function loadRouteData(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n routeMatch?: AgnosticDataRouteMatch,\n pendingActionError?: RouteData\n ): Promise<\n | Omit<\n StaticHandlerContext,\n \"location\" | \"basename\" | \"actionData\" | \"actionHeaders\"\n >\n | Response\n > {\n let isRouteRequest = routeMatch != null;\n\n // Short circuit if we have no loaders to run (queryRoute())\n if (isRouteRequest && !routeMatch?.route.loader) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch?.route.id,\n });\n }\n\n let requestMatches = routeMatch\n ? [routeMatch]\n : getLoaderMatchesUntilBoundary(\n matches,\n Object.keys(pendingActionError || {})[0]\n );\n let matchesToLoad = requestMatches.filter((m) => m.route.loader);\n\n // Short circuit if we have no loaders to run (query())\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce(\n (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n {}\n ),\n errors: pendingActionError || null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let results = await Promise.all([\n ...matchesToLoad.map((match) =>\n callLoaderOrAction(\n \"loader\",\n request,\n match,\n matches,\n basename,\n true,\n isRouteRequest,\n requestContext\n )\n ),\n ]);\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(`${method}() call aborted`);\n }\n\n // Process and commit output from loaders\n let activeDeferreds = new Map();\n let context = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingActionError,\n activeDeferreds\n );\n\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set(\n matchesToLoad.map((match) => match.route.id)\n );\n matches.forEach((match) => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n\n return {\n ...context,\n matches,\n activeDeferreds:\n activeDeferreds.size > 0\n ? Object.fromEntries(activeDeferreds.entries())\n : null,\n };\n }\n\n return {\n dataRoutes,\n query,\n queryRoute,\n };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n routes: AgnosticDataRouteObject[],\n context: StaticHandlerContext,\n error: any\n) {\n let newContext: StaticHandlerContext = {\n ...context,\n statusCode: 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error,\n },\n };\n return newContext;\n}\n\nfunction isSubmissionNavigation(\n opts: RouterNavigateOptions\n): opts is SubmissionNavigateOptions {\n return opts != null && \"formData\" in opts;\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n to: To,\n opts?: RouterNavigateOptions,\n isFetcher = false\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponse;\n} {\n let path = typeof to === \"string\" ? to : createPath(to);\n\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod }),\n };\n }\n\n // Create a Submission on non-GET navigations\n let submission: Submission | undefined;\n if (opts.formData) {\n submission = {\n formMethod: opts.formMethod || \"get\",\n formAction: stripHashFromPath(path),\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData: opts.formData,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n let searchParams = convertFormDataToSearchParams(opts.formData);\n // Since fetcher GET submissions only run a single loader (as opposed to\n // navigation GET submissions which run all loaders), we need to preserve\n // any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n\n return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n matches: AgnosticDataRouteMatch[],\n boundaryId?: string\n) {\n let boundaryMatches = matches;\n if (boundaryId) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n boundaryMatches = matches.slice(0, index);\n }\n }\n return boundaryMatches;\n}\n\nfunction getMatchesToLoad(\n history: History,\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n submission: Submission | undefined,\n location: Location,\n isRevalidationRequired: boolean,\n cancelledDeferredRoutes: string[],\n cancelledFetcherLoads: string[],\n pendingActionData?: RouteData,\n pendingError?: RouteData,\n fetchLoadMatches?: Map\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n let actionResult = pendingError\n ? Object.values(pendingError)[0]\n : pendingActionData\n ? Object.values(pendingActionData)[0]\n : undefined;\n\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n\n let defaultShouldRevalidate =\n // Forced revalidation due to submission, useRevalidate, or X-Remix-Revalidate\n isRevalidationRequired ||\n // Clicked the same link, resubmitted a GET form\n currentUrl.toString() === nextUrl.toString() ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search;\n\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryId = pendingError ? Object.keys(pendingError)[0] : undefined;\n let boundaryMatches = getLoaderMatchesUntilBoundary(matches, boundaryId);\n\n let navigationMatches = boundaryMatches.filter((match, index) => {\n if (match.route.loader == null) {\n return false;\n }\n\n // Always call the loader on new route instances and pending defer cancellations\n if (\n isNewLoader(state.loaderData, state.matches[index], match) ||\n cancelledDeferredRoutes.some((id) => id === match.route.id)\n ) {\n return true;\n }\n\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n\n return shouldRevalidateLoader(match, {\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params,\n ...submission,\n actionResult,\n defaultShouldRevalidate:\n defaultShouldRevalidate ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches &&\n fetchLoadMatches.forEach((f, key) => {\n if (!matches.some((m) => m.route.id === f.routeId)) {\n // This fetcher is not going to be present in the subsequent render so\n // there's no need to revalidate it\n return;\n } else if (cancelledFetcherLoads.includes(key)) {\n // This fetcher was cancelled from a prior action submission - force reload\n revalidatingFetchers.push({ key, ...f });\n } else {\n // Revalidating fetchers are decoupled from the route matches since they\n // hit a static href, so they _always_ check shouldRevalidate and the\n // default is strictly if a revalidation is explicitly required (action\n // submissions, useRevalidator, X-Remix-Revalidate).\n let shouldRevalidate = shouldRevalidateLoader(f.match, {\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params,\n ...submission,\n actionResult,\n defaultShouldRevalidate,\n });\n if (shouldRevalidate) {\n revalidatingFetchers.push({ key, ...f });\n }\n }\n });\n\n return [navigationMatches, revalidatingFetchers];\n}\n\nfunction isNewLoader(\n currentLoaderData: RouteData,\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n (currentPath != null &&\n currentPath.endsWith(\"*\") &&\n currentMatch.params[\"*\"] !== match.params[\"*\"])\n );\n}\n\nfunction shouldRevalidateLoader(\n loaderMatch: AgnosticDataRouteMatch,\n arg: Parameters[0]\n) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n\n return arg.defaultShouldRevalidate;\n}\n\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n basename = \"/\",\n isStaticRequest: boolean = false,\n isRouteRequest: boolean = false,\n requestContext?: unknown\n): Promise {\n let resultType;\n let result;\n\n // Setup a promise we can race against so that abort signals short circuit\n let reject: () => void;\n let abortPromise = new Promise((_, r) => (reject = r));\n let onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n\n try {\n let handler = match.route[type];\n invariant(\n handler,\n `Could not find the ${type} to run on the \"${match.route.id}\" route`\n );\n\n result = await Promise.race([\n handler({ request, params: match.params, context: requestContext }),\n abortPromise,\n ]);\n\n invariant(\n result !== undefined,\n `You defined ${type === \"action\" ? \"an action\" : \"a loader\"} for route ` +\n `\"${match.route.id}\" but didn't return anything from your \\`${type}\\` ` +\n `function. Please return a value or \\`null\\`.`\n );\n } catch (e) {\n resultType = ResultType.error;\n result = e;\n } finally {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n\n if (isResponse(result)) {\n let status = result.status;\n\n // Process redirects\n if (redirectStatusCodes.has(status)) {\n let location = result.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n\n // Support relative routing in internal redirects\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n let activeMatches = matches.slice(0, matches.indexOf(match) + 1);\n let routePathnames = getPathContributingMatches(activeMatches).map(\n (match) => match.pathnameBase\n );\n let resolvedLocation = resolveTo(\n location,\n routePathnames,\n new URL(request.url).pathname\n );\n invariant(\n createPath(resolvedLocation),\n `Unable to resolve redirect location: ${location}`\n );\n\n // Prepend the basename to the redirect location if we have one\n if (basename) {\n let path = resolvedLocation.pathname;\n resolvedLocation.pathname =\n path === \"/\" ? basename : joinPaths([basename, path]);\n }\n\n location = createPath(resolvedLocation);\n } else if (!isStaticRequest) {\n // Strip off the protocol+origin for same-origin absolute redirects.\n // If this is a static reques, we can let it go back to the browser\n // as-is\n let currentUrl = new URL(request.url);\n let url = location.startsWith(\"//\")\n ? new URL(currentUrl.protocol + location)\n : new URL(location);\n if (url.origin === currentUrl.origin) {\n location = url.pathname + url.search + url.hash;\n }\n }\n\n // Don't process redirects in the router during static requests requests.\n // Instead, throw the Response and let the server handle it with an HTTP\n // redirect. We also update the Location header in place in this flow so\n // basename and relative routing is taken into account\n if (isStaticRequest) {\n result.headers.set(\"Location\", location);\n throw result;\n }\n\n return {\n type: ResultType.redirect,\n status,\n location,\n revalidate: result.headers.get(\"X-Remix-Revalidate\") !== null,\n };\n }\n\n // For SSR single-route requests, we want to hand Responses back directly\n // without unwrapping. We do this with the QueryRouteResponse wrapper\n // interface so we can know whether it was returned or thrown\n if (isRouteRequest) {\n // eslint-disable-next-line no-throw-literal\n throw {\n type: resultType || ResultType.data,\n response: result,\n };\n }\n\n let data: any;\n let contentType = result.headers.get(\"Content-Type\");\n // Check between word boundaries instead of startsWith() due to the last\n // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n data = await result.json();\n } else {\n data = await result.text();\n }\n\n if (resultType === ResultType.error) {\n return {\n type: resultType,\n error: new ErrorResponse(status, result.statusText, data),\n headers: result.headers,\n };\n }\n\n return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n if (resultType === ResultType.error) {\n return { type: resultType, error: result };\n }\n\n if (result instanceof DeferredData) {\n return { type: ResultType.deferred, deferredData: result };\n }\n\n return { type: ResultType.data, data: result };\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n history: History,\n location: string | Location,\n signal: AbortSignal,\n submission?: Submission\n): Request {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init: RequestInit = { signal };\n\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType, formData } = submission;\n init.method = formMethod.toUpperCase();\n init.body =\n formEncType === \"application/x-www-form-urlencoded\"\n ? convertFormDataToSearchParams(formData)\n : formData;\n }\n\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n let searchParams = new URLSearchParams();\n\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, value instanceof File ? value.name : value);\n }\n\n return searchParams;\n}\n\nfunction processRouteLoaderData(\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingError: RouteData | undefined,\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors: RouterState[\"errors\"] | null;\n statusCode: number;\n loaderHeaders: Record;\n} {\n // Fill in loaderData/errors from our loaders\n let loaderData: RouterState[\"loaderData\"] = {};\n let errors: RouterState[\"errors\"] | null = null;\n let statusCode: number | undefined;\n let foundError = false;\n let loaderHeaders: Record = {};\n\n // Process loader results into state.loaderData/state.errors\n results.forEach((result, index) => {\n let id = matchesToLoad[index].route.id;\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n // Look upwards from the matched route for the closest ancestor\n // error boundary, defaulting to the root match\n let boundaryMatch = findNearestBoundary(matches, id);\n let error = result.error;\n // If we have a pending action error, we report it at the highest-route\n // that throws a loader error, and then clear it out to indicate that\n // it was consumed\n if (pendingError) {\n error = Object.values(pendingError)[0];\n pendingError = undefined;\n }\n\n errors = errors || {};\n\n // Prefer higher error values if lower errors bubble to the same boundary\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n\n // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\n\n // Once we find our first (highest) error, we set the status code and\n // prevent deeper status codes from overriding\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error)\n ? result.error.status\n : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n if (isDeferredResult(result)) {\n activeDeferreds.set(id, result.deferredData);\n loaderData[id] = result.deferredData.data;\n } else {\n loaderData[id] = result.data;\n }\n\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (\n result.statusCode != null &&\n result.statusCode !== 200 &&\n !foundError\n ) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n });\n\n // If we didn't consume the pending action error (i.e., all loaders\n // resolved), then consume it here. Also clear out any loaderData for the\n // throwing route\n if (pendingError) {\n errors = pendingError;\n loaderData[Object.keys(pendingError)[0]] = undefined;\n }\n\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders,\n };\n}\n\nfunction processLoaderData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingError: RouteData | undefined,\n revalidatingFetchers: RevalidatingFetcher[],\n fetcherResults: DataResult[],\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors?: RouterState[\"errors\"];\n} {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingError,\n activeDeferreds\n );\n\n // Process results from our revalidating fetchers\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let { key, match } = revalidatingFetchers[index];\n invariant(\n fetcherResults !== undefined && fetcherResults[index] !== undefined,\n \"Did not find corresponding fetcher result\"\n );\n let result = fetcherResults[index];\n\n // Process fetcher non-redirect errors\n if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error,\n };\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: result.data,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n loaderData: RouteData,\n newLoaderData: RouteData,\n matches: AgnosticDataRouteMatch[],\n errors: RouteData | null | undefined\n): RouteData {\n let mergedLoaderData = { ...newLoaderData };\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n } else {\n // No-op - this is so we ignore existing data if we have a key in the\n // incoming object with an undefined value, which is how we unset a prior\n // loaderData if we encounter a loader error\n }\n } else if (loaderData[id] !== undefined) {\n mergedLoaderData[id] = loaderData[id];\n }\n\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n matches: AgnosticDataRouteMatch[],\n routeId?: string\n): AgnosticDataRouteMatch {\n let eligibleMatches = routeId\n ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n : [...matches];\n return (\n eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n matches[0]\n );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n matches: AgnosticDataRouteMatch[];\n route: AgnosticDataRouteObject;\n} {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route = routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`,\n };\n\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route,\n },\n ],\n route,\n };\n}\n\nfunction getInternalRouterError(\n status: number,\n {\n pathname,\n routeId,\n method,\n type,\n }: {\n pathname?: string;\n routeId?: string;\n method?: string;\n type?: \"defer-action\";\n } = {}\n) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method} request to \"${pathname}\" but ` +\n `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n `did not provide an \\`action\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n\n return new ErrorResponse(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(results: DataResult[]): RedirectResult | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return result;\n }\n }\n}\n\nfunction stripHashFromPath(path: To) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n return (\n a.pathname === b.pathname && a.search === b.search && a.hash !== b.hash\n );\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n return (result && result.type) === ResultType.redirect;\n}\n\nfunction isResponse(value: any): value is Response {\n return (\n value != null &&\n typeof value.status === \"number\" &&\n typeof value.statusText === \"string\" &&\n typeof value.headers === \"object\" &&\n typeof value.body !== \"undefined\"\n );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n if (!isResponse(result)) {\n return false;\n }\n\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isQueryRouteResponse(obj: any): obj is QueryRouteResponse {\n return (\n obj &&\n isResponse(obj.response) &&\n (obj.type === ResultType.data || ResultType.error)\n );\n}\n\nfunction isValidMethod(method: string): method is FormMethod {\n return validRequestMethods.has(method as FormMethod);\n}\n\nfunction isMutationMethod(method?: string): method is MutationFormMethod {\n return validMutationMethods.has(method as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n signal: AbortSignal,\n isFetcher: boolean,\n currentLoaderData?: RouteData\n) {\n for (let index = 0; index < results.length; index++) {\n let result = results[index];\n let match = matchesToLoad[index];\n let currentMatch = currentMatches.find(\n (m) => m.route.id === match.route.id\n );\n let isRevalidatingLoader =\n currentMatch != null &&\n !isNewRouteInstance(currentMatch, match) &&\n (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n if (isDeferredResult(result) && (isFetcher || isRevalidatingLoader)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n await resolveDeferredData(result, signal, isFetcher).then((result) => {\n if (result) {\n results[index] = result || results[index];\n }\n });\n }\n }\n}\n\nasync function resolveDeferredData(\n result: DeferredResult,\n signal: AbortSignal,\n unwrap = false\n): Promise {\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData,\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e,\n };\n }\n }\n\n return {\n type: ResultType.data,\n data: result.deferredData.data,\n };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\n// Note: This should match the format exported by useMatches, so if you change\n// this please also change that :) Eventually we'll DRY this up\nfunction createUseMatchesMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UseMatchesMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id] as unknown,\n handle: route.handle as unknown,\n };\n}\n\nfunction getTargetMatch(\n matches: AgnosticDataRouteMatch[],\n location: Location | string\n) {\n let search =\n typeof location === \"string\" ? parsePath(location).search : location.search;\n if (\n matches[matches.length - 1].route.index &&\n hasNakedIndexQuery(search || \"\")\n ) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\n//#endregion\n"],"names":["Action","PopStateEventType","createMemoryHistory","options","initialEntries","initialIndex","v5Compat","entries","map","entry","index","createMemoryLocation","state","undefined","clampIndex","length","action","Pop","listener","n","Math","min","max","getCurrentLocation","to","key","location","createLocation","pathname","warning","charAt","JSON","stringify","createHref","createPath","history","createURL","URL","encodeLocation","path","parsePath","search","hash","push","Push","nextLocation","splice","delta","replace","Replace","go","nextIndex","listen","fn","createBrowserHistory","createBrowserLocation","window","globalHistory","usr","createBrowserHref","getUrlBasedHistory","createHashHistory","createHashLocation","substr","createHashHref","base","document","querySelector","href","getAttribute","url","hashIndex","indexOf","slice","validateHashLocation","invariant","value","message","Error","cond","console","warn","e","createKey","random","toString","getHistoryState","idx","current","parsedPath","searchIndex","getLocation","validateLocation","defaultView","getIndex","replaceState","handlePop","historyState","pushState","error","assign","origin","addEventListener","removeEventListener","ResultType","isIndexRoute","route","convertRoutesToDataRoutes","routes","parentPath","allIds","Set","treePath","id","join","children","has","add","indexRoute","pathOrLayoutRoute","matchRoutes","locationArg","basename","stripBasename","branches","flattenRoutes","rankRouteBranches","matches","i","matchRouteBranch","safelyDecodeURI","parentsMeta","flattenRoute","relativePath","meta","caseSensitive","childrenIndex","startsWith","joinPaths","routesMeta","concat","score","computeScore","forEach","includes","exploded","explodeOptionalSegments","segments","split","first","rest","isOptional","endsWith","required","restExploded","result","subpath","sort","a","b","compareIndexes","paramRe","dynamicSegmentValue","indexRouteValue","emptySegmentValue","staticSegmentValue","splatPenalty","isSplat","s","initialScore","some","filter","reduce","segment","test","siblings","every","branch","matchedParams","matchedPathname","end","remainingPathname","match","matchPath","Object","params","pathnameBase","normalizePathname","generatePath","originalPath","_","optional","param","prefix","__","str","star","pattern","matcher","paramNames","compilePath","captureGroups","memo","paramName","splatValue","safelyDecodeURIComponent","regexpSource","RegExp","decodeURI","decodeURIComponent","toLowerCase","startIndex","nextChar","resolvePath","fromPathname","toPathname","resolvePathname","normalizeSearch","normalizeHash","relativeSegments","pop","getInvalidPathError","char","field","dest","getPathContributingMatches","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","isEmptyPath","from","routePathnameIndex","toSegments","shift","hasExplicitTrailingSlash","hasCurrentTrailingSlash","getToPathname","paths","json","data","init","responseInit","status","headers","Headers","set","Response","AbortedDeferredError","DeferredData","constructor","pendingKeysSet","subscribers","deferredKeys","Array","isArray","reject","abortPromise","Promise","r","controller","AbortController","onAbort","unlistenAbortSignal","signal","acc","trackPromise","done","promise","race","then","onSettle","catch","defineProperty","get","aborted","delete","emit","settledKey","subscriber","subscribe","cancel","abort","v","k","resolveData","resolve","size","unwrappedData","unwrapTrackedPromise","pendingKeys","isTrackedPromise","_tracked","_error","_data","defer","redirect","ErrorResponse","statusText","internal","isRouteErrorResponse","validMutationMethodsArr","validMutationMethods","validRequestMethodsArr","validRequestMethods","redirectStatusCodes","redirectPreserveMethodStatusCodes","IDLE_NAVIGATION","formMethod","formAction","formEncType","formData","IDLE_FETCHER","IDLE_BLOCKER","proceed","reset","ABSOLUTE_URL_REGEX","isBrowser","createElement","isServer","createRouter","dataRoutes","unlistenHistory","savedScrollPositions","getScrollRestorationKey","getScrollPosition","initialScrollRestored","hydrationData","initialMatches","initialErrors","getInternalRouterError","getShortCircuitMatches","initialized","m","loader","router","historyAction","navigation","restoreScrollPosition","preventScrollReset","revalidation","loaderData","actionData","errors","fetchers","Map","blockers","pendingAction","HistoryAction","pendingPreventScrollReset","pendingNavigationController","isUninterruptedRevalidation","isRevalidationRequired","cancelledDeferredRoutes","cancelledFetcherLoads","fetchControllers","incrementingLoadId","pendingNavigationLoadId","fetchReloadIds","fetchRedirectIds","fetchLoadMatches","activeDeferreds","blockerFunctions","ignoreNextHistoryUpdate","initialize","blockerKey","shouldBlockNavigation","currentLocation","updateBlocker","deleteBlocker","updateState","startNavigation","dispose","clear","deleteFetcher","newState","completeNavigation","isActionReload","isMutationMethod","_isRedirect","keys","mergeLoaderData","getSavedScrollPosition","navigate","opts","submission","normalizeNavigateOptions","userReplace","pendingError","revalidate","interruptActiveLoads","startUninterruptedRevalidation","overrideNavigation","saveScrollPosition","loadingNavigation","notFoundMatches","cancelActiveDeferreds","isHashChangeOnly","request","createClientSideRequest","pendingActionData","findNearestBoundary","actionOutput","handleAction","shortCircuited","pendingActionError","Request","handleLoaders","actionMatch","getTargetMatch","type","method","routeId","callLoaderOrAction","isRedirectResult","startRedirectNavigation","isErrorResult","boundaryMatch","isDeferredResult","activeSubmission","matchesToLoad","revalidatingFetchers","getMatchesToLoad","rf","fetcher","revalidatingFetcher","results","loaderResults","fetcherResults","callLoadersAndMaybeResolveData","findRedirect","processLoaderData","deferredData","markFetchRedirectsDone","didAbortFetchLoads","abortStaleFetchLoads","getFetcher","fetch","abortFetcher","setFetcherError","handleFetcherAction","handleFetcherLoader","requestMatches","existingFetcher","abortController","fetchRequest","actionResult","loadingFetcher","isFetchActionRedirect","revalidationRequest","loadId","loadFetcher","staleKey","doneFetcher","resolveDeferredData","redirectLocation","_isFetchActionRedirect","newOrigin","redirectHistoryAction","currentMatches","fetchersToLoad","all","f","resolveDeferredResults","markFetchersDone","doneKeys","landedId","yeetedKeys","getBlocker","blocker","newBlocker","blockerFunction","predicate","cancelledRouteIds","dfd","enableScrollRestoration","positions","getPosition","getKey","y","userMatches","createUseMatchesMatch","_internalFetchControllers","_internalActiveDeferreds","UNSAFE_DEFERRED_SYMBOL","Symbol","createStaticHandler","query","requestContext","isValidMethod","methodNotAllowedMatches","statusCode","loaderHeaders","actionHeaders","queryImpl","isResponse","queryRoute","find","values","routeMatch","submit","loadRouteData","isQueryRouteResponse","isRedirectResponse","response","isRouteRequest","Location","context","loaderRequest","getLoaderMatchesUntilBoundary","processRouteLoaderData","executedLoaders","fromEntries","getStaticContextFromError","newContext","_deepestRenderedBoundaryId","isSubmissionNavigation","isFetcher","stripHashFromPath","searchParams","convertFormDataToSearchParams","hasNakedIndexQuery","append","boundaryId","boundaryMatches","findIndex","currentUrl","nextUrl","defaultShouldRevalidate","navigationMatches","isNewLoader","currentRouteMatch","nextRouteMatch","shouldRevalidateLoader","currentParams","nextParams","isNewRouteInstance","shouldRevalidate","currentLoaderData","currentMatch","isNew","isMissingData","currentPath","loaderMatch","arg","routeChoice","isStaticRequest","resultType","onReject","handler","activeMatches","resolvedLocation","protocol","contentType","text","deferred","toUpperCase","body","URLSearchParams","File","name","foundError","newLoaderData","mergedLoaderData","hasOwnProperty","eligibleMatches","reverse","hasErrorBoundary","errorMessage","obj","isRevalidatingLoader","unwrap","getAll","handle","pathMatches"],"mappings":"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"}