expo-router 5.0.1-preview.1 → 5.0.2-preview.1

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 (274) hide show
  1. package/build/ExpoRoot.js +18 -9
  2. package/build/ExpoRoot.js.map +1 -1
  3. package/build/LocationProvider.js +2 -3
  4. package/build/LocationProvider.js.map +1 -1
  5. package/build/Route.js +4 -4
  6. package/build/Route.js.map +1 -1
  7. package/build/doctor/index.js +1 -2
  8. package/build/doctor/index.js.map +1 -1
  9. package/build/exports.js +17 -7
  10. package/build/exports.js.map +1 -1
  11. package/build/fast-refresh.js.map +1 -1
  12. package/build/fork/NavigationContainer.d.ts +2 -7
  13. package/build/fork/NavigationContainer.d.ts.map +1 -1
  14. package/build/fork/NavigationContainer.js.map +1 -1
  15. package/build/fork/createMemoryHistory.d.ts.map +1 -1
  16. package/build/fork/createMemoryHistory.js +1 -2
  17. package/build/fork/createMemoryHistory.js.map +1 -1
  18. package/build/fork/extractPathFromURL.js +3 -4
  19. package/build/fork/extractPathFromURL.js.map +1 -1
  20. package/build/fork/findFocusedRoute.d.ts +1 -11
  21. package/build/fork/findFocusedRoute.d.ts.map +1 -1
  22. package/build/fork/findFocusedRoute.js +1 -2
  23. package/build/fork/findFocusedRoute.js.map +1 -1
  24. package/build/fork/getPathFromState-forks.d.ts.map +1 -1
  25. package/build/fork/getPathFromState-forks.js +24 -14
  26. package/build/fork/getPathFromState-forks.js.map +1 -1
  27. package/build/fork/getPathFromState.js +20 -11
  28. package/build/fork/getPathFromState.js.map +1 -1
  29. package/build/fork/getStateFromPath-forks.d.ts +4 -4
  30. package/build/fork/getStateFromPath-forks.d.ts.map +1 -1
  31. package/build/fork/getStateFromPath-forks.js +18 -19
  32. package/build/fork/getStateFromPath-forks.js.map +1 -1
  33. package/build/fork/getStateFromPath.js +18 -9
  34. package/build/fork/getStateFromPath.js.map +1 -1
  35. package/build/fork/native-stack/NativeStackView.js +1 -2
  36. package/build/fork/native-stack/NativeStackView.js.map +1 -1
  37. package/build/fork/native-stack/createNativeStackNavigator.js +18 -9
  38. package/build/fork/native-stack/createNativeStackNavigator.js.map +1 -1
  39. package/build/fork/useBackButton.d.ts +0 -1
  40. package/build/fork/useBackButton.d.ts.map +1 -1
  41. package/build/fork/useBackButton.js +1 -2
  42. package/build/fork/useBackButton.js.map +1 -1
  43. package/build/fork/useBackButton.native.js +18 -9
  44. package/build/fork/useBackButton.native.js.map +1 -1
  45. package/build/fork/useDocumentTitle.js +18 -9
  46. package/build/fork/useDocumentTitle.js.map +1 -1
  47. package/build/fork/useDocumentTitle.native.js +1 -2
  48. package/build/fork/useDocumentTitle.native.js.map +1 -1
  49. package/build/fork/useLinking.d.ts +3 -26
  50. package/build/fork/useLinking.d.ts.map +1 -1
  51. package/build/fork/useLinking.js +20 -10
  52. package/build/fork/useLinking.js.map +1 -1
  53. package/build/fork/useLinking.native.d.ts +6 -6
  54. package/build/fork/useLinking.native.js +19 -10
  55. package/build/fork/useLinking.native.js.map +1 -1
  56. package/build/fork/useThenable.js +18 -9
  57. package/build/fork/useThenable.js.map +1 -1
  58. package/build/fork/validatePathConfig.js +1 -1
  59. package/build/fork/validatePathConfig.js.map +1 -1
  60. package/build/getDevServer/index.js.map +1 -1
  61. package/build/getLinkingConfig.js +3 -3
  62. package/build/getLinkingConfig.js.map +1 -1
  63. package/build/getReactNavigationConfig.js +3 -4
  64. package/build/getReactNavigationConfig.js.map +1 -1
  65. package/build/getRoutes.js +3 -3
  66. package/build/getRoutes.js.map +1 -1
  67. package/build/getRoutesCore.js +6 -7
  68. package/build/getRoutesCore.js.map +1 -1
  69. package/build/getRoutesRedirects.d.ts +0 -1
  70. package/build/getRoutesRedirects.d.ts.map +1 -1
  71. package/build/getRoutesRedirects.js +3 -4
  72. package/build/getRoutesRedirects.js.map +1 -1
  73. package/build/getRoutesSSR.js +3 -3
  74. package/build/getRoutesSSR.js.map +1 -1
  75. package/build/getServerManifest.js +2 -3
  76. package/build/getServerManifest.js.map +1 -1
  77. package/build/global-state/routeInfo.js +18 -9
  78. package/build/global-state/routeInfo.js.map +1 -1
  79. package/build/global-state/router-store.d.ts +6 -6
  80. package/build/global-state/router-store.d.ts.map +1 -1
  81. package/build/global-state/router-store.js +22 -12
  82. package/build/global-state/router-store.js.map +1 -1
  83. package/build/global-state/routing.js +29 -20
  84. package/build/global-state/routing.js.map +1 -1
  85. package/build/global-state/serverLocationContext.d.ts +0 -1
  86. package/build/global-state/serverLocationContext.d.ts.map +1 -1
  87. package/build/global-state/sort-routes.js +1 -2
  88. package/build/global-state/sort-routes.js.map +1 -1
  89. package/build/head/ExpoHead.android.d.ts +1 -1
  90. package/build/head/ExpoHead.android.js +1 -2
  91. package/build/head/ExpoHead.android.js.map +1 -1
  92. package/build/head/ExpoHead.ios.js.map +1 -1
  93. package/build/head/ExpoHeadModule.js.map +1 -1
  94. package/build/head/url.js +2 -3
  95. package/build/head/url.js.map +1 -1
  96. package/build/hooks.js +11 -12
  97. package/build/hooks.js.map +1 -1
  98. package/build/layouts/DrawerClient.d.ts +16 -17
  99. package/build/layouts/DrawerClient.d.ts.map +1 -1
  100. package/build/layouts/RootModal.d.ts +1 -2
  101. package/build/layouts/RootModal.d.ts.map +1 -1
  102. package/build/layouts/RootModal.js +2 -2
  103. package/build/layouts/RootModal.js.map +1 -1
  104. package/build/layouts/StackClient.d.ts +16 -16
  105. package/build/layouts/StackClient.d.ts.map +1 -1
  106. package/build/layouts/StackClient.js.map +1 -1
  107. package/build/layouts/TabsClient.d.ts +12 -12
  108. package/build/layouts/TabsClient.js.map +1 -1
  109. package/build/layouts/withLayoutContext.d.ts +2 -2
  110. package/build/layouts/withLayoutContext.d.ts.map +1 -1
  111. package/build/layouts/withLayoutContext.js +19 -10
  112. package/build/layouts/withLayoutContext.js.map +1 -1
  113. package/build/link/Link.d.ts.map +1 -1
  114. package/build/link/Link.js +2 -2
  115. package/build/link/Link.js.map +1 -1
  116. package/build/link/href.d.ts.map +1 -1
  117. package/build/link/href.js +2 -2
  118. package/build/link/href.js.map +1 -1
  119. package/build/link/linking.d.ts.map +1 -1
  120. package/build/link/linking.js +21 -11
  121. package/build/link/linking.js.map +1 -1
  122. package/build/link/useDomComponentNavigation.js +6 -7
  123. package/build/link/useDomComponentNavigation.js.map +1 -1
  124. package/build/link/useLinkHooks.d.ts.map +1 -1
  125. package/build/link/useLinkHooks.js +2 -2
  126. package/build/link/useLinkHooks.js.map +1 -1
  127. package/build/link/useLinkToPathProps.d.ts.map +1 -1
  128. package/build/link/useLinkToPathProps.js +2 -3
  129. package/build/link/useLinkToPathProps.js.map +1 -1
  130. package/build/link/useLoadedNavigation.d.ts.map +1 -1
  131. package/build/link/useLoadedNavigation.js +2 -3
  132. package/build/link/useLoadedNavigation.js.map +1 -1
  133. package/build/loadStaticParamsAsync.js +3 -4
  134. package/build/loadStaticParamsAsync.js.map +1 -1
  135. package/build/matchers.js +14 -15
  136. package/build/matchers.js.map +1 -1
  137. package/build/onboard/Tutorial.js +1 -2
  138. package/build/onboard/Tutorial.js.map +1 -1
  139. package/build/onboard/createEntryFile.js +2 -3
  140. package/build/onboard/createEntryFile.js.map +1 -1
  141. package/build/qualified-entry.js +1 -2
  142. package/build/qualified-entry.js.map +1 -1
  143. package/build/renderRootComponent.js +18 -9
  144. package/build/renderRootComponent.js.map +1 -1
  145. package/build/routes-manifest.js +1 -2
  146. package/build/routes-manifest.js.map +1 -1
  147. package/build/rsc/entry.js +1 -2
  148. package/build/rsc/entry.js.map +1 -1
  149. package/build/rsc/exports.d.ts +0 -1
  150. package/build/rsc/exports.d.ts.map +1 -1
  151. package/build/rsc/exports.js +18 -18
  152. package/build/rsc/exports.js.map +1 -1
  153. package/build/rsc/middleware.js +2 -3
  154. package/build/rsc/middleware.js.map +1 -1
  155. package/build/rsc/path.d.ts.map +1 -1
  156. package/build/rsc/path.js.map +1 -1
  157. package/build/rsc/router/client.d.ts +7 -7
  158. package/build/rsc/router/client.d.ts.map +1 -1
  159. package/build/rsc/router/client.js +4 -4
  160. package/build/rsc/router/client.js.map +1 -1
  161. package/build/rsc/router/common.js +4 -4
  162. package/build/rsc/router/common.js.map +1 -1
  163. package/build/rsc/router/create-expo-pages.d.ts.map +1 -1
  164. package/build/rsc/router/create-expo-pages.js +1 -2
  165. package/build/rsc/router/create-expo-pages.js.map +1 -1
  166. package/build/rsc/router/create-pages.d.ts +1 -3
  167. package/build/rsc/router/create-pages.d.ts.map +1 -1
  168. package/build/rsc/router/create-pages.js +1 -2
  169. package/build/rsc/router/create-pages.js.map +1 -1
  170. package/build/rsc/router/defineRouter.js +2 -3
  171. package/build/rsc/router/defineRouter.js.map +1 -1
  172. package/build/rsc/router/errors.js.map +1 -1
  173. package/build/rsc/router/expo-definedRouter.d.ts +1 -1
  174. package/build/rsc/router/expo-definedRouter.js.map +1 -1
  175. package/build/rsc/router/fetch.js +1 -2
  176. package/build/rsc/router/fetch.js.map +1 -1
  177. package/build/rsc/router/host.d.ts +3 -3
  178. package/build/rsc/router/host.d.ts.map +1 -1
  179. package/build/rsc/router/host.js.map +1 -1
  180. package/build/rsc/router/noopRouter.d.ts +1 -1
  181. package/build/rsc/router/utils.d.ts.map +1 -1
  182. package/build/rsc/router/utils.js.map +1 -1
  183. package/build/rsc/rsc-renderer.js +1 -2
  184. package/build/rsc/rsc-renderer.js.map +1 -1
  185. package/build/rsc/server.d.ts.map +1 -1
  186. package/build/rsc/server.js +5 -5
  187. package/build/rsc/server.js.map +1 -1
  188. package/build/sortRoutes.d.ts.map +1 -1
  189. package/build/sortRoutes.js +2 -3
  190. package/build/sortRoutes.js.map +1 -1
  191. package/build/static/getRootComponent.js +1 -2
  192. package/build/static/getRootComponent.js.map +1 -1
  193. package/build/static/getServerManifest.js +2 -3
  194. package/build/static/getServerManifest.js.map +1 -1
  195. package/build/static/html.js +2 -3
  196. package/build/static/html.js.map +1 -1
  197. package/build/static/renderStaticContent.js +19 -9
  198. package/build/static/renderStaticContent.js.map +1 -1
  199. package/build/testing-library/context-stubs.d.ts +1 -2
  200. package/build/testing-library/context-stubs.d.ts.map +1 -1
  201. package/build/testing-library/context-stubs.js +3 -3
  202. package/build/testing-library/context-stubs.js.map +1 -1
  203. package/build/testing-library/index.d.ts.map +1 -1
  204. package/build/testing-library/index.js +2 -2
  205. package/build/testing-library/index.js.map +1 -1
  206. package/build/testing-library/mock-config.js +2 -3
  207. package/build/testing-library/mock-config.js.map +1 -1
  208. package/build/testing-library/mocks.js.map +1 -1
  209. package/build/testing-library/require-context-ponyfill.js +1 -1
  210. package/build/testing-library/require-context-ponyfill.js.map +1 -1
  211. package/build/typed-routes/generate.js +4 -5
  212. package/build/typed-routes/generate.js.map +1 -1
  213. package/build/typed-routes/index.d.ts.map +1 -1
  214. package/build/typed-routes/index.js +2 -2
  215. package/build/typed-routes/index.js.map +1 -1
  216. package/build/ui/Slot.d.ts +0 -1
  217. package/build/ui/Slot.d.ts.map +1 -1
  218. package/build/ui/TabContext.d.ts +47 -55
  219. package/build/ui/TabContext.d.ts.map +1 -1
  220. package/build/ui/TabList.js +2 -3
  221. package/build/ui/TabList.js.map +1 -1
  222. package/build/ui/TabRouter.d.ts +27 -27
  223. package/build/ui/TabRouter.d.ts.map +1 -1
  224. package/build/ui/TabRouter.js +18 -9
  225. package/build/ui/TabRouter.js.map +1 -1
  226. package/build/ui/TabSlot.js +4 -5
  227. package/build/ui/TabSlot.js.map +1 -1
  228. package/build/ui/TabTrigger.js +3 -4
  229. package/build/ui/TabTrigger.js.map +1 -1
  230. package/build/ui/Tabs.d.ts +73 -78
  231. package/build/ui/Tabs.d.ts.map +1 -1
  232. package/build/ui/Tabs.js +3 -4
  233. package/build/ui/Tabs.js.map +1 -1
  234. package/build/ui/common.d.ts +2 -3
  235. package/build/ui/common.d.ts.map +1 -1
  236. package/build/ui/common.js +3 -3
  237. package/build/ui/common.js.map +1 -1
  238. package/build/ui/useComponent.d.ts.map +1 -1
  239. package/build/ui/useComponent.js +1 -2
  240. package/build/ui/useComponent.js.map +1 -1
  241. package/build/useDeprecated.js +2 -3
  242. package/build/useDeprecated.js.map +1 -1
  243. package/build/useFocusEffect.js +18 -9
  244. package/build/useFocusEffect.js.map +1 -1
  245. package/build/useNavigation.js +1 -2
  246. package/build/useNavigation.js.map +1 -1
  247. package/build/useScreens.js +5 -6
  248. package/build/useScreens.js.map +1 -1
  249. package/build/utils/splash.js +5 -6
  250. package/build/utils/splash.js.map +1 -1
  251. package/build/utils/url.js +3 -4
  252. package/build/utils/url.js.map +1 -1
  253. package/build/views/EmptyRoute.js +1 -2
  254. package/build/views/EmptyRoute.js.map +1 -1
  255. package/build/views/ErrorBoundary.d.ts +0 -1
  256. package/build/views/ErrorBoundary.d.ts.map +1 -1
  257. package/build/views/ErrorBoundary.js +1 -2
  258. package/build/views/ErrorBoundary.js.map +1 -1
  259. package/build/views/Navigator.js +22 -12
  260. package/build/views/Navigator.js.map +1 -1
  261. package/build/views/Pressable.d.ts.map +1 -1
  262. package/build/views/Screen.js +1 -2
  263. package/build/views/Screen.js.map +1 -1
  264. package/build/views/Sitemap.js +2 -3
  265. package/build/views/Sitemap.js.map +1 -1
  266. package/build/views/SuspenseFallback.js +1 -2
  267. package/build/views/SuspenseFallback.js.map +1 -1
  268. package/build/views/Toast.js +3 -3
  269. package/build/views/Toast.js.map +1 -1
  270. package/build/views/Try.js +17 -7
  271. package/build/views/Try.js.map +1 -1
  272. package/build/views/Unmatched.js +1 -2
  273. package/build/views/Unmatched.js.map +1 -1
  274. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"routes-manifest.js","sourceRoot":"","sources":["../src/routes-manifest.ts"],"names":[],"mappings":";;;AAAA,0CAA0C;AAC1C,sBAAsB;AACtB,iDAAyD;AACzD,2DAAwD;AAsBxD,SAAS,uBAAuB,CAAC,MAAgB,EAAE;IACjD,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,KAAI,CAAC,EAAE,CAAC,CAAC;IAElD,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE;QAC3C,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG;KACjB,CAAC,CAAC;IAEH,OAAO,aAA+B,CAAC;AACzC,CAAC;AAED,SAAgB,oBAAoB,CAClC,KAAe,EACf,OAAgB;IAEhB,mCAAmC;IACnC,MAAM,SAAS,GAAG,IAAA,wBAAS,EAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE;QAC1D,GAAG,OAAO;QACV,iBAAiB,EAAE,IAAI;QACvB,2BAA2B,EAAE,IAAI;QACjC,mBAAmB,EAAE,IAAI;QACzB,iBAAiB,EAAE,IAAI;QACvB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,IAAI,CAAC;KACb;IACD,OAAO,IAAA,qCAAiB,EAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAlBD,oDAkBC","sourcesContent":["// This file runs in Node.js environments.\n// no relative imports\nimport { type Options, getRoutes } from './getRoutesSSR';\nimport { getServerManifest } from './getServerManifest';\nimport { type RequireContext } from './types';\n\nexport { Options };\n\nexport type RouteInfo<TRegex = string> = {\n file: string;\n page: string;\n namedRegex: TRegex;\n routeKeys: Record<string, string>;\n permanent?: boolean;\n methods?: string[];\n};\n\nexport type ExpoRoutesManifestV1<TRegex = string> = {\n apiRoutes: RouteInfo<TRegex>[];\n htmlRoutes: RouteInfo<TRegex>[];\n notFoundRoutes: RouteInfo<TRegex>[];\n redirects: RouteInfo<TRegex>[];\n rewrites: RouteInfo<TRegex>[];\n};\n\nfunction createMockContextModule(map: string[] = []) {\n const contextModule = (key) => ({ default() {} });\n\n Object.defineProperty(contextModule, 'keys', {\n value: () => map,\n });\n\n return contextModule as RequireContext;\n}\n\nexport function createRoutesManifest(\n paths: string[],\n options: Options\n): ExpoRoutesManifestV1 | null {\n // TODO: Drop this part for Node.js\n const routeTree = getRoutes(createMockContextModule(paths), {\n ...options,\n preserveApiRoutes: true,\n preserveRedirectAndRewrites: true,\n ignoreRequireErrors: true,\n ignoreEntryPoints: true,\n platform: 'web',\n });\n\n if (!routeTree) {\n return null;\n }\n return getServerManifest(routeTree);\n}\n"]}
