{"version":3,"file":"5696-bea7b52dbe68bba99f53.js","mappings":"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","sources":["webpack://@whistleout/webui/../node_modules/.pnpm/@remix-run+router@1.14.2/node_modules/@remix-run/router/dist/router.js","webpack://@whistleout/webui/../node_modules/.pnpm/classnames@2.3.2/node_modules/classnames/index.js","webpack://@whistleout/webui/../node_modules/.pnpm/core-js@3.31.1/node_modules/core-js/internals/array-set-length.js","webpack://@whistleout/webui/../node_modules/.pnpm/core-js@3.31.1/node_modules/core-js/internals/call-with-safe-iteration-closing.js","webpack://@whistleout/webui/../node_modules/.pnpm/core-js@3.31.1/node_modules/core-js/internals/create-iter-result-object.js","webpack://@whistleout/webui/../node_modules/.pnpm/core-js@3.31.1/node_modules/core-js/internals/define-built-ins.js","webpack://@whistleout/webui/../node_modules/.pnpm/core-js@3.31.1/node_modules/core-js/internals/does-not-exceed-safe-integer.js","webpack://@whistleout/webui/../node_modules/.pnpm/core-js@3.31.1/node_modules/core-js/internals/is-array.js","webpack://@whistleout/webui/../node_modules/.pnpm/core-js@3.31.1/node_modules/core-js/internals/iterator-create-proxy.js","webpack://@whistleout/webui/../node_modules/.pnpm/core-js@3.31.1/node_modules/core-js/internals/iterator-map.js","webpack://@whistleout/webui/../node_modules/.pnpm/core-js@3.31.1/node_modules/core-js/modules/es.array.push.js","webpack://@whistleout/webui/../node_modules/.pnpm/core-js@3.31.1/node_modules/core-js/modules/esnext.iterator.filter.js","webpack://@whistleout/webui/../node_modules/.pnpm/core-js@3.31.1/node_modules/core-js/modules/esnext.iterator.map.js","webpack://@whistleout/webui/../node_modules/.pnpm/react-router-dom@6.21.2_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/react-router-dom/dist/index.js","webpack://@whistleout/webui/../node_modules/.pnpm/react-router@6.21.2_react@17.0.2/node_modules/react-router/dist/index.js","webpack://@whistleout/webui/../node_modules/.pnpm/react@17.0.2/node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://@whistleout/webui/../node_modules/.pnpm/react@17.0.2/node_modules/react/jsx-runtime.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/createSuper.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/inherits.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://@whistleout/webui/../node_modules/.pnpm/@babel+runtime@7.26.10/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js"],"sourcesContent":["/**\n * @remix-run/router v1.14.2\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Actions represent the type of change to a location value.\n */\nvar Action;\n(function (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 Action[\"Pop\"] = \"POP\";\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 Action[\"Push\"] = \"PUSH\";\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Action[\"Replace\"] = \"REPLACE\";\n})(Action || (Action = {}));\nconst PopStateEventType = \"popstate\";\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 */\nfunction createMemoryHistory(options) {\n if (options === void 0) {\n options = {};\n }\n let {\n initialEntries = [\"/\"],\n initialIndex,\n v5Compat = false\n } = options;\n let entries; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) => createMemoryLocation(entry, typeof entry === \"string\" ? null : entry.state, index === 0 ? \"default\" : undefined));\n let index = clampIndex(initialIndex == null ? entries.length - 1 : initialIndex);\n let action = Action.Pop;\n let listener = null;\n function clampIndex(n) {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation() {\n return entries[index];\n }\n function createMemoryLocation(to, state, key) {\n if (state === void 0) {\n state = null;\n }\n let location = createLocation(entries ? getCurrentLocation().pathname : \"/\", to, state, key);\n warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in memory history: \" + JSON.stringify(to));\n return location;\n }\n function createHref(to) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n let history = {\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) {\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({\n action,\n location: nextLocation,\n delta: 1\n });\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({\n action,\n location: nextLocation,\n delta: 0\n });\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({\n action,\n location: nextLocation,\n delta\n });\n }\n },\n listen(fn) {\n listener = fn;\n return () => {\n listener = null;\n };\n }\n };\n return history;\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 */\nfunction createBrowserHistory(options) {\n if (options === void 0) {\n options = {};\n }\n function createBrowserLocation(window, globalHistory) {\n let {\n pathname,\n search,\n hash\n } = window.location;\n return createLocation(\"\", {\n pathname,\n search,\n hash\n },\n // state defaults to `null` because `window.history.state` does\n globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n }\n function createBrowserHref(window, to) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n return getUrlBasedHistory(createBrowserLocation, createBrowserHref, null, options);\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 */\nfunction createHashHistory(options) {\n if (options === void 0) {\n options = {};\n }\n function createHashLocation(window, globalHistory) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\"\n } = parsePath(window.location.hash.substr(1));\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 return createLocation(\"\", {\n pathname,\n search,\n hash\n },\n // state defaults to `null` because `window.history.state` does\n globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n }\n function createHashHref(window, to) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\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 return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n function validateHashLocation(location, to) {\n warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in hash history.push(\" + JSON.stringify(to) + \")\");\n }\n return getUrlBasedHistory(createHashLocation, createHashHref, validateHashLocation, options);\n}\nfunction invariant(value, message) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\nfunction warning(cond, message) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\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}\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location, index) {\n return {\n usr: location.state,\n key: location.key,\n idx: index\n };\n}\n/**\n * Creates a Location object with a unique key from the given Path\n */\nfunction createLocation(current, to, state, key) {\n if (state === void 0) {\n state = null;\n }\n let location = _extends({\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.key || key || createKey()\n });\n return location;\n}\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nfunction createPath(_ref) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\"\n } = _ref;\n if (search && search !== \"?\") pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\") pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nfunction parsePath(path) {\n let parsedPath = {};\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 let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n if (path) {\n parsedPath.pathname = path;\n }\n }\n return parsedPath;\n}\nfunction getUrlBasedHistory(getLocation, createHref, validateLocation, options) {\n if (options === void 0) {\n options = {};\n }\n let {\n window = document.defaultView,\n v5Compat = false\n } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener = null;\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(_extends({}, globalHistory.state, {\n idx: index\n }), \"\");\n }\n function getIndex() {\n let state = globalHistory.state || {\n idx: null\n };\n return state.idx;\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({\n action,\n location: history.location,\n delta\n });\n }\n }\n function push(to, state) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\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 if (v5Compat && listener) {\n listener({\n action,\n location: history.location,\n delta: 1\n });\n }\n }\n function replace(to, state) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n if (v5Compat && listener) {\n listener({\n action,\n location: history.location,\n delta: 0\n });\n }\n }\n function createURL(to) {\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 = window.location.origin !== \"null\" ? window.location.origin : window.location.href;\n let href = typeof to === \"string\" ? to : createPath(to);\n invariant(base, \"No window.location.(origin|href) available to create URL for href: \" + href);\n return new URL(href, base);\n }\n let history = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\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 return history;\n}\n//#endregion\n\nvar ResultType;\n(function (ResultType) {\n ResultType[\"data\"] = \"data\";\n ResultType[\"deferred\"] = \"deferred\";\n ResultType[\"redirect\"] = \"redirect\";\n ResultType[\"error\"] = \"error\";\n})(ResultType || (ResultType = {}));\nconst immutableRouteKeys = new Set([\"lazy\", \"caseSensitive\", \"path\", \"id\", \"index\", \"children\"]);\nfunction isIndexRoute(route) {\n return route.index === true;\n}\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nfunction convertRoutesToDataRoutes(routes, mapRouteProperties, parentPath, manifest) {\n if (parentPath === void 0) {\n parentPath = [];\n }\n if (manifest === void 0) {\n manifest = {};\n }\n return routes.map((route, index) => {\n let treePath = [...parentPath, index];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(route.index !== true || !route.children, \"Cannot specify children on an index route\");\n invariant(!manifest[id], \"Found a route id collision on id \\\"\" + id + \"\\\". Route \" + \"id's must be globally unique within Data Router usages\");\n if (isIndexRoute(route)) {\n let indexRoute = _extends({}, route, mapRouteProperties(route), {\n id\n });\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute = _extends({}, route, mapRouteProperties(route), {\n id,\n children: undefined\n });\n manifest[id] = pathOrLayoutRoute;\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(route.children, mapRouteProperties, treePath, manifest);\n }\n return pathOrLayoutRoute;\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 */\nfunction matchRoutes(routes, locationArg, basename) {\n if (basename === void 0) {\n basename = \"/\";\n }\n let location = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n let pathname = stripBasename(location.pathname || \"/\", basename);\n if (pathname == null) {\n return null;\n }\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n matches = matchRouteBranch(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 return matches;\n}\nfunction convertRouteMatchToUiMatch(match, loaderData) {\n let {\n route,\n pathname,\n params\n } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle\n };\n}\nfunction flattenRoutes(routes, branches, parentsMeta, parentPath) {\n if (branches === void 0) {\n branches = [];\n }\n if (parentsMeta === void 0) {\n parentsMeta = [];\n }\n if (parentPath === void 0) {\n parentPath = \"\";\n }\n let flattenRoute = (route, index, relativePath) => {\n let meta = {\n relativePath: relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route\n };\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(meta.relativePath.startsWith(parentPath), \"Absolute route path \\\"\" + meta.relativePath + \"\\\" nested under path \" + (\"\\\"\" + parentPath + \"\\\" is not valid. An absolute child route path \") + \"must start with the combined path of all its parent routes.\");\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\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, \"Index routes must not have child routes. Please remove \" + (\"all child routes from route path \\\"\" + path + \"\\\".\"));\n flattenRoutes(route.children, branches, routesMeta, path);\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 branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta\n });\n };\n routes.forEach((route, index) => {\n var _route$path;\n // coarse-grain check for optional params\n if (route.path === \"\" || !((_route$path = route.path) != null && _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 return branches;\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) {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n let [first, ...rest] = segments;\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 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 let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n let result = [];\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(...restExploded.map(subpath => subpath === \"\" ? required : [required, subpath].join(\"/\")));\n // Then, if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n // for absolute paths, ensure `/` instead of empty segment\n return result.map(exploded => path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded);\n}\nfunction rankRouteBranches(branches) {\n branches.sort((a, b) => a.score !== b.score ? b.score - a.score // Higher score first\n : compareIndexes(a.routesMeta.map(meta => meta.childrenIndex), b.routesMeta.map(meta => meta.childrenIndex)));\n}\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = s => s === \"*\";\nfunction computeScore(path, index) {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n if (index) {\n initialScore += indexRouteValue;\n }\n return segments.filter(s => !isSplat(s)).reduce((score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === \"\" ? emptySegmentValue : staticSegmentValue), initialScore);\n}\nfunction compareIndexes(a, b) {\n let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\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}\nfunction matchRouteBranch(branch, pathname) {\n let {\n routesMeta\n } = branch;\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname = matchedPathname === \"/\" ? pathname : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath({\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end\n }, remainingPathname);\n if (!match) return null;\n Object.assign(matchedParams, match.params);\n let route = meta.route;\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(joinPaths([matchedPathname, match.pathnameBase])),\n route\n });\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n return matches;\n}\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nfunction generatePath(originalPath, params) {\n if (params === void 0) {\n params = {};\n }\n let path = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(false, \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n path = path.replace(/\\*$/, \"/*\");\n }\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n const stringify = p => p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n const segments = path.split(/\\/+/).map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\";\n // Apply the splat\n return stringify(params[star]);\n }\n const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key];\n invariant(optional === \"?\" || param != null, \"Missing \\\":\" + key + \"\\\" param\");\n return stringify(param);\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 return prefix + segments.join(\"/\");\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 */\nfunction matchPath(pattern, pathname) {\n if (typeof pattern === \"string\") {\n pattern = {\n path: pattern,\n caseSensitive: false,\n end: true\n };\n }\n let [matcher, compiledParams] = compilePath(pattern.path, pattern.caseSensitive, pattern.end);\n let match = pathname.match(matcher);\n if (!match) return null;\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params = compiledParams.reduce((memo, _ref, index) => {\n let {\n paramName,\n isOptional\n } = _ref;\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.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\\/+$/, \"$1\");\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 return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern\n };\n}\nfunction compilePath(path, caseSensitive, end) {\n if (caseSensitive === void 0) {\n caseSensitive = false;\n }\n if (end === void 0) {\n end = true;\n }\n warning(path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"), \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n let params = [];\n let regexpSource = \"^\" + path.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, (_, paramName, isOptional) => {\n params.push({\n paramName,\n isOptional: isOptional != null\n });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n });\n if (path.endsWith(\"*\")) {\n params.push({\n paramName: \"*\"\n });\n regexpSource += path === \"*\" || path === \"/*\" ? \"(.*)$\" // 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 let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n return [matcher, params];\n}\nfunction safelyDecodeURI(value) {\n try {\n return decodeURI(value);\n } catch (error) {\n warning(false, \"The URL path \\\"\" + value + \"\\\" could not be decoded because it is is a \" + \"malformed URL segment. This is probably due to a bad percent \" + (\"encoding (\" + error + \").\"));\n return value;\n }\n}\nfunction safelyDecodeURIComponent(value, paramName) {\n try {\n return decodeURIComponent(value);\n } catch (error) {\n warning(false, \"The value for the URL param \\\"\" + paramName + \"\\\" will not be decoded because\" + (\" the string \\\"\" + value + \"\\\" is a malformed URL segment. This is probably\") + (\" due to a bad percent encoding (\" + error + \").\"));\n return value;\n }\n}\n/**\n * @private\n */\nfunction stripBasename(pathname, basename) {\n if (basename === \"/\") return pathname;\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\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(\"/\") ? basename.length - 1 : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n return pathname.slice(startIndex) || \"/\";\n}\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nfunction resolvePath(to, fromPathname) {\n if (fromPathname === void 0) {\n fromPathname = \"/\";\n }\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\"\n } = typeof to === \"string\" ? parsePath(to) : to;\n let pathname = toPathname ? toPathname.startsWith(\"/\") ? toPathname : resolvePathname(toPathname, fromPathname) : fromPathname;\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash)\n };\n}\nfunction resolvePathname(relativePath, fromPathname) {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\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 return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\nfunction getInvalidPathError(char, field, dest, path) {\n return \"Cannot include a '\" + char + \"' character in a manually specified \" + (\"`to.\" + field + \"` field [\" + JSON.stringify(path) + \"]. Please separate it out to the \") + (\"`to.\" + dest + \"` field. Alternatively you may provide the full path as \") + \"a string in and the router will parse it for you.\";\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 */\nfunction getPathContributingMatches(matches) {\n return matches.filter((match, index) => index === 0 || match.route.path && match.route.path.length > 0);\n}\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nfunction getResolveToMatches(matches, v7_relativeSplatPath) {\n let pathMatches = getPathContributingMatches(matches);\n // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n // match so we include splat values for \".\" links. See:\n // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n if (v7_relativeSplatPath) {\n return pathMatches.map((match, idx) => idx === matches.length - 1 ? match.pathname : match.pathnameBase);\n }\n return pathMatches.map(match => match.pathnameBase);\n}\n/**\n * @private\n */\nfunction resolveTo(toArg, routePathnames, locationPathname, isPathRelative) {\n if (isPathRelative === void 0) {\n isPathRelative = false;\n }\n let to;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = _extends({}, toArg);\n invariant(!to.pathname || !to.pathname.includes(\"?\"), getInvalidPathError(\"?\", \"pathname\", \"search\", to));\n invariant(!to.pathname || !to.pathname.includes(\"#\"), getInvalidPathError(\"#\", \"pathname\", \"hash\", to));\n invariant(!to.search || !to.search.includes(\"#\"), getInvalidPathError(\"#\", \"search\", \"hash\", to));\n }\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n let from;\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 {\n let routePathnameIndex = routePathnames.length - 1;\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 if (!isPathRelative && toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n to.pathname = toSegments.join(\"/\");\n }\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n let path = resolvePath(to, from);\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash = toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash = (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (!path.pathname.endsWith(\"/\") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) {\n path.pathname += \"/\";\n }\n return path;\n}\n/**\n * @private\n */\nfunction getToPathname(to) {\n // Empty strings should be treated the same as / paths\n return to === \"\" || to.pathname === \"\" ? \"/\" : typeof to === \"string\" ? parsePath(to).pathname : to.pathname;\n}\n/**\n * @private\n */\nconst joinPaths = paths => paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n/**\n * @private\n */\nconst normalizePathname = pathname => pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n/**\n * @private\n */\nconst normalizeSearch = search => !search || search === \"?\" ? \"\" : search.startsWith(\"?\") ? search : \"?\" + search;\n/**\n * @private\n */\nconst normalizeHash = hash => !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nconst json = function json(data, init) {\n if (init === void 0) {\n init = {};\n }\n let responseInit = typeof init === \"number\" ? {\n status: init\n } : init;\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 return new Response(JSON.stringify(data), _extends({}, responseInit, {\n headers\n }));\n};\nclass AbortedDeferredError extends Error {}\nclass DeferredData {\n constructor(data, responseInit) {\n this.pendingKeysSet = new Set();\n this.subscribers = new Set();\n this.deferredKeys = [];\n invariant(data && typeof data === \"object\" && !Array.isArray(data), \"defer() only accepts plain objects\");\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject;\n this.abortPromise = new Promise((_, r) => reject = r);\n this.controller = new AbortController();\n let onAbort = () => reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () => this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n this.data = Object.entries(data).reduce((acc, _ref2) => {\n let [key, value] = _ref2;\n return Object.assign(acc, {\n [key]: this.trackPromise(key, value)\n });\n }, {});\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n this.init = responseInit;\n }\n trackPromise(key, value) {\n if (!(value instanceof Promise)) {\n return value;\n }\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise = Promise.race([value, this.abortPromise]).then(data => this.onSettle(promise, key, undefined, data), error => this.onSettle(promise, key, error));\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n Object.defineProperty(promise, \"_tracked\", {\n get: () => true\n });\n return promise;\n }\n onSettle(promise, key, error, data) {\n if (this.controller.signal.aborted && error instanceof AbortedDeferredError) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", {\n get: () => error\n });\n return Promise.reject(error);\n }\n this.pendingKeysSet.delete(key);\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\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(\"Deferred data for key \\\"\" + key + \"\\\" resolved/rejected with `undefined`, \" + \"you must resolve/reject with a value or `null`.\");\n Object.defineProperty(promise, \"_error\", {\n get: () => undefinedError\n });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", {\n get: () => error\n });\n this.emit(false, key);\n return Promise.reject(error);\n }\n Object.defineProperty(promise, \"_data\", {\n get: () => data\n });\n this.emit(false, key);\n return data;\n }\n emit(aborted, settledKey) {\n this.subscribers.forEach(subscriber => subscriber(aborted, settledKey));\n }\n subscribe(fn) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n async resolveData(signal) {\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 get done() {\n return this.pendingKeysSet.size === 0;\n }\n get unwrappedData() {\n invariant(this.data !== null && this.done, \"Can only unwrap data on initialized and settled deferreds\");\n return Object.entries(this.data).reduce((acc, _ref3) => {\n let [key, value] = _ref3;\n return Object.assign(acc, {\n [key]: unwrapTrackedPromise(value)\n });\n }, {});\n }\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\nfunction isTrackedPromise(value) {\n return value instanceof Promise && value._tracked === true;\n}\nfunction unwrapTrackedPromise(value) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\nconst defer = function defer(data, init) {\n if (init === void 0) {\n init = {};\n }\n let responseInit = typeof init === \"number\" ? {\n status: init\n } : init;\n return new DeferredData(data, responseInit);\n};\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirect = function redirect(url, init) {\n if (init === void 0) {\n init = 302;\n }\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = {\n status: responseInit\n };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n return new Response(null, _extends({}, responseInit, {\n headers\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 */\nconst redirectDocument = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\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 */\nclass ErrorResponseImpl {\n constructor(status, statusText, data, internal) {\n if (internal === void 0) {\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 * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nfunction isRouteErrorResponse(error) {\n return error != null && typeof error.status === \"number\" && typeof error.statusText === \"string\" && typeof error.internal === \"boolean\" && \"data\" in error;\n}\n\nconst validMutationMethodsArr = [\"post\", \"put\", \"patch\", \"delete\"];\nconst validMutationMethods = new Set(validMutationMethodsArr);\nconst validRequestMethodsArr = [\"get\", ...validMutationMethodsArr];\nconst validRequestMethods = new Set(validRequestMethodsArr);\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\nconst IDLE_NAVIGATION = {\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};\nconst IDLE_FETCHER = {\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};\nconst IDLE_BLOCKER = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined\n};\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nconst defaultMapRouteProperties = route => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary)\n});\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Create a router and listen to history POP navigations\n */\nfunction createRouter(init) {\n const routerWindow = init.window ? init.window : typeof window !== \"undefined\" ? window : undefined;\n const isBrowser = typeof routerWindow !== \"undefined\" && typeof routerWindow.document !== \"undefined\" && typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n invariant(init.routes.length > 0, \"You must provide a non-empty routes array to createRouter\");\n let mapRouteProperties;\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 // Routes keyed by ID\n let manifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(init.routes, mapRouteProperties, undefined, manifest);\n let inFlightDataRoutes;\n let basename = init.basename || \"/\";\n // Config driven behavior flags\n let future = _extends({\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_partialHydration: false,\n v7_prependBasename: false,\n v7_relativeSplatPath: false\n }, init.future);\n // Cleanup function for history\n let unlistenHistory = 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 = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition = 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 let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialErrors = null;\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 {\n matches,\n route\n } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = {\n [route.id]: error\n };\n }\n let initialized;\n let hasLazyRoutes = initialMatches.some(m => m.route.lazy);\n let hasLoaders = initialMatches.some(m => m.route.loader);\n if (hasLazyRoutes) {\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 initialized = false;\n } else if (!hasLoaders) {\n // If we've got no loaders to run, then we're good to go\n initialized = true;\n } else if (future.v7_partialHydration) {\n // If partial hydration is enabled, we're initialized so long as we were\n // provided with hydrationData for every route with a loader, and no loaders\n // were marked for explicit hydration\n let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n let errors = init.hydrationData ? init.hydrationData.errors : null;\n initialized = initialMatches.every(m => m.route.loader && m.route.loader.hydrate !== true && (loaderData && loaderData[m.route.id] !== undefined || errors && errors[m.route.id] !== undefined));\n } else {\n // Without partial hydration - we're initialized if we were provided any\n // hydrationData - which is expected to be complete\n initialized = init.hydrationData != null;\n }\n let router;\n let state = {\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 // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction = Action.Pop;\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n // AbortController for the active navigation\n let pendingNavigationController;\n // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions = new Map();\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener = null;\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\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 // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes = [];\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads = [];\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map();\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\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 // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map();\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set();\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\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 // 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 // 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 // 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 // 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(_ref => {\n let {\n action: historyAction,\n location,\n delta\n } = _ref;\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 warning(blockerFunctions.size === 0 || delta != null, \"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.\");\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction\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 // 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({\n blockers\n });\n }\n });\n return;\n }\n return startNavigation(historyAction, location);\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 = () => persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () => routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\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(Action.Pop, state.location, {\n initialHydration: true\n });\n }\n return router;\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 // Subscribe to state updates for the router\n function subscribe(fn) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n // Update our state and notify the calling context of the change\n function updateState(newState, opts) {\n if (opts === void 0) {\n opts = {};\n }\n state = _extends({}, state, newState);\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers = [];\n let deletedFetchersKeys = [];\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 // 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 => subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true\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 // 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(location, newState, _temp) {\n var _location$state, _location$state2;\n let {\n flushSync\n } = _temp === void 0 ? {} : _temp;\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 = state.actionData != null && state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && state.navigation.state === \"loading\" && ((_location$state = location.state) == null ? void 0 : _location$state._isRedirect) !== true;\n let actionData;\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 // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData ? mergeLoaderData(state.loaderData, newState.loaderData, newState.matches || [], newState.errors) : state.loaderData;\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 // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset = pendingPreventScrollReset === true || state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && ((_location$state2 = location.state) == null ? void 0 : _location$state2._isRedirect) !== true;\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n if (isUninterruptedRevalidation) ; else if (pendingAction === Action.Pop) ; else if (pendingAction === Action.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === Action.Replace) {\n init.history.replace(location, location.state);\n }\n let viewTransitionOpts;\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === Action.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 updateState(_extends({}, newState, {\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(location, newState.matches || state.matches),\n preventScrollReset,\n blockers\n }), {\n viewTransitionOpts,\n flushSync: flushSync === true\n });\n // Reset stateful navigation vars\n pendingAction = Action.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n cancelledFetcherLoads = [];\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(to, opts) {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, to, future.v7_relativeSplatPath, opts == null ? void 0 : opts.fromRouteId, opts == null ? void 0 : opts.relative);\n let {\n path,\n submission,\n error\n } = normalizeNavigateOptions(future.v7_normalizeFormMethod, false, normalizedPath, opts);\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\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 = _extends({}, nextLocation, init.history.encodeLocation(nextLocation));\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n let historyAction = Action.Push;\n if (userReplace === true) {\n historyAction = Action.Replace;\n } else if (userReplace === false) ; else if (submission != null && isMutationMethod(submission.formMethod) && submission.formAction === state.location.pathname + state.location.search) {\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 = Action.Replace;\n }\n let preventScrollReset = opts && \"preventScrollReset\" in opts ? opts.preventScrollReset === true : undefined;\n let flushSync = (opts && opts.unstable_flushSync) === true;\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction\n });\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey, IDLE_BLOCKER);\n updateState({\n blockers\n });\n }\n });\n return;\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 // 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({\n 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 // 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 // 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(pendingAction || state.historyAction, state.navigation.location, {\n overrideNavigation: state.navigation\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(historyAction, location, opts) {\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 = (opts && opts.startUninterruptedRevalidation) === true;\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 pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\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 // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let error = getInternalRouterError(404, {\n pathname: location.pathname\n });\n let {\n matches: notFoundMatches,\n route\n } = getShortCircuitMatches(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(location, {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error\n }\n }, {\n flushSync\n });\n return;\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 (state.initialized && !isRevalidationRequired && isHashChangeOnly(state.location, location) && !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))) {\n completeNavigation(location, {\n matches\n }, {\n flushSync\n });\n return;\n }\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(init.history, location, pendingNavigationController.signal, opts && opts.submission);\n let pendingActionData;\n let pendingError;\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 (opts && opts.submission && isMutationMethod(opts.submission.formMethod)) {\n // Call action if we received an action submission\n let actionOutput = await handleAction(request, location, opts.submission, matches, {\n replace: opts.replace,\n flushSync\n });\n if (actionOutput.shortCircuited) {\n return;\n }\n pendingActionData = actionOutput.pendingActionData;\n pendingError = actionOutput.pendingActionError;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n // Create a GET request for the loaders\n request = new Request(request.url, {\n signal: request.signal\n });\n }\n // Call loaders\n let {\n shortCircuited,\n loaderData,\n errors\n } = await handleLoaders(request, location, matches, loadingNavigation, opts && opts.submission, opts && opts.fetcherSubmission, opts && opts.replace, opts && opts.initialHydration === true, flushSync, pendingActionData, pendingError);\n if (shortCircuited) {\n return;\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 completeNavigation(location, _extends({\n matches\n }, pendingActionData ? {\n actionData: pendingActionData\n } : {}, {\n loaderData,\n errors\n }));\n }\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(request, location, submission, matches, opts) {\n if (opts === void 0) {\n opts = {};\n }\n interruptActiveLoads();\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({\n navigation\n }, {\n flushSync: opts.flushSync === true\n });\n // Call our action and get the result\n let result;\n let actionMatch = getTargetMatch(matches, location);\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(\"action\", request, actionMatch, matches, manifest, mapRouteProperties, basename, future.v7_relativeSplatPath);\n if (request.signal.aborted) {\n return {\n shortCircuited: true\n };\n }\n }\n if (isRedirectResult(result)) {\n let replace;\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 = result.location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(state, result, {\n submission,\n replace\n });\n return {\n 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 // 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 = Action.Push;\n }\n return {\n // Send back an empty object we can use to clear out any prior actionData\n pendingActionData: {},\n pendingActionError: {\n [boundaryMatch.route.id]: result.error\n }\n };\n }\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, {\n type: \"defer-action\"\n });\n }\n return {\n pendingActionData: {\n [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(request, location, matches, overrideNavigation, submission, fetcherSubmission, replace, initialHydration, flushSync, pendingActionData, pendingError) {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation = overrideNavigation || getLoadingNavigation(location, submission);\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission = submission || fetcherSubmission || getSubmissionFromNavigation(loadingNavigation);\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, activeSubmission, location, future.v7_partialHydration && initialHydration === true, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionData, pendingError);\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(routeId => !(matches && matches.some(m => m.route.id === routeId)) || matchesToLoad && matchesToLoad.some(m => m.route.id === routeId));\n pendingNavigationLoadId = ++incrementingLoadId;\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(location, _extends({\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingError || null\n }, pendingActionData ? {\n actionData: pendingActionData\n } : {}, updatedFetchers ? {\n fetchers: new Map(state.fetchers)\n } : {}), {\n flushSync\n });\n return {\n 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 we have partialHydration enabled, then don't update the state for the\n // initial data load since iot's not a \"navigation\"\n if (!isUninterruptedRevalidation && (!future.v7_partialHydration || !initialHydration)) {\n revalidatingFetchers.forEach(rf => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(undefined, fetcher ? fetcher.data : undefined);\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n let actionData = pendingActionData || state.actionData;\n updateState(_extends({\n navigation: loadingNavigation\n }, actionData ? Object.keys(actionData).length === 0 ? {\n actionData: null\n } : {\n actionData\n } : {}, revalidatingFetchers.length > 0 ? {\n fetchers: new Map(state.fetchers)\n } : {}), {\n flushSync\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 // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(f => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n }\n let {\n results,\n loaderResults,\n fetcherResults\n } = await callLoadersAndMaybeResolveData(state.matches, matches, matchesToLoad, revalidatingFetchers, request);\n if (request.signal.aborted) {\n return {\n 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(\"abort\", abortPendingFetchRevalidations);\n }\n revalidatingFetchers.forEach(rf => fetchControllers.delete(rf.key));\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 = revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(state, redirect.result, {\n replace\n });\n return {\n shortCircuited: true\n };\n }\n // Process and commit output from loaders\n let {\n loaderData,\n errors\n } = processLoaderData(state, matches, matchesToLoad, loaderResults, pendingError, revalidatingFetchers, fetcherResults, activeDeferreds);\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 let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers = updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n return _extends({\n loaderData,\n errors\n }, shouldUpdateFetchers ? {\n fetchers: new Map(state.fetchers)\n } : {});\n }\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(key, routeId, href, opts) {\n if (isServer) {\n 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 }\n if (fetchControllers.has(key)) abortFetcher(key);\n let flushSync = (opts && opts.unstable_flushSync) === true;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, href, future.v7_relativeSplatPath, routeId, opts == null ? void 0 : opts.relative);\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n if (!matches) {\n setFetcherError(key, routeId, getInternalRouterError(404, {\n pathname: normalizedPath\n }), {\n flushSync\n });\n return;\n }\n let {\n path,\n submission,\n error\n } = normalizeNavigateOptions(future.v7_normalizeFormMethod, true, normalizedPath, opts);\n if (error) {\n setFetcherError(key, routeId, error, {\n flushSync\n });\n return;\n }\n let match = getTargetMatch(matches, path);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(key, routeId, path, match, matches, flushSync, submission);\n return;\n }\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, {\n routeId,\n path\n });\n handleFetcherLoader(key, routeId, path, match, matches, flushSync, submission);\n }\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(key, routeId, path, match, requestMatches, flushSync, submission) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\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, {\n flushSync\n });\n return;\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 // Call the action for the fetcher\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(init.history, path, abortController.signal, submission);\n fetchControllers.set(key, abortController);\n let originatingLoadId = incrementingLoadId;\n let actionResult = await callLoaderOrAction(\"action\", fetchRequest, match, requestMatches, manifest, mapRouteProperties, basename, future.v7_relativeSplatPath);\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 // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n // or redirects processed for unmounted fetchers so we just revert them to\n // idle\n if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n // Let SuccessResult's fall through for revalidation\n } else {\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 // 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, {\n 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(init.history, nextLocation, abortController.signal);\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches = state.navigation.state !== \"idle\" ? matchRoutes(routesToUse, state.navigation.location, basename) : state.matches;\n invariant(matches, \"Didn't find any matches after fetcher action\");\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, submission, nextLocation, false, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, {\n [match.route.id]: actionResult.data\n }, undefined // No need to send through errors since we short circuit above\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.filter(rf => rf.key !== key).forEach(rf => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(undefined, existingFetcher ? existingFetcher.data : undefined);\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 updateState({\n fetchers: new Map(state.fetchers)\n });\n let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(rf => abortFetcher(rf.key));\n abortController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n let {\n results,\n loaderResults,\n fetcherResults\n } = await callLoadersAndMaybeResolveData(state.matches, matches, matchesToLoad, revalidatingFetchers, revalidationRequest);\n if (abortController.signal.aborted) {\n return;\n }\n abortController.signal.removeEventListener(\"abort\", abortPendingFetchRevalidations);\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach(r => fetchControllers.delete(r.key));\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 = revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(state, redirect.result);\n }\n // Process and commit output from loaders\n let {\n loaderData,\n errors\n } = processLoaderData(state, state.matches, matchesToLoad, loaderResults, undefined, revalidatingFetchers, fetcherResults, activeDeferreds);\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 abortStaleFetchLoads(loadId);\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 (state.navigation.state === \"loading\" && loadId > pendingNavigationLoadId) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\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(state.loaderData, loaderData, matches, errors),\n fetchers: new Map(state.fetchers)\n });\n isRevalidationRequired = false;\n }\n }\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(key, routeId, path, match, matches, flushSync, submission) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getLoadingFetcher(submission, existingFetcher ? existingFetcher.data : undefined), {\n flushSync\n });\n // Call the loader for this fetcher route match\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(init.history, path, abortController.signal);\n fetchControllers.set(key, abortController);\n let originatingLoadId = incrementingLoadId;\n let result = await callLoaderOrAction(\"loader\", fetchRequest, match, matches, manifest, mapRouteProperties, basename, future.v7_relativeSplatPath);\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 = (await resolveDeferredData(result, fetchRequest.signal, true)) || result;\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 if (fetchRequest.signal.aborted) {\n return;\n }\n // We don't want errors bubbling up or redirects followed for unmounted\n // fetchers, so short circuit here if it was removed from the UI\n if (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\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 // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\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(state, redirect, _temp2) {\n let {\n submission,\n fetcherSubmission,\n replace\n } = _temp2 === void 0 ? {} : _temp2;\n if (redirect.revalidate) {\n isRevalidationRequired = true;\n }\n let redirectLocation = createLocation(state.location, redirect.location, {\n _isRedirect: true\n });\n invariant(redirectLocation, \"Expected a location on the redirect navigation\");\n if (isBrowser) {\n let isDocumentReload = false;\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 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 // 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 let redirectHistoryAction = replace === true ? Action.Replace : Action.Push;\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let {\n formMethod,\n formAction,\n formEncType\n } = state.navigation;\n if (!submission && !fetcherSubmission && formMethod && formAction && formEncType) {\n submission = getSubmissionFromNavigation(state.navigation);\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 (redirectPreserveMethodStatusCodes.has(redirect.status) && activeSubmission && isMutationMethod(activeSubmission.formMethod)) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: _extends({}, 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(redirectLocation, submission);\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 async function callLoadersAndMaybeResolveData(currentMatches, matches, matchesToLoad, fetchersToLoad, request) {\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([...matchesToLoad.map(match => callLoaderOrAction(\"loader\", request, match, matches, manifest, mapRouteProperties, basename, future.v7_relativeSplatPath)), ...fetchersToLoad.map(f => {\n if (f.matches && f.match && f.controller) {\n return callLoaderOrAction(\"loader\", createClientSideRequest(init.history, f.path, f.controller.signal), f.match, f.matches, manifest, mapRouteProperties, basename, future.v7_relativeSplatPath);\n } else {\n let error = {\n type: ResultType.error,\n error: getInternalRouterError(404, {\n pathname: f.path\n })\n };\n return error;\n }\n })]);\n let loaderResults = results.slice(0, matchesToLoad.length);\n let fetcherResults = results.slice(matchesToLoad.length);\n await Promise.all([resolveDeferredResults(currentMatches, matchesToLoad, loaderResults, loaderResults.map(() => request.signal), false, state.loaderData), resolveDeferredResults(currentMatches, fetchersToLoad.map(f => f.match), fetcherResults, fetchersToLoad.map(f => f.controller ? f.controller.signal : null), true)]);\n return {\n results,\n loaderResults,\n fetcherResults\n };\n }\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\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 function updateFetcherState(key, fetcher, opts) {\n if (opts === void 0) {\n opts = {};\n }\n state.fetchers.set(key, fetcher);\n updateState({\n fetchers: new Map(state.fetchers)\n }, {\n flushSync: (opts && opts.flushSync) === true\n });\n }\n function setFetcherError(key, routeId, error, opts) {\n if (opts === void 0) {\n opts = {};\n }\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState({\n errors: {\n [boundaryMatch.route.id]: error\n },\n fetchers: new Map(state.fetchers)\n }, {\n flushSync: (opts && opts.flushSync) === true\n });\n }\n function getFetcher(key) {\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 function deleteFetcher(key) {\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 (fetchControllers.has(key) && !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))) {\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 function deleteFetcherAndUpdateState(key) {\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({\n fetchers: new Map(state.fetchers)\n });\n }\n function abortFetcher(key) {\n let controller = fetchControllers.get(key);\n invariant(controller, \"Expected fetch controller: \" + key);\n controller.abort();\n fetchControllers.delete(key);\n }\n function markFetchersDone(keys) {\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 function markFetchRedirectsDone() {\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 function abortStaleFetchLoads(landedId) {\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 function getBlocker(key, fn) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n return blocker;\n }\n function deleteBlocker(key) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key, newBlocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(blocker.state === \"unblocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"proceeding\" || blocker.state === \"blocked\" && newBlocker.state === \"unblocked\" || blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\", \"Invalid blocker state transition: \" + blocker.state + \" -> \" + newBlocker.state);\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({\n blockers\n });\n }\n function shouldBlockNavigation(_ref2) {\n let {\n currentLocation,\n nextLocation,\n historyAction\n } = _ref2;\n if (blockerFunctions.size === 0) {\n return;\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 let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\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 // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({\n currentLocation,\n nextLocation,\n historyAction\n })) {\n return blockerKey;\n }\n }\n function cancelActiveDeferreds(predicate) {\n let cancelledRouteIds = [];\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 // Opt in to capturing and reporting scroll positions during navigations,\n // used by the component\n function enableScrollRestoration(positions, getPosition, getKey) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || null;\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({\n restoreScrollPosition: y\n });\n }\n }\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n function getScrollKey(location, matches) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(location, matches.map(m => convertRouteMatchToUiMatch(m, state.loaderData)));\n return key || location.key;\n }\n return location.key;\n }\n function saveScrollPosition(location, matches) {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n function getSavedScrollPosition(location, matches) {\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 function _internalSetRoutes(newRoutes) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(newRoutes, mapRouteProperties, undefined, manifest);\n }\n router = {\n get basename() {\n return basename;\n },\n get future() {\n return future;\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 => init.history.createHref(to),\n encodeLocation: 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 return router;\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\nconst UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\nfunction createStaticHandler(routes, opts) {\n invariant(routes.length > 0, \"You must provide a non-empty routes array to createStaticHandler\");\n let manifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties;\n if (opts != null && opts.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts != null && 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 // Config driven behavior flags\n let future = _extends({\n v7_relativeSplatPath: false\n }, opts ? opts.future : null);\n let dataRoutes = convertRoutesToDataRoutes(routes, mapRouteProperties, undefined, manifest);\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(request, _temp3) {\n let {\n requestContext\n } = _temp3 === void 0 ? {} : _temp3;\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 // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, {\n method\n });\n let {\n matches: methodNotAllowedMatches,\n 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, {\n pathname: location.pathname\n });\n let {\n matches: notFoundMatches,\n 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 let result = await queryImpl(request, location, matches, requestContext);\n if (isResponse(result)) {\n return result;\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 _extends({\n location,\n basename\n }, result);\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(request, _temp4) {\n let {\n routeId,\n requestContext\n } = _temp4 === void 0 ? {} : _temp4;\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 // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, {\n method\n });\n } else if (!matches) {\n throw getInternalRouterError(404, {\n pathname: location.pathname\n });\n }\n let match = routeId ? matches.find(m => m.route.id === routeId) : getTargetMatch(matches, location);\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, {\n pathname: location.pathname\n });\n }\n let result = await queryImpl(request, location, matches, requestContext, match);\n if (isResponse(result)) {\n return result;\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 // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n if (result.loaderData) {\n var _result$activeDeferre;\n let data = Object.values(result.loaderData)[0];\n if ((_result$activeDeferre = result.activeDeferreds) != null && _result$activeDeferre[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n return undefined;\n }\n async function queryImpl(request, location, matches, requestContext, routeMatch) {\n invariant(request.signal, \"query()/queryRoute() requests must contain an AbortController signal\");\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(request, matches, routeMatch || getTargetMatch(matches, location), requestContext, routeMatch != null);\n return result;\n }\n let result = await loadRouteData(request, matches, requestContext, routeMatch);\n return isResponse(result) ? result : _extends({}, 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 async function submit(request, matches, actionMatch, requestContext, isRouteRequest) {\n let result;\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(\"action\", request, actionMatch, matches, manifest, mapRouteProperties, basename, future.v7_relativeSplatPath, {\n isStaticRequest: true,\n isRouteRequest,\n requestContext\n });\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(method + \"() call aborted: \" + request.method + \" \" + request.url);\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 if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, {\n type: \"defer-action\"\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error\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 return {\n matches: [actionMatch],\n loaderData: {},\n actionData: {\n [actionMatch.route.id]: result.data\n },\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 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(request, matches, requestContext, undefined, {\n [boundaryMatch.route.id]: result.error\n });\n // action status codes take precedence over loader status codes\n return _extends({}, context, {\n statusCode: isRouteErrorResponse(result.error) ? result.error.status : 500,\n actionData: null,\n actionHeaders: _extends({}, result.headers ? {\n [actionMatch.route.id]: result.headers\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 return _extends({}, context, result.statusCode ? {\n statusCode: result.statusCode\n } : {}, {\n actionData: {\n [actionMatch.route.id]: result.data\n },\n actionHeaders: _extends({}, result.headers ? {\n [actionMatch.route.id]: result.headers\n } : {})\n });\n }\n async function loadRouteData(request, matches, requestContext, routeMatch, pendingActionError) {\n let isRouteRequest = routeMatch != null;\n // Short circuit if we have no loaders to run (queryRoute())\n if (isRouteRequest && !(routeMatch != null && routeMatch.route.loader) && !(routeMatch != null && routeMatch.route.lazy)) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch == null ? void 0 : routeMatch.route.id\n });\n }\n let requestMatches = routeMatch ? [routeMatch] : getLoaderMatchesUntilBoundary(matches, Object.keys(pendingActionError || {})[0]);\n let matchesToLoad = requestMatches.filter(m => m.route.loader || m.route.lazy);\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((acc, m) => Object.assign(acc, {\n [m.route.id]: null\n }), {}),\n errors: pendingActionError || null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null\n };\n }\n let results = await Promise.all([...matchesToLoad.map(match => callLoaderOrAction(\"loader\", request, match, matches, manifest, mapRouteProperties, basename, future.v7_relativeSplatPath, {\n isStaticRequest: true,\n isRouteRequest,\n requestContext\n }))]);\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(method + \"() call aborted: \" + request.method + \" \" + request.url);\n }\n // Process and commit output from loaders\n let activeDeferreds = new Map();\n let context = processRouteLoaderData(matches, matchesToLoad, results, pendingActionError, activeDeferreds);\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set(matchesToLoad.map(match => match.route.id));\n matches.forEach(match => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n return _extends({}, context, {\n matches,\n activeDeferreds: activeDeferreds.size > 0 ? Object.fromEntries(activeDeferreds.entries()) : null\n });\n }\n return {\n dataRoutes,\n query,\n queryRoute\n };\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\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 */\nfunction getStaticContextFromError(routes, context, error) {\n let newContext = _extends({}, context, {\n statusCode: 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error\n }\n });\n return newContext;\n}\nfunction isSubmissionNavigation(opts) {\n return opts != null && (\"formData\" in opts && opts.formData != null || \"body\" in opts && opts.body !== undefined);\n}\nfunction normalizeTo(location, matches, basename, prependBasename, to, v7_relativeSplatPath, fromRouteId, relative) {\n let contextualMatches;\n let activeRouteMatch;\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 // Resolve the relative path\n let path = resolveTo(to ? to : \".\", getResolveToMatches(contextualMatches, v7_relativeSplatPath), stripBasename(location.pathname, basename) || location.pathname, relative === \"path\");\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 // Add an ?index param for matched index routes if we don't already have one\n if ((to == null || to === \"\" || to === \".\") && activeRouteMatch && activeRouteMatch.route.index && !hasNakedIndexQuery(path.search)) {\n path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\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 = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n return createPath(path);\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(normalizeFormMethod, isFetcher, path, opts) {\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return {\n path\n };\n }\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, {\n method: opts.formMethod\n })\n };\n }\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, {\n type: \"invalid-body\"\n })\n });\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod ? rawFormMethod.toUpperCase() : rawFormMethod.toLowerCase();\n let formAction = stripHashFromPath(path);\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 let text = typeof opts.body === \"string\" ? opts.body : opts.body instanceof FormData || 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((acc, _ref3) => {\n let [name, value] = _ref3;\n return \"\" + acc + name + \"=\" + value + \"\\n\";\n }, \"\") : String(opts.body);\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 try {\n let json = typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\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 invariant(typeof FormData === \"function\", \"FormData is not available in this environment\");\n let searchParams;\n let formData;\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 let submission = {\n formMethod,\n formAction,\n formEncType: opts && opts.formEncType || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined\n };\n if (isMutationMethod(submission.formMethod)) {\n return {\n path,\n 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 return {\n path: createPath(parsedPath),\n 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(matches, boundaryId) {\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}\nfunction getMatchesToLoad(history, state, matches, submission, location, isInitialLoad, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionData, pendingError) {\n let actionResult = pendingError ? Object.values(pendingError)[0] : pendingActionData ? Object.values(pendingActionData)[0] : undefined;\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\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 let navigationMatches = boundaryMatches.filter((match, index) => {\n let {\n route\n } = match;\n if (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 (route.loader == null) {\n return false;\n }\n if (isInitialLoad) {\n if (route.loader.hydrate) {\n return true;\n }\n return state.loaderData[route.id] === undefined && (\n // Don't re-run if the loader ran and threw an error\n !state.errors || state.errors[route.id] === undefined);\n }\n // Always call the loader on new route instances and pending defer cancellations\n if (isNewLoader(state.loaderData, state.matches[index], match) || cancelledDeferredRoutes.some(id => id === match.route.id)) {\n return true;\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 return shouldRevalidateLoader(match, _extends({\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 === nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search || isNewRouteInstance(currentRouteMatch, nextRouteMatch)\n }));\n });\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate:\n // - on initial load (shouldn't be any fetchers then anyway)\n // - if fetcher won't be present in the subsequent render\n // - no longer matches the URL (v7_fetcherPersist=false)\n // - was unmounted but persisted due to v7_fetcherPersist=true\n if (isInitialLoad || !matches.some(m => m.route.id === f.routeId) || deletedFetchers.has(key)) {\n return;\n }\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\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 // 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 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 (fetcher && fetcher.state !== \"idle\" && fetcher.data === undefined) {\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, _extends({\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 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 return [navigationMatches, revalidatingFetchers];\n}\nfunction isNewLoader(currentLoaderData, currentMatch, match) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\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 // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\nfunction isNewRouteInstance(currentMatch, match) {\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 && currentPath.endsWith(\"*\") && currentMatch.params[\"*\"] !== match.params[\"*\"]\n );\n}\nfunction shouldRevalidateLoader(loaderMatch, arg) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n return arg.defaultShouldRevalidate;\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(route, mapRouteProperties, manifest) {\n if (!route.lazy) {\n return;\n }\n let lazyRoute = await route.lazy();\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 let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\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 = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue = routeToUpdate[lazyRouteProperty];\n let isPropertyStaticallyDefined = staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n warning(!isPropertyStaticallyDefined, \"Route \\\"\" + routeToUpdate.id + \"\\\" has a static property \\\"\" + lazyRouteProperty + \"\\\" \" + \"defined but its lazy function is also returning a value for this property. \" + (\"The lazy route property \\\"\" + lazyRouteProperty + \"\\\" will be ignored.\"));\n if (!isPropertyStaticallyDefined && !immutableRouteKeys.has(lazyRouteProperty)) {\n routeUpdates[lazyRouteProperty] = lazyRoute[lazyRouteProperty];\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 // 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, _extends({}, mapRouteProperties(routeToUpdate), {\n lazy: undefined\n }));\n}\nasync function callLoaderOrAction(type, request, match, matches, manifest, mapRouteProperties, basename, v7_relativeSplatPath, opts) {\n if (opts === void 0) {\n opts = {};\n }\n let resultType;\n let result;\n let onReject;\n let runHandler = handler => {\n // Setup a promise we can race against so that abort signals short circuit\n let reject;\n let abortPromise = new Promise((_, r) => reject = r);\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n return Promise.race([handler({\n request,\n params: match.params,\n context: opts.requestContext\n }), abortPromise]);\n };\n try {\n let handler = match.route[type];\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 }), loadLazyRouteModule(match.route, mapRouteProperties, manifest)]);\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 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 {\n type: ResultType.data,\n data: undefined\n };\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 invariant(result !== undefined, \"You defined \" + (type === \"action\" ? \"an action\" : \"a loader\") + \" for route \" + (\"\\\"\" + match.route.id + \"\\\" but didn't return anything from your `\" + type + \"` \") + \"function. Please return a value or `null`.\");\n } catch (e) {\n resultType = ResultType.error;\n result = e;\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n if (isResponse(result)) {\n let status = result.status;\n // Process redirects\n if (redirectStatusCodes.has(status)) {\n let location = result.headers.get(\"Location\");\n invariant(location, \"Redirects returned/thrown from loaders/actions must have a Location header\");\n // Support relative routing in internal redirects\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n location = normalizeTo(new URL(request.url), matches.slice(0, matches.indexOf(match) + 1), basename, true, location, v7_relativeSplatPath);\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(\"//\") ? new URL(currentUrl.protocol + location) : 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 // 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 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 // 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 = {\n type: resultType === ResultType.error ? ResultType.error : ResultType.data,\n response: result\n };\n throw queryRouteResponse;\n }\n let data;\n try {\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 if (result.body == null) {\n data = null;\n } else {\n data = await result.json();\n }\n } else {\n data = await result.text();\n }\n } catch (e) {\n return {\n type: ResultType.error,\n error: e\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 return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers\n };\n }\n if (resultType === ResultType.error) {\n return {\n type: resultType,\n error: result\n };\n }\n if (isDeferredData(result)) {\n var _result$init, _result$init2;\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: (_result$init = result.init) == null ? void 0 : _result$init.status,\n headers: ((_result$init2 = result.init) == null ? void 0 : _result$init2.headers) && new Headers(result.init.headers)\n };\n }\n return {\n type: ResultType.data,\n 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(history, location, signal, submission) {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init = {\n signal\n };\n if (submission && isMutationMethod(submission.formMethod)) {\n let {\n formMethod,\n formEncType\n } = 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 if (formEncType === \"application/json\") {\n init.headers = new Headers({\n \"Content-Type\": formEncType\n });\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 (formEncType === \"application/x-www-form-urlencoded\" && submission.formData) {\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 return new Request(url, init);\n}\nfunction convertFormDataToSearchParams(formData) {\n let searchParams = new URLSearchParams();\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 return searchParams;\n}\nfunction convertSearchParamsToFormData(searchParams) {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\nfunction processRouteLoaderData(matches, matchesToLoad, results, pendingError, activeDeferreds) {\n // Fill in loaderData/errors from our loaders\n let loaderData = {};\n let errors = null;\n let statusCode;\n let foundError = false;\n let loaderHeaders = {};\n // Process loader results into state.loaderData/state.errors\n results.forEach((result, index) => {\n let id = matchesToLoad[index].route.id;\n invariant(!isRedirectResult(result), \"Cannot handle redirect results in processLoaderData\");\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 errors = errors || {};\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 // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\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) ? result.error.status : 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 // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (result.statusCode != null && result.statusCode !== 200 && !foundError) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\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 return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders\n };\n}\nfunction processLoaderData(state, matches, matchesToLoad, results, pendingError, revalidatingFetchers, fetcherResults, activeDeferreds) {\n let {\n loaderData,\n errors\n } = processRouteLoaderData(matches, matchesToLoad, results, pendingError, activeDeferreds);\n // Process results from our revalidating fetchers\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let {\n key,\n match,\n controller\n } = revalidatingFetchers[index];\n invariant(fetcherResults !== undefined && fetcherResults[index] !== undefined, \"Did not find corresponding fetcher result\");\n let result = fetcherResults[index];\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 == null ? void 0 : match.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = _extends({}, 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 return {\n loaderData,\n errors\n };\n}\nfunction mergeLoaderData(loaderData, newLoaderData, matches, errors) {\n let mergedLoaderData = _extends({}, 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 }\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 if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\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(matches, routeId) {\n let eligibleMatches = routeId ? matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1) : [...matches];\n return eligibleMatches.reverse().find(m => m.route.hasErrorBoundary === true) || matches[0];\n}\nfunction getShortCircuitMatches(routes) {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route = routes.length === 1 ? routes[0] : routes.find(r => r.index || !r.path || r.path === \"/\") || {\n id: \"__shim-error-route__\"\n };\n return {\n matches: [{\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route\n }],\n route\n };\n}\nfunction getInternalRouterError(status, _temp5) {\n let {\n pathname,\n routeId,\n method,\n type\n } = _temp5 === void 0 ? {} : _temp5;\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage = \"You made a \" + method + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide a `loader` for route \\\"\" + routeId + \"\\\", \") + \"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 = \"You made a \" + method.toUpperCase() + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide an `action` for route \\\"\" + routeId + \"\\\", \") + \"so there is no way to handle the request.\";\n } else if (method) {\n errorMessage = \"Invalid request method \\\"\" + method.toUpperCase() + \"\\\"\";\n }\n }\n return new ErrorResponseImpl(status || 500, statusText, new Error(errorMessage), true);\n}\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(results) {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return {\n result,\n idx: i\n };\n }\n }\n}\nfunction stripHashFromPath(path) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath(_extends({}, parsedPath, {\n hash: \"\"\n }));\n}\nfunction isHashChangeOnly(a, b) {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\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 // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\n}\nfunction isDeferredResult(result) {\n return result.type === ResultType.deferred;\n}\nfunction isErrorResult(result) {\n return result.type === ResultType.error;\n}\nfunction isRedirectResult(result) {\n return (result && result.type) === ResultType.redirect;\n}\nfunction isDeferredData(value) {\n let deferred = value;\n return deferred && typeof deferred === \"object\" && typeof deferred.data === \"object\" && typeof deferred.subscribe === \"function\" && typeof deferred.cancel === \"function\" && typeof deferred.resolveData === \"function\";\n}\nfunction isResponse(value) {\n return value != null && typeof value.status === \"number\" && typeof value.statusText === \"string\" && typeof value.headers === \"object\" && typeof value.body !== \"undefined\";\n}\nfunction isRedirectResponse(result) {\n if (!isResponse(result)) {\n return false;\n }\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\nfunction isQueryRouteResponse(obj) {\n return obj && isResponse(obj.response) && (obj.type === ResultType.data || obj.type === ResultType.error);\n}\nfunction isValidMethod(method) {\n return validRequestMethods.has(method.toLowerCase());\n}\nfunction isMutationMethod(method) {\n return validMutationMethods.has(method.toLowerCase());\n}\nasync function resolveDeferredResults(currentMatches, matchesToLoad, results, signals, isFetcher, currentLoaderData) {\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 let currentMatch = currentMatches.find(m => m.route.id === match.route.id);\n let isRevalidatingLoader = currentMatch != null && !isNewRouteInstance(currentMatch, match) && (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\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(signal, \"Expected an AbortSignal for revalidating fetcher deferred result\");\n await resolveDeferredData(result, signal, isFetcher).then(result => {\n if (result) {\n results[index] = result || results[index];\n }\n });\n }\n }\n}\nasync function resolveDeferredData(result, signal, unwrap) {\n if (unwrap === void 0) {\n unwrap = false;\n }\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\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 return {\n type: ResultType.data,\n data: result.deferredData.data\n };\n}\nfunction hasNakedIndexQuery(search) {\n return new URLSearchParams(search).getAll(\"index\").some(v => v === \"\");\n}\nfunction getTargetMatch(matches, location) {\n let search = typeof location === \"string\" ? parsePath(location).search : location.search;\n if (matches[matches.length - 1].route.index && hasNakedIndexQuery(search || \"\")) {\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}\nfunction getSubmissionFromNavigation(navigation) {\n let {\n formMethod,\n formAction,\n formEncType,\n text,\n formData,\n json\n } = navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\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}\nfunction getLoadingNavigation(location, submission) {\n if (submission) {\n let navigation = {\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 = {\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}\nfunction getSubmittingNavigation(location, submission) {\n let navigation = {\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}\nfunction getLoadingFetcher(submission, data) {\n if (submission) {\n let fetcher = {\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 = {\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}\nfunction getSubmittingFetcher(submission, existingFetcher) {\n let fetcher = {\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}\nfunction getDoneFetcher(data) {\n let fetcher = {\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}\nfunction restoreAppliedTransitions(_window, transitions) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(TRANSITIONS_STORAGE_KEY);\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}\nfunction persistAppliedTransitions(_window, transitions) {\n if (transitions.size > 0) {\n let json = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(TRANSITIONS_STORAGE_KEY, JSON.stringify(json));\n } catch (error) {\n warning(false, \"Failed to save applied view transitions in sessionStorage (\" + error + \").\");\n }\n }\n}\n//#endregion\n\nexport { AbortedDeferredError, Action, IDLE_BLOCKER, IDLE_FETCHER, IDLE_NAVIGATION, UNSAFE_DEFERRED_SYMBOL, DeferredData as UNSAFE_DeferredData, ErrorResponseImpl as UNSAFE_ErrorResponseImpl, convertRouteMatchToUiMatch as UNSAFE_convertRouteMatchToUiMatch, convertRoutesToDataRoutes as UNSAFE_convertRoutesToDataRoutes, getResolveToMatches as UNSAFE_getResolveToMatches, invariant as UNSAFE_invariant, warning as UNSAFE_warning, createBrowserHistory, createHashHistory, createMemoryHistory, createPath, createRouter, createStaticHandler, defer, generatePath, getStaticContextFromError, getToPathname, isDeferredData, isRouteErrorResponse, joinPaths, json, matchPath, matchRoutes, normalizePathname, parsePath, redirect, redirectDocument, resolvePath, resolveTo, stripBasename };\n//# sourceMappingURL=router.js.map\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar isArray = require('../internals/is-array');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Safari < 13 does not throw an error in this case\nvar SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {\n // makes no sense without proper strict mode support\n if (this !== undefined) return true;\n try {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty([], 'length', { writable: false }).length = 1;\n } catch (error) {\n return error instanceof TypeError;\n }\n}();\n\nmodule.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {\n if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {\n throw $TypeError('Cannot set read only .length');\n } return O.length = length;\n} : function (O, length) {\n return O.length = length;\n};\n","var anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n};\n","// `CreateIterResultObject` abstract operation\n// https://tc39.es/ecma262/#sec-createiterresultobject\nmodule.exports = function (value, done) {\n return { value: value, done: done };\n};\n","var defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) defineBuiltIn(target, key, src[key], options);\n return target;\n};\n","var $TypeError = TypeError;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991\n\nmodule.exports = function (it) {\n if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded');\n return it;\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) == 'Array';\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar create = require('../internals/object-create');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar InternalStateModule = require('../internals/internal-state');\nvar getMethod = require('../internals/get-method');\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ITERATOR_HELPER = 'IteratorHelper';\nvar WRAP_FOR_VALID_ITERATOR = 'WrapForValidIterator';\nvar setInternalState = InternalStateModule.set;\n\nvar createIteratorProxyPrototype = function (IS_ITERATOR) {\n var getInternalState = InternalStateModule.getterFor(IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER);\n\n return defineBuiltIns(create(IteratorPrototype), {\n next: function next() {\n var state = getInternalState(this);\n // for simplification:\n // for `%WrapForValidIteratorPrototype%.next` our `nextHandler` returns `IterResultObject`\n // for `%IteratorHelperPrototype%.next` - just a value\n if (IS_ITERATOR) return state.nextHandler();\n try {\n var result = state.done ? undefined : state.nextHandler();\n return createIterResultObject(result, state.done);\n } catch (error) {\n state.done = true;\n throw error;\n }\n },\n 'return': function () {\n var state = getInternalState(this);\n var iterator = state.iterator;\n state.done = true;\n if (IS_ITERATOR) {\n var returnMethod = getMethod(iterator, 'return');\n return returnMethod ? call(returnMethod, iterator) : createIterResultObject(undefined, true);\n }\n if (state.inner) try {\n iteratorClose(state.inner.iterator, 'normal');\n } catch (error) {\n return iteratorClose(iterator, 'throw', error);\n }\n iteratorClose(iterator, 'normal');\n return createIterResultObject(undefined, true);\n }\n });\n};\n\nvar WrapForValidIteratorPrototype = createIteratorProxyPrototype(true);\nvar IteratorHelperPrototype = createIteratorProxyPrototype(false);\n\ncreateNonEnumerableProperty(IteratorHelperPrototype, TO_STRING_TAG, 'Iterator Helper');\n\nmodule.exports = function (nextHandler, IS_ITERATOR) {\n var IteratorProxy = function Iterator(record, state) {\n if (state) {\n state.iterator = record.iterator;\n state.next = record.next;\n } else state = record;\n state.type = IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER;\n state.nextHandler = nextHandler;\n state.counter = 0;\n state.done = false;\n setInternalState(this, state);\n };\n\n IteratorProxy.prototype = IS_ITERATOR ? WrapForValidIteratorPrototype : IteratorHelperPrototype;\n\n return IteratorProxy;\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar createIteratorProxy = require('../internals/iterator-create-proxy');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\n\nvar IteratorProxy = createIteratorProxy(function () {\n var iterator = this.iterator;\n var result = anObject(call(this.next, iterator));\n var done = this.done = !!result.done;\n if (!done) return callWithSafeIterationClosing(iterator, this.mapper, [result.value, this.counter++], true);\n});\n\n// `Iterator.prototype.map` method\n// https://github.com/tc39/proposal-iterator-helpers\nmodule.exports = function map(mapper) {\n anObject(this);\n aCallable(mapper);\n return new IteratorProxy(getIteratorDirect(this), {\n mapper: mapper\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar setArrayLength = require('../internals/array-set-length');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar fails = require('../internals/fails');\n\nvar INCORRECT_TO_LENGTH = fails(function () {\n return [].push.call({ length: 0x100000000 }, 1) !== 4294967297;\n});\n\n// V8 and Safari <= 15.4, FF < 23 throws InternalError\n// https://bugs.chromium.org/p/v8/issues/detail?id=12681\nvar properErrorOnNonWritableLength = function () {\n try {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty([], 'length', { writable: false }).push();\n } catch (error) {\n return error instanceof TypeError;\n }\n};\n\nvar FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength();\n\n// `Array.prototype.push` method\n// https://tc39.es/ecma262/#sec-array.prototype.push\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n push: function push(item) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var argCount = arguments.length;\n doesNotExceedSafeInteger(len + argCount);\n for (var i = 0; i < argCount; i++) {\n O[len] = arguments[i];\n len++;\n }\n setArrayLength(O, len);\n return len;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\nvar createIteratorProxy = require('../internals/iterator-create-proxy');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\n\nvar IteratorProxy = createIteratorProxy(function () {\n var iterator = this.iterator;\n var predicate = this.predicate;\n var next = this.next;\n var result, done, value;\n while (true) {\n result = anObject(call(next, iterator));\n done = this.done = !!result.done;\n if (done) return;\n value = result.value;\n if (callWithSafeIterationClosing(iterator, predicate, [value, this.counter++], true)) return value;\n }\n});\n\n// `Iterator.prototype.filter` method\n// https://github.com/tc39/proposal-iterator-helpers\n$({ target: 'Iterator', proto: true, real: true }, {\n filter: function filter(predicate) {\n anObject(this);\n aCallable(predicate);\n return new IteratorProxy(getIteratorDirect(this), {\n predicate: predicate\n });\n }\n});\n","var $ = require('../internals/export');\nvar map = require('../internals/iterator-map');\n\n// `Iterator.prototype.map` method\n// https://github.com/tc39/proposal-iterator-helpers\n$({ target: 'Iterator', proto: true, real: true }, {\n map: map\n});\n","/**\n * React Router DOM v6.21.2\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { UNSAFE_mapRouteProperties, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, Router, UNSAFE_useRoutesImpl, UNSAFE_NavigationContext, useHref, useResolvedPath, useLocation, useNavigate, createPath, UNSAFE_useRouteId, UNSAFE_RouteContext, useMatches, useNavigation, useBlocker } from 'react-router';\nexport { AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, Routes, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, UNSAFE_LocationContext, UNSAFE_NavigationContext, UNSAFE_RouteContext, UNSAFE_useRouteId, createMemoryRouter, createPath, createRoutesFromChildren, createRoutesFromElements, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, renderMatches, resolvePath, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes } from 'react-router';\nimport { stripBasename, UNSAFE_warning, createRouter, createBrowserHistory, createHashHistory, UNSAFE_ErrorResponseImpl, UNSAFE_invariant, joinPaths, IDLE_FETCHER, matchPath } from '@remix-run/router';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nconst defaultMethod = \"get\";\nconst defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n return object != null && typeof object.tagName === \"string\";\n}\nfunction isButtonElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n return event.button === 0 && (\n // Ignore everything but left clicks\n !target || target === \"_self\") &&\n // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // Ignore clicks with modifier keys\n ;\n}\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n * let searchParams = new URLSearchParams([\n * ['sort', 'name'],\n * ['sort', 'price']\n * ]);\n *\n * you can do:\n *\n * let searchParams = createSearchParams({\n * sort: ['name', 'price']\n * });\n */\nfunction createSearchParams(init) {\n if (init === void 0) {\n init = \"\";\n }\n return new URLSearchParams(typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {\n let value = init[key];\n return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);\n }, []));\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n let searchParams = createSearchParams(locationSearch);\n if (defaultSearchParams) {\n // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n // web extensions. Relevant Bugzilla tickets:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n defaultSearchParams.forEach((_, key) => {\n if (!searchParams.has(key)) {\n defaultSearchParams.getAll(key).forEach(value => {\n searchParams.append(key, value);\n });\n }\n });\n }\n return searchParams;\n}\n// One-time check for submitter support\nlet _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n if (_formDataSupportsSubmitter === null) {\n try {\n new FormData(document.createElement(\"form\"),\n // @ts-expect-error if FormData supports the submitter parameter, this will throw\n 0);\n _formDataSupportsSubmitter = false;\n } catch (e) {\n _formDataSupportsSubmitter = true;\n }\n }\n return _formDataSupportsSubmitter;\n}\nconst supportedFormEncTypes = new Set([\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"]);\nfunction getFormEncType(encType) {\n if (encType != null && !supportedFormEncTypes.has(encType)) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"\\\"\" + encType + \"\\\" is not a valid `encType` for ``/`` \" + (\"and will default to \\\"\" + defaultEncType + \"\\\"\")) : void 0;\n return null;\n }\n return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n let method;\n let action;\n let encType;\n let formData;\n let body;\n if (isFormElement(target)) {\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n formData = new FormData(target);\n } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n let form = target.form;\n if (form == null) {\n throw new Error(\"Cannot submit a