@react-navigation/core 8.0.0-alpha.2 → 8.0.0-alpha.21

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 (251) hide show
  1. package/lib/module/BaseNavigationContainer.js +20 -9
  2. package/lib/module/BaseNavigationContainer.js.map +1 -1
  3. package/lib/module/ConsumedParamsContext.js +5 -0
  4. package/lib/module/ConsumedParamsContext.js.map +1 -0
  5. package/lib/module/NavigationBuilderContext.js +1 -0
  6. package/lib/module/NavigationBuilderContext.js.map +1 -1
  7. package/lib/module/NavigationIndependentTree.js +8 -4
  8. package/lib/module/NavigationIndependentTree.js.map +1 -1
  9. package/lib/module/NavigationProvider.js +14 -3
  10. package/lib/module/NavigationProvider.js.map +1 -1
  11. package/lib/module/NavigationStateContext.js.map +1 -1
  12. package/lib/module/PreventRemoveProvider.js +3 -3
  13. package/lib/module/PreventRemoveProvider.js.map +1 -1
  14. package/lib/module/SceneView.js +46 -56
  15. package/lib/module/SceneView.js.map +1 -1
  16. package/lib/module/StaticNavigation.js +166 -46
  17. package/lib/module/StaticNavigation.js.map +1 -1
  18. package/lib/module/checkSerializable.js +11 -4
  19. package/lib/module/checkSerializable.js.map +1 -1
  20. package/lib/module/createNavigatorFactory.js +27 -5
  21. package/lib/module/createNavigatorFactory.js.map +1 -1
  22. package/lib/module/findFocusedRoute.js +7 -4
  23. package/lib/module/findFocusedRoute.js.map +1 -1
  24. package/lib/module/getActionFromState.js +40 -14
  25. package/lib/module/getActionFromState.js.map +1 -1
  26. package/lib/module/getPathFromState.js +48 -11
  27. package/lib/module/getPathFromState.js.map +1 -1
  28. package/lib/module/getPatternParts.js +3 -0
  29. package/lib/module/getPatternParts.js.map +1 -1
  30. package/lib/module/getStateFromPath.js +353 -166
  31. package/lib/module/getStateFromPath.js.map +1 -1
  32. package/lib/module/getStateFromRouteParams.js +24 -0
  33. package/lib/module/getStateFromRouteParams.js.map +1 -0
  34. package/lib/module/index.js +3 -4
  35. package/lib/module/index.js.map +1 -1
  36. package/lib/module/theming/useTheme.js +1 -1
  37. package/lib/module/theming/useTheme.js.map +1 -1
  38. package/lib/module/types.js +15 -0
  39. package/lib/module/types.js.map +1 -1
  40. package/lib/module/useDescriptors.js +18 -9
  41. package/lib/module/useDescriptors.js.map +1 -1
  42. package/lib/module/useEventEmitter.js +43 -31
  43. package/lib/module/useEventEmitter.js.map +1 -1
  44. package/lib/module/useFocusEvents.js +6 -2
  45. package/lib/module/useFocusEvents.js.map +1 -1
  46. package/lib/module/useFocusedListenersChildrenAdapter.js +2 -2
  47. package/lib/module/useFocusedListenersChildrenAdapter.js.map +1 -1
  48. package/lib/module/useIsFocused.js +7 -12
  49. package/lib/module/useIsFocused.js.map +1 -1
  50. package/lib/module/useNavigation.js.map +1 -1
  51. package/lib/module/useNavigationBuilder.js +144 -86
  52. package/lib/module/useNavigationBuilder.js.map +1 -1
  53. package/lib/module/useNavigationCache.js +3 -3
  54. package/lib/module/useNavigationCache.js.map +1 -1
  55. package/lib/module/useNavigationHelpers.js +1 -1
  56. package/lib/module/useNavigationHelpers.js.map +1 -1
  57. package/lib/module/useNavigationIndependentTree.js +1 -1
  58. package/lib/module/useNavigationIndependentTree.js.map +1 -1
  59. package/lib/module/useNavigationState.js +6 -4
  60. package/lib/module/useNavigationState.js.map +1 -1
  61. package/lib/module/useOnAction.js +3 -3
  62. package/lib/module/useOnAction.js.map +1 -1
  63. package/lib/module/useOnGetState.js +6 -3
  64. package/lib/module/useOnGetState.js.map +1 -1
  65. package/lib/module/useOnPreventRemove.js +3 -3
  66. package/lib/module/useOnPreventRemove.js.map +1 -1
  67. package/lib/module/useOnRouteFocus.js +1 -1
  68. package/lib/module/useOnRouteFocus.js.map +1 -1
  69. package/lib/module/useOptionsGetters.js +7 -4
  70. package/lib/module/useOptionsGetters.js.map +1 -1
  71. package/lib/module/usePreventRemove.js +1 -1
  72. package/lib/module/usePreventRemove.js.map +1 -1
  73. package/lib/module/usePreventRemoveContext.js +1 -1
  74. package/lib/module/usePreventRemoveContext.js.map +1 -1
  75. package/lib/module/useRegisterNavigator.js +2 -2
  76. package/lib/module/useRegisterNavigator.js.map +1 -1
  77. package/lib/module/useRoute.js.map +1 -1
  78. package/lib/module/useRouteCache.js +2 -1
  79. package/lib/module/useRouteCache.js.map +1 -1
  80. package/lib/module/useScheduleUpdate.js +1 -1
  81. package/lib/module/useScheduleUpdate.js.map +1 -1
  82. package/lib/module/useStateForPath.js +1 -1
  83. package/lib/module/useStateForPath.js.map +1 -1
  84. package/lib/module/validatePathConfig.js +2 -1
  85. package/lib/module/validatePathConfig.js.map +1 -1
  86. package/lib/typescript/src/BaseNavigationContainer.d.ts +6 -3
  87. package/lib/typescript/src/BaseNavigationContainer.d.ts.map +1 -1
  88. package/lib/typescript/src/ConsumedParamsContext.d.ts +8 -0
  89. package/lib/typescript/src/ConsumedParamsContext.d.ts.map +1 -0
  90. package/lib/typescript/src/EnsureSingleNavigator.d.ts +1 -1
  91. package/lib/typescript/src/EnsureSingleNavigator.d.ts.map +1 -1
  92. package/lib/typescript/src/Group.d.ts +1 -1
  93. package/lib/typescript/src/Group.d.ts.map +1 -1
  94. package/lib/typescript/src/NavigationBuilderContext.d.ts +12 -6
  95. package/lib/typescript/src/NavigationBuilderContext.d.ts.map +1 -1
  96. package/lib/typescript/src/NavigationContainerRefContext.d.ts +1 -1
  97. package/lib/typescript/src/NavigationContainerRefContext.d.ts.map +1 -1
  98. package/lib/typescript/src/NavigationFocusedRouteStateContext.d.ts +4 -4
  99. package/lib/typescript/src/NavigationFocusedRouteStateContext.d.ts.map +1 -1
  100. package/lib/typescript/src/NavigationHelpersContext.d.ts +1 -1
  101. package/lib/typescript/src/NavigationHelpersContext.d.ts.map +1 -1
  102. package/lib/typescript/src/NavigationIndependentTree.d.ts +1 -1
  103. package/lib/typescript/src/NavigationIndependentTree.d.ts.map +1 -1
  104. package/lib/typescript/src/NavigationProvider.d.ts +10 -10
  105. package/lib/typescript/src/NavigationProvider.d.ts.map +1 -1
  106. package/lib/typescript/src/NavigationStateContext.d.ts +3 -3
  107. package/lib/typescript/src/NavigationStateContext.d.ts.map +1 -1
  108. package/lib/typescript/src/PreventRemoveProvider.d.ts +1 -1
  109. package/lib/typescript/src/PreventRemoveProvider.d.ts.map +1 -1
  110. package/lib/typescript/src/SceneView.d.ts +3 -2
  111. package/lib/typescript/src/SceneView.d.ts.map +1 -1
  112. package/lib/typescript/src/Screen.d.ts +1 -1
  113. package/lib/typescript/src/Screen.d.ts.map +1 -1
  114. package/lib/typescript/src/StaticContainer.d.ts +1 -1
  115. package/lib/typescript/src/StaticContainer.d.ts.map +1 -1
  116. package/lib/typescript/src/StaticNavigation.d.ts +123 -92
  117. package/lib/typescript/src/StaticNavigation.d.ts.map +1 -1
  118. package/lib/typescript/src/checkSerializable.d.ts +5 -3
  119. package/lib/typescript/src/checkSerializable.d.ts.map +1 -1
  120. package/lib/typescript/src/createNavigationContainerRef.d.ts +1 -1
  121. package/lib/typescript/src/createNavigationContainerRef.d.ts.map +1 -1
  122. package/lib/typescript/src/createNavigatorFactory.d.ts +17 -5
  123. package/lib/typescript/src/createNavigatorFactory.d.ts.map +1 -1
  124. package/lib/typescript/src/findFocusedRoute.d.ts +3 -3
  125. package/lib/typescript/src/findFocusedRoute.d.ts.map +1 -1
  126. package/lib/typescript/src/getActionFromState.d.ts +4 -4
  127. package/lib/typescript/src/getActionFromState.d.ts.map +1 -1
  128. package/lib/typescript/src/getPathFromState.d.ts +3 -3
  129. package/lib/typescript/src/getPathFromState.d.ts.map +1 -1
  130. package/lib/typescript/src/getPatternParts.d.ts +1 -0
  131. package/lib/typescript/src/getPatternParts.d.ts.map +1 -1
  132. package/lib/typescript/src/getStateFromPath.d.ts +5 -5
  133. package/lib/typescript/src/getStateFromPath.d.ts.map +1 -1
  134. package/lib/typescript/src/getStateFromRouteParams.d.ts +3 -0
  135. package/lib/typescript/src/getStateFromRouteParams.d.ts.map +1 -0
  136. package/lib/typescript/src/index.d.ts +34 -33
  137. package/lib/typescript/src/index.d.ts.map +1 -1
  138. package/lib/typescript/src/theming/ThemeContext.d.ts +1 -1
  139. package/lib/typescript/src/theming/ThemeContext.d.ts.map +1 -1
  140. package/lib/typescript/src/theming/ThemeProvider.d.ts +2 -2
  141. package/lib/typescript/src/theming/ThemeProvider.d.ts.map +1 -1
  142. package/lib/typescript/src/theming/useTheme.d.ts +1 -1
  143. package/lib/typescript/src/theming/useTheme.d.ts.map +1 -1
  144. package/lib/typescript/src/types.d.ts +215 -131
  145. package/lib/typescript/src/types.d.ts.map +1 -1
  146. package/lib/typescript/src/useChildListeners.d.ts +3 -3
  147. package/lib/typescript/src/useChildListeners.d.ts.map +1 -1
  148. package/lib/typescript/src/useComponent.d.ts +1 -1
  149. package/lib/typescript/src/useComponent.d.ts.map +1 -1
  150. package/lib/typescript/src/useDescriptors.d.ts +7 -7
  151. package/lib/typescript/src/useDescriptors.d.ts.map +1 -1
  152. package/lib/typescript/src/useEventEmitter.d.ts +1 -1
  153. package/lib/typescript/src/useEventEmitter.d.ts.map +1 -1
  154. package/lib/typescript/src/useFocusEvents.d.ts +2 -2
  155. package/lib/typescript/src/useFocusEvents.d.ts.map +1 -1
  156. package/lib/typescript/src/useFocusedListenersChildrenAdapter.d.ts +2 -2
  157. package/lib/typescript/src/useFocusedListenersChildrenAdapter.d.ts.map +1 -1
  158. package/lib/typescript/src/useIsFocused.d.ts +3 -0
  159. package/lib/typescript/src/useIsFocused.d.ts.map +1 -1
  160. package/lib/typescript/src/useKeyedChildListeners.d.ts +3 -3
  161. package/lib/typescript/src/useKeyedChildListeners.d.ts.map +1 -1
  162. package/lib/typescript/src/useNavigation.d.ts +4 -2
  163. package/lib/typescript/src/useNavigation.d.ts.map +1 -1
  164. package/lib/typescript/src/useNavigationBuilder.d.ts +24 -24
  165. package/lib/typescript/src/useNavigationBuilder.d.ts.map +1 -1
  166. package/lib/typescript/src/useNavigationCache.d.ts +3 -3
  167. package/lib/typescript/src/useNavigationCache.d.ts.map +1 -1
  168. package/lib/typescript/src/useNavigationContainerRef.d.ts +1 -1
  169. package/lib/typescript/src/useNavigationContainerRef.d.ts.map +1 -1
  170. package/lib/typescript/src/useNavigationHelpers.d.ts +19 -19
  171. package/lib/typescript/src/useNavigationHelpers.d.ts.map +1 -1
  172. package/lib/typescript/src/useNavigationState.d.ts +2 -2
  173. package/lib/typescript/src/useNavigationState.d.ts.map +1 -1
  174. package/lib/typescript/src/useOnAction.d.ts +9 -9
  175. package/lib/typescript/src/useOnAction.d.ts.map +1 -1
  176. package/lib/typescript/src/useOnGetState.d.ts +1 -1
  177. package/lib/typescript/src/useOnGetState.d.ts.map +1 -1
  178. package/lib/typescript/src/useOnPreventRemove.d.ts +3 -3
  179. package/lib/typescript/src/useOnPreventRemove.d.ts.map +1 -1
  180. package/lib/typescript/src/useOnRouteFocus.d.ts +6 -6
  181. package/lib/typescript/src/useOnRouteFocus.d.ts.map +1 -1
  182. package/lib/typescript/src/useOptionsGetters.d.ts +1 -1
  183. package/lib/typescript/src/useOptionsGetters.d.ts.map +1 -1
  184. package/lib/typescript/src/usePreventRemoveContext.d.ts +1 -1
  185. package/lib/typescript/src/useRoute.d.ts +2 -2
  186. package/lib/typescript/src/useRoute.d.ts.map +1 -1
  187. package/lib/typescript/src/useRouteCache.d.ts +4 -4
  188. package/lib/typescript/src/useRouteCache.d.ts.map +1 -1
  189. package/lib/typescript/src/useScheduleUpdate.d.ts.map +1 -1
  190. package/lib/typescript/src/useStateForPath.d.ts +1 -1
  191. package/lib/typescript/src/useStateForPath.d.ts.map +1 -1
  192. package/lib/typescript/src/utilities.d.ts +45 -5
  193. package/lib/typescript/src/utilities.d.ts.map +1 -1
  194. package/lib/typescript/src/validatePathConfig.d.ts.map +1 -1
  195. package/package.json +23 -20
  196. package/src/BaseNavigationContainer.tsx +337 -326
  197. package/src/ConsumedParamsContext.tsx +10 -0
  198. package/src/NavigationBuilderContext.tsx +14 -8
  199. package/src/NavigationFocusedRouteStateContext.tsx +4 -4
  200. package/src/NavigationIndependentTree.tsx +8 -5
  201. package/src/NavigationProvider.tsx +17 -3
  202. package/src/NavigationStateContext.tsx +5 -6
  203. package/src/PreventRemoveProvider.tsx +3 -3
  204. package/src/SceneView.tsx +58 -56
  205. package/src/StaticNavigation.tsx +488 -250
  206. package/src/checkSerializable.tsx +22 -12
  207. package/src/createNavigatorFactory.tsx +83 -8
  208. package/src/findFocusedRoute.tsx +13 -8
  209. package/src/getActionFromState.tsx +68 -39
  210. package/src/getPathFromState.tsx +91 -27
  211. package/src/getPatternParts.tsx +8 -0
  212. package/src/getStateFromPath.tsx +555 -180
  213. package/src/getStateFromRouteParams.tsx +60 -0
  214. package/src/index.tsx +47 -5
  215. package/src/theming/useTheme.tsx +1 -1
  216. package/src/types.tsx +541 -338
  217. package/src/useDescriptors.tsx +27 -12
  218. package/src/useEventEmitter.tsx +45 -36
  219. package/src/useFocusEvents.tsx +8 -2
  220. package/src/useFocusedListenersChildrenAdapter.tsx +2 -2
  221. package/src/useIsFocused.tsx +14 -21
  222. package/src/useNavigation.tsx +5 -3
  223. package/src/useNavigationBuilder.tsx +220 -132
  224. package/src/useNavigationCache.tsx +6 -6
  225. package/src/useNavigationHelpers.tsx +1 -1
  226. package/src/useNavigationIndependentTree.tsx +1 -1
  227. package/src/useNavigationState.tsx +11 -7
  228. package/src/useOnAction.tsx +10 -10
  229. package/src/useOnGetState.tsx +5 -3
  230. package/src/useOnPreventRemove.tsx +3 -3
  231. package/src/useOnRouteFocus.tsx +10 -12
  232. package/src/useOptionsGetters.tsx +7 -4
  233. package/src/usePreventRemove.tsx +1 -1
  234. package/src/usePreventRemoveContext.tsx +1 -1
  235. package/src/useRegisterNavigator.tsx +2 -2
  236. package/src/useRoute.tsx +4 -2
  237. package/src/useRouteCache.tsx +2 -1
  238. package/src/useScheduleUpdate.tsx +1 -3
  239. package/src/useStateForPath.tsx +1 -1
  240. package/src/utilities.tsx +101 -5
  241. package/src/validatePathConfig.tsx +1 -0
  242. package/lib/module/CurrentRenderContext.js +0 -10
  243. package/lib/module/CurrentRenderContext.js.map +0 -1
  244. package/lib/module/useCurrentRender.js +0 -19
  245. package/lib/module/useCurrentRender.js.map +0 -1
  246. package/lib/typescript/src/CurrentRenderContext.d.ts +0 -9
  247. package/lib/typescript/src/CurrentRenderContext.d.ts.map +0 -1
  248. package/lib/typescript/src/useCurrentRender.d.ts +0 -14
  249. package/lib/typescript/src/useCurrentRender.d.ts.map +0 -1
  250. package/src/CurrentRenderContext.tsx +0 -9
  251. package/src/useCurrentRender.tsx +0 -31
