@react-navigation/core 8.0.0-alpha.4 → 8.0.0-alpha.41

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 (323) hide show
  1. package/README.md +17 -14
  2. package/lib/module/BaseNavigationContainer.js +173 -90
  3. package/lib/module/BaseNavigationContainer.js.map +1 -1
  4. package/lib/module/ConsumedParamsContext.js +5 -0
  5. package/lib/module/ConsumedParamsContext.js.map +1 -0
  6. package/lib/module/DataLoading.js +129 -0
  7. package/lib/module/DataLoading.js.map +1 -0
  8. package/lib/module/NavigationBuilderContext.js +7 -10
  9. package/lib/module/NavigationBuilderContext.js.map +1 -1
  10. package/lib/module/NavigationIndependentTree.js +54 -9
  11. package/lib/module/NavigationIndependentTree.js.map +1 -1
  12. package/lib/module/NavigationProvider.js +37 -12
  13. package/lib/module/NavigationProvider.js.map +1 -1
  14. package/lib/module/NavigationRootContext.js +8 -0
  15. package/lib/module/NavigationRootContext.js.map +1 -0
  16. package/lib/module/NavigationStateContext.js +3 -0
  17. package/lib/module/NavigationStateContext.js.map +1 -1
  18. package/lib/module/PreventRemoveContext.js.map +1 -1
  19. package/lib/module/PreventRemoveProvider.js +40 -31
  20. package/lib/module/PreventRemoveProvider.js.map +1 -1
  21. package/lib/module/SceneView.js +29 -57
  22. package/lib/module/SceneView.js.map +1 -1
  23. package/lib/module/StaticNavigation.js +219 -67
  24. package/lib/module/StaticNavigation.js.map +1 -1
  25. package/lib/module/StaticTreeContext.js +5 -0
  26. package/lib/module/StaticTreeContext.js.map +1 -0
  27. package/lib/module/createNavigationContainerRef.js +7 -9
  28. package/lib/module/createNavigationContainerRef.js.map +1 -1
  29. package/lib/module/createNavigatorFactory.js +27 -5
  30. package/lib/module/createNavigatorFactory.js.map +1 -1
  31. package/lib/module/findFocusedRoute.js +7 -4
  32. package/lib/module/findFocusedRoute.js.map +1 -1
  33. package/lib/module/getActionFromState.js +45 -20
  34. package/lib/module/getActionFromState.js.map +1 -1
  35. package/lib/module/getPathFromState.js +204 -94
  36. package/lib/module/getPathFromState.js.map +1 -1
  37. package/lib/module/getPatternParts.js +61 -14
  38. package/lib/module/getPatternParts.js.map +1 -1
  39. package/lib/module/getStateFromPath.js +608 -272
  40. package/lib/module/getStateFromPath.js.map +1 -1
  41. package/lib/module/getStateFromRouteParams.js +23 -0
  42. package/lib/module/getStateFromRouteParams.js.map +1 -0
  43. package/lib/module/index.js +7 -6
  44. package/lib/module/index.js.map +1 -1
  45. package/lib/module/internal.js +2 -0
  46. package/lib/module/internal.js.map +1 -0
  47. package/lib/module/isRecordEqual.js +1 -1
  48. package/lib/module/isRecordEqual.js.map +1 -1
  49. package/lib/module/queryString.js +71 -0
  50. package/lib/module/queryString.js.map +1 -0
  51. package/lib/module/theming/useTheme.js +1 -1
  52. package/lib/module/theming/useTheme.js.map +1 -1
  53. package/lib/module/types.js +35 -1
  54. package/lib/module/types.js.map +1 -1
  55. package/lib/module/useDescriptors.js +65 -25
  56. package/lib/module/useDescriptors.js.map +1 -1
  57. package/lib/module/useEventEmitter.js +48 -33
  58. package/lib/module/useEventEmitter.js.map +1 -1
  59. package/lib/module/useFocusEffect.js +4 -2
  60. package/lib/module/useFocusEffect.js.map +1 -1
  61. package/lib/module/useFocusEvents.js +15 -5
  62. package/lib/module/useFocusEvents.js.map +1 -1
  63. package/lib/module/useFocusedListenersChildrenAdapter.js +3 -3
  64. package/lib/module/useFocusedListenersChildrenAdapter.js.map +1 -1
  65. package/lib/module/useIsFocused.js +8 -12
  66. package/lib/module/useIsFocused.js.map +1 -1
  67. package/lib/module/useKeyedChildListeners.js +5 -2
  68. package/lib/module/useKeyedChildListeners.js.map +1 -1
  69. package/lib/module/useLazyValue.js.map +1 -1
  70. package/lib/module/useNavigation.js +4 -17
  71. package/lib/module/useNavigation.js.map +1 -1
  72. package/lib/module/useNavigationBuilder.js +244 -147
  73. package/lib/module/useNavigationBuilder.js.map +1 -1
  74. package/lib/module/useNavigationCache.js +92 -89
  75. package/lib/module/useNavigationCache.js.map +1 -1
  76. package/lib/module/useNavigationHelpers.js +22 -29
  77. package/lib/module/useNavigationHelpers.js.map +1 -1
  78. package/lib/module/useNavigationIndependentTree.js +1 -1
  79. package/lib/module/useNavigationIndependentTree.js.map +1 -1
  80. package/lib/module/useNavigationState.js +158 -46
  81. package/lib/module/useNavigationState.js.map +1 -1
  82. package/lib/module/useOnAction.js +58 -11
  83. package/lib/module/useOnAction.js.map +1 -1
  84. package/lib/module/useOnGetNavigation.js +26 -0
  85. package/lib/module/useOnGetNavigation.js.map +1 -0
  86. package/lib/module/useOnGetState.js +7 -4
  87. package/lib/module/useOnGetState.js.map +1 -1
  88. package/lib/module/useOnPreventRemove.js +40 -31
  89. package/lib/module/useOnPreventRemove.js.map +1 -1
  90. package/lib/module/useOnRouteFocus.js +2 -2
  91. package/lib/module/useOnRouteFocus.js.map +1 -1
  92. package/lib/module/useOptionsGetters.js +35 -27
  93. package/lib/module/useOptionsGetters.js.map +1 -1
  94. package/lib/module/usePreventRemove.js +11 -5
  95. package/lib/module/usePreventRemove.js.map +1 -1
  96. package/lib/module/usePreventRemoveContext.js +2 -2
  97. package/lib/module/usePreventRemoveContext.js.map +1 -1
  98. package/lib/module/useRegisterNavigator.js +3 -4
  99. package/lib/module/useRegisterNavigator.js.map +1 -1
  100. package/lib/module/useRoute.js +2 -0
  101. package/lib/module/useRoute.js.map +1 -1
  102. package/lib/module/useRouteCache.js +51 -35
  103. package/lib/module/useRouteCache.js.map +1 -1
  104. package/lib/module/useScheduleUpdate.js +12 -10
  105. package/lib/module/useScheduleUpdate.js.map +1 -1
  106. package/lib/module/useStateForPath.js +1 -1
  107. package/lib/module/useStateForPath.js.map +1 -1
  108. package/lib/module/useSyncState.js +37 -15
  109. package/lib/module/useSyncState.js.map +1 -1
  110. package/lib/module/validatePathConfig.js +50 -36
  111. package/lib/module/validatePathConfig.js.map +1 -1
  112. package/lib/typescript/src/BaseNavigationContainer.d.ts +6 -3
  113. package/lib/typescript/src/BaseNavigationContainer.d.ts.map +1 -1
  114. package/lib/typescript/src/ConsumedParamsContext.d.ts +3 -0
  115. package/lib/typescript/src/ConsumedParamsContext.d.ts.map +1 -0
  116. package/lib/typescript/src/DataLoading.d.ts +21 -0
  117. package/lib/typescript/src/DataLoading.d.ts.map +1 -0
  118. package/lib/typescript/src/EnsureSingleNavigator.d.ts +1 -1
  119. package/lib/typescript/src/EnsureSingleNavigator.d.ts.map +1 -1
  120. package/lib/typescript/src/Group.d.ts +1 -1
  121. package/lib/typescript/src/Group.d.ts.map +1 -1
  122. package/lib/typescript/src/NavigationBuilderContext.d.ts +22 -14
  123. package/lib/typescript/src/NavigationBuilderContext.d.ts.map +1 -1
  124. package/lib/typescript/src/NavigationContainerRefContext.d.ts +1 -1
  125. package/lib/typescript/src/NavigationContainerRefContext.d.ts.map +1 -1
  126. package/lib/typescript/src/NavigationFocusedRouteStateContext.d.ts +4 -4
  127. package/lib/typescript/src/NavigationFocusedRouteStateContext.d.ts.map +1 -1
  128. package/lib/typescript/src/NavigationHelpersContext.d.ts +1 -1
  129. package/lib/typescript/src/NavigationHelpersContext.d.ts.map +1 -1
  130. package/lib/typescript/src/NavigationIndependentTree.d.ts +1 -1
  131. package/lib/typescript/src/NavigationIndependentTree.d.ts.map +1 -1
  132. package/lib/typescript/src/NavigationProvider.d.ts +21 -18
  133. package/lib/typescript/src/NavigationProvider.d.ts.map +1 -1
  134. package/lib/typescript/src/NavigationRootContext.d.ts +8 -0
  135. package/lib/typescript/src/NavigationRootContext.d.ts.map +1 -0
  136. package/lib/typescript/src/NavigationStateContext.d.ts +3 -3
  137. package/lib/typescript/src/NavigationStateContext.d.ts.map +1 -1
  138. package/lib/typescript/src/PreventRemoveContext.d.ts +1 -0
  139. package/lib/typescript/src/PreventRemoveContext.d.ts.map +1 -1
  140. package/lib/typescript/src/PreventRemoveProvider.d.ts +1 -1
  141. package/lib/typescript/src/PreventRemoveProvider.d.ts.map +1 -1
  142. package/lib/typescript/src/SceneView.d.ts +5 -2
  143. package/lib/typescript/src/SceneView.d.ts.map +1 -1
  144. package/lib/typescript/src/Screen.d.ts +1 -1
  145. package/lib/typescript/src/Screen.d.ts.map +1 -1
  146. package/lib/typescript/src/StaticContainer.d.ts +1 -1
  147. package/lib/typescript/src/StaticContainer.d.ts.map +1 -1
  148. package/lib/typescript/src/StaticNavigation.d.ts +189 -111
  149. package/lib/typescript/src/StaticNavigation.d.ts.map +1 -1
  150. package/lib/typescript/src/StaticTreeContext.d.ts +4 -0
  151. package/lib/typescript/src/StaticTreeContext.d.ts.map +1 -0
  152. package/lib/typescript/src/createNavigationContainerRef.d.ts +1 -1
  153. package/lib/typescript/src/createNavigationContainerRef.d.ts.map +1 -1
  154. package/lib/typescript/src/createNavigatorFactory.d.ts +23 -5
  155. package/lib/typescript/src/createNavigatorFactory.d.ts.map +1 -1
  156. package/lib/typescript/src/findFocusedRoute.d.ts +3 -8
  157. package/lib/typescript/src/findFocusedRoute.d.ts.map +1 -1
  158. package/lib/typescript/src/getActionFromState.d.ts +4 -4
  159. package/lib/typescript/src/getActionFromState.d.ts.map +1 -1
  160. package/lib/typescript/src/getPathFromState.d.ts +3 -3
  161. package/lib/typescript/src/getPathFromState.d.ts.map +1 -1
  162. package/lib/typescript/src/getPatternParts.d.ts +5 -2
  163. package/lib/typescript/src/getPatternParts.d.ts.map +1 -1
  164. package/lib/typescript/src/getStateFromPath.d.ts +4 -7
  165. package/lib/typescript/src/getStateFromPath.d.ts.map +1 -1
  166. package/lib/typescript/src/getStateFromRouteParams.d.ts +3 -0
  167. package/lib/typescript/src/getStateFromRouteParams.d.ts.map +1 -0
  168. package/lib/typescript/src/index.d.ts +36 -33
  169. package/lib/typescript/src/index.d.ts.map +1 -1
  170. package/lib/typescript/src/internal.d.ts +3 -0
  171. package/lib/typescript/src/internal.d.ts.map +1 -0
  172. package/lib/typescript/src/isRecordEqual.d.ts.map +1 -1
  173. package/lib/typescript/src/queryString.d.ts +5 -0
  174. package/lib/typescript/src/queryString.d.ts.map +1 -0
  175. package/lib/typescript/src/theming/ThemeContext.d.ts +1 -1
  176. package/lib/typescript/src/theming/ThemeContext.d.ts.map +1 -1
  177. package/lib/typescript/src/theming/ThemeProvider.d.ts +2 -2
  178. package/lib/typescript/src/theming/ThemeProvider.d.ts.map +1 -1
  179. package/lib/typescript/src/theming/useTheme.d.ts +1 -1
  180. package/lib/typescript/src/theming/useTheme.d.ts.map +1 -1
  181. package/lib/typescript/src/types.d.ts +265 -167
  182. package/lib/typescript/src/types.d.ts.map +1 -1
  183. package/lib/typescript/src/useChildListeners.d.ts +3 -3
  184. package/lib/typescript/src/useChildListeners.d.ts.map +1 -1
  185. package/lib/typescript/src/useDescriptors.d.ts +13 -11
  186. package/lib/typescript/src/useDescriptors.d.ts.map +1 -1
  187. package/lib/typescript/src/useEventEmitter.d.ts +2 -2
  188. package/lib/typescript/src/useEventEmitter.d.ts.map +1 -1
  189. package/lib/typescript/src/useFocusEffect.d.ts.map +1 -1
  190. package/lib/typescript/src/useFocusEvents.d.ts +2 -2
  191. package/lib/typescript/src/useFocusEvents.d.ts.map +1 -1
  192. package/lib/typescript/src/useFocusedListenersChildrenAdapter.d.ts +2 -2
  193. package/lib/typescript/src/useFocusedListenersChildrenAdapter.d.ts.map +1 -1
  194. package/lib/typescript/src/useIsFocused.d.ts +4 -0
  195. package/lib/typescript/src/useIsFocused.d.ts.map +1 -1
  196. package/lib/typescript/src/useKeyedChildListeners.d.ts +4 -3
  197. package/lib/typescript/src/useKeyedChildListeners.d.ts.map +1 -1
  198. package/lib/typescript/src/useLazyValue.d.ts.map +1 -1
  199. package/lib/typescript/src/useNavigation.d.ts +4 -2
  200. package/lib/typescript/src/useNavigation.d.ts.map +1 -1
  201. package/lib/typescript/src/useNavigationBuilder.d.ts +22 -63
  202. package/lib/typescript/src/useNavigationBuilder.d.ts.map +1 -1
  203. package/lib/typescript/src/useNavigationCache.d.ts +6 -5
  204. package/lib/typescript/src/useNavigationCache.d.ts.map +1 -1
  205. package/lib/typescript/src/useNavigationContainerRef.d.ts +1 -1
  206. package/lib/typescript/src/useNavigationContainerRef.d.ts.map +1 -1
  207. package/lib/typescript/src/useNavigationHelpers.d.ts +18 -58
  208. package/lib/typescript/src/useNavigationHelpers.d.ts.map +1 -1
  209. package/lib/typescript/src/useNavigationState.d.ts +19 -3
  210. package/lib/typescript/src/useNavigationState.d.ts.map +1 -1
  211. package/lib/typescript/src/useOnAction.d.ts +9 -9
  212. package/lib/typescript/src/useOnAction.d.ts.map +1 -1
  213. package/lib/typescript/src/useOnGetNavigation.d.ts +12 -0
  214. package/lib/typescript/src/useOnGetNavigation.d.ts.map +1 -0
  215. package/lib/typescript/src/useOnGetState.d.ts +1 -1
  216. package/lib/typescript/src/useOnGetState.d.ts.map +1 -1
  217. package/lib/typescript/src/useOnPreventRemove.d.ts +5 -9
  218. package/lib/typescript/src/useOnPreventRemove.d.ts.map +1 -1
  219. package/lib/typescript/src/useOnRouteFocus.d.ts +6 -6
  220. package/lib/typescript/src/useOnRouteFocus.d.ts.map +1 -1
  221. package/lib/typescript/src/useOptionsGetters.d.ts +4 -4
  222. package/lib/typescript/src/useOptionsGetters.d.ts.map +1 -1
  223. package/lib/typescript/src/usePreventRemove.d.ts.map +1 -1
  224. package/lib/typescript/src/usePreventRemoveContext.d.ts +2 -1
  225. package/lib/typescript/src/usePreventRemoveContext.d.ts.map +1 -1
  226. package/lib/typescript/src/useRegisterNavigator.d.ts.map +1 -1
  227. package/lib/typescript/src/useRoute.d.ts +7 -3
  228. package/lib/typescript/src/useRoute.d.ts.map +1 -1
  229. package/lib/typescript/src/useRouteCache.d.ts +7 -12
  230. package/lib/typescript/src/useRouteCache.d.ts.map +1 -1
  231. package/lib/typescript/src/useScheduleUpdate.d.ts +5 -4
  232. package/lib/typescript/src/useScheduleUpdate.d.ts.map +1 -1
  233. package/lib/typescript/src/useStateForPath.d.ts +1 -1
  234. package/lib/typescript/src/useStateForPath.d.ts.map +1 -1
  235. package/lib/typescript/src/useSyncState.d.ts +1 -0
  236. package/lib/typescript/src/useSyncState.d.ts.map +1 -1
  237. package/lib/typescript/src/utilities.d.ts +79 -39
  238. package/lib/typescript/src/utilities.d.ts.map +1 -1
  239. package/lib/typescript/src/validatePathConfig.d.ts.map +1 -1
  240. package/package.json +26 -22
  241. package/src/BaseNavigationContainer.tsx +459 -332
  242. package/src/ConsumedParamsContext.tsx +5 -0
  243. package/src/DataLoading.tsx +206 -0
  244. package/src/NavigationBuilderContext.tsx +44 -25
  245. package/src/NavigationFocusedRouteStateContext.tsx +4 -4
  246. package/src/NavigationIndependentTree.tsx +60 -12
  247. package/src/NavigationProvider.tsx +59 -21
  248. package/src/NavigationRootContext.tsx +11 -0
  249. package/src/NavigationStateContext.tsx +6 -6
  250. package/src/PreventRemoveContext.tsx +1 -0
  251. package/src/PreventRemoveProvider.tsx +55 -56
  252. package/src/SceneView.tsx +31 -57
  253. package/src/StaticNavigation.tsx +715 -328
  254. package/src/StaticTreeContext.tsx +7 -0
  255. package/src/createNavigationContainerRef.tsx +12 -11
  256. package/src/createNavigatorFactory.tsx +92 -8
  257. package/src/findFocusedRoute.tsx +16 -16
  258. package/src/getActionFromState.tsx +87 -51
  259. package/src/getPathFromState.tsx +310 -134
  260. package/src/getPatternParts.tsx +98 -16
  261. package/src/getStateFromPath.tsx +971 -344
  262. package/src/getStateFromRouteParams.tsx +59 -0
  263. package/src/index.tsx +57 -6
  264. package/src/internal.tsx +2 -0
  265. package/src/isRecordEqual.tsx +3 -1
  266. package/src/queryString.ts +109 -0
  267. package/src/theming/useTheme.tsx +1 -1
  268. package/src/types.tsx +799 -377
  269. package/src/useDescriptors.tsx +151 -43
  270. package/src/useEventEmitter.tsx +53 -39
  271. package/src/useFocusEffect.tsx +5 -2
  272. package/src/useFocusEvents.tsx +19 -8
  273. package/src/useFocusedListenersChildrenAdapter.tsx +3 -3
  274. package/src/useIsFocused.tsx +18 -21
  275. package/src/useKeyedChildListeners.tsx +5 -2
  276. package/src/useLazyValue.tsx +2 -2
  277. package/src/useNavigation.tsx +9 -26
  278. package/src/useNavigationBuilder.tsx +370 -201
  279. package/src/useNavigationCache.tsx +148 -123
  280. package/src/useNavigationHelpers.tsx +27 -37
  281. package/src/useNavigationIndependentTree.tsx +1 -1
  282. package/src/useNavigationState.tsx +207 -69
  283. package/src/useOnAction.tsx +92 -18
  284. package/src/useOnGetNavigation.tsx +30 -0
  285. package/src/useOnGetState.tsx +8 -4
  286. package/src/useOnPreventRemove.tsx +78 -43
  287. package/src/useOnRouteFocus.tsx +11 -15
  288. package/src/useOptionsGetters.tsx +44 -30
  289. package/src/usePreventRemove.tsx +13 -5
  290. package/src/usePreventRemoveContext.tsx +2 -2
  291. package/src/useRegisterNavigator.tsx +4 -4
  292. package/src/useRoute.tsx +20 -6
  293. package/src/useRouteCache.tsx +57 -35
  294. package/src/useScheduleUpdate.tsx +13 -11
  295. package/src/useStateForPath.tsx +1 -1
  296. package/src/useSyncState.tsx +39 -15
  297. package/src/utilities.tsx +151 -35
  298. package/src/validatePathConfig.tsx +86 -57
  299. package/lib/module/CurrentRenderContext.js +0 -10
  300. package/lib/module/CurrentRenderContext.js.map +0 -1
  301. package/lib/module/NavigationMetaContext.js +0 -15
  302. package/lib/module/NavigationMetaContext.js.map +0 -1
  303. package/lib/module/checkSerializable.js +0 -46
  304. package/lib/module/checkSerializable.js.map +0 -1
  305. package/lib/module/useComponent.js +0 -34
  306. package/lib/module/useComponent.js.map +0 -1
  307. package/lib/module/useCurrentRender.js +0 -19
  308. package/lib/module/useCurrentRender.js.map +0 -1
  309. package/lib/typescript/src/CurrentRenderContext.d.ts +0 -9
  310. package/lib/typescript/src/CurrentRenderContext.d.ts.map +0 -1
  311. package/lib/typescript/src/NavigationMetaContext.d.ts +0 -12
  312. package/lib/typescript/src/NavigationMetaContext.d.ts.map +0 -1
  313. package/lib/typescript/src/checkSerializable.d.ts +0 -10
  314. package/lib/typescript/src/checkSerializable.d.ts.map +0 -1
  315. package/lib/typescript/src/useComponent.d.ts +0 -7
  316. package/lib/typescript/src/useComponent.d.ts.map +0 -1
  317. package/lib/typescript/src/useCurrentRender.d.ts +0 -14
  318. package/lib/typescript/src/useCurrentRender.d.ts.map +0 -1
  319. package/src/CurrentRenderContext.tsx +0 -9
  320. package/src/NavigationMetaContext.tsx +0 -14
  321. package/src/checkSerializable.tsx +0 -74
  322. package/src/useComponent.tsx +0 -37
  323. package/src/useCurrentRender.tsx +0 -31
