{"ast":null,"code":"import _toConsumableArray from \"@babel/runtime/helpers/toConsumableArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nvar _excluded = [\"preserveGroups\", \"preserveDynamicRoutes\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nimport { validatePathConfig } from \"@react-navigation/core\";\nimport * as queryString from \"query-string\";\nimport { matchDeepDynamicRouteName, matchDynamicName, matchGroupName } from \"../matchers\";\nvar DEFAULT_SCREENS = {};\nvar getActiveRoute = function getActiveRoute(state) {\n  var route = typeof state.index === \"number\" ? state.routes[state.index] : state.routes[state.routes.length - 1];\n  if (route.state) {\n    return getActiveRoute(route.state);\n  }\n  if (route && isInvalidParams(route.params)) {\n    return getActiveRoute(createFakeState(route.params));\n  }\n  return route;\n};\nfunction createFakeState(params) {\n  return {\n    stale: false,\n    type: \"UNKNOWN\",\n    key: \"UNKNOWN\",\n    index: 0,\n    routeNames: [],\n    routes: [{\n      key: \"UNKNOWN\",\n      name: params.screen,\n      params: params.params,\n      path: params.path\n    }]\n  };\n}\nfunction segmentMatchesConvention(segment) {\n  return segment === \"index\" || matchDynamicName(segment) != null || matchGroupName(segment) != null || matchDeepDynamicRouteName(segment) != null;\n}\nfunction encodeURIComponentPreservingBrackets(str) {\n  return encodeURIComponent(str).replace(/%5B/g, \"[\").replace(/%5D/g, \"]\");\n}\nexport default function getPathFromState(state, _options) {\n  return getPathDataFromState(state, _options).path;\n}\nexport function getPathDataFromState(state) {\n  var _options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n    screens: DEFAULT_SCREENS\n  };\n  if (state == null) {\n    throw Error(\"Got 'undefined' for the navigation state. You must pass a valid state object.\");\n  }\n  var preserveGroups = _options.preserveGroups,\n    preserveDynamicRoutes = _options.preserveDynamicRoutes,\n    options = _objectWithoutProperties(_options, _excluded);\n  validatePathConfig(options);\n  if (Object.is(options.screens, DEFAULT_SCREENS)) {\n    throw Error(\"You must pass a 'screens' object to 'getPathFromState' to generate a path.\");\n  }\n  return getPathFromResolvedState(state, createNormalizedConfigs(options.screens), {\n    preserveGroups: preserveGroups,\n    preserveDynamicRoutes: preserveDynamicRoutes\n  });\n}\nfunction processParamsWithUserSettings(configItem, params) {\n  var stringify = configItem == null ? void 0 : configItem.stringify;\n  return Object.fromEntries(Object.entries(params).map(function (_ref) {\n    var _ref2 = _slicedToArray(_ref, 2),\n      key = _ref2[0],\n      value = _ref2[1];\n    return [key, stringify != null && stringify[key] ? stringify[key](value) : Array.isArray(value) ? value : String(value)];\n  }));\n}\nexport function deepEqual(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (Array.isArray(a) && Array.isArray(b)) {\n    if (a.length !== b.length) {\n      return false;\n    }\n    for (var i = 0; i < a.length; i++) {\n      if (!deepEqual(a[i], b[i])) {\n        return false;\n      }\n    }\n    return true;\n  }\n  if (typeof a === \"object\" && typeof b === \"object\") {\n    var keysA = Object.keys(a);\n    var keysB = Object.keys(b);\n    if (keysA.length !== keysB.length) {\n      return false;\n    }\n    for (var key of keysA) {\n      if (!deepEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n    return true;\n  }\n  return false;\n}\nfunction walkConfigItems(route, focusedRoute, configs, _ref3) {\n  var preserveDynamicRoutes = _ref3.preserveDynamicRoutes;\n  if (!route.state && isInvalidParams(route.params)) {\n    route.state = createFakeState(route.params);\n  }\n  var pattern = null;\n  var focusedParams;\n  var collectedParams = {};\n  while (route.name in configs) {\n    var _route$state$index;\n    var configItem = configs[route.name];\n    var inputPattern = configItem.pattern;\n    if (inputPattern == null) {\n      throw new Error(\"Unexpected: No pattern found for route \" + route.name);\n    }\n    pattern = inputPattern;\n    if (route.params) {\n      var params = processParamsWithUserSettings(configItem, route.params);\n      if (pattern) {\n        Object.assign(collectedParams, params);\n      }\n      if (deepEqual(focusedRoute, route)) {\n        if (preserveDynamicRoutes) {\n          focusedParams = params;\n        } else {\n          focusedParams = getParamsWithConventionsCollapsed({\n            params: params,\n            pattern: pattern,\n            routeName: route.name\n          });\n        }\n      }\n    }\n    if (!route.state && isInvalidParams(route.params)) {\n      route.state = createFakeState(route.params);\n    }\n    if (!configItem.screens || route.state === undefined) {\n      var _configItem$screens$c;\n      if (configItem.initialRouteName && configItem.screens && configItem.initialRouteName in configItem.screens && (_configItem$screens$c = configItem.screens[configItem.initialRouteName]) != null && _configItem$screens$c.pattern) {\n        var initialRouteConfig = configItem.screens[configItem.initialRouteName];\n        pattern = initialRouteConfig.pattern;\n        if (focusedParams) {\n          if (!preserveDynamicRoutes) {\n            focusedParams = getParamsWithConventionsCollapsed({\n              params: focusedParams,\n              pattern: pattern,\n              routeName: route.name\n            });\n          }\n        }\n      }\n      break;\n    }\n    var index = (_route$state$index = route.state.index) != null ? _route$state$index : route.state.routes.length - 1;\n    var nextRoute = route.state.routes[index];\n    var nestedScreens = configItem.screens;\n    if (nestedScreens && nextRoute.name in nestedScreens) {\n      route = nextRoute;\n      configs = nestedScreens;\n    } else {\n      break;\n    }\n  }\n  if (pattern == null) {\n    throw new Error(`No pattern found for route \"${route.name}\". Options are: ${Object.keys(configs).join(\", \")}.`);\n  }\n  if (pattern && !focusedParams && focusedRoute.params) {\n    if (preserveDynamicRoutes) {\n      focusedParams = focusedRoute.params;\n    } else {\n      focusedParams = getParamsWithConventionsCollapsed({\n        params: focusedRoute.params,\n        pattern: pattern,\n        routeName: route.name\n      });\n    }\n    Object.assign(focusedParams, collectedParams);\n  }\n  return {\n    pattern: pattern,\n    nextRoute: route,\n    focusedParams: focusedParams,\n    params: collectedParams\n  };\n}\nfunction getPathFromResolvedState(state, configs, _ref4) {\n  var preserveGroups = _ref4.preserveGroups,\n    preserveDynamicRoutes = _ref4.preserveDynamicRoutes;\n  var path = \"\";\n  var current = state;\n  var allParams = {};\n  while (current) {\n    var _current$index, _configs$nextRoute$na, _nextRoute$state$rout, _nextRoute$state$rout2, _nextRoute$state$inde, _nextRoute$state;\n    path += \"/\";\n    var route = current.routes[(_current$index = current.index) != null ? _current$index : 0];\n    if (!route.state && isInvalidParams(route.params)) {\n      route.state = createFakeState(route.params);\n    }\n    var _walkConfigItems = walkConfigItems(route, getActiveRoute(current), _objectSpread({}, configs), {\n        preserveDynamicRoutes: preserveDynamicRoutes\n      }),\n      pattern = _walkConfigItems.pattern,\n      params = _walkConfigItems.params,\n      nextRoute = _walkConfigItems.nextRoute,\n      focusedParams = _walkConfigItems.focusedParams;\n    Object.assign(allParams, params);\n    path += getPathWithConventionsCollapsed({\n      pattern: pattern,\n      routePath: nextRoute.path,\n      params: allParams,\n      initialRouteName: (_configs$nextRoute$na = configs[nextRoute.name]) == null ? void 0 : _configs$nextRoute$na.initialRouteName,\n      preserveGroups: preserveGroups,\n      preserveDynamicRoutes: preserveDynamicRoutes\n    });\n    if (nextRoute.state && configs[(_nextRoute$state$rout = nextRoute.state.routes) == null ? void 0 : (_nextRoute$state$rout2 = _nextRoute$state$rout[(_nextRoute$state$inde = (_nextRoute$state = nextRoute.state) == null ? void 0 : _nextRoute$state.index) != null ? _nextRoute$state$inde : 0]) == null ? void 0 : _nextRoute$state$rout2.name]) {\n      current = nextRoute.state;\n    } else {\n      if (focusedParams) {\n        for (var param in focusedParams) {\n          if (focusedParams[param] === \"undefined\") {\n            delete focusedParams[param];\n          }\n        }\n        var query = queryString.stringify(focusedParams, {\n          sort: false\n        });\n        if (query) {\n          path += `?${query}`;\n        }\n      }\n      break;\n    }\n  }\n  return {\n    path: basicSanitizePath(path),\n    params: decodeParams(allParams)\n  };\n}\nfunction decodeParams(params) {\n  var parsed = {};\n  for (var _ref5 of Object.entries(params)) {\n    var _ref6 = _slicedToArray(_ref5, 2);\n    var key = _ref6[0];\n    var _value = _ref6[1];\n    parsed[key] = decodeURIComponent(_value);\n  }\n  return parsed;\n}\nfunction getPathWithConventionsCollapsed(_ref7) {\n  var pattern = _ref7.pattern,\n    routePath = _ref7.routePath,\n    params = _ref7.params,\n    preserveGroups = _ref7.preserveGroups,\n    preserveDynamicRoutes = _ref7.preserveDynamicRoutes,\n    initialRouteName = _ref7.initialRouteName;\n  var segments = pattern.split(\"/\");\n  return segments.map(function (p, i) {\n    var name = getParamName(p);\n    if (p.startsWith(\"*\")) {\n      if (preserveDynamicRoutes) {\n        return `[...${name}]`;\n      }\n      if (params[name]) {\n        return params[name].join(\"/\");\n      }\n      if (i === 0) {\n        return routePath;\n      }\n      return routePath == null ? void 0 : routePath.split(\"/\").slice(i + 1).join(\"/\");\n    }\n    if (p.startsWith(\":\")) {\n      if (preserveDynamicRoutes) {\n        return `[${name}]`;\n      }\n      return params[name];\n    }\n    if (!preserveGroups && matchGroupName(p) != null) {\n      if (segments.length - 1 === i) {\n        if (initialRouteName) {\n          if (segmentMatchesConvention(initialRouteName)) {\n            return \"\";\n          }\n          return encodeURIComponentPreservingBrackets(initialRouteName);\n        }\n      }\n      return \"\";\n    }\n    return encodeURIComponentPreservingBrackets(p);\n  }).map(function (v) {\n    return v != null ? v : \"\";\n  }).join(\"/\");\n}\nfunction getParamsWithConventionsCollapsed(_ref8) {\n  var pattern = _ref8.pattern,\n    routeName = _ref8.routeName,\n    params = _ref8.params;\n  var processedParams = _objectSpread({}, params);\n  var segments = pattern.split(\"/\");\n  segments.filter(function (segment) {\n    return segment.startsWith(\":\");\n  }).forEach(function (segment) {\n    var name = getParamName(segment);\n    delete processedParams[name];\n  });\n  if (segments.some(function (segment) {\n    return segment.startsWith(\"*\");\n  })) {\n    var _matchDeepDynamicRout;\n    var name = (_matchDeepDynamicRout = matchDeepDynamicRouteName(routeName)) != null ? _matchDeepDynamicRout : routeName;\n    delete processedParams[name];\n  }\n  return processedParams;\n}\nfunction basicSanitizePath(path) {\n  var simplifiedPath = path.replace(/\\/+/g, \"/\");\n  if (simplifiedPath.length <= 1) {\n    return simplifiedPath;\n  }\n  return simplifiedPath.replace(/\\/$/, \"\");\n}\nfunction isInvalidParams(params) {\n  if (!params) {\n    return false;\n  }\n  if (\"params\" in params && typeof params.params === \"object\" && !!params.params) {\n    return true;\n  }\n  return \"initial\" in params && typeof params.initial === \"boolean\" && \"screen\" in params;\n}\nvar getParamName = function getParamName(pattern) {\n  return pattern.replace(/^[:*]/, \"\").replace(/\\?$/, \"\");\n};\nvar joinPaths = function joinPaths() {\n  var _ref9;\n  for (var _len = arguments.length, paths = new Array(_len), _key = 0; _key < _len; _key++) {\n    paths[_key] = arguments[_key];\n  }\n  return (_ref9 = []).concat.apply(_ref9, _toConsumableArray(paths.map(function (p) {\n    return p.split(\"/\");\n  }))).filter(Boolean).join(\"/\");\n};\nvar createConfigItem = function createConfigItem(config, parentPattern) {\n  if (typeof config === \"string\") {\n    var _pattern = parentPattern ? joinPaths(parentPattern, config) : config;\n    return {\n      pattern: _pattern\n    };\n  }\n  if (config.exact && config.path === undefined) {\n    throw new Error(\"A 'path' needs to be specified when specifying 'exact: true'. If you don't want this screen in the URL, specify it as empty string, e.g. `path: ''`.\");\n  }\n  var pattern = config.exact !== true ? joinPaths(parentPattern || \"\", config.path || \"\") : config.path || \"\";\n  var screens = config.screens ? createNormalizedConfigs(config.screens, pattern) : undefined;\n  return {\n    pattern: pattern == null ? void 0 : pattern.split(\"/\").filter(Boolean).join(\"/\"),\n    stringify: config.stringify,\n    screens: screens,\n    initialRouteName: config.initialRouteName\n  };\n};\nvar createNormalizedConfigs = function createNormalizedConfigs(options, pattern) {\n  return Object.fromEntries(Object.entries(options).map(function (_ref10) {\n    var _ref11 = _slicedToArray(_ref10, 2),\n      name = _ref11[0],\n      c = _ref11[1];\n    return [name, createConfigItem(c, pattern)];\n  }));\n};","map":{"version":3,"names":["validatePathConfig","queryString","matchDeepDynamicRouteName","matchDynamicName","matchGroupName","DEFAULT_SCREENS","getActiveRoute","state","route","index","routes","length","isInvalidParams","params","createFakeState","stale","type","key","routeNames","name","screen","path","segmentMatchesConvention","segment","encodeURIComponentPreservingBrackets","str","encodeURIComponent","replace","getPathFromState","_options","getPathDataFromState","arguments","undefined","screens","Error","preserveGroups","preserveDynamicRoutes","options","_objectWithoutProperties","_excluded","Object","is","getPathFromResolvedState","createNormalizedConfigs","processParamsWithUserSettings","configItem","stringify","fromEntries","entries","map","_ref","_ref2","_slicedToArray","value","Array","isArray","String","deepEqual","a","b","i","keysA","keys","keysB","walkConfigItems","focusedRoute","configs","_ref3","pattern","focusedParams","collectedParams","_route$state$index","inputPattern","assign","getParamsWithConventionsCollapsed","routeName","_configItem$screens$c","initialRouteName","initialRouteConfig","nextRoute","nestedScreens","join","_ref4","current","allParams","_current$index","_configs$nextRoute$na","_nextRoute$state$rout","_nextRoute$state$rout2","_nextRoute$state$inde","_nextRoute$state","_walkConfigItems","_objectSpread","getPathWithConventionsCollapsed","routePath","param","query","sort","basicSanitizePath","decodeParams","parsed","_ref5","_ref6","decodeURIComponent","_ref7","segments","split","p","getParamName","startsWith","slice","v","_ref8","processedParams","filter","forEach","some","_matchDeepDynamicRout","simplifiedPath","initial","joinPaths","_ref9","_len","paths","_key","concat","apply","_toConsumableArray","Boolean","createConfigItem","config","parentPattern","exact","_ref10","_ref11","c"],"sources":["/Users/Daniel.Antelo/Workspaces/expo-template-reactrouter-nativebase/node_modules/expo-router/src/fork/getPathFromState.ts"],"sourcesContent":["import {\n  PathConfig,\n  PathConfigMap,\n  validatePathConfig,\n} from \"@react-navigation/core\";\nimport type {\n  NavigationState,\n  PartialState,\n  Route,\n} from \"@react-navigation/routers\";\nimport * as queryString from \"query-string\";\n\nimport {\n  matchDeepDynamicRouteName,\n  matchDynamicName,\n  matchGroupName,\n} from \"../matchers\";\n\ntype Options<ParamList extends object> = {\n  initialRouteName?: string;\n  screens: PathConfigMap<ParamList>;\n};\n\nexport type State =\n  | NavigationState\n  | Omit<PartialState<NavigationState>, \"stale\">;\n\ntype StringifyConfig = Record<string, (value: any) => string>;\n\ntype ConfigItem = {\n  pattern?: string;\n  stringify?: StringifyConfig;\n  screens?: Record<string, ConfigItem>;\n  // Used as fallback for groups\n  initialRouteName?: string;\n};\n\ntype CustomRoute = Route<string> & {\n  state?: State;\n};\n\nconst DEFAULT_SCREENS: PathConfigMap<object> = {};\n\nconst getActiveRoute = (state: State): { name: string; params?: object } => {\n  const route =\n    typeof state.index === \"number\"\n      ? state.routes[state.index]\n      : state.routes[state.routes.length - 1];\n\n  if (route.state) {\n    return getActiveRoute(route.state);\n  }\n\n  if (route && isInvalidParams(route.params)) {\n    return getActiveRoute(createFakeState(route.params));\n  }\n\n  return route;\n};\n\nfunction createFakeState(params: StateAsParams) {\n  return {\n    stale: false,\n    type: \"UNKNOWN\",\n    key: \"UNKNOWN\",\n    index: 0,\n    routeNames: [],\n    routes: [\n      {\n        key: \"UNKNOWN\",\n        name: params.screen,\n        params: params.params,\n        path: params.path,\n      },\n    ],\n  };\n}\n\nfunction segmentMatchesConvention(segment: string): boolean {\n  return (\n    segment === \"index\" ||\n    matchDynamicName(segment) != null ||\n    matchGroupName(segment) != null ||\n    matchDeepDynamicRouteName(segment) != null\n  );\n}\n\nfunction encodeURIComponentPreservingBrackets(str: string) {\n  return encodeURIComponent(str).replace(/%5B/g, \"[\").replace(/%5D/g, \"]\");\n}\n\n/**\n * Utility to serialize a navigation state object to a path string.\n *\n * @example\n * ```js\n * getPathFromState(\n *   {\n *     routes: [\n *       {\n *         name: 'Chat',\n *         params: { author: 'Jane', id: 42 },\n *       },\n *     ],\n *   },\n *   {\n *     screens: {\n *       Chat: {\n *         path: 'chat/:author/:id',\n *         stringify: { author: author => author.toLowerCase() }\n *       }\n *     }\n *   }\n * )\n * ```\n *\n * @param state Navigation state to serialize.\n * @param options Extra options to fine-tune how to serialize the path.\n * @returns Path representing the state, e.g. /foo/bar?count=42.\n */\nexport default function getPathFromState<ParamList extends object>(\n  state: State,\n  _options?: Options<ParamList> & {\n    preserveGroups?: boolean;\n    preserveDynamicRoutes?: boolean;\n  }\n): string {\n  return getPathDataFromState(state, _options).path;\n}\n\nexport function getPathDataFromState<ParamList extends object>(\n  state: State,\n  _options: Options<ParamList> & {\n    preserveGroups?: boolean;\n    preserveDynamicRoutes?: boolean;\n  } = { screens: DEFAULT_SCREENS }\n) {\n  if (state == null) {\n    throw Error(\n      \"Got 'undefined' for the navigation state. You must pass a valid state object.\"\n    );\n  }\n\n  const { preserveGroups, preserveDynamicRoutes, ...options } = _options;\n\n  validatePathConfig(options);\n\n  // Expo Router disallows usage without a linking config.\n  if (Object.is(options.screens, DEFAULT_SCREENS)) {\n    throw Error(\n      \"You must pass a 'screens' object to 'getPathFromState' to generate a path.\"\n    );\n  }\n\n  return getPathFromResolvedState(\n    state,\n    // Create a normalized configs object which will be easier to use\n    createNormalizedConfigs(options.screens),\n    { preserveGroups, preserveDynamicRoutes }\n  );\n}\n\nfunction processParamsWithUserSettings(\n  configItem: ConfigItem,\n  params: Record<string, any>\n) {\n  const stringify = configItem?.stringify;\n\n  return Object.fromEntries(\n    Object.entries(params).map(([key, value]) => [\n      key,\n      // TODO: Strip nullish values here.\n      stringify?.[key]\n        ? stringify[key](value)\n        : // Preserve rest params\n        Array.isArray(value)\n        ? value\n        : String(value),\n    ])\n  );\n}\n\nexport function deepEqual(a: any, b: any) {\n  if (a === b) {\n    return true;\n  }\n\n  if (Array.isArray(a) && Array.isArray(b)) {\n    if (a.length !== b.length) {\n      return false;\n    }\n\n    for (let i = 0; i < a.length; i++) {\n      if (!deepEqual(a[i], b[i])) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  if (typeof a === \"object\" && typeof b === \"object\") {\n    const keysA = Object.keys(a);\n    const keysB = Object.keys(b);\n\n    if (keysA.length !== keysB.length) {\n      return false;\n    }\n\n    for (const key of keysA) {\n      if (!deepEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  return false;\n}\n\nfunction walkConfigItems(\n  route: CustomRoute,\n  focusedRoute: {\n    name: string;\n    params?: object;\n  },\n  configs: Record<string, ConfigItem>,\n  {\n    preserveDynamicRoutes,\n  }: {\n    preserveDynamicRoutes?: boolean;\n  }\n) {\n  // NOTE(EvanBacon): Fill in current route using state that was passed as params.\n  if (!route.state && isInvalidParams(route.params)) {\n    route.state = createFakeState(route.params);\n  }\n\n  let pattern: string | null = null;\n  let focusedParams: Record<string, any> | undefined;\n\n  const collectedParams: Record<string, any> = {};\n\n  while (route.name in configs) {\n    const configItem = configs[route.name];\n    const inputPattern = configItem.pattern;\n\n    if (inputPattern == null) {\n      // This should never happen in Expo Router.\n      throw new Error(\"Unexpected: No pattern found for route \" + route.name);\n    }\n    pattern = inputPattern;\n\n    if (route.params) {\n      const params = processParamsWithUserSettings(configItem, route.params);\n      // TODO: Does this need to be a null check?\n      if (pattern) {\n        Object.assign(collectedParams, params);\n      }\n      if (deepEqual(focusedRoute, route)) {\n        if (preserveDynamicRoutes) {\n          focusedParams = params;\n        } else {\n          // If this is the focused route, keep the params for later use\n          // We save it here since it's been stringified already\n          focusedParams = getParamsWithConventionsCollapsed({\n            params,\n            pattern,\n            routeName: route.name,\n          });\n        }\n      }\n    }\n\n    if (!route.state && isInvalidParams(route.params)) {\n      route.state = createFakeState(route.params);\n    }\n\n    // If there is no `screens` property or no nested state, we return pattern\n    if (!configItem.screens || route.state === undefined) {\n      if (\n        configItem.initialRouteName &&\n        configItem.screens &&\n        configItem.initialRouteName in configItem.screens &&\n        configItem.screens[configItem.initialRouteName]?.pattern\n      ) {\n        const initialRouteConfig =\n          configItem.screens[configItem.initialRouteName];\n\n        // NOTE(EvanBacon): Big hack to support initial route changes in tab bars.\n        pattern = initialRouteConfig.pattern!;\n        if (focusedParams) {\n          if (!preserveDynamicRoutes) {\n            // If this is the focused route, keep the params for later use\n            // We save it here since it's been stringified already\n            focusedParams = getParamsWithConventionsCollapsed({\n              params: focusedParams,\n              pattern,\n              routeName: route.name,\n            });\n          }\n        }\n      }\n      break;\n    }\n\n    const index = route.state.index ?? route.state.routes.length - 1;\n\n    const nextRoute = route.state.routes[index];\n    const nestedScreens = configItem.screens;\n\n    // if there is config for next route name, we go deeper\n    if (nestedScreens && nextRoute.name in nestedScreens) {\n      route = nextRoute as CustomRoute;\n      configs = nestedScreens;\n    } else {\n      // If not, there is no sense in going deeper in config\n      break;\n    }\n  }\n\n  if (pattern == null) {\n    throw new Error(\n      `No pattern found for route \"${route.name}\". Options are: ${Object.keys(\n        configs\n      ).join(\", \")}.`\n    );\n  }\n\n  if (pattern && !focusedParams && focusedRoute.params) {\n    if (preserveDynamicRoutes) {\n      focusedParams = focusedRoute.params;\n    } else {\n      // If this is the focused route, keep the params for later use\n      // We save it here since it's been stringified already\n      focusedParams = getParamsWithConventionsCollapsed({\n        params: focusedRoute.params,\n        pattern,\n        routeName: route.name,\n      });\n    }\n    Object.assign(focusedParams, collectedParams);\n  }\n\n  return {\n    pattern,\n    nextRoute: route,\n    focusedParams,\n    params: collectedParams,\n  };\n}\n\nfunction getPathFromResolvedState(\n  state: State,\n  configs: Record<string, ConfigItem>,\n  {\n    preserveGroups,\n    preserveDynamicRoutes,\n  }: { preserveGroups?: boolean; preserveDynamicRoutes?: boolean }\n) {\n  let path = \"\";\n  let current: State = state;\n\n  const allParams: Record<string, any> = {};\n\n  while (current) {\n    path += \"/\";\n\n    const route = current.routes[current.index ?? 0] as CustomRoute;\n    // NOTE(EvanBacon): Fill in current route using state that was passed as params.\n    // if (isInvalidParams(route.params)) {\n    if (!route.state && isInvalidParams(route.params)) {\n      route.state = createFakeState(route.params);\n    }\n\n    const { pattern, params, nextRoute, focusedParams } = walkConfigItems(\n      route,\n      getActiveRoute(current),\n      { ...configs },\n      { preserveDynamicRoutes }\n    );\n\n    Object.assign(allParams, params);\n\n    path += getPathWithConventionsCollapsed({\n      pattern,\n      routePath: nextRoute.path,\n      params: allParams,\n      initialRouteName: configs[nextRoute.name]?.initialRouteName,\n      preserveGroups,\n      preserveDynamicRoutes,\n    });\n\n    if (\n      nextRoute.state &&\n      // NOTE(EvanBacon): The upstream implementation allows for sending in synthetic states (states that weren't generated by `getStateFromPath`)\n      // and any invalid routes will simply be ignored.\n      // Because of this, we need to check if the next route is valid before continuing, otherwise our more strict\n      // implementation will throw an error.\n      configs[nextRoute.state.routes?.[nextRoute.state?.index ?? 0]?.name]\n    ) {\n      // Continue looping with the next state if available.\n      current = nextRoute.state;\n    } else {\n      // Finished crawling state.\n\n      // Check for query params before exiting.\n      if (focusedParams) {\n        for (const param in focusedParams) {\n          // TODO: This is not good. We shouldn't squat strings named \"undefined\".\n          if (focusedParams[param] === \"undefined\") {\n            // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n            delete focusedParams[param];\n          }\n        }\n\n        const query = queryString.stringify(focusedParams, { sort: false });\n        if (query) {\n          path += `?${query}`;\n        }\n      }\n      break;\n    }\n  }\n\n  return { path: basicSanitizePath(path), params: decodeParams(allParams) };\n}\n\nfunction decodeParams(params: Record<string, string>) {\n  const parsed: Record<string, any> = {};\n\n  for (const [key, value] of Object.entries(params)) {\n    parsed[key] = decodeURIComponent(value);\n  }\n\n  return parsed;\n}\n\nfunction getPathWithConventionsCollapsed({\n  pattern,\n  routePath,\n  params,\n  preserveGroups,\n  preserveDynamicRoutes,\n  initialRouteName,\n}: {\n  pattern: string;\n  routePath?: string;\n  params: Record<string, any>;\n  preserveGroups?: boolean;\n  preserveDynamicRoutes?: boolean;\n  initialRouteName?: string;\n}) {\n  const segments = pattern.split(\"/\");\n  return segments\n    .map((p, i) => {\n      const name = getParamName(p);\n\n      // We don't know what to show for wildcard patterns\n      // Showing the route name seems ok, though whatever we show here will be incorrect\n      // Since the page doesn't actually exist\n      if (p.startsWith(\"*\")) {\n        if (preserveDynamicRoutes) {\n          return `[...${name}]`;\n        }\n        if (params[name]) {\n          return params[name].join(\"/\");\n        }\n        if (i === 0) {\n          // This can occur when a wildcard matches all routes and the given path was `/`.\n          return routePath;\n        }\n        // remove existing segments from route.path and return it\n        // this is used for nested wildcard routes. Without this, the path would add\n        // all nested segments to the beginning of the wildcard route.\n        return routePath\n          ?.split(\"/\")\n          .slice(i + 1)\n          .join(\"/\");\n      }\n\n      // If the path has a pattern for a param, put the param in the path\n      if (p.startsWith(\":\")) {\n        if (preserveDynamicRoutes) {\n          return `[${name}]`;\n        }\n        // Optional params without value assigned in route.params should be ignored\n        return params[name];\n      }\n\n      if (!preserveGroups && matchGroupName(p) != null) {\n        // When the last part is a group it could be a shared URL\n        // if the route has an initialRouteName defined, then we should\n        // use that as the component path as we can assume it will be shown.\n        if (segments.length - 1 === i) {\n          if (initialRouteName) {\n            // Return an empty string if the init route is ambiguous.\n            if (segmentMatchesConvention(initialRouteName)) {\n              return \"\";\n            }\n            return encodeURIComponentPreservingBrackets(initialRouteName);\n          }\n        }\n        return \"\";\n      }\n      // Preserve dynamic syntax for rehydration\n      return encodeURIComponentPreservingBrackets(p);\n    })\n    .map((v) => v ?? \"\")\n    .join(\"/\");\n}\n\n/** Given a set of query params and a pattern with possible conventions, collapse the conventions and return the remaining params. */\nfunction getParamsWithConventionsCollapsed({\n  pattern,\n  routeName,\n  params,\n}: {\n  pattern: string;\n  /** Route name is required for matching the wildcard route. This is specific to Expo Router. */\n  routeName: string;\n  params: object;\n}): Record<string, string> {\n  const processedParams: Record<string, string> = { ...params };\n\n  // Remove the params present in the pattern since we'll only use the rest for query string\n\n  const segments = pattern.split(\"/\");\n\n  // Dynamic Routes\n  segments\n    .filter((segment) => segment.startsWith(\":\"))\n    .forEach((segment) => {\n      const name = getParamName(segment);\n      delete processedParams[name];\n    });\n\n  // Deep Dynamic Routes\n  if (segments.some((segment) => segment.startsWith(\"*\"))) {\n    // NOTE(EvanBacon): Drop the param name matching the wildcard route name -- this is specific to Expo Router.\n    const name = matchDeepDynamicRouteName(routeName) ?? routeName;\n    delete processedParams[name];\n  }\n\n  return processedParams;\n}\n\n// Remove multiple as well as trailing slashes\nfunction basicSanitizePath(path: string) {\n  // Remove duplicate slashes like `foo//bar` -> `foo/bar`\n  const simplifiedPath = path.replace(/\\/+/g, \"/\");\n  if (simplifiedPath.length <= 1) {\n    return simplifiedPath;\n  }\n  // Remove trailing slash like `foo/bar/` -> `foo/bar`\n  return simplifiedPath.replace(/\\/$/, \"\");\n}\n\ntype StateAsParams = {\n  initial: boolean;\n  path?: string;\n  screen: string;\n  params: Record<string, any>;\n};\n\n// TODO: Make StackRouter not do this...\n// Detect if the params came from StackRouter using `params` to pass around internal state.\nfunction isInvalidParams(\n  params?: Record<string, any>\n): params is StateAsParams {\n  if (!params) {\n    return false;\n  }\n\n  if (\n    \"params\" in params &&\n    typeof params.params === \"object\" &&\n    !!params.params\n  ) {\n    return true;\n  }\n\n  return (\n    \"initial\" in params &&\n    typeof params.initial === \"boolean\" &&\n    // \"path\" in params &&\n    \"screen\" in params\n  );\n}\n\nconst getParamName = (pattern: string) =>\n  pattern.replace(/^[:*]/, \"\").replace(/\\?$/, \"\");\n\nconst joinPaths = (...paths: string[]): string =>\n  ([] as string[])\n    .concat(...paths.map((p) => p.split(\"/\")))\n    .filter(Boolean)\n    .join(\"/\");\n\nconst createConfigItem = (\n  config: PathConfig<object> | string,\n  parentPattern?: string\n): ConfigItem => {\n  if (typeof config === \"string\") {\n    // If a string is specified as the value of the key(e.g. Foo: '/path'), use it as the pattern\n    const pattern = parentPattern ? joinPaths(parentPattern, config) : config;\n\n    return { pattern };\n  }\n\n  if (config.exact && config.path === undefined) {\n    throw new Error(\n      \"A 'path' needs to be specified when specifying 'exact: true'. If you don't want this screen in the URL, specify it as empty string, e.g. `path: ''`.\"\n    );\n  }\n\n  // If an object is specified as the value (e.g. Foo: { ... }),\n  // It can have `path` property and `screens` prop which has nested configs\n  const pattern =\n    config.exact !== true\n      ? joinPaths(parentPattern || \"\", config.path || \"\")\n      : config.path || \"\";\n\n  const screens = config.screens\n    ? createNormalizedConfigs(config.screens, pattern)\n    : undefined;\n\n  return {\n    // Normalize pattern to remove any leading, trailing slashes, duplicate slashes etc.\n    pattern: pattern?.split(\"/\").filter(Boolean).join(\"/\"),\n    stringify: config.stringify,\n    screens,\n    initialRouteName: config.initialRouteName,\n  };\n};\n\nconst createNormalizedConfigs = (\n  options: PathConfigMap<object>,\n  pattern?: string\n): Record<string, ConfigItem> =>\n  Object.fromEntries(\n    Object.entries(options).map(([name, c]) => [\n      name,\n      createConfigItem(c, pattern),\n    ])\n  );\n"],"mappings":"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"},"metadata":{},"sourceType":"module"}