@@ -2,14 +2,46 @@
2
2
 
3
3
  import * as React from 'react';
4
4
  import { isValidElementType } from 'react-is';
5
+ import { combinePatternParts, getPatternParts } from "./getPatternParts.js";
5
6
  import { useRoute } from "./useRoute.js";
6
7
 
8
+ // If every nested route's params include `undefined`, the nested navigator
9
+ // itself can be omitted. Otherwise, require `NavigatorScreenParams`.
10
+
11
+ // If the screens were constructed from a `Record<K, V>`,
12
+ // the screen value (`T`) may be a union.
13
+ // A naked `T extends ...` conditional would distribute over every screen in the union,
14
+ // creating a large params union per route.
15
+ // Wrapping `T` in a tuple checks the union as a whole instead of distributing,
16
+ // https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distributive-conditional-types
17
+
18
+ // Unlike `ParamsForScreen`, we want to distribute for `Record<string, Component | StaticNavigation>`
19
+ // This creates union like:
20
+ // `C extends C ? ParamsForScreen<C> : never) | (S extends S ? ParamsForScreen<S> : never)`
21
+ // `= ParamsForScreen<C> | ParamsForScreen<S>`
22
+
23
+ // Only infer params from linking if it's a pattern (i.e., contains ':')
24
+ // or if parse is present for query params.
25
+ // This avoids inferring non-literals like 'string' without parse.
26
+
7
27
  /**
8
- * Inferred params type based on both linking config and screen.
9
- * - When linking is undefined: infers params from screen
10
- * - When screen is a nested navigator: merges path params with navigator screen params
11
- * - Otherwise: merges path params with screen component params
28
+ * Params type derived from both linking and screen.
29
+ *
30
+ * - Linking has no extractable params (no ':' in path, no `parse`): returns
31
+ * screen params alone.
32
+ * - Linking has params + screen is a nested navigator: intersects path params
33
+ * with the navigator's screen params.
34
+ * - Linking has params + screen is a component without route params: returns
35
+ * path params alone (avoids `LP & undefined = never`).
36
+ * - Linking has params + screen has route params: intersects them.
12
37
  */
