one 1.1.390 → 1.1.392

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 (294) hide show
  1. package/dist/cjs/Root.cjs +6 -17
  2. package/dist/cjs/Root.js +9 -13
  3. package/dist/cjs/Root.js.map +1 -1
  4. package/dist/cjs/Root.native.js +4 -12
  5. package/dist/cjs/Root.native.js.map +1 -1
  6. package/dist/cjs/cli/build.cjs +2 -3
  7. package/dist/cjs/cli/build.js +2 -3
  8. package/dist/cjs/cli/build.js.map +1 -1
  9. package/dist/cjs/cli/build.native.js +2 -3
  10. package/dist/cjs/cli/build.native.js.map +2 -2
  11. package/dist/cjs/constants.cjs +9 -1
  12. package/dist/cjs/constants.js +7 -1
  13. package/dist/cjs/constants.js.map +1 -1
  14. package/dist/cjs/constants.native.js +9 -1
  15. package/dist/cjs/constants.native.js.map +2 -2
  16. package/dist/cjs/fork/NavigationContainer.cjs +49 -31
  17. package/dist/cjs/fork/NavigationContainer.js +40 -21
  18. package/dist/cjs/fork/NavigationContainer.js.map +2 -2
  19. package/dist/cjs/fork/NavigationContainer.native.js +51 -29
  20. package/dist/cjs/fork/NavigationContainer.native.js.map +2 -2
  21. package/dist/cjs/fork/createMemoryHistory.cjs +4 -3
  22. package/dist/cjs/fork/createMemoryHistory.js +3 -2
  23. package/dist/cjs/fork/createMemoryHistory.js.map +1 -1
  24. package/dist/cjs/fork/createMemoryHistory.native.js +8 -4
  25. package/dist/cjs/fork/createMemoryHistory.native.js.map +2 -2
  26. package/dist/cjs/fork/extractPathFromURL.cjs +48 -28
  27. package/dist/cjs/fork/extractPathFromURL.js +44 -21
  28. package/dist/cjs/fork/extractPathFromURL.js.map +2 -2
  29. package/dist/cjs/fork/extractPathFromURL.native.js +58 -26
  30. package/dist/cjs/fork/extractPathFromURL.native.js.map +2 -2
  31. package/dist/cjs/fork/findFocusedRoute.js.map +1 -1
  32. package/dist/cjs/fork/findFocusedRoute.native.js.map +1 -1
  33. package/dist/cjs/fork/getPathFromState-mods.cjs +65 -0
  34. package/dist/cjs/fork/getPathFromState-mods.js +56 -0
  35. package/dist/cjs/fork/getPathFromState-mods.js.map +6 -0
  36. package/dist/cjs/fork/getPathFromState-mods.native.js +70 -0
  37. package/dist/cjs/fork/getPathFromState-mods.native.js.map +6 -0
  38. package/dist/cjs/fork/getPathFromState.cjs +75 -224
  39. package/dist/cjs/fork/getPathFromState.js +68 -223
  40. package/dist/cjs/fork/getPathFromState.js.map +2 -2
  41. package/dist/cjs/fork/getPathFromState.native.js +79 -261
  42. package/dist/cjs/fork/getPathFromState.native.js.map +2 -2
  43. package/dist/cjs/fork/getStateFromPath-mods.cjs +187 -0
  44. package/dist/cjs/fork/getStateFromPath-mods.js +199 -0
  45. package/dist/cjs/fork/getStateFromPath-mods.js.map +6 -0
  46. package/dist/cjs/fork/getStateFromPath-mods.native.js +284 -0
  47. package/dist/cjs/fork/getStateFromPath-mods.native.js.map +6 -0
  48. package/dist/cjs/fork/getStateFromPath.cjs +181 -263
  49. package/dist/cjs/fork/getStateFromPath.js +148 -264
  50. package/dist/cjs/fork/getStateFromPath.js.map +2 -2
  51. package/dist/cjs/fork/getStateFromPath.native.js +164 -304
  52. package/dist/cjs/fork/getStateFromPath.native.js.map +2 -2
  53. package/dist/cjs/fork/useBackButton.js.map +1 -1
  54. package/dist/cjs/fork/useBackButton.native.js.map +1 -1
  55. package/dist/cjs/fork/useDocumentTitle.js +4 -1
  56. package/dist/cjs/fork/useDocumentTitle.js.map +1 -1
  57. package/dist/cjs/fork/useDocumentTitle.native.js +1 -1
  58. package/dist/cjs/fork/useDocumentTitle.native.js.map +2 -2
  59. package/dist/cjs/fork/useLinking.cjs +21 -24
  60. package/dist/cjs/fork/useLinking.js +21 -25
  61. package/dist/cjs/fork/useLinking.js.map +2 -2
  62. package/dist/cjs/fork/useLinking.native.js +68 -66
  63. package/dist/cjs/fork/useLinking.native.js.map +2 -2
  64. package/dist/cjs/fork/useThenable.js.map +1 -1
  65. package/dist/cjs/fork/useThenable.native.js.map +1 -1
  66. package/dist/cjs/fork/validatePathConfig.cjs +32 -11
  67. package/dist/cjs/fork/validatePathConfig.js +41 -11
  68. package/dist/cjs/fork/validatePathConfig.js.map +1 -1
  69. package/dist/cjs/fork/validatePathConfig.native.js +47 -18
  70. package/dist/cjs/fork/validatePathConfig.native.js.map +2 -2
  71. package/dist/cjs/layouts/withLayoutContext.cjs +1 -1
  72. package/dist/cjs/layouts/withLayoutContext.js +1 -1
  73. package/dist/cjs/layouts/withLayoutContext.js.map +1 -1
  74. package/dist/cjs/layouts/withLayoutContext.native.js +1 -1
  75. package/dist/cjs/layouts/withLayoutContext.native.js.map +1 -1
  76. package/dist/cjs/link/linking.cjs +4 -4
  77. package/dist/cjs/link/linking.js +3 -3
  78. package/dist/cjs/link/linking.js.map +2 -2
  79. package/dist/cjs/link/linking.native.js +3 -3
  80. package/dist/cjs/link/linking.native.js.map +1 -1
  81. package/dist/cjs/link/useLinkTo.cjs +2 -2
  82. package/dist/cjs/link/useLinkTo.js +2 -2
  83. package/dist/cjs/link/useLinkTo.js.map +1 -1
  84. package/dist/cjs/link/useLinkTo.native.js +2 -2
  85. package/dist/cjs/link/useLinkTo.native.js.map +1 -1
  86. package/dist/cjs/router/getNormalizedStatePath.cjs +2 -2
  87. package/dist/cjs/router/getNormalizedStatePath.js +2 -2
  88. package/dist/cjs/router/getNormalizedStatePath.js.map +1 -1
  89. package/dist/cjs/router/getNormalizedStatePath.native.js +2 -2
  90. package/dist/cjs/router/getNormalizedStatePath.native.js.map +1 -1
  91. package/dist/cjs/router/router.cjs +19 -3
  92. package/dist/cjs/router/router.js +25 -3
  93. package/dist/cjs/router/router.js.map +1 -1
  94. package/dist/cjs/router/router.native.js +39 -3
  95. package/dist/cjs/router/router.native.js.map +2 -2
  96. package/dist/cjs/utils/serverContext.cjs +7 -7
  97. package/dist/cjs/utils/serverContext.js +7 -7
  98. package/dist/cjs/utils/serverContext.js.map +1 -1
  99. package/dist/cjs/utils/serverContext.native.js +5 -5
  100. package/dist/cjs/utils/serverContext.native.js.map +2 -2
  101. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.cjs +6 -6
  102. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.js +3 -4
  103. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.js.map +2 -2
  104. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js +3 -4
  105. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js.map +2 -2
  106. package/dist/esm/Root.js +6 -2
  107. package/dist/esm/Root.js.map +1 -1
  108. package/dist/esm/Root.mjs +1 -1
  109. package/dist/esm/Root.mjs.map +1 -1
  110. package/dist/esm/Root.native.js +1 -1
  111. package/dist/esm/Root.native.js.map +2 -2
  112. package/dist/esm/cli/build.js +2 -3
  113. package/dist/esm/cli/build.js.map +1 -1
  114. package/dist/esm/cli/build.mjs +2 -3
  115. package/dist/esm/cli/build.mjs.map +1 -1
  116. package/dist/esm/cli/build.native.js +2 -3
  117. package/dist/esm/cli/build.native.js.map +2 -2
  118. package/dist/esm/constants.js +7 -1
  119. package/dist/esm/constants.js.map +1 -1
  120. package/dist/esm/constants.mjs +8 -2
  121. package/dist/esm/constants.mjs.map +1 -1
  122. package/dist/esm/constants.native.js +7 -1
  123. package/dist/esm/constants.native.js.map +2 -2
  124. package/dist/esm/fork/NavigationContainer.js +43 -20
  125. package/dist/esm/fork/NavigationContainer.js.map +1 -1
  126. package/dist/esm/fork/NavigationContainer.mjs +42 -24
  127. package/dist/esm/fork/NavigationContainer.mjs.map +1 -1
  128. package/dist/esm/fork/NavigationContainer.native.js +44 -24
  129. package/dist/esm/fork/NavigationContainer.native.js.map +2 -2
  130. package/dist/esm/fork/createMemoryHistory.js +3 -2
  131. package/dist/esm/fork/createMemoryHistory.js.map +1 -1
  132. package/dist/esm/fork/createMemoryHistory.mjs +4 -3
  133. package/dist/esm/fork/createMemoryHistory.mjs.map +1 -1
  134. package/dist/esm/fork/createMemoryHistory.native.js +4 -4
  135. package/dist/esm/fork/createMemoryHistory.native.js.map +2 -2
  136. package/dist/esm/fork/extractPathFromURL.js +42 -11
  137. package/dist/esm/fork/extractPathFromURL.js.map +1 -1
  138. package/dist/esm/fork/extractPathFromURL.mjs +39 -11
  139. package/dist/esm/fork/extractPathFromURL.mjs.map +1 -1
  140. package/dist/esm/fork/extractPathFromURL.native.js +52 -15
  141. package/dist/esm/fork/extractPathFromURL.native.js.map +2 -2
  142. package/dist/esm/fork/findFocusedRoute.js.map +1 -1
  143. package/dist/esm/fork/findFocusedRoute.mjs.map +1 -1
  144. package/dist/esm/fork/findFocusedRoute.native.js.map +1 -1
  145. package/dist/esm/fork/getPathFromState-mods.js +40 -0
  146. package/dist/esm/fork/getPathFromState-mods.js.map +6 -0
  147. package/dist/esm/fork/getPathFromState-mods.mjs +40 -0
  148. package/dist/esm/fork/getPathFromState-mods.mjs.map +1 -0
  149. package/dist/esm/fork/getPathFromState-mods.native.js +47 -0
  150. package/dist/esm/fork/getPathFromState-mods.native.js.map +6 -0
  151. package/dist/esm/fork/getPathFromState.js +71 -228
  152. package/dist/esm/fork/getPathFromState.js.map +2 -2
  153. package/dist/esm/fork/getPathFromState.mjs +73 -221
  154. package/dist/esm/fork/getPathFromState.mjs.map +1 -1
  155. package/dist/esm/fork/getPathFromState.native.js +79 -260
  156. package/dist/esm/fork/getPathFromState.native.js.map +2 -2
  157. package/dist/esm/fork/getStateFromPath-mods.js +176 -0
  158. package/dist/esm/fork/getStateFromPath-mods.js.map +6 -0
  159. package/dist/esm/fork/getStateFromPath-mods.mjs +143 -0
  160. package/dist/esm/fork/getStateFromPath-mods.mjs.map +1 -0
  161. package/dist/esm/fork/getStateFromPath-mods.native.js +246 -0
  162. package/dist/esm/fork/getStateFromPath-mods.native.js.map +6 -0
  163. package/dist/esm/fork/getStateFromPath.js +160 -265
  164. package/dist/esm/fork/getStateFromPath.js.map +2 -2
  165. package/dist/esm/fork/getStateFromPath.mjs +181 -260
  166. package/dist/esm/fork/getStateFromPath.mjs.map +1 -1
  167. package/dist/esm/fork/getStateFromPath.native.js +164 -302
  168. package/dist/esm/fork/getStateFromPath.native.js.map +2 -2
  169. package/dist/esm/fork/useBackButton.js.map +1 -1
  170. package/dist/esm/fork/useBackButton.mjs.map +1 -1
  171. package/dist/esm/fork/useBackButton.native.js.map +1 -1
  172. package/dist/esm/fork/useDocumentTitle.js +4 -1
  173. package/dist/esm/fork/useDocumentTitle.js.map +1 -1
  174. package/dist/esm/fork/useDocumentTitle.mjs.map +1 -1
  175. package/dist/esm/fork/useDocumentTitle.native.js +1 -1
  176. package/dist/esm/fork/useDocumentTitle.native.js.map +2 -2
  177. package/dist/esm/fork/useLinking.js +22 -26
  178. package/dist/esm/fork/useLinking.js.map +1 -1
  179. package/dist/esm/fork/useLinking.mjs +20 -23
  180. package/dist/esm/fork/useLinking.mjs.map +1 -1
  181. package/dist/esm/fork/useLinking.native.js +65 -67
  182. package/dist/esm/fork/useLinking.native.js.map +2 -2
  183. package/dist/esm/fork/useThenable.js.map +1 -1
  184. package/dist/esm/fork/useThenable.mjs.map +1 -1
  185. package/dist/esm/fork/useThenable.native.js.map +1 -1
  186. package/dist/esm/fork/validatePathConfig.js +41 -11
  187. package/dist/esm/fork/validatePathConfig.js.map +1 -1
  188. package/dist/esm/fork/validatePathConfig.mjs +32 -11
  189. package/dist/esm/fork/validatePathConfig.mjs.map +1 -1
  190. package/dist/esm/fork/validatePathConfig.native.js +43 -18
  191. package/dist/esm/fork/validatePathConfig.native.js.map +2 -2
  192. package/dist/esm/layouts/withLayoutContext.js +1 -1
  193. package/dist/esm/layouts/withLayoutContext.js.map +1 -1
  194. package/dist/esm/layouts/withLayoutContext.mjs +1 -1
  195. package/dist/esm/layouts/withLayoutContext.mjs.map +1 -1
  196. package/dist/esm/layouts/withLayoutContext.native.js +1 -1
  197. package/dist/esm/layouts/withLayoutContext.native.js.map +1 -1
  198. package/dist/esm/link/linking.js +2 -2
  199. package/dist/esm/link/linking.js.map +1 -1
  200. package/dist/esm/link/linking.mjs +2 -2
  201. package/dist/esm/link/linking.mjs.map +1 -1
  202. package/dist/esm/link/linking.native.js +2 -2
  203. package/dist/esm/link/linking.native.js.map +1 -1
  204. package/dist/esm/link/useLinkTo.js +1 -1
  205. package/dist/esm/link/useLinkTo.mjs +1 -1
  206. package/dist/esm/link/useLinkTo.native.js +1 -1
  207. package/dist/esm/router/getNormalizedStatePath.js +1 -1
  208. package/dist/esm/router/getNormalizedStatePath.mjs +1 -1
  209. package/dist/esm/router/getNormalizedStatePath.native.js +1 -1
  210. package/dist/esm/router/router.js +24 -2
  211. package/dist/esm/router/router.js.map +1 -1
  212. package/dist/esm/router/router.mjs +18 -2
  213. package/dist/esm/router/router.mjs.map +1 -1
  214. package/dist/esm/router/router.native.js +38 -2
  215. package/dist/esm/router/router.native.js.map +2 -2
  216. package/dist/esm/utils/serverContext.js +2 -1
  217. package/dist/esm/utils/serverContext.js.map +1 -1
  218. package/dist/esm/utils/serverContext.mjs +1 -1
  219. package/dist/esm/utils/serverContext.mjs.map +1 -1
  220. package/dist/esm/utils/serverContext.native.js +2 -1
  221. package/dist/esm/utils/serverContext.native.js.map +2 -2
  222. package/dist/esm/vite/plugins/fileSystemRouterPlugin.js +3 -3
  223. package/dist/esm/vite/plugins/fileSystemRouterPlugin.js.map +1 -1
  224. package/dist/esm/vite/plugins/fileSystemRouterPlugin.mjs +3 -3
  225. package/dist/esm/vite/plugins/fileSystemRouterPlugin.mjs.map +1 -1
  226. package/dist/esm/vite/plugins/fileSystemRouterPlugin.native.js +3 -3
  227. package/dist/esm/vite/plugins/fileSystemRouterPlugin.native.js.map +2 -2
  228. package/package.json +8 -9
  229. package/src/Root.tsx +6 -2
  230. package/src/cli/build.ts +2 -3
  231. package/src/constants.ts +8 -0
  232. package/src/fork/NavigationContainer.tsx +101 -39
  233. package/src/fork/createMemoryHistory.tsx +15 -13
  234. package/src/fork/extractPathFromURL.ts +85 -40
  235. package/src/fork/findFocusedRoute.tsx +9 -1
  236. package/src/fork/getPathFromState-mods.ts +142 -0
  237. package/src/fork/getPathFromState.ts +244 -501
  238. package/src/fork/getStateFromPath-mods.ts +400 -0
  239. package/src/fork/getStateFromPath.ts +447 -538
  240. package/src/fork/useBackButton.native.tsx +16 -2
  241. package/src/fork/useBackButton.tsx +11 -2
  242. package/src/fork/useDocumentTitle.native.tsx +9 -4
  243. package/src/fork/useDocumentTitle.tsx +12 -7
  244. package/src/fork/useLinking.native.ts +71 -63
  245. package/src/fork/useLinking.ts +75 -40
  246. package/src/fork/useThenable.tsx +7 -1
  247. package/src/fork/validatePathConfig.ts +64 -12
  248. package/src/layouts/withLayoutContext.tsx +1 -1
  249. package/src/link/linking.ts +2 -2
  250. package/src/link/useLinkTo.tsx +1 -1
  251. package/src/router/getNormalizedStatePath.tsx +1 -1
  252. package/src/router/router.ts +41 -2
  253. package/src/utils/serverContext.tsx +3 -1
  254. package/src/vite/plugins/fileSystemRouterPlugin.tsx +3 -3
  255. package/types/Root.d.ts.map +1 -1
  256. package/types/cli/build.d.ts.map +1 -1
  257. package/types/constants.d.ts +2 -0
  258. package/types/constants.d.ts.map +1 -1
  259. package/types/fork/NavigationContainer.d.ts +19 -8
  260. package/types/fork/NavigationContainer.d.ts.map +1 -1
  261. package/types/fork/createMemoryHistory.d.ts +10 -1
  262. package/types/fork/createMemoryHistory.d.ts.map +1 -1
  263. package/types/fork/extractPathFromURL.d.ts +7 -1
  264. package/types/fork/extractPathFromURL.d.ts.map +1 -1
  265. package/types/fork/findFocusedRoute.d.ts +9 -0
  266. package/types/fork/findFocusedRoute.d.ts.map +1 -1
  267. package/types/fork/getPathFromState-mods.d.ts +23 -0
  268. package/types/fork/getPathFromState-mods.d.ts.map +1 -0
  269. package/types/fork/getPathFromState.d.ts +15 -14
  270. package/types/fork/getPathFromState.d.ts.map +1 -1
  271. package/types/fork/getStateFromPath-mods.d.ts +58 -0
  272. package/types/fork/getStateFromPath-mods.d.ts.map +1 -0
  273. package/types/fork/getStateFromPath.d.ts +28 -29
  274. package/types/fork/getStateFromPath.d.ts.map +1 -1
  275. package/types/fork/useBackButton.d.ts +6 -0
  276. package/types/fork/useBackButton.d.ts.map +1 -1
  277. package/types/fork/useBackButton.native.d.ts +9 -1
  278. package/types/fork/useBackButton.native.d.ts.map +1 -1
  279. package/types/fork/useDocumentTitle.d.ts +8 -6
  280. package/types/fork/useDocumentTitle.d.ts.map +1 -1
  281. package/types/fork/useDocumentTitle.native.d.ts +5 -2
  282. package/types/fork/useDocumentTitle.native.d.ts.map +1 -1
  283. package/types/fork/useLinking.d.ts +8 -1
  284. package/types/fork/useLinking.d.ts.map +1 -1
  285. package/types/fork/useLinking.native.d.ts +9 -2
  286. package/types/fork/useLinking.native.d.ts.map +1 -1
  287. package/types/fork/useThenable.d.ts +6 -0
  288. package/types/fork/useThenable.d.ts.map +1 -1
  289. package/types/fork/validatePathConfig.d.ts +8 -1
  290. package/types/fork/validatePathConfig.d.ts.map +1 -1
  291. package/types/link/linking.d.ts +2 -2
  292. package/types/link/linking.d.ts.map +1 -1
  293. package/types/utils/serverContext.d.ts.map +1 -1
  294. package/types/vite/plugins/fileSystemRouterPlugin.d.ts.map +1 -1