1
+ {"version":3,"file":"routes-manifest.js","sourceRoot":"","sources":["../src/routes-manifest.ts"],"names":[],"mappings":";;AAmCA,oDAkBC;AArDD,0CAA0C;AAC1C,sBAAsB;AACtB,iDAAyD;AACzD,2DAAwD;AAsBxD,SAAS,uBAAuB,CAAC,MAAgB,EAAE;IACjD,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,KAAI,CAAC,EAAE,CAAC,CAAC;IAElD,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE;QAC3C,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG;KACjB,CAAC,CAAC;IAEH,OAAO,aAA+B,CAAC;AACzC,CAAC;AAED,SAAgB,oBAAoB,CAClC,KAAe,EACf,OAAgB;IAEhB,mCAAmC;IACnC,MAAM,SAAS,GAAG,IAAA,wBAAS,EAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE;QAC1D,GAAG,OAAO;QACV,iBAAiB,EAAE,IAAI;QACvB,2BAA2B,EAAE,IAAI;QACjC,mBAAmB,EAAE,IAAI;QACzB,iBAAiB,EAAE,IAAI;QACvB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAA,qCAAiB,EAAC,SAAS,CAAC,CAAC;AACtC,CAAC","sourcesContent":["// This file runs in Node.js environments.\n// no relative imports\nimport { type Options, getRoutes } from './getRoutesSSR';\nimport { getServerManifest } from './getServerManifest';\nimport { type RequireContext } from './types';\n\nexport { Options };\n\nexport type RouteInfo<TRegex = string> = {\n file: string;\n page: string;\n namedRegex: TRegex;\n routeKeys: Record<string, string>;\n permanent?: boolean;\n methods?: string[];\n};\n\nexport type ExpoRoutesManifestV1<TRegex = string> = {\n apiRoutes: RouteInfo<TRegex>[];\n htmlRoutes: RouteInfo<TRegex>[];\n notFoundRoutes: RouteInfo<TRegex>[];\n redirects: RouteInfo<TRegex>[];\n rewrites: RouteInfo<TRegex>[];\n};\n\nfunction createMockContextModule(map: string[] = []) {\n const contextModule = (key) => ({ default() {} });\n\n Object.defineProperty(contextModule, 'keys', {\n value: () => map,\n });\n\n return contextModule as RequireContext;\n}\n\nexport function createRoutesManifest(\n paths: string[],\n options: Options\n): ExpoRoutesManifestV1 | null {\n // TODO: Drop this part for Node.js\n const routeTree = getRoutes(createMockContextModule(paths), {\n ...options,\n preserveApiRoutes: true,\n preserveRedirectAndRewrites: true,\n ignoreRequireErrors: true,\n ignoreEntryPoints: true,\n platform: 'web',\n });\n\n if (!routeTree) {\n return null;\n }\n return getServerManifest(routeTree);\n}\n"]}
@@ -10,7 +10,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
10
10
  return (mod && mod.__esModule) ? mod : { "default": mod };
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.App = void 0;
13
+ exports.App = App;
14
14
  const react_1 = __importDefault(require("react"));
15
15
  const react_native_safe_area_context_1 = require("react-native-safe-area-context");
16
16
  const client_1 = require("./router/client");
@@ -52,5 +52,4 @@ function App() {
52
52
  </Try_1.Try>
53
53
  </react_native_safe_area_context_1.SafeAreaProvider>);
54
54
  }
55
- exports.App = App;
56
55
  //# sourceMappingURL=entry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/rsc/entry.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,CAAC;;;;;;;AAEb,kDAA0B;AAC1B,mFAAkE;AAElE,4CAAyC;AACzC,0DAAuD;AACvD,sCAAuD;AAEvD,2BAA2B;AAC3B,SAAS,iBAAiB,CAAC,KAAyB;IAClD,eAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,SAAS,YAAY;YACnB,IAAI,KAAK,CAAC,KAAK,EAAE;gBACf,KAAK,CAAC,KAAK,EAAE,CAAC;aACf;QACH,CAAC;QACD,uDAAuD;QACvD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE;YAC1C,UAAU,CAAC,6BAA6B,KAAK,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,OAAO,CAC5D,UAAU,CAAC,sBAAsB,CAClC,CAAC;YACF,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBAChB,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;aACzE;iBAAM;gBACL,UAAU,CAAC,6BAA6B,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;aAChE;YACD,UAAU,CAAC,sBAAsB,GAAG,YAAY,CAAC;SAClD;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAE/B,OAAO,CACL,CAAC,6BAAa,CACZ,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CACnB,KAAK,CAAC,CAAC,GAAG,EAAE;YACV,mEAAmE;YACnE,0DAA0D;YAC1D,UAAU,CAAC,+BAA+B,EAAE,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC,CAAC,EACF,CACH,CAAC;AACJ,CAAC;AAED,4DAA4D;AAC5D,SAAgB,GAAG;IACjB,OAAO,CACL,CAAC,iDAAgB,CACf;MAAA,CAAC,SAAG,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,CAC5B;QAAA,CAAC,eAAM,CAAC,AAAD,EACT;MAAA,EAAE,SAAG,CACP;IAAA,EAAE,iDAAgB,CAAC,CACpB,CAAC;AACJ,CAAC;AARD,kBAQC","sourcesContent":["/**\n * Copyright © 2024 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use client';\n\nimport React from 'react';\nimport { SafeAreaProvider } from 'react-native-safe-area-context';\n\nimport { Router } from './router/client';\nimport { ErrorBoundary } from '../views/ErrorBoundary';\nimport { ErrorBoundaryProps, Try } from '../views/Try';\n\n// Add root error recovery.\nfunction RootErrorBoundary(props: ErrorBoundaryProps) {\n React.useEffect(() => {\n function refetchRoute() {\n if (props.error) {\n props.retry();\n }\n }\n // TODO: Only strip when not connected to a dev server.\n if (process.env.NODE_ENV === 'development') {\n globalThis.__EXPO_RSC_RELOAD_LISTENERS__ ||= [];\n const index = globalThis.__EXPO_RSC_RELOAD_LISTENERS__.indexOf(\n globalThis.__EXPO_REFETCH_ROUTE__\n );\n if (index !== -1) {\n globalThis.__EXPO_RSC_RELOAD_LISTENERS__.splice(index, 1, refetchRoute);\n } else {\n globalThis.__EXPO_RSC_RELOAD_LISTENERS__.unshift(refetchRoute);\n }\n globalThis.__EXPO_REFETCH_ROUTE__ = refetchRoute;\n }\n }, [props.error, props.retry]);\n\n return (\n <ErrorBoundary\n error={props.error}\n retry={() => {\n // TODO: Invalidate the cache automatically when the request fails.\n // Invalidate the fetch cache so we can retry the request.\n globalThis.__EXPO_REFETCH_ROUTE_NO_CACHE__?.();\n return props.retry();\n }}\n />\n );\n}\n\n// Must be exported or Fast Refresh won't update the context\nexport function App() {\n return (\n <SafeAreaProvider>\n <Try catch={RootErrorBoundary}>\n <Router />\n </Try>\n </SafeAreaProvider>\n );\n}\n"]}
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/rsc/entry.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,CAAC;;;;;;AA8Cb,kBAQC;AApDD,kDAA0B;AAC1B,mFAAkE;AAElE,4CAAyC;AACzC,0DAAuD;AACvD,sCAAuD;AAEvD,2BAA2B;AAC3B,SAAS,iBAAiB,CAAC,KAAyB;IAClD,eAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,SAAS,YAAY;YACnB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QACD,uDAAuD;QACvD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC3C,UAAU,CAAC,6BAA6B,KAAK,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,UAAU,CAAC,6BAA6B,CAAC,OAAO,CAC5D,UAAU,CAAC,sBAAsB,CAClC,CAAC;YACF,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,UAAU,CAAC,6BAA6B,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,6BAA6B,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACjE,CAAC;YACD,UAAU,CAAC,sBAAsB,GAAG,YAAY,CAAC;QACnD,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAE/B,OAAO,CACL,CAAC,6BAAa,CACZ,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CACnB,KAAK,CAAC,CAAC,GAAG,EAAE;YACV,mEAAmE;YACnE,0DAA0D;YAC1D,UAAU,CAAC,+BAA+B,EAAE,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC,CAAC,EACF,CACH,CAAC;AACJ,CAAC;AAED,4DAA4D;AAC5D,SAAgB,GAAG;IACjB,OAAO,CACL,CAAC,iDAAgB,CACf;MAAA,CAAC,SAAG,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,CAC5B;QAAA,CAAC,eAAM,CAAC,AAAD,EACT;MAAA,EAAE,SAAG,CACP;IAAA,EAAE,iDAAgB,CAAC,CACpB,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Copyright © 2024 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use client';\n\nimport React from 'react';\nimport { SafeAreaProvider } from 'react-native-safe-area-context';\n\nimport { Router } from './router/client';\nimport { ErrorBoundary } from '../views/ErrorBoundary';\nimport { ErrorBoundaryProps, Try } from '../views/Try';\n\n// Add root error recovery.\nfunction RootErrorBoundary(props: ErrorBoundaryProps) {\n React.useEffect(() => {\n function refetchRoute() {\n if (props.error) {\n props.retry();\n }\n }\n // TODO: Only strip when not connected to a dev server.\n if (process.env.NODE_ENV === 'development') {\n globalThis.__EXPO_RSC_RELOAD_LISTENERS__ ||= [];\n const index = globalThis.__EXPO_RSC_RELOAD_LISTENERS__.indexOf(\n globalThis.__EXPO_REFETCH_ROUTE__\n );\n if (index !== -1) {\n globalThis.__EXPO_RSC_RELOAD_LISTENERS__.splice(index, 1, refetchRoute);\n } else {\n globalThis.__EXPO_RSC_RELOAD_LISTENERS__.unshift(refetchRoute);\n }\n globalThis.__EXPO_REFETCH_ROUTE__ = refetchRoute;\n }\n }, [props.error, props.retry]);\n\n return (\n <ErrorBoundary\n error={props.error}\n retry={() => {\n // TODO: Invalidate the cache automatically when the request fails.\n // Invalidate the fetch cache so we can retry the request.\n globalThis.__EXPO_REFETCH_ROUTE_NO_CACHE__?.();\n return props.retry();\n }}\n />\n );\n}\n\n// Must be exported or Fast Refresh won't update the context\nexport function App() {\n return (\n <SafeAreaProvider>\n <Try catch={RootErrorBoundary}>\n <Router />\n </Try>\n </SafeAreaProvider>\n );\n}\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import type { Href } from '../types';
3
2
  import { useRouter_UNSTABLE } from './router/client';