38
+ import { jsx as _jsx } from "react/jsx-runtime";
39
+ /**
40
+ * Helper to create a typed `createXScreen` for static configuration.
41
+ */
42
+ export function createScreenFactory() {
43
+ return config => config;
44
+ }
13
45
 
14
46
  /**
15
47
  * Props for a screen component which is rendered by a static navigator.
@@ -19,7 +51,7 @@ import { useRoute } from "./useRoute.js";
19
51
  /**
20
52
  * Infer the param list from the static navigation config.
21
53
  */
22
- import { jsx as _jsx } from "react/jsx-runtime";
54
+
23
55
  const MemoizedScreen = /*#__PURE__*/React.memo(({
24
56
  component
25
57
  }) => {
@@ -48,13 +80,13 @@ const getItemsFromScreens = (Screen, screens) => {
48
80
  component = screen;
49
81
  } else if ('config' in screen) {
50
82
  isNavigator = true;
51
- component = createComponentForStaticNavigation(screen, `${name}Navigator`);
83
+ component = screen.getComponent();
52
84
  }
53
85
  } else if (isValidElementType(item)) {
54
86
  component = item;
55
87
  } else if ('config' in item) {
56
88
  isNavigator = true;
57
- component = createComponentForStaticNavigation(item, `${name}Navigator`);
89
+ component = item.getComponent();
58
90
  }
59
91
  if (component == null) {
60
92
  throw new Error(`Couldn't find a 'screen' property for the screen '${name}'. This can happen if you passed 'undefined'. You likely forgot to export your component from the file it's defined in, or mixed up default import and named import when importing.`);
@@ -83,7 +115,7 @@ const getItemsFromScreens = (Screen, screens) => {
83
115
  * @param displayName Name of the component to be displayed in React DevTools.
84
116
  * @returns A component which renders the navigator.
85
117
  */
86
- export function createComponentForStaticNavigation(tree, displayName) {
118
+ export function createComponentForStaticConfig(tree, displayName) {
87
119
  const {
88
120
  Navigator,
89
121
  Group,
@@ -128,16 +160,73 @@ export function createComponentForStaticNavigation(tree, displayName) {
128
160
  }));
129
161
  }
130
162
  }
131
- const NavigatorComponent = () => {
163
+ if (items.length === 0) {
164
+ throw new Error("Couldn't find any screens in the 'screens' or 'groups' property. Make sure to define at least one screen in the configuration.");
165
+ }
166
+ const NavigatorComponent = ({
167
+ children: _,
168
+ ...props
169
+ }) => {
132
170
  const children = items.map(item => item());
171
+ const screenOptions = typeof props.screenOptions === 'function' || typeof rest.screenOptions === 'function' ? options => ({
172
+ ...(typeof rest.screenOptions === 'function' ? rest.screenOptions(options) : rest.screenOptions),
173
+ ...(typeof props.screenOptions === 'function' ? props.screenOptions(options) : props.screenOptions)
174
+ }) : {
175
+ ...rest.screenOptions,
176
+ ...props.screenOptions
177
+ };
178
+ const screenListeners = typeof props.screenListeners === 'function' || typeof rest.screenListeners === 'function' ? options => ({
179
+ ...(typeof rest.screenListeners === 'function' ? rest.screenListeners(options) : rest.screenListeners),
180
+ ...(typeof props.screenListeners === 'function' ? props.screenListeners(options) : props.screenListeners)
181
+ }) : {
182
+ ...rest.screenListeners,
183
+ ...props.screenListeners
184
+ };
133
185
  return /*#__PURE__*/_jsx(Navigator, {
134
186
  ...rest,
187
+ ...props,
188
+ screenOptions: screenOptions,
189
+ screenListeners: screenListeners,
135
190
  children: children
136
191
  });
137
192
  };
138
193
  NavigatorComponent.displayName = displayName;
139
194
  return NavigatorComponent;
140
195
  }
196
+ // Mark screens that resolve to the same pattern and same component or navigator
197
+ const markSharedPathConfigs = (screens, sources, blocked) => {
198
+ const candidates = new Map();
199
+ const collect = (screens, parentParts, disabled) => {
200
+ for (const config of Object.values(screens)) {
201
+ if (config == null || typeof config === 'string') {
202
+ continue;
203
+ }
204
+ const parts = typeof config.path === 'string' ? combinePatternParts(parentParts, getPatternParts(config.path), config.exact) : parentParts;
205
+ if (sources.has(config) && typeof config.path === 'string') {
206
+ if (disabled) {
207
+ blocked.add(config);
208
+ }
209
+ const pattern = parts.map(part => part.segment).join('/');
210
+ const entries = candidates.get(pattern) ?? [];
211
+ entries.push(config);
212
+ candidates.set(pattern, entries);
213
+ }
214
+ if (config.screens) {
215
+ collect(config.screens, parts, disabled || config.shared === false);
216
+ }
217
+ }
218
+ };
219
+ collect(screens, [], false);
220
+ for (const entries of candidates.values()) {
221
+ for (const entry of entries) {
222
+ const source = sources.get(entry);
223
+ if (entry.shared === undefined && !blocked.has(entry) && entries.some(candidate => candidate !== entry && !blocked.has(candidate) && sources.get(candidate) === source)) {
224
+ entry.shared = true;
225
+ }
226
+ }
227
+ }
228
+ };
229
+
141
230
  /**
142
231
  * Create a path config object from a static navigation config for deep linking.
143
232
  *
@@ -160,8 +249,21 @@ export function createComponentForStaticNavigation(tree, displayName) {
160
249
  export function createPathConfigForStaticNavigation(tree, options, auto) {
161
250
  let initialScreenHasPath = false;
162
251
  let initialScreenConfig;
163
- const createPathConfigForTree = (t, o, skipInitialDetection) => {
164
- const createPathConfigForScreens = (screens, groupLinking, initialRouteName) => {
252
+ let hasEmptyPath = false;
253
+ const blocked = new WeakSet();
254
+ const sources = new WeakMap();
255
+ const createPathConfigForTree = (t, o, skipInitialDetection, allowAutoEmptyPath) => {
256
+ const initialRouteName = o?.initialRouteName ?? t.config.initialRouteName;
257
+ if (initialRouteName != null) {
258
+ const routeNames = new Set(Object.keys(t.config.screens ?? {}));
259
+ for (const group of Object.values(t.config.groups ?? {})) {
260
+ Object.keys(group.screens).forEach(name => routeNames.add(name));
261
+ }
262
+ if (!routeNames.has(initialRouteName)) {
263
+ throw new Error(`Couldn't find a screen named '${initialRouteName}' to use as 'initialRouteName'.`);
264
+ }
265
+ }
266
+ const createPathConfigForScreens = (screens, initialRouteName) => {
165
267
  return Object.fromEntries(Object.entries(screens)
166
268
  // Re-order to move the initial route to the front
167
269
  // This way we can detect the initial route correctly
@@ -175,61 +277,75 @@ export function createPathConfigForStaticNavigation(tree, options, auto) {
175
277
  return 0;
176
278
  }).map(([key, item]) => {
177
279
  const screenConfig = {};
178
- const groupPath = typeof groupLinking === 'string' ? groupLinking : groupLinking?.path;
179
- const normalizePath = path => {
180
- return `${groupPath ?? ''}/${path}`.replace(/^\//, '') // Remove extra leading slash
181
- .replace(/\/$/, ''); // Remove extra trailing slash
182
- };
183
- if ('linking' in item) {
280
+ sources.set(screenConfig, typeof item === 'object' && 'screen' in item ? item.screen : item);
281
+ const normalizePath = path => path.replace(/^\/+|\/+$/g, '');
282
+ if ('linking' in item && item.linking !== undefined) {
184
283
  if (typeof item.linking === 'string') {
185
284
  screenConfig.path = item.linking;
186
- } else {
187
- Object.assign(screenConfig, item.linking);
285
+ } else if (item.linking != null && typeof item.linking === 'object') {
286
+ Object.assign(screenConfig, {
287
+ ...item.linking
288
+ });
188
289
  }
189
290
  }
190
- if (typeof groupLinking !== 'string') {
191
- if (groupLinking?.parse != null) {
192
- screenConfig.parse = {
193
- ...groupLinking.parse,
194
- ...screenConfig.parse
195
- };
196
- }
197
- if (groupLinking?.stringify != null) {
198
- screenConfig.stringify = {
199
- ...groupLinking.stringify,
200
- ...screenConfig.stringify
201
- };
202
- }
291
+ if (screenConfig.exact && screenConfig.path == null) {
292
+ throw new Error("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: ''`.");
203
293
  }
204
294
  if (typeof screenConfig.path === 'string') {
205
295
  screenConfig.path = normalizePath(screenConfig.path);
206
296
  }
297
+ if (screenConfig.alias != null) {
298
+ screenConfig.alias = screenConfig.alias.map(alias => {
299
+ if (typeof alias === 'string') {
300
+ return normalizePath(alias);
301
+ }
302
+ return {
303
+ ...alias,
304
+ path: normalizePath(alias.path)
305
+ };
306
+ });
307
+ }
207
308
  let screens;
309
+ const hasExplicitScreens = 'screens' in screenConfig && screenConfig.screens != null;
310
+ const hasDisabledLinking = 'linking' in item && item.linking === null;
311
+ const childOptions = 'initialRouteName' in screenConfig && typeof screenConfig.initialRouteName === 'string' ? {
312
+ initialRouteName: screenConfig.initialRouteName
313
+ } : undefined;
314
+ if (hasExplicitScreens && childOptions != null && !Object.keys(screenConfig.screens ?? {}).includes(childOptions.initialRouteName)) {
315
+ throw new Error(`Couldn't find a screen named '${childOptions.initialRouteName}' to use as 'initialRouteName'.`);
316
+ }
208
317
  const skipInitialDetectionInChild = skipInitialDetection || screenConfig.path != null && screenConfig.path !== '';
209
- if ('config' in item) {
210
- screens = createPathConfigForTree(item, undefined, skipInitialDetectionInChild);
211
- } else if ('screen' in item && 'config' in item.screen && (item.screen.config.screens || item.screen.config.groups)) {
212
- screens = createPathConfigForTree(item.screen, undefined, skipInitialDetectionInChild);
318
+ const allowAutoEmptyPathInChild = allowAutoEmptyPath && (initialRouteName == null || key === initialRouteName);
319
+ if (!hasExplicitScreens && !hasDisabledLinking && 'config' in item) {
320
+ screens = createPathConfigForTree(item, childOptions, skipInitialDetectionInChild, allowAutoEmptyPathInChild);
321
+ } else if (!hasExplicitScreens && !hasDisabledLinking && 'screen' in item && 'config' in item.screen && (item.screen.config.screens || item.screen.config.groups)) {
322
+ screens = createPathConfigForTree(item.screen, childOptions, skipInitialDetectionInChild, allowAutoEmptyPathInChild);
213
323
  }
214
324
  if (screens) {
215
- // @ts-expect-error - we can't type this properly
216
325
  screenConfig.screens = screens;
217
326
  }
218
327
  if (auto && !('screens' in screenConfig && screenConfig.screens) &&
219
- // Skip generating path for screens that specify linking config as `undefined` or `null` explicitly
220
- !('linking' in item && item.linking == null)) {
328
+ // Skip generating path for screens that specify linking config as `null` explicitly
329
+ !hasDisabledLinking) {
221
330
  if (screenConfig.path != null) {
222
331
  if (!skipInitialDetection) {
223
- if (key === initialRouteName && screenConfig.path != null) {
224
- initialScreenHasPath = true;
225
- } else if (screenConfig.path === '') {
332
+ if (screenConfig.path === '') {
226
333
  // We encounter a leaf screen with empty path,
227
334
  // Clear the initial screen config as it's not needed anymore
228
335
  initialScreenConfig = undefined;
336
+ hasEmptyPath = true;
337
+ if (allowAutoEmptyPath && key === initialRouteName) {
338
+ initialScreenHasPath = true;
339
+ }
340
+ } else if (allowAutoEmptyPath && key === initialRouteName &&
341
+ // Keep an already discovered fallback unless the initial route
342
+ // explicitly uses an empty path.
343
+ initialScreenConfig == null) {
344
+ initialScreenHasPath = true;
229
345
  }
230
346
  }
231
347
  } else {
232
- if (!groupPath && !skipInitialDetection && initialScreenConfig == null) {
348
+ if (!skipInitialDetection && allowAutoEmptyPath && (initialRouteName == null || key === initialRouteName) && !hasEmptyPath && initialScreenConfig == null) {
233
349
  initialScreenConfig = screenConfig;
234
350
  }
235
351
  screenConfig.path = normalizePath(key.replace(/([A-Z]+)/g, '-$1').replace(/^-/, '').toLowerCase());
@@ -244,11 +360,11 @@ export function createPathConfigForStaticNavigation(tree, options, auto) {
244
360
  // So we add the screens and groups in the same order as they are defined
245
361
  for (const key in t.config) {
246
362
  if (key === 'screens' && t.config.screens) {
247
- Object.assign(screens, createPathConfigForScreens(t.config.screens, undefined, o?.initialRouteName ?? t.config.initialRouteName));
363
+ Object.assign(screens, createPathConfigForScreens(t.config.screens, o?.initialRouteName ?? t.config.initialRouteName));
248
364
  }
249
365
  if (key === 'groups' && t.config.groups) {
250
366
  Object.entries(t.config.groups).forEach(([, group]) => {
251
- Object.assign(screens, createPathConfigForScreens(group.screens, group.linking, o?.initialRouteName ?? t.config.initialRouteName));
367
+ Object.assign(screens, createPathConfigForScreens(group.screens, o?.initialRouteName ?? t.config.initialRouteName));
252
368
  });
253
369
  }
254
370
  }
@@ -257,10 +373,14 @@ export function createPathConfigForStaticNavigation(tree, options, auto) {
257
373
  }
258
374
  return screens;
259
375
  };
260
- const screens = createPathConfigForTree(tree, options, false);
376
+ const screens = createPathConfigForTree(tree, options, false, true);
261
377
  if (auto && initialScreenConfig && !initialScreenHasPath) {
262
378
  initialScreenConfig.path = '';
263
379
  }
380
+ if (!screens) {
381
+ return undefined;
382
+ }
383
+ markSharedPathConfigs(screens, sources, blocked);
264
384
  return screens;
265
385
  }
266
386
  //# sourceMappingURL=StaticNavigation.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","isValidElementType","useRoute","jsx","_jsx","MemoizedScreen","memo","component","route","children","createElement","displayName","getItemsFromScreens","Screen","screens","Object","entries","map","name","item","props","useIf","isNavigator","screen","if","_if","rest","createComponentForStaticNavigation","Error","element","shouldRender","tree","Navigator","Group","config","groups","items","key","push","group","groupItems","navigationKey","NavigatorComponent","createPathConfigForStaticNavigation","options","auto","initialScreenHasPath","initialScreenConfig","createPathConfigForTree","t","o","skipInitialDetection","createPathConfigForScreens","groupLinking","initialRouteName","fromEntries","sort","a","b","screenConfig","groupPath","path","normalizePath","replace","linking","assign","parse","stringify","skipInitialDetectionInChild","undefined","toLowerCase","filter","keys","length","forEach"],"sourceRoot":"../../src","sources":["StaticNavigation.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","isValidElementType","combinePatternParts","getPatternParts","useRoute","jsx","_jsx","createScreenFactory","config","MemoizedScreen","memo","component","route","children","createElement","displayName","getItemsFromScreens","Screen","screens","Object","entries","map","name","item","props","useIf","isNavigator","screen","if","_if","rest","getComponent","Error","element","shouldRender","createComponentForStaticConfig","tree","Navigator","Group","groups","items","key","push","group","groupItems","navigationKey","length","NavigatorComponent","_","screenOptions","options","screenListeners","markSharedPathConfigs","sources","blocked","candidates","Map","collect","parentParts","disabled","values","parts","path","exact","has","add","pattern","part","segment","join","get","set","shared","entry","source","undefined","some","candidate","createPathConfigForStaticNavigation","auto","initialScreenHasPath","initialScreenConfig","hasEmptyPath","WeakSet","WeakMap","createPathConfigForTree","t","o","skipInitialDetection","allowAutoEmptyPath","initialRouteName","routeNames","Set","keys","forEach","createPathConfigForScreens","fromEntries","sort","a","b","screenConfig","normalizePath","replace","linking","assign","alias","hasExplicitScreens","hasDisabledLinking","childOptions","includes","skipInitialDetectionInChild","allowAutoEmptyPathInChild","toLowerCase","filter"],"sourceRoot":"../../src","sources":["StaticNavigation.tsx"],"mappings":"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","ignoreList":[]}
@@ -9,7 +9,7 @@ const checkSerializableWithoutCircularReference = (o, seen, location) => {
9
9
  if (Object.prototype.toString.call(o) !== '[object Object]' && !Array.isArray(o)) {
10
10
  return {
11
11
  serializable: false,
12
- location,
12
+ location: location.slice(),
13
13
  reason: typeof o === 'function' ? 'Function' : String(o)
14
14
  };
15
15
  }
@@ -17,25 +17,32 @@ const checkSerializableWithoutCircularReference = (o, seen, location) => {
17
17
  return {
18
18
  serializable: false,
19
19
  reason: 'Circular reference',
20
- location
20
+ location: location.slice()
21
21
  };
22
22
  }
23
23
  seen.add(o);
24
24
  if (Array.isArray(o)) {
25
25
  for (let i = 0; i < o.length; i++) {
26
- const childResult = checkSerializableWithoutCircularReference(o[i], new Set(seen), [...location, i]);
26
+ location.push(i);
27
+ const childResult = checkSerializableWithoutCircularReference(o[i], seen, location);
28
+ location.pop();
27
29
  if (!childResult.serializable) {
30
+ seen.delete(o);
28
31
  return childResult;
29
32
  }
30
33
  }
31
34
  } else {
32
35
  for (const key in o) {
33
- const childResult = checkSerializableWithoutCircularReference(o[key], new Set(seen), [...location, key]);
36
+ location.push(key);
37
+ const childResult = checkSerializableWithoutCircularReference(o[key], seen, location);
38
+ location.pop();
34
39
  if (!childResult.serializable) {
40
+ seen.delete(o);
35
41
  return childResult;
36
42
  }
37
43
  }
38
44
  }
45
+ seen.delete(o);
39
46
  return {
40
47
  serializable: true
41
48
  };
@@ -1 +1 @@
1
- {"version":3,"names":["checkSerializableWithoutCircularReference","o","seen","location","undefined","serializable","Object","prototype","toString","call","Array","isArray","reason","String","has","add","i","length","childResult","Set","key","checkSerializable"],"sourceRoot":"../../src","sources":["checkSerializable.tsx"],"mappings":";;AAAA,MAAMA,yCAAyC,GAAGA,CAChDC,CAAyB,EACzBC,IAAc,EACdC,QAA6B,KAOtB;EACP,IACEF,CAAC,KAAKG,SAAS,IACfH,CAAC,KAAK,IAAI,IACV,OAAOA,CAAC,KAAK,SAAS,IACtB,OAAOA,CAAC,KAAK,QAAQ,IACrB,OAAOA,CAAC,KAAK,QAAQ,EACrB;IACA,OAAO;MAAEI,YAAY,EAAE;IAAK,CAAC;EAC/B;EAEA,IACEC,MAAM,CAACC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACR,CAAC,CAAC,KAAK,iBAAiB,IACvD,CAACS,KAAK,CAACC,OAAO,CAACV,CAAC,CAAC,EACjB;IACA,OAAO;MACLI,YAAY,EAAE,KAAK;MACnBF,QAAQ;MACRS,MAAM,EAAE,OAAOX,CAAC,KAAK,UAAU,GAAG,UAAU,GAAGY,MAAM,CAACZ,CAAC;IACzD,CAAC;EACH;EAEA,IAAIC,IAAI,CAACY,GAAG,CAACb,CAAC,CAAC,EAAE;IACf,OAAO;MACLI,YAAY,EAAE,KAAK;MACnBO,MAAM,EAAE,oBAAoB;MAC5BT;IACF,CAAC;EACH;EAEAD,IAAI,CAACa,GAAG,CAACd,CAAC,CAAC;EAEX,IAAIS,KAAK,CAACC,OAAO,CAACV,CAAC,CAAC,EAAE;IACpB,KAAK,IAAIe,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGf,CAAC,CAACgB,MAAM,EAAED,CAAC,EAAE,EAAE;MACjC,MAAME,WAAW,GAAGlB,yCAAyC,CAC3DC,CAAC,CAACe,CAAC,CAAC,EACJ,IAAIG,GAAG,CAAMjB,IAAI,CAAC,EAClB,CAAC,GAAGC,QAAQ,EAAEa,CAAC,CACjB,CAAC;MAED,IAAI,CAACE,WAAW,CAACb,YAAY,EAAE;QAC7B,OAAOa,WAAW;MACpB;IACF;EACF,CAAC,MAAM;IACL,KAAK,MAAME,GAAG,IAAInB,CAAC,EAAE;MACnB,MAAMiB,WAAW,GAAGlB,yCAAyC,CAC3DC,CAAC,CAACmB,GAAG,CAAC,EACN,IAAID,GAAG,CAAMjB,IAAI,CAAC,EAClB,CAAC,GAAGC,QAAQ,EAAEiB,GAAG,CACnB,CAAC;MAED,IAAI,CAACF,WAAW,CAACb,YAAY,EAAE;QAC7B,OAAOa,WAAW;MACpB;IACF;EACF;EAEA,OAAO;IAAEb,YAAY,EAAE;EAAK,CAAC;AAC/B,CAAC;AAED,OAAO,SAASgB,iBAAiBA,CAACpB,CAAyB,EAAE;EAC3D,OAAOD,yCAAyC,CAACC,CAAC,EAAE,IAAIkB,GAAG,CAAM,CAAC,EAAE,EAAE,CAAC;AACzE","ignoreList":[]}
1
+ {"version":3,"names":["checkSerializableWithoutCircularReference","o","seen","location","undefined","serializable","Object","prototype","toString","call","Array","isArray","slice","reason","String","has","add","i","length","push","childResult","pop","delete","key","checkSerializable","Set"],"sourceRoot":"../../src","sources":["checkSerializable.tsx"],"mappings":";;AAQA,MAAMA,yCAAyC,GAAGA,CAChDC,CAAyB,EACzBC,IAAc,EACdC,QAA6B,KAClB;EACX,IACEF,CAAC,KAAKG,SAAS,IACfH,CAAC,KAAK,IAAI,IACV,OAAOA,CAAC,KAAK,SAAS,IACtB,OAAOA,CAAC,KAAK,QAAQ,IACrB,OAAOA,CAAC,KAAK,QAAQ,EACrB;IACA,OAAO;MAAEI,YAAY,EAAE;IAAK,CAAC;EAC/B;EAEA,IACEC,MAAM,CAACC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACR,CAAC,CAAC,KAAK,iBAAiB,IACvD,CAACS,KAAK,CAACC,OAAO,CAACV,CAAC,CAAC,EACjB;IACA,OAAO;MACLI,YAAY,EAAE,KAAK;MACnBF,QAAQ,EAAEA,QAAQ,CAACS,KAAK,CAAC,CAAC;MAC1BC,MAAM,EAAE,OAAOZ,CAAC,KAAK,UAAU,GAAG,UAAU,GAAGa,MAAM,CAACb,CAAC;IACzD,CAAC;EACH;EAEA,IAAIC,IAAI,CAACa,GAAG,CAACd,CAAC,CAAC,EAAE;IACf,OAAO;MACLI,YAAY,EAAE,KAAK;MACnBQ,MAAM,EAAE,oBAAoB;MAC5BV,QAAQ,EAAEA,QAAQ,CAACS,KAAK,CAAC;IAC3B,CAAC;EACH;EAEAV,IAAI,CAACc,GAAG,CAACf,CAAC,CAAC;EAEX,IAAIS,KAAK,CAACC,OAAO,CAACV,CAAC,CAAC,EAAE;IACpB,KAAK,IAAIgB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGhB,CAAC,CAACiB,MAAM,EAAED,CAAC,EAAE,EAAE;MACjCd,QAAQ,CAACgB,IAAI,CAACF,CAAC,CAAC;MAChB,MAAMG,WAAW,GAAGpB,yCAAyC,CAC3DC,CAAC,CAACgB,CAAC,CAAC,EACJf,IAAI,EACJC,QACF,CAAC;MACDA,QAAQ,CAACkB,GAAG,CAAC,CAAC;MAEd,IAAI,CAACD,WAAW,CAACf,YAAY,EAAE;QAC7BH,IAAI,CAACoB,MAAM,CAACrB,CAAC,CAAC;QACd,OAAOmB,WAAW;MACpB;IACF;EACF,CAAC,MAAM;IACL,KAAK,MAAMG,GAAG,IAAItB,CAAC,EAAE;MACnBE,QAAQ,CAACgB,IAAI,CAACI,GAAG,CAAC;MAClB,MAAMH,WAAW,GAAGpB,yCAAyC,CAC3DC,CAAC,CAACsB,GAAG,CAAC,EACNrB,IAAI,EACJC,QACF,CAAC;MACDA,QAAQ,CAACkB,GAAG,CAAC,CAAC;MAEd,IAAI,CAACD,WAAW,CAACf,YAAY,EAAE;QAC7BH,IAAI,CAACoB,MAAM,CAACrB,CAAC,CAAC;QACd,OAAOmB,WAAW;MACpB;IACF;EACF;EAEAlB,IAAI,CAACoB,MAAM,CAACrB,CAAC,CAAC;EAEd,OAAO;IAAEI,YAAY,EAAE;EAAK,CAAC;AAC/B,CAAC;AAED,OAAO,SAASmB,iBAAiBA,CAACvB,CAAyB,EAAE;EAC3D,OAAOD,yCAAyC,CAACC,CAAC,EAAE,IAAIwB,GAAG,CAAM,CAAC,EAAE,EAAE,CAAC;AACzE","ignoreList":[]}
@@ -1,23 +1,45 @@
1
1
  "use strict";
2
2
 
3
+ import * as React from 'react';
3
4
  import { Group } from "./Group.js";
4
5
  import { Screen } from "./Screen.js";
5
-
6
+ import { createComponentForStaticConfig } from "./StaticNavigation.js";
6
7
  /**
7
- * Higher order component to create a `Navigator` and `Screen` pair.
8
- * Custom navigators should wrap the navigator component in `createNavigator` before exporting.
8
+ * Higher order function to create a navigator factory
9
+ * A navigator factory creates a navigator:
10
+ * - `Navigator` and `Screen` pairs for dynamic configuration
11
+ * - Static navigator object for static configuration
9
12
  *
10
13
  * @param Navigator The navigator component to wrap.
11
- * @returns Factory method to create a `Navigator` and `Screen` pair.
14
+ * @returns Factory method to create a navigator
12
15
  */
13
16
  export function createNavigatorFactory(Navigator) {
17
+ const displayName = Navigator.displayName ?? Navigator.name ?? 'Navigator';
14
18
  function createNavigator(config) {
15
19
  if (config != null) {
16
- return {
20
+ const NavigatorComponent = createComponentForStaticConfig({
17
21
  Navigator,
18
22
  Screen,
19
23
  Group,
20
24
  config
25
+ }, displayName);
26
+ return {
27
+ config,
28
+ with(DecoratorComponent) {
29
+ const WithComponent = () => {
30
+ return /*#__PURE__*/React.createElement(DecoratorComponent, {
31
+ Navigator: NavigatorComponent
32
+ });
33
+ };
34
+ WithComponent.displayName = `${displayName}With`;
35
+ return {
36
+ config,
37
+ getComponent: () => WithComponent
38
+ };
39
+ },
40
+ getComponent() {
41
+ return NavigatorComponent;
42
+ }
21
43
  };
22
44
  }
23
45
  return {
@@ -1 +1 @@
1
- {"version":3,"names":["Group","Screen","createNavigatorFactory","Navigator","createNavigator","config"],"sourceRoot":"../../src","sources":["createNavigatorFactory.tsx"],"mappings":";;AAEA,SAASA,KAAK,QAAQ,YAAS;AAC/B,SAASC,MAAM,QAAQ,aAAU;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CAACC,SAAmC,EAAE;EAC1E,SAASC,eAAeA,CAACC,MAAY,EAAO;IAC1C,IAAIA,MAAM,IAAI,IAAI,EAAE;MAClB,OAAO;QACLF,SAAS;QACTF,MAAM;QACND,KAAK;QACLK;MACF,CAAC;IACH;IAEA,OAAO;MACLF,SAAS;MACTF,MAAM;MACND;IACF,CAAC;EACH;EAEA,OAAOI,eAAe;AACxB","ignoreList":[]}
1
+ {"version":3,"names":["React","Group","Screen","createComponentForStaticConfig","createNavigatorFactory","Navigator","displayName","name","createNavigator","config","NavigatorComponent","with","DecoratorComponent","WithComponent","createElement","getComponent"],"sourceRoot":"../../src","sources":["createNavigatorFactory.tsx"],"mappings":";;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,KAAK,QAAQ,YAAS;AAC/B,SAASC,MAAM,QAAQ,aAAU;AACjC,SACEC,8BAA8B,QAGzB,uBAAoB;AAqC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CACpCC,SAAmC,EACH;EAChC,MAAMC,WAAW,GAAGD,SAAS,CAACC,WAAW,IAAID,SAAS,CAACE,IAAI,IAAI,WAAW;EAE1E,SAASC,eAAeA,CAACC,MAAY,EAAO;IAC1C,IAAIA,MAAM,IAAI,IAAI,EAAE;MAClB,MAAMC,kBAAkB,GAAGP,8BAA8B,CACvD;QACEE,SAAS;QACTH,MAAM;QACND,KAAK;QACLQ;MACF,CAAC,EACDH,WACF,CAAC;MAED,OAAO;QACLG,MAAM;QACNE,IAAIA,CACFC,kBAEE,EACF;UACA,MAAMC,aAAa,GAAGA,CAAA,KAAM;YAC1B,oBAAOb,KAAK,CAACc,aAAa,CAACF,kBAAkB,EAAE;cAC7CP,SAAS,EAAEK;YACb,CAAC,CAAC;UACJ,CAAC;UAEDG,aAAa,CAACP,WAAW,GAAG,GAAGA,WAAW,MAAM;UAEhD,OAAO;YACLG,MAAM;YACNM,YAAY,EAAEA,CAAA,KAAMF;UACtB,CAAC;QACH,CAAC;QACDE,YAAYA,CAAA,EAAG;UACb,OAAOL,kBAAkB;QAC3B;MACF,CAAC;IACH;IAEA,OAAO;MACLL,SAAS;MACTH,MAAM;MACND;IACF,CAAC;EACH;EAEA,OAAOO,eAAe;AACxB","ignoreList":[]}
@@ -2,10 +2,13 @@
2
2
 
3
3
  export function findFocusedRoute(state) {
4
4
  let current = state;
5
- while (current?.routes[current.index ?? 0].state != null) {
6
- current = current.routes[current.index ?? 0].state;
5
+ while (current != null) {
6
+ const route = current.routes[current.index ?? 0];
7
+ if (route?.state == null) {
8
+ return route;
9
+ }
10
+ current = route.state;
7
11
  }
8
- const route = current?.routes[current?.index ?? 0];
9
- return route;
12
+ return undefined;
10
13
  }
11
14
  //# sourceMappingURL=findFocusedRoute.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["findFocusedRoute","state","current","routes","index","route"],"sourceRoot":"../../src","sources":["findFocusedRoute.tsx"],"mappings":";;AAWA,OAAO,SAASA,gBAAgBA,CAACC,KAAmB,EAAU;EAC5D,IAAIC,OAAiC,GAAGD,KAAK;EAE7C,OAAOC,OAAO,EAAEC,MAAM,CAACD,OAAO,CAACE,KAAK,IAAI,CAAC,CAAC,CAACH,KAAK,IAAI,IAAI,EAAE;IACxDC,OAAO,GAAGA,OAAO,CAACC,MAAM,CAACD,OAAO,CAACE,KAAK,IAAI,CAAC,CAAC,CAACH,KAAK;EACpD;EAEA,MAAMI,KAAK,GAAGH,OAAO,EAAEC,MAAM,CAACD,OAAO,EAAEE,KAAK,IAAI,CAAC,CAAC;EAElD,OAAOC,KAAK;AACd","ignoreList":[]}
1
+ {"version":3,"names":["findFocusedRoute","state","current","route","routes","index","undefined"],"sourceRoot":"../../src","sources":["findFocusedRoute.tsx"],"mappings":";;AAWA,OAAO,SAASA,gBAAgBA,CAACC,KAAmB,EAAU;EAC5D,IAAIC,OAAiC,GAAGD,KAAK;EAE7C,OAAOC,OAAO,IAAI,IAAI,EAAE;IACtB,MAAMC,KAAiD,GACrDD,OAAO,CAACE,MAAM,CAACF,OAAO,CAACG,KAAK,IAAI,CAAC,CAAC;IAEpC,IAAIF,KAAK,EAAEF,KAAK,IAAI,IAAI,EAAE;MACxB,OAAOE,KAAK;IACd;IAEAD,OAAO,GAAGC,KAAK,CAACF,KAAK;EACvB;EAEA,OAAOK,SAAS;AAClB","ignoreList":[]}
@@ -1,29 +1,50 @@
1
1
  "use strict";
2
2
 
3
+ // Cache the normalized config across calls for the same `options` reference,
4
+ // so we don't re-walk the config tree on every action conversion.
5
+ const cachedNormalizedConfig = new WeakMap();
3
6
  export function getActionFromState(state, options) {
4
- // Create a normalized configs object which will be easier to use
5
- const normalizedConfig = options ? createNormalizedConfigItem(options) : {};
7
+ let normalizedConfig;
8
+ if (options) {
9
+ const cached = cachedNormalizedConfig.get(options);
10
+ if (cached) {
11
+ normalizedConfig = cached;
12
+ } else {
13
+ normalizedConfig = createNormalizedConfigItem(options);
14
+ cachedNormalizedConfig.set(options, normalizedConfig);
15
+ }
16
+ } else {
17
+ normalizedConfig = {};
18
+ }
6
19
  const routes = state.index != null ? state.routes.slice(0, state.index + 1) : state.routes;
7
20
  if (routes.length === 0) {
8
21
  return undefined;
9
22
  }
10
- if (!(routes.length === 1 && routes[0].key === undefined || routes.length === 2 && routes[0].key === undefined && routes[0].name === normalizedConfig?.initialRouteName && routes[1].key === undefined)) {
23
+ const firstRoute = routes[0];
24
+ if (firstRoute == null) {
25
+ return undefined;
26
+ }
27
+ const secondRoute = routes[1];
28
+ if (!(routes.length === 1 && firstRoute.key == null || routes.length === 2 && firstRoute.key == null && firstRoute.name === normalizedConfig?.initialRouteName && secondRoute?.key == null)) {
11
29
  return {
12
30
  type: 'RESET',
13
31
  payload: state
14
32
  };
15
33
  }
16
34
  const route = state.routes[state.index ?? state.routes.length - 1];
17
- let current = route?.state;
18
- let config = normalizedConfig?.screens?.[route?.name];
35
+ if (route == null) {
36
+ return undefined;
37
+ }
38
+ let current = route.state;
39
+ let config = normalizedConfig?.screens?.[route.name];
19
40
  let params = {
20
41
  ...route.params
21
42
  };
22
- const payload = route ? {
43
+ const payload = {
23
44
  name: route.name,
24
45
  path: route.path,
25
46
  params
26
- } : undefined;
47
+ };
27
48
 
28
49
  // If the screen contains a navigator, pop other screens to navigate to it
29
50
  // This avoid pushing multiple instances of navigators onto a stack
@@ -39,7 +60,7 @@ export function getActionFromState(state, options) {
39
60
  // There are 2 ways we can detect if a screen contains a navigator:
40
61
  // - The route contains nested state in `route.state`
41
62
  // - Nested screens are defined in the config
42
- if (payload && config?.screens && Object.keys(config.screens).length) {
63
+ if (config?.screens && Object.keys(config.screens).length) {
43
64
  payload.pop = true;
44
65
  }
45
66
  while (current) {
@@ -48,6 +69,14 @@ export function getActionFromState(state, options) {
48
69
  }
49
70
  const routes = current.index != null ? current.routes.slice(0, current.index + 1) : current.routes;
50
71
  const route = routes[routes.length - 1];
72
+ if (route == null) {
73
+ return undefined;
74
+ }
75
+ const firstRoute = routes[0];
76
+ if (firstRoute == null) {
77
+ return undefined;
78
+ }
79
+ const secondRoute = routes[1];
51
80
 
52
81
  // Explicitly set to override existing value when merging params
53
82
  Object.assign(params, {
@@ -56,10 +85,10 @@ export function getActionFromState(state, options) {
56
85
  params: undefined,
57
86
  state: undefined
58
87
  });
59
- if (routes.length === 1 && routes[0].key === undefined) {
88
+ if (routes.length === 1 && firstRoute.key == null) {
60
89
  params.initial = true;
61
90
  params.screen = route.name;
62
- } else if (routes.length === 2 && routes[0].key === undefined && routes[0].name === config?.initialRouteName && routes[1].key === undefined) {
91
+ } else if (routes.length === 2 && firstRoute.key == null && firstRoute.name === config?.initialRouteName && secondRoute?.key == null) {
63
92
  params.initial = false;
64
93
  params.screen = route.name;
65
94
  } else {
@@ -82,12 +111,9 @@ export function getActionFromState(state, options) {
82
111
  params.pop = true;
83
112
  }
84
113
  }
85
- if (payload?.params.screen || payload?.params.state) {
114
+ if (payload.params.screen || payload.params.state) {
86
115
  payload.pop = true;
87
116
  }
88
- if (!payload) {
89
- return;
90
- }
91
117
 
92
118
  // Try to construct payload for a `NAVIGATE` action from the state
93
119
  // This lets us preserve the navigation state and not lose it