@react-navigation/core 6.0.3 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/lib/commonjs/BaseNavigationContainer.js +13 -9
  2. package/lib/commonjs/BaseNavigationContainer.js.map +1 -1
  3. package/lib/commonjs/CurrentRenderContext.js.map +1 -1
  4. package/lib/commonjs/EnsureSingleNavigator.js +5 -4
  5. package/lib/commonjs/EnsureSingleNavigator.js.map +1 -1
  6. package/lib/commonjs/NavigationContainerRefContext.js.map +1 -1
  7. package/lib/commonjs/NavigationContext.js.map +1 -1
  8. package/lib/commonjs/NavigationHelpersContext.js.map +1 -1
  9. package/lib/commonjs/NavigationRouteContext.js.map +1 -1
  10. package/lib/commonjs/SceneView.js +11 -10
  11. package/lib/commonjs/SceneView.js.map +1 -1
  12. package/lib/commonjs/UnhandledActionContext.js.map +1 -1
  13. package/lib/commonjs/createNavigationContainerRef.js +11 -6
  14. package/lib/commonjs/createNavigationContainerRef.js.map +1 -1
  15. package/lib/commonjs/fromEntries.js +3 -1
  16. package/lib/commonjs/fromEntries.js.map +1 -1
  17. package/lib/commonjs/getActionFromState.js +2 -1
  18. package/lib/commonjs/getActionFromState.js.map +1 -1
  19. package/lib/commonjs/getPathFromState.js +13 -3
  20. package/lib/commonjs/getPathFromState.js.map +1 -1
  21. package/lib/commonjs/getStateFromPath.js +12 -2
  22. package/lib/commonjs/getStateFromPath.js.map +1 -1
  23. package/lib/commonjs/index.js +24 -24
  24. package/lib/commonjs/isArrayEqual.js +9 -1
  25. package/lib/commonjs/isArrayEqual.js.map +1 -1
  26. package/lib/commonjs/isRecordEqual.js +25 -0
  27. package/lib/commonjs/isRecordEqual.js.map +1 -0
  28. package/lib/commonjs/types.js.map +1 -1
  29. package/lib/commonjs/useChildListeners.js.map +1 -1
  30. package/lib/commonjs/useCurrentRender.js +6 -5
  31. package/lib/commonjs/useCurrentRender.js.map +1 -1
  32. package/lib/commonjs/useDescriptors.js +18 -17
  33. package/lib/commonjs/useDescriptors.js.map +1 -1
  34. package/lib/commonjs/useEventEmitter.js +7 -6
  35. package/lib/commonjs/useEventEmitter.js.map +1 -1
  36. package/lib/commonjs/useFocusEvents.js +5 -4
  37. package/lib/commonjs/useFocusEvents.js.map +1 -1
  38. package/lib/commonjs/useFocusedListenersChildrenAdapter.js +5 -4
  39. package/lib/commonjs/useFocusedListenersChildrenAdapter.js.map +1 -1
  40. package/lib/commonjs/useKeyedChildListeners.js.map +1 -1
  41. package/lib/commonjs/useNavigationBuilder.js +52 -20
  42. package/lib/commonjs/useNavigationBuilder.js.map +1 -1
  43. package/lib/commonjs/useNavigationCache.js +26 -10
  44. package/lib/commonjs/useNavigationCache.js.map +1 -1
  45. package/lib/commonjs/useNavigationHelpers.js +32 -10
  46. package/lib/commonjs/useNavigationHelpers.js.map +1 -1
  47. package/lib/commonjs/useOnAction.js +13 -11
  48. package/lib/commonjs/useOnAction.js.map +1 -1
  49. package/lib/commonjs/useOnGetState.js +5 -4
  50. package/lib/commonjs/useOnGetState.js.map +1 -1
  51. package/lib/commonjs/useOnPreventRemove.js +6 -5
  52. package/lib/commonjs/useOnPreventRemove.js.map +1 -1
  53. package/lib/commonjs/useOnRouteFocus.js +7 -6
  54. package/lib/commonjs/useOnRouteFocus.js.map +1 -1
  55. package/lib/commonjs/useOptionsGetters.js +6 -5
  56. package/lib/commonjs/useOptionsGetters.js.map +1 -1
  57. package/lib/commonjs/useRouteCache.js +1 -1
  58. package/lib/commonjs/useScheduleUpdate.js +1 -1
  59. package/lib/commonjs/validatePathConfig.js +5 -2
  60. package/lib/commonjs/validatePathConfig.js.map +1 -1
  61. package/lib/module/BaseNavigationContainer.js +13 -9
  62. package/lib/module/BaseNavigationContainer.js.map +1 -1
  63. package/lib/module/CurrentRenderContext.js.map +1 -1
  64. package/lib/module/EnsureSingleNavigator.js +4 -3
  65. package/lib/module/EnsureSingleNavigator.js.map +1 -1
  66. package/lib/module/NavigationContainerRefContext.js.map +1 -1
  67. package/lib/module/NavigationContext.js.map +1 -1
  68. package/lib/module/NavigationHelpersContext.js.map +1 -1
  69. package/lib/module/NavigationRouteContext.js.map +1 -1
  70. package/lib/module/SceneView.js +11 -10
  71. package/lib/module/SceneView.js.map +1 -1
  72. package/lib/module/UnhandledActionContext.js.map +1 -1
  73. package/lib/module/createNavigationContainerRef.js +10 -5
  74. package/lib/module/createNavigationContainerRef.js.map +1 -1
  75. package/lib/module/fromEntries.js +3 -1
  76. package/lib/module/fromEntries.js.map +1 -1
  77. package/lib/module/getActionFromState.js +2 -1
  78. package/lib/module/getActionFromState.js.map +1 -1
  79. package/lib/module/getPathFromState.js +13 -3
  80. package/lib/module/getPathFromState.js.map +1 -1
  81. package/lib/module/getStateFromPath.js +12 -2
  82. package/lib/module/getStateFromPath.js.map +1 -1
  83. package/lib/module/isArrayEqual.js +9 -1
  84. package/lib/module/isArrayEqual.js.map +1 -1
  85. package/lib/module/isRecordEqual.js +18 -0
  86. package/lib/module/isRecordEqual.js.map +1 -0
  87. package/lib/module/types.js.map +1 -1
  88. package/lib/module/useChildListeners.js.map +1 -1
  89. package/lib/module/useCurrentRender.js +6 -5
  90. package/lib/module/useCurrentRender.js.map +1 -1
  91. package/lib/module/useDescriptors.js +18 -17
  92. package/lib/module/useDescriptors.js.map +1 -1
  93. package/lib/module/useEventEmitter.js +7 -6
  94. package/lib/module/useEventEmitter.js.map +1 -1
  95. package/lib/module/useFocusEvents.js +5 -4
  96. package/lib/module/useFocusEvents.js.map +1 -1
  97. package/lib/module/useFocusedListenersChildrenAdapter.js +5 -4
  98. package/lib/module/useFocusedListenersChildrenAdapter.js.map +1 -1
  99. package/lib/module/useKeyedChildListeners.js.map +1 -1
  100. package/lib/module/useNavigationBuilder.js +51 -20
  101. package/lib/module/useNavigationBuilder.js.map +1 -1
  102. package/lib/module/useNavigationCache.js +26 -10
  103. package/lib/module/useNavigationCache.js.map +1 -1
  104. package/lib/module/useNavigationHelpers.js +32 -10
  105. package/lib/module/useNavigationHelpers.js.map +1 -1
  106. package/lib/module/useOnAction.js +13 -11
  107. package/lib/module/useOnAction.js.map +1 -1
  108. package/lib/module/useOnGetState.js +5 -4
  109. package/lib/module/useOnGetState.js.map +1 -1
  110. package/lib/module/useOnPreventRemove.js +6 -5
  111. package/lib/module/useOnPreventRemove.js.map +1 -1
  112. package/lib/module/useOnRouteFocus.js +7 -6
  113. package/lib/module/useOnRouteFocus.js.map +1 -1
  114. package/lib/module/useOptionsGetters.js +6 -5
  115. package/lib/module/useOptionsGetters.js.map +1 -1
  116. package/lib/module/validatePathConfig.js +5 -2
  117. package/lib/module/validatePathConfig.js.map +1 -1
  118. package/lib/typescript/src/NavigationContext.d.ts +1 -1
  119. package/lib/typescript/src/SceneView.d.ts +1 -1
  120. package/lib/typescript/src/isRecordEqual.d.ts +4 -0
  121. package/lib/typescript/src/types.d.ts +50 -18
  122. package/lib/typescript/src/useDescriptors.d.ts +13 -10
  123. package/lib/typescript/src/useNavigationBuilder.d.ts +12 -73
  124. package/lib/typescript/src/useNavigationCache.d.ts +1 -1
  125. package/lib/typescript/src/useNavigationHelpers.d.ts +7 -69
  126. package/package.json +5 -5
  127. package/src/CurrentRenderContext.tsx +3 -2
  128. package/src/EnsureSingleNavigator.tsx +7 -8
  129. package/src/NavigationContainerRefContext.tsx +3 -4
  130. package/src/NavigationContext.tsx +3 -2
  131. package/src/NavigationHelpersContext.tsx +3 -2
  132. package/src/NavigationRouteContext.tsx +3 -2
  133. package/src/SceneView.tsx +7 -1
  134. package/src/UnhandledActionContext.tsx +3 -4
  135. package/src/createNavigationContainerRef.tsx +3 -1
  136. package/src/isArrayEqual.tsx +9 -1
  137. package/src/isRecordEqual.tsx +20 -0
  138. package/src/types.tsx +70 -21
  139. package/src/useChildListeners.tsx +3 -5
  140. package/src/useDescriptors.tsx +16 -8
  141. package/src/useKeyedChildListeners.tsx +6 -8
  142. package/src/useNavigationBuilder.tsx +90 -27
  143. package/src/useNavigationCache.tsx +17 -1
  144. package/src/useNavigationHelpers.tsx +39 -15