4
3
  export { Link } from './router/client';
@@ -1 +1 @@
1
- {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/rsc/exports.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,wBAAgB,WAAW,WAG1B;AAGD,wBAAgB,oBAAoB;;EAGnC;AAED,wBAAgB,qBAAqB;;EAGpC;AAED,wBAAgB,IAAI,gCAEnB;AAED,wBAAgB,KAAK,gCAGpB;AAED,wBAAgB,IAAI,gCAGnB;AAED,wBAAgB,SAAS,SAExB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,QAIhD;AAED,wBAAgB,QAAQ,SAEvB;AAED,wBAAgB,cAAc,SAE7B;AAED,wBAAgB,aAAa,SAE5B;AAED,wBAAgB,iBAAiB,SAEhC;AACD,wBAAgB,yBAAyB,SAExC;AAED,wBAAgB,WAAW,SAE1B;AACD,wBAAgB,iBAAiB,SAEhC;AACD,wBAAgB,sBAAsB,SAErC;AACD,wBAAgB,qBAAqB,SAEpC;AAED,OAAO,EAAE,kBAAkB,IAAI,SAAS,EAAE,CAAC;AAG3C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,eAAO,MAAM,MAAM,IASlB,CAAC"}
1
+ {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/rsc/exports.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,wBAAgB,WAAW,WAG1B;AAGD,wBAAgB,oBAAoB;;EAGnC;AAED,wBAAgB,qBAAqB;;EAGpC;AAED,wBAAgB,IAAI,gCAEnB;AAED,wBAAgB,KAAK,gCAGpB;AAED,wBAAgB,IAAI,gCAGnB;AAED,wBAAgB,SAAS,SAExB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,QAIhD;AAED,wBAAgB,QAAQ,SAEvB;AAED,wBAAgB,cAAc,SAE7B;AAED,wBAAgB,aAAa,SAE5B;AAED,wBAAgB,iBAAiB,SAEhC;AACD,wBAAgB,yBAAyB,SAExC;AAED,wBAAgB,WAAW,SAE1B;AACD,wBAAgB,iBAAiB,SAEhC;AACD,wBAAgB,sBAAsB,SAErC;AACD,wBAAgB,qBAAqB,SAEpC;AAED,OAAO,EAAE,kBAAkB,IAAI,SAAS,EAAE,CAAC;AAG3C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,eAAO,MAAM,MAAM,IASlB,CAAC"}
@@ -1,6 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.router = exports.ErrorBoundary = exports.Unmatched = exports.useRouter = exports.useUnstableGlobalHref = exports.useRootNavigationState = exports.useRootNavigation = exports.useSegments = exports.useNavigationContainerRef = exports.withLayoutContext = exports.useNavigation = exports.useFocusEffect = exports.ExpoRoot = exports.Redirect = exports.Navigator = exports.Tabs = exports.Stack = exports.Slot = exports.useGlobalSearchParams = exports.useLocalSearchParams = exports.usePathname = exports.Link = void 0;
3
+ exports.router = exports.ErrorBoundary = exports.Unmatched = exports.useRouter = exports.Link = void 0;
4
+ exports.usePathname = usePathname;
5
+ exports.useLocalSearchParams = useLocalSearchParams;
6
+ exports.useGlobalSearchParams = useGlobalSearchParams;
7
+ exports.Slot = Slot;
8
+ exports.Stack = Stack;
9
+ exports.Tabs = Tabs;
10
+ exports.Navigator = Navigator;
11
+ exports.Redirect = Redirect;
12
+ exports.ExpoRoot = ExpoRoot;
13
+ exports.useFocusEffect = useFocusEffect;
14
+ exports.useNavigation = useNavigation;
15
+ exports.withLayoutContext = withLayoutContext;
16
+ exports.useNavigationContainerRef = useNavigationContainerRef;
17
+ exports.useSegments = useSegments;
18
+ exports.useRootNavigation = useRootNavigation;
19
+ exports.useRootNavigationState = useRootNavigationState;
20
+ exports.useUnstableGlobalHref = useUnstableGlobalHref;
4
21
  const client_1 = require("./router/client");
5
22
  Object.defineProperty(exports, "useRouter", { enumerable: true, get: function () { return client_1.useRouter_UNSTABLE; } });
6
23
  const host_1 = require("./router/host");
@@ -10,36 +27,29 @@ function usePathname() {
10
27
  const router = (0, client_1.useRouter_UNSTABLE)();
11
28
  return router.path;
12
29
  }
13
- exports.usePathname = usePathname;
14
30
  // TODO: This doesn't work the same as the classic version.
15
31
  function useLocalSearchParams() {
16
32
  const router = (0, client_1.useRouter_UNSTABLE)();
17
33
  return Object.fromEntries([...new URLSearchParams(router.query).entries()]);
18
34
  }
19
- exports.useLocalSearchParams = useLocalSearchParams;
20
35
  function useGlobalSearchParams() {
21
36
  const router = (0, client_1.useRouter_UNSTABLE)();
22
37
  return Object.fromEntries([...new URLSearchParams(router.query).entries()]);
23
38
  }
24
- exports.useGlobalSearchParams = useGlobalSearchParams;
25
39
  function Slot() {
26
40
  return <host_1.Children />;
27
41
  }
28
- exports.Slot = Slot;
29
42
  function Stack() {
30
43
  console.warn('Stack is not implemented in React Server Components yet');
31
44
  return <host_1.Children />;
32
45
  }
33
- exports.Stack = Stack;
34
46
  function Tabs() {
35
47
  console.warn('Tabs is not implemented in React Server Components yet');
36
48
  return <host_1.Children />;
37
49
  }
38
- exports.Tabs = Tabs;
39
50
  function Navigator() {
40
51
  throw new Error('Navigator is not implemented in React Server Components yet');
41
52
  }
42
- exports.Navigator = Navigator;
43
53
  /**
44
54
  * Redirects to the `href` as soon as the component is mounted.
45
55
  */
@@ -48,43 +58,33 @@ function Redirect({ href }) {
48
58
  router.replace(href);
49
59
  return null;
50
60
  }
51
- exports.Redirect = Redirect;
52
61
  function ExpoRoot() {
53
62
  throw new Error('ExpoRoot is not implemented in React Server Components yet');
54
63
  }
55
- exports.ExpoRoot = ExpoRoot;
56
64
  function useFocusEffect() {
57
65
  console.warn('useFocusEffect is not implemented in React Server Components yet');
58
66
  }
59
- exports.useFocusEffect = useFocusEffect;
60
67
  function useNavigation() {
61
68
  console.warn('useNavigation is not implemented in React Server Components yet');
62
69
  }
63
- exports.useNavigation = useNavigation;
64
70
  function withLayoutContext() {
65
71
  throw new Error('withLayoutContext is not implemented in React Server Components yet');
66
72
  }
67
- exports.withLayoutContext = withLayoutContext;
68
73
  function useNavigationContainerRef() {
69
74
  throw new Error('useNavigationContainerRef is not implemented in React Server Components yet');
70
75
  }
71
- exports.useNavigationContainerRef = useNavigationContainerRef;
72
76
  function useSegments() {
73
77
  throw new Error('useSegments is not implemented in React Server Components yet');
74
78
  }
75
- exports.useSegments = useSegments;
76
79
  function useRootNavigation() {
77
80
  throw new Error('useRootNavigation is not implemented in React Server Components yet');
78
81
  }
79
- exports.useRootNavigation = useRootNavigation;
80
82
  function useRootNavigationState() {
81
83
  throw new Error('useRootNavigationState is not implemented in React Server Components yet');
82
84
  }
83
- exports.useRootNavigationState = useRootNavigationState;
84
85
  function useUnstableGlobalHref() {
85
86
  throw new Error('useUnstableGlobalHref is not implemented in React Server Components yet');
86
87
  }
87
- exports.useUnstableGlobalHref = useUnstableGlobalHref;
88
88
  // Expo Router Views
89
89
  var Unmatched_1 = require("../views/Unmatched");
90
90
  Object.defineProperty(exports, "Unmatched", { enumerable: true, get: function () { return Unmatched_1.Unmatched; } });
@@ -1 +1 @@
1
- {"version":3,"file":"exports.js","sourceRoot":"","sources":["../../src/rsc/exports.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Href } from '../types';\nimport { useRouter_UNSTABLE } from './router/client';\nimport { Children } from './router/host';\n\nexport { Link } from './router/client';\n\nexport function usePathname() {\n const router = useRouter_UNSTABLE();\n return router.path;\n}\n\n// TODO: This doesn't work the same as the classic version.\nexport function useLocalSearchParams() {\n const router = useRouter_UNSTABLE();\n return Object.fromEntries([...new URLSearchParams(router.query).entries()]);\n}\n\nexport function useGlobalSearchParams() {\n const router = useRouter_UNSTABLE();\n return Object.fromEntries([...new URLSearchParams(router.query).entries()]);\n}\n\nexport function Slot() {\n return <Children />;\n}\n\nexport function Stack() {\n console.warn('Stack is not implemented in React Server Components yet');\n return <Children />;\n}\n\nexport function Tabs() {\n console.warn('Tabs is not implemented in React Server Components yet');\n return <Children />;\n}\n\nexport function Navigator() {\n throw new Error('Navigator is not implemented in React Server Components yet');\n}\n\n/**\n * Redirects to the `href` as soon as the component is mounted.\n */\nexport function Redirect({ href }: { href: Href }) {\n const router = useRouter_UNSTABLE();\n router.replace(href);\n return null;\n}\n\nexport function ExpoRoot() {\n throw new Error('ExpoRoot is not implemented in React Server Components yet');\n}\n\nexport function useFocusEffect() {\n console.warn('useFocusEffect is not implemented in React Server Components yet');\n}\n\nexport function useNavigation() {\n console.warn('useNavigation is not implemented in React Server Components yet');\n}\n\nexport function withLayoutContext() {\n throw new Error('withLayoutContext is not implemented in React Server Components yet');\n}\nexport function useNavigationContainerRef() {\n throw new Error('useNavigationContainerRef is not implemented in React Server Components yet');\n}\n\nexport function useSegments() {\n throw new Error('useSegments is not implemented in React Server Components yet');\n}\nexport function useRootNavigation() {\n throw new Error('useRootNavigation is not implemented in React Server Components yet');\n}\nexport function useRootNavigationState() {\n throw new Error('useRootNavigationState is not implemented in React Server Components yet');\n}\nexport function useUnstableGlobalHref() {\n throw new Error('useUnstableGlobalHref is not implemented in React Server Components yet');\n}\n\nexport { useRouter_UNSTABLE as useRouter };\n\n// Expo Router Views\nexport { Unmatched } from '../views/Unmatched';\nexport { ErrorBoundaryProps } from '../views/Try';\nexport { ErrorBoundary } from '../views/ErrorBoundary';\n\nexport const router = new Proxy(\n {},\n {\n get(target, prop, receiver) {\n throw new Error(\n `The router object is not available in React Server Components. Use the useRouter hook instead.`\n );\n },\n }\n);\n\n// TODO:\n// export { Redirect } from './link/Link';\n"]}
1
+ {"version":3,"file":"exports.js","sourceRoot":"","sources":["../../src/rsc/exports.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Href } from '../types';\nimport { useRouter_UNSTABLE } from './router/client';\nimport { Children } from './router/host';\n\nexport { Link } from './router/client';\n\nexport function usePathname() {\n const router = useRouter_UNSTABLE();\n return router.path;\n}\n\n// TODO: This doesn't work the same as the classic version.\nexport function useLocalSearchParams() {\n const router = useRouter_UNSTABLE();\n return Object.fromEntries([...new URLSearchParams(router.query).entries()]);\n}\n\nexport function useGlobalSearchParams() {\n const router = useRouter_UNSTABLE();\n return Object.fromEntries([...new URLSearchParams(router.query).entries()]);\n}\n\nexport function Slot() {\n return <Children />;\n}\n\nexport function Stack() {\n console.warn('Stack is not implemented in React Server Components yet');\n return <Children />;\n}\n\nexport function Tabs() {\n console.warn('Tabs is not implemented in React Server Components yet');\n return <Children />;\n}\n\nexport function Navigator() {\n throw new Error('Navigator is not implemented in React Server Components yet');\n}\n\n/**\n * Redirects to the `href` as soon as the component is mounted.\n */\nexport function Redirect({ href }: { href: Href }) {\n const router = useRouter_UNSTABLE();\n router.replace(href);\n return null;\n}\n\nexport function ExpoRoot() {\n throw new Error('ExpoRoot is not implemented in React Server Components yet');\n}\n\nexport function useFocusEffect() {\n console.warn('useFocusEffect is not implemented in React Server Components yet');\n}\n\nexport function useNavigation() {\n console.warn('useNavigation is not implemented in React Server Components yet');\n}\n\nexport function withLayoutContext() {\n throw new Error('withLayoutContext is not implemented in React Server Components yet');\n}\nexport function useNavigationContainerRef() {\n throw new Error('useNavigationContainerRef is not implemented in React Server Components yet');\n}\n\nexport function useSegments() {\n throw new Error('useSegments is not implemented in React Server Components yet');\n}\nexport function useRootNavigation() {\n throw new Error('useRootNavigation is not implemented in React Server Components yet');\n}\nexport function useRootNavigationState() {\n throw new Error('useRootNavigationState is not implemented in React Server Components yet');\n}\nexport function useUnstableGlobalHref() {\n throw new Error('useUnstableGlobalHref is not implemented in React Server Components yet');\n}\n\nexport { useRouter_UNSTABLE as useRouter };\n\n// Expo Router Views\nexport { Unmatched } from '../views/Unmatched';\nexport { ErrorBoundaryProps } from '../views/Try';\nexport { ErrorBoundary } from '../views/ErrorBoundary';\n\nexport const router = new Proxy(\n {},\n {\n get(target, prop, receiver) {\n throw new Error(\n `The router object is not available in React Server Components. Use the useRouter hook instead.`\n );\n },\n }\n);\n\n// TODO:\n// export { Redirect } from './link/Link';\n"]}
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.renderRscAsync = exports.renderRscWithImportsAsync = void 0;
6
+ exports.renderRscWithImportsAsync = renderRscWithImportsAsync;
7
+ exports.renderRscAsync = renderRscAsync;
7
8
  const expo_constants_1 = __importDefault(require("expo-constants"));
8
9
  const _async_server_import_1 = require("expo-router/_async-server-import");
9
10
  const node_path_1 = __importDefault(require("node:path"));
@@ -95,7 +96,6 @@ async function renderRscWithImportsAsync(distFolder, imports, { body, platform,
95
96
  entries: entries,
96
97
  });
97
98
  }
98
- exports.renderRscWithImportsAsync = renderRscWithImportsAsync;
99
99
  async function renderRscAsync(distFolder, args) {
100
100
  const platform = args.platform;
101
101
  return renderRscWithImportsAsync(distFolder, {
@@ -106,5 +106,4 @@ async function renderRscAsync(distFolder, args) {
106
106
  },
107
107
  }, args);
108
108
  }
109
- exports.renderRscAsync = renderRscAsync;
110
109
  //# sourceMappingURL=middleware.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/rsc/middleware.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright © 2024 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n// This module is bundled with Metro in web/react-server mode and redirects to platform specific renderers.\nimport type { RenderRscArgs } from '@expo/server/build/middleware/rsc';\nimport Constants from 'expo-constants';\nimport { asyncServerImport } from 'expo-router/_async-server-import';\nimport path from 'node:path';\n\nimport { renderRsc } from './rsc-renderer';\n\nconst debug = require('debug')('expo:server:rsc-renderer');\n\n// Tracking the implementation in expo/cli's MetroBundlerDevServer\nconst rscRenderContext = new Map<string, any>();\n\nfunction getRscRenderContext(platform: string) {\n // NOTE(EvanBacon): We memoize this now that there's a persistent server storage cache for Server Actions.\n if (rscRenderContext.has(platform)) {\n return rscRenderContext.get(platform)!;\n }\n\n const context = {};\n\n rscRenderContext.set(platform, context);\n return context;\n}\n\nfunction interopDefault(mod: any) {\n if ('default' in mod && typeof mod.default === 'object' && mod.default) {\n const def = mod.default;\n if ('default' in def && typeof def.default === 'object' && def.default) {\n return def.default;\n }\n return mod.default;\n }\n return mod;\n}\n\nasync function getServerActionManifest(\n distFolder: string,\n platform: string\n): Promise<\n Record<\n // Input ID\n string,\n [\n // Metro ID\n string,\n // Chunk location.\n string,\n ]\n >\n> {\n const filePath = `../../rsc/${platform}/action-manifest.js`;\n return interopDefault(await asyncServerImport(filePath));\n}\n\nasync function getSSRManifest(\n distFolder: string,\n platform: string\n): Promise<\n Record<\n // Input ID\n string,\n [\n // Metro ID\n string,\n // Chunk location.\n string,\n ]\n >\n> {\n const filePath = `../../rsc/${platform}/ssr-manifest.js`;\n return interopDefault(await asyncServerImport(filePath));\n}\n\n// The import map allows us to use external modules from different bundling contexts.\ntype ImportMap = {\n router: () => Promise<typeof import('./router/expo-definedRouter')>;\n};\n\nexport async function renderRscWithImportsAsync(\n distFolder: string,\n imports: ImportMap,\n { body, platform, searchParams, config, method, input, contentType, headers }: RenderRscArgs\n): Promise<ReadableStream<any>> {\n globalThis.__expo_platform_header = platform;\n if (method === 'POST' && !body) {\n throw new Error('Server request must be provided when method is POST (server actions)');\n }\n\n const context = getRscRenderContext(platform);\n context['__expo_requestHeaders'] = headers;\n\n const router = await imports.router();\n const entries = router.default({\n redirects: Constants.expoConfig?.extra?.router?.redirects,\n rewrites: Constants.expoConfig?.extra?.router?.rewrites,\n });\n\n const ssrManifest = await getSSRManifest(distFolder, platform);\n const actionManifest = await getServerActionManifest(distFolder, platform);\n return renderRsc(\n {\n body: body ?? undefined,\n context,\n config,\n input,\n contentType,\n decodedBody: searchParams.get('x-expo-params'),\n },\n {\n isExporting: true,\n\n resolveClientEntry(file: string, isServer: boolean) {\n debug('resolveClientEntry', file, { isServer });\n\n if (isServer) {\n if (!(file in actionManifest)) {\n throw new Error(\n `Could not find file in server action manifest: ${file}. ${JSON.stringify(actionManifest)}`\n );\n }\n\n const [id, chunk] = actionManifest[file];\n return {\n id,\n chunks: chunk ? [chunk] : [],\n };\n }\n\n if (!(file in ssrManifest)) {\n throw new Error(`Could not find file in SSR manifest: ${file}`);\n }\n\n const [id, chunk] = ssrManifest[file];\n return {\n id,\n chunks: chunk ? [chunk] : [],\n };\n },\n async loadServerModuleRsc(file) {\n debug('loadServerModuleRsc', file);\n const filePath = path.join('../../../', file);\n const m = await asyncServerImport(filePath);\n\n // TODO: This is a hack to workaround a cloudflare/metro issue where there's an extra `default` wrapper.\n if (typeof caches !== 'undefined') {\n return m.default;\n }\n return m;\n },\n\n entries: entries!,\n }\n );\n}\n\nexport async function renderRscAsync(\n distFolder: string,\n args: RenderRscArgs\n): Promise<ReadableStream<any>> {\n const platform = args.platform;\n return renderRscWithImportsAsync(\n distFolder,\n {\n router: () => {\n // Assumes this file is saved to: `dist/server/_expo/functions/_flight/[...rsc].js`\n const filePath = `../../rsc/${platform}/router.js`;\n return asyncServerImport(filePath);\n },\n },\n args\n );\n}\n"]}
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/rsc/middleware.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright © 2024 650 Industries.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n// This module is bundled with Metro in web/react-server mode and redirects to platform specific renderers.\nimport type { RenderRscArgs } from '@expo/server/build/middleware/rsc';\nimport Constants from 'expo-constants';\nimport { asyncServerImport } from 'expo-router/_async-server-import';\nimport path from 'node:path';\n\nimport { renderRsc } from './rsc-renderer';\n\nconst debug = require('debug')('expo:server:rsc-renderer');\n\n// Tracking the implementation in expo/cli's MetroBundlerDevServer\nconst rscRenderContext = new Map<string, any>();\n\nfunction getRscRenderContext(platform: string) {\n // NOTE(EvanBacon): We memoize this now that there's a persistent server storage cache for Server Actions.\n if (rscRenderContext.has(platform)) {\n return rscRenderContext.get(platform)!;\n }\n\n const context = {};\n\n rscRenderContext.set(platform, context);\n return context;\n}\n\nfunction interopDefault(mod: any) {\n if ('default' in mod && typeof mod.default === 'object' && mod.default) {\n const def = mod.default;\n if ('default' in def && typeof def.default === 'object' && def.default) {\n return def.default;\n }\n return mod.default;\n }\n return mod;\n}\n\nasync function getServerActionManifest(\n distFolder: string,\n platform: string\n): Promise<\n Record<\n // Input ID\n string,\n [\n // Metro ID\n string,\n // Chunk location.\n string,\n ]\n >\n> {\n const filePath = `../../rsc/${platform}/action-manifest.js`;\n return interopDefault(await asyncServerImport(filePath));\n}\n\nasync function getSSRManifest(\n distFolder: string,\n platform: string\n): Promise<\n Record<\n // Input ID\n string,\n [\n // Metro ID\n string,\n // Chunk location.\n string,\n ]\n >\n> {\n const filePath = `../../rsc/${platform}/ssr-manifest.js`;\n return interopDefault(await asyncServerImport(filePath));\n}\n\n// The import map allows us to use external modules from different bundling contexts.\ntype ImportMap = {\n router: () => Promise<typeof import('./router/expo-definedRouter')>;\n};\n\nexport async function renderRscWithImportsAsync(\n distFolder: string,\n imports: ImportMap,\n { body, platform, searchParams, config, method, input, contentType, headers }: RenderRscArgs\n): Promise<ReadableStream<any>> {\n globalThis.__expo_platform_header = platform;\n if (method === 'POST' && !body) {\n throw new Error('Server request must be provided when method is POST (server actions)');\n }\n\n const context = getRscRenderContext(platform);\n context['__expo_requestHeaders'] = headers;\n\n const router = await imports.router();\n const entries = router.default({\n redirects: Constants.expoConfig?.extra?.router?.redirects,\n rewrites: Constants.expoConfig?.extra?.router?.rewrites,\n });\n\n const ssrManifest = await getSSRManifest(distFolder, platform);\n const actionManifest = await getServerActionManifest(distFolder, platform);\n return renderRsc(\n {\n body: body ?? undefined,\n context,\n config,\n input,\n contentType,\n decodedBody: searchParams.get('x-expo-params'),\n },\n {\n isExporting: true,\n\n resolveClientEntry(file: string, isServer: boolean) {\n debug('resolveClientEntry', file, { isServer });\n\n if (isServer) {\n if (!(file in actionManifest)) {\n throw new Error(\n `Could not find file in server action manifest: ${file}. ${JSON.stringify(actionManifest)}`\n );\n }\n\n const [id, chunk] = actionManifest[file];\n return {\n id,\n chunks: chunk ? [chunk] : [],\n };\n }\n\n if (!(file in ssrManifest)) {\n throw new Error(`Could not find file in SSR manifest: ${file}`);\n }\n\n const [id, chunk] = ssrManifest[file];\n return {\n id,\n chunks: chunk ? [chunk] : [],\n };\n },\n async loadServerModuleRsc(file) {\n debug('loadServerModuleRsc', file);\n const filePath = path.join('../../../', file);\n const m = await asyncServerImport(filePath);\n\n // TODO: This is a hack to workaround a cloudflare/metro issue where there's an extra `default` wrapper.\n if (typeof caches !== 'undefined') {\n return m.default;\n }\n return m;\n },\n\n entries: entries!,\n }\n );\n}\n\nexport async function renderRscAsync(\n distFolder: string,\n args: RenderRscArgs\n): Promise<ReadableStream<any>> {\n const platform = args.platform;\n return renderRscWithImportsAsync(\n distFolder,\n {\n router: () => {\n // Assumes this file is saved to: `dist/server/_expo/functions/_flight/[...rsc].js`\n const filePath = `../../rsc/${platform}/router.js`;\n return asyncServerImport(filePath);\n },\n },\n args\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/rsc/path.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH,eAAO,MAAM,wBAAwB,aAAc,MAAM,WAQxD,CAAC;AAEF,eAAO,MAAM,0BAA0B,aAAc,MAAM,WAK1D,CAAC;AAEF,eAAO,MAAM,iBAAiB,aAAc,MAAM,WAAoC,CAAC;AAEvF,yDAAyD;AACzD,eAAO,MAAM,iBAAiB,YAAa,MAAM,WAahD,CAAC;AAGF,eAAO,MAAM,QAAQ,aAAc,MAAM,EAAE,WAmB1C,CAAC;AAEF,eAAO,MAAM,OAAO,aAAc,MAAM,WAGvC,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACxC,MAAM,MAAM,QAAQ,GAAG,SAAS,YAAY,EAAE,CAAC;AAE/C,eAAO,MAAM,iBAAiB,SAAU,MAAM,aAiBxC,CAAC;AAEP,eAAO,MAAM,cAAc,iCAEf,MAAM,KACf,OAAO,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,IAgDtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,4BAWvB,CAAC"}
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/rsc/path.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH,eAAO,MAAM,wBAAwB,GAAI,UAAU,MAAM,WAQxD,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,UAAU,MAAM,WAK1D,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM,WAAoC,CAAC;AAEvF,yDAAyD;AACzD,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM,WAahD,CAAC;AAGF,eAAO,MAAM,QAAQ,GAAI,GAAG,OAAO,MAAM,EAAE,WAmB1C,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,UAAU,MAAM,WAGvC,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACxC,MAAM,MAAM,QAAQ,GAAG,SAAS,YAAY,EAAE,CAAC;AAE/C,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,QAiB3C,CAAC;AAEP,eAAO,MAAM,cAAc,GACzB,UAAU,QAAQ,EAClB,UAAU,MAAM,KACf,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,IAgDtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,WAWzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/rsc/path.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright © 2024 650 Industries.\n * Copyright © 2024 2023 Daishi Kato\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * https://github.com/dai-shi/waku/blob/32d52242c1450b5f5965860e671ff73c42da8bd0/packages/waku/src/lib/utils/path.ts#L1\n */\n\n// Terminology:\n// - filePath: posix-like file path, e.g. `/foo/bar.js` or `c:/foo/bar.js`\n// This is used by Vite.\n// - fileURL: file URL, e.g. `file:///foo/bar.js` or `file:///c:/foo/bar.js`\n// This is used by import().\n// - osPath: os dependent path, e.g. `/foo/bar.js` or `c:\\foo\\bar.js`\n// This is used by node:fs.\n\nconst ABSOLUTE_WIN32_PATH_REGEXP = /^\\/[a-zA-Z]:\\//;\n\nexport const encodeFilePathToAbsolute = (filePath: string) => {\n if (ABSOLUTE_WIN32_PATH_REGEXP.test(filePath)) {\n throw new Error('Unsupported absolute file path');\n }\n if (filePath.startsWith('/')) {\n return filePath;\n }\n return '/' + filePath;\n};\n\nexport const decodeFilePathFromAbsolute = (filePath: string) => {\n if (ABSOLUTE_WIN32_PATH_REGEXP.test(filePath)) {\n return filePath.slice(1);\n }\n return filePath;\n};\n\nexport const filePathToFileURL = (filePath: string) => 'file://' + encodeURI(filePath);\n\n/** Return the original \"osPath\" based on the file URL */\nexport const fileURLToFilePath = (fileURL: string) => {\n if (!fileURL.startsWith('file://')) {\n throw new Error('Not a file URL');\n }\n\n const filePath = decodeURI(fileURL.slice('file://'.length));\n\n // File URLs are always formatted in POSIX, using a leading `/` (URL pathname) separator.\n // On POSIX systems, this leading `/` is the root directory, which is valid for absolute file paths.\n // On UNIX systems, this leading `/` needs to be stripped, and the actual UNIX formatted path is returned - to match Metro's behavior\n return ABSOLUTE_WIN32_PATH_REGEXP.test(filePath)\n ? filePath.slice(1).replace(/\\//g, '\\\\')\n : filePath;\n};\n\n// for filePath\nexport const joinPath = (...paths: string[]) => {\n const isAbsolute = paths[0]?.startsWith('/');\n const items = ([] as string[]).concat(...paths.map((path) => path.split('/')));\n let i = 0;\n while (i < items.length) {\n if (items[i] === '.' || items[i] === '') {\n items.splice(i, 1);\n } else if (items[i] === '..') {\n if (i > 0) {\n items.splice(i - 1, 2);\n --i;\n } else {\n items.splice(i, 1);\n }\n } else {\n ++i;\n }\n }\n return (isAbsolute ? '/' : '') + items.join('/') || '.';\n};\n\nexport const extname = (filePath: string) => {\n const index = filePath.lastIndexOf('.');\n return index > 0 ? filePath.slice(index) : '';\n};\n\nexport type PathSpecItem =\n | { type: 'literal'; name: string }\n | { type: 'group'; name?: string }\n | { type: 'wildcard'; name?: string };\nexport type PathSpec = readonly PathSpecItem[];\n\nexport const parsePathWithSlug = (path: string): PathSpec =>\n path\n .split('/')\n .filter(Boolean)\n .map((name) => {\n let type: 'literal' | 'group' | 'wildcard' = 'literal';\n const isSlug = name.startsWith('[') && name.endsWith(']');\n if (isSlug) {\n type = 'group';\n name = name.slice(1, -1);\n }\n const isWildcard = name.startsWith('...');\n if (isWildcard) {\n type = 'wildcard';\n name = name.slice(3);\n }\n return { type, name };\n });\n\nexport const getPathMapping = (\n pathSpec: PathSpec,\n pathname: string\n): Record<string, string | string[]> | null => {\n const actual = pathname.split('/').filter(Boolean);\n if (pathSpec.length > actual.length) {\n return null;\n }\n const mapping: Record<string, string | string[]> = {};\n let wildcardStartIndex = -1;\n for (let i = 0; i < pathSpec.length; i++) {\n const { type, name } = pathSpec[i]!;\n if (type === 'literal') {\n if (name !== actual[i]) {\n return null;\n }\n } else if (type === 'wildcard') {\n wildcardStartIndex = i;\n break;\n } else if (name) {\n mapping[name] = actual[i]!;\n }\n }\n if (wildcardStartIndex === -1) {\n if (pathSpec.length !== actual.length) {\n return null;\n }\n return mapping;\n }\n let wildcardEndIndex = -1;\n for (let i = 0; i < pathSpec.length; i++) {\n const { type, name } = pathSpec[pathSpec.length - i - 1]!;\n if (type === 'literal') {\n if (name !== actual[actual.length - i - 1]) {\n return null;\n }\n } else if (type === 'wildcard') {\n wildcardEndIndex = actual.length - i - 1;\n break;\n } else if (name) {\n mapping[name] = actual[actual.length - i - 1]!;\n }\n }\n if (wildcardStartIndex === -1 || wildcardEndIndex === -1) {\n throw new Error('Invalid wildcard path');\n }\n const wildcardName = pathSpec[wildcardStartIndex]!.name;\n if (wildcardName) {\n mapping[wildcardName] = actual.slice(wildcardStartIndex, wildcardEndIndex + 1);\n }\n return mapping;\n};\n\n/**\n * Transform a path spec to a regular expression.\n */\nexport const path2regexp = (path: PathSpec) => {\n const parts = path.map(({ type, name }) => {\n if (type === 'literal') {\n return name;\n } else if (type === 'group') {\n return `([^/]+)`;\n } else {\n return `(.*)`;\n }\n });\n return `^/${parts.join('/')}$`;\n};\n"]}
1
+ {"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/rsc/path.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright © 2024 650 Industries.\n * Copyright © 2024 2023 Daishi Kato\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * https://github.com/dai-shi/waku/blob/32d52242c1450b5f5965860e671ff73c42da8bd0/packages/waku/src/lib/utils/path.ts#L1\n */\n\n// Terminology:\n// - filePath: posix-like file path, e.g. `/foo/bar.js` or `c:/foo/bar.js`\n// This is used by Vite.\n// - fileURL: file URL, e.g. `file:///foo/bar.js` or `file:///c:/foo/bar.js`\n// This is used by import().\n// - osPath: os dependent path, e.g. `/foo/bar.js` or `c:\\foo\\bar.js`\n// This is used by node:fs.\n\nconst ABSOLUTE_WIN32_PATH_REGEXP = /^\\/[a-zA-Z]:\\//;\n\nexport const encodeFilePathToAbsolute = (filePath: string) => {\n if (ABSOLUTE_WIN32_PATH_REGEXP.test(filePath)) {\n throw new Error('Unsupported absolute file path');\n }\n if (filePath.startsWith('/')) {\n return filePath;\n }\n return '/' + filePath;\n};\n\nexport const decodeFilePathFromAbsolute = (filePath: string) => {\n if (ABSOLUTE_WIN32_PATH_REGEXP.test(filePath)) {\n return filePath.slice(1);\n }\n return filePath;\n};\n\nexport const filePathToFileURL = (filePath: string) => 'file://' + encodeURI(filePath);\n\n/** Return the original \"osPath\" based on the file URL */\nexport const fileURLToFilePath = (fileURL: string) => {\n if (!fileURL.startsWith('file://')) {\n throw new Error('Not a file URL');\n }\n\n const filePath = decodeURI(fileURL.slice('file://'.length));\n\n // File URLs are always formatted in POSIX, using a leading `/` (URL pathname) separator.\n // On POSIX systems, this leading `/` is the root directory, which is valid for absolute file paths.\n // On UNIX systems, this leading `/` needs to be stripped, and the actual UNIX formatted path is returned - to match Metro's behavior\n return ABSOLUTE_WIN32_PATH_REGEXP.test(filePath)\n ? filePath.slice(1).replace(/\\//g, '\\\\')\n : filePath;\n};\n\n// for filePath\nexport const joinPath = (...paths: string[]) => {\n const isAbsolute = paths[0]?.startsWith('/');\n const items = ([] as string[]).concat(...paths.map((path) => path.split('/')));\n let i = 0;\n while (i < items.length) {\n if (items[i] === '.' || items[i] === '') {\n items.splice(i, 1);\n } else if (items[i] === '..') {\n if (i > 0) {\n items.splice(i - 1, 2);\n --i;\n } else {\n items.splice(i, 1);\n }\n } else {\n ++i;\n }\n }\n return (isAbsolute ? '/' : '') + items.join('/') || '.';\n};\n\nexport const extname = (filePath: string) => {\n const index = filePath.lastIndexOf('.');\n return index > 0 ? filePath.slice(index) : '';\n};\n\nexport type PathSpecItem =\n | { type: 'literal'; name: string }\n | { type: 'group'; name?: string }\n | { type: 'wildcard'; name?: string };\nexport type PathSpec = readonly PathSpecItem[];\n\nexport const parsePathWithSlug = (path: string): PathSpec =>\n path\n .split('/')\n .filter(Boolean)\n .map((name) => {\n let type: 'literal' | 'group' | 'wildcard' = 'literal';\n const isSlug = name.startsWith('[') && name.endsWith(']');\n if (isSlug) {\n type = 'group';\n name = name.slice(1, -1);\n }\n const isWildcard = name.startsWith('...');\n if (isWildcard) {\n type = 'wildcard';\n name = name.slice(3);\n }\n return { type, name };\n });\n\nexport const getPathMapping = (\n pathSpec: PathSpec,\n pathname: string\n): Record<string, string | string[]> | null => {\n const actual = pathname.split('/').filter(Boolean);\n if (pathSpec.length > actual.length) {\n return null;\n }\n const mapping: Record<string, string | string[]> = {};\n let wildcardStartIndex = -1;\n for (let i = 0; i < pathSpec.length; i++) {\n const { type, name } = pathSpec[i]!;\n if (type === 'literal') {\n if (name !== actual[i]) {\n return null;\n }\n } else if (type === 'wildcard') {\n wildcardStartIndex = i;\n break;\n } else if (name) {\n mapping[name] = actual[i]!;\n }\n }\n if (wildcardStartIndex === -1) {\n if (pathSpec.length !== actual.length) {\n return null;\n }\n return mapping;\n }\n let wildcardEndIndex = -1;\n for (let i = 0; i < pathSpec.length; i++) {\n const { type, name } = pathSpec[pathSpec.length - i - 1]!;\n if (type === 'literal') {\n if (name !== actual[actual.length - i - 1]) {\n return null;\n }\n } else if (type === 'wildcard') {\n wildcardEndIndex = actual.length - i - 1;\n break;\n } else if (name) {\n mapping[name] = actual[actual.length - i - 1]!;\n }\n }\n if (wildcardStartIndex === -1 || wildcardEndIndex === -1) {\n throw new Error('Invalid wildcard path');\n }\n const wildcardName = pathSpec[wildcardStartIndex]!.name;\n if (wildcardName) {\n mapping[wildcardName] = actual.slice(wildcardStartIndex, wildcardEndIndex + 1);\n }\n return mapping;\n};\n\n/**\n * Transform a path spec to a regular expression.\n */\nexport const path2regexp = (path: PathSpec) => {\n const parts = path.map(({ type, name }) => {\n if (type === 'literal') {\n return name;\n } else if (type === 'group') {\n return `([^/]+)`;\n } else {\n return `(.*)`;\n }\n });\n return `^/${parts.join('/')}$`;\n};\n"]}
@@ -30,22 +30,22 @@ type RouterData = [
30
30
  export declare function Router({ routerData }: {
31
31
  routerData?: RouterData | undefined;
32
32
  }): import("react").FunctionComponentElement<Omit<{
33
- initialInput?: string | undefined;
33
+ initialInput?: string;
34
34
  initialParams?: unknown;
35
35
  fetchCache?: {
36
36
  e?: [input: string, params: unknown, elements: Promise<Record<string, ReactNode>> & {
37
37
  prev?: Record<string, ReactNode> | undefined;
38
- }] | undefined;
39
- s?: ((updater: (Promise<Record<string, ReactNode>> & {
38
+ }];
39
+ s?: (updater: (Promise<Record<string, ReactNode>> & {
40
40
  prev?: Record<string, ReactNode> | undefined;
41
41
  }) | ((prev: Promise<Record<string, ReactNode>> & {
42
42
  prev?: Record<string, ReactNode> | undefined;
43
43
  }) => Promise<Record<string, ReactNode>> & {
44
44
  prev?: Record<string, ReactNode> | undefined;
45
- })) => void) | undefined;
45
+ })) => void;
46
46
  o?: ((data: unknown) => void) | undefined;
47
- } | undefined;
48
- unstable_onFetchData?: ((data: unknown) => void) | undefined;
47
+ };
48
+ unstable_onFetchData?: (data: unknown) => void;
49
49
  children: ReactNode;
