{"ast":null,"code":"\"use strict\";\n\nexport function getActionFromState(state, options) {\n  const normalizedConfig = options ? createNormalizedConfigItem(options) : {};\n  const routes = state.index != null ? state.routes.slice(0, state.index + 1) : state.routes;\n  if (routes.length === 0) {\n    return undefined;\n  }\n  if (!(routes.length === 1 && routes[0].key === undefined || routes.length === 2 && routes[0].key === undefined && routes[0].name === normalizedConfig?.initialRouteName && routes[1].key === undefined)) {\n    return {\n      type: 'RESET',\n      payload: state\n    };\n  }\n  const route = state.routes[state.index ?? state.routes.length - 1];\n  let current = route?.state;\n  let config = normalizedConfig?.screens?.[route?.name];\n  let params = Object.assign({}, route.params);\n  const payload = route ? {\n    name: route.name,\n    path: route.path,\n    params\n  } : undefined;\n  if (payload && config?.screens && Object.keys(config.screens).length) {\n    payload.pop = true;\n  }\n  while (current) {\n    if (current.routes.length === 0) {\n      return undefined;\n    }\n    const routes = current.index != null ? current.routes.slice(0, current.index + 1) : current.routes;\n    const route = routes[routes.length - 1];\n    Object.assign(params, {\n      initial: undefined,\n      screen: undefined,\n      params: undefined,\n      state: undefined\n    });\n    if (routes.length === 1 && routes[0].key === undefined) {\n      params.initial = true;\n      params.screen = route.name;\n    } else if (routes.length === 2 && routes[0].key === undefined && routes[0].name === config?.initialRouteName && routes[1].key === undefined) {\n      params.initial = false;\n      params.screen = route.name;\n    } else {\n      params.state = current;\n      break;\n    }\n    if (route.state) {\n      params.params = Object.assign({}, route.params);\n      params.pop = true;\n      params = params.params;\n    } else {\n      params.path = route.path;\n      params.params = route.params;\n    }\n    current = route.state;\n    config = config?.screens?.[route.name];\n    if (config?.screens && Object.keys(config.screens).length) {\n      params.pop = true;\n    }\n  }\n  if (payload?.params.screen || payload?.params.state) {\n    payload.pop = true;\n  }\n  if (!payload) {\n    return;\n  }\n  return {\n    type: 'NAVIGATE',\n    payload\n  };\n}\nconst createNormalizedConfigItem = config => typeof config === 'object' && config != null ? {\n  initialRouteName: config.initialRouteName,\n  screens: config.screens != null ? createNormalizedConfigs(config.screens) : undefined\n} : {};\nconst createNormalizedConfigs = options => Object.entries(options).reduce((acc, [k, v]) => {\n  acc[k] = createNormalizedConfigItem(v);\n  return acc;\n}, {});","map":{"version":3,"names":["getActionFromState","state","options","normalizedConfig","createNormalizedConfigItem","routes","index","slice","length","undefined","key","name","initialRouteName","type","payload","route","current","config","screens","params","Object","assign","path","keys","pop","initial","screen","createNormalizedConfigs","entries","reduce","acc","k","v"],"sources":["/Users/pmouli/Documents/GitHub.nosync/boots-strapper/mobile/node_modules/@react-navigation/core/src/getActionFromState.tsx"],"sourcesContent":["import type {\n  CommonActions,\n  NavigationState,\n  ParamListBase,\n  PartialRoute,\n  PartialState,\n  Route,\n} from '@react-navigation/routers';\n\nimport type { NavigatorScreenParams, PathConfig, PathConfigMap } from './types';\n\ntype ConfigItem = {\n  initialRouteName?: string;\n  screens?: Record<string, ConfigItem>;\n};\n\ntype Options = {\n  initialRouteName?: string;\n  screens: PathConfigMap<object>;\n};\n\ntype NavigateAction<State extends NavigationState> = {\n  type: 'NAVIGATE';\n  payload: {\n    name: string;\n    params?: NavigatorScreenParams<State>;\n    path?: string;\n  };\n};\n\nexport function getActionFromState(\n  state: PartialState<NavigationState>,\n  options?: Options\n): NavigateAction<NavigationState> | CommonActions.Action | undefined {\n  // Create a normalized configs object which will be easier to use\n  const normalizedConfig = options\n    ? createNormalizedConfigItem(options as PathConfig<object> | string)\n    : {};\n\n  const routes =\n    state.index != null ? state.routes.slice(0, state.index + 1) : state.routes;\n\n  if (routes.length === 0) {\n    return undefined;\n  }\n\n  if (\n    !(\n      (routes.length === 1 && routes[0].key === undefined) ||\n      (routes.length === 2 &&\n        routes[0].key === undefined &&\n        routes[0].name === normalizedConfig?.initialRouteName &&\n        routes[1].key === undefined)\n    )\n  ) {\n    return {\n      type: 'RESET',\n      payload: state,\n    };\n  }\n\n  const route = state.routes[state.index ?? state.routes.length - 1];\n\n  let current: PartialState<NavigationState> | undefined = route?.state;\n  let config: ConfigItem | undefined = normalizedConfig?.screens?.[route?.name];\n  let params = { ...route.params } as NavigatorScreenParams<ParamListBase>;\n\n  const payload:\n    | {\n        name: string;\n        params: NavigatorScreenParams<ParamListBase>;\n        path?: string;\n        pop?: boolean;\n      }\n    | undefined = route\n    ? { name: route.name, path: route.path, params }\n    : undefined;\n\n  // If the screen contains a navigator, pop other screens to navigate to it\n  // This avoid pushing multiple instances of navigators onto a stack\n  //\n  // For example:\n  // - RootStack\n  //   - BottomTabs\n  //   - SomeScreen\n  //\n  // In this case, if deep linking to `BottomTabs`, we should pop `SomeScreen`\n  // Otherwise, we'll end up with 2 instances of `BottomTabs` in the stack\n  //\n  // There are 2 ways we can detect if a screen contains a navigator:\n  // - The route contains nested state in `route.state`\n  // - Nested screens are defined in the config\n  if (payload && config?.screens && Object.keys(config.screens).length) {\n    payload.pop = true;\n  }\n\n  while (current) {\n    if (current.routes.length === 0) {\n      return undefined;\n    }\n\n    const routes =\n      current.index != null\n        ? current.routes.slice(0, current.index + 1)\n        : current.routes;\n\n    const route: Route<string> | PartialRoute<Route<string>> =\n      routes[routes.length - 1];\n\n    // Explicitly set to override existing value when merging params\n    Object.assign(params, {\n      initial: undefined,\n      screen: undefined,\n      params: undefined,\n      state: undefined,\n    });\n\n    if (routes.length === 1 && routes[0].key === undefined) {\n      params.initial = true;\n      params.screen = route.name;\n    } else if (\n      routes.length === 2 &&\n      routes[0].key === undefined &&\n      routes[0].name === config?.initialRouteName &&\n      routes[1].key === undefined\n    ) {\n      params.initial = false;\n      params.screen = route.name;\n    } else {\n      params.state = current;\n      break;\n    }\n\n    if (route.state) {\n      params.params = { ...route.params };\n      params.pop = true;\n      params = params.params as NavigatorScreenParams<ParamListBase>;\n    } else {\n      params.path = route.path;\n      params.params = route.params;\n    }\n\n    current = route.state;\n    config = config?.screens?.[route.name];\n\n    if (config?.screens && Object.keys(config.screens).length) {\n      params.pop = true;\n    }\n  }\n\n  if (payload?.params.screen || payload?.params.state) {\n    payload.pop = true;\n  }\n\n  if (!payload) {\n    return;\n  }\n\n  // Try to construct payload for a `NAVIGATE` action from the state\n  // This lets us preserve the navigation state and not lose it\n  return {\n    type: 'NAVIGATE',\n    payload,\n  };\n}\n\nconst createNormalizedConfigItem = (config: PathConfig<object> | string) =>\n  typeof config === 'object' && config != null\n    ? {\n        initialRouteName: config.initialRouteName,\n        screens:\n          config.screens != null\n            ? createNormalizedConfigs(config.screens)\n            : undefined,\n      }\n    : {};\n\nconst createNormalizedConfigs = (options: PathConfigMap<object>) =>\n  Object.entries(options).reduce<Record<string, ConfigItem>>((acc, [k, v]) => {\n    acc[k] = createNormalizedConfigItem(v);\n    return acc;\n  }, {});\n"],"mappings":"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","ignoreList":[]},"metadata":{"hasCjsExports":false},"sourceType":"module","externalDependencies":[]}