@@ -5,9 +5,10 @@ export const SingleNavigatorContext = /*#__PURE__*/React.createContext(undefined
5
5
  * Component which ensures that there's only one navigator nested under it.
6
6
  */
7
7
 
8
- export default function EnsureSingleNavigator({
9
- children
10
- }) {
8
+ export default function EnsureSingleNavigator(_ref) {
9
+ let {
10
+ children
11
+ } = _ref;
11
12
  const navigatorKeyRef = React.useRef();
12
13
  const value = React.useMemo(() => ({
13
14
  register(key) {
@@ -1 +1 @@
1
- {"version":3,"sources":["EnsureSingleNavigator.tsx"],"names":["React","MULTIPLE_NAVIGATOR_ERROR","SingleNavigatorContext","createContext","undefined","EnsureSingleNavigator","children","navigatorKeyRef","useRef","value","useMemo","register","key","currentKey","current","Error","unregister"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAMA,MAAMC,wBAAwB,GAAI,oSAAlC;AAEA,OAAO,MAAMC,sBAAsB,gBACjCF,KAAK,CAACG,aAAN,CAMEC,SANF,CADK;AASP;AACA;AACA;;AACA,eAAe,SAASC,qBAAT,CAA+B;AAAEC,EAAAA;AAAF,CAA/B,EAAoD;AACjE,QAAMC,eAAe,GAAGP,KAAK,CAACQ,MAAN,EAAxB;AAEA,QAAMC,KAAK,GAAGT,KAAK,CAACU,OAAN,CACZ,OAAO;AACLC,IAAAA,QAAQ,CAACC,GAAD,EAAc;AACpB,YAAMC,UAAU,GAAGN,eAAe,CAACO,OAAnC;;AAEA,UAAID,UAAU,KAAKT,SAAf,IAA4BQ,GAAG,KAAKC,UAAxC,EAAoD;AAClD,cAAM,IAAIE,KAAJ,CAAUd,wBAAV,CAAN;AACD;;AAEDM,MAAAA,eAAe,CAACO,OAAhB,GAA0BF,GAA1B;AACD,KATI;;AAULI,IAAAA,UAAU,CAACJ,GAAD,EAAc;AACtB,YAAMC,UAAU,GAAGN,eAAe,CAACO,OAAnC;;AAEA,UAAIF,GAAG,KAAKC,UAAZ,EAAwB;AACtB;AACD;;AAEDN,MAAAA,eAAe,CAACO,OAAhB,GAA0BV,SAA1B;AACD;;AAlBI,GAAP,CADY,EAqBZ,EArBY,CAAd;AAwBA,sBACE,oBAAC,sBAAD,CAAwB,QAAxB;AAAiC,IAAA,KAAK,EAAEK;AAAxC,KACGH,QADH,CADF;AAKD","sourcesContent":["import * as React from 'react';\n\ntype Props = {\n children: React.ReactNode;\n};\n\nconst MULTIPLE_NAVIGATOR_ERROR = `Another navigator is already registered for this container. You likely have multiple navigators under a single \"NavigationContainer\" or \"Screen\". Make sure each navigator is under a separate \"Screen\" container. See https://reactnavigation.org/docs/nesting-navigators for a guide on nesting.`;\n\nexport const SingleNavigatorContext =\n React.createContext<\n | {\n register(key: string): void;\n unregister(key: string): void;\n }\n | undefined\n >(undefined);\n\n/**\n * Component which ensures that there's only one navigator nested under it.\n */\nexport default function EnsureSingleNavigator({ children }: Props) {\n const navigatorKeyRef = React.useRef<string | undefined>();\n\n const value = React.useMemo(\n () => ({\n register(key: string) {\n const currentKey = navigatorKeyRef.current;\n\n if (currentKey !== undefined && key !== currentKey) {\n throw new Error(MULTIPLE_NAVIGATOR_ERROR);\n }\n\n navigatorKeyRef.current = key;\n },\n unregister(key: string) {\n const currentKey = navigatorKeyRef.current;\n\n if (key !== currentKey) {\n return;\n }\n\n navigatorKeyRef.current = undefined;\n },\n }),\n []\n );\n\n return (\n <SingleNavigatorContext.Provider value={value}>\n {children}\n </SingleNavigatorContext.Provider>\n );\n}\n"]}
1
+ {"version":3,"sources":["EnsureSingleNavigator.tsx"],"names":["React","MULTIPLE_NAVIGATOR_ERROR","SingleNavigatorContext","createContext","undefined","EnsureSingleNavigator","children","navigatorKeyRef","useRef","value","useMemo","register","key","currentKey","current","Error","unregister"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAMA,MAAMC,wBAAwB,GAAI,oSAAlC;AAEA,OAAO,MAAMC,sBAAsB,gBAAGF,KAAK,CAACG,aAAN,CAMpCC,SANoC,CAA/B;AAQP;AACA;AACA;;AACA,eAAe,SAASC,qBAAT,OAAoD;AAAA,MAArB;AAAEC,IAAAA;AAAF,GAAqB;AACjE,QAAMC,eAAe,GAAGP,KAAK,CAACQ,MAAN,EAAxB;AAEA,QAAMC,KAAK,GAAGT,KAAK,CAACU,OAAN,CACZ,OAAO;AACLC,IAAAA,QAAQ,CAACC,GAAD,EAAc;AACpB,YAAMC,UAAU,GAAGN,eAAe,CAACO,OAAnC;;AAEA,UAAID,UAAU,KAAKT,SAAf,IAA4BQ,GAAG,KAAKC,UAAxC,EAAoD;AAClD,cAAM,IAAIE,KAAJ,CAAUd,wBAAV,CAAN;AACD;;AAEDM,MAAAA,eAAe,CAACO,OAAhB,GAA0BF,GAA1B;AACD,KATI;;AAULI,IAAAA,UAAU,CAACJ,GAAD,EAAc;AACtB,YAAMC,UAAU,GAAGN,eAAe,CAACO,OAAnC;;AAEA,UAAIF,GAAG,KAAKC,UAAZ,EAAwB;AACtB;AACD;;AAEDN,MAAAA,eAAe,CAACO,OAAhB,GAA0BV,SAA1B;AACD;;AAlBI,GAAP,CADY,EAqBZ,EArBY,CAAd;AAwBA,sBACE,oBAAC,sBAAD,CAAwB,QAAxB;AAAiC,IAAA,KAAK,EAAEK;AAAxC,KACGH,QADH,CADF;AAKD","sourcesContent":["import * as React from 'react';\n\ntype Props = {\n children: React.ReactNode;\n};\n\nconst MULTIPLE_NAVIGATOR_ERROR = `Another navigator is already registered for this container. You likely have multiple navigators under a single \"NavigationContainer\" or \"Screen\". Make sure each navigator is under a separate \"Screen\" container. See https://reactnavigation.org/docs/nesting-navigators for a guide on nesting.`;\n\nexport const SingleNavigatorContext = React.createContext<\n | {\n register(key: string): void;\n unregister(key: string): void;\n }\n | undefined\n>(undefined);\n\n/**\n * Component which ensures that there's only one navigator nested under it.\n */\nexport default function EnsureSingleNavigator({ children }: Props) {\n const navigatorKeyRef = React.useRef<string | undefined>();\n\n const value = React.useMemo(\n () => ({\n register(key: string) {\n const currentKey = navigatorKeyRef.current;\n\n if (currentKey !== undefined && key !== currentKey) {\n throw new Error(MULTIPLE_NAVIGATOR_ERROR);\n }\n\n navigatorKeyRef.current = key;\n },\n unregister(key: string) {\n const currentKey = navigatorKeyRef.current;\n\n if (key !== currentKey) {\n return;\n }\n\n navigatorKeyRef.current = undefined;\n },\n }),\n []\n );\n\n return (\n <SingleNavigatorContext.Provider value={value}>\n {children}\n </SingleNavigatorContext.Provider>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["NavigationContainerRefContext.tsx"],"names":["React","NavigationContainerRefContext","createContext","undefined"],"mappings":"AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;;AAIA;AACA;AACA;AACA,MAAMC,6BAA6B,gBACjCD,KAAK,CAACE,aAAN,CACEC,SADF,CADF;AAKA,eAAeF,6BAAf","sourcesContent":["import type { ParamListBase } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport type { NavigationContainerRef } from './types';\n\n/**\n * Context which holds the route prop for a screen.\n */\nconst NavigationContainerRefContext =\n React.createContext<NavigationContainerRef<ParamListBase> | undefined>(\n undefined\n );\n\nexport default NavigationContainerRefContext;\n"]}
1
+ {"version":3,"sources":["NavigationContainerRefContext.tsx"],"names":["React","NavigationContainerRefContext","createContext","undefined"],"mappings":"AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;;AAIA;AACA;AACA;AACA,MAAMC,6BAA6B,gBAAGD,KAAK,CAACE,aAAN,CAEpCC,SAFoC,CAAtC;AAIA,eAAeF,6BAAf","sourcesContent":["import type { ParamListBase } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport type { NavigationContainerRef } from './types';\n\n/**\n * Context which holds the route prop for a screen.\n */\nconst NavigationContainerRefContext = React.createContext<\n NavigationContainerRef<ParamListBase> | undefined\n>(undefined);\n\nexport default NavigationContainerRefContext;\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["NavigationContext.tsx"],"names":["React","NavigationContext","createContext","undefined"],"mappings":"AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;;AAIA;AACA;AACA;AACA,MAAMC,iBAAiB,gBACrBD,KAAK,CAACE,aAAN,CAA+DC,SAA/D,CADF;AAGA,eAAeF,iBAAf","sourcesContent":["import type { ParamListBase } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport type { NavigationProp } from './types';\n\n/**\n * Context which holds the navigation prop for a screen.\n */\nconst NavigationContext =\n React.createContext<NavigationProp<ParamListBase> | undefined>(undefined);\n\nexport default NavigationContext;\n"]}
1
+ {"version":3,"sources":["NavigationContext.tsx"],"names":["React","NavigationContext","createContext","undefined"],"mappings":"AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;;AAIA;AACA;AACA;AACA,MAAMC,iBAAiB,gBAAGD,KAAK,CAACE,aAAN,CAExBC,SAFwB,CAA1B;AAIA,eAAeF,iBAAf","sourcesContent":["import type { ParamListBase } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport type { NavigationProp } from './types';\n\n/**\n * Context which holds the navigation prop for a screen.\n */\nconst NavigationContext = React.createContext<\n NavigationProp<ParamListBase> | undefined\n>(undefined);\n\nexport default NavigationContext;\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["NavigationHelpersContext.tsx"],"names":["React","NavigationHelpersContext","createContext","undefined"],"mappings":"AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;;AAIA;AACA;AACA;AACA;AACA,MAAMC,wBAAwB,gBAC5BD,KAAK,CAACE,aAAN,CAAkEC,SAAlE,CADF;AAGA,eAAeF,wBAAf","sourcesContent":["import type { ParamListBase } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport type { NavigationHelpers } from './types';\n\n/**\n * Context which holds the navigation helpers of the parent navigator.\n * Navigators should use this context in their view component.\n */\nconst NavigationHelpersContext =\n React.createContext<NavigationHelpers<ParamListBase> | undefined>(undefined);\n\nexport default NavigationHelpersContext;\n"]}
1
+ {"version":3,"sources":["NavigationHelpersContext.tsx"],"names":["React","NavigationHelpersContext","createContext","undefined"],"mappings":"AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;;AAIA;AACA;AACA;AACA;AACA,MAAMC,wBAAwB,gBAAGD,KAAK,CAACE,aAAN,CAE/BC,SAF+B,CAAjC;AAIA,eAAeF,wBAAf","sourcesContent":["import type { ParamListBase } from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport type { NavigationHelpers } from './types';\n\n/**\n * Context which holds the navigation helpers of the parent navigator.\n * Navigators should use this context in their view component.\n */\nconst NavigationHelpersContext = React.createContext<\n NavigationHelpers<ParamListBase> | undefined\n>(undefined);\n\nexport default NavigationHelpersContext;\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["NavigationRouteContext.tsx"],"names":["React","NavigationRouteContext","createContext","undefined"],"mappings":"AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA;AACA;AACA;;AACA,MAAMC,sBAAsB,gBAC1BD,KAAK,CAACE,aAAN,CAA+CC,SAA/C,CADF;AAGA,eAAeF,sBAAf","sourcesContent":["import type { Route } from '@react-navigation/routers';\nimport * as React from 'react';\n\n/**\n * Context which holds the route prop for a screen.\n */\nconst NavigationRouteContext =\n React.createContext<Route<string> | undefined>(undefined);\n\nexport default NavigationRouteContext;\n"]}
1
+ {"version":3,"sources":["NavigationRouteContext.tsx"],"names":["React","NavigationRouteContext","createContext","undefined"],"mappings":"AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA;AACA;AACA;;AACA,MAAMC,sBAAsB,gBAAGD,KAAK,CAACE,aAAN,CAC7BC,SAD6B,CAA/B;AAIA,eAAeF,sBAAf","sourcesContent":["import type { Route } from '@react-navigation/routers';\nimport * as React from 'react';\n\n/**\n * Context which holds the route prop for a screen.\n */\nconst NavigationRouteContext = React.createContext<Route<string> | undefined>(\n undefined\n);\n\nexport default NavigationRouteContext;\n"]}
@@ -8,16 +8,17 @@ import useOptionsGetters from './useOptionsGetters';
8
8
  * Component which takes care of rendering the screen for a route.
9
9
  * It provides all required contexts and applies optimizations when applicable.
10
10
  */
11
- export default function SceneView({
12
- screen,
13
- route,
14
- navigation,
15
- routeState,
16
- getState,
17
- setState,
18
- options,
19
- clearOptions
20
- }) {
11
+ export default function SceneView(_ref) {
12
+ let {
13
+ screen,
14
+ route,
15
+ navigation,
16
+ routeState,
17
+ getState,
18
+ setState,
19
+ options,
20
+ clearOptions
21
+ } = _ref;
21
22
  const navigatorKeyRef = React.useRef();
22
23
  const getKey = React.useCallback(() => navigatorKeyRef.current, []);
23
24
  const {
@@ -1 +1 @@
1
- {"version":3,"sources":["SceneView.tsx"],"names":["React","EnsureSingleNavigator","NavigationStateContext","StaticContainer","useOptionsGetters","SceneView","screen","route","navigation","routeState","getState","setState","options","clearOptions","navigatorKeyRef","useRef","getKey","useCallback","current","addOptionsGetter","key","setKey","getCurrentState","state","currentRoute","routes","find","r","undefined","setCurrentState","child","map","isInitialRef","useEffect","getIsInitial","context","useMemo","ScreenComponent","getComponent","component","name","children"],"mappings":"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","sourcesContent":["import type {\n NavigationState,\n ParamListBase,\n PartialState,\n Route,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport EnsureSingleNavigator from './EnsureSingleNavigator';\nimport NavigationStateContext from './NavigationStateContext';\nimport StaticContainer from './StaticContainer';\nimport type { NavigationProp, RouteConfigComponent } from './types';\nimport useOptionsGetters from './useOptionsGetters';\n\ntype Props<State extends NavigationState, ScreenOptions extends {}> = {\n screen: RouteConfigComponent<ParamListBase, string> & { name: string };\n navigation: NavigationProp<ParamListBase, string, State, ScreenOptions>;\n route: Route<string>;\n routeState: NavigationState | PartialState<NavigationState> | undefined;\n getState: () => State;\n setState: (state: State) => void;\n options: object;\n clearOptions: () => void;\n};\n\n/**\n * Component which takes care of rendering the screen for a route.\n * It provides all required contexts and applies optimizations when applicable.\n */\nexport default function SceneView<\n State extends NavigationState,\n ScreenOptions extends {}\n>({\n screen,\n route,\n navigation,\n routeState,\n getState,\n setState,\n options,\n clearOptions,\n}: Props<State, ScreenOptions>) {\n const navigatorKeyRef = React.useRef<string | undefined>();\n const getKey = React.useCallback(() => navigatorKeyRef.current, []);\n\n const { addOptionsGetter } = useOptionsGetters({\n key: route.key,\n options,\n navigation,\n });\n\n const setKey = React.useCallback((key: string) => {\n navigatorKeyRef.current = key;\n }, []);\n\n const getCurrentState = React.useCallback(() => {\n const state = getState();\n const currentRoute = state.routes.find((r) => r.key === route.key);\n\n return currentRoute ? currentRoute.state : undefined;\n }, [getState, route.key]);\n\n const setCurrentState = React.useCallback(\n (child: NavigationState | PartialState<NavigationState> | undefined) => {\n const state = getState();\n\n setState({\n ...state,\n routes: state.routes.map((r) =>\n r.key === route.key ? { ...r, state: child } : r\n ),\n });\n },\n [getState, route.key, setState]\n );\n\n const isInitialRef = React.useRef(true);\n\n React.useEffect(() => {\n isInitialRef.current = false;\n });\n\n // Clear options set by this screen when it is unmounted\n React.useEffect(() => {\n return clearOptions;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const getIsInitial = React.useCallback(() => isInitialRef.current, []);\n\n const context = React.useMemo(\n () => ({\n state: routeState,\n getState: getCurrentState,\n setState: setCurrentState,\n getKey,\n setKey,\n getIsInitial,\n addOptionsGetter,\n }),\n [\n routeState,\n getCurrentState,\n setCurrentState,\n getKey,\n setKey,\n getIsInitial,\n addOptionsGetter,\n ]\n );\n\n const ScreenComponent = screen.getComponent\n ? screen.getComponent()\n : screen.component;\n\n return (\n <NavigationStateContext.Provider value={context}>\n <EnsureSingleNavigator>\n <StaticContainer\n name={screen.name}\n render={ScreenComponent || screen.children}\n navigation={navigation}\n route={route}\n >\n {ScreenComponent !== undefined ? (\n <ScreenComponent navigation={navigation} route={route} />\n ) : screen.children !== undefined ? (\n screen.children({ navigation, route })\n ) : null}\n </StaticContainer>\n </EnsureSingleNavigator>\n </NavigationStateContext.Provider>\n );\n}\n"]}
1
+ {"version":3,"sources":["SceneView.tsx"],"names":["React","EnsureSingleNavigator","NavigationStateContext","StaticContainer","useOptionsGetters","SceneView","screen","route","navigation","routeState","getState","setState","options","clearOptions","navigatorKeyRef","useRef","getKey","useCallback","current","addOptionsGetter","key","setKey","getCurrentState","state","currentRoute","routes","find","r","undefined","setCurrentState","child","map","isInitialRef","useEffect","getIsInitial","context","useMemo","ScreenComponent","getComponent","component","name","children"],"mappings":"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","sourcesContent":["import type {\n NavigationState,\n ParamListBase,\n PartialState,\n Route,\n} from '@react-navigation/routers';\nimport * as React from 'react';\n\nimport EnsureSingleNavigator from './EnsureSingleNavigator';\nimport NavigationStateContext from './NavigationStateContext';\nimport StaticContainer from './StaticContainer';\nimport type { NavigationProp, RouteConfigComponent } from './types';\nimport useOptionsGetters from './useOptionsGetters';\n\ntype Props<State extends NavigationState, ScreenOptions extends {}> = {\n screen: RouteConfigComponent<ParamListBase, string> & { name: string };\n navigation: NavigationProp<\n ParamListBase,\n string,\n string | undefined,\n State,\n ScreenOptions\n >;\n route: Route<string>;\n routeState: NavigationState | PartialState<NavigationState> | undefined;\n getState: () => State;\n setState: (state: State) => void;\n options: object;\n clearOptions: () => void;\n};\n\n/**\n * Component which takes care of rendering the screen for a route.\n * It provides all required contexts and applies optimizations when applicable.\n */\nexport default function SceneView<\n State extends NavigationState,\n ScreenOptions extends {}\n>({\n screen,\n route,\n navigation,\n routeState,\n getState,\n setState,\n options,\n clearOptions,\n}: Props<State, ScreenOptions>) {\n const navigatorKeyRef = React.useRef<string | undefined>();\n const getKey = React.useCallback(() => navigatorKeyRef.current, []);\n\n const { addOptionsGetter } = useOptionsGetters({\n key: route.key,\n options,\n navigation,\n });\n\n const setKey = React.useCallback((key: string) => {\n navigatorKeyRef.current = key;\n }, []);\n\n const getCurrentState = React.useCallback(() => {\n const state = getState();\n const currentRoute = state.routes.find((r) => r.key === route.key);\n\n return currentRoute ? currentRoute.state : undefined;\n }, [getState, route.key]);\n\n const setCurrentState = React.useCallback(\n (child: NavigationState | PartialState<NavigationState> | undefined) => {\n const state = getState();\n\n setState({\n ...state,\n routes: state.routes.map((r) =>\n r.key === route.key ? { ...r, state: child } : r\n ),\n });\n },\n [getState, route.key, setState]\n );\n\n const isInitialRef = React.useRef(true);\n\n React.useEffect(() => {\n isInitialRef.current = false;\n });\n\n // Clear options set by this screen when it is unmounted\n React.useEffect(() => {\n return clearOptions;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const getIsInitial = React.useCallback(() => isInitialRef.current, []);\n\n const context = React.useMemo(\n () => ({\n state: routeState,\n getState: getCurrentState,\n setState: setCurrentState,\n getKey,\n setKey,\n getIsInitial,\n addOptionsGetter,\n }),\n [\n routeState,\n getCurrentState,\n setCurrentState,\n getKey,\n setKey,\n getIsInitial,\n addOptionsGetter,\n ]\n );\n\n const ScreenComponent = screen.getComponent\n ? screen.getComponent()\n : screen.component;\n\n return (\n <NavigationStateContext.Provider value={context}>\n <EnsureSingleNavigator>\n <StaticContainer\n name={screen.name}\n render={ScreenComponent || screen.children}\n navigation={navigation}\n route={route}\n >\n {ScreenComponent !== undefined ? (\n <ScreenComponent navigation={navigation} route={route} />\n ) : screen.children !== undefined ? (\n screen.children({ navigation, route })\n ) : null}\n </StaticContainer>\n </EnsureSingleNavigator>\n </NavigationStateContext.Provider>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["UnhandledActionContext.tsx"],"names":["React","UnhandledActionContext","createContext","undefined"],"mappings":"AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA,MAAMC,sBAAsB,gBAC1BD,KAAK,CAACE,aAAN,CACEC,SADF,CADF;AAKA,eAAeF,sBAAf","sourcesContent":["import type { NavigationAction } from '@react-navigation/routers';\nimport * as React from 'react';\n\nconst UnhandledActionContext =\n React.createContext<((action: NavigationAction) => void) | undefined>(\n undefined\n );\n\nexport default UnhandledActionContext;\n"]}
1
+ {"version":3,"sources":["UnhandledActionContext.tsx"],"names":["React","UnhandledActionContext","createContext","undefined"],"mappings":"AACA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA,MAAMC,sBAAsB,gBAAGD,KAAK,CAACE,aAAN,CAE7BC,SAF6B,CAA/B;AAIA,eAAeF,sBAAf","sourcesContent":["import type { NavigationAction } from '@react-navigation/routers';\nimport * as React from 'react';\n\nconst UnhandledActionContext = React.createContext<\n ((action: NavigationAction) => void) | undefined\n>(undefined);\n\nexport default UnhandledActionContext;\n"]}
@@ -5,9 +5,9 @@ export default function createNavigationContainerRef() {
5
5
  const listeners = {};
6
6
 
7
7
  const removeListener = (event, callback) => {
8
- var _listeners$event;
9
-
10
- listeners[event] = (_listeners$event = listeners[event]) === null || _listeners$event === void 0 ? void 0 : _listeners$event.filter(cb => cb !== callback);
8
+ if (listeners[event]) {
9
+ listeners[event] = listeners[event].filter(cb => cb !== callback);
10
+ }
11
11
  };
12
12
 
13
13
  let current = null;
@@ -20,7 +20,8 @@ export default function createNavigationContainerRef() {
20
20
  current = value;
21
21
 
22
22
  if (value != null) {
23
- Object.entries(listeners).forEach(([event, callbacks]) => {
23
+ Object.entries(listeners).forEach(_ref => {
24
+ let [event, callbacks] = _ref;
24
25
  callbacks.forEach(callback => {
25
26
  value.addListener(event, callback);
26
27
  });
@@ -36,7 +37,11 @@ export default function createNavigationContainerRef() {
36
37
  return current.isReady();
37
38
  },
38
39
  ...methods.reduce((acc, name) => {
39
- acc[name] = (...args) => {
40
+ acc[name] = function () {
41
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
42
+ args[_key] = arguments[_key];
43
+ }
44
+
40
45
  if (current == null) {
41
46
  switch (name) {
42
47
  case 'addListener':
@@ -1 +1 @@
1
- {"version":3,"sources":["createNavigationContainerRef.tsx"],"names":["CommonActions","NOT_INITIALIZED_ERROR","createNavigationContainerRef","methods","Object","keys","listeners","removeListener","event","callback","filter","cb","current","ref","value","entries","forEach","callbacks","addListener","isReady","reduce","acc","name","args","push","console","error"],"mappings":"AAAA,SAASA,aAAT,QAA8B,2BAA9B;AAQA,OAAO,MAAMC,qBAAqB,GAChC,+QADK;AAGP,eAAe,SAASC,4BAAT,GAEmC;AAChD,QAAMC,OAAO,GAAG,CACd,GAAGC,MAAM,CAACC,IAAP,CAAYL,aAAZ,CADW,EAEd,aAFc,EAGd,gBAHc,EAId,WAJc,EAKd,UALc,EAMd,WANc,EAOd,WAPc,EAQd,cARc,EASd,UATc,EAUd,WAVc,EAWd,iBAXc,EAYd,mBAZc,CAAhB;AAeA,QAAMM,SAAuD,GAAG,EAAhE;;AAEA,QAAMC,cAAc,GAAG,CACrBC,KADqB,EAErBC,QAFqB,KAGlB;AAAA;;AACHH,IAAAA,SAAS,CAACE,KAAD,CAAT,uBAAmBF,SAAS,CAACE,KAAD,CAA5B,qDAAmB,iBAAkBE,MAAlB,CAA0BC,EAAD,IAAQA,EAAE,KAAKF,QAAxC,CAAnB;AACD,GALD;;AAOA,MAAIG,OAAiD,GAAG,IAAxD;AAEA,QAAMC,GAAiD,GAAG;AACxD,QAAID,OAAJ,GAAc;AACZ,aAAOA,OAAP;AACD,KAHuD;;AAIxD,QAAIA,OAAJ,CAAYE,KAAZ,EAA6D;AAC3DF,MAAAA,OAAO,GAAGE,KAAV;;AAEA,UAAIA,KAAK,IAAI,IAAb,EAAmB;AACjBV,QAAAA,MAAM,CAACW,OAAP,CAAeT,SAAf,EAA0BU,OAA1B,CAAkC,CAAC,CAACR,KAAD,EAAQS,SAAR,CAAD,KAAwB;AACxDA,UAAAA,SAAS,CAACD,OAAV,CAAmBP,QAAD,IAAc;AAC9BK,YAAAA,KAAK,CAACI,WAAN,CACEV,KADF,EAEEC,QAFF;AAID,WALD;AAMD,SAPD;AAQD;AACF,KAjBuD;;AAkBxDU,IAAAA,OAAO,EAAE,MAAM;AACb,UAAIP,OAAO,IAAI,IAAf,EAAqB;AACnB,eAAO,KAAP;AACD;;AAED,aAAOA,OAAO,CAACO,OAAR,EAAP;AACD,KAxBuD;AAyBxD,OAAGhB,OAAO,CAACiB,MAAR,CAAoB,CAACC,GAAD,EAAMC,IAAN,KAAe;AACpCD,MAAAA,GAAG,CAACC,IAAD,CAAH,GAAY,CAAC,GAAGC,IAAJ,KAAoB;AAC9B,YAAIX,OAAO,IAAI,IAAf,EAAqB;AACnB,kBAAQU,IAAR;AACE,iBAAK,aAAL;AAAoB;AAClB,sBAAM,CAACd,KAAD,EAAQC,QAAR,IAAoBc,IAA1B;AAEAjB,gBAAAA,SAAS,CAACE,KAAD,CAAT,GAAmBF,SAAS,CAACE,KAAD,CAAT,IAAoB,EAAvC;AACAF,gBAAAA,SAAS,CAACE,KAAD,CAAT,CAAiBgB,IAAjB,CAAsBf,QAAtB;AAEA,uBAAO,MAAMF,cAAc,CAACC,KAAD,EAAQC,QAAR,CAA3B;AACD;;AACD,iBAAK,gBAAL;AAAuB;AACrB,sBAAM,CAACD,KAAD,EAAQC,QAAR,IAAoBc,IAA1B;AAEAhB,gBAAAA,cAAc,CAACC,KAAD,EAAQC,QAAR,CAAd;AACA;AACD;;AACD;AACEgB,cAAAA,OAAO,CAACC,KAAR,CAAczB,qBAAd;AAhBJ;AAkBD,SAnBD,MAmBO;AACL;AACA,iBAAOW,OAAO,CAACU,IAAD,CAAP,CAAc,GAAGC,IAAjB,CAAP;AACD;AACF,OAxBD;;AAyBA,aAAOF,GAAP;AACD,KA3BE,EA2BA,EA3BA;AAzBqD,GAA1D;AAuDA,SAAOR,GAAP;AACD","sourcesContent":["import { CommonActions } from '@react-navigation/routers';\n\nimport type {\n NavigationContainerEventMap,\n NavigationContainerRef,\n NavigationContainerRefWithCurrent,\n} from './types';\n\nexport const NOT_INITIALIZED_ERROR =\n \"The 'navigation' object hasn't been initialized yet. This might happen if you don't have a navigator mounted, or if the navigator hasn't finished mounting. See https://reactnavigation.org/docs/navigating-without-navigation-prop#handling-initialization for more details.\";\n\nexport default function createNavigationContainerRef<\n ParamList extends {} = ReactNavigation.RootParamList\n>(): NavigationContainerRefWithCurrent<ParamList> {\n const methods = [\n ...Object.keys(CommonActions),\n 'addListener',\n 'removeListener',\n 'resetRoot',\n 'dispatch',\n 'isFocused',\n 'canGoBack',\n 'getRootState',\n 'getState',\n 'getParent',\n 'getCurrentRoute',\n 'getCurrentOptions',\n ] as const;\n\n const listeners: Record<string, ((...args: any[]) => void)[]> = {};\n\n const removeListener = (\n event: string,\n callback: (...args: any[]) => void\n ) => {\n listeners[event] = listeners[event]?.filter((cb) => cb !== callback);\n };\n\n let current: NavigationContainerRef<ParamList> | null = null;\n\n const ref: NavigationContainerRefWithCurrent<ParamList> = {\n get current() {\n return current;\n },\n set current(value: NavigationContainerRef<ParamList> | null) {\n current = value;\n\n if (value != null) {\n Object.entries(listeners).forEach(([event, callbacks]) => {\n callbacks.forEach((callback) => {\n value.addListener(\n event as keyof NavigationContainerEventMap,\n callback\n );\n });\n });\n }\n },\n isReady: () => {\n if (current == null) {\n return false;\n }\n\n return current.isReady();\n },\n ...methods.reduce<any>((acc, name) => {\n acc[name] = (...args: any[]) => {\n if (current == null) {\n switch (name) {\n case 'addListener': {\n const [event, callback] = args;\n\n listeners[event] = listeners[event] || [];\n listeners[event].push(callback);\n\n return () => removeListener(event, callback);\n }\n case 'removeListener': {\n const [event, callback] = args;\n\n removeListener(event, callback);\n break;\n }\n default:\n console.error(NOT_INITIALIZED_ERROR);\n }\n } else {\n // @ts-expect-error: this is ok\n return current[name](...args);\n }\n };\n return acc;\n }, {}),\n };\n\n return ref;\n}\n"]}
1
+ {"version":3,"sources":["createNavigationContainerRef.tsx"],"names":["CommonActions","NOT_INITIALIZED_ERROR","createNavigationContainerRef","methods","Object","keys","listeners","removeListener","event","callback","filter","cb","current","ref","value","entries","forEach","callbacks","addListener","isReady","reduce","acc","name","args","push","console","error"],"mappings":"AAAA,SAASA,aAAT,QAA8B,2BAA9B;AAQA,OAAO,MAAMC,qBAAqB,GAChC,+QADK;AAGP,eAAe,SAASC,4BAAT,GAEmC;AAChD,QAAMC,OAAO,GAAG,CACd,GAAGC,MAAM,CAACC,IAAP,CAAYL,aAAZ,CADW,EAEd,aAFc,EAGd,gBAHc,EAId,WAJc,EAKd,UALc,EAMd,WANc,EAOd,WAPc,EAQd,cARc,EASd,UATc,EAUd,WAVc,EAWd,iBAXc,EAYd,mBAZc,CAAhB;AAeA,QAAMM,SAAuD,GAAG,EAAhE;;AAEA,QAAMC,cAAc,GAAG,CACrBC,KADqB,EAErBC,QAFqB,KAGlB;AACH,QAAIH,SAAS,CAACE,KAAD,CAAb,EAAsB;AACpBF,MAAAA,SAAS,CAACE,KAAD,CAAT,GAAmBF,SAAS,CAACE,KAAD,CAAT,CAAiBE,MAAjB,CAAyBC,EAAD,IAAQA,EAAE,KAAKF,QAAvC,CAAnB;AACD;AACF,GAPD;;AASA,MAAIG,OAAiD,GAAG,IAAxD;AAEA,QAAMC,GAAiD,GAAG;AACxD,QAAID,OAAJ,GAAc;AACZ,aAAOA,OAAP;AACD,KAHuD;;AAIxD,QAAIA,OAAJ,CAAYE,KAAZ,EAA6D;AAC3DF,MAAAA,OAAO,GAAGE,KAAV;;AAEA,UAAIA,KAAK,IAAI,IAAb,EAAmB;AACjBV,QAAAA,MAAM,CAACW,OAAP,CAAeT,SAAf,EAA0BU,OAA1B,CAAkC,QAAwB;AAAA,cAAvB,CAACR,KAAD,EAAQS,SAAR,CAAuB;AACxDA,UAAAA,SAAS,CAACD,OAAV,CAAmBP,QAAD,IAAc;AAC9BK,YAAAA,KAAK,CAACI,WAAN,CACEV,KADF,EAEEC,QAFF;AAID,WALD;AAMD,SAPD;AAQD;AACF,KAjBuD;;AAkBxDU,IAAAA,OAAO,EAAE,MAAM;AACb,UAAIP,OAAO,IAAI,IAAf,EAAqB;AACnB,eAAO,KAAP;AACD;;AAED,aAAOA,OAAO,CAACO,OAAR,EAAP;AACD,KAxBuD;AAyBxD,OAAGhB,OAAO,CAACiB,MAAR,CAAoB,CAACC,GAAD,EAAMC,IAAN,KAAe;AACpCD,MAAAA,GAAG,CAACC,IAAD,CAAH,GAAY,YAAoB;AAAA,0CAAhBC,IAAgB;AAAhBA,UAAAA,IAAgB;AAAA;;AAC9B,YAAIX,OAAO,IAAI,IAAf,EAAqB;AACnB,kBAAQU,IAAR;AACE,iBAAK,aAAL;AAAoB;AAClB,sBAAM,CAACd,KAAD,EAAQC,QAAR,IAAoBc,IAA1B;AAEAjB,gBAAAA,SAAS,CAACE,KAAD,CAAT,GAAmBF,SAAS,CAACE,KAAD,CAAT,IAAoB,EAAvC;AACAF,gBAAAA,SAAS,CAACE,KAAD,CAAT,CAAiBgB,IAAjB,CAAsBf,QAAtB;AAEA,uBAAO,MAAMF,cAAc,CAACC,KAAD,EAAQC,QAAR,CAA3B;AACD;;AACD,iBAAK,gBAAL;AAAuB;AACrB,sBAAM,CAACD,KAAD,EAAQC,QAAR,IAAoBc,IAA1B;AAEAhB,gBAAAA,cAAc,CAACC,KAAD,EAAQC,QAAR,CAAd;AACA;AACD;;AACD;AACEgB,cAAAA,OAAO,CAACC,KAAR,CAAczB,qBAAd;AAhBJ;AAkBD,SAnBD,MAmBO;AACL;AACA,iBAAOW,OAAO,CAACU,IAAD,CAAP,CAAc,GAAGC,IAAjB,CAAP;AACD;AACF,OAxBD;;AAyBA,aAAOF,GAAP;AACD,KA3BE,EA2BA,EA3BA;AAzBqD,GAA1D;AAuDA,SAAOR,GAAP;AACD","sourcesContent":["import { CommonActions } from '@react-navigation/routers';\n\nimport type {\n NavigationContainerEventMap,\n NavigationContainerRef,\n NavigationContainerRefWithCurrent,\n} from './types';\n\nexport const NOT_INITIALIZED_ERROR =\n \"The 'navigation' object hasn't been initialized yet. This might happen if you don't have a navigator mounted, or if the navigator hasn't finished mounting. See https://reactnavigation.org/docs/navigating-without-navigation-prop#handling-initialization for more details.\";\n\nexport default function createNavigationContainerRef<\n ParamList extends {} = ReactNavigation.RootParamList\n>(): NavigationContainerRefWithCurrent<ParamList> {\n const methods = [\n ...Object.keys(CommonActions),\n 'addListener',\n 'removeListener',\n 'resetRoot',\n 'dispatch',\n 'isFocused',\n 'canGoBack',\n 'getRootState',\n 'getState',\n 'getParent',\n 'getCurrentRoute',\n 'getCurrentOptions',\n ] as const;\n\n const listeners: Record<string, ((...args: any[]) => void)[]> = {};\n\n const removeListener = (\n event: string,\n callback: (...args: any[]) => void\n ) => {\n if (listeners[event]) {\n listeners[event] = listeners[event].filter((cb) => cb !== callback);\n }\n };\n\n let current: NavigationContainerRef<ParamList> | null = null;\n\n const ref: NavigationContainerRefWithCurrent<ParamList> = {\n get current() {\n return current;\n },\n set current(value: NavigationContainerRef<ParamList> | null) {\n current = value;\n\n if (value != null) {\n Object.entries(listeners).forEach(([event, callbacks]) => {\n callbacks.forEach((callback) => {\n value.addListener(\n event as keyof NavigationContainerEventMap,\n callback\n );\n });\n });\n }\n },\n isReady: () => {\n if (current == null) {\n return false;\n }\n\n return current.isReady();\n },\n ...methods.reduce<any>((acc, name) => {\n acc[name] = (...args: any[]) => {\n if (current == null) {\n switch (name) {\n case 'addListener': {\n const [event, callback] = args;\n\n listeners[event] = listeners[event] || [];\n listeners[event].push(callback);\n\n return () => removeListener(event, callback);\n }\n case 'removeListener': {\n const [event, callback] = args;\n\n removeListener(event, callback);\n break;\n }\n default:\n console.error(NOT_INITIALIZED_ERROR);\n }\n } else {\n // @ts-expect-error: this is ok\n return current[name](...args);\n }\n };\n return acc;\n }, {}),\n };\n\n return ref;\n}\n"]}
@@ -1,6 +1,8 @@
1
1
  // Object.fromEntries is not available in older iOS versions
2
2
  export default function fromEntries(entries) {
3
- return entries.reduce((acc, [k, v]) => {
3
+ return entries.reduce((acc, _ref) => {
4
+ let [k, v] = _ref;
5
+
4
6
  if (acc.hasOwnProperty(k)) {
5
7
  throw new Error(`A value for key '${k}' already exists in the object.`);
6
8
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["fromEntries.tsx"],"names":["fromEntries","entries","reduce","acc","k","v","hasOwnProperty","Error"],"mappings":"AAAA;AACA,eAAe,SAASA,WAAT,CACbC,OADa,EAEb;AACA,SAAOA,OAAO,CAACC,MAAR,CAAe,CAACC,GAAD,EAAM,CAACC,CAAD,EAAIC,CAAJ,CAAN,KAAiB;AACrC,QAAIF,GAAG,CAACG,cAAJ,CAAmBF,CAAnB,CAAJ,EAA2B;AACzB,YAAM,IAAIG,KAAJ,CAAW,oBAAmBH,CAAE,iCAAhC,CAAN;AACD;;AAEDD,IAAAA,GAAG,CAACC,CAAD,CAAH,GAASC,CAAT;AACA,WAAOF,GAAP;AACD,GAPM,EAOJ,EAPI,CAAP;AAQD","sourcesContent":["// Object.fromEntries is not available in older iOS versions\nexport default function fromEntries<K extends string, V>(\n entries: (readonly [K, V])[]\n) {\n return entries.reduce((acc, [k, v]) => {\n if (acc.hasOwnProperty(k)) {\n throw new Error(`A value for key '${k}' already exists in the object.`);\n }\n\n acc[k] = v;\n return acc;\n }, {} as Record<K, V>);\n}\n"]}
1
+ {"version":3,"sources":["fromEntries.tsx"],"names":["fromEntries","entries","reduce","acc","k","v","hasOwnProperty","Error"],"mappings":"AAAA;AACA,eAAe,SAASA,WAAT,CACbC,OADa,EAEb;AACA,SAAOA,OAAO,CAACC,MAAR,CAAe,CAACC,GAAD,WAAiB;AAAA,QAAX,CAACC,CAAD,EAAIC,CAAJ,CAAW;;AACrC,QAAIF,GAAG,CAACG,cAAJ,CAAmBF,CAAnB,CAAJ,EAA2B;AACzB,YAAM,IAAIG,KAAJ,CAAW,oBAAmBH,CAAE,iCAAhC,CAAN;AACD;;AAEDD,IAAAA,GAAG,CAACC,CAAD,CAAH,GAASC,CAAT;AACA,WAAOF,GAAP;AACD,GAPM,EAOJ,EAPI,CAAP;AAQD","sourcesContent":["// Object.fromEntries is not available in older iOS versions\nexport default function fromEntries<K extends string, V>(\n entries: (readonly [K, V])[]\n) {\n return entries.reduce((acc, [k, v]) => {\n if (acc.hasOwnProperty(k)) {\n throw new Error(`A value for key '${k}' already exists in the object.`);\n }\n\n acc[k] = v;\n return acc;\n }, {} as Record<K, V>);\n}\n"]}
@@ -85,7 +85,8 @@ const createNormalizedConfigItem = config => typeof config === 'object' && confi
85
85
  screens: config.screens != null ? createNormalizedConfigs(config.screens) : undefined
86
86
  } : {};
87
87
 
88
- const createNormalizedConfigs = options => Object.entries(options).reduce((acc, [k, v]) => {
88
+ const createNormalizedConfigs = options => Object.entries(options).reduce((acc, _ref) => {
89
+ let [k, v] = _ref;
89
90
  acc[k] = createNormalizedConfigItem(v);
90
91
  return acc;
91
92
  }, {});
@@ -1 +1 @@
1
- {"version":3,"sources":["getActionFromState.tsx"],"names":["getActionFromState","state","options","normalizedConfig","createNormalizedConfigItem","routes","index","slice","length","undefined","key","name","initialRouteName","type","payload","route","current","config","screens","params","path","Object","assign","initial","screen","createNormalizedConfigs","entries","reduce","acc","k","v"],"mappings":"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","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 default 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<\n ParamListBase,\n NavigationState\n >;\n\n let payload = route\n ? { name: route.name, path: route.path, params }\n : undefined;\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 = params.params as NavigatorScreenParams<\n ParamListBase,\n NavigationState\n >;\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\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"]}
1
+ {"version":3,"sources":["getActionFromState.tsx"],"names":["getActionFromState","state","options","normalizedConfig","createNormalizedConfigItem","routes","index","slice","length","undefined","key","name","initialRouteName","type","payload","route","current","config","screens","params","path","Object","assign","initial","screen","createNormalizedConfigs","entries","reduce","acc","k","v"],"mappings":"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","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 default 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<\n ParamListBase,\n NavigationState\n >;\n\n let payload = route\n ? { name: route.name, path: route.path, params }\n : undefined;\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 = params.params as NavigatorScreenParams<\n ParamListBase,\n NavigationState\n >;\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\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"]}
@@ -76,7 +76,10 @@ export default function getPathFromState(state, options) {
76
76
  var _currentOptions$route;
77
77
 
78
78
  const stringify = (_currentOptions$route = currentOptions[route.name]) === null || _currentOptions$route === void 0 ? void 0 : _currentOptions$route.stringify;
79
- const currentParams = fromEntries(Object.entries(route.params).map(([key, value]) => [key, stringify !== null && stringify !== void 0 && stringify[key] ? stringify[key](value) : String(value)]));
79
+ const currentParams = fromEntries(Object.entries(route.params).map(_ref => {
80
+ let [key, value] = _ref;
81
+ return [key, stringify !== null && stringify !== void 0 && stringify[key] ? stringify[key](value) : String(value)];
82
+ }));
80
83
 
81
84
  if (pattern) {
82
85
  Object.assign(allParams, currentParams);
@@ -185,7 +188,13 @@ export default function getPathFromState(state, options) {
185
188
 
186
189
  const getParamName = pattern => pattern.replace(/^:/, '').replace(/\?$/, '');
187
190
 
188
- const joinPaths = (...paths) => [].concat(...paths.map(p => p.split('/'))).filter(Boolean).join('/');
191
+ const joinPaths = function () {
192
+ for (var _len = arguments.length, paths = new Array(_len), _key = 0; _key < _len; _key++) {
193
+ paths[_key] = arguments[_key];
194
+ }
195
+
196
+ return [].concat(...paths.map(p => p.split('/'))).filter(Boolean).join('/');
197
+ };
189
198
 
190
199
  const createConfigItem = (config, parentPattern) => {
191
200
  var _pattern2;
@@ -216,7 +225,8 @@ const createConfigItem = (config, parentPattern) => {
216
225
  };
217
226
  };
218
227
 
219
- const createNormalizedConfigs = (options, pattern) => fromEntries(Object.entries(options).map(([name, c]) => {
228
+ const createNormalizedConfigs = (options, pattern) => fromEntries(Object.entries(options).map(_ref2 => {
229
+ let [name, c] = _ref2;
220
230
  const result = createConfigItem(c, pattern);
221
231
  return [name, result];
222
232
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["getPathFromState.tsx"],"names":["queryString","fromEntries","validatePathConfig","getActiveRoute","state","route","index","routes","length","getPathFromState","options","Error","configs","screens","createNormalizedConfigs","path","current","allParams","pattern","focusedParams","focusedRoute","currentOptions","nestedRouteNames","hasNext","name","push","params","stringify","currentParams","Object","entries","map","key","value","String","assign","split","filter","p","startsWith","forEach","getParamName","undefined","nextRoute","nestedConfig","join","endsWith","encodeURIComponent","param","query","sort","replace","joinPaths","paths","concat","Boolean","createConfigItem","config","parentPattern","exact","c","result"],"mappings":"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","sourcesContent":["import type {\n NavigationState,\n PartialState,\n Route,\n} from '@react-navigation/routers';\nimport * as queryString from 'query-string';\n\nimport fromEntries from './fromEntries';\nimport type { PathConfig, PathConfigMap } from './types';\nimport validatePathConfig from './validatePathConfig';\n\ntype Options<ParamList> = {\n initialRouteName?: string;\n screens: PathConfigMap<ParamList>;\n};\n\ntype State = NavigationState | 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};\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 return route;\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 {}>(\n state: State,\n options?: Options<ParamList>\n): string {\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 if (options) {\n validatePathConfig(options);\n }\n\n // Create a normalized configs object which will be easier to use\n const configs: Record<string, ConfigItem> = options?.screens\n ? createNormalizedConfigs(options?.screens)\n : {};\n\n let path = '/';\n let current: State | undefined = state;\n\n const allParams: Record<string, any> = {};\n\n while (current) {\n let index = typeof current.index === 'number' ? current.index : 0;\n let route = current.routes[index] as Route<string> & {\n state?: State;\n };\n\n let pattern: string | undefined;\n\n let focusedParams: Record<string, any> | undefined;\n let focusedRoute = getActiveRoute(state);\n let currentOptions = configs;\n\n // Keep all the route names that appeared during going deeper in config in case the pattern is resolved to undefined\n let nestedRouteNames = [];\n\n let hasNext = true;\n\n while (route.name in currentOptions && hasNext) {\n pattern = currentOptions[route.name].pattern;\n\n nestedRouteNames.push(route.name);\n\n if (route.params) {\n const stringify = currentOptions[route.name]?.stringify;\n\n const currentParams = fromEntries(\n Object.entries(route.params).map(([key, value]) => [\n key,\n stringify?.[key] ? stringify[key](value) : String(value),\n ])\n );\n\n if (pattern) {\n Object.assign(allParams, currentParams);\n }\n\n if (focusedRoute === route) {\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 = { ...currentParams };\n\n pattern\n ?.split('/')\n .filter((p) => p.startsWith(':'))\n // eslint-disable-next-line no-loop-func\n .forEach((p) => {\n const name = getParamName(p);\n\n // Remove the params present in the pattern since we'll only use the rest for query string\n if (focusedParams) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete focusedParams[name];\n }\n });\n }\n }\n\n // If there is no `screens` property or no nested state, we return pattern\n if (!currentOptions[route.name].screens || route.state === undefined) {\n hasNext = false;\n } else {\n index =\n typeof route.state.index === 'number'\n ? route.state.index\n : route.state.routes.length - 1;\n\n const nextRoute = route.state.routes[index];\n const nestedConfig = currentOptions[route.name].screens;\n\n // if there is config for next route name, we go deeper\n if (nestedConfig && nextRoute.name in nestedConfig) {\n route = nextRoute as Route<string> & { state?: State };\n currentOptions = nestedConfig;\n } else {\n // If not, there is no sense in going deeper in config\n hasNext = false;\n }\n }\n }\n\n if (pattern === undefined) {\n pattern = nestedRouteNames.join('/');\n }\n\n if (currentOptions[route.name] !== undefined) {\n path += pattern\n .split('/')\n .map((p) => {\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 === '*') {\n return route.name;\n }\n\n // If the path has a pattern for a param, put the param in the path\n if (p.startsWith(':')) {\n const value = allParams[name];\n\n if (value === undefined && p.endsWith('?')) {\n // Optional params without value assigned in route.params should be ignored\n return '';\n }\n\n return encodeURIComponent(value);\n }\n\n return encodeURIComponent(p);\n })\n .join('/');\n } else {\n path += encodeURIComponent(route.name);\n }\n\n if (!focusedParams) {\n focusedParams = focusedRoute.params;\n }\n\n if (route.state) {\n path += '/';\n } else if (focusedParams) {\n for (let param in focusedParams) {\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\n if (query) {\n path += `?${query}`;\n }\n }\n\n current = route.state;\n }\n\n // Remove multiple as well as trailing slashes\n path = path.replace(/\\/+/g, '/');\n path = path.length > 1 ? path.replace(/\\/$/, '') : path;\n\n return path;\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 an object is specified as the value (e.g. Foo: { ... }),\n // It can have `path` property and `screens` prop which has nested configs\n let pattern: string | undefined;\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 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 };\n};\n\nconst createNormalizedConfigs = (\n options: PathConfigMap<object>,\n pattern?: string\n): Record<string, ConfigItem> =>\n fromEntries(\n Object.entries(options).map(([name, c]) => {\n const result = createConfigItem(c, pattern);\n\n return [name, result];\n })\n );\n"]}
1
+ {"version":3,"sources":["getPathFromState.tsx"],"names":["queryString","fromEntries","validatePathConfig","getActiveRoute","state","route","index","routes","length","getPathFromState","options","Error","configs","screens","createNormalizedConfigs","path","current","allParams","pattern","focusedParams","focusedRoute","currentOptions","nestedRouteNames","hasNext","name","push","params","stringify","currentParams","Object","entries","map","key","value","String","assign","split","filter","p","startsWith","forEach","getParamName","undefined","nextRoute","nestedConfig","join","endsWith","encodeURIComponent","param","query","sort","replace","joinPaths","paths","concat","Boolean","createConfigItem","config","parentPattern","exact","c","result"],"mappings":"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","sourcesContent":["import type {\n NavigationState,\n PartialState,\n Route,\n} from '@react-navigation/routers';\nimport * as queryString from 'query-string';\n\nimport fromEntries from './fromEntries';\nimport type { PathConfig, PathConfigMap } from './types';\nimport validatePathConfig from './validatePathConfig';\n\ntype Options<ParamList> = {\n initialRouteName?: string;\n screens: PathConfigMap<ParamList>;\n};\n\ntype State = NavigationState | 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};\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 return route;\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 {}>(\n state: State,\n options?: Options<ParamList>\n): string {\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 if (options) {\n validatePathConfig(options);\n }\n\n // Create a normalized configs object which will be easier to use\n const configs: Record<string, ConfigItem> = options?.screens\n ? createNormalizedConfigs(options?.screens)\n : {};\n\n let path = '/';\n let current: State | undefined = state;\n\n const allParams: Record<string, any> = {};\n\n while (current) {\n let index = typeof current.index === 'number' ? current.index : 0;\n let route = current.routes[index] as Route<string> & {\n state?: State;\n };\n\n let pattern: string | undefined;\n\n let focusedParams: Record<string, any> | undefined;\n let focusedRoute = getActiveRoute(state);\n let currentOptions = configs;\n\n // Keep all the route names that appeared during going deeper in config in case the pattern is resolved to undefined\n let nestedRouteNames = [];\n\n let hasNext = true;\n\n while (route.name in currentOptions && hasNext) {\n pattern = currentOptions[route.name].pattern;\n\n nestedRouteNames.push(route.name);\n\n if (route.params) {\n const stringify = currentOptions[route.name]?.stringify;\n\n const currentParams = fromEntries(\n Object.entries(route.params).map(([key, value]) => [\n key,\n stringify?.[key] ? stringify[key](value) : String(value),\n ])\n );\n\n if (pattern) {\n Object.assign(allParams, currentParams);\n }\n\n if (focusedRoute === route) {\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 = { ...currentParams };\n\n pattern\n ?.split('/')\n .filter((p) => p.startsWith(':'))\n // eslint-disable-next-line no-loop-func\n .forEach((p) => {\n const name = getParamName(p);\n\n // Remove the params present in the pattern since we'll only use the rest for query string\n if (focusedParams) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete focusedParams[name];\n }\n });\n }\n }\n\n // If there is no `screens` property or no nested state, we return pattern\n if (!currentOptions[route.name].screens || route.state === undefined) {\n hasNext = false;\n } else {\n index =\n typeof route.state.index === 'number'\n ? route.state.index\n : route.state.routes.length - 1;\n\n const nextRoute = route.state.routes[index];\n const nestedConfig = currentOptions[route.name].screens;\n\n // if there is config for next route name, we go deeper\n if (nestedConfig && nextRoute.name in nestedConfig) {\n route = nextRoute as Route<string> & { state?: State };\n currentOptions = nestedConfig;\n } else {\n // If not, there is no sense in going deeper in config\n hasNext = false;\n }\n }\n }\n\n if (pattern === undefined) {\n pattern = nestedRouteNames.join('/');\n }\n\n if (currentOptions[route.name] !== undefined) {\n path += pattern\n .split('/')\n .map((p) => {\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 === '*') {\n return route.name;\n }\n\n // If the path has a pattern for a param, put the param in the path\n if (p.startsWith(':')) {\n const value = allParams[name];\n\n if (value === undefined && p.endsWith('?')) {\n // Optional params without value assigned in route.params should be ignored\n return '';\n }\n\n return encodeURIComponent(value);\n }\n\n return encodeURIComponent(p);\n })\n .join('/');\n } else {\n path += encodeURIComponent(route.name);\n }\n\n if (!focusedParams) {\n focusedParams = focusedRoute.params;\n }\n\n if (route.state) {\n path += '/';\n } else if (focusedParams) {\n for (let param in focusedParams) {\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\n if (query) {\n path += `?${query}`;\n }\n }\n\n current = route.state;\n }\n\n // Remove multiple as well as trailing slashes\n path = path.replace(/\\/+/g, '/');\n path = path.length > 1 ? path.replace(/\\/$/, '') : path;\n\n return path;\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 an object is specified as the value (e.g. Foo: { ... }),\n // It can have `path` property and `screens` prop which has nested configs\n let pattern: string | undefined;\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 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 };\n};\n\nconst createNormalizedConfigs = (\n options: PathConfigMap<object>,\n pattern?: string\n): Record<string, ConfigItem> =>\n fromEntries(\n Object.entries(options).map(([name, c]) => {\n const result = createConfigItem(c, pattern);\n\n return [name, result];\n })\n );\n"]}
@@ -181,7 +181,13 @@ export default function getStateFromPath(path, options) {
181
181
  return result;
182
182
  }
183
183
 
184
- const joinPaths = (...paths) => [].concat(...paths.map(p => p.split('/'))).filter(Boolean).join('/');
184
+ const joinPaths = function () {
185
+ for (var _len = arguments.length, paths = new Array(_len), _key = 0; _key < _len; _key++) {
186
+ paths[_key] = arguments[_key];
187
+ }
188
+
189
+ return [].concat(...paths.map(p => p.split('/'))).filter(Boolean).join('/');
190
+ };
185
191
 
186
192
  const matchAgainstConfigs = (remaining, configs) => {
187
193
  let routes;
@@ -240,7 +246,11 @@ const matchAgainstConfigs = (remaining, configs) => {
240
246
  };
241
247
  };
242
248
 
243
- const createNormalizedConfigs = (screen, routeConfig, routeNames = [], initials, parentScreens, parentPattern) => {
249
+ const createNormalizedConfigs = function (screen, routeConfig) {
250
+ let routeNames = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
251
+ let initials = arguments.length > 3 ? arguments[3] : undefined;
252
+ let parentScreens = arguments.length > 4 ? arguments[4] : undefined;
253
+ let parentPattern = arguments.length > 5 ? arguments[5] : undefined;
244
254
  const configs = [];
245
255
  routeNames.push(screen);
246
256
  parentScreens.push(screen); // @ts-expect-error: we can't strongly typecheck this for now
@@ -1 +1 @@
1
- {"version":3,"sources":["getStateFromPath.tsx"],"names":["escape","queryString","findFocusedRoute","validatePathConfig","getStateFromPath","path","options","initialRoutes","initialRouteName","push","parentScreens","screens","remaining","replace","endsWith","undefined","routes","split","filter","Boolean","map","segment","name","decodeURIComponent","length","createNestedStateObject","configs","concat","Object","keys","key","createNormalizedConfigs","sort","a","b","pattern","routeNames","join","localeCompare","startsWith","aParts","bParts","i","Math","max","aWildCard","bWildCard","reduce","acc","config","intersects","every","it","Error","assign","match","find","c","screen","result","current","remainingPath","matchAgainstConfigs","regex","RegExp","source","joinPaths","paths","p","matchedParams","params","value","parse","routeConfig","initials","parentPattern","createConfigItem","exact","forEach","nestedConfig","pop","findParseConfigForRoute","routeName","flatConfig","findInitialRoute","sameParents","createStateObject","initialRoute","route","isEmpty","index","state","shift","nestedState","nestedStateIndex","parseQueryParams","parseConfig","query"],"mappings":"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","sourcesContent":["import type {\n InitialState,\n NavigationState,\n PartialState,\n} from '@react-navigation/routers';\nimport escape from 'escape-string-regexp';\nimport * as queryString from 'query-string';\n\nimport findFocusedRoute from './findFocusedRoute';\nimport type { PathConfigMap } from './types';\nimport validatePathConfig from './validatePathConfig';\n\ntype Options<ParamList extends {}> = {\n initialRouteName?: string;\n screens: PathConfigMap<ParamList>;\n};\n\ntype ParseConfig = Record<string, (value: string) => any>;\n\ntype RouteConfig = {\n screen: string;\n regex?: RegExp;\n path: string;\n pattern: string;\n routeNames: string[];\n parse?: ParseConfig;\n};\n\ntype InitialRouteConfig = {\n initialRouteName: string;\n parentScreens: string[];\n};\n\ntype ResultState = PartialState<NavigationState> & {\n state?: ResultState;\n};\n\ntype ParsedRoute = {\n name: string;\n path?: string;\n params?: Record<string, any> | undefined;\n};\n\n/**\n * Utility to parse a path string to initial state object accepted by the container.\n * This is useful for deep linking when we need to handle the incoming URL.\n *\n * @example\n * ```js\n * getStateFromPath(\n * '/chat/jane/42',\n * {\n * screens: {\n * Chat: {\n * path: 'chat/:author/:id',\n * parse: { id: Number }\n * }\n * }\n * }\n * )\n * ```\n * @param path Path string to parse and convert, e.g. /foo/bar?count=42.\n * @param options Extra options to fine-tune how to parse the path.\n */\nexport default function getStateFromPath<ParamList extends {}>(\n path: string,\n options?: Options<ParamList>\n): ResultState | undefined {\n if (options) {\n validatePathConfig(options);\n }\n\n let initialRoutes: InitialRouteConfig[] = [];\n\n if (options?.initialRouteName) {\n initialRoutes.push({\n initialRouteName: options.initialRouteName,\n parentScreens: [],\n });\n }\n\n const screens = options?.screens;\n\n let remaining = path\n .replace(/\\/+/g, '/') // Replace multiple slash (//) with single ones\n .replace(/^\\//, '') // Remove extra leading slash\n .replace(/\\?.*$/, ''); // Remove query params which we will handle later\n\n // Make sure there is a trailing slash\n remaining = remaining.endsWith('/') ? remaining : `${remaining}/`;\n\n if (screens === undefined) {\n // When no config is specified, use the path segments as route names\n const routes = remaining\n .split('/')\n .filter(Boolean)\n .map((segment) => {\n const name = decodeURIComponent(segment);\n return { name };\n });\n\n if (routes.length) {\n return createNestedStateObject(path, routes, initialRoutes);\n }\n\n return undefined;\n }\n\n // Create a normalized configs array which will be easier to use\n const configs = ([] as RouteConfig[])\n .concat(\n ...Object.keys(screens).map((key) =>\n createNormalizedConfigs(\n key,\n screens as PathConfigMap<object>,\n [],\n initialRoutes,\n []\n )\n )\n )\n .sort((a, b) => {\n // Sort config so that:\n // - the most exhaustive ones are always at the beginning\n // - patterns with wildcard are always at the end\n\n // If 2 patterns are same, move the one with less route names up\n // This is an error state, so it's only useful for consistent error messages\n if (a.pattern === b.pattern) {\n return b.routeNames.join('>').localeCompare(a.routeNames.join('>'));\n }\n\n // If one of the patterns starts with the other, it's more exhaustive\n // So move it up\n if (a.pattern.startsWith(b.pattern)) {\n return -1;\n }\n\n if (b.pattern.startsWith(a.pattern)) {\n return 1;\n }\n\n const aParts = a.pattern.split('/');\n const bParts = b.pattern.split('/');\n\n for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {\n // if b is longer, b get higher priority\n if (aParts[i] == null) {\n return 1;\n }\n // if a is longer, a get higher priority\n if (bParts[i] == null) {\n return -1;\n }\n const aWildCard = aParts[i] === '*' || aParts[i].startsWith(':');\n const bWildCard = bParts[i] === '*' || bParts[i].startsWith(':');\n // if both are wildcard we compare next component\n if (aWildCard && bWildCard) {\n continue;\n }\n // if only a is wild card, b get higher priority\n if (aWildCard) {\n return 1;\n }\n // if only b is wild card, a get higher priority\n if (bWildCard) {\n return -1;\n }\n }\n return bParts.length - aParts.length;\n });\n\n // Check for duplicate patterns in the config\n configs.reduce<Record<string, RouteConfig>>((acc, config) => {\n if (acc[config.pattern]) {\n const a = acc[config.pattern].routeNames;\n const b = config.routeNames;\n\n // It's not a problem if the path string omitted from a inner most screen\n // For example, it's ok if a path resolves to `A > B > C` or `A > B`\n const intersects =\n a.length > b.length\n ? b.every((it, i) => a[i] === it)\n : a.every((it, i) => b[i] === it);\n\n if (!intersects) {\n throw new Error(\n `Found conflicting screens with the same pattern. The pattern '${\n config.pattern\n }' resolves to both '${a.join(' > ')}' and '${b.join(\n ' > '\n )}'. Patterns must be unique and cannot resolve to more than one screen.`\n );\n }\n }\n\n return Object.assign(acc, {\n [config.pattern]: config,\n });\n }, {});\n\n if (remaining === '/') {\n // We need to add special handling of empty path so navigation to empty path also works\n // When handling empty path, we should only look at the root level config\n const match = configs.find(\n (config) =>\n config.path === '' &&\n config.routeNames.every(\n // Make sure that none of the parent configs have a non-empty path defined\n (name) => !configs.find((c) => c.screen === name)?.path\n )\n );\n\n if (match) {\n return createNestedStateObject(\n path,\n match.routeNames.map((name) => ({ name })),\n initialRoutes,\n configs\n );\n }\n\n return undefined;\n }\n\n let result: PartialState<NavigationState> | undefined;\n let current: PartialState<NavigationState> | undefined;\n\n // We match the whole path against the regex instead of segments\n // This makes sure matches such as wildcard will catch any unmatched routes, even if nested\n const { routes, remainingPath } = matchAgainstConfigs(\n remaining,\n configs.map((c) => ({\n ...c,\n // Add `$` to the regex to make sure it matches till end of the path and not just beginning\n regex: c.regex ? new RegExp(c.regex.source + '$') : undefined,\n }))\n );\n\n if (routes !== undefined) {\n // This will always be empty if full path matched\n current = createNestedStateObject(path, routes, initialRoutes, configs);\n remaining = remainingPath;\n result = current;\n }\n\n if (current == null || result == null) {\n return undefined;\n }\n\n return result;\n}\n\nconst joinPaths = (...paths: string[]): string =>\n ([] as string[])\n .concat(...paths.map((p) => p.split('/')))\n .filter(Boolean)\n .join('/');\n\nconst matchAgainstConfigs = (remaining: string, configs: RouteConfig[]) => {\n let routes: ParsedRoute[] | undefined;\n let remainingPath = remaining;\n\n // Go through all configs, and see if the next path segment matches our regex\n for (const config of configs) {\n if (!config.regex) {\n continue;\n }\n\n const match = remainingPath.match(config.regex);\n\n // If our regex matches, we need to extract params from the path\n if (match) {\n const matchedParams = config.pattern\n ?.split('/')\n .filter((p) => p.startsWith(':'))\n .reduce<Record<string, any>>(\n (acc, p, i) =>\n Object.assign(acc, {\n // The param segments appear every second item starting from 2 in the regex match result\n [p]: match![(i + 1) * 2].replace(/\\//, ''),\n }),\n {}\n );\n\n routes = config.routeNames.map((name) => {\n const config = configs.find((c) => c.screen === name);\n const params = config?.path\n ?.split('/')\n .filter((p) => p.startsWith(':'))\n .reduce<Record<string, any>>((acc, p) => {\n const value = matchedParams[p];\n\n if (value) {\n const key = p.replace(/^:/, '').replace(/\\?$/, '');\n acc[key] = config.parse?.[key] ? config.parse[key](value) : value;\n }\n\n return acc;\n }, {});\n\n if (params && Object.keys(params).length) {\n return { name, params };\n }\n\n return { name };\n });\n\n remainingPath = remainingPath.replace(match[1], '');\n\n break;\n }\n }\n\n return { routes, remainingPath };\n};\n\nconst createNormalizedConfigs = (\n screen: string,\n routeConfig: PathConfigMap<object>,\n routeNames: string[] = [],\n initials: InitialRouteConfig[],\n parentScreens: string[],\n parentPattern?: string\n): RouteConfig[] => {\n const configs: RouteConfig[] = [];\n\n routeNames.push(screen);\n\n parentScreens.push(screen);\n\n // @ts-expect-error: we can't strongly typecheck this for now\n const config = routeConfig[screen];\n\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 configs.push(createConfigItem(screen, routeNames, pattern, config));\n } else if (typeof config === 'object') {\n let pattern: string | undefined;\n\n // if an object is specified as the value (e.g. Foo: { ... }),\n // it can have `path` property and\n // it could have `screens` prop which has nested configs\n if (typeof config.path === 'string') {\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 pattern =\n config.exact !== true\n ? joinPaths(parentPattern || '', config.path || '')\n : config.path || '';\n\n configs.push(\n createConfigItem(\n screen,\n routeNames,\n pattern!,\n config.path,\n config.parse\n )\n );\n }\n\n if (config.screens) {\n // property `initialRouteName` without `screens` has no purpose\n if (config.initialRouteName) {\n initials.push({\n initialRouteName: config.initialRouteName,\n parentScreens,\n });\n }\n\n Object.keys(config.screens).forEach((nestedConfig) => {\n const result = createNormalizedConfigs(\n nestedConfig,\n config.screens as PathConfigMap<object>,\n routeNames,\n initials,\n [...parentScreens],\n pattern ?? parentPattern\n );\n\n configs.push(...result);\n });\n }\n }\n\n routeNames.pop();\n\n return configs;\n};\n\nconst createConfigItem = (\n screen: string,\n routeNames: string[],\n pattern: string,\n path: string,\n parse?: ParseConfig\n): RouteConfig => {\n // Normalize pattern to remove any leading, trailing slashes, duplicate slashes etc.\n pattern = pattern.split('/').filter(Boolean).join('/');\n\n const regex = pattern\n ? new RegExp(\n `^(${pattern\n .split('/')\n .map((it) => {\n if (it.startsWith(':')) {\n return `(([^/]+\\\\/)${it.endsWith('?') ? '?' : ''})`;\n }\n\n return `${it === '*' ? '.*' : escape(it)}\\\\/`;\n })\n .join('')})`\n )\n : undefined;\n\n return {\n screen,\n regex,\n pattern,\n path,\n // The routeNames array is mutated, so copy it to keep the current state\n routeNames: [...routeNames],\n parse,\n };\n};\n\nconst findParseConfigForRoute = (\n routeName: string,\n flatConfig: RouteConfig[]\n): ParseConfig | undefined => {\n for (const config of flatConfig) {\n if (routeName === config.routeNames[config.routeNames.length - 1]) {\n return config.parse;\n }\n }\n\n return undefined;\n};\n\n// Try to find an initial route connected with the one passed\nconst findInitialRoute = (\n routeName: string,\n parentScreens: string[],\n initialRoutes: InitialRouteConfig[]\n): string | undefined => {\n for (const config of initialRoutes) {\n if (parentScreens.length === config.parentScreens.length) {\n let sameParents = true;\n for (let i = 0; i < parentScreens.length; i++) {\n if (parentScreens[i].localeCompare(config.parentScreens[i]) !== 0) {\n sameParents = false;\n break;\n }\n }\n if (sameParents) {\n return routeName !== config.initialRouteName\n ? config.initialRouteName\n : undefined;\n }\n }\n }\n return undefined;\n};\n\n// returns state object with values depending on whether\n// it is the end of state and if there is initialRoute for this level\nconst createStateObject = (\n initialRoute: string | undefined,\n route: ParsedRoute,\n isEmpty: boolean\n): InitialState => {\n if (isEmpty) {\n if (initialRoute) {\n return {\n index: 1,\n routes: [{ name: initialRoute }, route],\n };\n } else {\n return {\n routes: [route],\n };\n }\n } else {\n if (initialRoute) {\n return {\n index: 1,\n routes: [{ name: initialRoute }, { ...route, state: { routes: [] } }],\n };\n } else {\n return {\n routes: [{ ...route, state: { routes: [] } }],\n };\n }\n }\n};\n\nconst createNestedStateObject = (\n path: string,\n routes: ParsedRoute[],\n initialRoutes: InitialRouteConfig[],\n flatConfig?: RouteConfig[]\n) => {\n let state: InitialState;\n let route = routes.shift() as ParsedRoute;\n const parentScreens: string[] = [];\n\n let initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);\n\n parentScreens.push(route.name);\n\n state = createStateObject(initialRoute, route, routes.length === 0);\n\n if (routes.length > 0) {\n let nestedState = state;\n\n while ((route = routes.shift() as ParsedRoute)) {\n initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);\n\n const nestedStateIndex =\n nestedState.index || nestedState.routes.length - 1;\n\n nestedState.routes[nestedStateIndex].state = createStateObject(\n initialRoute,\n route,\n routes.length === 0\n );\n\n if (routes.length > 0) {\n nestedState = nestedState.routes[nestedStateIndex]\n .state as InitialState;\n }\n\n parentScreens.push(route.name);\n }\n }\n\n route = findFocusedRoute(state) as ParsedRoute;\n route.path = path;\n\n const params = parseQueryParams(\n path,\n flatConfig ? findParseConfigForRoute(route.name, flatConfig) : undefined\n );\n\n if (params) {\n route.params = { ...route.params, ...params };\n }\n\n return state;\n};\n\nconst parseQueryParams = (\n path: string,\n parseConfig?: Record<string, (value: string) => any>\n) => {\n const query = path.split('?')[1];\n const params = queryString.parse(query);\n\n if (parseConfig) {\n Object.keys(params).forEach((name) => {\n if (parseConfig[name] && typeof params[name] === 'string') {\n params[name] = parseConfig[name](params[name] as string);\n }\n });\n }\n\n return Object.keys(params).length ? params : undefined;\n};\n"]}
1
+ {"version":3,"sources":["getStateFromPath.tsx"],"names":["escape","queryString","findFocusedRoute","validatePathConfig","getStateFromPath","path","options","initialRoutes","initialRouteName","push","parentScreens","screens","remaining","replace","endsWith","undefined","routes","split","filter","Boolean","map","segment","name","decodeURIComponent","length","createNestedStateObject","configs","concat","Object","keys","key","createNormalizedConfigs","sort","a","b","pattern","routeNames","join","localeCompare","startsWith","aParts","bParts","i","Math","max","aWildCard","bWildCard","reduce","acc","config","intersects","every","it","Error","assign","match","find","c","screen","result","current","remainingPath","matchAgainstConfigs","regex","RegExp","source","joinPaths","paths","p","matchedParams","params","value","parse","routeConfig","initials","parentPattern","createConfigItem","exact","forEach","nestedConfig","pop","findParseConfigForRoute","routeName","flatConfig","findInitialRoute","sameParents","createStateObject","initialRoute","route","isEmpty","index","state","shift","nestedState","nestedStateIndex","parseQueryParams","parseConfig","query"],"mappings":"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","sourcesContent":["import type {\n InitialState,\n NavigationState,\n PartialState,\n} from '@react-navigation/routers';\nimport escape from 'escape-string-regexp';\nimport * as queryString from 'query-string';\n\nimport findFocusedRoute from './findFocusedRoute';\nimport type { PathConfigMap } from './types';\nimport validatePathConfig from './validatePathConfig';\n\ntype Options<ParamList extends {}> = {\n initialRouteName?: string;\n screens: PathConfigMap<ParamList>;\n};\n\ntype ParseConfig = Record<string, (value: string) => any>;\n\ntype RouteConfig = {\n screen: string;\n regex?: RegExp;\n path: string;\n pattern: string;\n routeNames: string[];\n parse?: ParseConfig;\n};\n\ntype InitialRouteConfig = {\n initialRouteName: string;\n parentScreens: string[];\n};\n\ntype ResultState = PartialState<NavigationState> & {\n state?: ResultState;\n};\n\ntype ParsedRoute = {\n name: string;\n path?: string;\n params?: Record<string, any> | undefined;\n};\n\n/**\n * Utility to parse a path string to initial state object accepted by the container.\n * This is useful for deep linking when we need to handle the incoming URL.\n *\n * @example\n * ```js\n * getStateFromPath(\n * '/chat/jane/42',\n * {\n * screens: {\n * Chat: {\n * path: 'chat/:author/:id',\n * parse: { id: Number }\n * }\n * }\n * }\n * )\n * ```\n * @param path Path string to parse and convert, e.g. /foo/bar?count=42.\n * @param options Extra options to fine-tune how to parse the path.\n */\nexport default function getStateFromPath<ParamList extends {}>(\n path: string,\n options?: Options<ParamList>\n): ResultState | undefined {\n if (options) {\n validatePathConfig(options);\n }\n\n let initialRoutes: InitialRouteConfig[] = [];\n\n if (options?.initialRouteName) {\n initialRoutes.push({\n initialRouteName: options.initialRouteName,\n parentScreens: [],\n });\n }\n\n const screens = options?.screens;\n\n let remaining = path\n .replace(/\\/+/g, '/') // Replace multiple slash (//) with single ones\n .replace(/^\\//, '') // Remove extra leading slash\n .replace(/\\?.*$/, ''); // Remove query params which we will handle later\n\n // Make sure there is a trailing slash\n remaining = remaining.endsWith('/') ? remaining : `${remaining}/`;\n\n if (screens === undefined) {\n // When no config is specified, use the path segments as route names\n const routes = remaining\n .split('/')\n .filter(Boolean)\n .map((segment) => {\n const name = decodeURIComponent(segment);\n return { name };\n });\n\n if (routes.length) {\n return createNestedStateObject(path, routes, initialRoutes);\n }\n\n return undefined;\n }\n\n // Create a normalized configs array which will be easier to use\n const configs = ([] as RouteConfig[])\n .concat(\n ...Object.keys(screens).map((key) =>\n createNormalizedConfigs(\n key,\n screens as PathConfigMap<object>,\n [],\n initialRoutes,\n []\n )\n )\n )\n .sort((a, b) => {\n // Sort config so that:\n // - the most exhaustive ones are always at the beginning\n // - patterns with wildcard are always at the end\n\n // If 2 patterns are same, move the one with less route names up\n // This is an error state, so it's only useful for consistent error messages\n if (a.pattern === b.pattern) {\n return b.routeNames.join('>').localeCompare(a.routeNames.join('>'));\n }\n\n // If one of the patterns starts with the other, it's more exhaustive\n // So move it up\n if (a.pattern.startsWith(b.pattern)) {\n return -1;\n }\n\n if (b.pattern.startsWith(a.pattern)) {\n return 1;\n }\n\n const aParts = a.pattern.split('/');\n const bParts = b.pattern.split('/');\n\n for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {\n // if b is longer, b get higher priority\n if (aParts[i] == null) {\n return 1;\n }\n // if a is longer, a get higher priority\n if (bParts[i] == null) {\n return -1;\n }\n const aWildCard = aParts[i] === '*' || aParts[i].startsWith(':');\n const bWildCard = bParts[i] === '*' || bParts[i].startsWith(':');\n // if both are wildcard we compare next component\n if (aWildCard && bWildCard) {\n continue;\n }\n // if only a is wild card, b get higher priority\n if (aWildCard) {\n return 1;\n }\n // if only b is wild card, a get higher priority\n if (bWildCard) {\n return -1;\n }\n }\n return bParts.length - aParts.length;\n });\n\n // Check for duplicate patterns in the config\n configs.reduce<Record<string, RouteConfig>>((acc, config) => {\n if (acc[config.pattern]) {\n const a = acc[config.pattern].routeNames;\n const b = config.routeNames;\n\n // It's not a problem if the path string omitted from a inner most screen\n // For example, it's ok if a path resolves to `A > B > C` or `A > B`\n const intersects =\n a.length > b.length\n ? b.every((it, i) => a[i] === it)\n : a.every((it, i) => b[i] === it);\n\n if (!intersects) {\n throw new Error(\n `Found conflicting screens with the same pattern. The pattern '${\n config.pattern\n }' resolves to both '${a.join(' > ')}' and '${b.join(\n ' > '\n )}'. Patterns must be unique and cannot resolve to more than one screen.`\n );\n }\n }\n\n return Object.assign(acc, {\n [config.pattern]: config,\n });\n }, {});\n\n if (remaining === '/') {\n // We need to add special handling of empty path so navigation to empty path also works\n // When handling empty path, we should only look at the root level config\n const match = configs.find(\n (config) =>\n config.path === '' &&\n config.routeNames.every(\n // Make sure that none of the parent configs have a non-empty path defined\n (name) => !configs.find((c) => c.screen === name)?.path\n )\n );\n\n if (match) {\n return createNestedStateObject(\n path,\n match.routeNames.map((name) => ({ name })),\n initialRoutes,\n configs\n );\n }\n\n return undefined;\n }\n\n let result: PartialState<NavigationState> | undefined;\n let current: PartialState<NavigationState> | undefined;\n\n // We match the whole path against the regex instead of segments\n // This makes sure matches such as wildcard will catch any unmatched routes, even if nested\n const { routes, remainingPath } = matchAgainstConfigs(\n remaining,\n configs.map((c) => ({\n ...c,\n // Add `$` to the regex to make sure it matches till end of the path and not just beginning\n regex: c.regex ? new RegExp(c.regex.source + '$') : undefined,\n }))\n );\n\n if (routes !== undefined) {\n // This will always be empty if full path matched\n current = createNestedStateObject(path, routes, initialRoutes, configs);\n remaining = remainingPath;\n result = current;\n }\n\n if (current == null || result == null) {\n return undefined;\n }\n\n return result;\n}\n\nconst joinPaths = (...paths: string[]): string =>\n ([] as string[])\n .concat(...paths.map((p) => p.split('/')))\n .filter(Boolean)\n .join('/');\n\nconst matchAgainstConfigs = (remaining: string, configs: RouteConfig[]) => {\n let routes: ParsedRoute[] | undefined;\n let remainingPath = remaining;\n\n // Go through all configs, and see if the next path segment matches our regex\n for (const config of configs) {\n if (!config.regex) {\n continue;\n }\n\n const match = remainingPath.match(config.regex);\n\n // If our regex matches, we need to extract params from the path\n if (match) {\n const matchedParams = config.pattern\n ?.split('/')\n .filter((p) => p.startsWith(':'))\n .reduce<Record<string, any>>(\n (acc, p, i) =>\n Object.assign(acc, {\n // The param segments appear every second item starting from 2 in the regex match result\n [p]: match![(i + 1) * 2].replace(/\\//, ''),\n }),\n {}\n );\n\n routes = config.routeNames.map((name) => {\n const config = configs.find((c) => c.screen === name);\n const params = config?.path\n ?.split('/')\n .filter((p) => p.startsWith(':'))\n .reduce<Record<string, any>>((acc, p) => {\n const value = matchedParams[p];\n\n if (value) {\n const key = p.replace(/^:/, '').replace(/\\?$/, '');\n acc[key] = config.parse?.[key] ? config.parse[key](value) : value;\n }\n\n return acc;\n }, {});\n\n if (params && Object.keys(params).length) {\n return { name, params };\n }\n\n return { name };\n });\n\n remainingPath = remainingPath.replace(match[1], '');\n\n break;\n }\n }\n\n return { routes, remainingPath };\n};\n\nconst createNormalizedConfigs = (\n screen: string,\n routeConfig: PathConfigMap<object>,\n routeNames: string[] = [],\n initials: InitialRouteConfig[],\n parentScreens: string[],\n parentPattern?: string\n): RouteConfig[] => {\n const configs: RouteConfig[] = [];\n\n routeNames.push(screen);\n\n parentScreens.push(screen);\n\n // @ts-expect-error: we can't strongly typecheck this for now\n const config = routeConfig[screen];\n\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 configs.push(createConfigItem(screen, routeNames, pattern, config));\n } else if (typeof config === 'object') {\n let pattern: string | undefined;\n\n // if an object is specified as the value (e.g. Foo: { ... }),\n // it can have `path` property and\n // it could have `screens` prop which has nested configs\n if (typeof config.path === 'string') {\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 pattern =\n config.exact !== true\n ? joinPaths(parentPattern || '', config.path || '')\n : config.path || '';\n\n configs.push(\n createConfigItem(\n screen,\n routeNames,\n pattern!,\n config.path,\n config.parse\n )\n );\n }\n\n if (config.screens) {\n // property `initialRouteName` without `screens` has no purpose\n if (config.initialRouteName) {\n initials.push({\n initialRouteName: config.initialRouteName,\n parentScreens,\n });\n }\n\n Object.keys(config.screens).forEach((nestedConfig) => {\n const result = createNormalizedConfigs(\n nestedConfig,\n config.screens as PathConfigMap<object>,\n routeNames,\n initials,\n [...parentScreens],\n pattern ?? parentPattern\n );\n\n configs.push(...result);\n });\n }\n }\n\n routeNames.pop();\n\n return configs;\n};\n\nconst createConfigItem = (\n screen: string,\n routeNames: string[],\n pattern: string,\n path: string,\n parse?: ParseConfig\n): RouteConfig => {\n // Normalize pattern to remove any leading, trailing slashes, duplicate slashes etc.\n pattern = pattern.split('/').filter(Boolean).join('/');\n\n const regex = pattern\n ? new RegExp(\n `^(${pattern\n .split('/')\n .map((it) => {\n if (it.startsWith(':')) {\n return `(([^/]+\\\\/)${it.endsWith('?') ? '?' : ''})`;\n }\n\n return `${it === '*' ? '.*' : escape(it)}\\\\/`;\n })\n .join('')})`\n )\n : undefined;\n\n return {\n screen,\n regex,\n pattern,\n path,\n // The routeNames array is mutated, so copy it to keep the current state\n routeNames: [...routeNames],\n parse,\n };\n};\n\nconst findParseConfigForRoute = (\n routeName: string,\n flatConfig: RouteConfig[]\n): ParseConfig | undefined => {\n for (const config of flatConfig) {\n if (routeName === config.routeNames[config.routeNames.length - 1]) {\n return config.parse;\n }\n }\n\n return undefined;\n};\n\n// Try to find an initial route connected with the one passed\nconst findInitialRoute = (\n routeName: string,\n parentScreens: string[],\n initialRoutes: InitialRouteConfig[]\n): string | undefined => {\n for (const config of initialRoutes) {\n if (parentScreens.length === config.parentScreens.length) {\n let sameParents = true;\n for (let i = 0; i < parentScreens.length; i++) {\n if (parentScreens[i].localeCompare(config.parentScreens[i]) !== 0) {\n sameParents = false;\n break;\n }\n }\n if (sameParents) {\n return routeName !== config.initialRouteName\n ? config.initialRouteName\n : undefined;\n }\n }\n }\n return undefined;\n};\n\n// returns state object with values depending on whether\n// it is the end of state and if there is initialRoute for this level\nconst createStateObject = (\n initialRoute: string | undefined,\n route: ParsedRoute,\n isEmpty: boolean\n): InitialState => {\n if (isEmpty) {\n if (initialRoute) {\n return {\n index: 1,\n routes: [{ name: initialRoute }, route],\n };\n } else {\n return {\n routes: [route],\n };\n }\n } else {\n if (initialRoute) {\n return {\n index: 1,\n routes: [{ name: initialRoute }, { ...route, state: { routes: [] } }],\n };\n } else {\n return {\n routes: [{ ...route, state: { routes: [] } }],\n };\n }\n }\n};\n\nconst createNestedStateObject = (\n path: string,\n routes: ParsedRoute[],\n initialRoutes: InitialRouteConfig[],\n flatConfig?: RouteConfig[]\n) => {\n let state: InitialState;\n let route = routes.shift() as ParsedRoute;\n const parentScreens: string[] = [];\n\n let initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);\n\n parentScreens.push(route.name);\n\n state = createStateObject(initialRoute, route, routes.length === 0);\n\n if (routes.length > 0) {\n let nestedState = state;\n\n while ((route = routes.shift() as ParsedRoute)) {\n initialRoute = findInitialRoute(route.name, parentScreens, initialRoutes);\n\n const nestedStateIndex =\n nestedState.index || nestedState.routes.length - 1;\n\n nestedState.routes[nestedStateIndex].state = createStateObject(\n initialRoute,\n route,\n routes.length === 0\n );\n\n if (routes.length > 0) {\n nestedState = nestedState.routes[nestedStateIndex]\n .state as InitialState;\n }\n\n parentScreens.push(route.name);\n }\n }\n\n route = findFocusedRoute(state) as ParsedRoute;\n route.path = path;\n\n const params = parseQueryParams(\n path,\n flatConfig ? findParseConfigForRoute(route.name, flatConfig) : undefined\n );\n\n if (params) {\n route.params = { ...route.params, ...params };\n }\n\n return state;\n};\n\nconst parseQueryParams = (\n path: string,\n parseConfig?: Record<string, (value: string) => any>\n) => {\n const query = path.split('?')[1];\n const params = queryString.parse(query);\n\n if (parseConfig) {\n Object.keys(params).forEach((name) => {\n if (parseConfig[name] && typeof params[name] === 'string') {\n params[name] = parseConfig[name](params[name] as string);\n }\n });\n }\n\n return Object.keys(params).length ? params : undefined;\n};\n"]}
@@ -3,6 +3,14 @@
3
3
  * We need to make sure that both values and order match.
4
4
  */
5
5
  export default function isArrayEqual(a, b) {
6
- return a.length === b.length && a.every((it, index) => it === b[index]);
6
+ if (a === b) {
7
+ return true;
8
+ }
9
+
10
+ if (a.length !== b.length) {
11
+ return false;
12
+ }
13
+
14
+ return a.every((it, index) => it === b[index]);
7
15
  }
8
16
  //# sourceMappingURL=isArrayEqual.js.map