50
50
  }, "children">>;
51
51
  /**
@@ -56,7 +56,7 @@ export declare function ServerRouter({ children, route }: {
56
56
  children: ReactNode;
57
57
  route: RouteProps;
58
58
  }): import("react").FunctionComponentElement<{
59
- children?: ReactNode;
59
+ children?: ReactNode | undefined;
60
60
  }>;
61
61
  export type LinkProps = ClassicLinkProps & {
62
62
  href: string;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/rsc/router/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmBH,OAAO,KAAK,EAGV,SAAS,EAET,oBAAoB,EAGrB,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,KAAK,EAAE,MAAM,IAAI,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,IAAI,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGvF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AA+O3C,wBAAgB,kBAAkB,IAAI,qBAAqB,GACzD,UAAU,GAAG;IACX,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;CAChC,CA4FF;AAoDD,KAAK,UAAU,GAAG,CAAC,SAAS;IAC1B,MAAM;IACN,SAAS;QACP,OAAO;QACP,MAAM,EAAE;KACT;CACF,CAAC,EAAE,CAAC;AAGL,KAAK,UAAU,GAAG;IAChB,UAAU,CAAC,EAAE,UAAU;IACvB,iBAAiB,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/D,CAAC;AAIF,wBAAgB,MAAM,CAAC,EAAE,UAAgC,EAAE;;CAAA;;;;;;;;;;;;;;;;;;gBAU1D;AAKD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE;;GAgB3F;AAED,MAAM,MAAM,SAAS,GAAG,gBAAgB,GAAG;IACzC,IAAI,EAAE,MAAM,CAAC;CAMd,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC;AAE1D,eAAO,MAAM,IAAI,eAAyD,CAAC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/rsc/router/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmBH,OAAO,KAAK,EAGV,SAAS,EAET,oBAAoB,EAGrB,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,KAAK,EAAE,MAAM,IAAI,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,IAAI,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGvF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AA+O3C,wBAAgB,kBAAkB,IAAI,qBAAqB,GACzD,UAAU,GAAG;IACX,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;CAChC,CA4FF;AAoDD,KAAK,UAAU,GAAG,CAAC,SAAS;IAC1B,MAAM;IACN,SAAS;QACP,OAAO;QACP,MAAM,EAAE;KACT;CACF,CAAC,EAAE,CAAC;AAGL,KAAK,UAAU,GAAG;IAChB,UAAU,CAAC,EAAE,UAAU;IACvB,iBAAiB,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/D,CAAC;AAIF,wBAAgB,MAAM,CAAC,EAAE,UAAgC,EAAE;;CAAA;;;;;;;;;;;;;;;;;;gBAU1D;AAKD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE;;GAgB3F;AAED,MAAM,MAAM,SAAS,GAAG,gBAAgB,GAAG;IACzC,IAAI,EAAE,MAAM,CAAC;CAMd,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC;AAE1D,eAAO,MAAM,IAAI,EAA4C,aAAa,CAAC"}
@@ -10,7 +10,10 @@
10
10
  'use client';
11
11
  "use strict";
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.Link = exports.ServerRouter = exports.Router = exports.useRouter_UNSTABLE = void 0;
13
+ exports.Link = void 0;
14
+ exports.useRouter_UNSTABLE = useRouter_UNSTABLE;
15
+ exports.Router = Router;
16
+ exports.ServerRouter = ServerRouter;
14
17
  const react_slot_1 = require("@radix-ui/react-slot");
15
18
  const react_1 = require("react");
16
19
  const react_native_1 = require("react-native");
@@ -272,7 +275,6 @@ function useRouter_UNSTABLE() {
272
275
  prefetch,
273
276
  };
274
277
  }
275
- exports.useRouter_UNSTABLE = useRouter_UNSTABLE;
276
278
  const RouterSlot = ({ route, routerData, cachedRef, id, fallback, children, }) => {
277
279
  // const unstable_shouldRenderPrev = (_err: unknown) => {
278
280
  // const shouldSkip = routerData[0];
@@ -309,7 +311,6 @@ function Router({ routerData = DEFAULT_ROUTER_DATA }) {
309
311
  const unstable_onFetchData = () => { };
310
312
  return (0, react_1.createElement)(host_js_1.Root, { initialInput, initialParams, unstable_onFetchData }, (0, react_1.createElement)(InnerRouter, { routerData }));
311
313
  }
312
- exports.Router = Router;
313
314
  const notAvailableInServer = (name) => () => {
314
315
  throw new Error(`${name} is not in the server`);
315
316
  };
@@ -326,7 +327,6 @@ function ServerRouter({ children, route }) {
326
327
  },
327
328
  }, children));
328
329
  }
329
- exports.ServerRouter = ServerRouter;
330
330
  exports.Link = (0, react_1.forwardRef)(ExpoRouterLink);
331
331
  exports.Link.resolveHref = href_1.resolveHref;
332
332
  function ExpoRouterLink({ href, replace, push,
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/rsc/router/client.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright © 2024 650 Industries.\n * Copyright © 2024 2023 Daishi Kato\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * https://github.com/dai-shi/waku/blob/3d1cc7d714b67b142c847e879c30f0724fc457a7/packages/waku/src/router/client.ts#L1\n */\n\n'use client';\n\nimport { Slot as ReactSlot } from '@radix-ui/react-slot';\nimport {\n startTransition,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useTransition,\n createElement,\n createContext,\n useState,\n Fragment,\n forwardRef,\n useMemo,\n} from 'react';\nimport type {\n ComponentProps,\n FunctionComponent,\n ReactNode,\n MutableRefObject,\n AnchorHTMLAttributes,\n MouseEvent,\n ForwardedRef,\n} from 'react';\nimport { Text } from 'react-native';\n\nimport { PARAM_KEY_SKIP, getComponentIds, getInputString } from './common.js';\nimport type { RouteProps } from './common.js';\nimport { prefetchRSC, Root, Slot, useRefetch } from './host.js';\nimport type { NavigationOptions } from '../../global-state/routing.js';\nimport type { Router as ClassicExpoRouterType } from '../../imperative-api';\nimport type { LinkProps as ClassicLinkProps, LinkComponent } from '../../link/Link.js';\nimport { resolveHref } from '../../link/href';\nimport { useInteropClassName, useHrefAttrs } from '../../link/useLinkHooks';\nimport type { Href } from '../../types.js';\n\nconst normalizeRoutePath = (path: string) => {\n for (const suffix of ['/', '/index.html']) {\n if (path.endsWith(suffix)) {\n return path.slice(0, -suffix.length) || '/';\n }\n }\n return path;\n};\n\nconst parseRoute = (url: URL): RouteProps => {\n if ((globalThis as any).__EXPO_ROUTER_404__) {\n return { path: '/404', query: '', hash: '' };\n }\n const { pathname, searchParams, hash } = url;\n if (searchParams.has(PARAM_KEY_SKIP)) {\n console.warn(`The search param \"${PARAM_KEY_SKIP}\" is reserved`);\n }\n return {\n path: normalizeRoutePath(pathname),\n query: searchParams.toString(),\n hash,\n };\n};\nconst getHref = () =>\n process.env.EXPO_OS === 'web'\n ? window.location.href\n : // TODO: This is hardcoded on native to simplify the initial PR.\n 'http://localhost:8081/';\n\ntype ChangeRoute = (\n route: RouteProps,\n options?: {\n checkCache?: boolean;\n skipRefetch?: boolean;\n }\n) => void;\n\ntype PrefetchRoute = (route: RouteProps) => void;\n\nconst equalRouteProps = (a: RouteProps, b: RouteProps) => {\n if (a.path !== b.path) {\n return false;\n }\n if (a.query !== b.query) {\n return false;\n }\n return true;\n};\n\nconst RouterContext = createContext<{\n route: RouteProps;\n changeRoute: ChangeRoute;\n prefetchRoute: PrefetchRoute;\n} | null>(null);\n\nconst InnerRouter = ({ routerData }: { routerData: RouterData }) => {\n const refetch = useRefetch();\n\n const initialRouteRef = useRef<RouteProps>(null);\n if (!initialRouteRef.current) {\n initialRouteRef.current = parseRoute(new URL(getHref()));\n }\n const [route, setRoute] = useState(() => ({\n // This is the first initialization of the route, and it has\n // to ignore the hash, because on server side there is none.\n // Otherwise there will be a hydration error.\n // The client side route, including the hash, will be updated in the effect below.\n ...initialRouteRef.current!,\n hash: '',\n }));\n\n // Update the route post-load to include the current hash.\n useEffect(() => {\n const initialRoute = initialRouteRef.current!;\n setRoute((prev) => {\n if (\n prev.path === initialRoute.path &&\n prev.query === initialRoute.query &&\n prev.hash === initialRoute.hash\n ) {\n return prev;\n }\n return initialRoute;\n });\n }, []);\n\n const componentIds = getComponentIds(route.path);\n\n // const refetchRoute = () => {\n // const loc = parseRoute(new URL(getHref()));\n // const input = getInputString(loc.path);\n // refetch(input, loc.query);\n // refetch(input, JSON.stringify({ query: route.query }));\n // };\n // globalThis.__EXPO_REFETCH_ROUTE_NO_CACHE__ = refetchRoute;\n\n const [cached, setCached] = useState<Record<string, RouteProps>>(() => {\n return Object.fromEntries(componentIds.map((id) => [id, route]));\n });\n const cachedRef = useRef(cached);\n useEffect(() => {\n cachedRef.current = cached;\n }, [cached]);\n\n const changeRoute: ChangeRoute = useCallback(\n (route, options) => {\n const { checkCache, skipRefetch } = options || {};\n startTransition(() => {\n setRoute(route);\n });\n const componentIds = getComponentIds(route.path);\n if (\n checkCache &&\n componentIds.every((id) => {\n const cachedLoc = cachedRef.current[id];\n return cachedLoc && equalRouteProps(cachedLoc, route);\n })\n ) {\n return; // everything is cached\n }\n const shouldSkip = routerData[0];\n const skip = getSkipList(shouldSkip, componentIds, route, cachedRef.current);\n if (componentIds.every((id) => skip.includes(id))) {\n return; // everything is skipped\n }\n const input = getInputString(route.path);\n if (!skipRefetch) {\n refetch(input, JSON.stringify({ query: route.query, skip }));\n }\n startTransition(() => {\n setCached((prev) => ({\n ...prev,\n ...Object.fromEntries(\n componentIds.flatMap((id) => (skip.includes(id) ? [] : [[id, route]]))\n ),\n }));\n });\n },\n [refetch, routerData]\n );\n\n const prefetchRoute: PrefetchRoute = useCallback(\n (route) => {\n const componentIds = getComponentIds(route.path);\n const shouldSkip = routerData[0];\n const skip = getSkipList(shouldSkip, componentIds, route, cachedRef.current);\n if (componentIds.every((id) => skip.includes(id))) {\n return; // everything is cached\n }\n const input = getInputString(route.path);\n prefetchRSC(input, JSON.stringify({ query: route.query, skip }));\n (globalThis as any).__EXPO_ROUTER_PREFETCH__?.(route.path);\n },\n [routerData]\n );\n\n useEffect(() => {\n const callback = () => {\n const route = parseRoute(new URL(getHref()));\n changeRoute(route, { checkCache: true });\n };\n if (window.addEventListener) {\n window.addEventListener('popstate', callback);\n return () => {\n window.removeEventListener('popstate', callback);\n };\n }\n return () => {};\n }, [changeRoute]);\n\n useEffect(() => {\n const callback = (pathname: string, searchParamsString: string) => {\n const url = new URL(getHref());\n url.pathname = pathname;\n url.search = searchParamsString;\n url.hash = '';\n getHistory().pushState(\n {\n ...getHistory().state,\n expo_new_path: url.pathname !== window.location.pathname,\n },\n '',\n url\n );\n changeRoute(parseRoute(url), { skipRefetch: true });\n };\n // eslint-disable-next-line no-multi-assign\n const listeners = (routerData[1] ||= new Set());\n listeners.add(callback);\n return () => {\n listeners.delete(callback);\n };\n }, [changeRoute, routerData]);\n\n useEffect(() => {\n const { hash } = window.location;\n const { state } = getHistory();\n const element = hash && document.getElementById(hash.slice(1));\n if (window.scrollTo) {\n window.scrollTo({\n left: 0,\n top: element ? element.getBoundingClientRect().top + window.scrollY : 0,\n behavior: state?.expo_new_path ? 'instant' : 'auto',\n });\n } else {\n // TODO: Native\n // console.log('window.scrollTo is not available');\n }\n });\n\n const children = componentIds.reduceRight(\n (acc: ReactNode, id) =>\n createElement(RouterSlot, { route, routerData, cachedRef, id, fallback: acc }, acc),\n null\n );\n\n return createElement(\n RouterContext.Provider,\n { value: { route, changeRoute, prefetchRoute } },\n children\n );\n};\n\nfunction getHistory() {\n if (process.env.EXPO_OS === 'web') {\n return window.history;\n }\n // Native shim\n return {\n pushState: () => {},\n replaceState: () => {},\n back: () => {},\n forward: () => {},\n state: {},\n };\n}\n\nexport function useRouter_UNSTABLE(): ClassicExpoRouterType &\n RouteProps & {\n forward: () => void;\n prefetch: (href: Href) => void;\n } {\n const router = useContext(RouterContext);\n if (!router) {\n throw new Error('Missing Router');\n }\n const { route, changeRoute, prefetchRoute } = router;\n const push: ClassicExpoRouterType['push'] = useCallback(\n (href: Href, options?: NavigationOptions) => {\n if (options) {\n // TODO(Bacon): Implement options\n console.warn(\n 'options prop of router.push() is not supported in React Server Components yet'\n );\n }\n\n const url = new URL(resolveHref(href), getHref());\n getHistory().pushState(\n {\n ...getHistory().state,\n expo_new_path: url.pathname !== window.location.pathname,\n },\n '',\n url\n );\n changeRoute(parseRoute(url));\n },\n [changeRoute]\n );\n const replace: ClassicExpoRouterType['replace'] = useCallback(\n (href: Href, options?: NavigationOptions) => {\n if (options) {\n // TODO(Bacon): Implement options\n console.warn(\n 'options prop of router.replace() is not supported in React Server Components yet'\n );\n }\n\n const url = new URL(resolveHref(href), getHref());\n getHistory().replaceState(getHistory().state, '', url);\n changeRoute(parseRoute(url));\n },\n [changeRoute]\n );\n const reload = useCallback(() => {\n const url = new URL(getHref());\n changeRoute(parseRoute(url));\n }, [changeRoute]);\n const back = useCallback(() => {\n // FIXME is this correct?\n getHistory().back();\n }, []);\n const forward = useCallback(() => {\n // FIXME is this correct?\n getHistory().forward();\n }, []);\n const prefetch = useCallback(\n (href: Href) => {\n const url = new URL(resolveHref(href), getHref());\n prefetchRoute(parseRoute(url));\n },\n [prefetchRoute]\n );\n return {\n ...route,\n canDismiss() {\n throw new Error('router.canDismiss() is not supported in React Server Components yet');\n },\n canGoBack() {\n throw new Error('router.canGoBack() is not supported in React Server Components yet');\n },\n dismiss() {\n throw new Error('router.dismiss() is not supported in React Server Components yet');\n },\n dismissTo() {\n throw new Error('router.dismissTo() is not supported in React Server Components yet');\n },\n dismissAll() {\n throw new Error('router.dismissAll() is not supported in React Server Components yet');\n },\n setParams() {\n throw new Error('router.setParams() is not supported in React Server Components yet');\n },\n\n // TODO: The behavior here is not the same as before.\n navigate: push,\n push,\n replace,\n reload,\n back,\n forward,\n prefetch,\n };\n}\n\nconst RouterSlot = ({\n route,\n routerData,\n cachedRef,\n id,\n fallback,\n children,\n}: {\n route: RouteProps;\n routerData: RouterData;\n cachedRef: MutableRefObject<Record<string, RouteProps>>;\n id: string;\n fallback?: ReactNode;\n children?: ReactNode;\n}) => {\n // const unstable_shouldRenderPrev = (_err: unknown) => {\n // const shouldSkip = routerData[0];\n // const skip = getSkipList(shouldSkip, [id], route, cachedRef.current);\n // return skip.length > 0;\n // };\n return createElement(Slot, { id, fallback }, children);\n};\n\nconst getSkipList = (\n shouldSkip: ShouldSkip | undefined,\n componentIds: readonly string[],\n route: RouteProps,\n cached: Record<string, RouteProps>\n): string[] => {\n const shouldSkipObj = Object.fromEntries(shouldSkip || []);\n return componentIds.filter((id) => {\n const prevProps = cached[id];\n if (!prevProps) {\n return false;\n }\n const shouldCheck = shouldSkipObj[id];\n if (!shouldCheck) {\n return false;\n }\n if (shouldCheck[0] && route.path !== prevProps.path) {\n return false;\n }\n if (shouldCheck[0] && route.query !== prevProps.query) {\n return false;\n }\n return true;\n });\n};\n\n// TODO revisit shouldSkip API\ntype ShouldSkip = (readonly [\n string,\n readonly [\n boolean, // if we compare path\n string[], // searchParams keys to compare\n ],\n])[];\n\n// Note: The router data must be a stable mutable object (array).\ntype RouterData = [\n shouldSkip?: ShouldSkip,\n locationListeners?: Set<(path: string, query: string) => void>,\n];\n\nconst DEFAULT_ROUTER_DATA: RouterData = [];\n\nexport function Router({ routerData = DEFAULT_ROUTER_DATA }) {\n const route = parseRoute(new URL(getHref()));\n const initialInput = getInputString(route.path);\n const initialParams = JSON.stringify({ query: route.query });\n const unstable_onFetchData = () => {};\n return createElement(\n Root as FunctionComponent<Omit<ComponentProps<typeof Root>, 'children'>>,\n { initialInput, initialParams, unstable_onFetchData },\n createElement(InnerRouter, { routerData })\n );\n}\n\nconst notAvailableInServer = (name: string) => () => {\n throw new Error(`${name} is not in the server`);\n};\n/**\n * ServerRouter for SSR\n * This is not a public API.\n */\nexport function ServerRouter({ children, route }: { children: ReactNode; route: RouteProps }) {\n return createElement(\n Fragment,\n null,\n createElement(\n RouterContext.Provider,\n {\n value: {\n route,\n changeRoute: notAvailableInServer('changeRoute'),\n prefetchRoute: notAvailableInServer('prefetchRoute'),\n },\n },\n children\n )\n );\n}\n\nexport type LinkProps = ClassicLinkProps & {\n href: string;\n // pending?: ReactNode;\n // notPending?: ReactNode;\n\n // unstable_prefetchOnEnter?: boolean;\n // unstable_prefetchOnView?: boolean;\n} & Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>;\n\nexport const Link = forwardRef(ExpoRouterLink) as unknown as LinkComponent;\n\nLink.resolveHref = resolveHref;\n\nfunction ExpoRouterLink(\n {\n href,\n replace,\n push,\n // TODO: This does not prevent default on the anchor tag.\n relativeToDirectory,\n asChild,\n rel,\n target,\n download,\n // pending,\n // notPending,\n // unstable_prefetchOnEnter,\n // unstable_prefetchOnView,\n children,\n ...props\n }: LinkProps,\n ref: ForwardedRef<Text>\n) {\n // Mutate the style prop to add the className on web.\n const style = useInteropClassName(props);\n\n // If not passing asChild, we need to forward the props to the anchor tag using React Native Web's `hrefAttrs`.\n const hrefAttrs = useHrefAttrs({ asChild, rel, target, download });\n\n const resolvedHref = useMemo(() => {\n if (href == null) {\n throw new Error('Link: href is required');\n }\n return resolveHref(href);\n }, [href]);\n\n const router = useContext(RouterContext);\n const changeRoute = router\n ? router.changeRoute\n : () => {\n throw new Error('Missing Router');\n };\n const prefetchRoute = router\n ? router.prefetchRoute\n : () => {\n throw new Error('Missing Router');\n };\n // TODO: Implement support for pending states in the future.\n const [, startTransition] = useTransition();\n // const elementRef = useRef<HTMLAnchorElement>();\n\n // useEffect(() => {\n // if (unstable_prefetchOnView && process.env.EXPO_OS === 'web' && ref.current) {\n // const observer = new IntersectionObserver(\n // (entries) => {\n // entries.forEach((entry) => {\n // if (entry.isIntersecting) {\n // const url = new URL(resolvedHref, getHref());\n // if (router && url.href !== getHref()) {\n // const route = parseRoute(url);\n // router.prefetchRoute(route);\n // }\n // }\n // });\n // },\n // { threshold: 0.1 }\n // );\n\n // observer.observe(ref.current);\n\n // return () => {\n // observer.disconnect();\n // };\n // }\n // return () => {};\n // }, [unstable_prefetchOnView, router, resolvedHref]);\n\n const onClick = (event: MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n const url = new URL(resolvedHref, getHref());\n // TODO: Use in-memory route for native platforms.\n // if (url.href !== getHref()) {\n const route = parseRoute(url);\n prefetchRoute(route);\n startTransition(() => {\n getHistory().pushState(\n {\n ...getHistory().state,\n expo_new_path: url.pathname !== window.location.pathname,\n },\n '',\n url\n );\n changeRoute(route);\n });\n // }\n props.onClick?.(event);\n };\n // const onMouseEnter = unstable_prefetchOnEnter\n // ? (event: MouseEvent<HTMLAnchorElement>) => {\n // const url = new URL(to, getHref());\n // if (url.href !== getHref()) {\n // const route = parseRoute(url);\n // prefetchRoute(route);\n // }\n // props.onMouseEnter?.(event);\n // }\n // : props.onMouseEnter;\n\n const Element = asChild ? ReactSlot : Text;\n\n const ele = createElement(\n // @ts-expect-error\n Element,\n {\n ...hrefAttrs,\n ...props,\n style,\n href: resolvedHref,\n onPress: onClick,\n // onMouseEnter,\n ref,\n },\n children\n );\n // if (isPending && pending !== undefined) {\n // return createElement(Fragment, null, ele, pending);\n // }\n // if (!isPending && notPending !== undefined) {\n // return createElement(Fragment, null, ele, notPending);\n // }\n return ele;\n}\n"]}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/rsc/router/client.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright © 2024 650 Industries.\n * Copyright © 2024 2023 Daishi Kato\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * https://github.com/dai-shi/waku/blob/3d1cc7d714b67b142c847e879c30f0724fc457a7/packages/waku/src/router/client.ts#L1\n */\n\n'use client';\n\nimport { Slot as ReactSlot } from '@radix-ui/react-slot';\nimport {\n startTransition,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useTransition,\n createElement,\n createContext,\n useState,\n Fragment,\n forwardRef,\n useMemo,\n} from 'react';\nimport type {\n ComponentProps,\n FunctionComponent,\n ReactNode,\n MutableRefObject,\n AnchorHTMLAttributes,\n MouseEvent,\n ForwardedRef,\n} from 'react';\nimport { Text } from 'react-native';\n\nimport { PARAM_KEY_SKIP, getComponentIds, getInputString } from './common.js';\nimport type { RouteProps } from './common.js';\nimport { prefetchRSC, Root, Slot, useRefetch } from './host.js';\nimport type { NavigationOptions } from '../../global-state/routing.js';\nimport type { Router as ClassicExpoRouterType } from '../../imperative-api';\nimport type { LinkProps as ClassicLinkProps, LinkComponent } from '../../link/Link.js';\nimport { resolveHref } from '../../link/href';\nimport { useInteropClassName, useHrefAttrs } from '../../link/useLinkHooks';\nimport type { Href } from '../../types.js';\n\nconst normalizeRoutePath = (path: string) => {\n for (const suffix of ['/', '/index.html']) {\n if (path.endsWith(suffix)) {\n return path.slice(0, -suffix.length) || '/';\n }\n }\n return path;\n};\n\nconst parseRoute = (url: URL): RouteProps => {\n if ((globalThis as any).__EXPO_ROUTER_404__) {\n return { path: '/404', query: '', hash: '' };\n }\n const { pathname, searchParams, hash } = url;\n if (searchParams.has(PARAM_KEY_SKIP)) {\n console.warn(`The search param \"${PARAM_KEY_SKIP}\" is reserved`);\n }\n return {\n path: normalizeRoutePath(pathname),\n query: searchParams.toString(),\n hash,\n };\n};\nconst getHref = () =>\n process.env.EXPO_OS === 'web'\n ? window.location.href\n : // TODO: This is hardcoded on native to simplify the initial PR.\n 'http://localhost:8081/';\n\ntype ChangeRoute = (\n route: RouteProps,\n options?: {\n checkCache?: boolean;\n skipRefetch?: boolean;\n }\n) => void;\n\ntype PrefetchRoute = (route: RouteProps) => void;\n\nconst equalRouteProps = (a: RouteProps, b: RouteProps) => {\n if (a.path !== b.path) {\n return false;\n }\n if (a.query !== b.query) {\n return false;\n }\n return true;\n};\n\nconst RouterContext = createContext<{\n route: RouteProps;\n changeRoute: ChangeRoute;\n prefetchRoute: PrefetchRoute;\n} | null>(null);\n\nconst InnerRouter = ({ routerData }: { routerData: RouterData }) => {\n const refetch = useRefetch();\n\n const initialRouteRef = useRef<RouteProps>(null);\n if (!initialRouteRef.current) {\n initialRouteRef.current = parseRoute(new URL(getHref()));\n }\n const [route, setRoute] = useState(() => ({\n // This is the first initialization of the route, and it has\n // to ignore the hash, because on server side there is none.\n // Otherwise there will be a hydration error.\n // The client side route, including the hash, will be updated in the effect below.\n ...initialRouteRef.current!,\n hash: '',\n }));\n\n // Update the route post-load to include the current hash.\n useEffect(() => {\n const initialRoute = initialRouteRef.current!;\n setRoute((prev) => {\n if (\n prev.path === initialRoute.path &&\n prev.query === initialRoute.query &&\n prev.hash === initialRoute.hash\n ) {\n return prev;\n }\n return initialRoute;\n });\n }, []);\n\n const componentIds = getComponentIds(route.path);\n\n // const refetchRoute = () => {\n // const loc = parseRoute(new URL(getHref()));\n // const input = getInputString(loc.path);\n // refetch(input, loc.query);\n // refetch(input, JSON.stringify({ query: route.query }));\n // };\n // globalThis.__EXPO_REFETCH_ROUTE_NO_CACHE__ = refetchRoute;\n\n const [cached, setCached] = useState<Record<string, RouteProps>>(() => {\n return Object.fromEntries(componentIds.map((id) => [id, route]));\n });\n const cachedRef = useRef(cached);\n useEffect(() => {\n cachedRef.current = cached;\n }, [cached]);\n\n const changeRoute: ChangeRoute = useCallback(\n (route, options) => {\n const { checkCache, skipRefetch } = options || {};\n startTransition(() => {\n setRoute(route);\n });\n const componentIds = getComponentIds(route.path);\n if (\n checkCache &&\n componentIds.every((id) => {\n const cachedLoc = cachedRef.current[id];\n return cachedLoc && equalRouteProps(cachedLoc, route);\n })\n ) {\n return; // everything is cached\n }\n const shouldSkip = routerData[0];\n const skip = getSkipList(shouldSkip, componentIds, route, cachedRef.current);\n if (componentIds.every((id) => skip.includes(id))) {\n return; // everything is skipped\n }\n const input = getInputString(route.path);\n if (!skipRefetch) {\n refetch(input, JSON.stringify({ query: route.query, skip }));\n }\n startTransition(() => {\n setCached((prev) => ({\n ...prev,\n ...Object.fromEntries(\n componentIds.flatMap((id) => (skip.includes(id) ? [] : [[id, route]]))\n ),\n }));\n });\n },\n [refetch, routerData]\n );\n\n const prefetchRoute: PrefetchRoute = useCallback(\n (route) => {\n const componentIds = getComponentIds(route.path);\n const shouldSkip = routerData[0];\n const skip = getSkipList(shouldSkip, componentIds, route, cachedRef.current);\n if (componentIds.every((id) => skip.includes(id))) {\n return; // everything is cached\n }\n const input = getInputString(route.path);\n prefetchRSC(input, JSON.stringify({ query: route.query, skip }));\n (globalThis as any).__EXPO_ROUTER_PREFETCH__?.(route.path);\n },\n [routerData]\n );\n\n useEffect(() => {\n const callback = () => {\n const route = parseRoute(new URL(getHref()));\n changeRoute(route, { checkCache: true });\n };\n if (window.addEventListener) {\n window.addEventListener('popstate', callback);\n return () => {\n window.removeEventListener('popstate', callback);\n };\n }\n return () => {};\n }, [changeRoute]);\n\n useEffect(() => {\n const callback = (pathname: string, searchParamsString: string) => {\n const url = new URL(getHref());\n url.pathname = pathname;\n url.search = searchParamsString;\n url.hash = '';\n getHistory().pushState(\n {\n ...getHistory().state,\n expo_new_path: url.pathname !== window.location.pathname,\n },\n '',\n url\n );\n changeRoute(parseRoute(url), { skipRefetch: true });\n };\n // eslint-disable-next-line no-multi-assign\n const listeners = (routerData[1] ||= new Set());\n listeners.add(callback);\n return () => {\n listeners.delete(callback);\n };\n }, [changeRoute, routerData]);\n\n useEffect(() => {\n const { hash } = window.location;\n const { state } = getHistory();\n const element = hash && document.getElementById(hash.slice(1));\n if (window.scrollTo) {\n window.scrollTo({\n left: 0,\n top: element ? element.getBoundingClientRect().top + window.scrollY : 0,\n behavior: state?.expo_new_path ? 'instant' : 'auto',\n });\n } else {\n // TODO: Native\n // console.log('window.scrollTo is not available');\n }\n });\n\n const children = componentIds.reduceRight(\n (acc: ReactNode, id) =>\n createElement(RouterSlot, { route, routerData, cachedRef, id, fallback: acc }, acc),\n null\n );\n\n return createElement(\n RouterContext.Provider,\n { value: { route, changeRoute, prefetchRoute } },\n children\n );\n};\n\nfunction getHistory() {\n if (process.env.EXPO_OS === 'web') {\n return window.history;\n }\n // Native shim\n return {\n pushState: () => {},\n replaceState: () => {},\n back: () => {},\n forward: () => {},\n state: {},\n };\n}\n\nexport function useRouter_UNSTABLE(): ClassicExpoRouterType &\n RouteProps & {\n forward: () => void;\n prefetch: (href: Href) => void;\n } {\n const router = useContext(RouterContext);\n if (!router) {\n throw new Error('Missing Router');\n }\n const { route, changeRoute, prefetchRoute } = router;\n const push: ClassicExpoRouterType['push'] = useCallback(\n (href: Href, options?: NavigationOptions) => {\n if (options) {\n // TODO(Bacon): Implement options\n console.warn(\n 'options prop of router.push() is not supported in React Server Components yet'\n );\n }\n\n const url = new URL(resolveHref(href), getHref());\n getHistory().pushState(\n {\n ...getHistory().state,\n expo_new_path: url.pathname !== window.location.pathname,\n },\n '',\n url\n );\n changeRoute(parseRoute(url));\n },\n [changeRoute]\n );\n const replace: ClassicExpoRouterType['replace'] = useCallback(\n (href: Href, options?: NavigationOptions) => {\n if (options) {\n // TODO(Bacon): Implement options\n console.warn(\n 'options prop of router.replace() is not supported in React Server Components yet'\n );\n }\n\n const url = new URL(resolveHref(href), getHref());\n getHistory().replaceState(getHistory().state, '', url);\n changeRoute(parseRoute(url));\n },\n [changeRoute]\n );\n const reload = useCallback(() => {\n const url = new URL(getHref());\n changeRoute(parseRoute(url));\n }, [changeRoute]);\n const back = useCallback(() => {\n // FIXME is this correct?\n getHistory().back();\n }, []);\n const forward = useCallback(() => {\n // FIXME is this correct?\n getHistory().forward();\n }, []);\n const prefetch = useCallback(\n (href: Href) => {\n const url = new URL(resolveHref(href), getHref());\n prefetchRoute(parseRoute(url));\n },\n [prefetchRoute]\n );\n return {\n ...route,\n canDismiss() {\n throw new Error('router.canDismiss() is not supported in React Server Components yet');\n },\n canGoBack() {\n throw new Error('router.canGoBack() is not supported in React Server Components yet');\n },\n dismiss() {\n throw new Error('router.dismiss() is not supported in React Server Components yet');\n },\n dismissTo() {\n throw new Error('router.dismissTo() is not supported in React Server Components yet');\n },\n dismissAll() {\n throw new Error('router.dismissAll() is not supported in React Server Components yet');\n },\n setParams() {\n throw new Error('router.setParams() is not supported in React Server Components yet');\n },\n\n // TODO: The behavior here is not the same as before.\n navigate: push,\n push,\n replace,\n reload,\n back,\n forward,\n prefetch,\n };\n}\n\nconst RouterSlot = ({\n route,\n routerData,\n cachedRef,\n id,\n fallback,\n children,\n}: {\n route: RouteProps;\n routerData: RouterData;\n cachedRef: MutableRefObject<Record<string, RouteProps>>;\n id: string;\n fallback?: ReactNode;\n children?: ReactNode;\n}) => {\n // const unstable_shouldRenderPrev = (_err: unknown) => {\n // const shouldSkip = routerData[0];\n // const skip = getSkipList(shouldSkip, [id], route, cachedRef.current);\n // return skip.length > 0;\n // };\n return createElement(Slot, { id, fallback }, children);\n};\n\nconst getSkipList = (\n shouldSkip: ShouldSkip | undefined,\n componentIds: readonly string[],\n route: RouteProps,\n cached: Record<string, RouteProps>\n): string[] => {\n const shouldSkipObj = Object.fromEntries(shouldSkip || []);\n return componentIds.filter((id) => {\n const prevProps = cached[id];\n if (!prevProps) {\n return false;\n }\n const shouldCheck = shouldSkipObj[id];\n if (!shouldCheck) {\n return false;\n }\n if (shouldCheck[0] && route.path !== prevProps.path) {\n return false;\n }\n if (shouldCheck[0] && route.query !== prevProps.query) {\n return false;\n }\n return true;\n });\n};\n\n// TODO revisit shouldSkip API\ntype ShouldSkip = (readonly [\n string,\n readonly [\n boolean, // if we compare path\n string[], // searchParams keys to compare\n ],\n])[];\n\n// Note: The router data must be a stable mutable object (array).\ntype RouterData = [\n shouldSkip?: ShouldSkip,\n locationListeners?: Set<(path: string, query: string) => void>,\n];\n\nconst DEFAULT_ROUTER_DATA: RouterData = [];\n\nexport function Router({ routerData = DEFAULT_ROUTER_DATA }) {\n const route = parseRoute(new URL(getHref()));\n const initialInput = getInputString(route.path);\n const initialParams = JSON.stringify({ query: route.query });\n const unstable_onFetchData = () => {};\n return createElement(\n Root as FunctionComponent<Omit<ComponentProps<typeof Root>, 'children'>>,\n { initialInput, initialParams, unstable_onFetchData },\n createElement(InnerRouter, { routerData })\n );\n}\n\nconst notAvailableInServer = (name: string) => () => {\n throw new Error(`${name} is not in the server`);\n};\n/**\n * ServerRouter for SSR\n * This is not a public API.\n */\nexport function ServerRouter({ children, route }: { children: ReactNode; route: RouteProps }) {\n return createElement(\n Fragment,\n null,\n createElement(\n RouterContext.Provider,\n {\n value: {\n route,\n changeRoute: notAvailableInServer('changeRoute'),\n prefetchRoute: notAvailableInServer('prefetchRoute'),\n },\n },\n children\n )\n );\n}\n\nexport type LinkProps = ClassicLinkProps & {\n href: string;\n // pending?: ReactNode;\n // notPending?: ReactNode;\n\n // unstable_prefetchOnEnter?: boolean;\n // unstable_prefetchOnView?: boolean;\n} & Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'>;\n\nexport const Link = forwardRef(ExpoRouterLink) as unknown as LinkComponent;\n\nLink.resolveHref = resolveHref;\n\nfunction ExpoRouterLink(\n {\n href,\n replace,\n push,\n // TODO: This does not prevent default on the anchor tag.\n relativeToDirectory,\n asChild,\n rel,\n target,\n download,\n // pending,\n // notPending,\n // unstable_prefetchOnEnter,\n // unstable_prefetchOnView,\n children,\n ...props\n }: LinkProps,\n ref: ForwardedRef<Text>\n) {\n // Mutate the style prop to add the className on web.\n const style = useInteropClassName(props);\n\n // If not passing asChild, we need to forward the props to the anchor tag using React Native Web's `hrefAttrs`.\n const hrefAttrs = useHrefAttrs({ asChild, rel, target, download });\n\n const resolvedHref = useMemo(() => {\n if (href == null) {\n throw new Error('Link: href is required');\n }\n return resolveHref(href);\n }, [href]);\n\n const router = useContext(RouterContext);\n const changeRoute = router\n ? router.changeRoute\n : () => {\n throw new Error('Missing Router');\n };\n const prefetchRoute = router\n ? router.prefetchRoute\n : () => {\n throw new Error('Missing Router');\n };\n // TODO: Implement support for pending states in the future.\n const [, startTransition] = useTransition();\n // const elementRef = useRef<HTMLAnchorElement>();\n\n // useEffect(() => {\n // if (unstable_prefetchOnView && process.env.EXPO_OS === 'web' && ref.current) {\n // const observer = new IntersectionObserver(\n // (entries) => {\n // entries.forEach((entry) => {\n // if (entry.isIntersecting) {\n // const url = new URL(resolvedHref, getHref());\n // if (router && url.href !== getHref()) {\n // const route = parseRoute(url);\n // router.prefetchRoute(route);\n // }\n // }\n // });\n // },\n // { threshold: 0.1 }\n // );\n\n // observer.observe(ref.current);\n\n // return () => {\n // observer.disconnect();\n // };\n // }\n // return () => {};\n // }, [unstable_prefetchOnView, router, resolvedHref]);\n\n const onClick = (event: MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n const url = new URL(resolvedHref, getHref());\n // TODO: Use in-memory route for native platforms.\n // if (url.href !== getHref()) {\n const route = parseRoute(url);\n prefetchRoute(route);\n startTransition(() => {\n getHistory().pushState(\n {\n ...getHistory().state,\n expo_new_path: url.pathname !== window.location.pathname,\n },\n '',\n url\n );\n changeRoute(route);\n });\n // }\n props.onClick?.(event);\n };\n // const onMouseEnter = unstable_prefetchOnEnter\n // ? (event: MouseEvent<HTMLAnchorElement>) => {\n // const url = new URL(to, getHref());\n // if (url.href !== getHref()) {\n // const route = parseRoute(url);\n // prefetchRoute(route);\n // }\n // props.onMouseEnter?.(event);\n // }\n // : props.onMouseEnter;\n\n const Element = asChild ? ReactSlot : Text;\n\n const ele = createElement(\n // @ts-expect-error\n Element,\n {\n ...hrefAttrs,\n ...props,\n style,\n href: resolvedHref,\n onPress: onClick,\n // onMouseEnter,\n ref,\n },\n children\n );\n // if (isPending && pending !== undefined) {\n // return createElement(Fragment, null, ele, pending);\n // }\n // if (!isPending && notPending !== undefined) {\n // return createElement(Fragment, null, ele, notPending);\n // }\n return ele;\n}\n"]}
@@ -7,7 +7,10 @@
7
7
  * LICENSE file in the root directory of this source tree.
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.LOCATION_ID = exports.SHOULD_SKIP_ID = exports.PARAM_KEY_SKIP = exports.parseInputString = exports.getInputString = exports.getComponentIds = void 0;
10
+ exports.LOCATION_ID = exports.SHOULD_SKIP_ID = exports.PARAM_KEY_SKIP = void 0;
11
+ exports.getComponentIds = getComponentIds;
12
+ exports.getInputString = getInputString;
13
+ exports.parseInputString = parseInputString;
11
14
  function getComponentIds(path) {
12
15
  const pathItems = path.split('/').filter(Boolean);
13
16
  const idSet = new Set();
@@ -18,18 +21,15 @@ function getComponentIds(path) {
18
21
  idSet.add([...pathItems, 'page'].join('/'));
19
22
  return Array.from(idSet);
20
23
  }
21
- exports.getComponentIds = getComponentIds;
22
24
  function getInputString(path) {
23
25
  if (!path.startsWith('/')) {
24
26
  throw new Error('Path should start with `/`');
25
27
  }
26
28
  return path.slice(1);
27
29
  }
28
- exports.getInputString = getInputString;
29
30
  function parseInputString(input) {
30
31
  return '/' + input;
31
32
  }
32
- exports.parseInputString = parseInputString;
33
33
  exports.PARAM_KEY_SKIP = 'expo_router_skip';
34
34
  // It starts with "/" to avoid conflicing with normal component ids.
35
35
  exports.SHOULD_SKIP_ID = '/SHOULD_SKIP';