@@ -1,22 +1,43 @@
1
1
  "use strict";
2
2
 
3
- import * as queryString from 'query-string';
4
- import { getPatternParts } from "./getPatternParts.js";
3
+ import { combinePatternParts, getPatternParts } from "./getPatternParts.js";
4
+ import { getStateFromRouteParams } from "./getStateFromRouteParams.js";
5
+ import * as queryString from "./queryString.js";
5
6
  import { validatePathConfig } from "./validatePathConfig.js";
6
- const getActiveRoute = state => {
7
+ const serializeParamValue = value => value === null ? null : Array.isArray(value) ? value.map(String) : String(value);
8
+ const encodePathParam = value => {
9
+ let result = '';
10
+ for (const char of value) {
11
+ const charCode = char.charCodeAt(0);
12
+ const safe = charCode >= 65 && charCode <= 90 || charCode >= 97 && charCode <= 122 || charCode >= 48 && charCode <= 57 || "-._~!$&'()*+,;=:@".includes(char);
13
+ result += safe ? char : encodeURIComponent(char);
14
+ }
15
+ return result;
16
+ };
17
+ const getActiveRoute = (state, configs, getRouteState) => {
7
18
  const route = typeof state.index === 'number' ? state.routes[state.index] : state.routes[state.routes.length - 1];
8
- if (route.state) {
9
- return getActiveRoute(route.state);
19
+ if (route == null) {
20
+ throw new Error(`Couldn't find the active route.`);
21
+ }
22
+ const config = configs?.[route.name];
23
+ const routeState = getRouteState(route, config);
24
+ if (routeState) {
25
+ return getActiveRoute(routeState, config?.screens, getRouteState);
10
26
  }
11
27
  return route;
12
28
  };
13
29
  const cachedNormalizedConfigs = new WeakMap();
14
30
  const getNormalizedConfigs = options => {
15
- if (!options?.screens) return {};
16
- const cached = cachedNormalizedConfigs.get(options?.screens);
17
- if (cached) return cached;
31
+ if (!options) {
32
+ return {};
33
+ }
34
+ const cached = cachedNormalizedConfigs.get(options);
35
+ if (cached) {
36
+ return cached;
37
+ }
38
+ validatePathConfig(options);
18
39
  const normalizedConfigs = createNormalizedConfigs(options.screens);
19
- cachedNormalizedConfigs.set(options.screens, normalizedConfigs);
40
+ cachedNormalizedConfigs.set(options, normalizedConfigs);
20
41
  return normalizedConfigs;
21
42
  };
22
43
 
@@ -53,78 +74,119 @@ export function getPathFromState(state, options) {
53
74
  if (state == null) {
54
75
  throw Error(`Got '${String(state)}' for the navigation state. You must pass a valid state object.`);
55
76
  }
56
- if (options) {
57
- validatePathConfig(options);
58
- }
59
77
  const configs = getNormalizedConfigs(options);
78
+ const cachedRouteStates = new Map();
79
+ const getRouteState = (route, config) => {
80
+ if (route.state) {
81
+ return route.state;
82
+ }
83
+ const hasScreenParams = route.params && 'screen' in route.params && typeof route.params.screen === 'string' && config?.screens?.[route.params.screen];
84
+ const hasStateParams = route.params && 'state' in route.params && config?.screens;
85
+ if (!route.params || !config?.screens || !hasScreenParams && !hasStateParams) {
86
+ return undefined;
87
+ }
88
+ if (!cachedRouteStates.has(route)) {
89
+ cachedRouteStates.set(route, getStateFromRouteParams(route.params));
90
+ }
91
+ return cachedRouteStates.get(route);
92
+ };
93
+ const focusedRoute = getActiveRoute(state, configs, getRouteState);
60
94
  let path = '/';
61
95
  let current = state;
62
- const allParams = {};
63
96
  while (current) {
64
97
  let index = typeof current.index === 'number' ? current.index : 0;
65
- let route = current.routes[index];
98
+ const initialRoute = current.routes[index];
99
+ if (initialRoute == null) {
100
+ throw new Error(`Couldn't find a route at index ${index}.`);
101
+ }
102
+ let route = initialRoute;
66
103
  let parts;
104
+
105
+ // Values for each pattern part object, so the same param name
106
+ // at different nesting levels gets the value from its own level
107
+ const partValues = new Map();
67
108
  let focusedParams;
68
109
  let currentOptions = configs;
69
- const focusedRoute = getActiveRoute(state);
70
110
 
71
111
  // Keep all the route names that appeared during going deeper in config in case the pattern is resolved to undefined
72
112
  const nestedRouteNames = [];
73
113
  let hasNext = true;
74
- while (route.name in currentOptions && hasNext) {
75
- parts = currentOptions[route.name].parts;
114
+ while (hasNext) {
115
+ const config = currentOptions[route.name];
116
+ if (config == null) {
117
+ break;
118
+ }
119
+ parts = config.parts;
120
+ const ownParts = config.ownParts;
76
121
  nestedRouteNames.push(route.name);
77
122
  if (route.params) {
78
- const options = currentOptions[route.name];
79
- const currentParams = Object.fromEntries(Object.entries(route.params).map(([key, value]) => {
123
+ const options = config;
124
+ const params = route.params;
125
+ const currentParams = {
126
+ __proto__: null
127
+ };
128
+ for (const key in params) {
129
+ const value = params[key];
80
130
  if (value === undefined) {
81
- if (options) {
82
- const optional = options.parts?.find(part => part.param === key)?.optional;
83
- if (optional) {
84
- return null;
131
+ let canBeOmitted = false;
132
+ for (const part of ownParts) {
133
+ if (part.name === key) {
134
+ canBeOmitted = part.optional === true || part.repeat != null;
135
+ break;
85
136
  }
86
- } else {
87
- return null;
137
+ }
138
+ if (canBeOmitted) {
139
+ continue;
140
+ }
141
+ }
142
+ const stringify = options.stringify?.[key];
143
+ currentParams[key] = stringify ? stringify(value) : serializeParamValue(value);
144
+ }
145
+ const claimedParams = new Set();
146
+ for (const part of ownParts) {
147
+ if (part.name && part.name in currentParams) {
148
+ const value = currentParams[part.name];
149
+ if (value !== undefined) {
150
+ partValues.set(part, value);
151
+ claimedParams.add(part.name);
88
152
  }
89
153
  }
90
- const stringify = options?.stringify?.[key] ?? String;
91
- return [key, stringify(value)];
92
- }).filter(entry => entry != null));
93
- if (parts?.length) {
94
- Object.assign(allParams, currentParams);
95
154
  }
96
155
  if (focusedRoute === route) {
97
156
  // If this is the focused route, keep the params for later use
98
157
  // We save it here since it's been stringified already
158
+ // Params claimed by the pattern shouldn't be repeated in the query string
99
159
  focusedParams = {
100
- ...currentParams
160
+ __proto__: null
101
161
  };
102
- parts
103
- // eslint-disable-next-line no-loop-func
104
- ?.forEach(({
105
- param
106
- }) => {
107
- if (param) {
108
- // Remove the params present in the pattern since we'll only use the rest for query string
109
- if (focusedParams) {
110
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
111
- delete focusedParams[param];
112
- }
162
+ for (const key in currentParams) {
163
+ const value = currentParams[key];
164
+ if (!claimedParams.has(key) && value !== undefined && value !== 'undefined') {
165
+ focusedParams[key] = value;
113
166
  }
114
- });
167
+ }
168
+ }
169
+ }
170
+ for (const part of ownParts) {
171
+ if (part.name && !partValues.has(part)) {
172
+ partValues.set(part, undefined);
115
173
  }
116
174
  }
117
175
 
118
176
  // If there is no `screens` property or no nested state, we return pattern
119
- if (!currentOptions[route.name].screens || route.state === undefined) {
177
+ const routeState = getRouteState(route, config);
178
+ if (!config.screens || routeState == null) {
120
179
  hasNext = false;
121
180
  } else {
122
- index = typeof route.state.index === 'number' ? route.state.index : route.state.routes.length - 1;
123
- const nextRoute = route.state.routes[index];
124
- const nestedConfig = currentOptions[route.name].screens;
181
+ index = typeof routeState.index === 'number' ? routeState.index : routeState.routes.length - 1;
182
+ const nextRoute = routeState.routes[index];
183
+ if (nextRoute == null) {
184
+ throw new Error(`Couldn't find a route at index ${index}.`);
185
+ }
186
+ const nestedConfig = config.screens;
125
187
 
126
188
  // if there is config for next route name, we go deeper
127
- if (nestedConfig && nextRoute.name in nestedConfig) {
189
+ if (nextRoute.name in nestedConfig) {
128
190
  route = nextRoute;
129
191
  currentOptions = nestedConfig;
130
192
  } else {
@@ -133,56 +195,90 @@ export function getPathFromState(state, options) {
133
195
  }
134
196
  }
135
197
  }
136
- if (currentOptions[route.name] !== undefined) {
137
- path += parts?.map(({
138
- segment,
139
- param,
140
- optional
141
- }) => {
142
- // We don't know what to show for wildcard patterns
143
- // Showing the route name seems ok, though whatever we show here will be incorrect
144
- // Since the page doesn't actually exist
145
- if (segment === '*') {
146
- return route.name;
147
- }
198
+ const routeState = getRouteState(route, currentOptions[route.name]);
199
+ if (currentOptions[route.name] != null) {
200
+ if (parts) {
201
+ let index = 0;
202
+ for (const part of parts) {
203
+ const {
204
+ segment,
205
+ name,
206
+ optional,
207
+ repeat
208
+ } = part;
209
+ if (index > 0) {
210
+ path += '/';
211
+ }
212
+ index++;
148
213
 
149
- // If the path has a pattern for a param, put the param in the path
150
- if (param) {
151
- const value = allParams[param];
152
- if (value === undefined && optional) {
153
- // Optional params without value assigned in route.params should be ignored
154
- return '';
214
+ // We don't know what to show for wildcard patterns
215
+ // Showing the route name seems ok, though whatever we show here will be incorrect
216
+ // Since the page doesn't actually exist
217
+ if (segment === '*') {
218
+ path += route.name;
219
+ continue;
155
220
  }
156
221
 
157
- // Valid characters according to
158
- // https://datatracker.ietf.org/doc/html/rfc3986#section-3.3 (see pchar definition)
159
- return Array.from(String(value)).map(char => /[^A-Za-z0-9\-._~!$&'()*+,;=:@]/g.test(char) ? encodeURIComponent(char) : char).join('');
222
+ // If the path has a pattern for a param, put the param in the path
223
+ if (name) {
224
+ const value = partValues.get(part);
225
+ if (value === undefined && optional) {
226
+ // Optional params without value assigned in route.params should be ignored
227
+ continue;
228
+ }
229
+ if (repeat) {
230
+ if (value === null) {
231
+ throw new Error(`The path pattern '${segment}' does not allow null for param '${name}'.`);
232
+ }
233
+ if (Array.isArray(value)) {
234
+ throw new Error(`The path pattern '${segment}' requires a string for param '${name}'.`);
235
+ }
236
+ const values = value === undefined || value === '' ? [] : value.split('/');
237
+ if (repeat === 'one-or-more' && values.length === 0) {
238
+ throw new Error(`The path pattern '${segment}' requires at least one value for param '${name}'.`);
239
+ }
240
+ if (values.some(item => item.length === 0)) {
241
+ throw new Error(`The path pattern '${segment}' does not allow empty values for param '${name}'.`);
242
+ }
243
+ if (values.length === 0) {
244
+ path = path.replace(/\/$/, '');
245
+ }
246
+ path += values.map(encodePathParam).join('/');
247
+ continue;
248
+ }
249
+
250
+ // Valid characters according to
251
+ // https://datatracker.ietf.org/doc/html/rfc3986#section-3.3 (see pchar definition)
252
+ path += encodePathParam(String(value));
253
+ continue;
254
+ }
255
+ path += encodeURIComponent(segment);
160
256
  }
161
- return encodeURIComponent(segment);
162
- }).join('/');
257
+ }
163
258
  } else {
164
259
  path += encodeURIComponent(route.name);
165
260
  }
166
261
  if (!focusedParams && focusedRoute.params) {
167
- focusedParams = Object.fromEntries(Object.entries(focusedRoute.params).map(([key, value]) => [key, String(value)]));
262
+ focusedParams = {
263
+ __proto__: null
264
+ };
265
+ const params = focusedRoute.params;
266
+ for (const key in params) {
267
+ const value = serializeParamValue(params[key]);
268
+ if (value !== 'undefined') {
269
+ focusedParams[key] = value;
270
+ }
271
+ }
168
272
  }
169
- if (route.state) {
273
+ if (routeState) {
170
274
  path += '/';
171
275
  } else if (focusedParams) {
172
- for (const param in focusedParams) {
173
- if (focusedParams[param] === 'undefined') {
174
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
175
- delete focusedParams[param];
176
- }
177
- }
178
- const query = queryString.stringify(focusedParams, {
179
- sort: false
180
- });
276
+ const query = queryString.stringify(focusedParams);
181
277
  if (query) {
182
278
  path += `?${query}`;
183
279
  }
184
280
  }
185
- current = route.state;
281
+ current = routeState;
186
282
  }
187
283
 
188
284
  // Include the root path if specified
@@ -191,8 +287,12 @@ export function getPathFromState(state, options) {
191
287
  }
192
288
 
193
289
  // Remove multiple as well as trailing slashes
194
- path = path.replace(/\/+/g, '/');
195
- path = path.length > 1 ? path.replace(/\/$/, '') : path;
290
+ if (path.includes('//')) {
291
+ path = path.replace(/\/+/g, '/');
292
+ }
293
+ if (path.length > 1 && path.endsWith('/')) {
294
+ path = path.slice(0, -1);
295
+ }
196
296
 
197
297
  // If path doesn't start with a slash, add it
198
298
  // This makes sure that history.pushState will update the path correctly instead of appending
@@ -203,15 +303,16 @@ export function getPathFromState(state, options) {
203
303
  }
204
304
  const createConfigItem = (config, parentParts) => {
205
305
  if (typeof config === 'string') {
206
- // If a string is specified as the value of the key(e.g. Foo: '/path'), use it as the pattern
207
- const parts = getPatternParts(config);
306
+ const ownParts = getPatternParts(config);
208
307
  if (parentParts) {
209
308
  return {
210
- parts: [...parentParts, ...parts]
309
+ parts: combinePatternParts(parentParts, ownParts),
310
+ ownParts
211
311
  };
212
312
  }
213
313
  return {
214
- parts
314
+ parts: ownParts,
315
+ ownParts
215
316
  };
216
317
  }
217
318
  if (config.exact && config.path === undefined) {
@@ -220,16 +321,25 @@ const createConfigItem = (config, parentParts) => {
220
321
 
221
322
  // If an object is specified as the value (e.g. Foo: { ... }),
222
323
  // It can have `path` property and `screens` prop which has nested configs
223
- const parts = config.exact !== true ? [...(parentParts || []), ...(config.path ? getPatternParts(config.path) : [])] : config.path ? getPatternParts(config.path) : undefined;
324
+ const ownParts = config.path ? getPatternParts(config.path) : [];
325
+ const parts = config.exact !== true ? combinePatternParts(parentParts || [], ownParts) : ownParts.length ? ownParts : undefined;
224
326
  const screens = 'screens' in config && config.screens ? createNormalizedConfigs(config.screens, parts) : undefined;
225
327
  return {
226
328
  parts,
329
+ ownParts,
227
330
  stringify: config.stringify,
228
331
  screens
229
332
  };
230
333
  };
231
- const createNormalizedConfigs = (options, parts) => Object.fromEntries(Object.entries(options).map(([name, c]) => {
232
- const result = createConfigItem(c, parts);
233
- return [name, result];
234
- }));
334
+ const createNormalizedConfigs = (options, parts) => {
335
+ const configs = {};
336
+ const screens = options;
337
+ for (const name in screens) {
338
+ const config = screens[name];
339
+ if (config !== undefined) {
340
+ configs[name] = createConfigItem(config, parts);
341
+ }
342
+ }
343
+ return configs;
344
+ };
235
345
  //# sourceMappingURL=getPathFromState.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["queryString","getPatternParts","validatePathConfig","getActiveRoute","state","route","index","routes","length","cachedNormalizedConfigs","WeakMap","getNormalizedConfigs","options","screens","cached","get","normalizedConfigs","createNormalizedConfigs","set","getPathFromState","Error","String","configs","path","current","allParams","parts","focusedParams","currentOptions","focusedRoute","nestedRouteNames","hasNext","name","push","params","currentParams","Object","fromEntries","entries","map","key","value","undefined","optional","find","part","param","stringify","filter","entry","assign","forEach","nextRoute","nestedConfig","segment","Array","from","char","test","encodeURIComponent","join","query","sort","replace","startsWith","createConfigItem","config","parentParts","exact","c","result"],"sourceRoot":"../../src","sources":["getPathFromState.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["combinePatternParts","getPatternParts","getStateFromRouteParams","queryString","validatePathConfig","serializeParamValue","value","Array","isArray","map","String","encodePathParam","result","char","charCode","charCodeAt","safe","includes","encodeURIComponent","getActiveRoute","state","configs","getRouteState","route","index","routes","length","Error","config","name","routeState","screens","cachedNormalizedConfigs","WeakMap","getNormalizedConfigs","options","cached","get","normalizedConfigs","createNormalizedConfigs","set","getPathFromState","cachedRouteStates","Map","hasScreenParams","params","screen","hasStateParams","undefined","has","focusedRoute","path","current","initialRoute","parts","partValues","focusedParams","currentOptions","nestedRouteNames","hasNext","ownParts","push","currentParams","__proto__","key","canBeOmitted","part","optional","repeat","stringify","claimedParams","Set","add","nextRoute","nestedConfig","segment","values","split","some","item","replace","join","query","endsWith","slice","startsWith","createConfigItem","parentParts","exact"],"sourceRoot":"../../src","sources":["getPathFromState.tsx"],"mappings":"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","ignoreList":[]}
@@ -10,6 +10,9 @@ export function getPatternParts(path) {
10
10
  };
11
11
  let isRegex = false;
12
12
  let isParam = false;
13
+ let hasRepeat = false;
14
+ let isEscaped = false;
15
+ let isInCharClass = false;
13
16
  let regexInnerParens = 0;
14
17
 
15
18
  // One extra iteration to add the last character
@@ -25,7 +28,7 @@ export function getPatternParts(path) {
25
28
  } else if (!isRegex) {
26
29
  throw new Error(`Encountered ':' in the middle of a segment in path: ${path}`);
27
30
  }
28
- } else if (char === '(') {
31
+ } else if (char === '(' && !isEscaped && !isInCharClass) {
29
32
  if (isParam) {
30
33
  if (isRegex) {
31
34
  // The '(' is part of the regex if we're already inside one
@@ -36,26 +39,33 @@ export function getPatternParts(path) {
36
39
  } else {
37
40
  throw new Error(`Encountered '(' without preceding ':' in path: ${path}`);
38
41
  }
39
- } else if (char === ')') {
42
+ } else if (char === ')' && !isEscaped && !isInCharClass) {
40
43
  if (isParam && isRegex) {
41
44
  if (regexInnerParens) {
42
45
  // The ')' is part of the regex if we're already inside one
43
46
  regexInnerParens--;
44
- current.regex += char;
45
47
  } else {
48
+ current.pattern += char;
46
49
  isRegex = false;
47
50
  isParam = false;
48
51
  }
49
52
  } else {
50
53
  throw new Error(`Encountered ')' without preceding '(' in path: ${path}`);
51
54
  }
52
- } else if (char === '?') {
53
- if (current.param) {
55
+ } else if (char === '?' && !isRegex) {
56
+ if (current.name) {
54
57
  isParam = false;
55
58
  current.optional = true;
56
59
  } else {
57
60
  throw new Error(`Encountered '?' without preceding ':' in path: ${path}`);
58
61
  }
62
+ } else if (current.name && !isRegex && (char === '*' || char === '+') && (path[i + 1] == null || path[i + 1] === '/' || path[i + 1] === '?' || path[i + 1] === '*' || path[i + 1] === '+')) {
63
+ if (current.optional || path[i + 1] !== undefined && path[i + 1] !== '/') {
64
+ throw new Error(`Cannot combine path param modifiers in path: ${path}`);
65
+ }
66
+ isParam = false;
67
+ current.repeat = char === '*' ? 'zero-or-more' : 'one-or-more';
68
+ hasRepeat = true;
59
69
  } else if (char == null || char === '/' && !isRegex) {
60
70
  isParam = false;
61
71
 
@@ -64,11 +74,11 @@ export function getPatternParts(path) {
64
74
  if (current.segment === '') {
65
75
  continue;
66
76
  }
67
- if (current.param) {
68
- current.param = current.param.replace(/^:/, '');
77
+ if (current.name) {
78
+ current.name = current.name.replace(/^:/, '');
69
79
  }
70
- if (current.regex) {
71
- current.regex = current.regex.replace(/^\(/, '').replace(/\)$/, '');
80
+ if (current.pattern) {
81
+ current.pattern = current.pattern.replace(/^\(/, '').replace(/\)$/, '');
72
82
  }
73
83
  parts.push(current);
74
84
  if (char == null) {
@@ -79,23 +89,60 @@ export function getPatternParts(path) {
79
89
  };
80
90
  }
81
91
  if (isRegex) {
82
- current.regex = current.regex || '';
83
- current.regex += char;
92
+ current.pattern = current.pattern || '';
93
+ current.pattern += char;
94
+
95
+ // Track escapes and character classes so parens inside them are not special
96
+ if (isEscaped) {
97
+ isEscaped = false;
98
+ } else if (char === '\\') {
99
+ isEscaped = true;
100
+ } else if (char === '[') {
101
+ isInCharClass = true;
102
+ } else if (char === ']') {
103
+ isInCharClass = false;
104
+ }
84
105
  }
85
106
  if (isParam && !isRegex) {
86
- current.param = current.param || '';
87
- current.param += char;
107
+ current.name = current.name || '';
108
+ current.name += char;
88
109
  }
89
110
  }
90
111
  if (isRegex) {
91
112
  throw new Error(`Could not find closing ')' in path: ${path}`);
92
113
  }
93
- const params = parts.map(part => part.param).filter(Boolean);
114
+ const params = parts.map(part => part.name).filter(Boolean);
94
115
  for (const [index, param] of params.entries()) {
95
116
  if (params.indexOf(param) !== index) {
96
117
  throw new Error(`Duplicate param name '${param}' found in path: ${path}`);
97
118
  }
98
119
  }
120
+ if (hasRepeat) {
121
+ validateRepeatedParts(parts, path);
122
+ }
99
123
  return parts;
100
124
  }
125
+ function validateRepeatedParts(parts, path) {
126
+ let variablePart;
127
+ for (const part of parts) {
128
+ if (!part.name && part.segment !== '*') {
129
+ variablePart = undefined;
130
+ continue;
131
+ }
132
+ if (!part.repeat && !part.optional && part.segment !== '*') {
133
+ continue;
134
+ }
135
+ if (variablePart && (variablePart.repeat || part.repeat)) {
136
+ throw new Error(`A repeated param must be separated from optional, repeated, or wildcard segments by a static segment: ${path}`);
137
+ }
138
+ variablePart = part;
139
+ }
140
+ }
141
+ export function combinePatternParts(parentParts, parts, exact = false) {
142
+ const combined = exact ? parts : [...parentParts, ...parts];
143
+ if (combined.some(part => part.repeat)) {
144
+ validateRepeatedParts(combined, combined.map(part => part.segment).join('/'));
145
+ }
146
+ return combined;
147
+ }
101
148
  //# sourceMappingURL=getPatternParts.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["getPatternParts","path","parts","current","segment","isRegex","isParam","regexInnerParens","i","length","char","Error","regex","param","optional","replace","push","params","map","part","filter","Boolean","index","entries","indexOf"],"sourceRoot":"../../src","sources":["getPatternParts.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["getPatternParts","path","parts","current","segment","isRegex","isParam","hasRepeat","isEscaped","isInCharClass","regexInnerParens","i","length","char","Error","pattern","name","optional","undefined","repeat","replace","push","params","map","part","filter","Boolean","index","param","entries","indexOf","validateRepeatedParts","variablePart","combinePatternParts","parentParts","exact","combined","some","join"],"sourceRoot":"../../src","sources":["getPatternParts.tsx"],"mappings":"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","ignoreList":[]}