{"version":3,"file":"getReactNavigationConfig.js","names":[],"sources":["esm/getReactNavigationConfig.js"],"sourcesContent":["import { getContextKey, matchDynamicName } from \"./router/matchers\";\nconst layoutRouteNamePrefix = \"__one_layout:\";\nfunction convertDynamicRouteToReactNavigation(segment) {\n  if (segment === \"index\") {\n    return \"\";\n  }\n  if (segment === \"+not-found\") {\n    return \"*not-found\";\n  }\n  const dynamicMatch = matchDynamicName(segment);\n  if (dynamicMatch) {\n    if (dynamicMatch.deep) {\n      return \"*\" + dynamicMatch.name;\n    }\n    return `:${dynamicMatch.name}`;\n  }\n  return segment;\n}\nfunction parseRouteSegments(segments) {\n  return (\n    // NOTE: When there are nested routes without layouts\n    // the node.route will be something like `app/home/index`\n    // this needs to be split to ensure each segment is parsed correctly.\n    segments.split(\"/\").map(convertDynamicRouteToReactNavigation).filter(Boolean).join(\"/\")\n  );\n}\nfunction hasDescendantWithRoute(node, route) {\n  return node.children.some(\n    (child) => child.route === route || hasDescendantWithRoute(child, route)\n  );\n}\nfunction getReactNavigationRouteName(node) {\n  if (node.children.length && hasDescendantWithRoute(node, node.route)) {\n    return `${layoutRouteNamePrefix}${node.contextKey}`;\n  }\n  return node.route;\n}\nfunction focusedRoute(state) {\n  return state.routes[state.index ?? state.routes.length - 1];\n}\nfunction resolveInitialRouteNameFromState(contextKey, state) {\n  const contextSegments = contextKey.split(\"/\").filter(Boolean);\n  let current = state;\n  let consumedSegments = 0;\n  while (consumedSegments < contextSegments.length) {\n    if (!current?.routes.length) return void 0;\n    const route = focusedRoute(current);\n    if (!route?.state) return void 0;\n    if (route.name.startsWith(layoutRouteNamePrefix)) {\n      const routeContextSegments = getContextKey(\n        route.name.slice(layoutRouteNamePrefix.length)\n      ).split(\"/\").filter(Boolean);\n      if (routeContextSegments.length <= consumedSegments || routeContextSegments.join(\"/\") !== contextSegments.slice(0, routeContextSegments.length).join(\"/\")) {\n        return void 0;\n      }\n      consumedSegments = routeContextSegments.length;\n    } else {\n      const routeSegments = route.name.split(\"/\").filter(Boolean);\n      if (route.name !== contextSegments.slice(consumedSegments, consumedSegments + routeSegments.length).join(\"/\")) {\n        return void 0;\n      }\n      consumedSegments += routeSegments.length;\n    }\n    current = route.state;\n  }\n  return current?.routes.length ? focusedRoute(current)?.name : void 0;\n}\nfunction getReactNavigationInitialRouteName(nodes, initialRouteName) {\n  if (!initialRouteName) return void 0;\n  const initialRoute = nodes.find((node) => node.route === initialRouteName);\n  return initialRoute ? getReactNavigationRouteName(initialRoute) : initialRouteName;\n}\nfunction convertRouteNodeToScreen(node, metaOnly) {\n  const path = parseRouteSegments(node.route);\n  if (!node.children.length) {\n    if (!metaOnly) {\n      return {\n        path,\n        screens: {},\n        _route: node\n      };\n    }\n    return path;\n  }\n  const screens = getReactNavigationScreensConfig(node.children, metaOnly);\n  const screen = {\n    path,\n    screens,\n    // NOTE: This is bad because it forces all Layout Routes\n    // to be loaded into memory. We should move towards a system where\n    // the initial route name is either loaded asynchronously in the Layout Route\n    // or defined via a file system convention.\n    initialRouteName: getReactNavigationInitialRouteName(\n      node.children,\n      node.initialRouteName\n    )\n  };\n  if (!metaOnly) {\n    screen._route = node;\n  }\n  return screen;\n}\nfunction getReactNavigationScreensConfig(nodes, metaOnly) {\n  return Object.fromEntries(\n    nodes.map(\n      (node) => [\n        getReactNavigationRouteName(node),\n        convertRouteNodeToScreen(node, metaOnly)\n      ]\n    )\n  );\n}\nfunction getReactNavigationConfig(routes, metaOnly) {\n  if (!routes) {\n    return { screens: {} };\n  }\n  return {\n    initialRouteName: getReactNavigationInitialRouteName(\n      routes.children,\n      routes.initialRouteName\n    ),\n    screens: getReactNavigationScreensConfig(routes.children, metaOnly)\n  };\n}\nexport {\n  getReactNavigationConfig,\n  getReactNavigationRouteName,\n  resolveInitialRouteNameFromState\n};\n//# sourceMappingURL=getReactNavigationConfig.js.map\n"],"mappings":"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"}