@@ -20,239 +20,90 @@ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
20
20
  }), mod);
21
21
  var getPathFromState_exports = {};
22
22
  __export(getPathFromState_exports, {
23
- appendBaseUrl: () => appendBaseUrl,
24
- deepEqual: () => deepEqual,
25
- default: () => getPathFromState,
26
- getPathDataFromState: () => getPathDataFromState
23
+ default: () => getPathFromState_default,
24
+ getPathDataFromState: () => getPathDataFromState,
25
+ getPathFromState: () => getPathFromState
27
26
  });
28
27
  module.exports = __toCommonJS(getPathFromState_exports);
29
- var import_core = require("@react-navigation/core"),
30
- import_matchers = require("../router/matchers.cjs");
31
- const DEFAULT_SCREENS = {},
32
- getActiveRoute = state => {
28
+ var import_getPathFromState_mods = require("./getPathFromState-mods.cjs"),
29
+ import_validatePathConfig = require("./validatePathConfig.cjs");
30
+ const getActiveRoute = state => {
33
31
  const route = typeof state.index == "number" ? state.routes[state.index] : state.routes[state.routes.length - 1];
34
- return route.state ? getActiveRoute(route.state) : route && isInvalidParams(route.params) ? getActiveRoute(createFakeState(route.params)) : route;
35
- };
36
- function createFakeState(params) {
37
- return {
38
- stale: !1,
39
- type: "UNKNOWN",
40
- key: "UNKNOWN",
41
- index: 0,
42
- routeNames: [],
43
- routes: [{
44
- key: "UNKNOWN",
45
- name: params.screen,
46
- params: params.params,
47
- path: params.path
48
- }]
32
+ return route.state ? getActiveRoute(route.state) : route;
33
+ },
34
+ cachedNormalizedConfigs = /* @__PURE__ */new WeakMap(),
35
+ getNormalizedConfigs = options => {
36
+ if (!options?.screens) return {};
37
+ const cached = cachedNormalizedConfigs.get(options?.screens);
38
+ if (cached) return cached;
39
+ const normalizedConfigs = createNormalizedConfigs(options.screens);
40
+ return cachedNormalizedConfigs.set(options.screens, normalizedConfigs), normalizedConfigs;
49
41
  };
42
+ function getPathFromState(state, options) {
43
+ return getPathDataFromState(state, options).path;
50
44
  }
51
- function segmentMatchesConvention(segment) {
52
- return segment === "index" || (0, import_matchers.matchDynamicName)(segment) != null || (0, import_matchers.matchGroupName)(segment) != null || (0, import_matchers.matchDeepDynamicRouteName)(segment) != null;
53
- }
54
- function encodeURIComponentPreservingBrackets(str) {
55
- return encodeURIComponent(str).replace(/%5B/g, "[").replace(/%5D/g, "]");
56
- }
57
- function getPathFromState(state, _options) {
58
- return getPathDataFromState(state, _options).path;
59
- }
60
- function getPathDataFromState(state, _options = {
61
- screens: DEFAULT_SCREENS
62
- }) {
45
+ function getPathDataFromState(state, options) {
63
46
  if (state == null) throw Error("Got 'undefined' for the navigation state. You must pass a valid state object.");
64
- const {
65
- preserveGroups,
66
- preserveDynamicRoutes,
67
- ...options
68
- } = _options;
69
- if ((0, import_core.validatePathConfig)(options), Object.is(options.screens, DEFAULT_SCREENS)) throw Error("You must pass a 'screens' object to 'getPathFromState' to generate a path.");
70
- return getPathFromResolvedState(state,
71
- // Create a normalized configs object which will be easier to use
72
- createNormalizedConfigs(options.screens), {
73
- preserveGroups,
74
- preserveDynamicRoutes
75
- });
76
- }
77
- function processParamsWithUserSettings(configItem, params) {
78
- const stringify = configItem?.stringify;
79
- return Object.fromEntries(Object.entries(params).map(([key, value]) => [key,
80
- // TODO: Strip nullish values here.
81
- stringify?.[key] ? stringify[key](value) :
82
- // Preserve rest params
83
- Array.isArray(value) ? value : String(value)]));
84
- }
85
- function deepEqual(a, b) {
86
- if (a === b) return !0;
87
- if (Array.isArray(a) && Array.isArray(b)) {
88
- if (a.length !== b.length) return !1;
89
- for (let i = 0; i < a.length; i++) if (!deepEqual(a[i], b[i])) return !1;
90
- return !0;
91
- }
92
- if (typeof a == "object" && typeof b == "object") {
93
- const keysA = Object.keys(a),
94
- keysB = Object.keys(b);
95
- if (keysA.length !== keysB.length) return !1;
96
- for (const key of keysA) if (!deepEqual(a[key], b[key])) return !1;
97
- return !0;
98
- }
99
- return !1;
100
- }
101
- function walkConfigItems(route, focusedRoute, configs, {
102
- preserveDynamicRoutes
103
- }) {
104
- !route.state && isInvalidParams(route.params);
105
- let pattern = null,
106
- focusedParams,
107
- hash;
108
- const collectedParams = {};
109
- for (; route.name in configs;) {
110
- const configItem = configs[route.name],
111
- inputPattern = configItem.pattern;
112
- if (inputPattern == null) throw new Error("Unexpected: No pattern found for route " + route.name);
113
- if (pattern = inputPattern, route.params) {
114
- route.params["#"] && (hash = route.params["#"], delete route.params["#"]);
115
- const params = processParamsWithUserSettings(configItem, route.params);
116
- pattern != null && Object.assign(collectedParams, params), deepEqual(focusedRoute, route) && (preserveDynamicRoutes ? focusedParams = params : focusedParams = getParamsWithConventionsCollapsed({
117
- params,
118
- pattern,
119
- routeName: route.name
120
- }));
121
- }
122
- if (!route.state && isInvalidParams(route.params), !configItem.screens || route.state === void 0) {
123
- configItem.initialRouteName && configItem.screens && configItem.initialRouteName in configItem.screens && configItem.screens[configItem.initialRouteName]?.pattern && (pattern = configItem.screens[configItem.initialRouteName].pattern, focusedParams && (preserveDynamicRoutes || (focusedParams = getParamsWithConventionsCollapsed({
124
- params: focusedParams,
125
- pattern,
126
- routeName: route.name
127
- }))));
128
- break;
129
- }
130
- const index = route.state.index ?? route.state.routes.length - 1,
131
- nextRoute = route.state.routes[index],
132
- nestedScreens = configItem.screens;
133
- if (nestedScreens && nextRoute.name in nestedScreens) route = nextRoute, configs = nestedScreens;else break;
134
- }
135
- if (pattern == null) throw new Error(`No pattern found for route "${route.name}". Options are: ${Object.keys(configs).join(", ")}.`);
136
- return pattern && !focusedParams && focusedRoute.params && (preserveDynamicRoutes ? focusedParams = focusedRoute.params : focusedParams = getParamsWithConventionsCollapsed({
137
- params: focusedRoute.params,
138
- pattern,
139
- routeName: route.name
140
- }), focusedParams = {
141
- ...focusedParams,
142
- ...collectedParams
143
- }), {
144
- pattern,
145
- nextRoute: route,
146
- focusedParams,
147
- hash,
148
- params: collectedParams
149
- };
150
- }
151
- function getPathFromResolvedState(state, configs, {
152
- preserveGroups,
153
- preserveDynamicRoutes
154
- }) {
155
- let path = "",
156
- current = state,
157
- hash;
47
+ options && (0, import_validatePathConfig.validatePathConfig)(options);
48
+ const configs = getNormalizedConfigs(options);
49
+ let path = "/",
50
+ current = state;
158
51
  const allParams = {};
159
52
  for (; current;) {
160
- path += "/";
161
- const route = current.routes[current.index ?? 0];
162
- !route.state && isInvalidParams(route.params);
163
- const {
53
+ let index = typeof current.index == "number" ? current.index : 0,
54
+ route = current.routes[index],
164
55
  pattern,
165
- params: params2,
166
- nextRoute,
167
- focusedParams,
168
- hash: $hash
169
- } = walkConfigItems(route, getActiveRoute(current), {
170
- ...configs
171
- }, {
172
- preserveDynamicRoutes
173
- });
174
- if ($hash && (hash = $hash), Object.assign(allParams, params2), path += getPathWithConventionsCollapsed({
56
+ focusedParams;
57
+ const focusedRoute = getActiveRoute(state);
58
+ let currentOptions = configs;
59
+ const nestedRouteNames = [];
60
+ let hasNext = !0;
61
+ for (; route.name in currentOptions && hasNext;) {
62
+ if (pattern = currentOptions[route.name].pattern, nestedRouteNames.push(route.name), route.params) {
63
+ const stringify = currentOptions[route.name]?.stringify,
64
+ currentParams = Object.fromEntries(Object.entries(route.params).flatMap(([key, value]) => key === "screen" || key === "params" ? [] : [[key, stringify?.[key] ? stringify[key](value) : Array.isArray(value) ? value.map(String) : String(value)]]));
65
+ Object.assign(allParams, currentParams), focusedRoute === route && (focusedParams = {
66
+ ...currentParams
67
+ }, pattern?.split("/").filter(p => p.startsWith(":")).forEach(p => {
68
+ const name = getParamName(p);
69
+ focusedParams && delete focusedParams[name];
70
+ }));
71
+ }
72
+ if (!currentOptions[route.name].screens || route.state === void 0) {
73
+ const screens = currentOptions[route.name].screens,
74
+ screen = route.params && "screen" in route.params ? route.params.screen?.toString() : screens ? Object.keys(screens)[0] : void 0;
75
+ screen && screens && currentOptions[route.name].screens?.[screen] ? (route = {
76
+ ...screens[screen],
77
+ name: screen,
78
+ key: screen
79
+ }, currentOptions = screens) : hasNext = !1;
80
+ } else {
81
+ index = typeof route.state.index == "number" ? route.state.index : route.state.routes.length - 1;
82
+ const nextRoute = route.state.routes[index],
83
+ nestedConfig = currentOptions[route.name].screens;
84
+ nestedConfig && nextRoute.name in nestedConfig ? (route = nextRoute, currentOptions = nestedConfig) : hasNext = !1;
85
+ }
86
+ }
87
+ if (currentOptions[route.name] !== void 0 ? (pattern === void 0 && (pattern = nestedRouteNames.join("/")), path += (0, import_getPathFromState_mods.getPathWithConventionsCollapsed)({
88
+ ...options,
175
89
  pattern,
176
- routePath: nextRoute.path,
90
+ route,
177
91
  params: allParams,
178
- initialRouteName: configs[nextRoute.name]?.initialRouteName,
179
- preserveGroups,
180
- preserveDynamicRoutes
181
- }), nextRoute.state &&
182
- // NOTE: The upstream implementation allows for sending in synthetic states (states that weren't generated by `getStateFromPath`)
183
- // and any invalid routes will simply be ignored.
184
- // Because of this, we need to check if the next route is valid before continuing, otherwise our more strict
185
- // implementation will throw an error.
186
- configs[nextRoute.state.routes?.[nextRoute.state?.index ?? 0]?.name]) current = nextRoute.state;else {
187
- if (focusedParams &&
188
- // note: using [...route] is returning an array which shouldn't go on search, this is just
189
- // an initial hacky test to work around this as we dont want to pass that to search
190
- !Array.isArray(focusedParams)) {
191
- for (const param in focusedParams) focusedParams[param] === "undefined" && delete focusedParams[param];
192
- const query = new URLSearchParams(focusedParams).toString();
193
- query && (path += `?${query}`);
194
- }
195
- break;
92
+ initialRouteName: configs[route.name]?.initialRouteName
93
+ })) : route.name.startsWith("+") || (path += encodeURIComponent(route.name)), focusedParams || (focusedParams = focusedRoute.params), route.state) path += "/";else if (focusedParams) {
94
+ for (const param in focusedParams) focusedParams[param] === "undefined" && delete focusedParams[param];
95
+ delete focusedParams["#"];
96
+ const query = new URLSearchParams(focusedParams).toString();
97
+ query && (path += `?${query}`);
196
98
  }
99
+ current = route.state;
197
100
  }
198
- hash && (allParams["#"] = hash, path += `#${hash}`);
199
- const params = decodeParams(allParams);
200
- return {
201
- path: appendBaseUrl(basicSanitizePath(path)),
202
- params
101
+ return path = path.replace(/\/+/g, "/"), path = path.length > 1 ? path.replace(/\/$/, "") : path, options?.path && (path = joinPaths(options.path, path)), path = (0, import_getPathFromState_mods.appendBaseUrl)(path), allParams["#"] && (path += `#${allParams["#"]}`), {
102
+ path,
103
+ params: allParams
203
104
  };
204
105
  }
205
- function decodeParams(params) {
206
- const parsed = {};
207
- for (const [key, value] of Object.entries(params)) try {
208
- Array.isArray(value) ? parsed[key] = value.map(v => decodeURIComponent(v)) : parsed[key] = decodeURIComponent(value);
209
- } catch {
210
- parsed[key] = value;
211
- }
212
- return parsed;
213
- }
214
- function getPathWithConventionsCollapsed({
215
- pattern,
216
- routePath,
217
- params,
218
- preserveGroups,
219
- preserveDynamicRoutes,
220
- initialRouteName
221
- }) {
222
- const segments = pattern.split("/");
223
- return segments.map((p, i) => {
224
- const name = getParamName(p);
225
- return p.startsWith("*") ? preserveDynamicRoutes ? name === "not-found" ? "+not-found" : `[...${name}]` : params[name] ? Array.isArray(params[name]) ? params[name].join("/") : params[name] : i === 0 ? routePath : routePath?.split("/").slice(i + 1).join("/") : p.startsWith(":") ? preserveDynamicRoutes ? `[${name}]` : params[name] : !preserveGroups && (0, import_matchers.matchGroupName)(p) != null ? segments.length - 1 === i && initialRouteName ? segmentMatchesConvention(initialRouteName) ? "" : encodeURIComponentPreservingBrackets(initialRouteName) : "" : encodeURIComponentPreservingBrackets(p);
226
- }).map(v => v ?? "").join("/");
227
- }
228
- function getParamsWithConventionsCollapsed({
229
- pattern,
230
- routeName,
231
- params
232
- }) {
233
- const processedParams = {
234
- ...params
235
- },
236
- segments = pattern.split("/");
237
- if (segments.filter(segment => segment.startsWith(":")).forEach(segment => {
238
- const name = getParamName(segment);
239
- delete processedParams[name];
240
- }), segments.some(segment => segment.startsWith("*"))) {
241
- const name = (0, import_matchers.testNotFound)(routeName) ? "not-found" : (0, import_matchers.matchDeepDynamicRouteName)(routeName) ?? routeName;
242
- delete processedParams[name];
243
- }
244
- return processedParams;
245
- }
246
- function basicSanitizePath(path) {
247
- const simplifiedPath = path.replace(/\/+/g, "/");
248
- return simplifiedPath.length <= 1 ? simplifiedPath : simplifiedPath.replace(/\/$/, "");
249
- }
250
- function isInvalidParams(params) {
251
- return params ? "params" in params && typeof params.params == "object" && params.params ? !0 : "initial" in params && typeof params.initial == "boolean" &&
252
- // "path" in params &&
253
- "screen" in params : !1;
254
- }
255
- const getParamName = pattern => pattern.replace(/^[:*]/, "").replace(/\?$/, ""),
106
+ const getParamName = pattern => pattern.replace(/^:/, "").replace(/\?$/, ""),
256
107
  joinPaths = (...paths) => [].concat(...paths.map(p => p.split("/"))).filter(Boolean).join("/"),
257
108
  createConfigItem = (config, parentPattern) => {
258
109
  if (typeof config == "string") return {
@@ -265,11 +116,11 @@ const getParamName = pattern => pattern.replace(/^[:*]/, "").replace(/\?$/, ""),
265
116
  // Normalize pattern to remove any leading, trailing slashes, duplicate slashes etc.
266
117
  pattern: pattern?.split("/").filter(Boolean).join("/"),
267
118
  stringify: config.stringify,
268
- screens,
269
- initialRouteName: config.initialRouteName
119
+ screens
270
120
  };
271
121
  },
272
- createNormalizedConfigs = (options, pattern) => Object.fromEntries(Object.entries(options).map(([name, c]) => [name, createConfigItem(c, pattern)]));
273
- function appendBaseUrl(path, baseUrl = process.env.EXPO_BASE_URL) {
274
- return process.env.NODE_ENV !== "development" && baseUrl ? `/${baseUrl.replace(/^\/+/, "").replace(/\/$/, "")}${path}` : path;
275
- }
122
+ createNormalizedConfigs = (options, pattern) => Object.fromEntries(Object.entries(options).map(([name, c]) => {
123
+ const result = createConfigItem(c, pattern);
124
+ return [name, result];
125
+ }));
126
+ var getPathFromState_default = getPathFromState;
@@ -14,237 +14,82 @@ var __export = (target, all) => {
14
14
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
15
15
  var getPathFromState_exports = {};
16
16
  __export(getPathFromState_exports, {
17
- appendBaseUrl: () => appendBaseUrl,
18
- deepEqual: () => deepEqual,
19
- default: () => getPathFromState,
20
- getPathDataFromState: () => getPathDataFromState
17
+ default: () => getPathFromState_default,
18
+ getPathDataFromState: () => getPathDataFromState,
19
+ getPathFromState: () => getPathFromState
21
20
  });
22
21
  module.exports = __toCommonJS(getPathFromState_exports);
23
- var import_core = require("@react-navigation/core"), import_matchers = require("../router/matchers");
24
- const DEFAULT_SCREENS = {}, getActiveRoute = (state) => {
22
+ var import_getPathFromState_mods = require("./getPathFromState-mods"), import_validatePathConfig = require("./validatePathConfig");
23
+ const getActiveRoute = (state) => {
25
24
  const route = typeof state.index == "number" ? state.routes[state.index] : state.routes[state.routes.length - 1];
26
- return route.state ? getActiveRoute(route.state) : route && isInvalidParams(route.params) ? getActiveRoute(createFakeState(route.params)) : route;
25
+ return route.state ? getActiveRoute(route.state) : route;
26
+ }, cachedNormalizedConfigs = /* @__PURE__ */ new WeakMap(), getNormalizedConfigs = (options) => {
27
+ if (!options?.screens) return {};
28
+ const cached = cachedNormalizedConfigs.get(options?.screens);
29
+ if (cached) return cached;
30
+ const normalizedConfigs = createNormalizedConfigs(options.screens);
31
+ return cachedNormalizedConfigs.set(options.screens, normalizedConfigs), normalizedConfigs;
27
32
  };
28
- function createFakeState(params) {
29
- return {
30
- stale: !1,
31
- type: "UNKNOWN",
32
- key: "UNKNOWN",
33
- index: 0,
34
- routeNames: [],
35
- routes: [
36
- {
37
- key: "UNKNOWN",
38
- name: params.screen,
39
- params: params.params,
40
- path: params.path
41
- }
42
- ]
43
- };
44
- }
45
- function segmentMatchesConvention(segment) {
46
- return segment === "index" || (0, import_matchers.matchDynamicName)(segment) != null || (0, import_matchers.matchGroupName)(segment) != null || (0, import_matchers.matchDeepDynamicRouteName)(segment) != null;
33
+ function getPathFromState(state, options) {
34
+ return getPathDataFromState(state, options).path;
47
35
  }
48
- function encodeURIComponentPreservingBrackets(str) {
49
- return encodeURIComponent(str).replace(/%5B/g, "[").replace(/%5D/g, "]");
50
- }
51
- function getPathFromState(state, _options) {
52
- return getPathDataFromState(state, _options).path;
53
- }
54
- function getPathDataFromState(state, _options = { screens: DEFAULT_SCREENS }) {
36
+ function getPathDataFromState(state, options) {
55
37
  if (state == null)
56
38
  throw Error("Got 'undefined' for the navigation state. You must pass a valid state object.");
57
- const { preserveGroups, preserveDynamicRoutes, ...options } = _options;
58
- if ((0, import_core.validatePathConfig)(options), Object.is(options.screens, DEFAULT_SCREENS))
59
- throw Error("You must pass a 'screens' object to 'getPathFromState' to generate a path.");
60
- return getPathFromResolvedState(
61
- state,
62
- // Create a normalized configs object which will be easier to use
63
- createNormalizedConfigs(options.screens),
64
- { preserveGroups, preserveDynamicRoutes }
65
- );
66
- }
67
- function processParamsWithUserSettings(configItem, params) {
68
- const stringify = configItem?.stringify;
69
- return Object.fromEntries(
70
- Object.entries(params).map(([key, value]) => [
71
- key,
72
- // TODO: Strip nullish values here.
73
- stringify?.[key] ? stringify[key](value) : (
74
- // Preserve rest params
75
- Array.isArray(value) ? value : String(value)
76
- )
77
- ])
78
- );
79
- }
80
- function deepEqual(a, b) {
81
- if (a === b)
82
- return !0;
83
- if (Array.isArray(a) && Array.isArray(b)) {
84
- if (a.length !== b.length)
85
- return !1;
86
- for (let i = 0; i < a.length; i++)
87
- if (!deepEqual(a[i], b[i]))
88
- return !1;
89
- return !0;
90
- }
91
- if (typeof a == "object" && typeof b == "object") {
92
- const keysA = Object.keys(a), keysB = Object.keys(b);
93
- if (keysA.length !== keysB.length)
94
- return !1;
95
- for (const key of keysA)
96
- if (!deepEqual(a[key], b[key]))
97
- return !1;
98
- return !0;
99
- }
100
- return !1;
101
- }
102
- function walkConfigItems(route, focusedRoute, configs, {
103
- preserveDynamicRoutes
104
- }) {
105
- !route.state && isInvalidParams(route.params);
106
- let pattern = null, focusedParams, hash;
107
- const collectedParams = {};
108
- for (; route.name in configs; ) {
109
- const configItem = configs[route.name], inputPattern = configItem.pattern;
110
- if (inputPattern == null)
111
- throw new Error("Unexpected: No pattern found for route " + route.name);
112
- if (pattern = inputPattern, route.params) {
113
- route.params["#"] && (hash = route.params["#"], delete route.params["#"]);
114
- const params = processParamsWithUserSettings(configItem, route.params);
115
- pattern != null && Object.assign(collectedParams, params), deepEqual(focusedRoute, route) && (preserveDynamicRoutes ? focusedParams = params : focusedParams = getParamsWithConventionsCollapsed({
116
- params,
117
- pattern,
118
- routeName: route.name
119
- }));
120
- }
121
- if (!route.state && isInvalidParams(route.params), !configItem.screens || route.state === void 0) {
122
- configItem.initialRouteName && configItem.screens && configItem.initialRouteName in configItem.screens && configItem.screens[configItem.initialRouteName]?.pattern && (pattern = configItem.screens[configItem.initialRouteName].pattern, focusedParams && (preserveDynamicRoutes || (focusedParams = getParamsWithConventionsCollapsed({
123
- params: focusedParams,
124
- pattern,
125
- routeName: route.name
126
- }))));
127
- break;
128
- }
129
- const index = route.state.index ?? route.state.routes.length - 1, nextRoute = route.state.routes[index], nestedScreens = configItem.screens;
130
- if (nestedScreens && nextRoute.name in nestedScreens)
131
- route = nextRoute, configs = nestedScreens;
132
- else
133
- break;
134
- }
135
- if (pattern == null)
136
- throw new Error(
137
- `No pattern found for route "${route.name}". Options are: ${Object.keys(configs).join(", ")}.`
138
- );
139
- return pattern && !focusedParams && focusedRoute.params && (preserveDynamicRoutes ? focusedParams = focusedRoute.params : focusedParams = getParamsWithConventionsCollapsed({
140
- params: focusedRoute.params,
141
- pattern,
142
- routeName: route.name
143
- }), focusedParams = {
144
- ...focusedParams,
145
- ...collectedParams
146
- }), {
147
- pattern,
148
- nextRoute: route,
149
- focusedParams,
150
- hash,
151
- params: collectedParams
152
- };
153
- }
154
- function getPathFromResolvedState(state, configs, {
155
- preserveGroups,
156
- preserveDynamicRoutes
157
- }) {
158
- let path = "", current = state, hash;
39
+ options && (0, import_validatePathConfig.validatePathConfig)(options);
40
+ const configs = getNormalizedConfigs(options);
41
+ let path = "/", current = state;
159
42
  const allParams = {};
160
43
  for (; current; ) {
161
- path += "/";
162
- const route = current.routes[current.index ?? 0];
163
- !route.state && isInvalidParams(route.params);
164
- const {
165
- pattern,
166
- params: params2,
167
- nextRoute,
168
- focusedParams,
169
- hash: $hash
170
- } = walkConfigItems(route, getActiveRoute(current), { ...configs }, { preserveDynamicRoutes });
171
- if ($hash && (hash = $hash), Object.assign(allParams, params2), path += getPathWithConventionsCollapsed({
172
- pattern,
173
- routePath: nextRoute.path,
174
- params: allParams,
175
- initialRouteName: configs[nextRoute.name]?.initialRouteName,
176
- preserveGroups,
177
- preserveDynamicRoutes
178
- }), nextRoute.state && // NOTE: The upstream implementation allows for sending in synthetic states (states that weren't generated by `getStateFromPath`)
179
- // and any invalid routes will simply be ignored.
180
- // Because of this, we need to check if the next route is valid before continuing, otherwise our more strict
181
- // implementation will throw an error.
182
- configs[nextRoute.state.routes?.[nextRoute.state?.index ?? 0]?.name])
183
- current = nextRoute.state;
184
- else {
185
- if (focusedParams && // note: using [...route] is returning an array which shouldn't go on search, this is just
186
- // an initial hacky test to work around this as we dont want to pass that to search
187
- !Array.isArray(focusedParams)) {
188
- for (const param in focusedParams)
189
- focusedParams[param] === "undefined" && delete focusedParams[param];
190
- const query = new URLSearchParams(focusedParams).toString();
191
- query && (path += `?${query}`);
44
+ let index = typeof current.index == "number" ? current.index : 0, route = current.routes[index], pattern, focusedParams;
45
+ const focusedRoute = getActiveRoute(state);
46
+ let currentOptions = configs;
47
+ const nestedRouteNames = [];
48
+ let hasNext = !0;
49
+ for (; route.name in currentOptions && hasNext; ) {
50
+ if (pattern = currentOptions[route.name].pattern, nestedRouteNames.push(route.name), route.params) {
51
+ const stringify = currentOptions[route.name]?.stringify, currentParams = Object.fromEntries(
52
+ Object.entries(route.params).flatMap(([key, value]) => key === "screen" || key === "params" ? [] : [
53
+ [
54
+ key,
55
+ stringify?.[key] ? stringify[key](value) : Array.isArray(value) ? value.map(String) : String(value)
56
+ ]
57
+ ])
58
+ );
59
+ Object.assign(allParams, currentParams), focusedRoute === route && (focusedParams = { ...currentParams }, pattern?.split("/").filter((p) => p.startsWith(":")).forEach((p) => {
60
+ const name = getParamName(p);
61
+ focusedParams && delete focusedParams[name];
62
+ }));
63
+ }
64
+ if (!currentOptions[route.name].screens || route.state === void 0) {
65
+ const screens = currentOptions[route.name].screens, screen = route.params && "screen" in route.params ? route.params.screen?.toString() : screens ? Object.keys(screens)[0] : void 0;
66
+ screen && screens && currentOptions[route.name].screens?.[screen] ? (route = { ...screens[screen], name: screen, key: screen }, currentOptions = screens) : hasNext = !1;
67
+ } else {
68
+ index = typeof route.state.index == "number" ? route.state.index : route.state.routes.length - 1;
69
+ const nextRoute = route.state.routes[index], nestedConfig = currentOptions[route.name].screens;
70
+ nestedConfig && nextRoute.name in nestedConfig ? (route = nextRoute, currentOptions = nestedConfig) : hasNext = !1;
192
71
  }
193
- break;
194
72
  }
195
- }
196
- hash && (allParams["#"] = hash, path += `#${hash}`);
197
- const params = decodeParams(allParams);
198
- return { path: appendBaseUrl(basicSanitizePath(path)), params };
199
- }
200
- function decodeParams(params) {
201
- const parsed = {};
202
- for (const [key, value] of Object.entries(params))
203
- try {
204
- Array.isArray(value) ? parsed[key] = value.map((v) => decodeURIComponent(v)) : parsed[key] = decodeURIComponent(value);
205
- } catch {
206
- parsed[key] = value;
73
+ if (currentOptions[route.name] !== void 0 ? (pattern === void 0 && (pattern = nestedRouteNames.join("/")), path += (0, import_getPathFromState_mods.getPathWithConventionsCollapsed)({
74
+ ...options,
75
+ pattern,
76
+ route,
77
+ params: allParams,
78
+ initialRouteName: configs[route.name]?.initialRouteName
79
+ })) : route.name.startsWith("+") || (path += encodeURIComponent(route.name)), focusedParams || (focusedParams = focusedRoute.params), route.state)
80
+ path += "/";
81
+ else if (focusedParams) {
82
+ for (const param in focusedParams)
83
+ focusedParams[param] === "undefined" && delete focusedParams[param];
84
+ delete focusedParams["#"];
85
+ const query = new URLSearchParams(focusedParams).toString();
86
+ query && (path += `?${query}`);
207
87
  }
208
- return parsed;
209
- }
210
- function getPathWithConventionsCollapsed({
211
- pattern,
212
- routePath,
213
- params,
214
- preserveGroups,
215
- preserveDynamicRoutes,
216
- initialRouteName
217
- }) {
218
- const segments = pattern.split("/");
219
- return segments.map((p, i) => {
220
- const name = getParamName(p);
221
- return p.startsWith("*") ? preserveDynamicRoutes ? name === "not-found" ? "+not-found" : `[...${name}]` : params[name] ? Array.isArray(params[name]) ? params[name].join("/") : params[name] : i === 0 ? routePath : routePath?.split("/").slice(i + 1).join("/") : p.startsWith(":") ? preserveDynamicRoutes ? `[${name}]` : params[name] : !preserveGroups && (0, import_matchers.matchGroupName)(p) != null ? segments.length - 1 === i && initialRouteName ? segmentMatchesConvention(initialRouteName) ? "" : encodeURIComponentPreservingBrackets(initialRouteName) : "" : encodeURIComponentPreservingBrackets(p);
222
- }).map((v) => v ?? "").join("/");
223
- }
224
- function getParamsWithConventionsCollapsed({
225
- pattern,
226
- routeName,
227
- params
228
- }) {
229
- const processedParams = { ...params }, segments = pattern.split("/");
230
- if (segments.filter((segment) => segment.startsWith(":")).forEach((segment) => {
231
- const name = getParamName(segment);
232
- delete processedParams[name];
233
- }), segments.some((segment) => segment.startsWith("*"))) {
234
- const name = (0, import_matchers.testNotFound)(routeName) ? "not-found" : (0, import_matchers.matchDeepDynamicRouteName)(routeName) ?? routeName;
235
- delete processedParams[name];
88
+ current = route.state;
236
89
  }
237
- return processedParams;
90
+ return path = path.replace(/\/+/g, "/"), path = path.length > 1 ? path.replace(/\/$/, "") : path, options?.path && (path = joinPaths(options.path, path)), path = (0, import_getPathFromState_mods.appendBaseUrl)(path), allParams["#"] && (path += `#${allParams["#"]}`), { path, params: allParams };
238
91
  }
239
- function basicSanitizePath(path) {
240
- const simplifiedPath = path.replace(/\/+/g, "/");
241
- return simplifiedPath.length <= 1 ? simplifiedPath : simplifiedPath.replace(/\/$/, "");
242
- }
243
- function isInvalidParams(params) {
244
- return params ? "params" in params && typeof params.params == "object" && params.params ? !0 : "initial" in params && typeof params.initial == "boolean" && // "path" in params &&
245
- "screen" in params : !1;
246
- }
247
- const getParamName = (pattern) => pattern.replace(/^[:*]/, "").replace(/\?$/, ""), joinPaths = (...paths) => [].concat(...paths.map((p) => p.split("/"))).filter(Boolean).join("/"), createConfigItem = (config, parentPattern) => {
92
+ const getParamName = (pattern) => pattern.replace(/^:/, "").replace(/\?$/, ""), joinPaths = (...paths) => [].concat(...paths.map((p) => p.split("/"))).filter(Boolean).join("/"), createConfigItem = (config, parentPattern) => {
248
93
  if (typeof config == "string")
249
94
  return { pattern: parentPattern ? joinPaths(parentPattern, config) : config };
250
95
  if (config.exact && config.path === void 0)
@@ -256,13 +101,13 @@ const getParamName = (pattern) => pattern.replace(/^[:*]/, "").replace(/\?$/, ""
256
101
  // Normalize pattern to remove any leading, trailing slashes, duplicate slashes etc.
257
102
  pattern: pattern?.split("/").filter(Boolean).join("/"),
258
103
  stringify: config.stringify,
259
- screens,
260
- initialRouteName: config.initialRouteName
104
+ screens
261
105
  };
262
106
  }, createNormalizedConfigs = (options, pattern) => Object.fromEntries(
263
- Object.entries(options).map(([name, c]) => [name, createConfigItem(c, pattern)])
107
+ Object.entries(options).map(([name, c]) => {
108
+ const result = createConfigItem(c, pattern);
109
+ return [name, result];
110
+ })
264
111
  );
265
- function appendBaseUrl(path, baseUrl = process.env.EXPO_BASE_URL) {
266
- return process.env.NODE_ENV !== "development" && baseUrl ? `/${baseUrl.replace(/^\/+/, "").replace(/\/$/, "")}${path}` : path;
267
- }
112
+ var getPathFromState_default = getPathFromState;
268
113
  //# sourceMappingURL=getPathFromState.js.map