diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d136927cda1018f730e6c23b3d80989bf19dabab --- /dev/null +++ b/.DS_Store @@ -0,0 +1 @@ +Bud1bwspblob�distbwspblob�bplist00� ]ShowStatusBar[ShowToolbar[ShowTabView_ContainerShowSidebar\WindowBounds[ShowSidebar  _{{-0, -0}, {864, 1079}} #/;R_klmno� �distvSrnlong  @� @� @� @ EDSDB `� @� @� @ \ No newline at end of file diff --git a/dist/history.d.ts b/dist/history.d.ts old mode 100755 new mode 100644 diff --git a/dist/router.cjs.js b/dist/router.cjs.js index e9942914335495941766c9d1a63eacd42c67c6fc..2abfc267930e026e1a94f2c5c0fd6c5f88965802 100644 --- a/dist/router.cjs.js +++ b/dist/router.cjs.js @@ -1481,6 +1481,7 @@ const redirect = function redirect(url, init) { } let headers = new Headers(responseInit.headers); headers.set("Location", url); + if (typeof init === "object" && init.replace) headers.set("X-Remix-Redirect-Replace", "true"); return new Response(null, _extends({}, responseInit, { headers })); @@ -2491,7 +2492,7 @@ function createRouter(init) { fetchRedirectIds.add(fetcherKey); } await startRedirectNavigation(state, redirect.result, { - replace + replace: replace || redirect.result.replace }); return { shortCircuited: true @@ -2698,7 +2699,9 @@ function createRouter(init) { let fetcherKey = revalidatingFetchers[redirect.idx - matchesToLoad.length].key; fetchRedirectIds.add(fetcherKey); } - return startRedirectNavigation(state, redirect.result); + return startRedirectNavigation(state, redirect.result, { + replace: redirect.result.replace + }); } // Process and commit output from loaders @@ -4121,6 +4124,7 @@ async function callLoaderOrAction(type, request, match, matches, manifest, mapRo type: ResultType.redirect, status, location, + replace: result.headers.get("X-Remix-Redirect-Replace") !== null, revalidate: result.headers.get("X-Remix-Revalidate") !== null, reloadDocument: result.headers.get("X-Remix-Reload-Document") !== null }; diff --git a/dist/router.cjs.js.map b/dist/router.cjs.js.map index d45d1e5321da279fceb7778639b666e0928651b9..5e44e205e72a80922060a39ee008117333333b9a 100644 --- a/dist/router.cjs.js.map +++ b/dist/router.cjs.js.map @@ -1 +1 @@ -{"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// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\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: State;\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`. This may be either a URL or the pieces\n * of a 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\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\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\nexport function 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 // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\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, warning } 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 reloadDocument?: 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\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on `
`,\n * useSubmit(), ``, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\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?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable | null;\n\n/**\n * Route loader function signature\n */\nexport interface LoaderFunction {\n (args: LoaderFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (args: ActionFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\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 text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionResult?: any;\n defaultShouldRevalidate: boolean;\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: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit & Required> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction {\n (): Promise>>;\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 lazy?: LazyRouteFunction;\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\nexport type RouteManifest = Record;\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 */\nexport type 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 you 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 mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: number[] = [],\n manifest: RouteManifest = {}\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 !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\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\nexport interface UIMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\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 explode _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: string = 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 // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:(\\w+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\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, compiledParams] = 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 = compiledParams.reduce>(\n (memo, { paramName, isOptional }, 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 const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = safelyDecodeURIComponent(value || \"\", paramName);\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\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 params: CompiledPathParam[] = [];\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, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n });\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\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, params];\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 * 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 (toPathname == null) {\n from = locationPathname;\n } else if (isPathRelative) {\n let fromSegments = routePathnames[routePathnames.length - 1]\n .replace(/^\\//, \"\")\n .split(\"/\");\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"path\", each leading .. segment means \"go up one URL segment\"\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n fromSegments.pop();\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = \"/\" + fromSegments.join(\"/\");\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"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, undefined, 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 the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\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 * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private 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 warning,\n} from \"./history\";\nimport type {\n ActionFunction,\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n AgnosticRouteObject,\n DataResult,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n ImmutableRouteKey,\n LoaderFunction,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n stripBasename,\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 * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\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 | null, 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 | null,\n opts?: RouterFetchOptions\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 * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): 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 * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_prependBasename: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n hydrationData?: HydrationState;\n window?: Window;\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\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n unstable_flushSync: boolean;\n }\n ): void;\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: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\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 json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\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 text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\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}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\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 json: undefined,\n text: 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 json: undefined,\n text: 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 defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\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 const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_prependBasename: false,\n ...init.future,\n };\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(dataRoutes, init.history.location, basename);\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 // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n !initialMatches.some((m) => m.route.lazy) &&\n // And we have to either have no loaders or have been provided hydrationData\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 // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map> = new Map<\n string,\n Set\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = 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 // - useRevalidator()\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\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\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 let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\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 if (removePageHideEventListener) {\n removePageHideEventListener();\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(\n newState: Partial,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\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 { flushSync }: { flushSync?: boolean } = {}\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 let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\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 if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\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 let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\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,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = 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 | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\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 flushSync = (opts && opts.unstable_flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\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 let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ 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 enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync,\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 fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: 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 pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\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(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\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, flushSync }\n );\n\n if (actionOutput.shortCircuited) {\n return;\n }\n\n pendingActionData = actionOutput.pendingActionData;\n pendingError = actionOutput.pendingActionError;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\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.fetcherSubmission,\n opts && opts.replace,\n flushSync,\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; flushSync?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\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 && !actionMatch.route.lazy) {\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 manifest,\n mapRouteProperties,\n 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 fetcherSubmission?: Submission,\n replace?: boolean,\n flushSync?: 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 =\n overrideNavigation || getLoadingNavigation(location, submission);\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 =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionData,\n pendingError\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 pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingError || null,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\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 = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n let actionData = pendingActionData || state.actionData;\n updateState(\n {\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 flushSync,\n }\n );\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\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 if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\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 if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(state, redirect.result, { 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 let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\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 | null,\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 let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\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 });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\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 flushSync: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action && !match.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\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 originatingLoadId = incrementingLoadId;\n let actionResult = await callLoaderOrAction(\n \"action\",\n fetchRequest,\n match,\n requestMatches,\n manifest,\n mapRouteProperties,\n basename\n );\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by 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 (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(state, actionResult, {\n fetcherSubmission: submission,\n });\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 nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, 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 = getLoadingFetcher(submission, actionResult.data);\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 deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n { [match.route.id]: actionResult.data },\n undefined // No need to send through errors since we short circuit above\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 = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\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 abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\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 if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(state, redirect.result);\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 // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n 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 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 flushSync: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\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\n let originatingLoadId = incrementingLoadId;\n let result: DataResult = await callLoaderOrAction(\n \"loader\",\n fetchRequest,\n match,\n matches,\n manifest,\n mapRouteProperties,\n 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 our 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 (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(state, result);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\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 fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.revalidate) {\n isRevalidationRequired = true;\n }\n\n let redirectLocation = createLocation(state.location, redirect.location, {\n _isRedirect: true,\n });\n invariant(\n redirectLocation,\n \"Expected a location on the redirect navigation\"\n );\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.reloadDocument) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(redirect.location)) {\n const url = init.history.createURL(redirect.location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(redirect.location);\n } else {\n routerWindow.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 } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\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 let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: redirect.location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\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(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename\n )\n ),\n ...fetchersToLoad.map((f) => {\n if (f.matches && f.match && f.controller) {\n return callLoaderOrAction(\n \"loader\",\n createClientSideRequest(init.history, f.path, f.controller.signal),\n f.match,\n f.matches,\n manifest,\n mapRouteProperties,\n basename\n );\n } else {\n let error: ErrorResult = {\n type: ResultType.error,\n error: getInternalRouterError(404, { pathname: f.path }),\n };\n return error;\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 loaderResults.map(() => request.signal),\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\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 updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher(key: string): Fetcher {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\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 = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\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 updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\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 let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ 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 || null;\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 getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n router = {\n get basename() {\n return basename;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\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: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\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;\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;\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) {\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 && !actionMatch.route.lazy) {\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 manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n );\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\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 (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\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(\n (m) => m.route.loader || m.route.lazy\n );\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 manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n )\n ),\n ]);\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\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: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getPathContributingMatches(contextualMatches).map((m) => m.pathnameBase),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\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 normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\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 let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve 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 deletedFetchers: Set,\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionData?: RouteData,\n pendingError?: RouteData\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 // 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.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\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 // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n // Clicked the same link, resubmitted a GET form\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate if fetcher won't be present in the subsequent render\n if (\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.includes(key)) {\n // Always revalidate if the fetcher was cancelled\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\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: isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\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: ShouldRevalidateFunctionArgs\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\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n basename: string,\n opts: {\n isStaticRequest?: boolean;\n isRouteRequest?: boolean;\n requestContext?: unknown;\n } = {}\n): Promise {\n let resultType;\n let result;\n let onReject: (() => void) | undefined;\n\n let runHandler = (handler: ActionFunction | LoaderFunction) => {\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 onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n return Promise.race([\n handler({\n request,\n params: match.params,\n context: opts.requestContext,\n }),\n abortPromise,\n ]);\n };\n\n try {\n let handler = match.route[type];\n\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let values = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n ]);\n if (handlerError) {\n throw handlerError;\n }\n result = values[0];\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n handler = match.route[type];\n if (handler) {\n // Handler still run even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, data: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\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 if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\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 location = normalizeTo(\n new URL(request.url),\n matches.slice(0, matches.indexOf(match) + 1),\n basename,\n true,\n location\n );\n } else if (!opts.isStaticRequest) {\n // Strip off the protocol+origin for same-origin + same-basename absolute\n // redirects. If this is a static request, we can let it go back to the\n // browser 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 let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\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 (opts.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 reloadDocument: result.headers.get(\"X-Remix-Reload-Document\") !== 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 (opts.isRouteRequest) {\n let queryRouteResponse: QueryRouteResponse = {\n type:\n resultType === ResultType.error ? ResultType.error : ResultType.data,\n response: result,\n };\n throw queryRouteResponse;\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 ErrorResponseImpl(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 (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\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 } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\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, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\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, controller } = 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 (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else 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 = getDoneFetcher(result.data);\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 && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\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 =\n routes.length === 1\n ? routes[0]\n : 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\" | \"invalid-body\";\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 } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\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 ErrorResponseImpl(\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(\n results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return { result, idx: i };\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 if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\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\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\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 || obj.type === ResultType.error)\n );\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: (AgnosticDataRouteMatch | null)[],\n results: DataResult[],\n signals: (AbortSignal | null)[],\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 // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\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 let signal = signals[index];\n invariant(\n signal,\n \"Expected an AbortSignal for revalidating fetcher deferred result\"\n );\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\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\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n if (transitions.size > 0) {\n let json: Record = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\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","startsWith","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","_extends","_ref","parsedPath","searchIndex","getLocation","validateLocation","defaultView","getIndex","replaceState","handlePop","historyState","pushState","error","DOMException","name","assign","origin","addEventListener","removeEventListener","ResultType","immutableRouteKeys","Set","isIndexRoute","route","convertRoutesToDataRoutes","routes","mapRouteProperties","parentPath","manifest","treePath","id","join","children","indexRoute","pathOrLayoutRoute","matchRoutes","locationArg","basename","stripBasename","branches","flattenRoutes","rankRouteBranches","matches","i","matchRouteBranch","safelyDecodeURI","convertRouteMatchToUiMatch","match","loaderData","params","data","handle","parentsMeta","flattenRoute","relativePath","meta","caseSensitive","childrenIndex","joinPaths","routesMeta","concat","score","computeScore","forEach","_route$path","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","matchPath","Object","pathnameBase","normalizePathname","generatePath","originalPath","prefix","p","String","array","isLastSegment","star","keyMatch","optional","param","pattern","matcher","compiledParams","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","fromSegments","toSegments","shift","routePathnameIndex","hasExplicitTrailingSlash","hasCurrentTrailingSlash","getToPathname","paths","json","init","responseInit","status","headers","Headers","has","set","Response","AbortedDeferredError","DeferredData","constructor","pendingKeysSet","subscribers","deferredKeys","Array","isArray","reject","abortPromise","Promise","r","controller","AbortController","onAbort","unlistenAbortSignal","signal","acc","_ref2","trackPromise","done","add","promise","race","then","onSettle","catch","defineProperty","get","aborted","delete","undefinedError","emit","settledKey","subscriber","subscribe","cancel","abort","v","k","resolveData","resolve","size","unwrappedData","_ref3","unwrapTrackedPromise","pendingKeys","isTrackedPromise","_tracked","_error","_data","defer","redirect","redirectDocument","response","ErrorResponseImpl","statusText","internal","isRouteErrorResponse","validMutationMethodsArr","validMutationMethods","validRequestMethodsArr","validRequestMethods","redirectStatusCodes","redirectPreserveMethodStatusCodes","IDLE_NAVIGATION","formMethod","formAction","formEncType","formData","text","IDLE_FETCHER","IDLE_BLOCKER","proceed","reset","ABSOLUTE_URL_REGEX","defaultMapRouteProperties","hasErrorBoundary","Boolean","TRANSITIONS_STORAGE_KEY","createRouter","routerWindow","isBrowser","createElement","isServer","detectErrorBoundary","dataRoutes","inFlightDataRoutes","future","v7_fetcherPersist","v7_normalizeFormMethod","v7_prependBasename","unlistenHistory","savedScrollPositions","getScrollRestorationKey","getScrollPosition","initialScrollRestored","hydrationData","initialMatches","initialErrors","getInternalRouterError","getShortCircuitMatches","initialized","m","lazy","loader","router","historyAction","navigation","restoreScrollPosition","preventScrollReset","revalidation","actionData","errors","fetchers","Map","blockers","pendingAction","HistoryAction","pendingPreventScrollReset","pendingNavigationController","pendingViewTransitionEnabled","appliedViewTransitions","removePageHideEventListener","isUninterruptedRevalidation","isRevalidationRequired","cancelledDeferredRoutes","cancelledFetcherLoads","fetchControllers","incrementingLoadId","pendingNavigationLoadId","fetchReloadIds","fetchRedirectIds","fetchLoadMatches","activeFetchers","deletedFetchers","activeDeferreds","blockerFunctions","ignoreNextHistoryUpdate","initialize","blockerKey","shouldBlockNavigation","currentLocation","updateBlocker","updateState","startNavigation","restoreAppliedTransitions","_saveAppliedTransitions","persistAppliedTransitions","dispose","clear","deleteFetcher","deleteBlocker","newState","opts","completedFetchers","deletedFetchersKeys","fetcher","unstable_viewTransitionOpts","viewTransitionOpts","unstable_flushSync","flushSync","completeNavigation","_temp","_location$state","_location$state2","isActionReload","isMutationMethod","_isRedirect","keys","mergeLoaderData","priorPaths","toPaths","getSavedScrollPosition","navigate","normalizedPath","normalizeTo","fromRouteId","relative","submission","normalizeNavigateOptions","userReplace","pendingError","enableViewTransition","unstable_viewTransition","revalidate","interruptActiveLoads","startUninterruptedRevalidation","overrideNavigation","saveScrollPosition","routesToUse","loadingNavigation","notFoundMatches","cancelActiveDeferreds","isHashChangeOnly","request","createClientSideRequest","pendingActionData","findNearestBoundary","actionOutput","handleAction","shortCircuited","pendingActionError","getLoadingNavigation","Request","handleLoaders","fetcherSubmission","getSubmittingNavigation","actionMatch","getTargetMatch","type","method","routeId","callLoaderOrAction","isRedirectResult","startRedirectNavigation","isErrorResult","boundaryMatch","isDeferredResult","activeSubmission","getSubmissionFromNavigation","matchesToLoad","revalidatingFetchers","getMatchesToLoad","updatedFetchers","markFetchRedirectsDone","rf","revalidatingFetcher","getLoadingFetcher","abortFetcher","abortPendingFetchRevalidations","f","results","loaderResults","fetcherResults","callLoadersAndMaybeResolveData","findRedirect","fetcherKey","processLoaderData","deferredData","didAbortFetchLoads","abortStaleFetchLoads","shouldUpdateFetchers","fetch","setFetcherError","handleFetcherAction","handleFetcherLoader","requestMatches","existingFetcher","updateFetcherState","getSubmittingFetcher","abortController","fetchRequest","originatingLoadId","actionResult","getDoneFetcher","revalidationRequest","loadId","loadFetcher","staleKey","doneFetcher","resolveDeferredData","_temp2","redirectLocation","isDocumentReload","reloadDocument","redirectHistoryAction","currentMatches","fetchersToLoad","all","resolveDeferredResults","getFetcher","deleteFetcherAndUpdateState","count","markFetchersDone","doneKeys","landedId","yeetedKeys","getBlocker","blocker","newBlocker","blockerFunction","predicate","cancelledRouteIds","dfd","enableScrollRestoration","positions","getPosition","getKey","y","getScrollKey","_internalSetRoutes","newRoutes","_internalFetchControllers","_internalActiveDeferreds","UNSAFE_DEFERRED_SYMBOL","Symbol","createStaticHandler","query","_temp3","requestContext","isValidMethod","methodNotAllowedMatches","statusCode","loaderHeaders","actionHeaders","queryImpl","isResponse","queryRoute","_temp4","find","values","_result$activeDeferre","routeMatch","submit","loadRouteData","isQueryRouteResponse","isRedirectResponse","isRouteRequest","isStaticRequest","Location","context","loaderRequest","getLoaderMatchesUntilBoundary","processRouteLoaderData","executedLoaders","fromEntries","getStaticContextFromError","newContext","_deepestRenderedBoundaryId","isSubmissionNavigation","body","prependBasename","contextualMatches","activeRouteMatch","hasNakedIndexQuery","normalizeFormMethod","isFetcher","getInvalidBodyError","rawFormMethod","toUpperCase","stripHashFromPath","FormData","URLSearchParams","parse","searchParams","convertFormDataToSearchParams","convertSearchParamsToFormData","append","boundaryId","boundaryMatches","findIndex","currentUrl","nextUrl","navigationMatches","isNewLoader","currentRouteMatch","nextRouteMatch","shouldRevalidateLoader","currentParams","nextParams","defaultShouldRevalidate","isNewRouteInstance","fetcherMatches","fetcherMatch","shouldRevalidate","currentLoaderData","currentMatch","isNew","isMissingData","currentPath","loaderMatch","arg","routeChoice","loadLazyRouteModule","lazyRoute","routeToUpdate","routeUpdates","lazyRouteProperty","staticRouteValue","isPropertyStaticallyDefined","resultType","onReject","runHandler","handler","handlerError","protocol","isSameBasename","queryRouteResponse","contentType","isDeferredData","_result$init","_result$init2","deferred","foundError","newLoaderData","mergedLoaderData","hasOwnProperty","eligibleMatches","reverse","_temp5","errorMessage","obj","signals","isRevalidatingLoader","unwrap","getAll","pathMatches","_window","transitions","sessionPositions","sessionStorage","getItem","setItem"],"mappings":"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"} \ No newline at end of file +{"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// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\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: State;\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`. This may be either a URL or the pieces\n * of a 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\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\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\nexport function 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 // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\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, warning } 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 reloadDocument?: boolean;\n replace?: 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\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on ``,\n * useSubmit(), ``, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\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?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable | null;\n\n/**\n * Route loader function signature\n */\nexport interface LoaderFunction {\n (args: LoaderFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (args: ActionFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\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 text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionResult?: any;\n defaultShouldRevalidate: boolean;\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: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit & Required> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction {\n (): Promise>>;\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 lazy?: LazyRouteFunction;\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\nexport type RouteManifest = Record;\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 */\nexport type 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 you 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 mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: number[] = [],\n manifest: RouteManifest = {}\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 !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\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\nexport interface UIMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\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 explode _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: string = 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 // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:(\\w+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\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, compiledParams] = 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 = compiledParams.reduce>(\n (memo, { paramName, isOptional }, 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 const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = safelyDecodeURIComponent(value || \"\", paramName);\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\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 params: CompiledPathParam[] = [];\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, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n });\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\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, params];\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 * 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 (toPathname == null) {\n from = locationPathname;\n } else if (isPathRelative) {\n let fromSegments = routePathnames[routePathnames.length - 1]\n .replace(/^\\//, \"\")\n .split(\"/\");\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"path\", each leading .. segment means \"go up one URL segment\"\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n fromSegments.pop();\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = \"/\" + fromSegments.join(\"/\");\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"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, undefined, 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 the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\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 & { replace?: boolean })\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 if (typeof init === \"object\" && init.replace)\n headers.set(\"X-Remix-Redirect-Replace\", \"true\");\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private 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 warning,\n} from \"./history\";\nimport type {\n ActionFunction,\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n AgnosticRouteObject,\n DataResult,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n ImmutableRouteKey,\n LoaderFunction,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n stripBasename,\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 * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\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 | null, 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 | null,\n opts?: RouterFetchOptions\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 * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): 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 * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_prependBasename: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n hydrationData?: HydrationState;\n window?: Window;\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\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n unstable_flushSync: boolean;\n }\n ): void;\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: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\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 json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\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 text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\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}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\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 json: undefined,\n text: 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 json: undefined,\n text: 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 defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\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 const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_prependBasename: false,\n ...init.future,\n };\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(dataRoutes, init.history.location, basename);\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 // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n !initialMatches.some((m) => m.route.lazy) &&\n // And we have to either have no loaders or have been provided hydrationData\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 // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map> = new Map<\n string,\n Set\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = 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 // - useRevalidator()\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\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\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 let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\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 if (removePageHideEventListener) {\n removePageHideEventListener();\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(\n newState: Partial,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\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 { flushSync }: { flushSync?: boolean } = {}\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 let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\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 if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\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 let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\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,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = 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 | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\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 flushSync = (opts && opts.unstable_flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\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 let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ 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 enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync,\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 fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: 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 pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\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(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\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, flushSync }\n );\n\n if (actionOutput.shortCircuited) {\n return;\n }\n\n pendingActionData = actionOutput.pendingActionData;\n pendingError = actionOutput.pendingActionError;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\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.fetcherSubmission,\n opts && opts.replace,\n flushSync,\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; flushSync?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\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 && !actionMatch.route.lazy) {\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 manifest,\n mapRouteProperties,\n 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 fetcherSubmission?: Submission,\n replace?: boolean,\n flushSync?: 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 =\n overrideNavigation || getLoadingNavigation(location, submission);\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 =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionData,\n pendingError\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 pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingError || null,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\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 = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n let actionData = pendingActionData || state.actionData;\n updateState(\n {\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 flushSync,\n }\n );\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\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 if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\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 if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(state, redirect.result, {\n replace: replace || redirect.result.replace,\n });\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 let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\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 | null,\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 let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\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 });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\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 flushSync: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action && !match.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\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 originatingLoadId = incrementingLoadId;\n let actionResult = await callLoaderOrAction(\n \"action\",\n fetchRequest,\n match,\n requestMatches,\n manifest,\n mapRouteProperties,\n basename\n );\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by 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 (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(state, actionResult, {\n fetcherSubmission: submission,\n });\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 nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, 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 = getLoadingFetcher(submission, actionResult.data);\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 deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n { [match.route.id]: actionResult.data },\n undefined // No need to send through errors since we short circuit above\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 = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\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 abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\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 if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(state, redirect.result, {\n replace: redirect.result.replace,\n });\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 // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n 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 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 flushSync: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\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\n let originatingLoadId = incrementingLoadId;\n let result: DataResult = await callLoaderOrAction(\n \"loader\",\n fetchRequest,\n match,\n matches,\n manifest,\n mapRouteProperties,\n 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 our 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 (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(state, result);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\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 fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.revalidate) {\n isRevalidationRequired = true;\n }\n\n let redirectLocation = createLocation(state.location, redirect.location, {\n _isRedirect: true,\n });\n invariant(\n redirectLocation,\n \"Expected a location on the redirect navigation\"\n );\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.reloadDocument) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(redirect.location)) {\n const url = init.history.createURL(redirect.location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(redirect.location);\n } else {\n routerWindow.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 } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\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 let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: redirect.location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\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(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename\n )\n ),\n ...fetchersToLoad.map((f) => {\n if (f.matches && f.match && f.controller) {\n return callLoaderOrAction(\n \"loader\",\n createClientSideRequest(init.history, f.path, f.controller.signal),\n f.match,\n f.matches,\n manifest,\n mapRouteProperties,\n basename\n );\n } else {\n let error: ErrorResult = {\n type: ResultType.error,\n error: getInternalRouterError(404, { pathname: f.path }),\n };\n return error;\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 loaderResults.map(() => request.signal),\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\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 updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher(key: string): Fetcher {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\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 = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\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 updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\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 let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ 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 || null;\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 getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n router = {\n get basename() {\n return basename;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\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: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\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;\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;\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) {\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 && !actionMatch.route.lazy) {\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 manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n );\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\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 (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\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(\n (m) => m.route.loader || m.route.lazy\n );\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 manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n )\n ),\n ]);\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\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: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getPathContributingMatches(contextualMatches).map((m) => m.pathnameBase),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\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 normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\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 let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve 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 deletedFetchers: Set,\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionData?: RouteData,\n pendingError?: RouteData\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 // 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.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\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 // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n // Clicked the same link, resubmitted a GET form\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate if fetcher won't be present in the subsequent render\n if (\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.includes(key)) {\n // Always revalidate if the fetcher was cancelled\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\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: isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\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: ShouldRevalidateFunctionArgs\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\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n basename: string,\n opts: {\n isStaticRequest?: boolean;\n isRouteRequest?: boolean;\n requestContext?: unknown;\n } = {}\n): Promise {\n let resultType;\n let result;\n let onReject: (() => void) | undefined;\n\n let runHandler = (handler: ActionFunction | LoaderFunction) => {\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 onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n return Promise.race([\n handler({\n request,\n params: match.params,\n context: opts.requestContext,\n }),\n abortPromise,\n ]);\n };\n\n try {\n let handler = match.route[type];\n\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let values = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n ]);\n if (handlerError) {\n throw handlerError;\n }\n result = values[0];\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n handler = match.route[type];\n if (handler) {\n // Handler still run even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, data: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\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 if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\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 location = normalizeTo(\n new URL(request.url),\n matches.slice(0, matches.indexOf(match) + 1),\n basename,\n true,\n location\n );\n } else if (!opts.isStaticRequest) {\n // Strip off the protocol+origin for same-origin + same-basename absolute\n // redirects. If this is a static request, we can let it go back to the\n // browser 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 let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\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 (opts.isStaticRequest) {\n result.headers.set(\"Location\", location);\n throw result;\n }\n\n return {\n type: ResultType.redirect,\n status,\n location,\n replace: result.headers.get(\"X-Remix-Redirect-Replace\") !== null,\n revalidate: result.headers.get(\"X-Remix-Revalidate\") !== null,\n reloadDocument: result.headers.get(\"X-Remix-Reload-Document\") !== 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 (opts.isRouteRequest) {\n let queryRouteResponse: QueryRouteResponse = {\n type:\n resultType === ResultType.error ? ResultType.error : ResultType.data,\n response: result,\n };\n throw queryRouteResponse;\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 ErrorResponseImpl(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 (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\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 } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\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, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\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, controller } = 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 (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else 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 = getDoneFetcher(result.data);\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 && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\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 =\n routes.length === 1\n ? routes[0]\n : 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\" | \"invalid-body\";\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 } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\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 ErrorResponseImpl(\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(\n results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return { result, idx: i };\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 if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\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\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\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 || obj.type === ResultType.error)\n );\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: (AgnosticDataRouteMatch | null)[],\n results: DataResult[],\n signals: (AbortSignal | null)[],\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 // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\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 let signal = signals[index];\n invariant(\n signal,\n \"Expected an AbortSignal for revalidating fetcher deferred result\"\n );\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\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\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n if (transitions.size > 0) {\n let json: Record = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\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","startsWith","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","_extends","_ref","parsedPath","searchIndex","getLocation","validateLocation","defaultView","getIndex","replaceState","handlePop","historyState","pushState","error","DOMException","name","assign","origin","addEventListener","removeEventListener","ResultType","immutableRouteKeys","Set","isIndexRoute","route","convertRoutesToDataRoutes","routes","mapRouteProperties","parentPath","manifest","treePath","id","join","children","indexRoute","pathOrLayoutRoute","matchRoutes","locationArg","basename","stripBasename","branches","flattenRoutes","rankRouteBranches","matches","i","matchRouteBranch","safelyDecodeURI","convertRouteMatchToUiMatch","match","loaderData","params","data","handle","parentsMeta","flattenRoute","relativePath","meta","caseSensitive","childrenIndex","joinPaths","routesMeta","concat","score","computeScore","forEach","_route$path","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","matchPath","Object","pathnameBase","normalizePathname","generatePath","originalPath","prefix","p","String","array","isLastSegment","star","keyMatch","optional","param","pattern","matcher","compiledParams","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","fromSegments","toSegments","shift","routePathnameIndex","hasExplicitTrailingSlash","hasCurrentTrailingSlash","getToPathname","paths","json","init","responseInit","status","headers","Headers","has","set","Response","AbortedDeferredError","DeferredData","constructor","pendingKeysSet","subscribers","deferredKeys","Array","isArray","reject","abortPromise","Promise","r","controller","AbortController","onAbort","unlistenAbortSignal","signal","acc","_ref2","trackPromise","done","add","promise","race","then","onSettle","catch","defineProperty","get","aborted","delete","undefinedError","emit","settledKey","subscriber","subscribe","cancel","abort","v","k","resolveData","resolve","size","unwrappedData","_ref3","unwrapTrackedPromise","pendingKeys","isTrackedPromise","_tracked","_error","_data","defer","redirect","redirectDocument","response","ErrorResponseImpl","statusText","internal","isRouteErrorResponse","validMutationMethodsArr","validMutationMethods","validRequestMethodsArr","validRequestMethods","redirectStatusCodes","redirectPreserveMethodStatusCodes","IDLE_NAVIGATION","formMethod","formAction","formEncType","formData","text","IDLE_FETCHER","IDLE_BLOCKER","proceed","reset","ABSOLUTE_URL_REGEX","defaultMapRouteProperties","hasErrorBoundary","Boolean","TRANSITIONS_STORAGE_KEY","createRouter","routerWindow","isBrowser","createElement","isServer","detectErrorBoundary","dataRoutes","inFlightDataRoutes","future","v7_fetcherPersist","v7_normalizeFormMethod","v7_prependBasename","unlistenHistory","savedScrollPositions","getScrollRestorationKey","getScrollPosition","initialScrollRestored","hydrationData","initialMatches","initialErrors","getInternalRouterError","getShortCircuitMatches","initialized","m","lazy","loader","router","historyAction","navigation","restoreScrollPosition","preventScrollReset","revalidation","actionData","errors","fetchers","Map","blockers","pendingAction","HistoryAction","pendingPreventScrollReset","pendingNavigationController","pendingViewTransitionEnabled","appliedViewTransitions","removePageHideEventListener","isUninterruptedRevalidation","isRevalidationRequired","cancelledDeferredRoutes","cancelledFetcherLoads","fetchControllers","incrementingLoadId","pendingNavigationLoadId","fetchReloadIds","fetchRedirectIds","fetchLoadMatches","activeFetchers","deletedFetchers","activeDeferreds","blockerFunctions","ignoreNextHistoryUpdate","initialize","blockerKey","shouldBlockNavigation","currentLocation","updateBlocker","updateState","startNavigation","restoreAppliedTransitions","_saveAppliedTransitions","persistAppliedTransitions","dispose","clear","deleteFetcher","deleteBlocker","newState","opts","completedFetchers","deletedFetchersKeys","fetcher","unstable_viewTransitionOpts","viewTransitionOpts","unstable_flushSync","flushSync","completeNavigation","_temp","_location$state","_location$state2","isActionReload","isMutationMethod","_isRedirect","keys","mergeLoaderData","priorPaths","toPaths","getSavedScrollPosition","navigate","normalizedPath","normalizeTo","fromRouteId","relative","submission","normalizeNavigateOptions","userReplace","pendingError","enableViewTransition","unstable_viewTransition","revalidate","interruptActiveLoads","startUninterruptedRevalidation","overrideNavigation","saveScrollPosition","routesToUse","loadingNavigation","notFoundMatches","cancelActiveDeferreds","isHashChangeOnly","request","createClientSideRequest","pendingActionData","findNearestBoundary","actionOutput","handleAction","shortCircuited","pendingActionError","getLoadingNavigation","Request","handleLoaders","fetcherSubmission","getSubmittingNavigation","actionMatch","getTargetMatch","type","method","routeId","callLoaderOrAction","isRedirectResult","startRedirectNavigation","isErrorResult","boundaryMatch","isDeferredResult","activeSubmission","getSubmissionFromNavigation","matchesToLoad","revalidatingFetchers","getMatchesToLoad","updatedFetchers","markFetchRedirectsDone","rf","revalidatingFetcher","getLoadingFetcher","abortFetcher","abortPendingFetchRevalidations","f","results","loaderResults","fetcherResults","callLoadersAndMaybeResolveData","findRedirect","fetcherKey","processLoaderData","deferredData","didAbortFetchLoads","abortStaleFetchLoads","shouldUpdateFetchers","fetch","setFetcherError","handleFetcherAction","handleFetcherLoader","requestMatches","existingFetcher","updateFetcherState","getSubmittingFetcher","abortController","fetchRequest","originatingLoadId","actionResult","getDoneFetcher","revalidationRequest","loadId","loadFetcher","staleKey","doneFetcher","resolveDeferredData","_temp2","redirectLocation","isDocumentReload","reloadDocument","redirectHistoryAction","currentMatches","fetchersToLoad","all","resolveDeferredResults","getFetcher","deleteFetcherAndUpdateState","count","markFetchersDone","doneKeys","landedId","yeetedKeys","getBlocker","blocker","newBlocker","blockerFunction","predicate","cancelledRouteIds","dfd","enableScrollRestoration","positions","getPosition","getKey","y","getScrollKey","_internalSetRoutes","newRoutes","_internalFetchControllers","_internalActiveDeferreds","UNSAFE_DEFERRED_SYMBOL","Symbol","createStaticHandler","query","_temp3","requestContext","isValidMethod","methodNotAllowedMatches","statusCode","loaderHeaders","actionHeaders","queryImpl","isResponse","queryRoute","_temp4","find","values","_result$activeDeferre","routeMatch","submit","loadRouteData","isQueryRouteResponse","isRedirectResponse","isRouteRequest","isStaticRequest","Location","context","loaderRequest","getLoaderMatchesUntilBoundary","processRouteLoaderData","executedLoaders","fromEntries","getStaticContextFromError","newContext","_deepestRenderedBoundaryId","isSubmissionNavigation","body","prependBasename","contextualMatches","activeRouteMatch","hasNakedIndexQuery","normalizeFormMethod","isFetcher","getInvalidBodyError","rawFormMethod","toUpperCase","stripHashFromPath","FormData","URLSearchParams","parse","searchParams","convertFormDataToSearchParams","convertSearchParamsToFormData","append","boundaryId","boundaryMatches","findIndex","currentUrl","nextUrl","navigationMatches","isNewLoader","currentRouteMatch","nextRouteMatch","shouldRevalidateLoader","currentParams","nextParams","defaultShouldRevalidate","isNewRouteInstance","fetcherMatches","fetcherMatch","shouldRevalidate","currentLoaderData","currentMatch","isNew","isMissingData","currentPath","loaderMatch","arg","routeChoice","loadLazyRouteModule","lazyRoute","routeToUpdate","routeUpdates","lazyRouteProperty","staticRouteValue","isPropertyStaticallyDefined","resultType","onReject","runHandler","handler","handlerError","protocol","isSameBasename","queryRouteResponse","contentType","isDeferredData","_result$init","_result$init2","deferred","foundError","newLoaderData","mergedLoaderData","hasOwnProperty","eligibleMatches","reverse","_temp5","errorMessage","obj","signals","isRevalidatingLoader","unwrap","getAll","pathMatches","_window","transitions","sessionPositions","sessionStorage","getItem","setItem"],"mappings":"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"} \ No newline at end of file diff --git a/dist/router.js b/dist/router.js index 1f57cdb0fd3cf58a863c2216844d2a664ca7284a..316d5b5d633df2602c6c8a03591cc942d153122c 100644 --- a/dist/router.js +++ b/dist/router.js @@ -1213,6 +1213,7 @@ const redirect = function redirect(url, init) { } let headers = new Headers(responseInit.headers); headers.set("Location", url); + if (typeof init === "object" && init.replace) headers.set("X-Remix-Redirect-Replace", "true"); return new Response(null, _extends({}, responseInit, { headers })); @@ -2079,7 +2080,7 @@ function createRouter(init) { fetchRedirectIds.add(fetcherKey); } await startRedirectNavigation(state, redirect.result, { - replace + replace: replace || redirect.result.replace }); return { shortCircuited: true @@ -2276,7 +2277,9 @@ function createRouter(init) { let fetcherKey = revalidatingFetchers[redirect.idx - matchesToLoad.length].key; fetchRedirectIds.add(fetcherKey); } - return startRedirectNavigation(state, redirect.result); + return startRedirectNavigation(state, redirect.result, { + replace: redirect.result.replace + }); } // Process and commit output from loaders let { @@ -3636,6 +3639,7 @@ async function callLoaderOrAction(type, request, match, matches, manifest, mapRo type: ResultType.redirect, status, location, + replace: result.headers.get("X-Remix-Redirect-Replace") !== null, revalidate: result.headers.get("X-Remix-Revalidate") !== null, reloadDocument: result.headers.get("X-Remix-Reload-Document") !== null }; diff --git a/dist/router.js.map b/dist/router.js.map index 447f473c0db86154489ffefea6a89e6728889a4c..818aa4359846ace9342dc8b5d66705313437b90b 100644 --- a/dist/router.js.map +++ b/dist/router.js.map @@ -1 +1 @@ -{"version":3,"file":"router.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// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\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: State;\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`. This may be either a URL or the pieces\n * of a 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\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\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\nexport function 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 // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\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, warning } 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 reloadDocument?: 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\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on ``,\n * useSubmit(), ``, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\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?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable | null;\n\n/**\n * Route loader function signature\n */\nexport interface LoaderFunction {\n (args: LoaderFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (args: ActionFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\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 text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionResult?: any;\n defaultShouldRevalidate: boolean;\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: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit & Required> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction {\n (): Promise>>;\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 lazy?: LazyRouteFunction;\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\nexport type RouteManifest = Record;\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 */\nexport type 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 you 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 mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: number[] = [],\n manifest: RouteManifest = {}\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 !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\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\nexport interface UIMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\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 explode _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: string = 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 // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:(\\w+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\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, compiledParams] = 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 = compiledParams.reduce>(\n (memo, { paramName, isOptional }, 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 const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = safelyDecodeURIComponent(value || \"\", paramName);\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\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 params: CompiledPathParam[] = [];\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, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n });\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\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, params];\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 * 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 (toPathname == null) {\n from = locationPathname;\n } else if (isPathRelative) {\n let fromSegments = routePathnames[routePathnames.length - 1]\n .replace(/^\\//, \"\")\n .split(\"/\");\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"path\", each leading .. segment means \"go up one URL segment\"\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n fromSegments.pop();\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = \"/\" + fromSegments.join(\"/\");\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"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, undefined, 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 the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\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 * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private 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 warning,\n} from \"./history\";\nimport type {\n ActionFunction,\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n AgnosticRouteObject,\n DataResult,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n ImmutableRouteKey,\n LoaderFunction,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n stripBasename,\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 * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\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 | null, 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 | null,\n opts?: RouterFetchOptions\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 * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): 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 * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_prependBasename: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n hydrationData?: HydrationState;\n window?: Window;\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\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n unstable_flushSync: boolean;\n }\n ): void;\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: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\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 json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\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 text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\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}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\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 json: undefined,\n text: 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 json: undefined,\n text: 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 defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\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 const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_prependBasename: false,\n ...init.future,\n };\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(dataRoutes, init.history.location, basename);\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 // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n !initialMatches.some((m) => m.route.lazy) &&\n // And we have to either have no loaders or have been provided hydrationData\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 // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map> = new Map<\n string,\n Set\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = 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 // - useRevalidator()\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\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\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 let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\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 if (removePageHideEventListener) {\n removePageHideEventListener();\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(\n newState: Partial,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\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 { flushSync }: { flushSync?: boolean } = {}\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 let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\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 if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\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 let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\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,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = 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 | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\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 flushSync = (opts && opts.unstable_flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\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 let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ 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 enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync,\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 fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: 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 pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\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(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\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, flushSync }\n );\n\n if (actionOutput.shortCircuited) {\n return;\n }\n\n pendingActionData = actionOutput.pendingActionData;\n pendingError = actionOutput.pendingActionError;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\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.fetcherSubmission,\n opts && opts.replace,\n flushSync,\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; flushSync?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\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 && !actionMatch.route.lazy) {\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 manifest,\n mapRouteProperties,\n 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 fetcherSubmission?: Submission,\n replace?: boolean,\n flushSync?: 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 =\n overrideNavigation || getLoadingNavigation(location, submission);\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 =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionData,\n pendingError\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 pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingError || null,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\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 = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n let actionData = pendingActionData || state.actionData;\n updateState(\n {\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 flushSync,\n }\n );\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\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 if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\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 if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(state, redirect.result, { 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 let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\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 | null,\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 let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\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 });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\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 flushSync: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action && !match.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\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 originatingLoadId = incrementingLoadId;\n let actionResult = await callLoaderOrAction(\n \"action\",\n fetchRequest,\n match,\n requestMatches,\n manifest,\n mapRouteProperties,\n basename\n );\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by 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 (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(state, actionResult, {\n fetcherSubmission: submission,\n });\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 nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, 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 = getLoadingFetcher(submission, actionResult.data);\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 deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n { [match.route.id]: actionResult.data },\n undefined // No need to send through errors since we short circuit above\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 = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\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 abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\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 if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(state, redirect.result);\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 // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n 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 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 flushSync: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\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\n let originatingLoadId = incrementingLoadId;\n let result: DataResult = await callLoaderOrAction(\n \"loader\",\n fetchRequest,\n match,\n matches,\n manifest,\n mapRouteProperties,\n 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 our 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 (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(state, result);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\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 fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.revalidate) {\n isRevalidationRequired = true;\n }\n\n let redirectLocation = createLocation(state.location, redirect.location, {\n _isRedirect: true,\n });\n invariant(\n redirectLocation,\n \"Expected a location on the redirect navigation\"\n );\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.reloadDocument) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(redirect.location)) {\n const url = init.history.createURL(redirect.location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(redirect.location);\n } else {\n routerWindow.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 } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\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 let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: redirect.location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\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(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename\n )\n ),\n ...fetchersToLoad.map((f) => {\n if (f.matches && f.match && f.controller) {\n return callLoaderOrAction(\n \"loader\",\n createClientSideRequest(init.history, f.path, f.controller.signal),\n f.match,\n f.matches,\n manifest,\n mapRouteProperties,\n basename\n );\n } else {\n let error: ErrorResult = {\n type: ResultType.error,\n error: getInternalRouterError(404, { pathname: f.path }),\n };\n return error;\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 loaderResults.map(() => request.signal),\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\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 updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher(key: string): Fetcher {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\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 = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\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 updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\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 let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ 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 || null;\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 getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n router = {\n get basename() {\n return basename;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\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: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\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;\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;\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) {\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 && !actionMatch.route.lazy) {\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 manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n );\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\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 (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\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(\n (m) => m.route.loader || m.route.lazy\n );\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 manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n )\n ),\n ]);\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\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: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getPathContributingMatches(contextualMatches).map((m) => m.pathnameBase),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\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 normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\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 let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve 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 deletedFetchers: Set,\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionData?: RouteData,\n pendingError?: RouteData\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 // 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.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\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 // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n // Clicked the same link, resubmitted a GET form\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate if fetcher won't be present in the subsequent render\n if (\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.includes(key)) {\n // Always revalidate if the fetcher was cancelled\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\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: isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\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: ShouldRevalidateFunctionArgs\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\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n basename: string,\n opts: {\n isStaticRequest?: boolean;\n isRouteRequest?: boolean;\n requestContext?: unknown;\n } = {}\n): Promise {\n let resultType;\n let result;\n let onReject: (() => void) | undefined;\n\n let runHandler = (handler: ActionFunction | LoaderFunction) => {\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 onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n return Promise.race([\n handler({\n request,\n params: match.params,\n context: opts.requestContext,\n }),\n abortPromise,\n ]);\n };\n\n try {\n let handler = match.route[type];\n\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let values = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n ]);\n if (handlerError) {\n throw handlerError;\n }\n result = values[0];\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n handler = match.route[type];\n if (handler) {\n // Handler still run even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, data: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\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 if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\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 location = normalizeTo(\n new URL(request.url),\n matches.slice(0, matches.indexOf(match) + 1),\n basename,\n true,\n location\n );\n } else if (!opts.isStaticRequest) {\n // Strip off the protocol+origin for same-origin + same-basename absolute\n // redirects. If this is a static request, we can let it go back to the\n // browser 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 let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\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 (opts.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 reloadDocument: result.headers.get(\"X-Remix-Reload-Document\") !== 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 (opts.isRouteRequest) {\n let queryRouteResponse: QueryRouteResponse = {\n type:\n resultType === ResultType.error ? ResultType.error : ResultType.data,\n response: result,\n };\n throw queryRouteResponse;\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 ErrorResponseImpl(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 (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\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 } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\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, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\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, controller } = 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 (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else 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 = getDoneFetcher(result.data);\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 && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\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 =\n routes.length === 1\n ? routes[0]\n : 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\" | \"invalid-body\";\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 } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\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 ErrorResponseImpl(\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(\n results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return { result, idx: i };\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 if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\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\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\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 || obj.type === ResultType.error)\n );\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: (AgnosticDataRouteMatch | null)[],\n results: DataResult[],\n signals: (AbortSignal | null)[],\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 // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\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 let signal = signals[index];\n invariant(\n signal,\n \"Expected an AbortSignal for revalidating fetcher deferred result\"\n );\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\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\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n if (transitions.size > 0) {\n let json: Record = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\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","startsWith","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","_extends","_ref","parsedPath","searchIndex","getLocation","validateLocation","defaultView","getIndex","replaceState","handlePop","historyState","pushState","error","DOMException","name","assign","origin","addEventListener","removeEventListener","ResultType","immutableRouteKeys","Set","isIndexRoute","route","convertRoutesToDataRoutes","routes","mapRouteProperties","parentPath","manifest","treePath","id","join","children","indexRoute","pathOrLayoutRoute","matchRoutes","locationArg","basename","stripBasename","branches","flattenRoutes","rankRouteBranches","matches","i","matchRouteBranch","safelyDecodeURI","convertRouteMatchToUiMatch","match","loaderData","params","data","handle","parentsMeta","flattenRoute","relativePath","meta","caseSensitive","childrenIndex","joinPaths","routesMeta","concat","score","computeScore","forEach","_route$path","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","matchPath","Object","pathnameBase","normalizePathname","generatePath","originalPath","prefix","p","String","array","isLastSegment","star","keyMatch","optional","param","pattern","matcher","compiledParams","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","fromSegments","toSegments","shift","routePathnameIndex","hasExplicitTrailingSlash","hasCurrentTrailingSlash","getToPathname","paths","json","init","responseInit","status","headers","Headers","has","set","Response","AbortedDeferredError","DeferredData","constructor","pendingKeysSet","subscribers","deferredKeys","Array","isArray","reject","abortPromise","Promise","r","controller","AbortController","onAbort","unlistenAbortSignal","signal","acc","_ref2","trackPromise","done","add","promise","race","then","onSettle","catch","defineProperty","get","aborted","delete","undefinedError","emit","settledKey","subscriber","subscribe","cancel","abort","v","k","resolveData","resolve","size","unwrappedData","_ref3","unwrapTrackedPromise","pendingKeys","isTrackedPromise","_tracked","_error","_data","defer","redirect","redirectDocument","response","ErrorResponseImpl","statusText","internal","isRouteErrorResponse","validMutationMethodsArr","validMutationMethods","validRequestMethodsArr","validRequestMethods","redirectStatusCodes","redirectPreserveMethodStatusCodes","IDLE_NAVIGATION","formMethod","formAction","formEncType","formData","text","IDLE_FETCHER","IDLE_BLOCKER","proceed","reset","ABSOLUTE_URL_REGEX","defaultMapRouteProperties","hasErrorBoundary","Boolean","TRANSITIONS_STORAGE_KEY","createRouter","routerWindow","isBrowser","createElement","isServer","detectErrorBoundary","dataRoutes","inFlightDataRoutes","future","v7_fetcherPersist","v7_normalizeFormMethod","v7_prependBasename","unlistenHistory","savedScrollPositions","getScrollRestorationKey","getScrollPosition","initialScrollRestored","hydrationData","initialMatches","initialErrors","getInternalRouterError","getShortCircuitMatches","initialized","m","lazy","loader","router","historyAction","navigation","restoreScrollPosition","preventScrollReset","revalidation","actionData","errors","fetchers","Map","blockers","pendingAction","HistoryAction","pendingPreventScrollReset","pendingNavigationController","pendingViewTransitionEnabled","appliedViewTransitions","removePageHideEventListener","isUninterruptedRevalidation","isRevalidationRequired","cancelledDeferredRoutes","cancelledFetcherLoads","fetchControllers","incrementingLoadId","pendingNavigationLoadId","fetchReloadIds","fetchRedirectIds","fetchLoadMatches","activeFetchers","deletedFetchers","activeDeferreds","blockerFunctions","ignoreNextHistoryUpdate","initialize","blockerKey","shouldBlockNavigation","currentLocation","updateBlocker","updateState","startNavigation","restoreAppliedTransitions","_saveAppliedTransitions","persistAppliedTransitions","dispose","clear","deleteFetcher","deleteBlocker","newState","opts","completedFetchers","deletedFetchersKeys","fetcher","unstable_viewTransitionOpts","viewTransitionOpts","unstable_flushSync","flushSync","completeNavigation","_temp","_location$state","_location$state2","isActionReload","isMutationMethod","_isRedirect","keys","mergeLoaderData","priorPaths","toPaths","getSavedScrollPosition","navigate","normalizedPath","normalizeTo","fromRouteId","relative","submission","normalizeNavigateOptions","userReplace","pendingError","enableViewTransition","unstable_viewTransition","revalidate","interruptActiveLoads","startUninterruptedRevalidation","overrideNavigation","saveScrollPosition","routesToUse","loadingNavigation","notFoundMatches","cancelActiveDeferreds","isHashChangeOnly","request","createClientSideRequest","pendingActionData","findNearestBoundary","actionOutput","handleAction","shortCircuited","pendingActionError","getLoadingNavigation","Request","handleLoaders","fetcherSubmission","getSubmittingNavigation","actionMatch","getTargetMatch","type","method","routeId","callLoaderOrAction","isRedirectResult","startRedirectNavigation","isErrorResult","boundaryMatch","isDeferredResult","activeSubmission","getSubmissionFromNavigation","matchesToLoad","revalidatingFetchers","getMatchesToLoad","updatedFetchers","markFetchRedirectsDone","rf","revalidatingFetcher","getLoadingFetcher","abortFetcher","abortPendingFetchRevalidations","f","results","loaderResults","fetcherResults","callLoadersAndMaybeResolveData","findRedirect","fetcherKey","processLoaderData","deferredData","didAbortFetchLoads","abortStaleFetchLoads","shouldUpdateFetchers","fetch","setFetcherError","handleFetcherAction","handleFetcherLoader","requestMatches","existingFetcher","updateFetcherState","getSubmittingFetcher","abortController","fetchRequest","originatingLoadId","actionResult","getDoneFetcher","revalidationRequest","loadId","loadFetcher","staleKey","doneFetcher","resolveDeferredData","_temp2","redirectLocation","isDocumentReload","reloadDocument","redirectHistoryAction","currentMatches","fetchersToLoad","all","resolveDeferredResults","getFetcher","deleteFetcherAndUpdateState","count","markFetchersDone","doneKeys","landedId","yeetedKeys","getBlocker","blocker","newBlocker","blockerFunction","predicate","cancelledRouteIds","dfd","enableScrollRestoration","positions","getPosition","getKey","y","getScrollKey","_internalSetRoutes","newRoutes","_internalFetchControllers","_internalActiveDeferreds","UNSAFE_DEFERRED_SYMBOL","Symbol","createStaticHandler","query","_temp3","requestContext","isValidMethod","methodNotAllowedMatches","statusCode","loaderHeaders","actionHeaders","queryImpl","isResponse","queryRoute","_temp4","find","values","_result$activeDeferre","routeMatch","submit","loadRouteData","isQueryRouteResponse","isRedirectResponse","isRouteRequest","isStaticRequest","Location","context","loaderRequest","getLoaderMatchesUntilBoundary","processRouteLoaderData","executedLoaders","fromEntries","getStaticContextFromError","newContext","_deepestRenderedBoundaryId","isSubmissionNavigation","body","prependBasename","contextualMatches","activeRouteMatch","hasNakedIndexQuery","normalizeFormMethod","isFetcher","getInvalidBodyError","rawFormMethod","toUpperCase","stripHashFromPath","FormData","URLSearchParams","parse","searchParams","convertFormDataToSearchParams","convertSearchParamsToFormData","append","boundaryId","boundaryMatches","findIndex","currentUrl","nextUrl","navigationMatches","isNewLoader","currentRouteMatch","nextRouteMatch","shouldRevalidateLoader","currentParams","nextParams","defaultShouldRevalidate","isNewRouteInstance","fetcherMatches","fetcherMatch","shouldRevalidate","currentLoaderData","currentMatch","isNew","isMissingData","currentPath","loaderMatch","arg","routeChoice","loadLazyRouteModule","lazyRoute","routeToUpdate","routeUpdates","lazyRouteProperty","staticRouteValue","isPropertyStaticallyDefined","resultType","onReject","runHandler","handler","handlerError","protocol","isSameBasename","queryRouteResponse","contentType","isDeferredData","_result$init","_result$init2","deferred","foundError","newLoaderData","mergedLoaderData","hasOwnProperty","eligibleMatches","reverse","_temp5","errorMessage","obj","signals","isRevalidatingLoader","unwrap","getAll","pathMatches","_window","transitions","sessionPositions","sessionStorage","getItem","setItem"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"router.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// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\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: State;\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`. This may be either a URL or the pieces\n * of a 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\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\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\nexport function 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 // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\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, warning } 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 reloadDocument?: boolean;\n replace?: 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\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on ``,\n * useSubmit(), ``, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\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?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable | null;\n\n/**\n * Route loader function signature\n */\nexport interface LoaderFunction {\n (args: LoaderFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (args: ActionFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\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 text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionResult?: any;\n defaultShouldRevalidate: boolean;\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: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit & Required> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction {\n (): Promise>>;\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 lazy?: LazyRouteFunction;\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\nexport type RouteManifest = Record;\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 */\nexport type 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 you 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 mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: number[] = [],\n manifest: RouteManifest = {}\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 !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\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\nexport interface UIMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\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 explode _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: string = 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 // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:(\\w+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\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, compiledParams] = 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 = compiledParams.reduce>(\n (memo, { paramName, isOptional }, 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 const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = safelyDecodeURIComponent(value || \"\", paramName);\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\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 params: CompiledPathParam[] = [];\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, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n });\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\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, params];\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 * 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 (toPathname == null) {\n from = locationPathname;\n } else if (isPathRelative) {\n let fromSegments = routePathnames[routePathnames.length - 1]\n .replace(/^\\//, \"\")\n .split(\"/\");\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"path\", each leading .. segment means \"go up one URL segment\"\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n fromSegments.pop();\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = \"/\" + fromSegments.join(\"/\");\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"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, undefined, 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 the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\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 & { replace?: boolean })\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 if (typeof init === \"object\" && init.replace)\n headers.set(\"X-Remix-Redirect-Replace\", \"true\");\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private 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 warning,\n} from \"./history\";\nimport type {\n ActionFunction,\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n AgnosticRouteObject,\n DataResult,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n ImmutableRouteKey,\n LoaderFunction,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n stripBasename,\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 * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\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 | null, 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 | null,\n opts?: RouterFetchOptions\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 * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): 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 * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_prependBasename: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n hydrationData?: HydrationState;\n window?: Window;\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\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n unstable_flushSync: boolean;\n }\n ): void;\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: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\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 json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\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 text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\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}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\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 json: undefined,\n text: 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 json: undefined,\n text: 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 defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\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 const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_prependBasename: false,\n ...init.future,\n };\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(dataRoutes, init.history.location, basename);\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 // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n !initialMatches.some((m) => m.route.lazy) &&\n // And we have to either have no loaders or have been provided hydrationData\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 // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map> = new Map<\n string,\n Set\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = 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 // - useRevalidator()\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\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\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 let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\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 if (removePageHideEventListener) {\n removePageHideEventListener();\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(\n newState: Partial,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\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 { flushSync }: { flushSync?: boolean } = {}\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 let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\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 if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\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 let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\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,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = 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 | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\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 flushSync = (opts && opts.unstable_flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\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 let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ 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 enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync,\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 fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: 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 pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\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(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\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, flushSync }\n );\n\n if (actionOutput.shortCircuited) {\n return;\n }\n\n pendingActionData = actionOutput.pendingActionData;\n pendingError = actionOutput.pendingActionError;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\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.fetcherSubmission,\n opts && opts.replace,\n flushSync,\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; flushSync?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\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 && !actionMatch.route.lazy) {\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 manifest,\n mapRouteProperties,\n 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 fetcherSubmission?: Submission,\n replace?: boolean,\n flushSync?: 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 =\n overrideNavigation || getLoadingNavigation(location, submission);\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 =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionData,\n pendingError\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 pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingError || null,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\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 = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n let actionData = pendingActionData || state.actionData;\n updateState(\n {\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 flushSync,\n }\n );\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\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 if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\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 if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(state, redirect.result, {\n replace: replace || redirect.result.replace,\n });\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 let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\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 | null,\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 let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\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 });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\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 flushSync: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action && !match.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\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 originatingLoadId = incrementingLoadId;\n let actionResult = await callLoaderOrAction(\n \"action\",\n fetchRequest,\n match,\n requestMatches,\n manifest,\n mapRouteProperties,\n basename\n );\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by 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 (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(state, actionResult, {\n fetcherSubmission: submission,\n });\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 nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, 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 = getLoadingFetcher(submission, actionResult.data);\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 deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n { [match.route.id]: actionResult.data },\n undefined // No need to send through errors since we short circuit above\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 = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\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 abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\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 if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(state, redirect.result, {\n replace: redirect.result.replace,\n });\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 // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n 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 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 flushSync: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\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\n let originatingLoadId = incrementingLoadId;\n let result: DataResult = await callLoaderOrAction(\n \"loader\",\n fetchRequest,\n match,\n matches,\n manifest,\n mapRouteProperties,\n 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 our 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 (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(state, result);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\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 fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.revalidate) {\n isRevalidationRequired = true;\n }\n\n let redirectLocation = createLocation(state.location, redirect.location, {\n _isRedirect: true,\n });\n invariant(\n redirectLocation,\n \"Expected a location on the redirect navigation\"\n );\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.reloadDocument) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(redirect.location)) {\n const url = init.history.createURL(redirect.location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(redirect.location);\n } else {\n routerWindow.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 } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\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 let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: redirect.location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\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(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename\n )\n ),\n ...fetchersToLoad.map((f) => {\n if (f.matches && f.match && f.controller) {\n return callLoaderOrAction(\n \"loader\",\n createClientSideRequest(init.history, f.path, f.controller.signal),\n f.match,\n f.matches,\n manifest,\n mapRouteProperties,\n basename\n );\n } else {\n let error: ErrorResult = {\n type: ResultType.error,\n error: getInternalRouterError(404, { pathname: f.path }),\n };\n return error;\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 loaderResults.map(() => request.signal),\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\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 updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher(key: string): Fetcher {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\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 = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\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 updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\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 let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ 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 || null;\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 getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n router = {\n get basename() {\n return basename;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\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: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\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;\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;\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) {\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 && !actionMatch.route.lazy) {\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 manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n );\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\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 (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\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(\n (m) => m.route.loader || m.route.lazy\n );\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 manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n )\n ),\n ]);\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\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: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getPathContributingMatches(contextualMatches).map((m) => m.pathnameBase),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\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 normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\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 let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve 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 deletedFetchers: Set,\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionData?: RouteData,\n pendingError?: RouteData\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 // 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.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\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 // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n // Clicked the same link, resubmitted a GET form\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate if fetcher won't be present in the subsequent render\n if (\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.includes(key)) {\n // Always revalidate if the fetcher was cancelled\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\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: isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\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: ShouldRevalidateFunctionArgs\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\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n basename: string,\n opts: {\n isStaticRequest?: boolean;\n isRouteRequest?: boolean;\n requestContext?: unknown;\n } = {}\n): Promise {\n let resultType;\n let result;\n let onReject: (() => void) | undefined;\n\n let runHandler = (handler: ActionFunction | LoaderFunction) => {\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 onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n return Promise.race([\n handler({\n request,\n params: match.params,\n context: opts.requestContext,\n }),\n abortPromise,\n ]);\n };\n\n try {\n let handler = match.route[type];\n\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let values = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n ]);\n if (handlerError) {\n throw handlerError;\n }\n result = values[0];\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n handler = match.route[type];\n if (handler) {\n // Handler still run even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, data: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\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 if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\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 location = normalizeTo(\n new URL(request.url),\n matches.slice(0, matches.indexOf(match) + 1),\n basename,\n true,\n location\n );\n } else if (!opts.isStaticRequest) {\n // Strip off the protocol+origin for same-origin + same-basename absolute\n // redirects. If this is a static request, we can let it go back to the\n // browser 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 let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\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 (opts.isStaticRequest) {\n result.headers.set(\"Location\", location);\n throw result;\n }\n\n return {\n type: ResultType.redirect,\n status,\n location,\n replace: result.headers.get(\"X-Remix-Redirect-Replace\") !== null,\n revalidate: result.headers.get(\"X-Remix-Revalidate\") !== null,\n reloadDocument: result.headers.get(\"X-Remix-Reload-Document\") !== 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 (opts.isRouteRequest) {\n let queryRouteResponse: QueryRouteResponse = {\n type:\n resultType === ResultType.error ? ResultType.error : ResultType.data,\n response: result,\n };\n throw queryRouteResponse;\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 ErrorResponseImpl(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 (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\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 } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\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, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\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, controller } = 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 (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else 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 = getDoneFetcher(result.data);\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 && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\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 =\n routes.length === 1\n ? routes[0]\n : 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\" | \"invalid-body\";\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 } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\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 ErrorResponseImpl(\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(\n results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return { result, idx: i };\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 if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\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\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\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 || obj.type === ResultType.error)\n );\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: (AgnosticDataRouteMatch | null)[],\n results: DataResult[],\n signals: (AbortSignal | null)[],\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 // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\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 let signal = signals[index];\n invariant(\n signal,\n \"Expected an AbortSignal for revalidating fetcher deferred result\"\n );\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\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\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n if (transitions.size > 0) {\n let json: Record = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\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","startsWith","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","_extends","_ref","parsedPath","searchIndex","getLocation","validateLocation","defaultView","getIndex","replaceState","handlePop","historyState","pushState","error","DOMException","name","assign","origin","addEventListener","removeEventListener","ResultType","immutableRouteKeys","Set","isIndexRoute","route","convertRoutesToDataRoutes","routes","mapRouteProperties","parentPath","manifest","treePath","id","join","children","indexRoute","pathOrLayoutRoute","matchRoutes","locationArg","basename","stripBasename","branches","flattenRoutes","rankRouteBranches","matches","i","matchRouteBranch","safelyDecodeURI","convertRouteMatchToUiMatch","match","loaderData","params","data","handle","parentsMeta","flattenRoute","relativePath","meta","caseSensitive","childrenIndex","joinPaths","routesMeta","concat","score","computeScore","forEach","_route$path","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","matchPath","Object","pathnameBase","normalizePathname","generatePath","originalPath","prefix","p","String","array","isLastSegment","star","keyMatch","optional","param","pattern","matcher","compiledParams","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","fromSegments","toSegments","shift","routePathnameIndex","hasExplicitTrailingSlash","hasCurrentTrailingSlash","getToPathname","paths","json","init","responseInit","status","headers","Headers","has","set","Response","AbortedDeferredError","DeferredData","constructor","pendingKeysSet","subscribers","deferredKeys","Array","isArray","reject","abortPromise","Promise","r","controller","AbortController","onAbort","unlistenAbortSignal","signal","acc","_ref2","trackPromise","done","add","promise","race","then","onSettle","catch","defineProperty","get","aborted","delete","undefinedError","emit","settledKey","subscriber","subscribe","cancel","abort","v","k","resolveData","resolve","size","unwrappedData","_ref3","unwrapTrackedPromise","pendingKeys","isTrackedPromise","_tracked","_error","_data","defer","redirect","redirectDocument","response","ErrorResponseImpl","statusText","internal","isRouteErrorResponse","validMutationMethodsArr","validMutationMethods","validRequestMethodsArr","validRequestMethods","redirectStatusCodes","redirectPreserveMethodStatusCodes","IDLE_NAVIGATION","formMethod","formAction","formEncType","formData","text","IDLE_FETCHER","IDLE_BLOCKER","proceed","reset","ABSOLUTE_URL_REGEX","defaultMapRouteProperties","hasErrorBoundary","Boolean","TRANSITIONS_STORAGE_KEY","createRouter","routerWindow","isBrowser","createElement","isServer","detectErrorBoundary","dataRoutes","inFlightDataRoutes","future","v7_fetcherPersist","v7_normalizeFormMethod","v7_prependBasename","unlistenHistory","savedScrollPositions","getScrollRestorationKey","getScrollPosition","initialScrollRestored","hydrationData","initialMatches","initialErrors","getInternalRouterError","getShortCircuitMatches","initialized","m","lazy","loader","router","historyAction","navigation","restoreScrollPosition","preventScrollReset","revalidation","actionData","errors","fetchers","Map","blockers","pendingAction","HistoryAction","pendingPreventScrollReset","pendingNavigationController","pendingViewTransitionEnabled","appliedViewTransitions","removePageHideEventListener","isUninterruptedRevalidation","isRevalidationRequired","cancelledDeferredRoutes","cancelledFetcherLoads","fetchControllers","incrementingLoadId","pendingNavigationLoadId","fetchReloadIds","fetchRedirectIds","fetchLoadMatches","activeFetchers","deletedFetchers","activeDeferreds","blockerFunctions","ignoreNextHistoryUpdate","initialize","blockerKey","shouldBlockNavigation","currentLocation","updateBlocker","updateState","startNavigation","restoreAppliedTransitions","_saveAppliedTransitions","persistAppliedTransitions","dispose","clear","deleteFetcher","deleteBlocker","newState","opts","completedFetchers","deletedFetchersKeys","fetcher","unstable_viewTransitionOpts","viewTransitionOpts","unstable_flushSync","flushSync","completeNavigation","_temp","_location$state","_location$state2","isActionReload","isMutationMethod","_isRedirect","keys","mergeLoaderData","priorPaths","toPaths","getSavedScrollPosition","navigate","normalizedPath","normalizeTo","fromRouteId","relative","submission","normalizeNavigateOptions","userReplace","pendingError","enableViewTransition","unstable_viewTransition","revalidate","interruptActiveLoads","startUninterruptedRevalidation","overrideNavigation","saveScrollPosition","routesToUse","loadingNavigation","notFoundMatches","cancelActiveDeferreds","isHashChangeOnly","request","createClientSideRequest","pendingActionData","findNearestBoundary","actionOutput","handleAction","shortCircuited","pendingActionError","getLoadingNavigation","Request","handleLoaders","fetcherSubmission","getSubmittingNavigation","actionMatch","getTargetMatch","type","method","routeId","callLoaderOrAction","isRedirectResult","startRedirectNavigation","isErrorResult","boundaryMatch","isDeferredResult","activeSubmission","getSubmissionFromNavigation","matchesToLoad","revalidatingFetchers","getMatchesToLoad","updatedFetchers","markFetchRedirectsDone","rf","revalidatingFetcher","getLoadingFetcher","abortFetcher","abortPendingFetchRevalidations","f","results","loaderResults","fetcherResults","callLoadersAndMaybeResolveData","findRedirect","fetcherKey","processLoaderData","deferredData","didAbortFetchLoads","abortStaleFetchLoads","shouldUpdateFetchers","fetch","setFetcherError","handleFetcherAction","handleFetcherLoader","requestMatches","existingFetcher","updateFetcherState","getSubmittingFetcher","abortController","fetchRequest","originatingLoadId","actionResult","getDoneFetcher","revalidationRequest","loadId","loadFetcher","staleKey","doneFetcher","resolveDeferredData","_temp2","redirectLocation","isDocumentReload","reloadDocument","redirectHistoryAction","currentMatches","fetchersToLoad","all","resolveDeferredResults","getFetcher","deleteFetcherAndUpdateState","count","markFetchersDone","doneKeys","landedId","yeetedKeys","getBlocker","blocker","newBlocker","blockerFunction","predicate","cancelledRouteIds","dfd","enableScrollRestoration","positions","getPosition","getKey","y","getScrollKey","_internalSetRoutes","newRoutes","_internalFetchControllers","_internalActiveDeferreds","UNSAFE_DEFERRED_SYMBOL","Symbol","createStaticHandler","query","_temp3","requestContext","isValidMethod","methodNotAllowedMatches","statusCode","loaderHeaders","actionHeaders","queryImpl","isResponse","queryRoute","_temp4","find","values","_result$activeDeferre","routeMatch","submit","loadRouteData","isQueryRouteResponse","isRedirectResponse","isRouteRequest","isStaticRequest","Location","context","loaderRequest","getLoaderMatchesUntilBoundary","processRouteLoaderData","executedLoaders","fromEntries","getStaticContextFromError","newContext","_deepestRenderedBoundaryId","isSubmissionNavigation","body","prependBasename","contextualMatches","activeRouteMatch","hasNakedIndexQuery","normalizeFormMethod","isFetcher","getInvalidBodyError","rawFormMethod","toUpperCase","stripHashFromPath","FormData","URLSearchParams","parse","searchParams","convertFormDataToSearchParams","convertSearchParamsToFormData","append","boundaryId","boundaryMatches","findIndex","currentUrl","nextUrl","navigationMatches","isNewLoader","currentRouteMatch","nextRouteMatch","shouldRevalidateLoader","currentParams","nextParams","defaultShouldRevalidate","isNewRouteInstance","fetcherMatches","fetcherMatch","shouldRevalidate","currentLoaderData","currentMatch","isNew","isMissingData","currentPath","loaderMatch","arg","routeChoice","loadLazyRouteModule","lazyRoute","routeToUpdate","routeUpdates","lazyRouteProperty","staticRouteValue","isPropertyStaticallyDefined","resultType","onReject","runHandler","handler","handlerError","protocol","isSameBasename","queryRouteResponse","contentType","isDeferredData","_result$init","_result$init2","deferred","foundError","newLoaderData","mergedLoaderData","hasOwnProperty","eligibleMatches","reverse","_temp5","errorMessage","obj","signals","isRevalidatingLoader","unwrap","getAll","pathMatches","_window","transitions","sessionPositions","sessionStorage","getItem","setItem"],"mappings":"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"} \ No newline at end of file diff --git a/dist/router.umd.js b/dist/router.umd.js index 7b45d8ab050d4d623b775cf375f89fa2d70c8bee..6f13c75bad862d6c344a69210820d7decb2175bd 100644 --- a/dist/router.umd.js +++ b/dist/router.umd.js @@ -1483,6 +1483,7 @@ } let headers = new Headers(responseInit.headers); headers.set("Location", url); + if (typeof init === "object" && init.replace) headers.set("X-Remix-Redirect-Replace", "true"); return new Response(null, _extends({}, responseInit, { headers })); @@ -2493,7 +2494,7 @@ fetchRedirectIds.add(fetcherKey); } await startRedirectNavigation(state, redirect.result, { - replace + replace: replace || redirect.result.replace }); return { shortCircuited: true @@ -2700,7 +2701,9 @@ let fetcherKey = revalidatingFetchers[redirect.idx - matchesToLoad.length].key; fetchRedirectIds.add(fetcherKey); } - return startRedirectNavigation(state, redirect.result); + return startRedirectNavigation(state, redirect.result, { + replace: redirect.result.replace + }); } // Process and commit output from loaders @@ -4123,6 +4126,7 @@ type: ResultType.redirect, status, location, + replace: result.headers.get("X-Remix-Redirect-Replace") !== null, revalidate: result.headers.get("X-Remix-Revalidate") !== null, reloadDocument: result.headers.get("X-Remix-Reload-Document") !== null }; diff --git a/dist/router.umd.js.map b/dist/router.umd.js.map index d7d3bf6bfaddc2f99d450c3987d152566a2c61a5..2f23291043475ef315ea620085f855c64f44d54d 100644 --- a/dist/router.umd.js.map +++ b/dist/router.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"router.umd.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// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\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: State;\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`. This may be either a URL or the pieces\n * of a 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\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\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\nexport function 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 // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\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, warning } 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 reloadDocument?: 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\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on ``,\n * useSubmit(), ``, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\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?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable | null;\n\n/**\n * Route loader function signature\n */\nexport interface LoaderFunction {\n (args: LoaderFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (args: ActionFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\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 text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionResult?: any;\n defaultShouldRevalidate: boolean;\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: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit & Required> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction {\n (): Promise>>;\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 lazy?: LazyRouteFunction;\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\nexport type RouteManifest = Record;\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 */\nexport type 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 you 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 mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: number[] = [],\n manifest: RouteManifest = {}\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 !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\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\nexport interface UIMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\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 explode _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: string = 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 // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:(\\w+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\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, compiledParams] = 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 = compiledParams.reduce>(\n (memo, { paramName, isOptional }, 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 const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = safelyDecodeURIComponent(value || \"\", paramName);\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\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 params: CompiledPathParam[] = [];\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, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n });\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\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, params];\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 * 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 (toPathname == null) {\n from = locationPathname;\n } else if (isPathRelative) {\n let fromSegments = routePathnames[routePathnames.length - 1]\n .replace(/^\\//, \"\")\n .split(\"/\");\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"path\", each leading .. segment means \"go up one URL segment\"\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n fromSegments.pop();\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = \"/\" + fromSegments.join(\"/\");\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"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, undefined, 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 the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\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 * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private 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 warning,\n} from \"./history\";\nimport type {\n ActionFunction,\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n AgnosticRouteObject,\n DataResult,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n ImmutableRouteKey,\n LoaderFunction,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n stripBasename,\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 * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\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 | null, 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 | null,\n opts?: RouterFetchOptions\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 * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): 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 * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_prependBasename: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n hydrationData?: HydrationState;\n window?: Window;\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\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n unstable_flushSync: boolean;\n }\n ): void;\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: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\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 json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\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 text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\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}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\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 json: undefined,\n text: 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 json: undefined,\n text: 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 defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\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 const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_prependBasename: false,\n ...init.future,\n };\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(dataRoutes, init.history.location, basename);\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 // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n !initialMatches.some((m) => m.route.lazy) &&\n // And we have to either have no loaders or have been provided hydrationData\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 // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map> = new Map<\n string,\n Set\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = 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 // - useRevalidator()\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\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\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 let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\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 if (removePageHideEventListener) {\n removePageHideEventListener();\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(\n newState: Partial,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\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 { flushSync }: { flushSync?: boolean } = {}\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 let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\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 if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\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 let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\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,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = 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 | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\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 flushSync = (opts && opts.unstable_flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\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 let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ 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 enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync,\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 fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: 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 pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\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(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\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, flushSync }\n );\n\n if (actionOutput.shortCircuited) {\n return;\n }\n\n pendingActionData = actionOutput.pendingActionData;\n pendingError = actionOutput.pendingActionError;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\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.fetcherSubmission,\n opts && opts.replace,\n flushSync,\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; flushSync?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\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 && !actionMatch.route.lazy) {\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 manifest,\n mapRouteProperties,\n 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 fetcherSubmission?: Submission,\n replace?: boolean,\n flushSync?: 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 =\n overrideNavigation || getLoadingNavigation(location, submission);\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 =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionData,\n pendingError\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 pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingError || null,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\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 = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n let actionData = pendingActionData || state.actionData;\n updateState(\n {\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 flushSync,\n }\n );\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\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 if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\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 if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(state, redirect.result, { 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 let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\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 | null,\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 let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\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 });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\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 flushSync: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action && !match.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\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 originatingLoadId = incrementingLoadId;\n let actionResult = await callLoaderOrAction(\n \"action\",\n fetchRequest,\n match,\n requestMatches,\n manifest,\n mapRouteProperties,\n basename\n );\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by 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 (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(state, actionResult, {\n fetcherSubmission: submission,\n });\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 nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, 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 = getLoadingFetcher(submission, actionResult.data);\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 deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n { [match.route.id]: actionResult.data },\n undefined // No need to send through errors since we short circuit above\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 = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\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 abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\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 if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(state, redirect.result);\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 // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n 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 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 flushSync: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\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\n let originatingLoadId = incrementingLoadId;\n let result: DataResult = await callLoaderOrAction(\n \"loader\",\n fetchRequest,\n match,\n matches,\n manifest,\n mapRouteProperties,\n 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 our 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 (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(state, result);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\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 fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.revalidate) {\n isRevalidationRequired = true;\n }\n\n let redirectLocation = createLocation(state.location, redirect.location, {\n _isRedirect: true,\n });\n invariant(\n redirectLocation,\n \"Expected a location on the redirect navigation\"\n );\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.reloadDocument) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(redirect.location)) {\n const url = init.history.createURL(redirect.location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(redirect.location);\n } else {\n routerWindow.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 } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\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 let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: redirect.location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\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(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename\n )\n ),\n ...fetchersToLoad.map((f) => {\n if (f.matches && f.match && f.controller) {\n return callLoaderOrAction(\n \"loader\",\n createClientSideRequest(init.history, f.path, f.controller.signal),\n f.match,\n f.matches,\n manifest,\n mapRouteProperties,\n basename\n );\n } else {\n let error: ErrorResult = {\n type: ResultType.error,\n error: getInternalRouterError(404, { pathname: f.path }),\n };\n return error;\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 loaderResults.map(() => request.signal),\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\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 updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher(key: string): Fetcher {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\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 = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\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 updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\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 let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ 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 || null;\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 getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n router = {\n get basename() {\n return basename;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\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: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\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;\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;\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) {\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 && !actionMatch.route.lazy) {\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 manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n );\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\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 (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\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(\n (m) => m.route.loader || m.route.lazy\n );\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 manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n )\n ),\n ]);\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\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: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getPathContributingMatches(contextualMatches).map((m) => m.pathnameBase),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\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 normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\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 let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve 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 deletedFetchers: Set,\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionData?: RouteData,\n pendingError?: RouteData\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 // 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.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\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 // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n // Clicked the same link, resubmitted a GET form\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate if fetcher won't be present in the subsequent render\n if (\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.includes(key)) {\n // Always revalidate if the fetcher was cancelled\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\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: isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\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: ShouldRevalidateFunctionArgs\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\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n basename: string,\n opts: {\n isStaticRequest?: boolean;\n isRouteRequest?: boolean;\n requestContext?: unknown;\n } = {}\n): Promise {\n let resultType;\n let result;\n let onReject: (() => void) | undefined;\n\n let runHandler = (handler: ActionFunction | LoaderFunction) => {\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 onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n return Promise.race([\n handler({\n request,\n params: match.params,\n context: opts.requestContext,\n }),\n abortPromise,\n ]);\n };\n\n try {\n let handler = match.route[type];\n\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let values = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n ]);\n if (handlerError) {\n throw handlerError;\n }\n result = values[0];\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n handler = match.route[type];\n if (handler) {\n // Handler still run even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, data: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\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 if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\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 location = normalizeTo(\n new URL(request.url),\n matches.slice(0, matches.indexOf(match) + 1),\n basename,\n true,\n location\n );\n } else if (!opts.isStaticRequest) {\n // Strip off the protocol+origin for same-origin + same-basename absolute\n // redirects. If this is a static request, we can let it go back to the\n // browser 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 let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\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 (opts.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 reloadDocument: result.headers.get(\"X-Remix-Reload-Document\") !== 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 (opts.isRouteRequest) {\n let queryRouteResponse: QueryRouteResponse = {\n type:\n resultType === ResultType.error ? ResultType.error : ResultType.data,\n response: result,\n };\n throw queryRouteResponse;\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 ErrorResponseImpl(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 (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\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 } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\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, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\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, controller } = 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 (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else 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 = getDoneFetcher(result.data);\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 && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\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 =\n routes.length === 1\n ? routes[0]\n : 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\" | \"invalid-body\";\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 } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\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 ErrorResponseImpl(\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(\n results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return { result, idx: i };\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 if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\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\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\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 || obj.type === ResultType.error)\n );\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: (AgnosticDataRouteMatch | null)[],\n results: DataResult[],\n signals: (AbortSignal | null)[],\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 // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\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 let signal = signals[index];\n invariant(\n signal,\n \"Expected an AbortSignal for revalidating fetcher deferred result\"\n );\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\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\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n if (transitions.size > 0) {\n let json: Record = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\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","startsWith","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","_extends","_ref","parsedPath","searchIndex","getLocation","validateLocation","defaultView","getIndex","replaceState","handlePop","historyState","pushState","error","DOMException","name","assign","origin","addEventListener","removeEventListener","ResultType","immutableRouteKeys","Set","isIndexRoute","route","convertRoutesToDataRoutes","routes","mapRouteProperties","parentPath","manifest","treePath","id","join","children","indexRoute","pathOrLayoutRoute","matchRoutes","locationArg","basename","stripBasename","branches","flattenRoutes","rankRouteBranches","matches","i","matchRouteBranch","safelyDecodeURI","convertRouteMatchToUiMatch","match","loaderData","params","data","handle","parentsMeta","flattenRoute","relativePath","meta","caseSensitive","childrenIndex","joinPaths","routesMeta","concat","score","computeScore","forEach","_route$path","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","matchPath","Object","pathnameBase","normalizePathname","generatePath","originalPath","prefix","p","String","array","isLastSegment","star","keyMatch","optional","param","pattern","matcher","compiledParams","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","fromSegments","toSegments","shift","routePathnameIndex","hasExplicitTrailingSlash","hasCurrentTrailingSlash","getToPathname","paths","json","init","responseInit","status","headers","Headers","has","set","Response","AbortedDeferredError","DeferredData","constructor","pendingKeysSet","subscribers","deferredKeys","Array","isArray","reject","abortPromise","Promise","r","controller","AbortController","onAbort","unlistenAbortSignal","signal","acc","_ref2","trackPromise","done","add","promise","race","then","onSettle","catch","defineProperty","get","aborted","delete","undefinedError","emit","settledKey","subscriber","subscribe","cancel","abort","v","k","resolveData","resolve","size","unwrappedData","_ref3","unwrapTrackedPromise","pendingKeys","isTrackedPromise","_tracked","_error","_data","defer","redirect","redirectDocument","response","ErrorResponseImpl","statusText","internal","isRouteErrorResponse","validMutationMethodsArr","validMutationMethods","validRequestMethodsArr","validRequestMethods","redirectStatusCodes","redirectPreserveMethodStatusCodes","IDLE_NAVIGATION","formMethod","formAction","formEncType","formData","text","IDLE_FETCHER","IDLE_BLOCKER","proceed","reset","ABSOLUTE_URL_REGEX","defaultMapRouteProperties","hasErrorBoundary","Boolean","TRANSITIONS_STORAGE_KEY","createRouter","routerWindow","isBrowser","createElement","isServer","detectErrorBoundary","dataRoutes","inFlightDataRoutes","future","v7_fetcherPersist","v7_normalizeFormMethod","v7_prependBasename","unlistenHistory","savedScrollPositions","getScrollRestorationKey","getScrollPosition","initialScrollRestored","hydrationData","initialMatches","initialErrors","getInternalRouterError","getShortCircuitMatches","initialized","m","lazy","loader","router","historyAction","navigation","restoreScrollPosition","preventScrollReset","revalidation","actionData","errors","fetchers","Map","blockers","pendingAction","HistoryAction","pendingPreventScrollReset","pendingNavigationController","pendingViewTransitionEnabled","appliedViewTransitions","removePageHideEventListener","isUninterruptedRevalidation","isRevalidationRequired","cancelledDeferredRoutes","cancelledFetcherLoads","fetchControllers","incrementingLoadId","pendingNavigationLoadId","fetchReloadIds","fetchRedirectIds","fetchLoadMatches","activeFetchers","deletedFetchers","activeDeferreds","blockerFunctions","ignoreNextHistoryUpdate","initialize","blockerKey","shouldBlockNavigation","currentLocation","updateBlocker","updateState","startNavigation","restoreAppliedTransitions","_saveAppliedTransitions","persistAppliedTransitions","dispose","clear","deleteFetcher","deleteBlocker","newState","opts","completedFetchers","deletedFetchersKeys","fetcher","unstable_viewTransitionOpts","viewTransitionOpts","unstable_flushSync","flushSync","completeNavigation","_temp","_location$state","_location$state2","isActionReload","isMutationMethod","_isRedirect","keys","mergeLoaderData","priorPaths","toPaths","getSavedScrollPosition","navigate","normalizedPath","normalizeTo","fromRouteId","relative","submission","normalizeNavigateOptions","userReplace","pendingError","enableViewTransition","unstable_viewTransition","revalidate","interruptActiveLoads","startUninterruptedRevalidation","overrideNavigation","saveScrollPosition","routesToUse","loadingNavigation","notFoundMatches","cancelActiveDeferreds","isHashChangeOnly","request","createClientSideRequest","pendingActionData","findNearestBoundary","actionOutput","handleAction","shortCircuited","pendingActionError","getLoadingNavigation","Request","handleLoaders","fetcherSubmission","getSubmittingNavigation","actionMatch","getTargetMatch","type","method","routeId","callLoaderOrAction","isRedirectResult","startRedirectNavigation","isErrorResult","boundaryMatch","isDeferredResult","activeSubmission","getSubmissionFromNavigation","matchesToLoad","revalidatingFetchers","getMatchesToLoad","updatedFetchers","markFetchRedirectsDone","rf","revalidatingFetcher","getLoadingFetcher","abortFetcher","abortPendingFetchRevalidations","f","results","loaderResults","fetcherResults","callLoadersAndMaybeResolveData","findRedirect","fetcherKey","processLoaderData","deferredData","didAbortFetchLoads","abortStaleFetchLoads","shouldUpdateFetchers","fetch","setFetcherError","handleFetcherAction","handleFetcherLoader","requestMatches","existingFetcher","updateFetcherState","getSubmittingFetcher","abortController","fetchRequest","originatingLoadId","actionResult","getDoneFetcher","revalidationRequest","loadId","loadFetcher","staleKey","doneFetcher","resolveDeferredData","_temp2","redirectLocation","isDocumentReload","reloadDocument","redirectHistoryAction","currentMatches","fetchersToLoad","all","resolveDeferredResults","getFetcher","deleteFetcherAndUpdateState","count","markFetchersDone","doneKeys","landedId","yeetedKeys","getBlocker","blocker","newBlocker","blockerFunction","predicate","cancelledRouteIds","dfd","enableScrollRestoration","positions","getPosition","getKey","y","getScrollKey","_internalSetRoutes","newRoutes","_internalFetchControllers","_internalActiveDeferreds","UNSAFE_DEFERRED_SYMBOL","Symbol","createStaticHandler","query","_temp3","requestContext","isValidMethod","methodNotAllowedMatches","statusCode","loaderHeaders","actionHeaders","queryImpl","isResponse","queryRoute","_temp4","find","values","_result$activeDeferre","routeMatch","submit","loadRouteData","isQueryRouteResponse","isRedirectResponse","isRouteRequest","isStaticRequest","Location","context","loaderRequest","getLoaderMatchesUntilBoundary","processRouteLoaderData","executedLoaders","fromEntries","getStaticContextFromError","newContext","_deepestRenderedBoundaryId","isSubmissionNavigation","body","prependBasename","contextualMatches","activeRouteMatch","hasNakedIndexQuery","normalizeFormMethod","isFetcher","getInvalidBodyError","rawFormMethod","toUpperCase","stripHashFromPath","FormData","URLSearchParams","parse","searchParams","convertFormDataToSearchParams","convertSearchParamsToFormData","append","boundaryId","boundaryMatches","findIndex","currentUrl","nextUrl","navigationMatches","isNewLoader","currentRouteMatch","nextRouteMatch","shouldRevalidateLoader","currentParams","nextParams","defaultShouldRevalidate","isNewRouteInstance","fetcherMatches","fetcherMatch","shouldRevalidate","currentLoaderData","currentMatch","isNew","isMissingData","currentPath","loaderMatch","arg","routeChoice","loadLazyRouteModule","lazyRoute","routeToUpdate","routeUpdates","lazyRouteProperty","staticRouteValue","isPropertyStaticallyDefined","resultType","onReject","runHandler","handler","handlerError","protocol","isSameBasename","queryRouteResponse","contentType","isDeferredData","_result$init","_result$init2","deferred","foundError","newLoaderData","mergedLoaderData","hasOwnProperty","eligibleMatches","reverse","_temp5","errorMessage","obj","signals","isRevalidatingLoader","unwrap","getAll","pathMatches","_window","transitions","sessionPositions","sessionStorage","getItem","setItem"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"router.umd.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// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\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: State;\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`. This may be either a URL or the pieces\n * of a 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\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\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\nexport function 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 // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\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, warning } 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 reloadDocument?: boolean;\n replace?: 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\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on ``,\n * useSubmit(), ``, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\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?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable | null;\n\n/**\n * Route loader function signature\n */\nexport interface LoaderFunction {\n (args: LoaderFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (args: ActionFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\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 text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionResult?: any;\n defaultShouldRevalidate: boolean;\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: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit & Required> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction {\n (): Promise>>;\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 lazy?: LazyRouteFunction;\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\nexport type RouteManifest = Record;\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 */\nexport type 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 you 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 mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: number[] = [],\n manifest: RouteManifest = {}\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 !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\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\nexport interface UIMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\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 explode _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: string = 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 // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:(\\w+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\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, compiledParams] = 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 = compiledParams.reduce>(\n (memo, { paramName, isOptional }, 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 const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = safelyDecodeURIComponent(value || \"\", paramName);\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\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 params: CompiledPathParam[] = [];\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, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n });\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\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, params];\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 * 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 (toPathname == null) {\n from = locationPathname;\n } else if (isPathRelative) {\n let fromSegments = routePathnames[routePathnames.length - 1]\n .replace(/^\\//, \"\")\n .split(\"/\");\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"path\", each leading .. segment means \"go up one URL segment\"\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n fromSegments.pop();\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = \"/\" + fromSegments.join(\"/\");\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"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, undefined, 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 the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\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 & { replace?: boolean })\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 if (typeof init === \"object\" && init.replace)\n headers.set(\"X-Remix-Redirect-Replace\", \"true\");\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private 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 warning,\n} from \"./history\";\nimport type {\n ActionFunction,\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n AgnosticRouteObject,\n DataResult,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n ImmutableRouteKey,\n LoaderFunction,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n stripBasename,\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 * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\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 | null, 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 | null,\n opts?: RouterFetchOptions\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 * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): 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 * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_prependBasename: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n hydrationData?: HydrationState;\n window?: Window;\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\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n unstable_flushSync: boolean;\n }\n ): void;\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: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\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 json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\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 text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\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}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\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 json: undefined,\n text: 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 json: undefined,\n text: 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 defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\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 const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_prependBasename: false,\n ...init.future,\n };\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(dataRoutes, init.history.location, basename);\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 // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n !initialMatches.some((m) => m.route.lazy) &&\n // And we have to either have no loaders or have been provided hydrationData\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 // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map> = new Map<\n string,\n Set\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = 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 // - useRevalidator()\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\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\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 let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\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 if (removePageHideEventListener) {\n removePageHideEventListener();\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(\n newState: Partial,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\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 { flushSync }: { flushSync?: boolean } = {}\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 let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\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 if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\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 let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\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,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = 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 | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\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 flushSync = (opts && opts.unstable_flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\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 let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ 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 enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync,\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 fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: 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 pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\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(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\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, flushSync }\n );\n\n if (actionOutput.shortCircuited) {\n return;\n }\n\n pendingActionData = actionOutput.pendingActionData;\n pendingError = actionOutput.pendingActionError;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\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.fetcherSubmission,\n opts && opts.replace,\n flushSync,\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; flushSync?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\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 && !actionMatch.route.lazy) {\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 manifest,\n mapRouteProperties,\n 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 fetcherSubmission?: Submission,\n replace?: boolean,\n flushSync?: 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 =\n overrideNavigation || getLoadingNavigation(location, submission);\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 =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionData,\n pendingError\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 pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingError || null,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\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 = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n let actionData = pendingActionData || state.actionData;\n updateState(\n {\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 flushSync,\n }\n );\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\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 if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\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 if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(state, redirect.result, {\n replace: replace || redirect.result.replace,\n });\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 let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\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 | null,\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 let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\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 });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\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 flushSync: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action && !match.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\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 originatingLoadId = incrementingLoadId;\n let actionResult = await callLoaderOrAction(\n \"action\",\n fetchRequest,\n match,\n requestMatches,\n manifest,\n mapRouteProperties,\n basename\n );\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by 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 (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(state, actionResult, {\n fetcherSubmission: submission,\n });\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 nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, 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 = getLoadingFetcher(submission, actionResult.data);\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 deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n { [match.route.id]: actionResult.data },\n undefined // No need to send through errors since we short circuit above\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 = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\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 abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\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 if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(state, redirect.result, {\n replace: redirect.result.replace,\n });\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 // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n 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 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 flushSync: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\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\n let originatingLoadId = incrementingLoadId;\n let result: DataResult = await callLoaderOrAction(\n \"loader\",\n fetchRequest,\n match,\n matches,\n manifest,\n mapRouteProperties,\n 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 our 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 (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(state, result);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\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 fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.revalidate) {\n isRevalidationRequired = true;\n }\n\n let redirectLocation = createLocation(state.location, redirect.location, {\n _isRedirect: true,\n });\n invariant(\n redirectLocation,\n \"Expected a location on the redirect navigation\"\n );\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.reloadDocument) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(redirect.location)) {\n const url = init.history.createURL(redirect.location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(redirect.location);\n } else {\n routerWindow.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 } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\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 let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: redirect.location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\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(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename\n )\n ),\n ...fetchersToLoad.map((f) => {\n if (f.matches && f.match && f.controller) {\n return callLoaderOrAction(\n \"loader\",\n createClientSideRequest(init.history, f.path, f.controller.signal),\n f.match,\n f.matches,\n manifest,\n mapRouteProperties,\n basename\n );\n } else {\n let error: ErrorResult = {\n type: ResultType.error,\n error: getInternalRouterError(404, { pathname: f.path }),\n };\n return error;\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 loaderResults.map(() => request.signal),\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\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 updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher(key: string): Fetcher {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\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 = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\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 updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\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 let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ 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 || null;\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 getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n router = {\n get basename() {\n return basename;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\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: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\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;\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;\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) {\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 && !actionMatch.route.lazy) {\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 manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n );\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\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 (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\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(\n (m) => m.route.loader || m.route.lazy\n );\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 manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n )\n ),\n ]);\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\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: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getPathContributingMatches(contextualMatches).map((m) => m.pathnameBase),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\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 normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\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 let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve 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 deletedFetchers: Set,\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionData?: RouteData,\n pendingError?: RouteData\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 // 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.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\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 // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n // Clicked the same link, resubmitted a GET form\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate if fetcher won't be present in the subsequent render\n if (\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.includes(key)) {\n // Always revalidate if the fetcher was cancelled\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\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: isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\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: ShouldRevalidateFunctionArgs\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\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n basename: string,\n opts: {\n isStaticRequest?: boolean;\n isRouteRequest?: boolean;\n requestContext?: unknown;\n } = {}\n): Promise {\n let resultType;\n let result;\n let onReject: (() => void) | undefined;\n\n let runHandler = (handler: ActionFunction | LoaderFunction) => {\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 onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n return Promise.race([\n handler({\n request,\n params: match.params,\n context: opts.requestContext,\n }),\n abortPromise,\n ]);\n };\n\n try {\n let handler = match.route[type];\n\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let values = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n ]);\n if (handlerError) {\n throw handlerError;\n }\n result = values[0];\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n handler = match.route[type];\n if (handler) {\n // Handler still run even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, data: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\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 if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\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 location = normalizeTo(\n new URL(request.url),\n matches.slice(0, matches.indexOf(match) + 1),\n basename,\n true,\n location\n );\n } else if (!opts.isStaticRequest) {\n // Strip off the protocol+origin for same-origin + same-basename absolute\n // redirects. If this is a static request, we can let it go back to the\n // browser 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 let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\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 (opts.isStaticRequest) {\n result.headers.set(\"Location\", location);\n throw result;\n }\n\n return {\n type: ResultType.redirect,\n status,\n location,\n replace: result.headers.get(\"X-Remix-Redirect-Replace\") !== null,\n revalidate: result.headers.get(\"X-Remix-Revalidate\") !== null,\n reloadDocument: result.headers.get(\"X-Remix-Reload-Document\") !== 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 (opts.isRouteRequest) {\n let queryRouteResponse: QueryRouteResponse = {\n type:\n resultType === ResultType.error ? ResultType.error : ResultType.data,\n response: result,\n };\n throw queryRouteResponse;\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 ErrorResponseImpl(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 (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\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 } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\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, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\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, controller } = 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 (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else 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 = getDoneFetcher(result.data);\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 && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\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 =\n routes.length === 1\n ? routes[0]\n : 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\" | \"invalid-body\";\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 } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\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 ErrorResponseImpl(\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(\n results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return { result, idx: i };\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 if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\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\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\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 || obj.type === ResultType.error)\n );\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: (AgnosticDataRouteMatch | null)[],\n results: DataResult[],\n signals: (AbortSignal | null)[],\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 // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\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 let signal = signals[index];\n invariant(\n signal,\n \"Expected an AbortSignal for revalidating fetcher deferred result\"\n );\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\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\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n if (transitions.size > 0) {\n let json: Record = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\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","startsWith","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","_extends","_ref","parsedPath","searchIndex","getLocation","validateLocation","defaultView","getIndex","replaceState","handlePop","historyState","pushState","error","DOMException","name","assign","origin","addEventListener","removeEventListener","ResultType","immutableRouteKeys","Set","isIndexRoute","route","convertRoutesToDataRoutes","routes","mapRouteProperties","parentPath","manifest","treePath","id","join","children","indexRoute","pathOrLayoutRoute","matchRoutes","locationArg","basename","stripBasename","branches","flattenRoutes","rankRouteBranches","matches","i","matchRouteBranch","safelyDecodeURI","convertRouteMatchToUiMatch","match","loaderData","params","data","handle","parentsMeta","flattenRoute","relativePath","meta","caseSensitive","childrenIndex","joinPaths","routesMeta","concat","score","computeScore","forEach","_route$path","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","matchPath","Object","pathnameBase","normalizePathname","generatePath","originalPath","prefix","p","String","array","isLastSegment","star","keyMatch","optional","param","pattern","matcher","compiledParams","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","fromSegments","toSegments","shift","routePathnameIndex","hasExplicitTrailingSlash","hasCurrentTrailingSlash","getToPathname","paths","json","init","responseInit","status","headers","Headers","has","set","Response","AbortedDeferredError","DeferredData","constructor","pendingKeysSet","subscribers","deferredKeys","Array","isArray","reject","abortPromise","Promise","r","controller","AbortController","onAbort","unlistenAbortSignal","signal","acc","_ref2","trackPromise","done","add","promise","race","then","onSettle","catch","defineProperty","get","aborted","delete","undefinedError","emit","settledKey","subscriber","subscribe","cancel","abort","v","k","resolveData","resolve","size","unwrappedData","_ref3","unwrapTrackedPromise","pendingKeys","isTrackedPromise","_tracked","_error","_data","defer","redirect","redirectDocument","response","ErrorResponseImpl","statusText","internal","isRouteErrorResponse","validMutationMethodsArr","validMutationMethods","validRequestMethodsArr","validRequestMethods","redirectStatusCodes","redirectPreserveMethodStatusCodes","IDLE_NAVIGATION","formMethod","formAction","formEncType","formData","text","IDLE_FETCHER","IDLE_BLOCKER","proceed","reset","ABSOLUTE_URL_REGEX","defaultMapRouteProperties","hasErrorBoundary","Boolean","TRANSITIONS_STORAGE_KEY","createRouter","routerWindow","isBrowser","createElement","isServer","detectErrorBoundary","dataRoutes","inFlightDataRoutes","future","v7_fetcherPersist","v7_normalizeFormMethod","v7_prependBasename","unlistenHistory","savedScrollPositions","getScrollRestorationKey","getScrollPosition","initialScrollRestored","hydrationData","initialMatches","initialErrors","getInternalRouterError","getShortCircuitMatches","initialized","m","lazy","loader","router","historyAction","navigation","restoreScrollPosition","preventScrollReset","revalidation","actionData","errors","fetchers","Map","blockers","pendingAction","HistoryAction","pendingPreventScrollReset","pendingNavigationController","pendingViewTransitionEnabled","appliedViewTransitions","removePageHideEventListener","isUninterruptedRevalidation","isRevalidationRequired","cancelledDeferredRoutes","cancelledFetcherLoads","fetchControllers","incrementingLoadId","pendingNavigationLoadId","fetchReloadIds","fetchRedirectIds","fetchLoadMatches","activeFetchers","deletedFetchers","activeDeferreds","blockerFunctions","ignoreNextHistoryUpdate","initialize","blockerKey","shouldBlockNavigation","currentLocation","updateBlocker","updateState","startNavigation","restoreAppliedTransitions","_saveAppliedTransitions","persistAppliedTransitions","dispose","clear","deleteFetcher","deleteBlocker","newState","opts","completedFetchers","deletedFetchersKeys","fetcher","unstable_viewTransitionOpts","viewTransitionOpts","unstable_flushSync","flushSync","completeNavigation","_temp","_location$state","_location$state2","isActionReload","isMutationMethod","_isRedirect","keys","mergeLoaderData","priorPaths","toPaths","getSavedScrollPosition","navigate","normalizedPath","normalizeTo","fromRouteId","relative","submission","normalizeNavigateOptions","userReplace","pendingError","enableViewTransition","unstable_viewTransition","revalidate","interruptActiveLoads","startUninterruptedRevalidation","overrideNavigation","saveScrollPosition","routesToUse","loadingNavigation","notFoundMatches","cancelActiveDeferreds","isHashChangeOnly","request","createClientSideRequest","pendingActionData","findNearestBoundary","actionOutput","handleAction","shortCircuited","pendingActionError","getLoadingNavigation","Request","handleLoaders","fetcherSubmission","getSubmittingNavigation","actionMatch","getTargetMatch","type","method","routeId","callLoaderOrAction","isRedirectResult","startRedirectNavigation","isErrorResult","boundaryMatch","isDeferredResult","activeSubmission","getSubmissionFromNavigation","matchesToLoad","revalidatingFetchers","getMatchesToLoad","updatedFetchers","markFetchRedirectsDone","rf","revalidatingFetcher","getLoadingFetcher","abortFetcher","abortPendingFetchRevalidations","f","results","loaderResults","fetcherResults","callLoadersAndMaybeResolveData","findRedirect","fetcherKey","processLoaderData","deferredData","didAbortFetchLoads","abortStaleFetchLoads","shouldUpdateFetchers","fetch","setFetcherError","handleFetcherAction","handleFetcherLoader","requestMatches","existingFetcher","updateFetcherState","getSubmittingFetcher","abortController","fetchRequest","originatingLoadId","actionResult","getDoneFetcher","revalidationRequest","loadId","loadFetcher","staleKey","doneFetcher","resolveDeferredData","_temp2","redirectLocation","isDocumentReload","reloadDocument","redirectHistoryAction","currentMatches","fetchersToLoad","all","resolveDeferredResults","getFetcher","deleteFetcherAndUpdateState","count","markFetchersDone","doneKeys","landedId","yeetedKeys","getBlocker","blocker","newBlocker","blockerFunction","predicate","cancelledRouteIds","dfd","enableScrollRestoration","positions","getPosition","getKey","y","getScrollKey","_internalSetRoutes","newRoutes","_internalFetchControllers","_internalActiveDeferreds","UNSAFE_DEFERRED_SYMBOL","Symbol","createStaticHandler","query","_temp3","requestContext","isValidMethod","methodNotAllowedMatches","statusCode","loaderHeaders","actionHeaders","queryImpl","isResponse","queryRoute","_temp4","find","values","_result$activeDeferre","routeMatch","submit","loadRouteData","isQueryRouteResponse","isRedirectResponse","isRouteRequest","isStaticRequest","Location","context","loaderRequest","getLoaderMatchesUntilBoundary","processRouteLoaderData","executedLoaders","fromEntries","getStaticContextFromError","newContext","_deepestRenderedBoundaryId","isSubmissionNavigation","body","prependBasename","contextualMatches","activeRouteMatch","hasNakedIndexQuery","normalizeFormMethod","isFetcher","getInvalidBodyError","rawFormMethod","toUpperCase","stripHashFromPath","FormData","URLSearchParams","parse","searchParams","convertFormDataToSearchParams","convertSearchParamsToFormData","append","boundaryId","boundaryMatches","findIndex","currentUrl","nextUrl","navigationMatches","isNewLoader","currentRouteMatch","nextRouteMatch","shouldRevalidateLoader","currentParams","nextParams","defaultShouldRevalidate","isNewRouteInstance","fetcherMatches","fetcherMatch","shouldRevalidate","currentLoaderData","currentMatch","isNew","isMissingData","currentPath","loaderMatch","arg","routeChoice","loadLazyRouteModule","lazyRoute","routeToUpdate","routeUpdates","lazyRouteProperty","staticRouteValue","isPropertyStaticallyDefined","resultType","onReject","runHandler","handler","handlerError","protocol","isSameBasename","queryRouteResponse","contentType","isDeferredData","_result$init","_result$init2","deferred","foundError","newLoaderData","mergedLoaderData","hasOwnProperty","eligibleMatches","reverse","_temp5","errorMessage","obj","signals","isRevalidatingLoader","unwrap","getAll","pathMatches","_window","transitions","sessionPositions","sessionStorage","getItem","setItem"],"mappings":"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"} \ No newline at end of file diff --git a/dist/router.umd.min.js b/dist/router.umd.min.js index e166e30a75884635b8850c7389fea91fa86baed8..4eceacaaa0330435bf35a5105f022e28aa11b46a 100644 --- a/dist/router.umd.min.js +++ b/dist/router.umd.min.js @@ -8,5 +8,5 @@ * * @license MIT */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).RemixRouter={})}(this,(function(e){"use strict";function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0&&(t.hash=e.substr(r),e=e.substr(0,r));let a=e.indexOf("?");a>=0&&(t.search=e.substr(a),e=e.substr(0,a)),e&&(t.pathname=e)}return t}function u(e,n,c,u){void 0===u&&(u={});let{window:d=document.defaultView,v5Compat:h=!1}=u,f=d.history,p=r.Pop,m=null,y=v();function v(){return(f.state||{idx:null}).idx}function g(){p=r.Pop;let e=v(),t=null==e?null:e-y;y=e,m&&m({action:p,location:w.location,delta:t})}function b(e){let t="null"!==d.location.origin?d.location.origin:d.location.href,r="string"==typeof e?e:l(e);return o(t,"No window.location.(origin|href) available to create URL for href: "+r),new URL(r,t)}null==y&&(y=0,f.replaceState(t({},f.state,{idx:y}),""));let w={get action(){return p},get location(){return e(d,f)},listen(e){if(m)throw new Error("A history only accepts one active listener");return d.addEventListener(a,g),m=e,()=>{d.removeEventListener(a,g),m=null}},createHref:e=>n(d,e),createURL:b,encodeLocation(e){let t=b(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,t){p=r.Push;let a=s(w.location,e,t);c&&c(a,e),y=v()+1;let o=i(a,y),n=w.createHref(a);try{f.pushState(o,"",n)}catch(e){if(e instanceof DOMException&&"DataCloneError"===e.name)throw e;d.location.assign(n)}h&&m&&m({action:p,location:w.location,delta:1})},replace:function(e,t){p=r.Replace;let a=s(w.location,e,t);c&&c(a,e),y=v();let o=i(a,y),n=w.createHref(a);f.replaceState(o,"",n),h&&m&&m({action:p,location:w.location,delta:0})},go:e=>f.go(e)};return w}let d=function(e){return e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error",e}({});const h=new Set(["lazy","caseSensitive","path","id","index","children"]);function f(e,r,a,n){return void 0===a&&(a=[]),void 0===n&&(n={}),e.map(((e,i)=>{let s=[...a,i],l="string"==typeof e.id?e.id:s.join("-");if(o(!0!==e.index||!e.children,"Cannot specify children on an index route"),o(!n[l],'Found a route id collision on id "'+l+"\". Route id's must be globally unique within Data Router usages"),function(e){return!0===e.index}(e)){let a=t({},e,r(e),{id:l});return n[l]=a,a}{let a=t({},e,r(e),{id:l,children:void 0});return n[l]=a,e.children&&(a.children=f(e.children,r,s,n)),a}}))}function p(e,t,r){void 0===r&&(r="/");let a=S(("string"==typeof t?c(t):t).pathname||"/",r);if(null==a)return null;let o=y(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){return e.length===t.length&&e.slice(0,-1).every(((e,r)=>e===t[r]))?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(o);let n=null;for(let e=0;null==n&&e{let s={relativePath:void 0===i?e.path||"":i,caseSensitive:!0===e.caseSensitive,childrenIndex:n,route:e};s.relativePath.startsWith("/")&&(o(s.relativePath.startsWith(a),'Absolute route path "'+s.relativePath+'" nested under path "'+a+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),s.relativePath=s.relativePath.slice(a.length));let l=M([a,s.relativePath]),c=r.concat(s);e.children&&e.children.length>0&&(o(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+l+'".'),y(e.children,t,c,l)),(null!=e.path||e.index)&&t.push({path:l,score:w(l,e.index),routesMeta:c})};return e.forEach(((e,t)=>{var r;if(""!==e.path&&null!=(r=e.path)&&r.includes("?"))for(let r of v(e.path))n(e,t,r);else n(e,t)})),t}function v(e){let t=e.split("/");if(0===t.length)return[];let[r,...a]=t,o=r.endsWith("?"),n=r.replace(/\?$/,"");if(0===a.length)return o?[n,""]:[n];let i=v(a.join("/")),s=[];return s.push(...i.map((e=>""===e?n:[n,e].join("/")))),o&&s.push(...i),s.map((t=>e.startsWith("/")&&""===t?"/":t))}const g=/^:\w+$/,b=e=>"*"===e;function w(e,t){let r=e.split("/"),a=r.length;return r.some(b)&&(a+=-2),t&&(a+=2),r.filter((e=>!b(e))).reduce(((e,t)=>e+(g.test(t)?3:""===t?1:10)),a)}function D(e,t){let{routesMeta:r}=e,a={},o="/",n=[];for(let e=0;e(a.push({paramName:t,isOptional:null!=r}),r?"/?([^\\/]+)?":"/([^\\/]+)")));e.endsWith("*")?(a.push({paramName:"*"}),o+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?o+="\\/*$":""!==e&&"/"!==e&&(o+="(?:(?=\\/|$))");return[new RegExp(o,t?void 0:"i"),a]}(e.path,e.caseSensitive,e.end),o=t.match(r);if(!o)return null;let i=o[0],s=i.replace(/(.)\/+$/,"$1"),l=o.slice(1);return{params:a.reduce(((e,t,r)=>{let{paramName:a,isOptional:o}=t;if("*"===a){let e=l[r]||"";s=i.slice(0,i.length-e.length).replace(/(.)\/+$/,"$1")}const c=l[r];return e[a]=o&&!c?void 0:function(e,t){try{return decodeURIComponent(e)}catch(r){return n(!1,'The value for the URL param "'+t+'" will not be decoded because the string "'+e+'" is a malformed URL segment. This is probably due to a bad percent encoding ('+r+")."),e}}(c||"",a),e}),{}),pathname:i,pathnameBase:s,pattern:e}}function R(e){try{return decodeURI(e)}catch(t){return n(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent encoding ('+t+")."),e}}function S(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,a=e.charAt(r);return a&&"/"!==a?null:e.slice(r)||"/"}function x(e,t){void 0===t&&(t="/");let{pathname:r,search:a="",hash:o=""}="string"==typeof e?c(e):e,n=r?r.startsWith("/")?r:function(e,t){let r=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?r.length>1&&r.pop():"."!==e&&r.push(e)})),r.length>1?r.join("/"):"/"}(r,t):t;return{pathname:n,search:k(a),hash:C(o)}}function P(e,t,r,a){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(a)+"]. Please separate it out to the `to."+r+'` field. Alternatively you may provide the full path as a string in and the router will parse it for you.'}function L(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}function A(e,r,a,n){let i;void 0===n&&(n=!1),"string"==typeof e?i=c(e):(i=t({},e),o(!i.pathname||!i.pathname.includes("?"),P("?","pathname","search",i)),o(!i.pathname||!i.pathname.includes("#"),P("#","pathname","hash",i)),o(!i.search||!i.search.includes("#"),P("#","search","hash",i)));let s,l=""===e||""===i.pathname,u=l?"/":i.pathname;if(null==u)s=a;else if(n){let e=r[r.length-1].replace(/^\//,"").split("/");if(u.startsWith("..")){let t=u.split("/");for(;".."===t[0];)t.shift(),e.pop();i.pathname=t.join("/")}s="/"+e.join("/")}else{let e=r.length-1;if(u.startsWith("..")){let t=u.split("/");for(;".."===t[0];)t.shift(),e-=1;i.pathname=t.join("/")}s=e>=0?r[e]:"/"}let d=x(i,s),h=u&&"/"!==u&&u.endsWith("/"),f=(l||"."===u)&&a.endsWith("/");return d.pathname.endsWith("/")||!h&&!f||(d.pathname+="/"),d}const M=e=>e.join("/").replace(/\/\/+/g,"/"),j=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),k=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",C=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";class T extends Error{}class U{constructor(e,t){let r;this.pendingKeysSet=new Set,this.subscribers=new Set,this.deferredKeys=[],o(e&&"object"==typeof e&&!Array.isArray(e),"defer() only accepts plain objects"),this.abortPromise=new Promise(((e,t)=>r=t)),this.controller=new AbortController;let a=()=>r(new T("Deferred data aborted"));this.unlistenAbortSignal=()=>this.controller.signal.removeEventListener("abort",a),this.controller.signal.addEventListener("abort",a),this.data=Object.entries(e).reduce(((e,t)=>{let[r,a]=t;return Object.assign(e,{[r]:this.trackPromise(r,a)})}),{}),this.done&&this.unlistenAbortSignal(),this.init=t}trackPromise(e,t){if(!(t instanceof Promise))return t;this.deferredKeys.push(e),this.pendingKeysSet.add(e);let r=Promise.race([t,this.abortPromise]).then((t=>this.onSettle(r,e,void 0,t)),(t=>this.onSettle(r,e,t)));return r.catch((()=>{})),Object.defineProperty(r,"_tracked",{get:()=>!0}),r}onSettle(e,t,r,a){if(this.controller.signal.aborted&&r instanceof T)return this.unlistenAbortSignal(),Object.defineProperty(e,"_error",{get:()=>r}),Promise.reject(r);if(this.pendingKeysSet.delete(t),this.done&&this.unlistenAbortSignal(),void 0===r&&void 0===a){let r=new Error('Deferred data for key "'+t+'" resolved/rejected with `undefined`, you must resolve/reject with a value or `null`.');return Object.defineProperty(e,"_error",{get:()=>r}),this.emit(!1,t),Promise.reject(r)}return void 0===a?(Object.defineProperty(e,"_error",{get:()=>r}),this.emit(!1,t),Promise.reject(r)):(Object.defineProperty(e,"_data",{get:()=>a}),this.emit(!1,t),a)}emit(e,t){this.subscribers.forEach((r=>r(e,t)))}subscribe(e){return this.subscribers.add(e),()=>this.subscribers.delete(e)}cancel(){this.controller.abort(),this.pendingKeysSet.forEach(((e,t)=>this.pendingKeysSet.delete(t))),this.emit(!0)}async resolveData(e){let t=!1;if(!this.done){let r=()=>this.cancel();e.addEventListener("abort",r),t=await new Promise((t=>{this.subscribe((a=>{e.removeEventListener("abort",r),(a||this.done)&&t(a)}))}))}return t}get done(){return 0===this.pendingKeysSet.size}get unwrappedData(){return o(null!==this.data&&this.done,"Can only unwrap data on initialized and settled deferreds"),Object.entries(this.data).reduce(((e,t)=>{let[r,a]=t;return Object.assign(e,{[r]:O(a)})}),{})}get pendingKeys(){return Array.from(this.pendingKeysSet)}}function O(e){if(!function(e){return e instanceof Promise&&!0===e._tracked}(e))return e;if(e._error)throw e._error;return e._data}const _=function(e,r){void 0===r&&(r=302);let a=r;"number"==typeof a?a={status:a}:void 0===a.status&&(a.status=302);let o=new Headers(a.headers);return o.set("Location",e),new Response(null,t({},a,{headers:o}))};class I{constructor(e,t,r,a){void 0===a&&(a=!1),this.status=e,this.statusText=t||"",this.internal=a,r instanceof Error?(this.data=r.toString(),this.error=r):this.data=r}}function z(e){return null!=e&&"number"==typeof e.status&&"string"==typeof e.statusText&&"boolean"==typeof e.internal&&"data"in e}const q=["post","put","patch","delete"],H=new Set(q),N=["get",...q],B=new Set(N),F=new Set([301,302,303,307,308]),W=new Set([307,308]),$={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},K={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},J={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},Y=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,V=e=>({hasErrorBoundary:Boolean(e.hasErrorBoundary)}),X="remix-router-transitions";const G=Symbol("deferred");function Q(e,t,r,a,o,n,i){let s,c;if(n){s=[];for(let e of t)if(s.push(e),e.route.id===n){c=e;break}}else s=t,c=t[t.length-1];let u=A(o||".",L(s).map((e=>e.pathnameBase)),S(e.pathname,r)||e.pathname,"path"===i);return null==o&&(u.search=e.search,u.hash=e.hash),null!=o&&""!==o&&"."!==o||!c||!c.route.index||Pe(u.search)||(u.search=u.search?u.search.replace(/^\?/,"?index&"):"?index"),a&&"/"!==r&&(u.pathname="/"===u.pathname?r:M([r,u.pathname])),l(u)}function Z(e,t,r,a){if(!a||!function(e){return null!=e&&("formData"in e&&null!=e.formData||"body"in e&&void 0!==e.body)}(a))return{path:r};if(a.formMethod&&!Ee(a.formMethod))return{path:r,error:pe(405,{method:a.formMethod})};let n,i,s=()=>({path:r,error:pe(400,{type:"invalid-body"})}),u=a.formMethod||"get",d=e?u.toUpperCase():u.toLowerCase(),h=ye(r);if(void 0!==a.body){if("text/plain"===a.formEncType){if(!Re(d))return s();let e="string"==typeof a.body?a.body:a.body instanceof FormData||a.body instanceof URLSearchParams?Array.from(a.body.entries()).reduce(((e,t)=>{let[r,a]=t;return""+e+r+"="+a+"\n"}),""):String(a.body);return{path:r,submission:{formMethod:d,formAction:h,formEncType:a.formEncType,formData:void 0,json:void 0,text:e}}}if("application/json"===a.formEncType){if(!Re(d))return s();try{let e="string"==typeof a.body?JSON.parse(a.body):a.body;return{path:r,submission:{formMethod:d,formAction:h,formEncType:a.formEncType,formData:void 0,json:e,text:void 0}}}catch(e){return s()}}}if(o("function"==typeof FormData,"FormData is not available in this environment"),a.formData)n=se(a.formData),i=a.formData;else if(a.body instanceof FormData)n=se(a.body),i=a.body;else if(a.body instanceof URLSearchParams)n=a.body,i=le(n);else if(null==a.body)n=new URLSearchParams,i=new FormData;else try{n=new URLSearchParams(a.body),i=le(n)}catch(e){return s()}let f={formMethod:d,formAction:h,formEncType:a&&a.formEncType||"application/x-www-form-urlencoded",formData:i,json:void 0,text:void 0};if(Re(f.formMethod))return{path:r,submission:f};let p=c(r);return t&&p.search&&Pe(p.search)&&n.append("index",""),p.search="?"+n,{path:l(p),submission:f}}function ee(e,t){let r=e;if(t){let a=e.findIndex((e=>e.route.id===t));a>=0&&(r=e.slice(0,a))}return r}function te(e,r,a,o,n,i,s,l,c,u,d,h,f,m,y){let v=y?Object.values(y)[0]:m?Object.values(m)[0]:void 0,g=e.createURL(r.location),b=e.createURL(n),w=y?Object.keys(y)[0]:void 0,D=ee(a,w).filter(((e,a)=>{if(e.route.lazy)return!0;if(null==e.route.loader)return!1;if(function(e,t,r){let a=!t||r.route.id!==t.route.id,o=void 0===e[r.route.id];return a||o}(r.loaderData,r.matches[a],e)||s.some((t=>t===e.route.id)))return!0;let n=r.matches[a],l=e;return ae(e,t({currentUrl:g,currentParams:n.params,nextUrl:b,nextParams:l.params},o,{actionResult:v,defaultShouldRevalidate:i||g.pathname+g.search===b.pathname+b.search||g.search!==b.search||re(n,l)}))})),E=[];return u.forEach(((e,n)=>{if(!a.some((t=>t.route.id===e.routeId))||c.has(n))return;let s=p(h,e.path,f);if(!s)return void E.push({key:n,routeId:e.routeId,path:e.path,matches:null,match:null,controller:null});let u=r.fetchers.get(n),m=Le(s,e.path),y=!1;y=!d.has(n)&&(!!l.includes(n)||(u&&"idle"!==u.state&&void 0===u.data?i:ae(m,t({currentUrl:g,currentParams:r.matches[r.matches.length-1].params,nextUrl:b,nextParams:a[a.length-1].params},o,{actionResult:v,defaultShouldRevalidate:i})))),y&&E.push({key:n,routeId:e.routeId,path:e.path,matches:s,match:m,controller:new AbortController})})),[D,E]}function re(e,t){let r=e.route.path;return e.pathname!==t.pathname||null!=r&&r.endsWith("*")&&e.params["*"]!==t.params["*"]}function ae(e,t){if(e.route.shouldRevalidate){let r=e.route.shouldRevalidate(t);if("boolean"==typeof r)return r}return t.defaultShouldRevalidate}async function oe(e,r,a){if(!e.lazy)return;let i=await e.lazy();if(!e.lazy)return;let s=a[e.id];o(s,"No route found in manifest");let l={};for(let e in i){let t=void 0!==s[e]&&"hasErrorBoundary"!==e;n(!t,'Route "'+s.id+'" has a static property "'+e+'" defined but its lazy function is also returning a value for this property. The lazy route property "'+e+'" will be ignored.'),t||h.has(e)||(l[e]=i[e])}Object.assign(s,l),Object.assign(s,t({},r(s),{lazy:void 0}))}async function ne(e,t,r,a,n,i,s,l){let c,u,h;void 0===l&&(l={});let f=e=>{let a,o=new Promise(((e,t)=>a=t));return h=()=>a(),t.signal.addEventListener("abort",h),Promise.race([e({request:t,params:r.params,context:l.requestContext}),o])};try{let a=r.route[e];if(r.route.lazy)if(a){let e,t=await Promise.all([f(a).catch((t=>{e=t})),oe(r.route,i,n)]);if(e)throw e;u=t[0]}else{if(await oe(r.route,i,n),a=r.route[e],!a){if("action"===e){let e=new URL(t.url),a=e.pathname+e.search;throw pe(405,{method:t.method,pathname:a,routeId:r.route.id})}return{type:d.data,data:void 0}}u=await f(a)}else{if(!a){let e=new URL(t.url);throw pe(404,{pathname:e.pathname+e.search})}u=await f(a)}o(void 0!==u,"You defined "+("action"===e?"an action":"a loader")+' for route "'+r.route.id+"\" but didn't return anything from your `"+e+"` function. Please return a value or `null`.")}catch(e){c=d.error,u=e}finally{h&&t.signal.removeEventListener("abort",h)}if(De(u)){let e,n=u.status;if(F.has(n)){let e=u.headers.get("Location");if(o(e,"Redirects returned/thrown from loaders/actions must have a Location header"),Y.test(e)){if(!l.isStaticRequest){let r=new URL(t.url),a=e.startsWith("//")?new URL(r.protocol+e):new URL(e),o=null!=S(a.pathname,s);a.origin===r.origin&&o&&(e=a.pathname+a.search+a.hash)}}else e=Q(new URL(t.url),a.slice(0,a.indexOf(r)+1),s,!0,e);if(l.isStaticRequest)throw u.headers.set("Location",e),u;return{type:d.redirect,status:n,location:e,revalidate:null!==u.headers.get("X-Remix-Revalidate"),reloadDocument:null!==u.headers.get("X-Remix-Reload-Document")}}if(l.isRouteRequest){throw{type:c===d.error?d.error:d.data,response:u}}let i=u.headers.get("Content-Type");return e=i&&/\bapplication\/json\b/.test(i)?await u.json():await u.text(),c===d.error?{type:c,error:new I(n,u.statusText,e),headers:u.headers}:{type:d.data,data:e,statusCode:u.status,headers:u.headers}}return c===d.error?{type:c,error:u}:we(u)?{type:d.deferred,deferredData:u,statusCode:null==(p=u.init)?void 0:p.status,headers:(null==(m=u.init)?void 0:m.headers)&&new Headers(u.init.headers)}:{type:d.data,data:u};var p,m}function ie(e,t,r,a){let o=e.createURL(ye(t)).toString(),n={signal:r};if(a&&Re(a.formMethod)){let{formMethod:e,formEncType:t}=a;n.method=e.toUpperCase(),"application/json"===t?(n.headers=new Headers({"Content-Type":t}),n.body=JSON.stringify(a.json)):"text/plain"===t?n.body=a.text:"application/x-www-form-urlencoded"===t&&a.formData?n.body=se(a.formData):n.body=a.formData}return new Request(o,n)}function se(e){let t=new URLSearchParams;for(let[r,a]of e.entries())t.append(r,"string"==typeof a?a:a.name);return t}function le(e){let t=new FormData;for(let[r,a]of e.entries())t.append(r,a);return t}function ce(e,t,r,a,n){let i,s={},l=null,c=!1,u={};return r.forEach(((r,d)=>{let h=t[d].route.id;if(o(!be(r),"Cannot handle redirect results in processLoaderData"),ge(r)){let t=he(e,h),o=r.error;a&&(o=Object.values(a)[0],a=void 0),l=l||{},null==l[t.route.id]&&(l[t.route.id]=o),s[h]=void 0,c||(c=!0,i=z(r.error)?r.error.status:500),r.headers&&(u[h]=r.headers)}else ve(r)?(n.set(h,r.deferredData),s[h]=r.deferredData.data):s[h]=r.data,null==r.statusCode||200===r.statusCode||c||(i=r.statusCode),r.headers&&(u[h]=r.headers)})),a&&(l=a,s[Object.keys(a)[0]]=void 0),{loaderData:s,errors:l,statusCode:i||200,loaderHeaders:u}}function ue(e,r,a,n,i,s,l,c){let{loaderData:u,errors:d}=ce(r,a,n,i,c);for(let r=0;re.route.id===t))+1):[...e]).reverse().find((e=>!0===e.route.hasErrorBoundary))||e[0]}function fe(e){let t=1===e.length?e[0]:e.find((e=>e.index||!e.path||"/"===e.path))||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:t}],route:t}}function pe(e,t){let{pathname:r,routeId:a,method:o,type:n}=void 0===t?{}:t,i="Unknown Server Error",s="Unknown @remix-run/router error";return 400===e?(i="Bad Request",o&&r&&a?s="You made a "+o+' request to "'+r+'" but did not provide a `loader` for route "'+a+'", so there is no way to handle the request.':"defer-action"===n?s="defer() is not supported in actions":"invalid-body"===n&&(s="Unable to encode submission body")):403===e?(i="Forbidden",s='Route "'+a+'" does not match URL "'+r+'"'):404===e?(i="Not Found",s='No route matches URL "'+r+'"'):405===e&&(i="Method Not Allowed",o&&r&&a?s="You made a "+o.toUpperCase()+' request to "'+r+'" but did not provide an `action` for route "'+a+'", so there is no way to handle the request.':o&&(s='Invalid request method "'+o.toUpperCase()+'"')),new I(e||500,i,new Error(s),!0)}function me(e){for(let t=e.length-1;t>=0;t--){let r=e[t];if(be(r))return{result:r,idx:t}}}function ye(e){return l(t({},"string"==typeof e?c(e):e,{hash:""}))}function ve(e){return e.type===d.deferred}function ge(e){return e.type===d.error}function be(e){return(e&&e.type)===d.redirect}function we(e){let t=e;return t&&"object"==typeof t&&"object"==typeof t.data&&"function"==typeof t.subscribe&&"function"==typeof t.cancel&&"function"==typeof t.resolveData}function De(e){return null!=e&&"number"==typeof e.status&&"string"==typeof e.statusText&&"object"==typeof e.headers&&void 0!==e.body}function Ee(e){return B.has(e.toLowerCase())}function Re(e){return H.has(e.toLowerCase())}async function Se(e,t,r,a,n,i){for(let s=0;se.route.id===c.route.id)),d=null!=u&&!re(u,c)&&void 0!==(i&&i[c.route.id]);if(ve(l)&&(n||d)){let e=a[s];o(e,"Expected an AbortSignal for revalidating fetcher deferred result"),await xe(l,e,n).then((e=>{e&&(r[s]=e||r[s])}))}}}async function xe(e,t,r){if(void 0===r&&(r=!1),!await e.deferredData.resolveData(t)){if(r)try{return{type:d.data,data:e.deferredData.unwrappedData}}catch(e){return{type:d.error,error:e}}return{type:d.data,data:e.deferredData.data}}}function Pe(e){return new URLSearchParams(e).getAll("index").some((e=>""===e))}function Le(e,t){let r="string"==typeof t?c(t).search:t.search;if(e[e.length-1].route.index&&Pe(r||""))return e[e.length-1];let a=L(e);return a[a.length-1]}function Ae(e){let{formMethod:t,formAction:r,formEncType:a,text:o,formData:n,json:i}=e;if(t&&r&&a)return null!=o?{formMethod:t,formAction:r,formEncType:a,formData:void 0,json:void 0,text:o}:null!=n?{formMethod:t,formAction:r,formEncType:a,formData:n,json:void 0,text:void 0}:void 0!==i?{formMethod:t,formAction:r,formEncType:a,formData:void 0,json:i,text:void 0}:void 0}function Me(e,t){if(t){return{state:"loading",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}}return{state:"loading",location:e,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function je(e,t){return{state:"submitting",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}}function ke(e,t){if(e){return{state:"loading",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t}}return{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:t}}function Ce(e){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:e}}e.AbortedDeferredError=T,e.Action=r,e.IDLE_BLOCKER=J,e.IDLE_FETCHER=K,e.IDLE_NAVIGATION=$,e.UNSAFE_DEFERRED_SYMBOL=G,e.UNSAFE_DeferredData=U,e.UNSAFE_ErrorResponseImpl=I,e.UNSAFE_convertRouteMatchToUiMatch=m,e.UNSAFE_convertRoutesToDataRoutes=f,e.UNSAFE_getPathContributingMatches=L,e.UNSAFE_invariant=o,e.UNSAFE_warning=n,e.createBrowserHistory=function(e){return void 0===e&&(e={}),u((function(e,t){let{pathname:r,search:a,hash:o}=e.location;return s("",{pathname:r,search:a,hash:o},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){return"string"==typeof t?t:l(t)}),null,e)},e.createHashHistory=function(e){return void 0===e&&(e={}),u((function(e,t){let{pathname:r="/",search:a="",hash:o=""}=c(e.location.hash.substr(1));return r.startsWith("/")||r.startsWith(".")||(r="/"+r),s("",{pathname:r,search:a,hash:o},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){let r=e.document.querySelector("base"),a="";if(r&&r.getAttribute("href")){let t=e.location.href,r=t.indexOf("#");a=-1===r?t:t.slice(0,r)}return a+"#"+("string"==typeof t?t:l(t))}),(function(e,t){n("/"===e.pathname.charAt(0),"relative pathnames are not supported in hash history.push("+JSON.stringify(t)+")")}),e)},e.createMemoryHistory=function(e){void 0===e&&(e={});let t,{initialEntries:a=["/"],initialIndex:o,v5Compat:i=!1}=e;t=a.map(((e,t)=>m(e,"string"==typeof e?null:e.state,0===t?"default":void 0)));let u=f(null==o?t.length-1:o),d=r.Pop,h=null;function f(e){return Math.min(Math.max(e,0),t.length-1)}function p(){return t[u]}function m(e,r,a){void 0===r&&(r=null);let o=s(t?p().pathname:"/",e,r,a);return n("/"===o.pathname.charAt(0),"relative pathnames are not supported in memory history: "+JSON.stringify(e)),o}function y(e){return"string"==typeof e?e:l(e)}return{get index(){return u},get action(){return d},get location(){return p()},createHref:y,createURL:e=>new URL(y(e),"http://localhost"),encodeLocation(e){let t="string"==typeof e?c(e):e;return{pathname:t.pathname||"",search:t.search||"",hash:t.hash||""}},push(e,a){d=r.Push;let o=m(e,a);u+=1,t.splice(u,t.length,o),i&&h&&h({action:d,location:o,delta:1})},replace(e,a){d=r.Replace;let o=m(e,a);t[u]=o,i&&h&&h({action:d,location:o,delta:0})},go(e){d=r.Pop;let a=f(u+e),o=t[a];u=a,h&&h({action:d,location:o,delta:e})},listen:e=>(h=e,()=>{h=null})}},e.createPath=l,e.createRouter=function(e){const a=e.window?e.window:"undefined"!=typeof window?window:void 0,i=void 0!==a&&void 0!==a.document&&void 0!==a.document.createElement,l=!i;let c;if(o(e.routes.length>0,"You must provide a non-empty routes array to createRouter"),e.mapRouteProperties)c=e.mapRouteProperties;else if(e.detectErrorBoundary){let t=e.detectErrorBoundary;c=e=>({hasErrorBoundary:t(e)})}else c=V;let u,h={},y=f(e.routes,c,void 0,h),v=e.basename||"/",g=t({v7_fetcherPersist:!1,v7_normalizeFormMethod:!1,v7_prependBasename:!1},e.future),b=null,w=new Set,D=null,E=null,R=null,x=null!=e.hydrationData,P=p(y,e.history.location,v),L=null;if(null==P){let t=pe(404,{pathname:e.history.location.pathname}),{matches:r,route:a}=fe(y);P=r,L={[a.id]:t}}let A,M,j=!(P.some((e=>e.route.lazy))||P.some((e=>e.route.loader))&&null==e.hydrationData),k={historyAction:e.history.action,location:e.history.location,matches:P,initialized:j,navigation:$,restoreScrollPosition:null==e.hydrationData&&null,preventScrollReset:!1,revalidation:"idle",loaderData:e.hydrationData&&e.hydrationData.loaderData||{},actionData:e.hydrationData&&e.hydrationData.actionData||null,errors:e.hydrationData&&e.hydrationData.errors||L,fetchers:new Map,blockers:new Map},C=r.Pop,T=!1,U=!1,O=new Map,_=null,I=!1,z=!1,q=[],H=[],N=new Map,B=0,F=-1,G=new Map,ee=new Set,re=new Map,ae=new Map,oe=new Set,se=new Map,le=new Map,ce=!1;function ye(e,r){void 0===r&&(r={}),k=t({},k,e);let a=[],o=[];g.v7_fetcherPersist&&k.fetchers.forEach(((e,t)=>{"idle"===e.state&&(oe.has(t)?o.push(t):a.push(t))})),[...w].forEach((e=>e(k,{deletedFetchers:o,unstable_viewTransitionOpts:r.viewTransitionOpts,unstable_flushSync:!0===r.flushSync}))),g.v7_fetcherPersist&&(a.forEach((e=>k.fetchers.delete(e))),o.forEach((e=>Ie(e))))}function we(a,o,n){var i,s;let l,{flushSync:c}=void 0===n?{}:n,d=null!=k.actionData&&null!=k.navigation.formMethod&&Re(k.navigation.formMethod)&&"loading"===k.navigation.state&&!0!==(null==(i=a.state)?void 0:i._isRedirect);l=o.actionData?Object.keys(o.actionData).length>0?o.actionData:null:d?k.actionData:null;let h=o.loaderData?de(k.loaderData,o.loaderData,o.matches||[],o.errors):k.loaderData,f=k.blockers;f.size>0&&(f=new Map(f),f.forEach(((e,t)=>f.set(t,J))));let p,m=!0===T||null!=k.navigation.formMethod&&Re(k.navigation.formMethod)&&!0!==(null==(s=a.state)?void 0:s._isRedirect);if(u&&(y=u,u=void 0),I||C===r.Pop||(C===r.Push?e.history.push(a,a.state):C===r.Replace&&e.history.replace(a,a.state)),C===r.Pop){let e=O.get(k.location.pathname);e&&e.has(a.pathname)?p={currentLocation:k.location,nextLocation:a}:O.has(a.pathname)&&(p={currentLocation:a,nextLocation:k.location})}else if(U){let e=O.get(k.location.pathname);e?e.add(a.pathname):(e=new Set([a.pathname]),O.set(k.location.pathname,e)),p={currentLocation:k.location,nextLocation:a}}ye(t({},o,{actionData:l,loaderData:h,historyAction:C,location:a,initialized:!0,navigation:$,revalidation:"idle",restoreScrollPosition:Je(a,o.matches||k.matches),preventScrollReset:m,blockers:f}),{viewTransitionOpts:p,flushSync:!0===c}),C=r.Pop,T=!1,U=!1,I=!1,z=!1,q=[],H=[]}async function De(a,o,n){M&&M.abort(),M=null,C=a,I=!0===(n&&n.startUninterruptedRevalidation),function(e,t){if(D&&R){let r=Ke(e,t);D[r]=R()}}(k.location,k.matches),T=!0===(n&&n.preventScrollReset),U=!0===(n&&n.enableViewTransition);let i=u||y,s=n&&n.overrideNavigation,l=p(i,o,v),f=!0===(n&&n.flushSync);if(!l){let e=pe(404,{pathname:o.pathname}),{matches:t,route:r}=fe(i);return $e(),void we(o,{matches:t,loaderData:{},errors:{[r.id]:e}},{flushSync:f})}if(k.initialized&&!z&&function(e,t){if(e.pathname!==t.pathname||e.search!==t.search)return!1;if(""===e.hash)return""!==t.hash;if(e.hash===t.hash)return!0;if(""!==t.hash)return!0;return!1}(k.location,o)&&!(n&&n.submission&&Re(n.submission.formMethod)))return void we(o,{matches:l},{flushSync:f});M=new AbortController;let m,g,b=ie(e.history,o,M.signal,n&&n.submission);if(n&&n.pendingError)g={[he(l).route.id]:n.pendingError};else if(n&&n.submission&&Re(n.submission.formMethod)){let e=await async function(e,t,a,o,n){void 0===n&&(n={});let i;Te(),ye({navigation:je(t,a)},{flushSync:!0===n.flushSync});let s=Le(o,t);if(s.route.action||s.route.lazy){if(i=await ne("action",e,s,o,h,c,v),e.signal.aborted)return{shortCircuited:!0}}else i={type:d.error,error:pe(405,{method:e.method,pathname:t.pathname,routeId:s.route.id})};if(be(i)){let e;return e=n&&null!=n.replace?n.replace:i.location===k.location.pathname+k.location.search,await Ee(k,i,{submission:a,replace:e}),{shortCircuited:!0}}if(ge(i)){let e=he(o,s.route.id);return!0!==(n&&n.replace)&&(C=r.Push),{pendingActionData:{},pendingActionError:{[e.route.id]:i.error}}}if(ve(i))throw pe(400,{type:"defer-action"});return{pendingActionData:{[s.route.id]:i.data}}}(b,o,n.submission,l,{replace:n.replace,flushSync:f});if(e.shortCircuited)return;m=e.pendingActionData,g=e.pendingActionError,s=Me(o,n.submission),f=!1,b=new Request(b.url,{signal:b.signal})}let{shortCircuited:w,loaderData:E,errors:S}=await async function(r,a,o,n,i,s,l,c,d,h){let f=n||Me(a,i),p=i||s||Ae(f),m=u||y,[g,b]=te(e.history,k,o,p,a,z,q,H,oe,re,ee,m,v,d,h);if($e((e=>!(o&&o.some((t=>t.route.id===e)))||g&&g.some((t=>t.route.id===e)))),F=++B,0===g.length&&0===b.length){let e=He();return we(a,t({matches:o,loaderData:{},errors:h||null},d?{actionData:d}:{},e?{fetchers:new Map(k.fetchers)}:{}),{flushSync:c}),{shortCircuited:!0}}if(!I){b.forEach((e=>{let t=k.fetchers.get(e.key),r=ke(void 0,t?t.data:void 0);k.fetchers.set(e.key,r)}));let e=d||k.actionData;ye(t({navigation:f},e?0===Object.keys(e).length?{actionData:null}:{actionData:e}:{},b.length>0?{fetchers:new Map(k.fetchers)}:{}),{flushSync:c})}b.forEach((e=>{N.has(e.key)&&ze(e.key),e.controller&&N.set(e.key,e.controller)}));let w=()=>b.forEach((e=>ze(e.key)));M&&M.signal.addEventListener("abort",w);let{results:D,loaderResults:E,fetcherResults:R}=await Pe(k.matches,o,g,b,r);if(r.signal.aborted)return{shortCircuited:!0};M&&M.signal.removeEventListener("abort",w);b.forEach((e=>N.delete(e.key)));let S=me(D);if(S){if(S.idx>=g.length){let e=b[S.idx-g.length].key;ee.add(e)}return await Ee(k,S.result,{replace:l}),{shortCircuited:!0}}let{loaderData:x,errors:P}=ue(k,o,g,E,h,b,R,se);se.forEach(((e,t)=>{e.subscribe((r=>{(r||e.done)&&se.delete(t)}))}));let L=He(),A=Ne(F),j=L||A||b.length>0;return t({loaderData:x,errors:P},j?{fetchers:new Map(k.fetchers)}:{})}(b,o,l,s,n&&n.submission,n&&n.fetcherSubmission,n&&n.replace,f,m,g);w||(M=null,we(o,t({matches:l},m?{actionData:m}:{},{loaderData:E,errors:S})))}async function Ee(n,l,c){let{submission:u,fetcherSubmission:d,replace:h}=void 0===c?{}:c;l.revalidate&&(z=!0);let f=s(n.location,l.location,{_isRedirect:!0});if(o(f,"Expected a location on the redirect navigation"),i){let t=!1;if(l.reloadDocument)t=!0;else if(Y.test(l.location)){const r=e.history.createURL(l.location);t=r.origin!==a.location.origin||null==S(r.pathname,v)}if(t)return void(h?a.location.replace(l.location):a.location.assign(l.location))}M=null;let p=!0===h?r.Replace:r.Push,{formMethod:m,formAction:y,formEncType:g}=n.navigation;!u&&!d&&m&&y&&g&&(u=Ae(n.navigation));let b=u||d;if(W.has(l.status)&&b&&Re(b.formMethod))await De(p,f,{submission:t({},b,{formAction:l.location}),preventScrollReset:T});else{let e=Me(f,u);await De(p,f,{overrideNavigation:e,fetcherSubmission:d,preventScrollReset:T})}}async function Pe(t,r,a,o,n){let i=await Promise.all([...a.map((e=>ne("loader",n,e,r,h,c,v))),...o.map((t=>{if(t.matches&&t.match&&t.controller)return ne("loader",ie(e.history,t.path,t.controller.signal),t.match,t.matches,h,c,v);return{type:d.error,error:pe(404,{pathname:t.path})}}))]),s=i.slice(0,a.length),l=i.slice(a.length);return await Promise.all([Se(t,a,s,s.map((()=>n.signal)),!1,k.loaderData),Se(t,o.map((e=>e.match)),l,o.map((e=>e.controller?e.controller.signal:null)),!0)]),{results:i,loaderResults:s,fetcherResults:l}}function Te(){z=!0,q.push(...$e()),re.forEach(((e,t)=>{N.has(t)&&(H.push(t),ze(t))}))}function Ue(e,t,r){void 0===r&&(r={}),k.fetchers.set(e,t),ye({fetchers:new Map(k.fetchers)},{flushSync:!0===(r&&r.flushSync)})}function Oe(e,t,r,a){void 0===a&&(a={});let o=he(k.matches,t);Ie(e),ye({errors:{[o.route.id]:r},fetchers:new Map(k.fetchers)},{flushSync:!0===(a&&a.flushSync)})}function _e(e){return g.v7_fetcherPersist&&(ae.set(e,(ae.get(e)||0)+1),oe.has(e)&&oe.delete(e)),k.fetchers.get(e)||K}function Ie(e){let t=k.fetchers.get(e);!N.has(e)||t&&"loading"===t.state&&G.has(e)||ze(e),re.delete(e),G.delete(e),ee.delete(e),oe.delete(e),k.fetchers.delete(e)}function ze(e){let t=N.get(e);o(t,"Expected fetch controller: "+e),t.abort(),N.delete(e)}function qe(e){for(let t of e){let e=Ce(_e(t).data);k.fetchers.set(t,e)}}function He(){let e=[],t=!1;for(let r of ee){let a=k.fetchers.get(r);o(a,"Expected fetcher: "+r),"loading"===a.state&&(ee.delete(r),e.push(r),t=!0)}return qe(e),t}function Ne(e){let t=[];for(let[r,a]of G)if(a0}function Be(e){k.blockers.delete(e),le.delete(e)}function Fe(e,t){let r=k.blockers.get(e)||J;o("unblocked"===r.state&&"blocked"===t.state||"blocked"===r.state&&"blocked"===t.state||"blocked"===r.state&&"proceeding"===t.state||"blocked"===r.state&&"unblocked"===t.state||"proceeding"===r.state&&"unblocked"===t.state,"Invalid blocker state transition: "+r.state+" -> "+t.state);let a=new Map(k.blockers);a.set(e,t),ye({blockers:a})}function We(e){let{currentLocation:t,nextLocation:r,historyAction:a}=e;if(0===le.size)return;le.size>1&&n(!1,"A router only supports one blocker at a time");let o=Array.from(le.entries()),[i,s]=o[o.length-1],l=k.blockers.get(i);return l&&"proceeding"===l.state?void 0:s({currentLocation:t,nextLocation:r,historyAction:a})?i:void 0}function $e(e){let t=[];return se.forEach(((r,a)=>{e&&!e(a)||(r.cancel(),t.push(a),se.delete(a))})),t}function Ke(e,t){if(E){return E(e,t.map((e=>m(e,k.loaderData))))||e.key}return e.key}function Je(e,t){if(D){let r=Ke(e,t),a=D[r];if("number"==typeof a)return a}return null}return A={get basename(){return v},get state(){return k},get routes(){return y},get window(){return a},initialize:function(){if(b=e.history.listen((t=>{let{action:r,location:a,delta:o}=t;if(ce)return void(ce=!1);n(0===le.size||null!=o,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let i=We({currentLocation:k.location,nextLocation:a,historyAction:r});return i&&null!=o?(ce=!0,e.history.go(-1*o),void Fe(i,{state:"blocked",location:a,proceed(){Fe(i,{state:"proceeding",proceed:void 0,reset:void 0,location:a}),e.history.go(o)},reset(){let e=new Map(k.blockers);e.set(i,J),ye({blockers:e})}})):De(r,a)})),i){!function(e,t){try{let r=e.sessionStorage.getItem(X);if(r){let e=JSON.parse(r);for(let[r,a]of Object.entries(e||{}))a&&Array.isArray(a)&&t.set(r,new Set(a||[]))}}catch(e){}}(a,O);let e=()=>function(e,t){if(t.size>0){let r={};for(let[e,a]of t)r[e]=[...a];try{e.sessionStorage.setItem(X,JSON.stringify(r))}catch(e){n(!1,"Failed to save applied view transitions in sessionStorage ("+e+").")}}}(a,O);a.addEventListener("pagehide",e),_=()=>a.removeEventListener("pagehide",e)}return k.initialized||De(r.Pop,k.location),A},subscribe:function(e){return w.add(e),()=>w.delete(e)},enableScrollRestoration:function(e,t,r){if(D=e,R=t,E=r||null,!x&&k.navigation===$){x=!0;let e=Je(k.location,k.matches);null!=e&&ye({restoreScrollPosition:e})}return()=>{D=null,R=null,E=null}},navigate:async function a(o,n){if("number"==typeof o)return void e.history.go(o);let i=Q(k.location,k.matches,v,g.v7_prependBasename,o,null==n?void 0:n.fromRouteId,null==n?void 0:n.relative),{path:l,submission:c,error:u}=Z(g.v7_normalizeFormMethod,!1,i,n),d=k.location,h=s(k.location,l,n&&n.state);h=t({},h,e.history.encodeLocation(h));let f=n&&null!=n.replace?n.replace:void 0,p=r.Push;!0===f?p=r.Replace:!1===f||null!=c&&Re(c.formMethod)&&c.formAction===k.location.pathname+k.location.search&&(p=r.Replace);let m=n&&"preventScrollReset"in n?!0===n.preventScrollReset:void 0,y=!0===(n&&n.unstable_flushSync),b=We({currentLocation:d,nextLocation:h,historyAction:p});if(!b)return await De(p,h,{submission:c,pendingError:u,preventScrollReset:m,replace:n&&n.replace,enableViewTransition:n&&n.unstable_viewTransition,flushSync:y});Fe(b,{state:"blocked",location:h,proceed(){Fe(b,{state:"proceeding",proceed:void 0,reset:void 0,location:h}),a(o,n)},reset(){let e=new Map(k.blockers);e.set(b,J),ye({blockers:e})}})},fetch:function(t,r,a,n){if(l)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");N.has(t)&&ze(t);let i=!0===(n&&n.unstable_flushSync),s=u||y,d=Q(k.location,k.matches,v,g.v7_prependBasename,a,r,null==n?void 0:n.relative),f=p(s,d,v);if(!f)return void Oe(t,r,pe(404,{pathname:d}),{flushSync:i});let{path:m,submission:b,error:w}=Z(g.v7_normalizeFormMethod,!0,d,n);if(w)return void Oe(t,r,w,{flushSync:i});let D=Le(f,m);T=!0===(n&&n.preventScrollReset),b&&Re(b.formMethod)?async function(t,r,a,n,i,s,l){if(Te(),re.delete(t),!n.route.action&&!n.route.lazy){let e=pe(405,{method:l.formMethod,pathname:a,routeId:r});return void Oe(t,r,e,{flushSync:s})}let d=k.fetchers.get(t);Ue(t,function(e,t){return{state:"submitting",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t?t.data:void 0}}(l,d),{flushSync:s});let f=new AbortController,m=ie(e.history,a,f.signal,l);N.set(t,f);let g=B,b=await ne("action",m,n,i,h,c,v);if(m.signal.aborted)return void(N.get(t)===f&&N.delete(t));if(oe.has(t))return void Ue(t,Ce(void 0));if(be(b))return N.delete(t),F>g?void Ue(t,Ce(void 0)):(ee.add(t),Ue(t,ke(l)),Ee(k,b,{fetcherSubmission:l}));if(ge(b))return void Oe(t,r,b.error);if(ve(b))throw pe(400,{type:"defer-action"});let w=k.navigation.location||k.location,D=ie(e.history,w,f.signal),E=u||y,R="idle"!==k.navigation.state?p(E,k.navigation.location,v):k.matches;o(R,"Didn't find any matches after fetcher action");let S=++B;G.set(t,S);let x=ke(l,b.data);k.fetchers.set(t,x);let[P,L]=te(e.history,k,R,l,w,z,q,H,oe,re,ee,E,v,{[n.route.id]:b.data},void 0);L.filter((e=>e.key!==t)).forEach((e=>{let t=e.key,r=k.fetchers.get(t),a=ke(void 0,r?r.data:void 0);k.fetchers.set(t,a),N.has(t)&&ze(t),e.controller&&N.set(t,e.controller)})),ye({fetchers:new Map(k.fetchers)});let A=()=>L.forEach((e=>ze(e.key)));f.signal.addEventListener("abort",A);let{results:j,loaderResults:T,fetcherResults:U}=await Pe(k.matches,R,P,L,D);if(f.signal.aborted)return;f.signal.removeEventListener("abort",A),G.delete(t),N.delete(t),L.forEach((e=>N.delete(e.key)));let O=me(j);if(O){if(O.idx>=P.length){let e=L[O.idx-P.length].key;ee.add(e)}return Ee(k,O.result)}let{loaderData:_,errors:I}=ue(k,k.matches,P,T,void 0,L,U,se);if(k.fetchers.has(t)){let e=Ce(b.data);k.fetchers.set(t,e)}Ne(S),"loading"===k.navigation.state&&S>F?(o(C,"Expected pending action"),M&&M.abort(),we(k.navigation.location,{matches:R,loaderData:_,errors:I,fetchers:new Map(k.fetchers)})):(ye({errors:I,loaderData:de(k.loaderData,_,R,I),fetchers:new Map(k.fetchers)}),z=!1)}(t,r,m,D,f,i,b):(re.set(t,{routeId:r,path:m}),async function(t,r,a,n,i,s,l){let u=k.fetchers.get(t);Ue(t,ke(l,u?u.data:void 0),{flushSync:s});let d=new AbortController,f=ie(e.history,a,d.signal);N.set(t,d);let p=B,m=await ne("loader",f,n,i,h,c,v);ve(m)&&(m=await xe(m,f.signal,!0)||m);N.get(t)===d&&N.delete(t);if(f.signal.aborted)return;if(oe.has(t))return void Ue(t,Ce(void 0));if(be(m))return F>p?void Ue(t,Ce(void 0)):(ee.add(t),void await Ee(k,m));if(ge(m))return void Oe(t,r,m.error);o(!ve(m),"Unhandled fetcher deferred data"),Ue(t,Ce(m.data))}(t,r,m,D,f,i,b))},revalidate:function(){Te(),ye({revalidation:"loading"}),"submitting"!==k.navigation.state&&("idle"!==k.navigation.state?De(C||k.historyAction,k.navigation.location,{overrideNavigation:k.navigation}):De(k.historyAction,k.location,{startUninterruptedRevalidation:!0}))},createHref:t=>e.history.createHref(t),encodeLocation:t=>e.history.encodeLocation(t),getFetcher:_e,deleteFetcher:function(e){if(g.v7_fetcherPersist){let t=(ae.get(e)||0)-1;t<=0?(ae.delete(e),oe.add(e)):ae.set(e,t)}else Ie(e);ye({fetchers:new Map(k.fetchers)})},dispose:function(){b&&b(),_&&_(),w.clear(),M&&M.abort(),k.fetchers.forEach(((e,t)=>Ie(t))),k.blockers.forEach(((e,t)=>Be(t)))},getBlocker:function(e,t){let r=k.blockers.get(e)||J;return le.get(e)!==t&&le.set(e,t),r},deleteBlocker:Be,_internalFetchControllers:N,_internalActiveDeferreds:se,_internalSetRoutes:function(e){h={},u=f(e,c,void 0,h)}},A},e.createStaticHandler=function(e,r){o(e.length>0,"You must provide a non-empty routes array to createStaticHandler");let a,n={},i=(r?r.basename:null)||"/";if(null!=r&&r.mapRouteProperties)a=r.mapRouteProperties;else if(null!=r&&r.detectErrorBoundary){let e=r.detectErrorBoundary;a=t=>({hasErrorBoundary:e(t)})}else a=V;let c=f(e,a,void 0,n);async function u(e,r,s,l,c){o(e.signal,"query()/queryRoute() requests must contain an AbortController signal");try{if(Re(e.method.toLowerCase())){let o=await async function(e,r,o,s,l){let c;if(o.route.action||o.route.lazy){if(c=await ne("action",e,o,r,n,a,i,{isStaticRequest:!0,isRouteRequest:l,requestContext:s}),e.signal.aborted){throw new Error((l?"queryRoute":"query")+"() call aborted: "+e.method+" "+e.url)}}else{let t=pe(405,{method:e.method,pathname:new URL(e.url).pathname,routeId:o.route.id});if(l)throw t;c={type:d.error,error:t}}if(be(c))throw new Response(null,{status:c.status,headers:{Location:c.location}});if(ve(c)){let e=pe(400,{type:"defer-action"});if(l)throw e;c={type:d.error,error:e}}if(l){if(ge(c))throw c.error;return{matches:[o],loaderData:{},actionData:{[o.route.id]:c.data},errors:null,statusCode:200,loaderHeaders:{},actionHeaders:{},activeDeferreds:null}}if(ge(c)){let a=he(r,o.route.id);return t({},await h(e,r,s,void 0,{[a.route.id]:c.error}),{statusCode:z(c.error)?c.error.status:500,actionData:null,actionHeaders:t({},c.headers?{[o.route.id]:c.headers}:{})})}let u=new Request(e.url,{headers:e.headers,redirect:e.redirect,signal:e.signal});return t({},await h(u,r,s),c.statusCode?{statusCode:c.statusCode}:{},{actionData:{[o.route.id]:c.data},actionHeaders:t({},c.headers?{[o.route.id]:c.headers}:{})})}(e,s,c||Le(s,r),l,null!=c);return o}let o=await h(e,s,l,c);return De(o)?o:t({},o,{actionData:null,actionHeaders:{}})}catch(e){if((u=e)&&De(u.response)&&(u.type===d.data||u.type===d.error)){if(e.type===d.error)throw e.response;return e.response}if(function(e){if(!De(e))return!1;let t=e.status,r=e.headers.get("Location");return t>=300&&t<=399&&null!=r}(e))return e;throw e}var u}async function h(e,r,o,s,l){let c=null!=s;if(c&&(null==s||!s.route.loader)&&(null==s||!s.route.lazy))throw pe(400,{method:e.method,pathname:new URL(e.url).pathname,routeId:null==s?void 0:s.route.id});let u=(s?[s]:ee(r,Object.keys(l||{})[0])).filter((e=>e.route.loader||e.route.lazy));if(0===u.length)return{matches:r,loaderData:r.reduce(((e,t)=>Object.assign(e,{[t.route.id]:null})),{}),errors:l||null,statusCode:200,loaderHeaders:{},activeDeferreds:null};let d=await Promise.all([...u.map((t=>ne("loader",e,t,r,n,a,i,{isStaticRequest:!0,isRouteRequest:c,requestContext:o})))]);if(e.signal.aborted){throw new Error((c?"queryRoute":"query")+"() call aborted: "+e.method+" "+e.url)}let h=new Map,f=ce(r,u,d,l,h),p=new Set(u.map((e=>e.route.id)));return r.forEach((e=>{p.has(e.route.id)||(f.loaderData[e.route.id]=null)})),t({},f,{matches:r,activeDeferreds:h.size>0?Object.fromEntries(h.entries()):null})}return{dataRoutes:c,query:async function(e,r){let{requestContext:a}=void 0===r?{}:r,o=new URL(e.url),n=e.method,d=s("",l(o),null,"default"),h=p(c,d,i);if(!Ee(n)&&"HEAD"!==n){let e=pe(405,{method:n}),{matches:t,route:r}=fe(c);return{basename:i,location:d,matches:t,loaderData:{},actionData:null,errors:{[r.id]:e},statusCode:e.status,loaderHeaders:{},actionHeaders:{},activeDeferreds:null}}if(!h){let e=pe(404,{pathname:d.pathname}),{matches:t,route:r}=fe(c);return{basename:i,location:d,matches:t,loaderData:{},actionData:null,errors:{[r.id]:e},statusCode:e.status,loaderHeaders:{},actionHeaders:{},activeDeferreds:null}}let f=await u(e,d,h,a);return De(f)?f:t({location:d,basename:i},f)},queryRoute:async function(e,t){let{routeId:r,requestContext:a}=void 0===t?{}:t,o=new URL(e.url),n=e.method,d=s("",l(o),null,"default"),h=p(c,d,i);if(!Ee(n)&&"HEAD"!==n&&"OPTIONS"!==n)throw pe(405,{method:n});if(!h)throw pe(404,{pathname:d.pathname});let f=r?h.find((e=>e.route.id===r)):Le(h,d);if(r&&!f)throw pe(403,{pathname:d.pathname,routeId:r});if(!f)throw pe(404,{pathname:d.pathname});let m=await u(e,d,h,a,f);if(De(m))return m;let y=m.errors?Object.values(m.errors)[0]:void 0;if(void 0!==y)throw y;if(m.actionData)return Object.values(m.actionData)[0];if(m.loaderData){var v;let e=Object.values(m.loaderData)[0];return null!=(v=m.activeDeferreds)&&v[f.route.id]&&(e[G]=m.activeDeferreds[f.route.id]),e}}}},e.defer=function(e,t){return void 0===t&&(t={}),new U(e,"number"==typeof t?{status:t}:t)},e.generatePath=function(e,t){void 0===t&&(t={});let r=e;r.endsWith("*")&&"*"!==r&&!r.endsWith("/*")&&(n(!1,'Route path "'+r+'" will be treated as if it were "'+r.replace(/\*$/,"/*")+'" because the `*` character must always follow a `/` in the pattern. To get rid of this warning, please change the route path to "'+r.replace(/\*$/,"/*")+'".'),r=r.replace(/\*$/,"/*"));const a=r.startsWith("/")?"/":"",i=e=>null==e?"":"string"==typeof e?e:String(e);return a+r.split(/\/+/).map(((e,r,a)=>{if(r===a.length-1&&"*"===e){return i(t["*"])}const n=e.match(/^:(\w+)(\??)$/);if(n){const[,e,r]=n;let a=t[e];return o("?"===r||null!=a,'Missing ":'+e+'" param'),i(a)}return e.replace(/\?$/g,"")})).filter((e=>!!e)).join("/")},e.getStaticContextFromError=function(e,r,a){return t({},r,{statusCode:500,errors:{[r._deepestRenderedBoundaryId||e[0].id]:a}})},e.getToPathname=function(e){return""===e||""===e.pathname?"/":"string"==typeof e?c(e).pathname:e.pathname},e.isDeferredData=we,e.isRouteErrorResponse=z,e.joinPaths=M,e.json=function(e,r){void 0===r&&(r={});let a="number"==typeof r?{status:r}:r,o=new Headers(a.headers);return o.has("Content-Type")||o.set("Content-Type","application/json; charset=utf-8"),new Response(JSON.stringify(e),t({},a,{headers:o}))},e.matchPath=E,e.matchRoutes=p,e.normalizePathname=j,e.parsePath=c,e.redirect=_,e.redirectDocument=(e,t)=>{let r=_(e,t);return r.headers.set("X-Remix-Reload-Document","true"),r},e.resolvePath=x,e.resolveTo=A,e.stripBasename=S,Object.defineProperty(e,"__esModule",{value:!0})})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).RemixRouter={})}(this,(function(e){"use strict";function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0&&(t.hash=e.substr(r),e=e.substr(0,r));let a=e.indexOf("?");a>=0&&(t.search=e.substr(a),e=e.substr(0,a)),e&&(t.pathname=e)}return t}function u(e,n,c,u){void 0===u&&(u={});let{window:d=document.defaultView,v5Compat:h=!1}=u,f=d.history,p=r.Pop,m=null,y=v();function v(){return(f.state||{idx:null}).idx}function g(){p=r.Pop;let e=v(),t=null==e?null:e-y;y=e,m&&m({action:p,location:w.location,delta:t})}function b(e){let t="null"!==d.location.origin?d.location.origin:d.location.href,r="string"==typeof e?e:l(e);return o(t,"No window.location.(origin|href) available to create URL for href: "+r),new URL(r,t)}null==y&&(y=0,f.replaceState(t({},f.state,{idx:y}),""));let w={get action(){return p},get location(){return e(d,f)},listen(e){if(m)throw new Error("A history only accepts one active listener");return d.addEventListener(a,g),m=e,()=>{d.removeEventListener(a,g),m=null}},createHref:e=>n(d,e),createURL:b,encodeLocation(e){let t=b(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,t){p=r.Push;let a=s(w.location,e,t);c&&c(a,e),y=v()+1;let o=i(a,y),n=w.createHref(a);try{f.pushState(o,"",n)}catch(e){if(e instanceof DOMException&&"DataCloneError"===e.name)throw e;d.location.assign(n)}h&&m&&m({action:p,location:w.location,delta:1})},replace:function(e,t){p=r.Replace;let a=s(w.location,e,t);c&&c(a,e),y=v();let o=i(a,y),n=w.createHref(a);f.replaceState(o,"",n),h&&m&&m({action:p,location:w.location,delta:0})},go:e=>f.go(e)};return w}let d=function(e){return e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error",e}({});const h=new Set(["lazy","caseSensitive","path","id","index","children"]);function f(e,r,a,n){return void 0===a&&(a=[]),void 0===n&&(n={}),e.map(((e,i)=>{let s=[...a,i],l="string"==typeof e.id?e.id:s.join("-");if(o(!0!==e.index||!e.children,"Cannot specify children on an index route"),o(!n[l],'Found a route id collision on id "'+l+"\". Route id's must be globally unique within Data Router usages"),function(e){return!0===e.index}(e)){let a=t({},e,r(e),{id:l});return n[l]=a,a}{let a=t({},e,r(e),{id:l,children:void 0});return n[l]=a,e.children&&(a.children=f(e.children,r,s,n)),a}}))}function p(e,t,r){void 0===r&&(r="/");let a=S(("string"==typeof t?c(t):t).pathname||"/",r);if(null==a)return null;let o=y(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){return e.length===t.length&&e.slice(0,-1).every(((e,r)=>e===t[r]))?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(o);let n=null;for(let e=0;null==n&&e{let s={relativePath:void 0===i?e.path||"":i,caseSensitive:!0===e.caseSensitive,childrenIndex:n,route:e};s.relativePath.startsWith("/")&&(o(s.relativePath.startsWith(a),'Absolute route path "'+s.relativePath+'" nested under path "'+a+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),s.relativePath=s.relativePath.slice(a.length));let l=M([a,s.relativePath]),c=r.concat(s);e.children&&e.children.length>0&&(o(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+l+'".'),y(e.children,t,c,l)),(null!=e.path||e.index)&&t.push({path:l,score:w(l,e.index),routesMeta:c})};return e.forEach(((e,t)=>{var r;if(""!==e.path&&null!=(r=e.path)&&r.includes("?"))for(let r of v(e.path))n(e,t,r);else n(e,t)})),t}function v(e){let t=e.split("/");if(0===t.length)return[];let[r,...a]=t,o=r.endsWith("?"),n=r.replace(/\?$/,"");if(0===a.length)return o?[n,""]:[n];let i=v(a.join("/")),s=[];return s.push(...i.map((e=>""===e?n:[n,e].join("/")))),o&&s.push(...i),s.map((t=>e.startsWith("/")&&""===t?"/":t))}const g=/^:\w+$/,b=e=>"*"===e;function w(e,t){let r=e.split("/"),a=r.length;return r.some(b)&&(a+=-2),t&&(a+=2),r.filter((e=>!b(e))).reduce(((e,t)=>e+(g.test(t)?3:""===t?1:10)),a)}function D(e,t){let{routesMeta:r}=e,a={},o="/",n=[];for(let e=0;e(a.push({paramName:t,isOptional:null!=r}),r?"/?([^\\/]+)?":"/([^\\/]+)")));e.endsWith("*")?(a.push({paramName:"*"}),o+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?o+="\\/*$":""!==e&&"/"!==e&&(o+="(?:(?=\\/|$))");return[new RegExp(o,t?void 0:"i"),a]}(e.path,e.caseSensitive,e.end),o=t.match(r);if(!o)return null;let i=o[0],s=i.replace(/(.)\/+$/,"$1"),l=o.slice(1);return{params:a.reduce(((e,t,r)=>{let{paramName:a,isOptional:o}=t;if("*"===a){let e=l[r]||"";s=i.slice(0,i.length-e.length).replace(/(.)\/+$/,"$1")}const c=l[r];return e[a]=o&&!c?void 0:function(e,t){try{return decodeURIComponent(e)}catch(r){return n(!1,'The value for the URL param "'+t+'" will not be decoded because the string "'+e+'" is a malformed URL segment. This is probably due to a bad percent encoding ('+r+")."),e}}(c||"",a),e}),{}),pathname:i,pathnameBase:s,pattern:e}}function E(e){try{return decodeURI(e)}catch(t){return n(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent encoding ('+t+")."),e}}function S(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,a=e.charAt(r);return a&&"/"!==a?null:e.slice(r)||"/"}function x(e,t){void 0===t&&(t="/");let{pathname:r,search:a="",hash:o=""}="string"==typeof e?c(e):e,n=r?r.startsWith("/")?r:function(e,t){let r=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?r.length>1&&r.pop():"."!==e&&r.push(e)})),r.length>1?r.join("/"):"/"}(r,t):t;return{pathname:n,search:k(a),hash:C(o)}}function P(e,t,r,a){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(a)+"]. Please separate it out to the `to."+r+'` field. Alternatively you may provide the full path as a string in and the router will parse it for you.'}function L(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}function A(e,r,a,n){let i;void 0===n&&(n=!1),"string"==typeof e?i=c(e):(i=t({},e),o(!i.pathname||!i.pathname.includes("?"),P("?","pathname","search",i)),o(!i.pathname||!i.pathname.includes("#"),P("#","pathname","hash",i)),o(!i.search||!i.search.includes("#"),P("#","search","hash",i)));let s,l=""===e||""===i.pathname,u=l?"/":i.pathname;if(null==u)s=a;else if(n){let e=r[r.length-1].replace(/^\//,"").split("/");if(u.startsWith("..")){let t=u.split("/");for(;".."===t[0];)t.shift(),e.pop();i.pathname=t.join("/")}s="/"+e.join("/")}else{let e=r.length-1;if(u.startsWith("..")){let t=u.split("/");for(;".."===t[0];)t.shift(),e-=1;i.pathname=t.join("/")}s=e>=0?r[e]:"/"}let d=x(i,s),h=u&&"/"!==u&&u.endsWith("/"),f=(l||"."===u)&&a.endsWith("/");return d.pathname.endsWith("/")||!h&&!f||(d.pathname+="/"),d}const M=e=>e.join("/").replace(/\/\/+/g,"/"),j=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),k=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",C=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";class T extends Error{}class U{constructor(e,t){let r;this.pendingKeysSet=new Set,this.subscribers=new Set,this.deferredKeys=[],o(e&&"object"==typeof e&&!Array.isArray(e),"defer() only accepts plain objects"),this.abortPromise=new Promise(((e,t)=>r=t)),this.controller=new AbortController;let a=()=>r(new T("Deferred data aborted"));this.unlistenAbortSignal=()=>this.controller.signal.removeEventListener("abort",a),this.controller.signal.addEventListener("abort",a),this.data=Object.entries(e).reduce(((e,t)=>{let[r,a]=t;return Object.assign(e,{[r]:this.trackPromise(r,a)})}),{}),this.done&&this.unlistenAbortSignal(),this.init=t}trackPromise(e,t){if(!(t instanceof Promise))return t;this.deferredKeys.push(e),this.pendingKeysSet.add(e);let r=Promise.race([t,this.abortPromise]).then((t=>this.onSettle(r,e,void 0,t)),(t=>this.onSettle(r,e,t)));return r.catch((()=>{})),Object.defineProperty(r,"_tracked",{get:()=>!0}),r}onSettle(e,t,r,a){if(this.controller.signal.aborted&&r instanceof T)return this.unlistenAbortSignal(),Object.defineProperty(e,"_error",{get:()=>r}),Promise.reject(r);if(this.pendingKeysSet.delete(t),this.done&&this.unlistenAbortSignal(),void 0===r&&void 0===a){let r=new Error('Deferred data for key "'+t+'" resolved/rejected with `undefined`, you must resolve/reject with a value or `null`.');return Object.defineProperty(e,"_error",{get:()=>r}),this.emit(!1,t),Promise.reject(r)}return void 0===a?(Object.defineProperty(e,"_error",{get:()=>r}),this.emit(!1,t),Promise.reject(r)):(Object.defineProperty(e,"_data",{get:()=>a}),this.emit(!1,t),a)}emit(e,t){this.subscribers.forEach((r=>r(e,t)))}subscribe(e){return this.subscribers.add(e),()=>this.subscribers.delete(e)}cancel(){this.controller.abort(),this.pendingKeysSet.forEach(((e,t)=>this.pendingKeysSet.delete(t))),this.emit(!0)}async resolveData(e){let t=!1;if(!this.done){let r=()=>this.cancel();e.addEventListener("abort",r),t=await new Promise((t=>{this.subscribe((a=>{e.removeEventListener("abort",r),(a||this.done)&&t(a)}))}))}return t}get done(){return 0===this.pendingKeysSet.size}get unwrappedData(){return o(null!==this.data&&this.done,"Can only unwrap data on initialized and settled deferreds"),Object.entries(this.data).reduce(((e,t)=>{let[r,a]=t;return Object.assign(e,{[r]:O(a)})}),{})}get pendingKeys(){return Array.from(this.pendingKeysSet)}}function O(e){if(!function(e){return e instanceof Promise&&!0===e._tracked}(e))return e;if(e._error)throw e._error;return e._data}const _=function(e,r){void 0===r&&(r=302);let a=r;"number"==typeof a?a={status:a}:void 0===a.status&&(a.status=302);let o=new Headers(a.headers);return o.set("Location",e),"object"==typeof r&&r.replace&&o.set("X-Remix-Redirect-Replace","true"),new Response(null,t({},a,{headers:o}))};class I{constructor(e,t,r,a){void 0===a&&(a=!1),this.status=e,this.statusText=t||"",this.internal=a,r instanceof Error?(this.data=r.toString(),this.error=r):this.data=r}}function z(e){return null!=e&&"number"==typeof e.status&&"string"==typeof e.statusText&&"boolean"==typeof e.internal&&"data"in e}const q=["post","put","patch","delete"],H=new Set(q),N=["get",...q],B=new Set(N),F=new Set([301,302,303,307,308]),W=new Set([307,308]),$={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},K={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},J={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},Y=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,X=e=>({hasErrorBoundary:Boolean(e.hasErrorBoundary)}),V="remix-router-transitions";const G=Symbol("deferred");function Q(e,t,r,a,o,n,i){let s,c;if(n){s=[];for(let e of t)if(s.push(e),e.route.id===n){c=e;break}}else s=t,c=t[t.length-1];let u=A(o||".",L(s).map((e=>e.pathnameBase)),S(e.pathname,r)||e.pathname,"path"===i);return null==o&&(u.search=e.search,u.hash=e.hash),null!=o&&""!==o&&"."!==o||!c||!c.route.index||Pe(u.search)||(u.search=u.search?u.search.replace(/^\?/,"?index&"):"?index"),a&&"/"!==r&&(u.pathname="/"===u.pathname?r:M([r,u.pathname])),l(u)}function Z(e,t,r,a){if(!a||!function(e){return null!=e&&("formData"in e&&null!=e.formData||"body"in e&&void 0!==e.body)}(a))return{path:r};if(a.formMethod&&!Re(a.formMethod))return{path:r,error:pe(405,{method:a.formMethod})};let n,i,s=()=>({path:r,error:pe(400,{type:"invalid-body"})}),u=a.formMethod||"get",d=e?u.toUpperCase():u.toLowerCase(),h=ye(r);if(void 0!==a.body){if("text/plain"===a.formEncType){if(!Ee(d))return s();let e="string"==typeof a.body?a.body:a.body instanceof FormData||a.body instanceof URLSearchParams?Array.from(a.body.entries()).reduce(((e,t)=>{let[r,a]=t;return""+e+r+"="+a+"\n"}),""):String(a.body);return{path:r,submission:{formMethod:d,formAction:h,formEncType:a.formEncType,formData:void 0,json:void 0,text:e}}}if("application/json"===a.formEncType){if(!Ee(d))return s();try{let e="string"==typeof a.body?JSON.parse(a.body):a.body;return{path:r,submission:{formMethod:d,formAction:h,formEncType:a.formEncType,formData:void 0,json:e,text:void 0}}}catch(e){return s()}}}if(o("function"==typeof FormData,"FormData is not available in this environment"),a.formData)n=se(a.formData),i=a.formData;else if(a.body instanceof FormData)n=se(a.body),i=a.body;else if(a.body instanceof URLSearchParams)n=a.body,i=le(n);else if(null==a.body)n=new URLSearchParams,i=new FormData;else try{n=new URLSearchParams(a.body),i=le(n)}catch(e){return s()}let f={formMethod:d,formAction:h,formEncType:a&&a.formEncType||"application/x-www-form-urlencoded",formData:i,json:void 0,text:void 0};if(Ee(f.formMethod))return{path:r,submission:f};let p=c(r);return t&&p.search&&Pe(p.search)&&n.append("index",""),p.search="?"+n,{path:l(p),submission:f}}function ee(e,t){let r=e;if(t){let a=e.findIndex((e=>e.route.id===t));a>=0&&(r=e.slice(0,a))}return r}function te(e,r,a,o,n,i,s,l,c,u,d,h,f,m,y){let v=y?Object.values(y)[0]:m?Object.values(m)[0]:void 0,g=e.createURL(r.location),b=e.createURL(n),w=y?Object.keys(y)[0]:void 0,D=ee(a,w).filter(((e,a)=>{if(e.route.lazy)return!0;if(null==e.route.loader)return!1;if(function(e,t,r){let a=!t||r.route.id!==t.route.id,o=void 0===e[r.route.id];return a||o}(r.loaderData,r.matches[a],e)||s.some((t=>t===e.route.id)))return!0;let n=r.matches[a],l=e;return ae(e,t({currentUrl:g,currentParams:n.params,nextUrl:b,nextParams:l.params},o,{actionResult:v,defaultShouldRevalidate:i||g.pathname+g.search===b.pathname+b.search||g.search!==b.search||re(n,l)}))})),R=[];return u.forEach(((e,n)=>{if(!a.some((t=>t.route.id===e.routeId))||c.has(n))return;let s=p(h,e.path,f);if(!s)return void R.push({key:n,routeId:e.routeId,path:e.path,matches:null,match:null,controller:null});let u=r.fetchers.get(n),m=Le(s,e.path),y=!1;y=!d.has(n)&&(!!l.includes(n)||(u&&"idle"!==u.state&&void 0===u.data?i:ae(m,t({currentUrl:g,currentParams:r.matches[r.matches.length-1].params,nextUrl:b,nextParams:a[a.length-1].params},o,{actionResult:v,defaultShouldRevalidate:i})))),y&&R.push({key:n,routeId:e.routeId,path:e.path,matches:s,match:m,controller:new AbortController})})),[D,R]}function re(e,t){let r=e.route.path;return e.pathname!==t.pathname||null!=r&&r.endsWith("*")&&e.params["*"]!==t.params["*"]}function ae(e,t){if(e.route.shouldRevalidate){let r=e.route.shouldRevalidate(t);if("boolean"==typeof r)return r}return t.defaultShouldRevalidate}async function oe(e,r,a){if(!e.lazy)return;let i=await e.lazy();if(!e.lazy)return;let s=a[e.id];o(s,"No route found in manifest");let l={};for(let e in i){let t=void 0!==s[e]&&"hasErrorBoundary"!==e;n(!t,'Route "'+s.id+'" has a static property "'+e+'" defined but its lazy function is also returning a value for this property. The lazy route property "'+e+'" will be ignored.'),t||h.has(e)||(l[e]=i[e])}Object.assign(s,l),Object.assign(s,t({},r(s),{lazy:void 0}))}async function ne(e,t,r,a,n,i,s,l){let c,u,h;void 0===l&&(l={});let f=e=>{let a,o=new Promise(((e,t)=>a=t));return h=()=>a(),t.signal.addEventListener("abort",h),Promise.race([e({request:t,params:r.params,context:l.requestContext}),o])};try{let a=r.route[e];if(r.route.lazy)if(a){let e,t=await Promise.all([f(a).catch((t=>{e=t})),oe(r.route,i,n)]);if(e)throw e;u=t[0]}else{if(await oe(r.route,i,n),a=r.route[e],!a){if("action"===e){let e=new URL(t.url),a=e.pathname+e.search;throw pe(405,{method:t.method,pathname:a,routeId:r.route.id})}return{type:d.data,data:void 0}}u=await f(a)}else{if(!a){let e=new URL(t.url);throw pe(404,{pathname:e.pathname+e.search})}u=await f(a)}o(void 0!==u,"You defined "+("action"===e?"an action":"a loader")+' for route "'+r.route.id+"\" but didn't return anything from your `"+e+"` function. Please return a value or `null`.")}catch(e){c=d.error,u=e}finally{h&&t.signal.removeEventListener("abort",h)}if(De(u)){let e,n=u.status;if(F.has(n)){let e=u.headers.get("Location");if(o(e,"Redirects returned/thrown from loaders/actions must have a Location header"),Y.test(e)){if(!l.isStaticRequest){let r=new URL(t.url),a=e.startsWith("//")?new URL(r.protocol+e):new URL(e),o=null!=S(a.pathname,s);a.origin===r.origin&&o&&(e=a.pathname+a.search+a.hash)}}else e=Q(new URL(t.url),a.slice(0,a.indexOf(r)+1),s,!0,e);if(l.isStaticRequest)throw u.headers.set("Location",e),u;return{type:d.redirect,status:n,location:e,replace:null!==u.headers.get("X-Remix-Redirect-Replace"),revalidate:null!==u.headers.get("X-Remix-Revalidate"),reloadDocument:null!==u.headers.get("X-Remix-Reload-Document")}}if(l.isRouteRequest){throw{type:c===d.error?d.error:d.data,response:u}}let i=u.headers.get("Content-Type");return e=i&&/\bapplication\/json\b/.test(i)?await u.json():await u.text(),c===d.error?{type:c,error:new I(n,u.statusText,e),headers:u.headers}:{type:d.data,data:e,statusCode:u.status,headers:u.headers}}return c===d.error?{type:c,error:u}:we(u)?{type:d.deferred,deferredData:u,statusCode:null==(p=u.init)?void 0:p.status,headers:(null==(m=u.init)?void 0:m.headers)&&new Headers(u.init.headers)}:{type:d.data,data:u};var p,m}function ie(e,t,r,a){let o=e.createURL(ye(t)).toString(),n={signal:r};if(a&&Ee(a.formMethod)){let{formMethod:e,formEncType:t}=a;n.method=e.toUpperCase(),"application/json"===t?(n.headers=new Headers({"Content-Type":t}),n.body=JSON.stringify(a.json)):"text/plain"===t?n.body=a.text:"application/x-www-form-urlencoded"===t&&a.formData?n.body=se(a.formData):n.body=a.formData}return new Request(o,n)}function se(e){let t=new URLSearchParams;for(let[r,a]of e.entries())t.append(r,"string"==typeof a?a:a.name);return t}function le(e){let t=new FormData;for(let[r,a]of e.entries())t.append(r,a);return t}function ce(e,t,r,a,n){let i,s={},l=null,c=!1,u={};return r.forEach(((r,d)=>{let h=t[d].route.id;if(o(!be(r),"Cannot handle redirect results in processLoaderData"),ge(r)){let t=he(e,h),o=r.error;a&&(o=Object.values(a)[0],a=void 0),l=l||{},null==l[t.route.id]&&(l[t.route.id]=o),s[h]=void 0,c||(c=!0,i=z(r.error)?r.error.status:500),r.headers&&(u[h]=r.headers)}else ve(r)?(n.set(h,r.deferredData),s[h]=r.deferredData.data):s[h]=r.data,null==r.statusCode||200===r.statusCode||c||(i=r.statusCode),r.headers&&(u[h]=r.headers)})),a&&(l=a,s[Object.keys(a)[0]]=void 0),{loaderData:s,errors:l,statusCode:i||200,loaderHeaders:u}}function ue(e,r,a,n,i,s,l,c){let{loaderData:u,errors:d}=ce(r,a,n,i,c);for(let r=0;re.route.id===t))+1):[...e]).reverse().find((e=>!0===e.route.hasErrorBoundary))||e[0]}function fe(e){let t=1===e.length?e[0]:e.find((e=>e.index||!e.path||"/"===e.path))||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:t}],route:t}}function pe(e,t){let{pathname:r,routeId:a,method:o,type:n}=void 0===t?{}:t,i="Unknown Server Error",s="Unknown @remix-run/router error";return 400===e?(i="Bad Request",o&&r&&a?s="You made a "+o+' request to "'+r+'" but did not provide a `loader` for route "'+a+'", so there is no way to handle the request.':"defer-action"===n?s="defer() is not supported in actions":"invalid-body"===n&&(s="Unable to encode submission body")):403===e?(i="Forbidden",s='Route "'+a+'" does not match URL "'+r+'"'):404===e?(i="Not Found",s='No route matches URL "'+r+'"'):405===e&&(i="Method Not Allowed",o&&r&&a?s="You made a "+o.toUpperCase()+' request to "'+r+'" but did not provide an `action` for route "'+a+'", so there is no way to handle the request.':o&&(s='Invalid request method "'+o.toUpperCase()+'"')),new I(e||500,i,new Error(s),!0)}function me(e){for(let t=e.length-1;t>=0;t--){let r=e[t];if(be(r))return{result:r,idx:t}}}function ye(e){return l(t({},"string"==typeof e?c(e):e,{hash:""}))}function ve(e){return e.type===d.deferred}function ge(e){return e.type===d.error}function be(e){return(e&&e.type)===d.redirect}function we(e){let t=e;return t&&"object"==typeof t&&"object"==typeof t.data&&"function"==typeof t.subscribe&&"function"==typeof t.cancel&&"function"==typeof t.resolveData}function De(e){return null!=e&&"number"==typeof e.status&&"string"==typeof e.statusText&&"object"==typeof e.headers&&void 0!==e.body}function Re(e){return B.has(e.toLowerCase())}function Ee(e){return H.has(e.toLowerCase())}async function Se(e,t,r,a,n,i){for(let s=0;se.route.id===c.route.id)),d=null!=u&&!re(u,c)&&void 0!==(i&&i[c.route.id]);if(ve(l)&&(n||d)){let e=a[s];o(e,"Expected an AbortSignal for revalidating fetcher deferred result"),await xe(l,e,n).then((e=>{e&&(r[s]=e||r[s])}))}}}async function xe(e,t,r){if(void 0===r&&(r=!1),!await e.deferredData.resolveData(t)){if(r)try{return{type:d.data,data:e.deferredData.unwrappedData}}catch(e){return{type:d.error,error:e}}return{type:d.data,data:e.deferredData.data}}}function Pe(e){return new URLSearchParams(e).getAll("index").some((e=>""===e))}function Le(e,t){let r="string"==typeof t?c(t).search:t.search;if(e[e.length-1].route.index&&Pe(r||""))return e[e.length-1];let a=L(e);return a[a.length-1]}function Ae(e){let{formMethod:t,formAction:r,formEncType:a,text:o,formData:n,json:i}=e;if(t&&r&&a)return null!=o?{formMethod:t,formAction:r,formEncType:a,formData:void 0,json:void 0,text:o}:null!=n?{formMethod:t,formAction:r,formEncType:a,formData:n,json:void 0,text:void 0}:void 0!==i?{formMethod:t,formAction:r,formEncType:a,formData:void 0,json:i,text:void 0}:void 0}function Me(e,t){if(t){return{state:"loading",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}}return{state:"loading",location:e,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function je(e,t){return{state:"submitting",location:e,formMethod:t.formMethod,formAction:t.formAction,formEncType:t.formEncType,formData:t.formData,json:t.json,text:t.text}}function ke(e,t){if(e){return{state:"loading",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t}}return{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:t}}function Ce(e){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:e}}e.AbortedDeferredError=T,e.Action=r,e.IDLE_BLOCKER=J,e.IDLE_FETCHER=K,e.IDLE_NAVIGATION=$,e.UNSAFE_DEFERRED_SYMBOL=G,e.UNSAFE_DeferredData=U,e.UNSAFE_ErrorResponseImpl=I,e.UNSAFE_convertRouteMatchToUiMatch=m,e.UNSAFE_convertRoutesToDataRoutes=f,e.UNSAFE_getPathContributingMatches=L,e.UNSAFE_invariant=o,e.UNSAFE_warning=n,e.createBrowserHistory=function(e){return void 0===e&&(e={}),u((function(e,t){let{pathname:r,search:a,hash:o}=e.location;return s("",{pathname:r,search:a,hash:o},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){return"string"==typeof t?t:l(t)}),null,e)},e.createHashHistory=function(e){return void 0===e&&(e={}),u((function(e,t){let{pathname:r="/",search:a="",hash:o=""}=c(e.location.hash.substr(1));return r.startsWith("/")||r.startsWith(".")||(r="/"+r),s("",{pathname:r,search:a,hash:o},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){let r=e.document.querySelector("base"),a="";if(r&&r.getAttribute("href")){let t=e.location.href,r=t.indexOf("#");a=-1===r?t:t.slice(0,r)}return a+"#"+("string"==typeof t?t:l(t))}),(function(e,t){n("/"===e.pathname.charAt(0),"relative pathnames are not supported in hash history.push("+JSON.stringify(t)+")")}),e)},e.createMemoryHistory=function(e){void 0===e&&(e={});let t,{initialEntries:a=["/"],initialIndex:o,v5Compat:i=!1}=e;t=a.map(((e,t)=>m(e,"string"==typeof e?null:e.state,0===t?"default":void 0)));let u=f(null==o?t.length-1:o),d=r.Pop,h=null;function f(e){return Math.min(Math.max(e,0),t.length-1)}function p(){return t[u]}function m(e,r,a){void 0===r&&(r=null);let o=s(t?p().pathname:"/",e,r,a);return n("/"===o.pathname.charAt(0),"relative pathnames are not supported in memory history: "+JSON.stringify(e)),o}function y(e){return"string"==typeof e?e:l(e)}return{get index(){return u},get action(){return d},get location(){return p()},createHref:y,createURL:e=>new URL(y(e),"http://localhost"),encodeLocation(e){let t="string"==typeof e?c(e):e;return{pathname:t.pathname||"",search:t.search||"",hash:t.hash||""}},push(e,a){d=r.Push;let o=m(e,a);u+=1,t.splice(u,t.length,o),i&&h&&h({action:d,location:o,delta:1})},replace(e,a){d=r.Replace;let o=m(e,a);t[u]=o,i&&h&&h({action:d,location:o,delta:0})},go(e){d=r.Pop;let a=f(u+e),o=t[a];u=a,h&&h({action:d,location:o,delta:e})},listen:e=>(h=e,()=>{h=null})}},e.createPath=l,e.createRouter=function(e){const a=e.window?e.window:"undefined"!=typeof window?window:void 0,i=void 0!==a&&void 0!==a.document&&void 0!==a.document.createElement,l=!i;let c;if(o(e.routes.length>0,"You must provide a non-empty routes array to createRouter"),e.mapRouteProperties)c=e.mapRouteProperties;else if(e.detectErrorBoundary){let t=e.detectErrorBoundary;c=e=>({hasErrorBoundary:t(e)})}else c=X;let u,h={},y=f(e.routes,c,void 0,h),v=e.basename||"/",g=t({v7_fetcherPersist:!1,v7_normalizeFormMethod:!1,v7_prependBasename:!1},e.future),b=null,w=new Set,D=null,R=null,E=null,x=null!=e.hydrationData,P=p(y,e.history.location,v),L=null;if(null==P){let t=pe(404,{pathname:e.history.location.pathname}),{matches:r,route:a}=fe(y);P=r,L={[a.id]:t}}let A,M,j=!(P.some((e=>e.route.lazy))||P.some((e=>e.route.loader))&&null==e.hydrationData),k={historyAction:e.history.action,location:e.history.location,matches:P,initialized:j,navigation:$,restoreScrollPosition:null==e.hydrationData&&null,preventScrollReset:!1,revalidation:"idle",loaderData:e.hydrationData&&e.hydrationData.loaderData||{},actionData:e.hydrationData&&e.hydrationData.actionData||null,errors:e.hydrationData&&e.hydrationData.errors||L,fetchers:new Map,blockers:new Map},C=r.Pop,T=!1,U=!1,O=new Map,_=null,I=!1,z=!1,q=[],H=[],N=new Map,B=0,F=-1,G=new Map,ee=new Set,re=new Map,ae=new Map,oe=new Set,se=new Map,le=new Map,ce=!1;function ye(e,r){void 0===r&&(r={}),k=t({},k,e);let a=[],o=[];g.v7_fetcherPersist&&k.fetchers.forEach(((e,t)=>{"idle"===e.state&&(oe.has(t)?o.push(t):a.push(t))})),[...w].forEach((e=>e(k,{deletedFetchers:o,unstable_viewTransitionOpts:r.viewTransitionOpts,unstable_flushSync:!0===r.flushSync}))),g.v7_fetcherPersist&&(a.forEach((e=>k.fetchers.delete(e))),o.forEach((e=>Ie(e))))}function we(a,o,n){var i,s;let l,{flushSync:c}=void 0===n?{}:n,d=null!=k.actionData&&null!=k.navigation.formMethod&&Ee(k.navigation.formMethod)&&"loading"===k.navigation.state&&!0!==(null==(i=a.state)?void 0:i._isRedirect);l=o.actionData?Object.keys(o.actionData).length>0?o.actionData:null:d?k.actionData:null;let h=o.loaderData?de(k.loaderData,o.loaderData,o.matches||[],o.errors):k.loaderData,f=k.blockers;f.size>0&&(f=new Map(f),f.forEach(((e,t)=>f.set(t,J))));let p,m=!0===T||null!=k.navigation.formMethod&&Ee(k.navigation.formMethod)&&!0!==(null==(s=a.state)?void 0:s._isRedirect);if(u&&(y=u,u=void 0),I||C===r.Pop||(C===r.Push?e.history.push(a,a.state):C===r.Replace&&e.history.replace(a,a.state)),C===r.Pop){let e=O.get(k.location.pathname);e&&e.has(a.pathname)?p={currentLocation:k.location,nextLocation:a}:O.has(a.pathname)&&(p={currentLocation:a,nextLocation:k.location})}else if(U){let e=O.get(k.location.pathname);e?e.add(a.pathname):(e=new Set([a.pathname]),O.set(k.location.pathname,e)),p={currentLocation:k.location,nextLocation:a}}ye(t({},o,{actionData:l,loaderData:h,historyAction:C,location:a,initialized:!0,navigation:$,revalidation:"idle",restoreScrollPosition:Je(a,o.matches||k.matches),preventScrollReset:m,blockers:f}),{viewTransitionOpts:p,flushSync:!0===c}),C=r.Pop,T=!1,U=!1,I=!1,z=!1,q=[],H=[]}async function De(a,o,n){M&&M.abort(),M=null,C=a,I=!0===(n&&n.startUninterruptedRevalidation),function(e,t){if(D&&E){let r=Ke(e,t);D[r]=E()}}(k.location,k.matches),T=!0===(n&&n.preventScrollReset),U=!0===(n&&n.enableViewTransition);let i=u||y,s=n&&n.overrideNavigation,l=p(i,o,v),f=!0===(n&&n.flushSync);if(!l){let e=pe(404,{pathname:o.pathname}),{matches:t,route:r}=fe(i);return $e(),void we(o,{matches:t,loaderData:{},errors:{[r.id]:e}},{flushSync:f})}if(k.initialized&&!z&&function(e,t){if(e.pathname!==t.pathname||e.search!==t.search)return!1;if(""===e.hash)return""!==t.hash;if(e.hash===t.hash)return!0;if(""!==t.hash)return!0;return!1}(k.location,o)&&!(n&&n.submission&&Ee(n.submission.formMethod)))return void we(o,{matches:l},{flushSync:f});M=new AbortController;let m,g,b=ie(e.history,o,M.signal,n&&n.submission);if(n&&n.pendingError)g={[he(l).route.id]:n.pendingError};else if(n&&n.submission&&Ee(n.submission.formMethod)){let e=await async function(e,t,a,o,n){void 0===n&&(n={});let i;Te(),ye({navigation:je(t,a)},{flushSync:!0===n.flushSync});let s=Le(o,t);if(s.route.action||s.route.lazy){if(i=await ne("action",e,s,o,h,c,v),e.signal.aborted)return{shortCircuited:!0}}else i={type:d.error,error:pe(405,{method:e.method,pathname:t.pathname,routeId:s.route.id})};if(be(i)){let e;return e=n&&null!=n.replace?n.replace:i.location===k.location.pathname+k.location.search,await Re(k,i,{submission:a,replace:e}),{shortCircuited:!0}}if(ge(i)){let e=he(o,s.route.id);return!0!==(n&&n.replace)&&(C=r.Push),{pendingActionData:{},pendingActionError:{[e.route.id]:i.error}}}if(ve(i))throw pe(400,{type:"defer-action"});return{pendingActionData:{[s.route.id]:i.data}}}(b,o,n.submission,l,{replace:n.replace,flushSync:f});if(e.shortCircuited)return;m=e.pendingActionData,g=e.pendingActionError,s=Me(o,n.submission),f=!1,b=new Request(b.url,{signal:b.signal})}let{shortCircuited:w,loaderData:R,errors:S}=await async function(r,a,o,n,i,s,l,c,d,h){let f=n||Me(a,i),p=i||s||Ae(f),m=u||y,[g,b]=te(e.history,k,o,p,a,z,q,H,oe,re,ee,m,v,d,h);if($e((e=>!(o&&o.some((t=>t.route.id===e)))||g&&g.some((t=>t.route.id===e)))),F=++B,0===g.length&&0===b.length){let e=He();return we(a,t({matches:o,loaderData:{},errors:h||null},d?{actionData:d}:{},e?{fetchers:new Map(k.fetchers)}:{}),{flushSync:c}),{shortCircuited:!0}}if(!I){b.forEach((e=>{let t=k.fetchers.get(e.key),r=ke(void 0,t?t.data:void 0);k.fetchers.set(e.key,r)}));let e=d||k.actionData;ye(t({navigation:f},e?0===Object.keys(e).length?{actionData:null}:{actionData:e}:{},b.length>0?{fetchers:new Map(k.fetchers)}:{}),{flushSync:c})}b.forEach((e=>{N.has(e.key)&&ze(e.key),e.controller&&N.set(e.key,e.controller)}));let w=()=>b.forEach((e=>ze(e.key)));M&&M.signal.addEventListener("abort",w);let{results:D,loaderResults:R,fetcherResults:E}=await Pe(k.matches,o,g,b,r);if(r.signal.aborted)return{shortCircuited:!0};M&&M.signal.removeEventListener("abort",w);b.forEach((e=>N.delete(e.key)));let S=me(D);if(S){if(S.idx>=g.length){let e=b[S.idx-g.length].key;ee.add(e)}return await Re(k,S.result,{replace:l||S.result.replace}),{shortCircuited:!0}}let{loaderData:x,errors:P}=ue(k,o,g,R,h,b,E,se);se.forEach(((e,t)=>{e.subscribe((r=>{(r||e.done)&&se.delete(t)}))}));let L=He(),A=Ne(F),j=L||A||b.length>0;return t({loaderData:x,errors:P},j?{fetchers:new Map(k.fetchers)}:{})}(b,o,l,s,n&&n.submission,n&&n.fetcherSubmission,n&&n.replace,f,m,g);w||(M=null,we(o,t({matches:l},m?{actionData:m}:{},{loaderData:R,errors:S})))}async function Re(n,l,c){let{submission:u,fetcherSubmission:d,replace:h}=void 0===c?{}:c;l.revalidate&&(z=!0);let f=s(n.location,l.location,{_isRedirect:!0});if(o(f,"Expected a location on the redirect navigation"),i){let t=!1;if(l.reloadDocument)t=!0;else if(Y.test(l.location)){const r=e.history.createURL(l.location);t=r.origin!==a.location.origin||null==S(r.pathname,v)}if(t)return void(h?a.location.replace(l.location):a.location.assign(l.location))}M=null;let p=!0===h?r.Replace:r.Push,{formMethod:m,formAction:y,formEncType:g}=n.navigation;!u&&!d&&m&&y&&g&&(u=Ae(n.navigation));let b=u||d;if(W.has(l.status)&&b&&Ee(b.formMethod))await De(p,f,{submission:t({},b,{formAction:l.location}),preventScrollReset:T});else{let e=Me(f,u);await De(p,f,{overrideNavigation:e,fetcherSubmission:d,preventScrollReset:T})}}async function Pe(t,r,a,o,n){let i=await Promise.all([...a.map((e=>ne("loader",n,e,r,h,c,v))),...o.map((t=>{if(t.matches&&t.match&&t.controller)return ne("loader",ie(e.history,t.path,t.controller.signal),t.match,t.matches,h,c,v);return{type:d.error,error:pe(404,{pathname:t.path})}}))]),s=i.slice(0,a.length),l=i.slice(a.length);return await Promise.all([Se(t,a,s,s.map((()=>n.signal)),!1,k.loaderData),Se(t,o.map((e=>e.match)),l,o.map((e=>e.controller?e.controller.signal:null)),!0)]),{results:i,loaderResults:s,fetcherResults:l}}function Te(){z=!0,q.push(...$e()),re.forEach(((e,t)=>{N.has(t)&&(H.push(t),ze(t))}))}function Ue(e,t,r){void 0===r&&(r={}),k.fetchers.set(e,t),ye({fetchers:new Map(k.fetchers)},{flushSync:!0===(r&&r.flushSync)})}function Oe(e,t,r,a){void 0===a&&(a={});let o=he(k.matches,t);Ie(e),ye({errors:{[o.route.id]:r},fetchers:new Map(k.fetchers)},{flushSync:!0===(a&&a.flushSync)})}function _e(e){return g.v7_fetcherPersist&&(ae.set(e,(ae.get(e)||0)+1),oe.has(e)&&oe.delete(e)),k.fetchers.get(e)||K}function Ie(e){let t=k.fetchers.get(e);!N.has(e)||t&&"loading"===t.state&&G.has(e)||ze(e),re.delete(e),G.delete(e),ee.delete(e),oe.delete(e),k.fetchers.delete(e)}function ze(e){let t=N.get(e);o(t,"Expected fetch controller: "+e),t.abort(),N.delete(e)}function qe(e){for(let t of e){let e=Ce(_e(t).data);k.fetchers.set(t,e)}}function He(){let e=[],t=!1;for(let r of ee){let a=k.fetchers.get(r);o(a,"Expected fetcher: "+r),"loading"===a.state&&(ee.delete(r),e.push(r),t=!0)}return qe(e),t}function Ne(e){let t=[];for(let[r,a]of G)if(a0}function Be(e){k.blockers.delete(e),le.delete(e)}function Fe(e,t){let r=k.blockers.get(e)||J;o("unblocked"===r.state&&"blocked"===t.state||"blocked"===r.state&&"blocked"===t.state||"blocked"===r.state&&"proceeding"===t.state||"blocked"===r.state&&"unblocked"===t.state||"proceeding"===r.state&&"unblocked"===t.state,"Invalid blocker state transition: "+r.state+" -> "+t.state);let a=new Map(k.blockers);a.set(e,t),ye({blockers:a})}function We(e){let{currentLocation:t,nextLocation:r,historyAction:a}=e;if(0===le.size)return;le.size>1&&n(!1,"A router only supports one blocker at a time");let o=Array.from(le.entries()),[i,s]=o[o.length-1],l=k.blockers.get(i);return l&&"proceeding"===l.state?void 0:s({currentLocation:t,nextLocation:r,historyAction:a})?i:void 0}function $e(e){let t=[];return se.forEach(((r,a)=>{e&&!e(a)||(r.cancel(),t.push(a),se.delete(a))})),t}function Ke(e,t){if(R){return R(e,t.map((e=>m(e,k.loaderData))))||e.key}return e.key}function Je(e,t){if(D){let r=Ke(e,t),a=D[r];if("number"==typeof a)return a}return null}return A={get basename(){return v},get state(){return k},get routes(){return y},get window(){return a},initialize:function(){if(b=e.history.listen((t=>{let{action:r,location:a,delta:o}=t;if(ce)return void(ce=!1);n(0===le.size||null!=o,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let i=We({currentLocation:k.location,nextLocation:a,historyAction:r});return i&&null!=o?(ce=!0,e.history.go(-1*o),void Fe(i,{state:"blocked",location:a,proceed(){Fe(i,{state:"proceeding",proceed:void 0,reset:void 0,location:a}),e.history.go(o)},reset(){let e=new Map(k.blockers);e.set(i,J),ye({blockers:e})}})):De(r,a)})),i){!function(e,t){try{let r=e.sessionStorage.getItem(V);if(r){let e=JSON.parse(r);for(let[r,a]of Object.entries(e||{}))a&&Array.isArray(a)&&t.set(r,new Set(a||[]))}}catch(e){}}(a,O);let e=()=>function(e,t){if(t.size>0){let r={};for(let[e,a]of t)r[e]=[...a];try{e.sessionStorage.setItem(V,JSON.stringify(r))}catch(e){n(!1,"Failed to save applied view transitions in sessionStorage ("+e+").")}}}(a,O);a.addEventListener("pagehide",e),_=()=>a.removeEventListener("pagehide",e)}return k.initialized||De(r.Pop,k.location),A},subscribe:function(e){return w.add(e),()=>w.delete(e)},enableScrollRestoration:function(e,t,r){if(D=e,E=t,R=r||null,!x&&k.navigation===$){x=!0;let e=Je(k.location,k.matches);null!=e&&ye({restoreScrollPosition:e})}return()=>{D=null,E=null,R=null}},navigate:async function a(o,n){if("number"==typeof o)return void e.history.go(o);let i=Q(k.location,k.matches,v,g.v7_prependBasename,o,null==n?void 0:n.fromRouteId,null==n?void 0:n.relative),{path:l,submission:c,error:u}=Z(g.v7_normalizeFormMethod,!1,i,n),d=k.location,h=s(k.location,l,n&&n.state);h=t({},h,e.history.encodeLocation(h));let f=n&&null!=n.replace?n.replace:void 0,p=r.Push;!0===f?p=r.Replace:!1===f||null!=c&&Ee(c.formMethod)&&c.formAction===k.location.pathname+k.location.search&&(p=r.Replace);let m=n&&"preventScrollReset"in n?!0===n.preventScrollReset:void 0,y=!0===(n&&n.unstable_flushSync),b=We({currentLocation:d,nextLocation:h,historyAction:p});if(!b)return await De(p,h,{submission:c,pendingError:u,preventScrollReset:m,replace:n&&n.replace,enableViewTransition:n&&n.unstable_viewTransition,flushSync:y});Fe(b,{state:"blocked",location:h,proceed(){Fe(b,{state:"proceeding",proceed:void 0,reset:void 0,location:h}),a(o,n)},reset(){let e=new Map(k.blockers);e.set(b,J),ye({blockers:e})}})},fetch:function(t,r,a,n){if(l)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");N.has(t)&&ze(t);let i=!0===(n&&n.unstable_flushSync),s=u||y,d=Q(k.location,k.matches,v,g.v7_prependBasename,a,r,null==n?void 0:n.relative),f=p(s,d,v);if(!f)return void Oe(t,r,pe(404,{pathname:d}),{flushSync:i});let{path:m,submission:b,error:w}=Z(g.v7_normalizeFormMethod,!0,d,n);if(w)return void Oe(t,r,w,{flushSync:i});let D=Le(f,m);T=!0===(n&&n.preventScrollReset),b&&Ee(b.formMethod)?async function(t,r,a,n,i,s,l){if(Te(),re.delete(t),!n.route.action&&!n.route.lazy){let e=pe(405,{method:l.formMethod,pathname:a,routeId:r});return void Oe(t,r,e,{flushSync:s})}let d=k.fetchers.get(t);Ue(t,function(e,t){return{state:"submitting",formMethod:e.formMethod,formAction:e.formAction,formEncType:e.formEncType,formData:e.formData,json:e.json,text:e.text,data:t?t.data:void 0}}(l,d),{flushSync:s});let f=new AbortController,m=ie(e.history,a,f.signal,l);N.set(t,f);let g=B,b=await ne("action",m,n,i,h,c,v);if(m.signal.aborted)return void(N.get(t)===f&&N.delete(t));if(oe.has(t))return void Ue(t,Ce(void 0));if(be(b))return N.delete(t),F>g?void Ue(t,Ce(void 0)):(ee.add(t),Ue(t,ke(l)),Re(k,b,{fetcherSubmission:l}));if(ge(b))return void Oe(t,r,b.error);if(ve(b))throw pe(400,{type:"defer-action"});let w=k.navigation.location||k.location,D=ie(e.history,w,f.signal),R=u||y,E="idle"!==k.navigation.state?p(R,k.navigation.location,v):k.matches;o(E,"Didn't find any matches after fetcher action");let S=++B;G.set(t,S);let x=ke(l,b.data);k.fetchers.set(t,x);let[P,L]=te(e.history,k,E,l,w,z,q,H,oe,re,ee,R,v,{[n.route.id]:b.data},void 0);L.filter((e=>e.key!==t)).forEach((e=>{let t=e.key,r=k.fetchers.get(t),a=ke(void 0,r?r.data:void 0);k.fetchers.set(t,a),N.has(t)&&ze(t),e.controller&&N.set(t,e.controller)})),ye({fetchers:new Map(k.fetchers)});let A=()=>L.forEach((e=>ze(e.key)));f.signal.addEventListener("abort",A);let{results:j,loaderResults:T,fetcherResults:U}=await Pe(k.matches,E,P,L,D);if(f.signal.aborted)return;f.signal.removeEventListener("abort",A),G.delete(t),N.delete(t),L.forEach((e=>N.delete(e.key)));let O=me(j);if(O){if(O.idx>=P.length){let e=L[O.idx-P.length].key;ee.add(e)}return Re(k,O.result,{replace:O.result.replace})}let{loaderData:_,errors:I}=ue(k,k.matches,P,T,void 0,L,U,se);if(k.fetchers.has(t)){let e=Ce(b.data);k.fetchers.set(t,e)}Ne(S),"loading"===k.navigation.state&&S>F?(o(C,"Expected pending action"),M&&M.abort(),we(k.navigation.location,{matches:E,loaderData:_,errors:I,fetchers:new Map(k.fetchers)})):(ye({errors:I,loaderData:de(k.loaderData,_,E,I),fetchers:new Map(k.fetchers)}),z=!1)}(t,r,m,D,f,i,b):(re.set(t,{routeId:r,path:m}),async function(t,r,a,n,i,s,l){let u=k.fetchers.get(t);Ue(t,ke(l,u?u.data:void 0),{flushSync:s});let d=new AbortController,f=ie(e.history,a,d.signal);N.set(t,d);let p=B,m=await ne("loader",f,n,i,h,c,v);ve(m)&&(m=await xe(m,f.signal,!0)||m);N.get(t)===d&&N.delete(t);if(f.signal.aborted)return;if(oe.has(t))return void Ue(t,Ce(void 0));if(be(m))return F>p?void Ue(t,Ce(void 0)):(ee.add(t),void await Re(k,m));if(ge(m))return void Oe(t,r,m.error);o(!ve(m),"Unhandled fetcher deferred data"),Ue(t,Ce(m.data))}(t,r,m,D,f,i,b))},revalidate:function(){Te(),ye({revalidation:"loading"}),"submitting"!==k.navigation.state&&("idle"!==k.navigation.state?De(C||k.historyAction,k.navigation.location,{overrideNavigation:k.navigation}):De(k.historyAction,k.location,{startUninterruptedRevalidation:!0}))},createHref:t=>e.history.createHref(t),encodeLocation:t=>e.history.encodeLocation(t),getFetcher:_e,deleteFetcher:function(e){if(g.v7_fetcherPersist){let t=(ae.get(e)||0)-1;t<=0?(ae.delete(e),oe.add(e)):ae.set(e,t)}else Ie(e);ye({fetchers:new Map(k.fetchers)})},dispose:function(){b&&b(),_&&_(),w.clear(),M&&M.abort(),k.fetchers.forEach(((e,t)=>Ie(t))),k.blockers.forEach(((e,t)=>Be(t)))},getBlocker:function(e,t){let r=k.blockers.get(e)||J;return le.get(e)!==t&&le.set(e,t),r},deleteBlocker:Be,_internalFetchControllers:N,_internalActiveDeferreds:se,_internalSetRoutes:function(e){h={},u=f(e,c,void 0,h)}},A},e.createStaticHandler=function(e,r){o(e.length>0,"You must provide a non-empty routes array to createStaticHandler");let a,n={},i=(r?r.basename:null)||"/";if(null!=r&&r.mapRouteProperties)a=r.mapRouteProperties;else if(null!=r&&r.detectErrorBoundary){let e=r.detectErrorBoundary;a=t=>({hasErrorBoundary:e(t)})}else a=X;let c=f(e,a,void 0,n);async function u(e,r,s,l,c){o(e.signal,"query()/queryRoute() requests must contain an AbortController signal");try{if(Ee(e.method.toLowerCase())){let o=await async function(e,r,o,s,l){let c;if(o.route.action||o.route.lazy){if(c=await ne("action",e,o,r,n,a,i,{isStaticRequest:!0,isRouteRequest:l,requestContext:s}),e.signal.aborted){throw new Error((l?"queryRoute":"query")+"() call aborted: "+e.method+" "+e.url)}}else{let t=pe(405,{method:e.method,pathname:new URL(e.url).pathname,routeId:o.route.id});if(l)throw t;c={type:d.error,error:t}}if(be(c))throw new Response(null,{status:c.status,headers:{Location:c.location}});if(ve(c)){let e=pe(400,{type:"defer-action"});if(l)throw e;c={type:d.error,error:e}}if(l){if(ge(c))throw c.error;return{matches:[o],loaderData:{},actionData:{[o.route.id]:c.data},errors:null,statusCode:200,loaderHeaders:{},actionHeaders:{},activeDeferreds:null}}if(ge(c)){let a=he(r,o.route.id);return t({},await h(e,r,s,void 0,{[a.route.id]:c.error}),{statusCode:z(c.error)?c.error.status:500,actionData:null,actionHeaders:t({},c.headers?{[o.route.id]:c.headers}:{})})}let u=new Request(e.url,{headers:e.headers,redirect:e.redirect,signal:e.signal});return t({},await h(u,r,s),c.statusCode?{statusCode:c.statusCode}:{},{actionData:{[o.route.id]:c.data},actionHeaders:t({},c.headers?{[o.route.id]:c.headers}:{})})}(e,s,c||Le(s,r),l,null!=c);return o}let o=await h(e,s,l,c);return De(o)?o:t({},o,{actionData:null,actionHeaders:{}})}catch(e){if((u=e)&&De(u.response)&&(u.type===d.data||u.type===d.error)){if(e.type===d.error)throw e.response;return e.response}if(function(e){if(!De(e))return!1;let t=e.status,r=e.headers.get("Location");return t>=300&&t<=399&&null!=r}(e))return e;throw e}var u}async function h(e,r,o,s,l){let c=null!=s;if(c&&(null==s||!s.route.loader)&&(null==s||!s.route.lazy))throw pe(400,{method:e.method,pathname:new URL(e.url).pathname,routeId:null==s?void 0:s.route.id});let u=(s?[s]:ee(r,Object.keys(l||{})[0])).filter((e=>e.route.loader||e.route.lazy));if(0===u.length)return{matches:r,loaderData:r.reduce(((e,t)=>Object.assign(e,{[t.route.id]:null})),{}),errors:l||null,statusCode:200,loaderHeaders:{},activeDeferreds:null};let d=await Promise.all([...u.map((t=>ne("loader",e,t,r,n,a,i,{isStaticRequest:!0,isRouteRequest:c,requestContext:o})))]);if(e.signal.aborted){throw new Error((c?"queryRoute":"query")+"() call aborted: "+e.method+" "+e.url)}let h=new Map,f=ce(r,u,d,l,h),p=new Set(u.map((e=>e.route.id)));return r.forEach((e=>{p.has(e.route.id)||(f.loaderData[e.route.id]=null)})),t({},f,{matches:r,activeDeferreds:h.size>0?Object.fromEntries(h.entries()):null})}return{dataRoutes:c,query:async function(e,r){let{requestContext:a}=void 0===r?{}:r,o=new URL(e.url),n=e.method,d=s("",l(o),null,"default"),h=p(c,d,i);if(!Re(n)&&"HEAD"!==n){let e=pe(405,{method:n}),{matches:t,route:r}=fe(c);return{basename:i,location:d,matches:t,loaderData:{},actionData:null,errors:{[r.id]:e},statusCode:e.status,loaderHeaders:{},actionHeaders:{},activeDeferreds:null}}if(!h){let e=pe(404,{pathname:d.pathname}),{matches:t,route:r}=fe(c);return{basename:i,location:d,matches:t,loaderData:{},actionData:null,errors:{[r.id]:e},statusCode:e.status,loaderHeaders:{},actionHeaders:{},activeDeferreds:null}}let f=await u(e,d,h,a);return De(f)?f:t({location:d,basename:i},f)},queryRoute:async function(e,t){let{routeId:r,requestContext:a}=void 0===t?{}:t,o=new URL(e.url),n=e.method,d=s("",l(o),null,"default"),h=p(c,d,i);if(!Re(n)&&"HEAD"!==n&&"OPTIONS"!==n)throw pe(405,{method:n});if(!h)throw pe(404,{pathname:d.pathname});let f=r?h.find((e=>e.route.id===r)):Le(h,d);if(r&&!f)throw pe(403,{pathname:d.pathname,routeId:r});if(!f)throw pe(404,{pathname:d.pathname});let m=await u(e,d,h,a,f);if(De(m))return m;let y=m.errors?Object.values(m.errors)[0]:void 0;if(void 0!==y)throw y;if(m.actionData)return Object.values(m.actionData)[0];if(m.loaderData){var v;let e=Object.values(m.loaderData)[0];return null!=(v=m.activeDeferreds)&&v[f.route.id]&&(e[G]=m.activeDeferreds[f.route.id]),e}}}},e.defer=function(e,t){return void 0===t&&(t={}),new U(e,"number"==typeof t?{status:t}:t)},e.generatePath=function(e,t){void 0===t&&(t={});let r=e;r.endsWith("*")&&"*"!==r&&!r.endsWith("/*")&&(n(!1,'Route path "'+r+'" will be treated as if it were "'+r.replace(/\*$/,"/*")+'" because the `*` character must always follow a `/` in the pattern. To get rid of this warning, please change the route path to "'+r.replace(/\*$/,"/*")+'".'),r=r.replace(/\*$/,"/*"));const a=r.startsWith("/")?"/":"",i=e=>null==e?"":"string"==typeof e?e:String(e);return a+r.split(/\/+/).map(((e,r,a)=>{if(r===a.length-1&&"*"===e){return i(t["*"])}const n=e.match(/^:(\w+)(\??)$/);if(n){const[,e,r]=n;let a=t[e];return o("?"===r||null!=a,'Missing ":'+e+'" param'),i(a)}return e.replace(/\?$/g,"")})).filter((e=>!!e)).join("/")},e.getStaticContextFromError=function(e,r,a){return t({},r,{statusCode:500,errors:{[r._deepestRenderedBoundaryId||e[0].id]:a}})},e.getToPathname=function(e){return""===e||""===e.pathname?"/":"string"==typeof e?c(e).pathname:e.pathname},e.isDeferredData=we,e.isRouteErrorResponse=z,e.joinPaths=M,e.json=function(e,r){void 0===r&&(r={});let a="number"==typeof r?{status:r}:r,o=new Headers(a.headers);return o.has("Content-Type")||o.set("Content-Type","application/json; charset=utf-8"),new Response(JSON.stringify(e),t({},a,{headers:o}))},e.matchPath=R,e.matchRoutes=p,e.normalizePathname=j,e.parsePath=c,e.redirect=_,e.redirectDocument=(e,t)=>{let r=_(e,t);return r.headers.set("X-Remix-Reload-Document","true"),r},e.resolvePath=x,e.resolveTo=A,e.stripBasename=S,Object.defineProperty(e,"__esModule",{value:!0})})); //# sourceMappingURL=router.umd.min.js.map diff --git a/dist/router.umd.min.js.map b/dist/router.umd.min.js.map index 3dc0c97e941c08b83fa0581ff532c52c513208bf..de5d878fac83c89b51bb8884bdb09024296a2256 100644 --- a/dist/router.umd.min.js.map +++ b/dist/router.umd.min.js.map @@ -1 +1 @@ -{"version":3,"file":"router.umd.min.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// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\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: State;\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`. This may be either a URL or the pieces\n * of a 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\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\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\nexport function 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 // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\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, warning } 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 reloadDocument?: 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\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on ``,\n * useSubmit(), ``, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\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?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable | null;\n\n/**\n * Route loader function signature\n */\nexport interface LoaderFunction {\n (args: LoaderFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (args: ActionFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\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 text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionResult?: any;\n defaultShouldRevalidate: boolean;\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: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit & Required> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction {\n (): Promise>>;\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 lazy?: LazyRouteFunction;\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\nexport type RouteManifest = Record;\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 */\nexport type 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 you 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 mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: number[] = [],\n manifest: RouteManifest = {}\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 !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\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\nexport interface UIMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\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 explode _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: string = 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 // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:(\\w+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\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, compiledParams] = 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 = compiledParams.reduce>(\n (memo, { paramName, isOptional }, 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 const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = safelyDecodeURIComponent(value || \"\", paramName);\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\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 params: CompiledPathParam[] = [];\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, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n });\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\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, params];\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 * 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 (toPathname == null) {\n from = locationPathname;\n } else if (isPathRelative) {\n let fromSegments = routePathnames[routePathnames.length - 1]\n .replace(/^\\//, \"\")\n .split(\"/\");\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"path\", each leading .. segment means \"go up one URL segment\"\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n fromSegments.pop();\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = \"/\" + fromSegments.join(\"/\");\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"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, undefined, 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 the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\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 * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private 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 warning,\n} from \"./history\";\nimport type {\n ActionFunction,\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n AgnosticRouteObject,\n DataResult,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n ImmutableRouteKey,\n LoaderFunction,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n stripBasename,\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 * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\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 | null, 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 | null,\n opts?: RouterFetchOptions\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 * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): 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 * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_prependBasename: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n hydrationData?: HydrationState;\n window?: Window;\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\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n unstable_flushSync: boolean;\n }\n ): void;\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: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\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 json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\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 text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\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}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\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 json: undefined,\n text: 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 json: undefined,\n text: 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 defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\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 const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_prependBasename: false,\n ...init.future,\n };\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(dataRoutes, init.history.location, basename);\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 // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n !initialMatches.some((m) => m.route.lazy) &&\n // And we have to either have no loaders or have been provided hydrationData\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 // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map> = new Map<\n string,\n Set\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = 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 // - useRevalidator()\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\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\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 let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\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 if (removePageHideEventListener) {\n removePageHideEventListener();\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(\n newState: Partial,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\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 { flushSync }: { flushSync?: boolean } = {}\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 let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\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 if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\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 let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\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,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = 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 | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\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 flushSync = (opts && opts.unstable_flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\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 let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ 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 enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync,\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 fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: 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 pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\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(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\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, flushSync }\n );\n\n if (actionOutput.shortCircuited) {\n return;\n }\n\n pendingActionData = actionOutput.pendingActionData;\n pendingError = actionOutput.pendingActionError;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\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.fetcherSubmission,\n opts && opts.replace,\n flushSync,\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; flushSync?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\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 && !actionMatch.route.lazy) {\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 manifest,\n mapRouteProperties,\n 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 fetcherSubmission?: Submission,\n replace?: boolean,\n flushSync?: 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 =\n overrideNavigation || getLoadingNavigation(location, submission);\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 =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionData,\n pendingError\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 pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingError || null,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\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 = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n let actionData = pendingActionData || state.actionData;\n updateState(\n {\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 flushSync,\n }\n );\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\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 if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\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 if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(state, redirect.result, { 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 let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\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 | null,\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 let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\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 });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\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 flushSync: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action && !match.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\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 originatingLoadId = incrementingLoadId;\n let actionResult = await callLoaderOrAction(\n \"action\",\n fetchRequest,\n match,\n requestMatches,\n manifest,\n mapRouteProperties,\n basename\n );\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by 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 (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(state, actionResult, {\n fetcherSubmission: submission,\n });\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 nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, 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 = getLoadingFetcher(submission, actionResult.data);\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 deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n { [match.route.id]: actionResult.data },\n undefined // No need to send through errors since we short circuit above\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 = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\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 abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\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 if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(state, redirect.result);\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 // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n 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 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 flushSync: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\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\n let originatingLoadId = incrementingLoadId;\n let result: DataResult = await callLoaderOrAction(\n \"loader\",\n fetchRequest,\n match,\n matches,\n manifest,\n mapRouteProperties,\n 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 our 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 (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(state, result);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\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 fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.revalidate) {\n isRevalidationRequired = true;\n }\n\n let redirectLocation = createLocation(state.location, redirect.location, {\n _isRedirect: true,\n });\n invariant(\n redirectLocation,\n \"Expected a location on the redirect navigation\"\n );\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.reloadDocument) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(redirect.location)) {\n const url = init.history.createURL(redirect.location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(redirect.location);\n } else {\n routerWindow.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 } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\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 let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: redirect.location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\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(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename\n )\n ),\n ...fetchersToLoad.map((f) => {\n if (f.matches && f.match && f.controller) {\n return callLoaderOrAction(\n \"loader\",\n createClientSideRequest(init.history, f.path, f.controller.signal),\n f.match,\n f.matches,\n manifest,\n mapRouteProperties,\n basename\n );\n } else {\n let error: ErrorResult = {\n type: ResultType.error,\n error: getInternalRouterError(404, { pathname: f.path }),\n };\n return error;\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 loaderResults.map(() => request.signal),\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\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 updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher(key: string): Fetcher {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\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 = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\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 updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\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 let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ 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 || null;\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 getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n router = {\n get basename() {\n return basename;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\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: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\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;\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;\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) {\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 && !actionMatch.route.lazy) {\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 manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n );\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\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 (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\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(\n (m) => m.route.loader || m.route.lazy\n );\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 manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n )\n ),\n ]);\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\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: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getPathContributingMatches(contextualMatches).map((m) => m.pathnameBase),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\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 normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\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 let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve 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 deletedFetchers: Set,\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionData?: RouteData,\n pendingError?: RouteData\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 // 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.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\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 // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n // Clicked the same link, resubmitted a GET form\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate if fetcher won't be present in the subsequent render\n if (\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.includes(key)) {\n // Always revalidate if the fetcher was cancelled\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\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: isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\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: ShouldRevalidateFunctionArgs\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\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n basename: string,\n opts: {\n isStaticRequest?: boolean;\n isRouteRequest?: boolean;\n requestContext?: unknown;\n } = {}\n): Promise {\n let resultType;\n let result;\n let onReject: (() => void) | undefined;\n\n let runHandler = (handler: ActionFunction | LoaderFunction) => {\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 onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n return Promise.race([\n handler({\n request,\n params: match.params,\n context: opts.requestContext,\n }),\n abortPromise,\n ]);\n };\n\n try {\n let handler = match.route[type];\n\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let values = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n ]);\n if (handlerError) {\n throw handlerError;\n }\n result = values[0];\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n handler = match.route[type];\n if (handler) {\n // Handler still run even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, data: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\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 if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\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 location = normalizeTo(\n new URL(request.url),\n matches.slice(0, matches.indexOf(match) + 1),\n basename,\n true,\n location\n );\n } else if (!opts.isStaticRequest) {\n // Strip off the protocol+origin for same-origin + same-basename absolute\n // redirects. If this is a static request, we can let it go back to the\n // browser 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 let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\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 (opts.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 reloadDocument: result.headers.get(\"X-Remix-Reload-Document\") !== 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 (opts.isRouteRequest) {\n let queryRouteResponse: QueryRouteResponse = {\n type:\n resultType === ResultType.error ? ResultType.error : ResultType.data,\n response: result,\n };\n throw queryRouteResponse;\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 ErrorResponseImpl(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 (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\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 } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\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, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\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, controller } = 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 (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else 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 = getDoneFetcher(result.data);\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 && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\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 =\n routes.length === 1\n ? routes[0]\n : 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\" | \"invalid-body\";\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 } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\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 ErrorResponseImpl(\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(\n results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return { result, idx: i };\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 if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\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\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\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 || obj.type === ResultType.error)\n );\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: (AgnosticDataRouteMatch | null)[],\n results: DataResult[],\n signals: (AbortSignal | null)[],\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 // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\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 let signal = signals[index];\n invariant(\n signal,\n \"Expected an AbortSignal for revalidating fetcher deferred result\"\n );\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\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\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n if (transitions.size > 0) {\n let json: Record = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\n\n//#endregion\n"],"names":["Action","PopStateEventType","invariant","value","message","Error","warning","cond","console","warn","e","getHistoryState","location","index","usr","state","key","idx","createLocation","current","to","_extends","pathname","search","hash","parsePath","Math","random","toString","substr","createPath","_ref","charAt","path","parsedPath","hashIndex","indexOf","searchIndex","getUrlBasedHistory","getLocation","createHref","validateLocation","options","window","document","defaultView","v5Compat","globalHistory","history","action","Pop","listener","getIndex","handlePop","nextIndex","delta","createURL","base","origin","href","URL","replaceState","listen","fn","addEventListener","removeEventListener","encodeLocation","url","push","Push","historyState","pushState","error","DOMException","name","assign","replace","Replace","go","n","ResultType","immutableRouteKeys","Set","convertRoutesToDataRoutes","routes","mapRouteProperties","parentPath","manifest","map","route","treePath","id","join","children","isIndexRoute","indexRoute","pathOrLayoutRoute","undefined","matchRoutes","locationArg","basename","stripBasename","branches","flattenRoutes","sort","a","b","score","length","slice","every","i","compareIndexes","routesMeta","meta","childrenIndex","rankRouteBranches","matches","matchRouteBranch","safelyDecodeURI","convertRouteMatchToUiMatch","match","loaderData","params","data","handle","parentsMeta","flattenRoute","relativePath","caseSensitive","startsWith","joinPaths","concat","computeScore","forEach","_route$path","includes","exploded","explodeOptionalSegments","segments","split","first","rest","isOptional","endsWith","required","restExploded","result","subpath","paramRe","isSplat","s","initialScore","some","filter","reduce","segment","test","branch","matchedParams","matchedPathname","end","remainingPathname","matchPath","Object","pathnameBase","normalizePathname","pattern","matcher","compiledParams","regexpSource","_","paramName","RegExp","compilePath","captureGroups","memo","splatValue","decodeURIComponent","safelyDecodeURIComponent","decodeURI","toLowerCase","startIndex","nextChar","resolvePath","fromPathname","toPathname","pop","resolvePathname","normalizeSearch","normalizeHash","getInvalidPathError","char","field","dest","JSON","stringify","getPathContributingMatches","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","from","isEmptyPath","fromSegments","toSegments","shift","routePathnameIndex","hasExplicitTrailingSlash","hasCurrentTrailingSlash","paths","AbortedDeferredError","DeferredData","constructor","responseInit","reject","this","pendingKeysSet","subscribers","deferredKeys","Array","isArray","abortPromise","Promise","r","controller","AbortController","onAbort","unlistenAbortSignal","signal","entries","acc","_ref2","trackPromise","done","init","add","promise","race","then","onSettle","catch","defineProperty","get","aborted","delete","undefinedError","emit","settledKey","subscriber","subscribe","cancel","abort","v","k","async","resolve","size","unwrappedData","_ref3","unwrapTrackedPromise","pendingKeys","_tracked","isTrackedPromise","_error","_data","defer","redirect","status","headers","Headers","set","Response","ErrorResponseImpl","statusText","internal","isRouteErrorResponse","validMutationMethodsArr","validMutationMethods","validRequestMethodsArr","validRequestMethods","redirectStatusCodes","redirectPreserveMethodStatusCodes","IDLE_NAVIGATION","formMethod","formAction","formEncType","formData","json","text","IDLE_FETCHER","IDLE_BLOCKER","proceed","reset","ABSOLUTE_URL_REGEX","defaultMapRouteProperties","hasErrorBoundary","Boolean","TRANSITIONS_STORAGE_KEY","UNSAFE_DEFERRED_SYMBOL","Symbol","normalizeTo","prependBasename","fromRouteId","relative","contextualMatches","activeRouteMatch","m","hasNakedIndexQuery","normalizeNavigateOptions","normalizeFormMethod","isFetcher","opts","body","isSubmissionNavigation","isValidMethod","getInternalRouterError","method","searchParams","getInvalidBodyError","type","rawFormMethod","toUpperCase","stripHashFromPath","isMutationMethod","FormData","URLSearchParams","String","submission","parse","convertFormDataToSearchParams","convertSearchParamsToFormData","append","getLoaderMatchesUntilBoundary","boundaryId","boundaryMatches","findIndex","getMatchesToLoad","isRevalidationRequired","cancelledDeferredRoutes","cancelledFetcherLoads","deletedFetchers","fetchLoadMatches","fetchRedirectIds","routesToUse","pendingActionData","pendingError","actionResult","values","currentUrl","nextUrl","keys","navigationMatches","lazy","loader","currentLoaderData","currentMatch","isNew","isMissingData","isNewLoader","currentRouteMatch","nextRouteMatch","shouldRevalidateLoader","currentParams","nextParams","defaultShouldRevalidate","isNewRouteInstance","revalidatingFetchers","f","routeId","has","fetcherMatches","fetcher","fetchers","fetcherMatch","getTargetMatch","shouldRevalidate","currentPath","loaderMatch","arg","routeChoice","loadLazyRouteModule","lazyRoute","routeToUpdate","routeUpdates","lazyRouteProperty","isPropertyStaticallyDefined","callLoaderOrAction","request","resultType","onReject","runHandler","handler","context","requestContext","handlerError","all","isResponse","isStaticRequest","protocol","isSameBasename","revalidate","reloadDocument","isRouteRequest","response","contentType","statusCode","isDeferredData","deferred","deferredData","_result$init","_result$init2","createClientSideRequest","Request","processRouteLoaderData","matchesToLoad","results","activeDeferreds","errors","foundError","loaderHeaders","isRedirectResult","isErrorResult","boundaryMatch","findNearestBoundary","isDeferredResult","processLoaderData","fetcherResults","doneFetcher","getDoneFetcher","mergeLoaderData","newLoaderData","mergedLoaderData","hasOwnProperty","reverse","find","getShortCircuitMatches","_temp5","errorMessage","findRedirect","resolveData","resolveDeferredResults","currentMatches","signals","isRevalidatingLoader","resolveDeferredData","unwrap","getAll","pathMatches","getSubmissionFromNavigation","navigation","getLoadingNavigation","getSubmittingNavigation","getLoadingFetcher","querySelector","getAttribute","initialEntries","initialIndex","entry","createMemoryLocation","clampIndex","min","max","getCurrentLocation","nextLocation","splice","routerWindow","isBrowser","createElement","isServer","detectErrorBoundary","inFlightDataRoutes","dataRoutes","future","v7_fetcherPersist","v7_normalizeFormMethod","v7_prependBasename","unlistenHistory","savedScrollPositions","getScrollRestorationKey","getScrollPosition","initialScrollRestored","hydrationData","initialMatches","initialErrors","router","pendingNavigationController","initialized","historyAction","restoreScrollPosition","preventScrollReset","revalidation","actionData","Map","blockers","pendingAction","HistoryAction","pendingPreventScrollReset","pendingViewTransitionEnabled","appliedViewTransitions","removePageHideEventListener","isUninterruptedRevalidation","fetchControllers","incrementingLoadId","pendingNavigationLoadId","fetchReloadIds","activeFetchers","blockerFunctions","ignoreNextHistoryUpdate","updateState","newState","completedFetchers","deletedFetchersKeys","unstable_viewTransitionOpts","viewTransitionOpts","unstable_flushSync","flushSync","deleteFetcher","completeNavigation","_temp","_location$state","_location$state2","isActionReload","_isRedirect","priorPaths","currentLocation","toPaths","getSavedScrollPosition","startNavigation","startUninterruptedRevalidation","getScrollKey","saveScrollPosition","enableViewTransition","loadingNavigation","overrideNavigation","notFoundMatches","cancelActiveDeferreds","isHashChangeOnly","actionOutput","interruptActiveLoads","actionMatch","shortCircuited","startRedirectNavigation","pendingActionError","handleAction","fetcherSubmission","activeSubmission","updatedFetchers","markFetchRedirectsDone","rf","revalidatingFetcher","abortFetcher","abortPendingFetchRevalidations","loaderResults","callLoadersAndMaybeResolveData","fetcherKey","didAbortFetchLoads","abortStaleFetchLoads","shouldUpdateFetchers","handleLoaders","_temp2","redirectLocation","isDocumentReload","redirectHistoryAction","fetchersToLoad","updateFetcherState","setFetcherError","getFetcher","markFetchersDone","doneKeys","landedId","yeetedKeys","deleteBlocker","updateBlocker","newBlocker","blocker","shouldBlockNavigation","blockerKey","blockerFunction","predicate","cancelledRouteIds","dfd","y","initialize","_window","transitions","sessionPositions","sessionStorage","getItem","restoreAppliedTransitions","_saveAppliedTransitions","setItem","persistAppliedTransitions","enableScrollRestoration","positions","getPosition","getKey","navigate","normalizedPath","userReplace","unstable_viewTransition","fetch","requestMatches","existingFetcher","getSubmittingFetcher","abortController","fetchRequest","originatingLoadId","revalidationRequest","loadId","loadFetcher","staleKey","handleFetcherAction","handleFetcherLoader","count","dispose","clear","getBlocker","_internalFetchControllers","_internalActiveDeferreds","_internalSetRoutes","newRoutes","queryImpl","routeMatch","Location","actionHeaders","loadRouteData","loaderRequest","submit","obj","isRedirectResponse","executedLoaders","fromEntries","query","_temp3","methodNotAllowedMatches","queryRoute","_temp4","_result$activeDeferre","originalPath","prefix","p","array","keyMatch","optional","param","_deepestRenderedBoundaryId","redirectDocument"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"router.umd.min.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// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\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: State;\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`. This may be either a URL or the pieces\n * of a 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\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\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\nexport function 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 // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\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, warning } 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 reloadDocument?: boolean;\n replace?: 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\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on ``,\n * useSubmit(), ``, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\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?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable | null;\n\n/**\n * Route loader function signature\n */\nexport interface LoaderFunction {\n (args: LoaderFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (args: ActionFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\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 text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionResult?: any;\n defaultShouldRevalidate: boolean;\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: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit & Required> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction {\n (): Promise>>;\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 lazy?: LazyRouteFunction;\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\nexport type RouteManifest = Record;\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 */\nexport type 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 you 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 mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: number[] = [],\n manifest: RouteManifest = {}\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 !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\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\nexport interface UIMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\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 explode _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: string = 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 // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:(\\w+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\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, compiledParams] = 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 = compiledParams.reduce>(\n (memo, { paramName, isOptional }, 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 const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = safelyDecodeURIComponent(value || \"\", paramName);\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\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 params: CompiledPathParam[] = [];\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, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n });\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\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, params];\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 * 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 (toPathname == null) {\n from = locationPathname;\n } else if (isPathRelative) {\n let fromSegments = routePathnames[routePathnames.length - 1]\n .replace(/^\\//, \"\")\n .split(\"/\");\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"path\", each leading .. segment means \"go up one URL segment\"\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n fromSegments.pop();\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = \"/\" + fromSegments.join(\"/\");\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"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, undefined, 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 the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\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 & { replace?: boolean })\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 if (typeof init === \"object\" && init.replace)\n headers.set(\"X-Remix-Redirect-Replace\", \"true\");\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private 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 warning,\n} from \"./history\";\nimport type {\n ActionFunction,\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n AgnosticRouteObject,\n DataResult,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n ImmutableRouteKey,\n LoaderFunction,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n stripBasename,\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 * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\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 | null, 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 | null,\n opts?: RouterFetchOptions\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 * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): 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 * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_prependBasename: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n hydrationData?: HydrationState;\n window?: Window;\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\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n unstable_flushSync: boolean;\n }\n ): void;\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: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\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 json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\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 text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\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}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\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 json: undefined,\n text: 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 json: undefined,\n text: 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 defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\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 const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_prependBasename: false,\n ...init.future,\n };\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(dataRoutes, init.history.location, basename);\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 // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n !initialMatches.some((m) => m.route.lazy) &&\n // And we have to either have no loaders or have been provided hydrationData\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 // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map> = new Map<\n string,\n Set\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = 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 // - useRevalidator()\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\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\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 let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\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 if (removePageHideEventListener) {\n removePageHideEventListener();\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(\n newState: Partial,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\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 { flushSync }: { flushSync?: boolean } = {}\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 let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\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 if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\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 let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\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,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = 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 | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\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 flushSync = (opts && opts.unstable_flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\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 let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ 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 enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync,\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 fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: 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 pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\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(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\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, flushSync }\n );\n\n if (actionOutput.shortCircuited) {\n return;\n }\n\n pendingActionData = actionOutput.pendingActionData;\n pendingError = actionOutput.pendingActionError;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\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.fetcherSubmission,\n opts && opts.replace,\n flushSync,\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; flushSync?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\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 && !actionMatch.route.lazy) {\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 manifest,\n mapRouteProperties,\n 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 fetcherSubmission?: Submission,\n replace?: boolean,\n flushSync?: 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 =\n overrideNavigation || getLoadingNavigation(location, submission);\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 =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionData,\n pendingError\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 pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingError || null,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\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 = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n let actionData = pendingActionData || state.actionData;\n updateState(\n {\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 flushSync,\n }\n );\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\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 if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\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 if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(state, redirect.result, {\n replace: replace || redirect.result.replace,\n });\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 let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\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 | null,\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 let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\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 });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\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 flushSync: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action && !match.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\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 originatingLoadId = incrementingLoadId;\n let actionResult = await callLoaderOrAction(\n \"action\",\n fetchRequest,\n match,\n requestMatches,\n manifest,\n mapRouteProperties,\n basename\n );\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by 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 (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(state, actionResult, {\n fetcherSubmission: submission,\n });\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 nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, 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 = getLoadingFetcher(submission, actionResult.data);\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 deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n { [match.route.id]: actionResult.data },\n undefined // No need to send through errors since we short circuit above\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 = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\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 abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\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 if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(state, redirect.result, {\n replace: redirect.result.replace,\n });\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 // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n 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 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 flushSync: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\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\n let originatingLoadId = incrementingLoadId;\n let result: DataResult = await callLoaderOrAction(\n \"loader\",\n fetchRequest,\n match,\n matches,\n manifest,\n mapRouteProperties,\n 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 our 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 (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(state, result);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\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 fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.revalidate) {\n isRevalidationRequired = true;\n }\n\n let redirectLocation = createLocation(state.location, redirect.location, {\n _isRedirect: true,\n });\n invariant(\n redirectLocation,\n \"Expected a location on the redirect navigation\"\n );\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.reloadDocument) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(redirect.location)) {\n const url = init.history.createURL(redirect.location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(redirect.location);\n } else {\n routerWindow.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 } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\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 let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: redirect.location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\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(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename\n )\n ),\n ...fetchersToLoad.map((f) => {\n if (f.matches && f.match && f.controller) {\n return callLoaderOrAction(\n \"loader\",\n createClientSideRequest(init.history, f.path, f.controller.signal),\n f.match,\n f.matches,\n manifest,\n mapRouteProperties,\n basename\n );\n } else {\n let error: ErrorResult = {\n type: ResultType.error,\n error: getInternalRouterError(404, { pathname: f.path }),\n };\n return error;\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 loaderResults.map(() => request.signal),\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\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 updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher(key: string): Fetcher {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\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 = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\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 updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\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 let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ 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 || null;\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 getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n router = {\n get basename() {\n return basename;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\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: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\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;\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;\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) {\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 && !actionMatch.route.lazy) {\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 manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n );\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\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 (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\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(\n (m) => m.route.loader || m.route.lazy\n );\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 manifest,\n mapRouteProperties,\n basename,\n { isStaticRequest: true, isRouteRequest, requestContext }\n )\n ),\n ]);\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(\n `${method}() call aborted: ${request.method} ${request.url}`\n );\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: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getPathContributingMatches(contextualMatches).map((m) => m.pathnameBase),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\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 normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\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 let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve 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 deletedFetchers: Set,\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionData?: RouteData,\n pendingError?: RouteData\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 // 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.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\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 // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n // Clicked the same link, resubmitted a GET form\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate if fetcher won't be present in the subsequent render\n if (\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.includes(key)) {\n // Always revalidate if the fetcher was cancelled\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\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: isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\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: ShouldRevalidateFunctionArgs\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\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n basename: string,\n opts: {\n isStaticRequest?: boolean;\n isRouteRequest?: boolean;\n requestContext?: unknown;\n } = {}\n): Promise {\n let resultType;\n let result;\n let onReject: (() => void) | undefined;\n\n let runHandler = (handler: ActionFunction | LoaderFunction) => {\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 onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n return Promise.race([\n handler({\n request,\n params: match.params,\n context: opts.requestContext,\n }),\n abortPromise,\n ]);\n };\n\n try {\n let handler = match.route[type];\n\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let values = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n ]);\n if (handlerError) {\n throw handlerError;\n }\n result = values[0];\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n handler = match.route[type];\n if (handler) {\n // Handler still run even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, data: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\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 if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\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 location = normalizeTo(\n new URL(request.url),\n matches.slice(0, matches.indexOf(match) + 1),\n basename,\n true,\n location\n );\n } else if (!opts.isStaticRequest) {\n // Strip off the protocol+origin for same-origin + same-basename absolute\n // redirects. If this is a static request, we can let it go back to the\n // browser 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 let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\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 (opts.isStaticRequest) {\n result.headers.set(\"Location\", location);\n throw result;\n }\n\n return {\n type: ResultType.redirect,\n status,\n location,\n replace: result.headers.get(\"X-Remix-Redirect-Replace\") !== null,\n revalidate: result.headers.get(\"X-Remix-Revalidate\") !== null,\n reloadDocument: result.headers.get(\"X-Remix-Reload-Document\") !== 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 (opts.isRouteRequest) {\n let queryRouteResponse: QueryRouteResponse = {\n type:\n resultType === ResultType.error ? ResultType.error : ResultType.data,\n response: result,\n };\n throw queryRouteResponse;\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 ErrorResponseImpl(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 (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\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 } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\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, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\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, controller } = 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 (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else 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 = getDoneFetcher(result.data);\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 && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\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 =\n routes.length === 1\n ? routes[0]\n : 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\" | \"invalid-body\";\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 } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\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 ErrorResponseImpl(\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(\n results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return { result, idx: i };\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 if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\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\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\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 || obj.type === ResultType.error)\n );\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: (AgnosticDataRouteMatch | null)[],\n results: DataResult[],\n signals: (AbortSignal | null)[],\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 // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\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 let signal = signals[index];\n invariant(\n signal,\n \"Expected an AbortSignal for revalidating fetcher deferred result\"\n );\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\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\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n if (transitions.size > 0) {\n let json: Record = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\n\n//#endregion\n"],"names":["Action","PopStateEventType","invariant","value","message","Error","warning","cond","console","warn","e","getHistoryState","location","index","usr","state","key","idx","createLocation","current","to","_extends","pathname","search","hash","parsePath","Math","random","toString","substr","createPath","_ref","charAt","path","parsedPath","hashIndex","indexOf","searchIndex","getUrlBasedHistory","getLocation","createHref","validateLocation","options","window","document","defaultView","v5Compat","globalHistory","history","action","Pop","listener","getIndex","handlePop","nextIndex","delta","createURL","base","origin","href","URL","replaceState","listen","fn","addEventListener","removeEventListener","encodeLocation","url","push","Push","historyState","pushState","error","DOMException","name","assign","replace","Replace","go","n","ResultType","immutableRouteKeys","Set","convertRoutesToDataRoutes","routes","mapRouteProperties","parentPath","manifest","map","route","treePath","id","join","children","isIndexRoute","indexRoute","pathOrLayoutRoute","undefined","matchRoutes","locationArg","basename","stripBasename","branches","flattenRoutes","sort","a","b","score","length","slice","every","i","compareIndexes","routesMeta","meta","childrenIndex","rankRouteBranches","matches","matchRouteBranch","safelyDecodeURI","convertRouteMatchToUiMatch","match","loaderData","params","data","handle","parentsMeta","flattenRoute","relativePath","caseSensitive","startsWith","joinPaths","concat","computeScore","forEach","_route$path","includes","exploded","explodeOptionalSegments","segments","split","first","rest","isOptional","endsWith","required","restExploded","result","subpath","paramRe","isSplat","s","initialScore","some","filter","reduce","segment","test","branch","matchedParams","matchedPathname","end","remainingPathname","matchPath","Object","pathnameBase","normalizePathname","pattern","matcher","compiledParams","regexpSource","_","paramName","RegExp","compilePath","captureGroups","memo","splatValue","decodeURIComponent","safelyDecodeURIComponent","decodeURI","toLowerCase","startIndex","nextChar","resolvePath","fromPathname","toPathname","pop","resolvePathname","normalizeSearch","normalizeHash","getInvalidPathError","char","field","dest","JSON","stringify","getPathContributingMatches","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","from","isEmptyPath","fromSegments","toSegments","shift","routePathnameIndex","hasExplicitTrailingSlash","hasCurrentTrailingSlash","paths","AbortedDeferredError","DeferredData","constructor","responseInit","reject","this","pendingKeysSet","subscribers","deferredKeys","Array","isArray","abortPromise","Promise","r","controller","AbortController","onAbort","unlistenAbortSignal","signal","entries","acc","_ref2","trackPromise","done","init","add","promise","race","then","onSettle","catch","defineProperty","get","aborted","delete","undefinedError","emit","settledKey","subscriber","subscribe","cancel","abort","v","k","async","resolve","size","unwrappedData","_ref3","unwrapTrackedPromise","pendingKeys","_tracked","isTrackedPromise","_error","_data","defer","redirect","status","headers","Headers","set","Response","ErrorResponseImpl","statusText","internal","isRouteErrorResponse","validMutationMethodsArr","validMutationMethods","validRequestMethodsArr","validRequestMethods","redirectStatusCodes","redirectPreserveMethodStatusCodes","IDLE_NAVIGATION","formMethod","formAction","formEncType","formData","json","text","IDLE_FETCHER","IDLE_BLOCKER","proceed","reset","ABSOLUTE_URL_REGEX","defaultMapRouteProperties","hasErrorBoundary","Boolean","TRANSITIONS_STORAGE_KEY","UNSAFE_DEFERRED_SYMBOL","Symbol","normalizeTo","prependBasename","fromRouteId","relative","contextualMatches","activeRouteMatch","m","hasNakedIndexQuery","normalizeNavigateOptions","normalizeFormMethod","isFetcher","opts","body","isSubmissionNavigation","isValidMethod","getInternalRouterError","method","searchParams","getInvalidBodyError","type","rawFormMethod","toUpperCase","stripHashFromPath","isMutationMethod","FormData","URLSearchParams","String","submission","parse","convertFormDataToSearchParams","convertSearchParamsToFormData","append","getLoaderMatchesUntilBoundary","boundaryId","boundaryMatches","findIndex","getMatchesToLoad","isRevalidationRequired","cancelledDeferredRoutes","cancelledFetcherLoads","deletedFetchers","fetchLoadMatches","fetchRedirectIds","routesToUse","pendingActionData","pendingError","actionResult","values","currentUrl","nextUrl","keys","navigationMatches","lazy","loader","currentLoaderData","currentMatch","isNew","isMissingData","isNewLoader","currentRouteMatch","nextRouteMatch","shouldRevalidateLoader","currentParams","nextParams","defaultShouldRevalidate","isNewRouteInstance","revalidatingFetchers","f","routeId","has","fetcherMatches","fetcher","fetchers","fetcherMatch","getTargetMatch","shouldRevalidate","currentPath","loaderMatch","arg","routeChoice","loadLazyRouteModule","lazyRoute","routeToUpdate","routeUpdates","lazyRouteProperty","isPropertyStaticallyDefined","callLoaderOrAction","request","resultType","onReject","runHandler","handler","context","requestContext","handlerError","all","isResponse","isStaticRequest","protocol","isSameBasename","revalidate","reloadDocument","isRouteRequest","response","contentType","statusCode","isDeferredData","deferred","deferredData","_result$init","_result$init2","createClientSideRequest","Request","processRouteLoaderData","matchesToLoad","results","activeDeferreds","errors","foundError","loaderHeaders","isRedirectResult","isErrorResult","boundaryMatch","findNearestBoundary","isDeferredResult","processLoaderData","fetcherResults","doneFetcher","getDoneFetcher","mergeLoaderData","newLoaderData","mergedLoaderData","hasOwnProperty","reverse","find","getShortCircuitMatches","_temp5","errorMessage","findRedirect","resolveData","resolveDeferredResults","currentMatches","signals","isRevalidatingLoader","resolveDeferredData","unwrap","getAll","pathMatches","getSubmissionFromNavigation","navigation","getLoadingNavigation","getSubmittingNavigation","getLoadingFetcher","querySelector","getAttribute","initialEntries","initialIndex","entry","createMemoryLocation","clampIndex","min","max","getCurrentLocation","nextLocation","splice","routerWindow","isBrowser","createElement","isServer","detectErrorBoundary","inFlightDataRoutes","dataRoutes","future","v7_fetcherPersist","v7_normalizeFormMethod","v7_prependBasename","unlistenHistory","savedScrollPositions","getScrollRestorationKey","getScrollPosition","initialScrollRestored","hydrationData","initialMatches","initialErrors","router","pendingNavigationController","initialized","historyAction","restoreScrollPosition","preventScrollReset","revalidation","actionData","Map","blockers","pendingAction","HistoryAction","pendingPreventScrollReset","pendingViewTransitionEnabled","appliedViewTransitions","removePageHideEventListener","isUninterruptedRevalidation","fetchControllers","incrementingLoadId","pendingNavigationLoadId","fetchReloadIds","activeFetchers","blockerFunctions","ignoreNextHistoryUpdate","updateState","newState","completedFetchers","deletedFetchersKeys","unstable_viewTransitionOpts","viewTransitionOpts","unstable_flushSync","flushSync","deleteFetcher","completeNavigation","_temp","_location$state","_location$state2","isActionReload","_isRedirect","priorPaths","currentLocation","toPaths","getSavedScrollPosition","startNavigation","startUninterruptedRevalidation","getScrollKey","saveScrollPosition","enableViewTransition","loadingNavigation","overrideNavigation","notFoundMatches","cancelActiveDeferreds","isHashChangeOnly","actionOutput","interruptActiveLoads","actionMatch","shortCircuited","startRedirectNavigation","pendingActionError","handleAction","fetcherSubmission","activeSubmission","updatedFetchers","markFetchRedirectsDone","rf","revalidatingFetcher","abortFetcher","abortPendingFetchRevalidations","loaderResults","callLoadersAndMaybeResolveData","fetcherKey","didAbortFetchLoads","abortStaleFetchLoads","shouldUpdateFetchers","handleLoaders","_temp2","redirectLocation","isDocumentReload","redirectHistoryAction","fetchersToLoad","updateFetcherState","setFetcherError","getFetcher","markFetchersDone","doneKeys","landedId","yeetedKeys","deleteBlocker","updateBlocker","newBlocker","blocker","shouldBlockNavigation","blockerKey","blockerFunction","predicate","cancelledRouteIds","dfd","y","initialize","_window","transitions","sessionPositions","sessionStorage","getItem","restoreAppliedTransitions","_saveAppliedTransitions","setItem","persistAppliedTransitions","enableScrollRestoration","positions","getPosition","getKey","navigate","normalizedPath","userReplace","unstable_viewTransition","fetch","requestMatches","existingFetcher","getSubmittingFetcher","abortController","fetchRequest","originatingLoadId","revalidationRequest","loadId","loadFetcher","staleKey","handleFetcherAction","handleFetcherLoader","count","dispose","clear","getBlocker","_internalFetchControllers","_internalActiveDeferreds","_internalSetRoutes","newRoutes","queryImpl","routeMatch","Location","actionHeaders","loadRouteData","loaderRequest","submit","obj","isRedirectResponse","executedLoaders","fromEntries","query","_temp3","methodNotAllowedMatches","queryRoute","_temp4","_result$activeDeferre","originalPath","prefix","p","array","keyMatch","optional","param","_deepestRenderedBoundaryId","redirectDocument"],"mappings":"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"} \ No newline at end of file diff --git a/dist/utils.d.ts b/dist/utils.d.ts index f393b6ca4f4092d1fe83348d8b2f1598bc63ef88..ef3eacc16b96c5d955c3beb202434bf491c0deed 100644 --- a/dist/utils.d.ts +++ b/dist/utils.d.ts @@ -38,6 +38,7 @@ export interface RedirectResult { location: string; revalidate: boolean; reloadDocument?: boolean; + replace?: boolean; } /** * Unsuccessful result from a loader or action @@ -458,7 +459,9 @@ export declare class DeferredData { } export type DeferFunction = (data: Record, init?: number | ResponseInit) => DeferredData; export declare const defer: DeferFunction; -export type RedirectFunction = (url: string, init?: number | ResponseInit) => Response; +export type RedirectFunction = (url: string, init?: number | (ResponseInit & { + replace?: boolean; +})) => Response; /** * A redirect response. Sets the status code and the `Location` header. * Defaults to "302 Found".