{"version":3,"file":"getPathFromState.js","names":[],"sources":["esm/fork/getPathFromState.js"],"sourcesContent":["import * as sharedModUtils from \"./_shared\";\nimport {\n  appendBaseUrl,\n  getPathWithConventionsCollapsed\n} from \"./getPathFromState-mods\";\nimport { validatePathConfig } from \"./validatePathConfig\";\nconst NAV_PARAM_SCREEN = \"screen\";\nconst NAV_PARAM_PARAMS = \"params\";\nconst NAV_PARAM_KEY = \"key\";\nconst getActiveRoute = (state) => {\n  const 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  return route;\n};\nconst cachedNormalizedConfigs = /* @__PURE__ */ new WeakMap();\nconst getNormalizedConfigs = (options) => {\n  if (!options?.screens) return {};\n  const cached = cachedNormalizedConfigs.get(options?.screens);\n  if (cached) return cached;\n  const normalizedConfigs = createNormalizedConfigs(options.screens);\n  cachedNormalizedConfigs.set(options.screens, normalizedConfigs);\n  return normalizedConfigs;\n};\nfunction getPathFromState(state, options) {\n  return getPathDataFromState(state, options).path;\n}\nfunction getPathDataFromState(state, options) {\n  if (state == null) {\n    throw Error(\n      \"Got 'undefined' for the navigation state. You must pass a valid state object.\"\n    );\n  }\n  if (options) {\n    validatePathConfig(options);\n  }\n  const configs = getNormalizedConfigs(options);\n  let path = \"/\";\n  let current = state;\n  const allParams = {};\n  while (current) {\n    if (!current.routes?.length) {\n      break;\n    }\n    let index = typeof current.index === \"number\" ? current.index : 0;\n    let route = current.routes[index];\n    let pattern;\n    let focusedParams;\n    const focusedRoute = getActiveRoute(state);\n    let currentOptions = configs;\n    const nestedRouteNames = [];\n    let hasNext = true;\n    while (route.name in currentOptions && hasNext) {\n      pattern = currentOptions[route.name].pattern;\n      nestedRouteNames.push(route.name);\n      if (route.params) {\n        const stringify = currentOptions[route.name]?.stringify;\n        const currentParams = Object.fromEntries(\n          Object.entries(route.params).flatMap(([key, value]) => {\n            if (key === NAV_PARAM_SCREEN || key === NAV_PARAM_PARAMS || key === NAV_PARAM_KEY) {\n              return [];\n            }\n            return [\n              [\n                key,\n                stringify?.[key] ? stringify[key](value) : Array.isArray(value) ? value.map(String) : typeof value === \"undefined\" ? value : String(value)\n              ]\n            ];\n          })\n        );\n        Object.assign(allParams, currentParams);\n        if (focusedRoute === route) {\n          focusedParams = { ...currentParams };\n          pattern?.split(\"/\").filter((p) => sharedModUtils.isDynamicPart(p)).forEach((p) => {\n            const name = sharedModUtils.getParamName(p);\n            if (focusedParams) {\n              delete focusedParams[name];\n            }\n          });\n        }\n      }\n      if (!currentOptions[route.name].screens || route.state === void 0) {\n        const screens = currentOptions[route.name].screens;\n        const screen = route.params && NAV_PARAM_SCREEN in route.params ? route.params[NAV_PARAM_SCREEN]?.toString() : screens ? Object.keys(screens)[0] : void 0;\n        if (screen && screens && currentOptions[route.name].screens?.[screen]) {\n          route = {\n            ...screens[screen],\n            name: screen,\n            key: screen,\n            params: route.params?.[NAV_PARAM_PARAMS]\n          };\n          currentOptions = screens;\n        } else {\n          hasNext = false;\n        }\n      } else {\n        index = typeof route.state.index === \"number\" ? route.state.index : route.state.routes.length - 1;\n        const nextRoute = route.state.routes[index];\n        const nestedConfig = currentOptions[route.name].screens;\n        if (nestedConfig && nextRoute.name in nestedConfig) {\n          route = nextRoute;\n          currentOptions = nestedConfig;\n        } else {\n          hasNext = false;\n        }\n      }\n    }\n    if (currentOptions[route.name] !== void 0) {\n      if (pattern === void 0) {\n        pattern = nestedRouteNames.join(\"/\");\n      }\n      path += getPathWithConventionsCollapsed({\n        ...options,\n        pattern,\n        route,\n        params: allParams,\n        initialRouteName: configs[route.name]?.initialRouteName\n      });\n    } else if (!route.name.startsWith(\"+\")) {\n      path += encodeURIComponent(route.name);\n    }\n    if (!focusedParams) {\n      focusedParams = { ...focusedRoute.params };\n    }\n    if (route.state) {\n      path += \"/\";\n    } else if (focusedParams) {\n      for (const param in focusedParams) {\n        if (focusedParams[param] === \"undefined\") {\n          delete focusedParams[param];\n        }\n      }\n      delete focusedParams[\"#\"];\n      const query = new URLSearchParams(focusedParams).toString();\n      if (query) {\n        path += `?${query}`;\n      }\n    }\n    current = route.state;\n  }\n  path = path.replace(/\\/+/g, \"/\");\n  path = path.length > 1 ? path.replace(/\\/$/, \"\") : path;\n  if (options?.path) {\n    path = joinPaths(options.path, path);\n  }\n  path = appendBaseUrl(path);\n  if (allParams[\"#\"]) {\n    path += `#${allParams[\"#\"]}`;\n  }\n  return { path, params: allParams };\n}\nconst joinPaths = (...paths) => [].concat(...paths.map((p) => p.split(\"/\"))).filter(Boolean).join(\"/\");\nconst createConfigItem = (config, parentPattern) => {\n  if (typeof config === \"string\") {\n    const pattern2 = parentPattern ? joinPaths(parentPattern, config) : config;\n    return { pattern: pattern2 };\n  }\n  if (config.exact && config.path === void 0) {\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  const pattern = config.exact !== true ? joinPaths(parentPattern || \"\", config.path || \"\") : config.path || \"\";\n  const screens = config.screens ? createNormalizedConfigs(config.screens, pattern) : void 0;\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  };\n};\nconst createNormalizedConfigs = (options, pattern) => Object.fromEntries(\n  Object.entries(options).map(([name, c]) => {\n    const result = createConfigItem(c, pattern);\n    return [name, result];\n  })\n);\nvar getPathFromState_default = getPathFromState;\nexport {\n  getPathFromState_default as default,\n  getPathDataFromState,\n  getPathFromState\n};\n//# sourceMappingURL=getPathFromState.js.map\n"],"mappings":"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"}