expo-router 5.0.2-preview.0 → 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
@@ -9,7 +9,7 @@
9
9
  * From waku https://github.com/dai-shi/waku/blob/32d52242c1450b5f5965860e671ff73c42da8bd0/packages/waku/src/lib/renderers/rsc-renderer.ts
10
10
  */
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.renderRsc = void 0;
12
+ exports.renderRsc = renderRsc;
13
13
  // This file must remain platform agnostic for production exports.
14
14
  // Import the runtime to support polyfills for webpack to load modules in the server using Metro.
15
15
  require("@expo/metro-runtime/rsc/runtime");
@@ -148,7 +148,6 @@ async function renderRsc(args, opts) {
148
148
  // method === 'GET'
149
149
  return renderWithContext(context, input, decodedBody);
150
150
  }
151
- exports.renderRsc = renderRsc;
152
151
  // TODO is this correct? better to use a library?
153
152
  const parseFormData = (body, contentType) => {
154
153
  const boundary = contentType.split('boundary=')[1];
@@ -1 +1 @@
1
- {"version":3,"file":"rsc-renderer.js","sourceRoot":"","sources":["../../src/rsc/rsc-renderer.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,kEAAkE;AAElE,iGAAiG;AACjG,2CAAyC;AAGzC,4DAAsF;AAEtF,iCAA2C;AAC3C,0CAAgD;AAChD,qCAAgF;AAqCzE,KAAK,UAAU,SAAS,CAAC,IAAmB,EAAE,IAAmB;IACtE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC5D,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAE7C,MAAM,EACJ,OAAO,EAAE,EAAE,aAAa,EAAE;IAC1B,mBAAmB;IACnB,WAAW,GACZ,GAAG,OAAgF,CAAC;IAErF,SAAS,cAAc,CAAC,QAAiB,EAAE,SAAiB;QAC1D,MAAM;QACJ,+GAA+G;QAC/G,IAAI;QACJ,gDAAgD;QAChD,0EAA0E;QAC1E,IAAI,GAAG,EAAE,EACV,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAC;QAE7C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAA,wBAAiB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7E,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,EAAE,EAAE,QAAQ;YACZ,MAAM,EAAE;gBACN,uFAAuF;gBACvF,+HAA+H;gBAC/H,QAAQ,GAAG,QAAQ;aACpB;YACD,IAAI;YACJ,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,mJAAmJ;QACnJ,kDAAkD;QAClD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACxD,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzE,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,KAAK,CAC7B,EAAE,EACF;QACE,GAAG,CAAC,OAAO,EAAE,SAAiB;YAC5B,OAAO,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC;KACF,CACF,CAAC;IAEF,MAAM,YAAY,GAAG,IAAI,KAAK,CAC5B,EAAE,EACF;QACE,GAAG,CAAC,OAAO,EAAE,SAAiB;YAC5B,OAAO,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;KACF,CACF,CAAC;IAEF,sGAAsG;IACtG,MAAM,CAAC,GAAG,uBAAuB,mBAAmB,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC;IAEjF,MAAM,iBAAiB,GAAG,KAAK,EAC7B,OAA4C,EAC5C,KAAa,EACb,MAAe,EACf,EAAE;QACF,MAAM,WAAW,GAAG;YAClB,OAAO,EAAE,OAAO,IAAI,EAAE;YACtB,QAAQ,EAAE,GAAG,EAAE;gBACb,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACrC,CAAC;SACF,CAAC;QACF,OAAO,IAAA,2BAAkB,EAAC,WAAW,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE;gBAC1C,MAAM;gBACN,WAAW;aACZ,CAAC,CAAC;YACH,IAAI,QAAQ,KAAK,IAAI,EAAE;gBACrB,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,kCAAkC,GAAG,KAAK,CAAC,CAAC;gBACjE,GAAW,CAAC,UAAU,GAAG,GAAG,CAAC;gBAC9B,MAAM,GAAG,CAAC;aACX;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC5D,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;aAC3C;YACD,OAAO,IAAA,+BAAsB,EAAC,QAAQ,EAAE,aAAa,EAAE;gBACrD,OAAO;aACR,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,2BAA2B,GAAG,KAAK,EACvC,OAA4C,EAC5C,QAAyC,EACzC,UAAqB,EACrB,EAAE;QACF,IAAI,eAAe,GAAuC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9E,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,WAAW,GAAG;YAClB,OAAO,EAAE,OAAO,IAAI,EAAE;YACtB,QAAQ,EAAE,KAAK,EAAE,KAAa,EAAE,MAAgB,EAAE,EAAE;gBAClD,IAAI,QAAQ,EAAE;oBACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;iBACrC;gBACD,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC;oBAC5B,eAAe;oBACf,aAAa,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;iBAC9C,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;oBACvC,GAAG,WAAW;oBACd,0EAA0E;oBAC1E,GAAG,WAAW;iBACf,CAAC,CAAC,CAAC;YACN,CAAC;SACF,CAAC;QACF,OAAO,IAAA,2BAAkB,EAAC,WAAW,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,GAAG,UAAU,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC;YACvC,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC5D,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;aAC3C;YACD,OAAO,IAAA,+BAAsB,EAAC,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,aAAa,EAAE;gBACjF,OAAO;aACR,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,IAAI,WAAW,GAAwB,IAAI,CAAC,WAAW,CAAC;IACxD,IAAI,IAAI,EAAE;QACR,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE;YACpF,mDAAmD;YACnD,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACrD,WAAW,GAAG,MAAM,IAAA,oBAAW,EAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;SACzD;aAAM,IAAI,OAAO,EAAE;YAClB,WAAW,GAAG,MAAM,IAAA,oBAAW,EAAC,OAAO,EAAE,YAAY,CAAC,CAAC;SACxD;KACF;IAED,MAAM,QAAQ,GAAG,IAAA,sBAAc,EAAC,KAAK,CAAC,CAAC;IACvC,IAAI,QAAQ,EAAE;QACZ,IACE,CAAC,IAAI,CAAC,WAAW;YACjB,aAAa;YACb,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAC3C;YACA,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;SACnF;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3D,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QAEzC,2BAA2B;QAC3B,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE7F,iBAAiB;QACjB,MAAM,GAAG,GAAQ,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC9D,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;QAEhF,IAAI,CAAC,EAAE,EAAE;YACP,MAAM,IAAI,KAAK,CACb,iCAAiC,QAAQ,aAAa,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAC3F,CAAC;SACH;QAED,OAAO,2BAA2B,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;KACvD;IAED,mBAAmB;IACnB,OAAO,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;AACxD,CAAC;AAxKD,8BAwKC;AAED,iDAAiD;AACjD,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,WAAmB,EAAE,EAAE;IAC1D,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,KAAK,IAAI;YAAE,SAAS;QAClD,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,UAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAC9C,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE;YACrB,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,GAAG,CAAC,GAAI,CAAC,WAAW,EAAE,CAAC,GAAG,KAAM,CAAC;YACjC,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAA4B,CAC7B,CAAC;QACF,MAAM,kBAAkB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,kBAAmB,CAAC,CAAC;QAC7D,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,kBAAmB,CAAC,CAAC;QACrE,IAAI,SAAS,EAAE;YACb,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,aAAa,EAAE;gBACjB,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,0BAA0B,CAAC;gBACnE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,OAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5C,QAAQ,CAAC,MAAM,CAAC,IAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;aACxC;iBAAM;gBACL,QAAQ,CAAC,MAAM,CAAC,IAAK,EAAE,OAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;aACzC;SACF;KACF;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,KAAK,EAAE,MAAsB,EAAmB,EAAE;IACvE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,MAAyC,CAAC;IAC9C,GAAG;QACD,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,YAAY,UAAU,CAAC,EAAE;gBACzC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;aAC5C;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;SAC3D;KACF,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE;IACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,CAAC,CAAC","sourcesContent":["/**\n * Copyright © 2024 650 Industries.\n * Copyright © 2024 dai-shi.\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 * From waku https://github.com/dai-shi/waku/blob/32d52242c1450b5f5965860e671ff73c42da8bd0/packages/waku/src/lib/renderers/rsc-renderer.ts\n */\n\n// This file must remain platform agnostic for production exports.\n\n// Import the runtime to support polyfills for webpack to load modules in the server using Metro.\nimport '@expo/metro-runtime/rsc/runtime';\n\nimport type { ReactNode } from 'react';\nimport { renderToReadableStream, decodeReply } from 'react-server-dom-webpack/server';\n\nimport { fileURLToFilePath } from './path';\nimport { decodeActionId } from './router/utils';\nimport { runWithRenderStore, type EntriesDev, type EntriesPrd } from './server';\n\nexport interface RenderContext<T = unknown> {\n rerender: (input: string, searchParams?: URLSearchParams) => void;\n context: T;\n}\n\ntype ResolvedConfig = any;\n\nexport type RenderRscArgs = {\n // TODO:\n config: ResolvedConfig;\n\n // Done\n input: string;\n context: Record<string, unknown> | undefined;\n body?: ReadableStream | undefined;\n contentType?: string | undefined;\n decodedBody?: unknown;\n moduleIdCallback?: (module: {\n id: string;\n chunks: string[];\n name: string;\n async: boolean;\n }) => void;\n onError?: (err: unknown) => void;\n};\n\ntype ResolveClientEntry = (id: string, server: boolean) => { id: string; chunks: string[] };\n\ntype RenderRscOpts = {\n isExporting: boolean;\n entries: EntriesDev;\n resolveClientEntry: ResolveClientEntry;\n loadServerModuleRsc: (url: string) => Promise<any>;\n};\n\nexport async function renderRsc(args: RenderRscArgs, opts: RenderRscOpts): Promise<ReadableStream> {\n const { input, body, contentType, context, onError } = args;\n const { resolveClientEntry, entries } = opts;\n\n const {\n default: { renderEntries },\n // @ts-expect-error\n buildConfig,\n } = entries as (EntriesDev & { loadModule: never; buildConfig: never }) | EntriesPrd;\n\n function resolveRequest(isServer: boolean, encodedId: string) {\n const [\n // File is the on-disk location of the module, this is injected during the \"use client\" transformation (babel).\n file,\n // The name of the import (e.g. \"default\" or \"\")\n // This will be empty when using `module.exports = ` and `require('...')`.\n name = '',\n ] = encodedId.split('#') as [string, string];\n\n const filePath = file.startsWith('file://') ? fileURLToFilePath(file) : file;\n\n args.moduleIdCallback?.({\n id: filePath,\n chunks: [\n // TODO: Add a lookup later which reads from the SSR manifest to get the correct chunk.\n // NOTE(EvanBacon): This is a placeholder since we need to render RSC to get the client boundaries, which we then inject later.\n 'chunk:' + filePath,\n ],\n name,\n async: true,\n });\n // We'll augment the file path with the incoming RSC request which will forward the metro props required to make a cache hit, e.g. platform=web&...\n // This is similar to how we handle lazy bundling.\n const resolved = resolveClientEntry(filePath, isServer);\n return { id: resolved.id, chunks: resolved.chunks, name, async: true };\n }\n\n const bundlerConfig = new Proxy(\n {},\n {\n get(_target, encodedId: string) {\n return resolveRequest(false, encodedId);\n },\n }\n );\n\n const serverConfig = new Proxy(\n {},\n {\n get(_target, encodedId: string) {\n return resolveRequest(true, encodedId);\n },\n }\n );\n\n // @ts-ignore: Not part of global types. This is added to support server actions loading more actions.\n global[`${__METRO_GLOBAL_PREFIX__}__loadBundleAsync`] = opts.loadServerModuleRsc;\n\n const renderWithContext = async (\n context: Record<string, unknown> | undefined,\n input: string,\n params: unknown\n ) => {\n const renderStore = {\n context: context || {},\n rerender: () => {\n throw new Error('Cannot rerender');\n },\n };\n return runWithRenderStore(renderStore, async () => {\n const elements = await renderEntries(input, {\n params,\n buildConfig,\n });\n if (elements === null) {\n const err = new Error('No function component found at: ' + input);\n (err as any).statusCode = 404;\n throw err;\n }\n if (Object.keys(elements).some((key) => key.startsWith('_'))) {\n throw new Error('\"_\" prefix is reserved');\n }\n return renderToReadableStream(elements, bundlerConfig, {\n onError,\n });\n });\n };\n\n const renderWithContextWithAction = async (\n context: Record<string, unknown> | undefined,\n actionFn: (...args: unknown[]) => unknown,\n actionArgs: unknown[]\n ) => {\n let elementsPromise: Promise<Record<string, ReactNode>> = Promise.resolve({});\n let rendered = false;\n const renderStore = {\n context: context || {},\n rerender: async (input: string, params?: unknown) => {\n if (rendered) {\n throw new Error('already rendered');\n }\n elementsPromise = Promise.all([\n elementsPromise,\n renderEntries(input, { params, buildConfig }),\n ]).then(([oldElements, newElements]) => ({\n ...oldElements,\n // FIXME we should actually check if newElements is null and send an error\n ...newElements,\n }));\n },\n };\n return runWithRenderStore(renderStore, async () => {\n const actionValue = await actionFn(...actionArgs);\n const elements = await elementsPromise;\n rendered = true;\n if (Object.keys(elements).some((key) => key.startsWith('_'))) {\n throw new Error('\"_\" prefix is reserved');\n }\n return renderToReadableStream({ ...elements, _value: actionValue }, bundlerConfig, {\n onError,\n });\n });\n };\n\n let decodedBody: unknown | undefined = args.decodedBody;\n if (body) {\n const bodyStr = await streamToString(body);\n if (typeof contentType === 'string' && contentType.startsWith('multipart/form-data')) {\n // XXX This doesn't support streaming unlike busboy\n const formData = parseFormData(bodyStr, contentType);\n decodedBody = await decodeReply(formData, serverConfig);\n } else if (bodyStr) {\n decodedBody = await decodeReply(bodyStr, serverConfig);\n }\n }\n\n const actionId = decodeActionId(input);\n if (actionId) {\n if (\n !opts.isExporting &&\n // @ts-ignore\n !process.env.EXPO_UNSTABLE_SERVER_FUNCTIONS\n ) {\n throw new Error('Experimental support for React Server Functions is not enabled');\n }\n\n const args = Array.isArray(decodedBody) ? decodedBody : [];\n\n const chunkInfo = serverConfig[actionId];\n\n // Load module into memory.\n await Promise.all(chunkInfo.chunks.map((chunk) => globalThis.__webpack_chunk_load__(chunk)));\n\n // Import module.\n const mod: any = globalThis.__webpack_require__(chunkInfo.id);\n const fn = chunkInfo.name === '*' ? chunkInfo.name : mod[chunkInfo.name] || mod;\n\n if (!fn) {\n throw new Error(\n `Could not find server action: ${actionId}. Module: ${JSON.stringify(chunkInfo, null, 2)}`\n );\n }\n\n return renderWithContextWithAction(context, fn, args);\n }\n\n // method === 'GET'\n return renderWithContext(context, input, decodedBody);\n}\n\n// TODO is this correct? better to use a library?\nconst parseFormData = (body: string, contentType: string) => {\n const boundary = contentType.split('boundary=')[1];\n const parts = body.split(`--${boundary}`);\n const formData = new FormData();\n for (const part of parts) {\n if (part.trim() === '' || part === '--') continue;\n const [rawHeaders, content] = part.split('\\r\\n\\r\\n', 2);\n const headers = rawHeaders!.split('\\r\\n').reduce(\n (acc, currentHeader) => {\n const [key, value] = currentHeader.split(': ');\n acc[key!.toLowerCase()] = value!;\n return acc;\n },\n {} as Record<string, string>\n );\n const contentDisposition = headers['content-disposition'];\n const nameMatch = /name=\"([^\"]+)\"/.exec(contentDisposition!);\n const filenameMatch = /filename=\"([^\"]+)\"/.exec(contentDisposition!);\n if (nameMatch) {\n const name = nameMatch[1];\n if (filenameMatch) {\n const filename = filenameMatch[1];\n const type = headers['content-type'] || 'application/octet-stream';\n const blob = new Blob([content!], { type });\n formData.append(name!, blob, filename);\n } else {\n formData.append(name!, content!.trim());\n }\n }\n }\n return formData;\n};\n\nconst streamToString = async (stream: ReadableStream): Promise<string> => {\n const decoder = new TextDecoder();\n const reader = stream.getReader();\n const outs: string[] = [];\n let result: ReadableStreamReadResult<unknown>;\n do {\n result = await reader.read();\n if (result.value) {\n if (!(result.value instanceof Uint8Array)) {\n throw new Error('Unexepected buffer type');\n }\n outs.push(decoder.decode(result.value, { stream: true }));\n }\n } while (!result.done);\n outs.push(decoder.decode());\n return outs.join('');\n};\n"]}
1
+ {"version":3,"file":"rsc-renderer.js","sourceRoot":"","sources":["../../src/rsc/rsc-renderer.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAiDH,8BAwKC;AAvND,kEAAkE;AAElE,iGAAiG;AACjG,2CAAyC;AAGzC,4DAAsF;AAEtF,iCAA2C;AAC3C,0CAAgD;AAChD,qCAAgF;AAqCzE,KAAK,UAAU,SAAS,CAAC,IAAmB,EAAE,IAAmB;IACtE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC5D,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAE7C,MAAM,EACJ,OAAO,EAAE,EAAE,aAAa,EAAE;IAC1B,mBAAmB;IACnB,WAAW,GACZ,GAAG,OAAgF,CAAC;IAErF,SAAS,cAAc,CAAC,QAAiB,EAAE,SAAiB;QAC1D,MAAM;QACJ,+GAA+G;QAC/G,IAAI;QACJ,gDAAgD;QAChD,0EAA0E;QAC1E,IAAI,GAAG,EAAE,EACV,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAC;QAE7C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAA,wBAAiB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7E,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,EAAE,EAAE,QAAQ;YACZ,MAAM,EAAE;gBACN,uFAAuF;gBACvF,+HAA+H;gBAC/H,QAAQ,GAAG,QAAQ;aACpB;YACD,IAAI;YACJ,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,mJAAmJ;QACnJ,kDAAkD;QAClD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACxD,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzE,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,KAAK,CAC7B,EAAE,EACF;QACE,GAAG,CAAC,OAAO,EAAE,SAAiB;YAC5B,OAAO,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC;KACF,CACF,CAAC;IAEF,MAAM,YAAY,GAAG,IAAI,KAAK,CAC5B,EAAE,EACF;QACE,GAAG,CAAC,OAAO,EAAE,SAAiB;YAC5B,OAAO,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;KACF,CACF,CAAC;IAEF,sGAAsG;IACtG,MAAM,CAAC,GAAG,uBAAuB,mBAAmB,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC;IAEjF,MAAM,iBAAiB,GAAG,KAAK,EAC7B,OAA4C,EAC5C,KAAa,EACb,MAAe,EACf,EAAE;QACF,MAAM,WAAW,GAAG;YAClB,OAAO,EAAE,OAAO,IAAI,EAAE;YACtB,QAAQ,EAAE,GAAG,EAAE;gBACb,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACrC,CAAC;SACF,CAAC;QACF,OAAO,IAAA,2BAAkB,EAAC,WAAW,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE;gBAC1C,MAAM;gBACN,WAAW;aACZ,CAAC,CAAC;YACH,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,kCAAkC,GAAG,KAAK,CAAC,CAAC;gBACjE,GAAW,CAAC,UAAU,GAAG,GAAG,CAAC;gBAC9B,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC7D,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,IAAA,+BAAsB,EAAC,QAAQ,EAAE,aAAa,EAAE;gBACrD,OAAO;aACR,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,2BAA2B,GAAG,KAAK,EACvC,OAA4C,EAC5C,QAAyC,EACzC,UAAqB,EACrB,EAAE;QACF,IAAI,eAAe,GAAuC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9E,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,WAAW,GAAG;YAClB,OAAO,EAAE,OAAO,IAAI,EAAE;YACtB,QAAQ,EAAE,KAAK,EAAE,KAAa,EAAE,MAAgB,EAAE,EAAE;gBAClD,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBACtC,CAAC;gBACD,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC;oBAC5B,eAAe;oBACf,aAAa,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;iBAC9C,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;oBACvC,GAAG,WAAW;oBACd,0EAA0E;oBAC1E,GAAG,WAAW;iBACf,CAAC,CAAC,CAAC;YACN,CAAC;SACF,CAAC;QACF,OAAO,IAAA,2BAAkB,EAAC,WAAW,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,GAAG,UAAU,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC;YACvC,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC7D,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,IAAA,+BAAsB,EAAC,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,aAAa,EAAE;gBACjF,OAAO;aACR,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,IAAI,WAAW,GAAwB,IAAI,CAAC,WAAW,CAAC;IACxD,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACrF,mDAAmD;YACnD,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACrD,WAAW,GAAG,MAAM,IAAA,oBAAW,EAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC1D,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC;YACnB,WAAW,GAAG,MAAM,IAAA,oBAAW,EAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,sBAAc,EAAC,KAAK,CAAC,CAAC;IACvC,IAAI,QAAQ,EAAE,CAAC;QACb,IACE,CAAC,IAAI,CAAC,WAAW;YACjB,aAAa;YACb,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAC3C,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3D,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QAEzC,2BAA2B;QAC3B,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE7F,iBAAiB;QACjB,MAAM,GAAG,GAAQ,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC9D,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;QAEhF,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CACb,iCAAiC,QAAQ,aAAa,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAC3F,CAAC;QACJ,CAAC;QAED,OAAO,2BAA2B,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,mBAAmB;IACnB,OAAO,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;AACxD,CAAC;AAED,iDAAiD;AACjD,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,WAAmB,EAAE,EAAE;IAC1D,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,KAAK,IAAI;YAAE,SAAS;QAClD,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,UAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAC9C,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE;YACrB,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,GAAG,CAAC,GAAI,CAAC,WAAW,EAAE,CAAC,GAAG,KAAM,CAAC;YACjC,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAA4B,CAC7B,CAAC;QACF,MAAM,kBAAkB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,kBAAmB,CAAC,CAAC;QAC7D,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,kBAAmB,CAAC,CAAC;QACrE,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,0BAA0B,CAAC;gBACnE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,OAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5C,QAAQ,CAAC,MAAM,CAAC,IAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,MAAM,CAAC,IAAK,EAAE,OAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,KAAK,EAAE,MAAsB,EAAmB,EAAE;IACvE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,MAAyC,CAAC;IAC9C,GAAG,CAAC;QACF,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,YAAY,UAAU,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE;IACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,CAAC,CAAC","sourcesContent":["/**\n * Copyright © 2024 650 Industries.\n * Copyright © 2024 dai-shi.\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 * From waku https://github.com/dai-shi/waku/blob/32d52242c1450b5f5965860e671ff73c42da8bd0/packages/waku/src/lib/renderers/rsc-renderer.ts\n */\n\n// This file must remain platform agnostic for production exports.\n\n// Import the runtime to support polyfills for webpack to load modules in the server using Metro.\nimport '@expo/metro-runtime/rsc/runtime';\n\nimport type { ReactNode } from 'react';\nimport { renderToReadableStream, decodeReply } from 'react-server-dom-webpack/server';\n\nimport { fileURLToFilePath } from './path';\nimport { decodeActionId } from './router/utils';\nimport { runWithRenderStore, type EntriesDev, type EntriesPrd } from './server';\n\nexport interface RenderContext<T = unknown> {\n rerender: (input: string, searchParams?: URLSearchParams) => void;\n context: T;\n}\n\ntype ResolvedConfig = any;\n\nexport type RenderRscArgs = {\n // TODO:\n config: ResolvedConfig;\n\n // Done\n input: string;\n context: Record<string, unknown> | undefined;\n body?: ReadableStream | undefined;\n contentType?: string | undefined;\n decodedBody?: unknown;\n moduleIdCallback?: (module: {\n id: string;\n chunks: string[];\n name: string;\n async: boolean;\n }) => void;\n onError?: (err: unknown) => void;\n};\n\ntype ResolveClientEntry = (id: string, server: boolean) => { id: string; chunks: string[] };\n\ntype RenderRscOpts = {\n isExporting: boolean;\n entries: EntriesDev;\n resolveClientEntry: ResolveClientEntry;\n loadServerModuleRsc: (url: string) => Promise<any>;\n};\n\nexport async function renderRsc(args: RenderRscArgs, opts: RenderRscOpts): Promise<ReadableStream> {\n const { input, body, contentType, context, onError } = args;\n const { resolveClientEntry, entries } = opts;\n\n const {\n default: { renderEntries },\n // @ts-expect-error\n buildConfig,\n } = entries as (EntriesDev & { loadModule: never; buildConfig: never }) | EntriesPrd;\n\n function resolveRequest(isServer: boolean, encodedId: string) {\n const [\n // File is the on-disk location of the module, this is injected during the \"use client\" transformation (babel).\n file,\n // The name of the import (e.g. \"default\" or \"\")\n // This will be empty when using `module.exports = ` and `require('...')`.\n name = '',\n ] = encodedId.split('#') as [string, string];\n\n const filePath = file.startsWith('file://') ? fileURLToFilePath(file) : file;\n\n args.moduleIdCallback?.({\n id: filePath,\n chunks: [\n // TODO: Add a lookup later which reads from the SSR manifest to get the correct chunk.\n // NOTE(EvanBacon): This is a placeholder since we need to render RSC to get the client boundaries, which we then inject later.\n 'chunk:' + filePath,\n ],\n name,\n async: true,\n });\n // We'll augment the file path with the incoming RSC request which will forward the metro props required to make a cache hit, e.g. platform=web&...\n // This is similar to how we handle lazy bundling.\n const resolved = resolveClientEntry(filePath, isServer);\n return { id: resolved.id, chunks: resolved.chunks, name, async: true };\n }\n\n const bundlerConfig = new Proxy(\n {},\n {\n get(_target, encodedId: string) {\n return resolveRequest(false, encodedId);\n },\n }\n );\n\n const serverConfig = new Proxy(\n {},\n {\n get(_target, encodedId: string) {\n return resolveRequest(true, encodedId);\n },\n }\n );\n\n // @ts-ignore: Not part of global types. This is added to support server actions loading more actions.\n global[`${__METRO_GLOBAL_PREFIX__}__loadBundleAsync`] = opts.loadServerModuleRsc;\n\n const renderWithContext = async (\n context: Record<string, unknown> | undefined,\n input: string,\n params: unknown\n ) => {\n const renderStore = {\n context: context || {},\n rerender: () => {\n throw new Error('Cannot rerender');\n },\n };\n return runWithRenderStore(renderStore, async () => {\n const elements = await renderEntries(input, {\n params,\n buildConfig,\n });\n if (elements === null) {\n const err = new Error('No function component found at: ' + input);\n (err as any).statusCode = 404;\n throw err;\n }\n if (Object.keys(elements).some((key) => key.startsWith('_'))) {\n throw new Error('\"_\" prefix is reserved');\n }\n return renderToReadableStream(elements, bundlerConfig, {\n onError,\n });\n });\n };\n\n const renderWithContextWithAction = async (\n context: Record<string, unknown> | undefined,\n actionFn: (...args: unknown[]) => unknown,\n actionArgs: unknown[]\n ) => {\n let elementsPromise: Promise<Record<string, ReactNode>> = Promise.resolve({});\n let rendered = false;\n const renderStore = {\n context: context || {},\n rerender: async (input: string, params?: unknown) => {\n if (rendered) {\n throw new Error('already rendered');\n }\n elementsPromise = Promise.all([\n elementsPromise,\n renderEntries(input, { params, buildConfig }),\n ]).then(([oldElements, newElements]) => ({\n ...oldElements,\n // FIXME we should actually check if newElements is null and send an error\n ...newElements,\n }));\n },\n };\n return runWithRenderStore(renderStore, async () => {\n const actionValue = await actionFn(...actionArgs);\n const elements = await elementsPromise;\n rendered = true;\n if (Object.keys(elements).some((key) => key.startsWith('_'))) {\n throw new Error('\"_\" prefix is reserved');\n }\n return renderToReadableStream({ ...elements, _value: actionValue }, bundlerConfig, {\n onError,\n });\n });\n };\n\n let decodedBody: unknown | undefined = args.decodedBody;\n if (body) {\n const bodyStr = await streamToString(body);\n if (typeof contentType === 'string' && contentType.startsWith('multipart/form-data')) {\n // XXX This doesn't support streaming unlike busboy\n const formData = parseFormData(bodyStr, contentType);\n decodedBody = await decodeReply(formData, serverConfig);\n } else if (bodyStr) {\n decodedBody = await decodeReply(bodyStr, serverConfig);\n }\n }\n\n const actionId = decodeActionId(input);\n if (actionId) {\n if (\n !opts.isExporting &&\n // @ts-ignore\n !process.env.EXPO_UNSTABLE_SERVER_FUNCTIONS\n ) {\n throw new Error('Experimental support for React Server Functions is not enabled');\n }\n\n const args = Array.isArray(decodedBody) ? decodedBody : [];\n\n const chunkInfo = serverConfig[actionId];\n\n // Load module into memory.\n await Promise.all(chunkInfo.chunks.map((chunk) => globalThis.__webpack_chunk_load__(chunk)));\n\n // Import module.\n const mod: any = globalThis.__webpack_require__(chunkInfo.id);\n const fn = chunkInfo.name === '*' ? chunkInfo.name : mod[chunkInfo.name] || mod;\n\n if (!fn) {\n throw new Error(\n `Could not find server action: ${actionId}. Module: ${JSON.stringify(chunkInfo, null, 2)}`\n );\n }\n\n return renderWithContextWithAction(context, fn, args);\n }\n\n // method === 'GET'\n return renderWithContext(context, input, decodedBody);\n}\n\n// TODO is this correct? better to use a library?\nconst parseFormData = (body: string, contentType: string) => {\n const boundary = contentType.split('boundary=')[1];\n const parts = body.split(`--${boundary}`);\n const formData = new FormData();\n for (const part of parts) {\n if (part.trim() === '' || part === '--') continue;\n const [rawHeaders, content] = part.split('\\r\\n\\r\\n', 2);\n const headers = rawHeaders!.split('\\r\\n').reduce(\n (acc, currentHeader) => {\n const [key, value] = currentHeader.split(': ');\n acc[key!.toLowerCase()] = value!;\n return acc;\n },\n {} as Record<string, string>\n );\n const contentDisposition = headers['content-disposition'];\n const nameMatch = /name=\"([^\"]+)\"/.exec(contentDisposition!);\n const filenameMatch = /filename=\"([^\"]+)\"/.exec(contentDisposition!);\n if (nameMatch) {\n const name = nameMatch[1];\n if (filenameMatch) {\n const filename = filenameMatch[1];\n const type = headers['content-type'] || 'application/octet-stream';\n const blob = new Blob([content!], { type });\n formData.append(name!, blob, filename);\n } else {\n formData.append(name!, content!.trim());\n }\n }\n }\n return formData;\n};\n\nconst streamToString = async (stream: ReadableStream): Promise<string> => {\n const decoder = new TextDecoder();\n const reader = stream.getReader();\n const outs: string[] = [];\n let result: ReadableStreamReadResult<unknown>;\n do {\n result = await reader.read();\n if (result.value) {\n if (!(result.value instanceof Uint8Array)) {\n throw new Error('Unexepected buffer type');\n }\n outs.push(decoder.decode(result.value, { stream: true }));\n }\n } while (!result.done);\n outs.push(decoder.decode());\n return outs.join('');\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/rsc/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/rsc/server.ts"],"names":[],"mappings":"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"}
@@ -7,13 +7,16 @@
7
7
  * LICENSE file in the root directory of this source tree.
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.unstable_headers = exports.getContext = exports.rerender = exports.runWithRenderStore = exports.defineEntries = exports.REQUEST_HEADERS = void 0;
10
+ exports.runWithRenderStore = exports.REQUEST_HEADERS = void 0;
11
+ exports.defineEntries = defineEntries;
12
+ exports.rerender = rerender;
13
+ exports.getContext = getContext;
14
+ exports.unstable_headers = unstable_headers;
11
15
  const async_hooks_1 = require("async_hooks");
12
16
  exports.REQUEST_HEADERS = '__expo_requestHeaders';
13
17
  function defineEntries(renderEntries, getBuildConfig, getSsrConfig) {
14
18
  return { renderEntries, getBuildConfig, getSsrConfig };
15
19
  }
16
- exports.defineEntries = defineEntries;
17
20
  // TODO(EvanBacon): This can leak between platforms and runs.
18
21
  // We need to share this module between the server action module and the renderer module, per platform, and invalidate on refreshes.
19
22
  function getGlobalCacheForPlatform() {
@@ -59,7 +62,6 @@ async function rerender(input, params) {
59
62
  }
60
63
  renderStore.rerender(input, params);
61
64
  }
62
- exports.rerender = rerender;
63
65
  function getContext() {
64
66
  const renderStorage = getGlobalCacheForPlatform();
65
67
  const renderStore = renderStorage.getStore() ?? currentRenderStore;
@@ -68,13 +70,11 @@ function getContext() {
68
70
  }
69
71
  return renderStore.context;
70
72
  }
71
- exports.getContext = getContext;
72
73
  /** Get the request headers used to make the server component or action request. */
73
74
  async function unstable_headers() {
74
75
  const headers = (getContext()[exports.REQUEST_HEADERS] || {});
75
76
  return new ReadonlyHeaders(headers);
76
77
  }
77
- exports.unstable_headers = unstable_headers;
78
78
  class ReadonlyHeaders extends Headers {
79
79
  set() {
80
80
  throw new Error('Server component Headers are read-only');
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/rsc/server.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\nimport { AsyncLocalStorage } from 'async_hooks';\nimport type { ReactNode } from 'react';\n\nimport type { PathSpec } from './path';\n\nexport const REQUEST_HEADERS = '__expo_requestHeaders';\n\ndeclare let globalThis: {\n __EXPO_RSC_CACHE__?: Map<string, any>;\n __expo_platform_header?: string;\n __webpack_chunk_load__: (id: string) => Promise<any>;\n __webpack_require__: (id: string) => any;\n};\n\ntype Config = any;\n\ntype Elements = Record<string, ReactNode>;\n\nexport type BuildConfig = {\n pathname: string | PathSpec; // TODO drop support for string?\n isStatic?: boolean | undefined;\n entries?: {\n input: string;\n skipPrefetch?: boolean | undefined;\n isStatic?: boolean | undefined;\n }[];\n context?: Record<string, unknown>;\n customCode?: string; // optional code to inject TODO hope to remove this\n customData?: unknown; // should be serializable with JSON.stringify\n}[];\n\nexport type RenderEntries = (\n input: string,\n options: {\n params: unknown | undefined;\n buildConfig: BuildConfig | undefined;\n }\n) => Promise<Elements | null>;\n\nexport type GetBuildConfig = (\n unstable_collectClientModules: (input: string) => Promise<string[]>\n) => Promise<BuildConfig>;\n\nexport type GetSsrConfig = (\n pathname: string,\n options: {\n searchParams: URLSearchParams;\n buildConfig?: BuildConfig | undefined;\n }\n) => Promise<{\n input: string;\n searchParams?: URLSearchParams;\n html: ReactNode;\n} | null>;\n\nexport function defineEntries(\n renderEntries: RenderEntries,\n getBuildConfig?: GetBuildConfig,\n getSsrConfig?: GetSsrConfig\n) {\n return { renderEntries, getBuildConfig, getSsrConfig };\n}\n\nexport type EntriesDev = {\n default: ReturnType<typeof defineEntries>;\n};\n\nexport type EntriesPrd = EntriesDev & {\n loadConfig: () => Promise<Config>;\n loadModule: (id: string) => Promise<unknown>;\n dynamicHtmlPaths: [pathSpec: PathSpec, htmlHead: string][];\n publicIndexHtml: string;\n};\n\ntype RenderStore<> = {\n rerender: (input: string, params?: unknown) => void;\n context: Record<string, unknown>;\n};\n\n// TODO(EvanBacon): This can leak between platforms and runs.\n// We need to share this module between the server action module and the renderer module, per platform, and invalidate on refreshes.\nfunction getGlobalCacheForPlatform() {\n // HACK: This is a workaround for the shared middleware being shared between web and native.\n // In production the shared middleware is web-only and that causes the first version of this module\n // to be bound to web.\n const platform = globalThis.__expo_platform_header ?? process.env.EXPO_OS;\n if (!globalThis.__EXPO_RSC_CACHE__) {\n globalThis.__EXPO_RSC_CACHE__ = new Map();\n }\n\n if (globalThis.__EXPO_RSC_CACHE__.has(platform!)) {\n return globalThis.__EXPO_RSC_CACHE__.get(platform!)!;\n }\n\n const serverCache = new AsyncLocalStorage<RenderStore>();\n\n globalThis.__EXPO_RSC_CACHE__.set(platform!, serverCache);\n\n return serverCache;\n}\n\nlet previousRenderStore: RenderStore | undefined;\nlet currentRenderStore: RenderStore | undefined;\n\n/**\n * This is an internal function and not for public use.\n */\nexport const runWithRenderStore = <T>(renderStore: RenderStore, fn: () => T): T => {\n const renderStorage = getGlobalCacheForPlatform();\n if (renderStorage) {\n return renderStorage.run(renderStore, fn);\n }\n previousRenderStore = currentRenderStore;\n currentRenderStore = renderStore;\n try {\n return fn();\n } finally {\n currentRenderStore = previousRenderStore;\n }\n};\n\nexport async function rerender(input: string, params?: unknown) {\n const renderStorage = getGlobalCacheForPlatform();\n const renderStore = renderStorage.getStore() ?? currentRenderStore;\n if (!renderStore) {\n throw new Error('Render store is not available for rerender');\n }\n renderStore.rerender(input, params);\n}\n\nexport function getContext<\n RscContext extends Record<string, unknown> = Record<string, unknown>,\n>(): RscContext {\n const renderStorage = getGlobalCacheForPlatform();\n const renderStore = renderStorage.getStore() ?? currentRenderStore;\n if (!renderStore) {\n throw new Error('Render store is not available for accessing context');\n }\n return renderStore.context as RscContext;\n}\n\n/** Get the request headers used to make the server component or action request. */\nexport async function unstable_headers(): Promise<Headers> {\n const headers = (getContext()[REQUEST_HEADERS] || {}) as Record<string, string>;\n return new ReadonlyHeaders(headers);\n}\n\nclass ReadonlyHeaders extends Headers {\n set() {\n throw new Error('Server component Headers are read-only');\n }\n append() {\n throw new Error('Server component Headers are read-only');\n }\n delete() {\n throw new Error('Server component Headers are read-only');\n }\n}\n"]}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/rsc/server.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\nimport { AsyncLocalStorage } from 'async_hooks';\nimport type { ReactNode } from 'react';\n\nimport type { PathSpec } from './path';\n\nexport const REQUEST_HEADERS = '__expo_requestHeaders';\n\ndeclare let globalThis: {\n __EXPO_RSC_CACHE__?: Map<string, any>;\n __expo_platform_header?: string;\n __webpack_chunk_load__: (id: string) => Promise<any>;\n __webpack_require__: (id: string) => any;\n};\n\ntype Config = any;\n\ntype Elements = Record<string, ReactNode>;\n\nexport type BuildConfig = {\n pathname: string | PathSpec; // TODO drop support for string?\n isStatic?: boolean | undefined;\n entries?: {\n input: string;\n skipPrefetch?: boolean | undefined;\n isStatic?: boolean | undefined;\n }[];\n context?: Record<string, unknown>;\n customCode?: string; // optional code to inject TODO hope to remove this\n customData?: unknown; // should be serializable with JSON.stringify\n}[];\n\nexport type RenderEntries = (\n input: string,\n options: {\n params: unknown | undefined;\n buildConfig: BuildConfig | undefined;\n }\n) => Promise<Elements | null>;\n\nexport type GetBuildConfig = (\n unstable_collectClientModules: (input: string) => Promise<string[]>\n) => Promise<BuildConfig>;\n\nexport type GetSsrConfig = (\n pathname: string,\n options: {\n searchParams: URLSearchParams;\n buildConfig?: BuildConfig | undefined;\n }\n) => Promise<{\n input: string;\n searchParams?: URLSearchParams;\n html: ReactNode;\n} | null>;\n\nexport function defineEntries(\n renderEntries: RenderEntries,\n getBuildConfig?: GetBuildConfig,\n getSsrConfig?: GetSsrConfig\n) {\n return { renderEntries, getBuildConfig, getSsrConfig };\n}\n\nexport type EntriesDev = {\n default: ReturnType<typeof defineEntries>;\n};\n\nexport type EntriesPrd = EntriesDev & {\n loadConfig: () => Promise<Config>;\n loadModule: (id: string) => Promise<unknown>;\n dynamicHtmlPaths: [pathSpec: PathSpec, htmlHead: string][];\n publicIndexHtml: string;\n};\n\ntype RenderStore<> = {\n rerender: (input: string, params?: unknown) => void;\n context: Record<string, unknown>;\n};\n\n// TODO(EvanBacon): This can leak between platforms and runs.\n// We need to share this module between the server action module and the renderer module, per platform, and invalidate on refreshes.\nfunction getGlobalCacheForPlatform() {\n // HACK: This is a workaround for the shared middleware being shared between web and native.\n // In production the shared middleware is web-only and that causes the first version of this module\n // to be bound to web.\n const platform = globalThis.__expo_platform_header ?? process.env.EXPO_OS;\n if (!globalThis.__EXPO_RSC_CACHE__) {\n globalThis.__EXPO_RSC_CACHE__ = new Map();\n }\n\n if (globalThis.__EXPO_RSC_CACHE__.has(platform!)) {\n return globalThis.__EXPO_RSC_CACHE__.get(platform!)!;\n }\n\n const serverCache = new AsyncLocalStorage<RenderStore>();\n\n globalThis.__EXPO_RSC_CACHE__.set(platform!, serverCache);\n\n return serverCache;\n}\n\nlet previousRenderStore: RenderStore | undefined;\nlet currentRenderStore: RenderStore | undefined;\n\n/**\n * This is an internal function and not for public use.\n */\nexport const runWithRenderStore = <T>(renderStore: RenderStore, fn: () => T): T => {\n const renderStorage = getGlobalCacheForPlatform();\n if (renderStorage) {\n return renderStorage.run(renderStore, fn);\n }\n previousRenderStore = currentRenderStore;\n currentRenderStore = renderStore;\n try {\n return fn();\n } finally {\n currentRenderStore = previousRenderStore;\n }\n};\n\nexport async function rerender(input: string, params?: unknown) {\n const renderStorage = getGlobalCacheForPlatform();\n const renderStore = renderStorage.getStore() ?? currentRenderStore;\n if (!renderStore) {\n throw new Error('Render store is not available for rerender');\n }\n renderStore.rerender(input, params);\n}\n\nexport function getContext<\n RscContext extends Record<string, unknown> = Record<string, unknown>,\n>(): RscContext {\n const renderStorage = getGlobalCacheForPlatform();\n const renderStore = renderStorage.getStore() ?? currentRenderStore;\n if (!renderStore) {\n throw new Error('Render store is not available for accessing context');\n }\n return renderStore.context as RscContext;\n}\n\n/** Get the request headers used to make the server component or action request. */\nexport async function unstable_headers(): Promise<Headers> {\n const headers = (getContext()[REQUEST_HEADERS] || {}) as Record<string, string>;\n return new ReadonlyHeaders(headers);\n}\n\nclass ReadonlyHeaders extends Headers {\n set() {\n throw new Error('Server component Headers are read-only');\n }\n append() {\n throw new Error('Server component Headers are read-only');\n }\n delete() {\n throw new Error('Server component Headers are read-only');\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sortRoutes.d.ts","sourceRoot":"","sources":["../src/sortRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,SAAS,EAAE,MAAM,SAAS,CAAC;AAavD,wBAAgB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAgD7D;AAED,wBAAgB,qBAAqB,CAAC,gBAAgB,CAAC,EAAE,MAAM,OAClD,SAAS,KAAK,SAAS,KAAG,MAAM,CAW5C"}
1
+ {"version":3,"file":"sortRoutes.d.ts","sourceRoot":"","sources":["../src/sortRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,SAAS,EAAE,MAAM,SAAS,CAAC;AAavD,wBAAgB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAgD7D;AAED,wBAAgB,qBAAqB,CAAC,gBAAgB,CAAC,EAAE,MAAM,IACrD,GAAG,SAAS,EAAE,GAAG,SAAS,KAAG,MAAM,CAW5C"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sortRoutesWithInitial = exports.sortRoutes = void 0;
3
+ exports.sortRoutes = sortRoutes;
4
+ exports.sortRoutesWithInitial = sortRoutesWithInitial;
4
5
  const matchers_1 = require("./matchers");
5
6
  function sortDynamicConvention(a, b) {
6
7
  if (a.deep && !b.deep) {
@@ -54,7 +55,6 @@ function sortRoutes(a, b) {
54
55
  }
55
56
  return a.route.length - b.route.length;
56
57
  }
57
- exports.sortRoutes = sortRoutes;
58
58
  function sortRoutesWithInitial(initialRouteName) {
59
59
  return (a, b) => {
60
60
  if (initialRouteName) {
@@ -68,5 +68,4 @@ function sortRoutesWithInitial(initialRouteName) {
68
68
  return sortRoutes(a, b);
69
69
  };
70
70
  }
71
- exports.sortRoutesWithInitial = sortRoutesWithInitial;
72
71
  //# sourceMappingURL=sortRoutes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sortRoutes.js","sourceRoot":"","sources":["../src/sortRoutes.ts"],"names":[],"mappings":"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","sourcesContent":["import { DynamicConvention, RouteNode } from './Route';\nimport { matchGroupName } from './matchers';\n\nfunction sortDynamicConvention(a: DynamicConvention, b: DynamicConvention) {\n if (a.deep && !b.deep) {\n return 1;\n }\n if (!a.deep && b.deep) {\n return -1;\n }\n return 0;\n}\n\nexport function sortRoutes(a: RouteNode, b: RouteNode): number {\n if (a.dynamic && !b.dynamic) {\n return 1;\n }\n if (!a.dynamic && b.dynamic) {\n return -1;\n }\n if (a.dynamic && b.dynamic) {\n if (a.dynamic.length !== b.dynamic.length) {\n return b.dynamic.length - a.dynamic.length;\n }\n\n for (let i = 0; i < a.dynamic.length; i++) {\n const aDynamic = a.dynamic[i];\n const bDynamic = b.dynamic[i];\n\n if (aDynamic.notFound && bDynamic.notFound) {\n const s = sortDynamicConvention(aDynamic, bDynamic);\n if (s) {\n return s;\n }\n }\n if (aDynamic.notFound && !bDynamic.notFound) {\n return 1;\n }\n if (!aDynamic.notFound && bDynamic.notFound) {\n return -1;\n }\n\n const s = sortDynamicConvention(aDynamic, bDynamic);\n if (s) {\n return s;\n }\n }\n return 0;\n }\n\n const aIndex = a.route === 'index' || matchGroupName(a.route) != null;\n const bIndex = b.route === 'index' || matchGroupName(b.route) != null;\n\n if (aIndex && !bIndex) {\n return -1;\n }\n if (!aIndex && bIndex) {\n return 1;\n }\n\n return a.route.length - b.route.length;\n}\n\nexport function sortRoutesWithInitial(initialRouteName?: string) {\n return (a: RouteNode, b: RouteNode): number => {\n if (initialRouteName) {\n if (a.route === initialRouteName) {\n return -1;\n }\n if (b.route === initialRouteName) {\n return 1;\n }\n }\n return sortRoutes(a, b);\n };\n}\n"]}
1
+ {"version":3,"file":"sortRoutes.js","sourceRoot":"","sources":["../src/sortRoutes.ts"],"names":[],"mappings":"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","sourcesContent":["import { DynamicConvention, RouteNode } from './Route';\nimport { matchGroupName } from './matchers';\n\nfunction sortDynamicConvention(a: DynamicConvention, b: DynamicConvention) {\n if (a.deep && !b.deep) {\n return 1;\n }\n if (!a.deep && b.deep) {\n return -1;\n }\n return 0;\n}\n\nexport function sortRoutes(a: RouteNode, b: RouteNode): number {\n if (a.dynamic && !b.dynamic) {\n return 1;\n }\n if (!a.dynamic && b.dynamic) {\n return -1;\n }\n if (a.dynamic && b.dynamic) {\n if (a.dynamic.length !== b.dynamic.length) {\n return b.dynamic.length - a.dynamic.length;\n }\n\n for (let i = 0; i < a.dynamic.length; i++) {\n const aDynamic = a.dynamic[i];\n const bDynamic = b.dynamic[i];\n\n if (aDynamic.notFound && bDynamic.notFound) {\n const s = sortDynamicConvention(aDynamic, bDynamic);\n if (s) {\n return s;\n }\n }\n if (aDynamic.notFound && !bDynamic.notFound) {\n return 1;\n }\n if (!aDynamic.notFound && bDynamic.notFound) {\n return -1;\n }\n\n const s = sortDynamicConvention(aDynamic, bDynamic);\n if (s) {\n return s;\n }\n }\n return 0;\n }\n\n const aIndex = a.route === 'index' || matchGroupName(a.route) != null;\n const bIndex = b.route === 'index' || matchGroupName(b.route) != null;\n\n if (aIndex && !bIndex) {\n return -1;\n }\n if (!aIndex && bIndex) {\n return 1;\n }\n\n return a.route.length - b.route.length;\n}\n\nexport function sortRoutesWithInitial(initialRouteName?: string) {\n return (a: RouteNode, b: RouteNode): number => {\n if (initialRouteName) {\n if (a.route === initialRouteName) {\n return -1;\n }\n if (b.route === initialRouteName) {\n return 1;\n }\n }\n return sortRoutes(a, b);\n };\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getRootComponent = void 0;
3
+ exports.getRootComponent = getRootComponent;
4
4
  /**
5
5
  * Copyright © 2023 650 Industries.
6
6
  *
@@ -22,5 +22,4 @@ function getRootComponent() {
22
22
  }
23
23
  return exp.default;
24
24
  }
25
- exports.getRootComponent = getRootComponent;
26
25
  //# sourceMappingURL=getRootComponent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getRootComponent.js","sourceRoot":"","sources":["../../src/static/getRootComponent.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,+CAAqD;AAErD,SAAgB,gBAAgB;IAC9B,MAAM,IAAI,GAAG,eAAW,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAChB,OAAQ,OAAO,CAAC,QAAQ,CAA6B,CAAC,IAAI,CAAC;KAC5D;IACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,oDAAoD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACxF;IACD,MAAM,GAAG,GAAG,IAAA,eAAW,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC;KAC/F;IAED,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC;AAfD,4CAeC","sourcesContent":["/**\n * Copyright © 2023 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 */\nimport { ctx as rootContext } from '../../_ctx-html';\n\nexport function getRootComponent() {\n const keys = rootContext.keys();\n if (!keys.length) {\n return (require('./html') as typeof import('./html')).Html;\n }\n if (keys.length > 1) {\n throw new Error(`Multiple components match the root HTML element: ${keys.join(', ')}`);\n }\n const exp = rootContext(keys[0]);\n\n if (!exp.default) {\n throw new Error(`The root HTML element \"${keys[0]}\" is missing the required default export.`);\n }\n\n return exp.default;\n}\n"]}
1
+ {"version":3,"file":"getRootComponent.js","sourceRoot":"","sources":["../../src/static/getRootComponent.ts"],"names":[],"mappings":";;AAQA,4CAeC;AAvBD;;;;;GAKG;AACH,+CAAqD;AAErD,SAAgB,gBAAgB;IAC9B,MAAM,IAAI,GAAG,eAAW,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,OAAQ,OAAO,CAAC,QAAQ,CAA6B,CAAC,IAAI,CAAC;IAC7D,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,oDAAoD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,MAAM,GAAG,GAAG,IAAA,eAAW,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC;IAChG,CAAC;IAED,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC","sourcesContent":["/**\n * Copyright © 2023 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 */\nimport { ctx as rootContext } from '../../_ctx-html';\n\nexport function getRootComponent() {\n const keys = rootContext.keys();\n if (!keys.length) {\n return (require('./html') as typeof import('./html')).Html;\n }\n if (keys.length > 1) {\n throw new Error(`Multiple components match the root HTML element: ${keys.join(', ')}`);\n }\n const exp = rootContext(keys[0]);\n\n if (!exp.default) {\n throw new Error(`The root HTML element \"${keys[0]}\" is missing the required default export.`);\n }\n\n return exp.default;\n}\n"]}
@@ -6,7 +6,8 @@
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.getManifest = exports.getBuildTimeServerManifestAsync = void 0;
9
+ exports.getBuildTimeServerManifestAsync = getBuildTimeServerManifestAsync;
10
+ exports.getManifest = getManifest;
10
11
  const _ctx_1 = require("../../_ctx");
11
12
  const getReactNavigationConfig_1 = require("../getReactNavigationConfig");
12
13
  const getRoutes_1 = require("../getRoutes");
@@ -31,7 +32,6 @@ async function getBuildTimeServerManifestAsync(options = {}) {
31
32
  await (0, loadStaticParamsAsync_1.loadStaticParamsAsync)(routeTree);
32
33
  return (0, getServerManifest_1.getServerManifest)(routeTree);
33
34
  }
34
- exports.getBuildTimeServerManifestAsync = getBuildTimeServerManifestAsync;
35
35
  /** Get the linking manifest from a Node.js process. */
36
36
  async function getManifest(options = {}) {
37
37
  const routeTree = (0, getRoutes_1.getRoutes)(_ctx_1.ctx, {
@@ -47,5 +47,4 @@ async function getManifest(options = {}) {
47
47
  await (0, loadStaticParamsAsync_1.loadStaticParamsAsync)(routeTree);
48
48
  return (0, getReactNavigationConfig_1.getReactNavigationConfig)(routeTree, false);
49
49
  }
50
- exports.getManifest = getManifest;
51
50
  //# sourceMappingURL=getServerManifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getServerManifest.js","sourceRoot":"","sources":["../../src/static/getServerManifest.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,qCAAiC;AACjC,0EAAuE;AACvE,4CAAkD;AAClD,4DAAqF;AACrF,oEAAiE;AAEjE;;;;;;GAMG;AACI,KAAK,UAAU,+BAA+B,CACnD,UAAmB,EAAE;IAErB,MAAM,SAAS,GAAG,IAAA,qBAAS,EAAC,UAAG,EAAE;QAC/B,QAAQ,EAAE,KAAK;QACf,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,EAAE;QACd,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;KACpC;IAED,6BAA6B;IAC7B,MAAM,IAAA,6CAAqB,EAAC,SAAS,CAAC,CAAC;IAEvC,OAAO,IAAA,qCAAiB,EAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAhBD,0EAgBC;AAED,uDAAuD;AAChD,KAAK,UAAU,WAAW,CAAC,UAAmB,EAAE;IACrD,MAAM,SAAS,GAAG,IAAA,qBAAS,EAAC,UAAG,EAAE;QAC/B,iBAAiB,EAAE,IAAI;QACvB,2BAA2B,EAAE,IAAI;QACjC,QAAQ,EAAE,KAAK;QACf,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,EAAE;QACd,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;KACpC;IAED,6BAA6B;IAC7B,MAAM,IAAA,6CAAqB,EAAC,SAAS,CAAC,CAAC;IAEvC,OAAO,IAAA,mDAAwB,EAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACpD,CAAC;AAhBD,kCAgBC","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\nimport { ctx } from '../../_ctx';\nimport { getReactNavigationConfig } from '../getReactNavigationConfig';\nimport { getRoutes, Options } from '../getRoutes';\nimport { ExpoRouterServerManifestV1, getServerManifest } from '../getServerManifest';\nimport { loadStaticParamsAsync } from '../loadStaticParamsAsync';\n\n/**\n * Get the server manifest with all dynamic routes loaded with `generateStaticParams`.\n * Unlike the `expo-router/src/routes-manifest.ts` method, this requires loading the entire app in-memory, which\n * takes substantially longer and requires Metro bundling.\n *\n * This is used for the production manifest where we pre-render certain pages and should no longer treat them as dynamic.\n */\nexport async function getBuildTimeServerManifestAsync(\n options: Options = {}\n): Promise<ExpoRouterServerManifestV1> {\n const routeTree = getRoutes(ctx, {\n platform: 'web',\n ...options,\n });\n\n if (!routeTree) {\n throw new Error('No routes found');\n }\n\n // Evaluate all static params\n await loadStaticParamsAsync(routeTree);\n\n return getServerManifest(routeTree);\n}\n\n/** Get the linking manifest from a Node.js process. */\nexport async function getManifest(options: Options = {}) {\n const routeTree = getRoutes(ctx, {\n preserveApiRoutes: true,\n preserveRedirectAndRewrites: true,\n platform: 'web',\n ...options,\n });\n\n if (!routeTree) {\n throw new Error('No routes found');\n }\n\n // Evaluate all static params\n await loadStaticParamsAsync(routeTree);\n\n return getReactNavigationConfig(routeTree, false);\n}\n"]}
1
+ {"version":3,"file":"getServerManifest.js","sourceRoot":"","sources":["../../src/static/getServerManifest.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAeH,0EAgBC;AAGD,kCAgBC;AAhDD,qCAAiC;AACjC,0EAAuE;AACvE,4CAAkD;AAClD,4DAAqF;AACrF,oEAAiE;AAEjE;;;;;;GAMG;AACI,KAAK,UAAU,+BAA+B,CACnD,UAAmB,EAAE;IAErB,MAAM,SAAS,GAAG,IAAA,qBAAS,EAAC,UAAG,EAAE;QAC/B,QAAQ,EAAE,KAAK;QACf,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,6BAA6B;IAC7B,MAAM,IAAA,6CAAqB,EAAC,SAAS,CAAC,CAAC;IAEvC,OAAO,IAAA,qCAAiB,EAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAED,uDAAuD;AAChD,KAAK,UAAU,WAAW,CAAC,UAAmB,EAAE;IACrD,MAAM,SAAS,GAAG,IAAA,qBAAS,EAAC,UAAG,EAAE;QAC/B,iBAAiB,EAAE,IAAI;QACvB,2BAA2B,EAAE,IAAI;QACjC,QAAQ,EAAE,KAAK;QACf,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,6BAA6B;IAC7B,MAAM,IAAA,6CAAqB,EAAC,SAAS,CAAC,CAAC;IAEvC,OAAO,IAAA,mDAAwB,EAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACpD,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\nimport { ctx } from '../../_ctx';\nimport { getReactNavigationConfig } from '../getReactNavigationConfig';\nimport { getRoutes, Options } from '../getRoutes';\nimport { ExpoRouterServerManifestV1, getServerManifest } from '../getServerManifest';\nimport { loadStaticParamsAsync } from '../loadStaticParamsAsync';\n\n/**\n * Get the server manifest with all dynamic routes loaded with `generateStaticParams`.\n * Unlike the `expo-router/src/routes-manifest.ts` method, this requires loading the entire app in-memory, which\n * takes substantially longer and requires Metro bundling.\n *\n * This is used for the production manifest where we pre-render certain pages and should no longer treat them as dynamic.\n */\nexport async function getBuildTimeServerManifestAsync(\n options: Options = {}\n): Promise<ExpoRouterServerManifestV1> {\n const routeTree = getRoutes(ctx, {\n platform: 'web',\n ...options,\n });\n\n if (!routeTree) {\n throw new Error('No routes found');\n }\n\n // Evaluate all static params\n await loadStaticParamsAsync(routeTree);\n\n return getServerManifest(routeTree);\n}\n\n/** Get the linking manifest from a Node.js process. */\nexport async function getManifest(options: Options = {}) {\n const routeTree = getRoutes(ctx, {\n preserveApiRoutes: true,\n preserveRedirectAndRewrites: true,\n platform: 'web',\n ...options,\n });\n\n if (!routeTree) {\n throw new Error('No routes found');\n }\n\n // Evaluate all static params\n await loadStaticParamsAsync(routeTree);\n\n return getReactNavigationConfig(routeTree, false);\n}\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.Html = exports.ScrollViewStyleReset = void 0;
6
+ exports.ScrollViewStyleReset = ScrollViewStyleReset;
7
+ exports.Html = Html;
7
8
  /**
8
9
  * Copyright © 2023 650 Industries.
9
10
  *
@@ -19,7 +20,6 @@ function ScrollViewStyleReset() {
19
20
  __html: `#root,body,html{height:100%}body{overflow:hidden}#root{display:flex}`,
20
21
  }}/>);
21
22
  }
22
- exports.ScrollViewStyleReset = ScrollViewStyleReset;
23
23
  function Html({ children }) {
24
24
  return (<html lang="en">
25
25
  <head>
@@ -31,5 +31,4 @@ function Html({ children }) {
31
31
  <body>{children}</body>
32
32
  </html>);
33
33
  }
34
- exports.Html = Html;
35
34
  //# sourceMappingURL=html.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/static/html.tsx"],"names":[],"mappings":";;;;;;AAAA;;;;;GAKG;AACH,kDAAsD;AAEtD;;GAEG;AACH,SAAgB,oBAAoB;IAClC,OAAO,CACL,CAAC,KAAK,CACJ,EAAE,CAAC,YAAY,CACf,uBAAuB,CAAC,CAAC;YACvB,MAAM,EAAE,sEAAsE;SAC/E,CAAC,EACF,CACH,CAAC;AACJ,CAAC;AATD,oDASC;AAED,SAAgB,IAAI,CAAC,EAAE,QAAQ,EAAqB;IAClD,OAAO,CACL,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CACb;MAAA,CAAC,IAAI,CACH;QAAA,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EACrB;QAAA,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,EACnD;QAAA,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,uDAAuD,EACrF;QAAA,CAAC,oBAAoB,CAAC,AAAD,EACvB;MAAA,EAAE,IAAI,CACN;MAAA,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CACxB;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC;AAZD,oBAYC","sourcesContent":["/**\n * Copyright © 2023 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 */\nimport React, { type PropsWithChildren } from 'react';\n\n/**\n * Root style-reset for full-screen React Native web apps with a root `<ScrollView />` should use the following styles to ensure native parity. [Learn more](https://necolas.github.io/react-native-web/docs/setup/#root-element).\n */\nexport function ScrollViewStyleReset() {\n return (\n <style\n id=\"expo-reset\"\n dangerouslySetInnerHTML={{\n __html: `#root,body,html{height:100%}body{overflow:hidden}#root{display:flex}`,\n }}\n />\n );\n}\n\nexport function Html({ children }: PropsWithChildren) {\n return (\n <html lang=\"en\">\n <head>\n <meta charSet=\"utf-8\" />\n <meta httpEquiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\" />\n <ScrollViewStyleReset />\n </head>\n <body>{children}</body>\n </html>\n );\n}\n"]}
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/static/html.tsx"],"names":[],"mappings":";;;;;AAWA,oDASC;AAED,oBAYC;AAlCD;;;;;GAKG;AACH,kDAAsD;AAEtD;;GAEG;AACH,SAAgB,oBAAoB;IAClC,OAAO,CACL,CAAC,KAAK,CACJ,EAAE,CAAC,YAAY,CACf,uBAAuB,CAAC,CAAC;YACvB,MAAM,EAAE,sEAAsE;SAC/E,CAAC,EACF,CACH,CAAC;AACJ,CAAC;AAED,SAAgB,IAAI,CAAC,EAAE,QAAQ,EAAqB;IAClD,OAAO,CACL,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CACb;MAAA,CAAC,IAAI,CACH;QAAA,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EACrB;QAAA,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,EACnD;QAAA,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,uDAAuD,EACrF;QAAA,CAAC,oBAAoB,CAAC,AAAD,EACvB;MAAA,EAAE,IAAI,CACN;MAAA,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CACxB;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Copyright © 2023 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 */\nimport React, { type PropsWithChildren } from 'react';\n\n/**\n * Root style-reset for full-screen React Native web apps with a root `<ScrollView />` should use the following styles to ensure native parity. [Learn more](https://necolas.github.io/react-native-web/docs/setup/#root-element).\n */\nexport function ScrollViewStyleReset() {\n return (\n <style\n id=\"expo-reset\"\n dangerouslySetInnerHTML={{\n __html: `#root,body,html{height:100%}body{overflow:hidden}#root{display:flex}`,\n }}\n />\n );\n}\n\nexport function Html({ children }: PropsWithChildren) {\n return (\n <html lang=\"en\">\n <head>\n <meta charSet=\"utf-8\" />\n <meta httpEquiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\" />\n <ScrollViewStyleReset />\n </head>\n <body>{children}</body>\n </html>\n );\n}\n"]}
@@ -15,18 +15,29 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
37
  };
28
38
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.getManifest = exports.getBuildTimeServerManifestAsync = exports.getStaticContent = void 0;
39
+ exports.getManifest = exports.getBuildTimeServerManifestAsync = void 0;
40
+ exports.getStaticContent = getStaticContent;
30
41
  /**
31
42
  * Copyright © 2023 650 Industries.
32
43
  *
@@ -89,7 +100,6 @@ async function getStaticContent(location) {
89
100
  output = output.replace('</head>', `${fonts.join('')}</head>`);
90
101
  return '<!DOCTYPE html>' + output;
91
102
  }
92
- exports.getStaticContent = getStaticContent;
93
103
  function mixHeadComponentsWithStaticResults(helmet, html) {
94
104
  // Head components
95
105
  for (const key of ['title', 'priority', 'meta', 'link', 'script', 'style'].reverse()) {
@@ -1 +1 @@
1
- {"version":3,"file":"renderStaticContent.js","sourceRoot":"","sources":["../../src/static/renderStaticContent.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;GAKG;AACH,+BAA6B;AAE7B,qDAA+E;AAC/E,6DAA+C;AAC/C,kDAA0B;AAC1B,wEAAmD;AACnD,uDAA+C;AAE/C,yDAAsD;AACtD,qCAAiC;AACjC,0CAAuC;AACvC,kCAA+B;AAE/B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,iCAAiC,CAAC,CAAC;AAElE,8BAAW,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,mBAAQ,CAAC,CAAC;AAErD,SAAS,4BAA4B;IACnC,iDAAiD;IACjD,0JAA0J;IAE1J,8FAA8F;IAC9F,yJAAyJ;IACzJ,MAAM,QAAQ,GAAG,uCAAuC,CAAC;IACzD,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,EAA8B,CAAC;AAC3D,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,QAAa;IAClD,MAAM,WAAW,GAAqB,EAAE,CAAC;IAEzC,MAAM,GAAG,GAAG,eAAK,CAAC,SAAS,EAAsB,CAAC;IAElD,MAAM;IACJ,+DAA+D;IAC/D,kDAAkD;IAClD,OAAO,EACP,eAAe,GAChB,GAAG,8BAAW,CAAC,cAAc,CAAC,KAAK,EAAE;QACpC,YAAY,EAAE;YACZ,QAAQ;YACR,OAAO,EAAE,UAAG;YACZ,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CACzB,CAAC,IAAI,CACH;UAAA,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CAChC;QAAA,EAAE,IAAI,CAAC,CACR;SACF;KACF,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAA,mCAAgB,GAAE,CAAC;IAEhC,yGAAyG;IACzG,sGAAsG;IACtG,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAE1B,qEAAqE;IACrE,0HAA0H;IAC1H,4BAA4B,EAAE,CAAC;IAE/B,MAAM,IAAI,GAAG,MAAM,qBAAc,CAAC,cAAc,CAC9C,CAAC,WAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAClC;MAAA,CAAC,wBAAe,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,wBAAe,CACvD;IAAA,EAAE,WAAI,CAAC,QAAQ,CAAC,CACjB,CAAC;IAEF,+EAA+E;IAC/E,MAAM,GAAG,GAAG,qBAAc,CAAC,oBAAoB,CAAC,eAAe,EAAE,CAAC,CAAC;IAEnE,IAAI,MAAM,GAAG,kCAAkC,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE1E,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC;IAEpD,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACxC,KAAK,CAAC,iCAAiC,KAAK,CAAC,MAAM,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/D,qCAAqC;IACrC,4CAA4C;IAC5C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IAE/D,OAAO,iBAAiB,GAAG,MAAM,CAAC;AACpC,CAAC;AApDD,4CAoDC;AAED,SAAS,kCAAkC,CAAC,MAAW,EAAE,IAAY;IACnE,kBAAkB;IAClB,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACpF,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC;QACzC,IAAI,MAAM,EAAE;YACV,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;SAClD;KACF;IAED,aAAa;IACb,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7E,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAE7E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8BAA8B;AAC9B,yDAAmF;AAA1E,oIAAA,+BAA+B,OAAA;AAAE,gHAAA,WAAW,OAAA","sourcesContent":["/**\n * Copyright © 2023 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 */\nimport '@expo/metro-runtime';\n\nimport { ServerContainer, ServerContainerRef } from '@react-navigation/native';\nimport * as Font from 'expo-font/build/server';\nimport React from 'react';\nimport ReactDOMServer from 'react-dom/server.node';\nimport { AppRegistry } from 'react-native-web';\n\nimport { getRootComponent } from './getRootComponent';\nimport { ctx } from '../../_ctx';\nimport { ExpoRoot } from '../ExpoRoot';\nimport { Head } from '../head';\n\nconst debug = require('debug')('expo:router:renderStaticContent');\n\nAppRegistry.registerComponent('App', () => ExpoRoot);\n\nfunction resetReactNavigationContexts() {\n // https://github.com/expo/router/discussions/588\n // https://github.com/react-navigation/react-navigation/blob/9fe34b445fcb86e5666f61e144007d7540f014fa/packages/elements/src/getNamedContext.tsx#LL3C1-L4C1\n\n // React Navigation is storing providers in a global, this is fine for the first static render\n // but subsequent static renders of Stack or Tabs will cause React to throw a warning. To prevent this warning, we'll reset the globals before rendering.\n const contexts = '__react_navigation__elements_contexts';\n global[contexts] = new Map<string, React.Context<any>>();\n}\n\nexport async function getStaticContent(location: URL): Promise<string> {\n const headContext: { helmet?: any } = {};\n\n const ref = React.createRef<ServerContainerRef>();\n\n const {\n // NOTE: The `element` that's returned adds two extra Views and\n // the seemingly unused `RootTagContext.Provider`.\n element,\n getStyleElement,\n } = AppRegistry.getApplication('App', {\n initialProps: {\n location,\n context: ctx,\n wrapper: ({ children }) => (\n <Root>\n <div id=\"root\">{children}</div>\n </Root>\n ),\n },\n });\n\n const Root = getRootComponent();\n\n // Clear any existing static resources from the global scope to attempt to prevent leaking between pages.\n // This could break if pages are rendered in parallel or if fonts are loaded outside of the React tree\n Font.resetServerContext();\n\n // This MUST be run before `ReactDOMServer.renderToString` to prevent\n // \"Warning: Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported.\"\n resetReactNavigationContexts();\n\n const html = await ReactDOMServer.renderToString(\n <Head.Provider context={headContext}>\n <ServerContainer ref={ref}>{element}</ServerContainer>\n </Head.Provider>\n );\n\n // Eval the CSS after the HTML is rendered so that the CSS is in the same order\n const css = ReactDOMServer.renderToStaticMarkup(getStyleElement());\n\n let output = mixHeadComponentsWithStaticResults(headContext.helmet, html);\n\n output = output.replace('</head>', `${css}</head>`);\n\n const fonts = Font.getServerResources();\n debug(`Pushing static fonts: (count: ${fonts.length})`, fonts);\n // debug('Push static fonts:', fonts)\n // Inject static fonts loaded with expo-font\n output = output.replace('</head>', `${fonts.join('')}</head>`);\n\n return '<!DOCTYPE html>' + output;\n}\n\nfunction mixHeadComponentsWithStaticResults(helmet: any, html: string) {\n // Head components\n for (const key of ['title', 'priority', 'meta', 'link', 'script', 'style'].reverse()) {\n const result = helmet?.[key]?.toString();\n if (result) {\n html = html.replace('<head>', `<head>${result}`);\n }\n }\n\n // attributes\n html = html.replace('<html ', `<html ${helmet?.htmlAttributes.toString()} `);\n html = html.replace('<body ', `<body ${helmet?.bodyAttributes.toString()} `);\n\n return html;\n}\n\n// Re-export for use in server\nexport { getBuildTimeServerManifestAsync, getManifest } from './getServerManifest';\n"]}
1
+ {"version":3,"file":"renderStaticContent.js","sourceRoot":"","sources":["../../src/static/renderStaticContent.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright © 2023 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 */\nimport '@expo/metro-runtime';\n\nimport { ServerContainer, ServerContainerRef } from '@react-navigation/native';\nimport * as Font from 'expo-font/build/server';\nimport React from 'react';\nimport ReactDOMServer from 'react-dom/server.node';\nimport { AppRegistry } from 'react-native-web';\n\nimport { getRootComponent } from './getRootComponent';\nimport { ctx } from '../../_ctx';\nimport { ExpoRoot } from '../ExpoRoot';\nimport { Head } from '../head';\n\nconst debug = require('debug')('expo:router:renderStaticContent');\n\nAppRegistry.registerComponent('App', () => ExpoRoot);\n\nfunction resetReactNavigationContexts() {\n // https://github.com/expo/router/discussions/588\n // https://github.com/react-navigation/react-navigation/blob/9fe34b445fcb86e5666f61e144007d7540f014fa/packages/elements/src/getNamedContext.tsx#LL3C1-L4C1\n\n // React Navigation is storing providers in a global, this is fine for the first static render\n // but subsequent static renders of Stack or Tabs will cause React to throw a warning. To prevent this warning, we'll reset the globals before rendering.\n const contexts = '__react_navigation__elements_contexts';\n global[contexts] = new Map<string, React.Context<any>>();\n}\n\nexport async function getStaticContent(location: URL): Promise<string> {\n const headContext: { helmet?: any } = {};\n\n const ref = React.createRef<ServerContainerRef>();\n\n const {\n // NOTE: The `element` that's returned adds two extra Views and\n // the seemingly unused `RootTagContext.Provider`.\n element,\n getStyleElement,\n } = AppRegistry.getApplication('App', {\n initialProps: {\n location,\n context: ctx,\n wrapper: ({ children }) => (\n <Root>\n <div id=\"root\">{children}</div>\n </Root>\n ),\n },\n });\n\n const Root = getRootComponent();\n\n // Clear any existing static resources from the global scope to attempt to prevent leaking between pages.\n // This could break if pages are rendered in parallel or if fonts are loaded outside of the React tree\n Font.resetServerContext();\n\n // This MUST be run before `ReactDOMServer.renderToString` to prevent\n // \"Warning: Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported.\"\n resetReactNavigationContexts();\n\n const html = await ReactDOMServer.renderToString(\n <Head.Provider context={headContext}>\n <ServerContainer ref={ref}>{element}</ServerContainer>\n </Head.Provider>\n );\n\n // Eval the CSS after the HTML is rendered so that the CSS is in the same order\n const css = ReactDOMServer.renderToStaticMarkup(getStyleElement());\n\n let output = mixHeadComponentsWithStaticResults(headContext.helmet, html);\n\n output = output.replace('</head>', `${css}</head>`);\n\n const fonts = Font.getServerResources();\n debug(`Pushing static fonts: (count: ${fonts.length})`, fonts);\n // debug('Push static fonts:', fonts)\n // Inject static fonts loaded with expo-font\n output = output.replace('</head>', `${fonts.join('')}</head>`);\n\n return '<!DOCTYPE html>' + output;\n}\n\nfunction mixHeadComponentsWithStaticResults(helmet: any, html: string) {\n // Head components\n for (const key of ['title', 'priority', 'meta', 'link', 'script', 'style'].reverse()) {\n const result = helmet?.[key]?.toString();\n if (result) {\n html = html.replace('<head>', `<head>${result}`);\n }\n }\n\n // attributes\n html = html.replace('<html ', `<html ${helmet?.htmlAttributes.toString()} `);\n html = html.replace('<body ', `<body ${helmet?.bodyAttributes.toString()} `);\n\n return html;\n}\n\n// Re-export for use in server\nexport { getBuildTimeServerManifestAsync, getManifest } from './getServerManifest';\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import requireContext from './require-context-ponyfill';
3
2
  import { NativeIntent } from '../types';
4
3
  export type ReactComponent = () => React.ReactElement<any, any> | null;
@@ -13,7 +12,7 @@ export type MemoryContext = Record<string, FileStub | NativeIntentStub> & {
13
12
  export { requireContext };
14
13
  export declare function inMemoryContext(context: MemoryContext): ((id: string) => NativeIntent | ReactComponent | (Record<string, unknown> & {
15
14
  default: ReactComponent;
16
- unstable_settings?: Record<string, any> | undefined;
15
+ unstable_settings?: Record<string, any>;
17
16
  }) | {
18
17
  default: NativeIntent | FileStub;
19
18
  }) & {
@@ -1 +1 @@
1
- {"version":3,"file":"context-stubs.d.ts","sourceRoot":"","sources":["../../src/testing-library/context-stubs.ts"],"names":[],"mappings":";AAEA,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;AACvE,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAC5C,MAAM,MAAM,QAAQ,GAChB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACzB,OAAO,EAAE,cAAc,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACzC,CAAC,GACF,cAAc,CAAC;AAEnB,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,gBAAgB,CAAC,GAAG;IACxE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC;AAI1B,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,SAEpC,MAAM;;;;;;mBAKH,MAAM;;;EAa1B;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,SAI/D,MAAM;;mBAUH,MAAM;;EAI1B"}
1
+ {"version":3,"file":"context-stubs.d.ts","sourceRoot":"","sources":["../../src/testing-library/context-stubs.ts"],"names":[],"mappings":"AAEA,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;AACvE,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAC5C,MAAM,MAAM,QAAQ,GAChB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACzB,OAAO,EAAE,cAAc,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACzC,CAAC,GACF,cAAc,CAAC;AAEnB,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,gBAAgB,CAAC,GAAG;IACxE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC;AAI1B,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,SAEpC,MAAM;aAfT,cAAc;wBACH,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;;;mBAmBxB,MAAM;;;EAa1B;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,SAI/D,MAAM;;mBAUH,MAAM;;EAI1B"}
@@ -3,7 +3,9 @@ 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.requireContextWithOverrides = exports.inMemoryContext = exports.requireContext = void 0;
6
+ exports.requireContext = void 0;
7
+ exports.inMemoryContext = inMemoryContext;
8
+ exports.requireContextWithOverrides = requireContextWithOverrides;
7
9
  const path_1 = __importDefault(require("path"));
8
10
  const require_context_ponyfill_1 = __importDefault(require("./require-context-ponyfill"));
9
11
  exports.requireContext = require_context_ponyfill_1.default;
@@ -24,7 +26,6 @@ function inMemoryContext(context) {
24
26
  }),
25
27
  });
26
28
  }
27
- exports.inMemoryContext = inMemoryContext;
28
29
  function requireContextWithOverrides(dir, overrides) {
29
30
  const existingContext = (0, require_context_ponyfill_1.default)(path_1.default.resolve(process.cwd(), dir));
30
31
  return Object.assign(function (id) {
@@ -41,5 +42,4 @@ function requireContextWithOverrides(dir, overrides) {
41
42
  id: '0',
42
43
  });
43
44
  }
44
- exports.requireContextWithOverrides = requireContextWithOverrides;
45
45
  //# sourceMappingURL=context-stubs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-stubs.js","sourceRoot":"","sources":["../../src/testing-library/context-stubs.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,0FAAwD;AAgB/C,yBAhBF,kCAAc,CAgBE;AAEvB,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAEvD,SAAgB,eAAe,CAAC,OAAsB;IACpD,OAAO,MAAM,CAAC,MAAM,CAClB,UAAU,EAAU;QAClB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnD,OAAO,OAAO,OAAO,CAAC,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC,EACD;QACE,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QAC7B,EAAE,EAAE,GAAG;QACP,IAAI,EAAE,GAAG,EAAE,CACT,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/B,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC/B,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC7C,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC;YAExD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;KACL,CACF,CAAC;AACJ,CAAC;AApBD,0CAoBC;AAED,SAAgB,2BAA2B,CAAC,GAAW,EAAE,SAAwB;IAC/E,MAAM,eAAe,GAAG,IAAA,kCAAc,EAAC,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAEzE,OAAO,MAAM,CAAC,MAAM,CAClB,UAAU,EAAU;QAClB,IAAI,EAAE,IAAI,SAAS,EAAE;YACnB,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;YAC5B,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;SACjE;aAAM;YACL,OAAO,eAAe,CAAC,EAAE,CAAC,CAAC;SAC5B;IACH,CAAC,EACD;QACE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;QAClE,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QAC7B,EAAE,EAAE,GAAG;KACR,CACF,CAAC;AACJ,CAAC;AAlBD,kEAkBC","sourcesContent":["import path from 'path';\n\nimport requireContext from './require-context-ponyfill';\nimport { NativeIntent } from '../types';\n\nexport type ReactComponent = () => React.ReactElement<any, any> | null;\nexport type NativeIntentStub = NativeIntent;\nexport type FileStub =\n | (Record<string, unknown> & {\n default: ReactComponent;\n unstable_settings?: Record<string, any>;\n })\n | ReactComponent;\n\nexport type MemoryContext = Record<string, FileStub | NativeIntentStub> & {\n '+native-intent'?: NativeIntentStub;\n};\n\nexport { requireContext };\n\nconst validExtensions = ['.js', '.jsx', '.ts', '.tsx'];\n\nexport function inMemoryContext(context: MemoryContext) {\n return Object.assign(\n function (id: string) {\n id = id.replace(/^\\.\\//, '').replace(/\\.\\w*$/, '');\n return typeof context[id] === 'function' ? { default: context[id] } : context[id];\n },\n {\n resolve: (key: string) => key,\n id: '0',\n keys: () =>\n Object.keys(context).map((key) => {\n const ext = path.extname(key);\n key = key.replace(/^\\.\\//, '');\n key = key.startsWith('/') ? key : `./${key}`;\n key = validExtensions.includes(ext) ? key : `${key}.js`;\n\n return key;\n }),\n }\n );\n}\n\nexport function requireContextWithOverrides(dir: string, overrides: MemoryContext) {\n const existingContext = requireContext(path.resolve(process.cwd(), dir));\n\n return Object.assign(\n function (id: string) {\n if (id in overrides) {\n const route = overrides[id];\n return typeof route === 'function' ? { default: route } : route;\n } else {\n return existingContext(id);\n }\n },\n {\n keys: () => [...Object.keys(overrides), ...existingContext.keys()],\n resolve: (key: string) => key,\n id: '0',\n }\n );\n}\n"]}
1
+ {"version":3,"file":"context-stubs.js","sourceRoot":"","sources":["../../src/testing-library/context-stubs.ts"],"names":[],"mappings":";;;;;;AAsBA,0CAoBC;AAED,kEAkBC;AA9DD,gDAAwB;AAExB,0FAAwD;AAgB/C,yBAhBF,kCAAc,CAgBE;AAEvB,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAEvD,SAAgB,eAAe,CAAC,OAAsB;IACpD,OAAO,MAAM,CAAC,MAAM,CAClB,UAAU,EAAU;QAClB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnD,OAAO,OAAO,OAAO,CAAC,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC,EACD;QACE,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QAC7B,EAAE,EAAE,GAAG;QACP,IAAI,EAAE,GAAG,EAAE,CACT,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/B,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC/B,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC7C,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC;YAExD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;KACL,CACF,CAAC;AACJ,CAAC;AAED,SAAgB,2BAA2B,CAAC,GAAW,EAAE,SAAwB;IAC/E,MAAM,eAAe,GAAG,IAAA,kCAAc,EAAC,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAEzE,OAAO,MAAM,CAAC,MAAM,CAClB,UAAU,EAAU;QAClB,IAAI,EAAE,IAAI,SAAS,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;YAC5B,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,OAAO,eAAe,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,EACD;QACE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;QAClE,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;QAC7B,EAAE,EAAE,GAAG;KACR,CACF,CAAC;AACJ,CAAC","sourcesContent":["import path from 'path';\n\nimport requireContext from './require-context-ponyfill';\nimport { NativeIntent } from '../types';\n\nexport type ReactComponent = () => React.ReactElement<any, any> | null;\nexport type NativeIntentStub = NativeIntent;\nexport type FileStub =\n | (Record<string, unknown> & {\n default: ReactComponent;\n unstable_settings?: Record<string, any>;\n })\n | ReactComponent;\n\nexport type MemoryContext = Record<string, FileStub | NativeIntentStub> & {\n '+native-intent'?: NativeIntentStub;\n};\n\nexport { requireContext };\n\nconst validExtensions = ['.js', '.jsx', '.ts', '.tsx'];\n\nexport function inMemoryContext(context: MemoryContext) {\n return Object.assign(\n function (id: string) {\n id = id.replace(/^\\.\\//, '').replace(/\\.\\w*$/, '');\n return typeof context[id] === 'function' ? { default: context[id] } : context[id];\n },\n {\n resolve: (key: string) => key,\n id: '0',\n keys: () =>\n Object.keys(context).map((key) => {\n const ext = path.extname(key);\n key = key.replace(/^\\.\\//, '');\n key = key.startsWith('/') ? key : `./${key}`;\n key = validExtensions.includes(ext) ? key : `${key}.js`;\n\n return key;\n }),\n }\n );\n}\n\nexport function requireContextWithOverrides(dir: string, overrides: MemoryContext) {\n const existingContext = requireContext(path.resolve(process.cwd(), dir));\n\n return Object.assign(\n function (id: string) {\n if (id in overrides) {\n const route = overrides[id];\n return typeof route === 'function' ? { default: route } : route;\n } else {\n return existingContext(id);\n }\n },\n {\n keys: () => [...Object.keys(overrides), ...existingContext.keys()],\n resolve: (key: string) => key,\n id: '0',\n }\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing-library/index.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,CAAC;AAClB,OAAO,SAAS,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAO,MAAM,EAAwB,MAAM,+BAA+B,CAAC;AAGlF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAKzD,cAAc,+BAA+B,CAAC;AAM9C,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG;IAC/D,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACvC,CAAC;AAEF,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,GAAG;IACxC,WAAW,IAAI,MAAM,CAAC;IACtB,qBAAqB,IAAI,MAAM,CAAC;IAChC,WAAW,IAAI,MAAM,EAAE,CAAC;IACxB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IACrD,cAAc,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;CAC5D,CAAC;AAEF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,IAAI,CAAC;QACb,UAAU,QAAQ,CAAC,CAAC;YAClB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;YACpC,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;YAC9C,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YACtC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;YACjE,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;SACtD;KACF;CACF;AAED,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;AAE5D,wBAAgB,YAAY,CAC1B,OAAO,GAAE,iBAA2B,EACpC,EAAE,UAAgB,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAE,mBAAwB,GAClE,MAAM,CAqCR;AAED,eAAO,MAAM,UAAU;IACrB,yDAAyD;mBAC1C,MAAM;IAIrB,yDAAyD;eAC9C,MAAM;IAIjB,6DAA6D;kBAC/C,MAAM;IAIpB,oDAAoD;gBACxC,MAAM;IAOlB,qEAAqE;;IAIrE,wEAAwE;sBACtD,OAAO,MAAM,EAAE,MAAM,CAAC,SAAS,MAAM;IAMvD,qEAAqE;;CAItE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing-library/index.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,CAAC;AAClB,OAAO,SAAS,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAO,MAAM,EAAwB,MAAM,+BAA+B,CAAC;AAGlF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAKzD,cAAc,+BAA+B,CAAC;AAM9C,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG;IAC/D,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACvC,CAAC;AAEF,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,GAAG;IACxC,WAAW,IAAI,MAAM,CAAC;IACtB,qBAAqB,IAAI,MAAM,CAAC;IAChC,WAAW,IAAI,MAAM,EAAE,CAAC;IACxB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IACrD,cAAc,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;CAC5D,CAAC;AAEF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,IAAI,CAAC;QACb,UAAU,QAAQ,CAAC,CAAC;YAClB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;YACpC,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;YAC9C,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YACtC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;YACjE,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;SACtD;KACF;CACF;AAED,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;AAE5D,wBAAgB,YAAY,CAC1B,OAAO,GAAE,iBAA2B,EACpC,EAAE,UAAgB,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAE,mBAAwB,GAClE,MAAM,CAqCR;AAED,eAAO,MAAM,UAAU;IACrB,yDAAyD;mBAC1C,MAAM;IAIrB,yDAAyD;eAC9C,MAAM;IAIjB,6DAA6D;kBAC/C,MAAM;IAIpB,oDAAoD;gBACxC,MAAM;IAOlB,qEAAqE;;IAIrE,wEAAwE;sBACtD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,MAAM;IAMvD,qEAAqE;;CAItE,CAAC"}
@@ -17,7 +17,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.testRouter = exports.renderRouter = exports.getMockContext = exports.getMockConfig = void 0;
20
+ exports.testRouter = exports.getMockContext = exports.getMockConfig = void 0;
21
+ exports.renderRouter = renderRouter;
21
22
  require("./expect");
22
23
  require("./mocks");
23
24
  const react_native_1 = require("@testing-library/react-native");
@@ -64,7 +65,6 @@ function renderRouter(context = './app', { initialUrl = '/', linking, ...options
64
65
  },
65
66
  });
66
67
  }
67
- exports.renderRouter = renderRouter;
68
68
  exports.testRouter = {
69
69
  /** Navigate to the provided pathname and the pathname */
70
70
  navigate(path) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing-library/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,oBAAkB;AAClB,mBAAiB;AAGjB,gEAAkF;AAClF,kDAA0B;AAE1B,+CAAiF;AAuCrD,8FAvCA,2BAAa,OAuCA;AAAE,+FAvCA,4BAAc,OAuCA;AAtCzD,0CAAuC;AACvC,+DAA4D;AAE5D,+DAAqD;AACrD,sDAA2C;AAE3C,uBAAuB;AACvB,gEAA8C;AAE9C,QAAQ,CAAC,GAAG,EAAE;IACZ,oBAAK,CAAC,OAAO,EAAE,CAAC;AAClB,CAAC,CAAC,CAAC;AA6BH,SAAgB,YAAY,CAC1B,UAA6B,OAAO,EACpC,EAAE,UAAU,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,KAA0B,EAAE;IAEnE,IAAI,CAAC,aAAa,EAAE,CAAC;IAErB,MAAM,WAAW,GAAG,IAAA,4BAAc,EAAC,OAAO,CAAC,CAAC;IAE5C,qCAAqC;IACrC,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,MAAM,CAAC;IAE7C,MAAM,MAAM,GAAG,IAAA,qBAAM,EACnB,CAAC,mBAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAG,EAC1E,OAAO,CACR,CAAC;IAEF;;;;OAIG;IACH,oBAAK,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAE9D,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;QAC3B,WAAW;YACT,OAAO,oBAAK,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QAC5C,CAAC;QACD,WAAW;YACT,OAAO,oBAAK,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QAC5C,CAAC;QACD,eAAe;YACb,OAAO,oBAAK,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC;QAC1C,CAAC;QACD,qBAAqB;YACnB,OAAO,IAAA,mCAAgB,EAAC,oBAAK,CAAC,SAAU,EAAE,oBAAK,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC;QACnE,CAAC;QACD,cAAc;YACZ,OAAO,oBAAK,CAAC,iBAAiB,EAAE,CAAC;QACnC,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAxCD,oCAwCC;AAEY,QAAA,UAAU,GAAG;IACxB,yDAAyD;IACzD,QAAQ,CAAC,IAAY;QACnB,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,yDAAyD;IACzD,IAAI,CAAC,IAAY;QACf,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,6DAA6D;IAC7D,OAAO,CAAC,IAAY;QAClB,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,oDAAoD;IACpD,IAAI,CAAC,IAAa;QAChB,MAAM,CAAC,uBAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,IAAI,IAAI,EAAE;YACR,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;SAC/C;IACH,CAAC;IACD,qEAAqE;IACrE,SAAS;QACP,OAAO,uBAAM,CAAC,SAAS,EAAE,CAAC;IAC5B,CAAC;IACD,wEAAwE;IACxE,SAAS,CAAC,MAA8B,EAAE,IAAa;QACrD,uBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,IAAI,EAAE;YACR,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;SAC/C;IACH,CAAC;IACD,qEAAqE;IACrE,UAAU;QACR,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACjC,CAAC;CACF,CAAC","sourcesContent":["import './expect';\nimport './mocks';\n\nimport { NavigationState, PartialState } from '@react-navigation/native';\nimport { act, render, RenderResult, screen } from '@testing-library/react-native';\nimport React from 'react';\n\nimport { MockContextConfig, getMockConfig, getMockContext } from './mock-config';\nimport { ExpoRoot } from '../ExpoRoot';\nimport { getPathFromState } from '../fork/getPathFromState';\nimport { ExpoLinkingOptions } from '../getLinkingConfig';\nimport { store } from '../global-state/router-store';\nimport { router } from '../imperative-api';\n\n// re-export everything\nexport * from '@testing-library/react-native';\n\nafterAll(() => {\n store.cleanup();\n});\n\nexport type RenderRouterOptions = Parameters<typeof render>[1] & {\n initialUrl?: any;\n linking?: Partial<ExpoLinkingOptions>;\n};\n\ntype Result = ReturnType<typeof render> & {\n getPathname(): string;\n getPathnameWithParams(): string;\n getSegments(): string[];\n getSearchParams(): Record<string, string | string[]>;\n getRouterState(): NavigationState<any> | PartialState<any>;\n};\n\ndeclare global {\n namespace jest {\n interface Matchers<R> {\n toHavePathname(pathname: string): R;\n toHavePathnameWithParams(pathname: string): R;\n toHaveSegments(segments: string[]): R;\n toHaveSearchParams(params: Record<string, string | string[]>): R;\n toHaveRouterState(state: Record<string, unknown>): R;\n }\n }\n}\n\nexport { MockContextConfig, getMockConfig, getMockContext };\n\nexport function renderRouter(\n context: MockContextConfig = './app',\n { initialUrl = '/', linking, ...options }: RenderRouterOptions = {}\n): Result {\n jest.useFakeTimers();\n\n const mockContext = getMockContext(context);\n\n // Force the render to be synchronous\n process.env.EXPO_ROUTER_IMPORT_MODE = 'sync';\n\n const result = render(\n <ExpoRoot context={mockContext} location={initialUrl} linking={linking} />,\n options\n );\n\n /**\n * This is a hack to ensure that React Navigation's state updates are processed before we run assertions.\n * Some updates are async and we need to wait for them to complete, otherwise will we get a false positive.\n * (that the app will briefly be in the right state, but then update to an invalid state)\n */\n store.subscribeToRootState(() => jest.runOnlyPendingTimers());\n\n return Object.assign(result, {\n getPathname(this: RenderResult): string {\n return store.routeInfoSnapshot().pathname;\n },\n getSegments(this: RenderResult): string[] {\n return store.routeInfoSnapshot().segments;\n },\n getSearchParams(this: RenderResult): Record<string, string | string[]> {\n return store.routeInfoSnapshot().params;\n },\n getPathnameWithParams(this: RenderResult): string {\n return getPathFromState(store.rootState!, store.linking!.config);\n },\n getRouterState(this: RenderResult) {\n return store.rootStateSnapshot();\n },\n });\n}\n\nexport const testRouter = {\n /** Navigate to the provided pathname and the pathname */\n navigate(path: string) {\n act(() => router.navigate(path));\n expect(screen).toHavePathnameWithParams(path);\n },\n /** Push the provided pathname and assert the pathname */\n push(path: string) {\n act(() => router.push(path));\n expect(screen).toHavePathnameWithParams(path);\n },\n /** Replace with provided pathname and assert the pathname */\n replace(path: string) {\n act(() => router.replace(path));\n expect(screen).toHavePathnameWithParams(path);\n },\n /** Go back in history and asset the new pathname */\n back(path?: string) {\n expect(router.canGoBack()).toBe(true);\n act(() => router.back());\n if (path) {\n expect(screen).toHavePathnameWithParams(path);\n }\n },\n /** If there's history that supports invoking the `back` function. */\n canGoBack() {\n return router.canGoBack();\n },\n /** Update the current route query params and assert the new pathname */\n setParams(params: Record<string, string>, path?: string) {\n router.setParams(params);\n if (path) {\n expect(screen).toHavePathnameWithParams(path);\n }\n },\n /** If there's history that supports invoking the `back` function. */\n dismissAll() {\n act(() => router.dismissAll());\n },\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing-library/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAgDA,oCAwCC;AAxFD,oBAAkB;AAClB,mBAAiB;AAGjB,gEAAkF;AAClF,kDAA0B;AAE1B,+CAAiF;AAuCrD,8FAvCA,2BAAa,OAuCA;AAAE,+FAvCA,4BAAc,OAuCA;AAtCzD,0CAAuC;AACvC,+DAA4D;AAE5D,+DAAqD;AACrD,sDAA2C;AAE3C,uBAAuB;AACvB,gEAA8C;AAE9C,QAAQ,CAAC,GAAG,EAAE;IACZ,oBAAK,CAAC,OAAO,EAAE,CAAC;AAClB,CAAC,CAAC,CAAC;AA6BH,SAAgB,YAAY,CAC1B,UAA6B,OAAO,EACpC,EAAE,UAAU,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,KAA0B,EAAE;IAEnE,IAAI,CAAC,aAAa,EAAE,CAAC;IAErB,MAAM,WAAW,GAAG,IAAA,4BAAc,EAAC,OAAO,CAAC,CAAC;IAE5C,qCAAqC;IACrC,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,MAAM,CAAC;IAE7C,MAAM,MAAM,GAAG,IAAA,qBAAM,EACnB,CAAC,mBAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAG,EAC1E,OAAO,CACR,CAAC;IAEF;;;;OAIG;IACH,oBAAK,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAE9D,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;QAC3B,WAAW;YACT,OAAO,oBAAK,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QAC5C,CAAC;QACD,WAAW;YACT,OAAO,oBAAK,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QAC5C,CAAC;QACD,eAAe;YACb,OAAO,oBAAK,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC;QAC1C,CAAC;QACD,qBAAqB;YACnB,OAAO,IAAA,mCAAgB,EAAC,oBAAK,CAAC,SAAU,EAAE,oBAAK,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC;QACnE,CAAC;QACD,cAAc;YACZ,OAAO,oBAAK,CAAC,iBAAiB,EAAE,CAAC;QACnC,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAEY,QAAA,UAAU,GAAG;IACxB,yDAAyD;IACzD,QAAQ,CAAC,IAAY;QACnB,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,yDAAyD;IACzD,IAAI,CAAC,IAAY;QACf,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,6DAA6D;IAC7D,OAAO,CAAC,IAAY;QAClB,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,oDAAoD;IACpD,IAAI,CAAC,IAAa;QAChB,MAAM,CAAC,uBAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,qEAAqE;IACrE,SAAS;QACP,OAAO,uBAAM,CAAC,SAAS,EAAE,CAAC;IAC5B,CAAC;IACD,wEAAwE;IACxE,SAAS,CAAC,MAA8B,EAAE,IAAa;QACrD,uBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,CAAC,qBAAM,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,qEAAqE;IACrE,UAAU;QACR,IAAA,kBAAG,EAAC,GAAG,EAAE,CAAC,uBAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACjC,CAAC;CACF,CAAC","sourcesContent":["import './expect';\nimport './mocks';\n\nimport { NavigationState, PartialState } from '@react-navigation/native';\nimport { act, render, RenderResult, screen } from '@testing-library/react-native';\nimport React from 'react';\n\nimport { MockContextConfig, getMockConfig, getMockContext } from './mock-config';\nimport { ExpoRoot } from '../ExpoRoot';\nimport { getPathFromState } from '../fork/getPathFromState';\nimport { ExpoLinkingOptions } from '../getLinkingConfig';\nimport { store } from '../global-state/router-store';\nimport { router } from '../imperative-api';\n\n// re-export everything\nexport * from '@testing-library/react-native';\n\nafterAll(() => {\n store.cleanup();\n});\n\nexport type RenderRouterOptions = Parameters<typeof render>[1] & {\n initialUrl?: any;\n linking?: Partial<ExpoLinkingOptions>;\n};\n\ntype Result = ReturnType<typeof render> & {\n getPathname(): string;\n getPathnameWithParams(): string;\n getSegments(): string[];\n getSearchParams(): Record<string, string | string[]>;\n getRouterState(): NavigationState<any> | PartialState<any>;\n};\n\ndeclare global {\n namespace jest {\n interface Matchers<R> {\n toHavePathname(pathname: string): R;\n toHavePathnameWithParams(pathname: string): R;\n toHaveSegments(segments: string[]): R;\n toHaveSearchParams(params: Record<string, string | string[]>): R;\n toHaveRouterState(state: Record<string, unknown>): R;\n }\n }\n}\n\nexport { MockContextConfig, getMockConfig, getMockContext };\n\nexport function renderRouter(\n context: MockContextConfig = './app',\n { initialUrl = '/', linking, ...options }: RenderRouterOptions = {}\n): Result {\n jest.useFakeTimers();\n\n const mockContext = getMockContext(context);\n\n // Force the render to be synchronous\n process.env.EXPO_ROUTER_IMPORT_MODE = 'sync';\n\n const result = render(\n <ExpoRoot context={mockContext} location={initialUrl} linking={linking} />,\n options\n );\n\n /**\n * This is a hack to ensure that React Navigation's state updates are processed before we run assertions.\n * Some updates are async and we need to wait for them to complete, otherwise will we get a false positive.\n * (that the app will briefly be in the right state, but then update to an invalid state)\n */\n store.subscribeToRootState(() => jest.runOnlyPendingTimers());\n\n return Object.assign(result, {\n getPathname(this: RenderResult): string {\n return store.routeInfoSnapshot().pathname;\n },\n getSegments(this: RenderResult): string[] {\n return store.routeInfoSnapshot().segments;\n },\n getSearchParams(this: RenderResult): Record<string, string | string[]> {\n return store.routeInfoSnapshot().params;\n },\n getPathnameWithParams(this: RenderResult): string {\n return getPathFromState(store.rootState!, store.linking!.config);\n },\n getRouterState(this: RenderResult) {\n return store.rootStateSnapshot();\n },\n });\n}\n\nexport const testRouter = {\n /** Navigate to the provided pathname and the pathname */\n navigate(path: string) {\n act(() => router.navigate(path));\n expect(screen).toHavePathnameWithParams(path);\n },\n /** Push the provided pathname and assert the pathname */\n push(path: string) {\n act(() => router.push(path));\n expect(screen).toHavePathnameWithParams(path);\n },\n /** Replace with provided pathname and assert the pathname */\n replace(path: string) {\n act(() => router.replace(path));\n expect(screen).toHavePathnameWithParams(path);\n },\n /** Go back in history and asset the new pathname */\n back(path?: string) {\n expect(router.canGoBack()).toBe(true);\n act(() => router.back());\n if (path) {\n expect(screen).toHavePathnameWithParams(path);\n }\n },\n /** If there's history that supports invoking the `back` function. */\n canGoBack() {\n return router.canGoBack();\n },\n /** Update the current route query params and assert the new pathname */\n setParams(params: Record<string, string>, path?: string) {\n router.setParams(params);\n if (path) {\n expect(screen).toHavePathnameWithParams(path);\n }\n },\n /** If there's history that supports invoking the `back` function. */\n dismissAll() {\n act(() => router.dismissAll());\n },\n};\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.getMockContext = exports.getMockConfig = void 0;
6
+ exports.getMockConfig = getMockConfig;
7
+ exports.getMockContext = getMockContext;
7
8
  const path_1 = __importDefault(require("path"));
8
9
  const context_stubs_1 = require("./context-stubs");
9
10
  const getLinkingConfig_1 = require("../getLinkingConfig");
@@ -11,7 +12,6 @@ const getRoutes_1 = require("../getRoutes");
11
12
  function getMockConfig(context, metaOnly = true) {
12
13
  return (0, getLinkingConfig_1.getNavigationConfig)((0, getRoutes_1.getExactRoutes)(getMockContext(context)), metaOnly);
13
14
  }
14
- exports.getMockConfig = getMockConfig;
15
15
  function getMockContext(context) {
16
16
  if (typeof context === 'string') {
17
17
  return (0, context_stubs_1.requireContext)(path_1.default.resolve(process.cwd(), context));
@@ -29,5 +29,4 @@ function getMockContext(context) {
29
29
  throw new Error('Invalid context');
30
30
  }
31
31
  }
32
- exports.getMockContext = getMockContext;
33
32
  //# sourceMappingURL=mock-config.js.map