expo-router 6.1.0-canary-20251015-a6a1272 → 7.0.0-canary-20251031-b135dff

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 (279) hide show
  1. package/_error.js +36 -3
  2. package/build/ExpoRoot.js +1 -1
  3. package/build/ExpoRoot.js.map +1 -1
  4. package/build/global-state/router-store.d.ts +2 -0
  5. package/build/global-state/router-store.d.ts.map +1 -1
  6. package/build/global-state/router-store.js +16 -12
  7. package/build/global-state/router-store.js.map +1 -1
  8. package/build/global-state/routing.d.ts +12 -4
  9. package/build/global-state/routing.d.ts.map +1 -1
  10. package/build/global-state/routing.js +35 -10
  11. package/build/global-state/routing.js.map +1 -1
  12. package/build/global-state/storeContext.d.ts +2 -0
  13. package/build/global-state/storeContext.d.ts.map +1 -1
  14. package/build/internal/routing.d.ts +7 -0
  15. package/build/internal/routing.d.ts.map +1 -0
  16. package/build/internal/routing.js +21 -0
  17. package/build/internal/routing.js.map +1 -0
  18. package/build/internal/rsc.d.ts +5 -0
  19. package/build/internal/rsc.d.ts.map +1 -0
  20. package/build/internal/rsc.js +18 -0
  21. package/build/internal/rsc.js.map +1 -0
  22. package/build/internal/static.d.ts +3 -0
  23. package/build/internal/static.d.ts.map +1 -0
  24. package/build/internal/static.js +8 -0
  25. package/build/internal/static.js.map +1 -0
  26. package/build/internal/testing.d.ts +3 -0
  27. package/build/internal/testing.d.ts.map +1 -0
  28. package/build/internal/testing.js +11 -0
  29. package/build/internal/testing.js.map +1 -0
  30. package/build/internal/utils.d.ts +2 -0
  31. package/build/internal/utils.d.ts.map +1 -0
  32. package/build/internal/utils.js +6 -0
  33. package/build/internal/utils.js.map +1 -0
  34. package/build/layouts/BaseStack.d.ts +3 -0
  35. package/build/layouts/BaseStack.d.ts.map +1 -0
  36. package/build/layouts/BaseStack.js +8 -0
  37. package/build/layouts/BaseStack.js.map +1 -0
  38. package/build/layouts/ExperimentalModalStack.d.ts +9 -0
  39. package/build/layouts/ExperimentalModalStack.d.ts.map +1 -0
  40. package/build/layouts/ExperimentalModalStack.js +15 -0
  41. package/build/layouts/ExperimentalModalStack.js.map +1 -0
  42. package/build/layouts/IsWithinLayoutContext.d.ts +2 -0
  43. package/build/layouts/IsWithinLayoutContext.d.ts.map +1 -0
  44. package/build/layouts/IsWithinLayoutContext.js +7 -0
  45. package/build/layouts/IsWithinLayoutContext.js.map +1 -0
  46. package/build/layouts/Stack.web.d.ts +1 -14
  47. package/build/layouts/Stack.web.d.ts.map +1 -1
  48. package/build/layouts/Stack.web.js +10 -13
  49. package/build/layouts/Stack.web.js.map +1 -1
  50. package/build/layouts/_web-modal.d.ts +3 -0
  51. package/build/layouts/_web-modal.d.ts.map +1 -0
  52. package/build/layouts/_web-modal.js +8 -0
  53. package/build/layouts/_web-modal.js.map +1 -0
  54. package/build/layouts/withLayoutContext.d.ts.map +1 -1
  55. package/build/layouts/withLayoutContext.js +5 -2
  56. package/build/layouts/withLayoutContext.js.map +1 -1
  57. package/build/loaders/ServerDataLoaderContext.d.ts +2 -1
  58. package/build/loaders/ServerDataLoaderContext.d.ts.map +1 -1
  59. package/build/loaders/ServerDataLoaderContext.js.map +1 -1
  60. package/build/modal/web/ModalStack.d.ts.map +1 -1
  61. package/build/modal/web/ModalStack.js +7 -2
  62. package/build/modal/web/ModalStack.js.map +1 -1
  63. package/build/native-tabs/{NativeBottomTabs/NativeBottomTabsNavigator.d.ts → NativeBottomTabsNavigator.d.ts} +3 -3
  64. package/build/native-tabs/NativeBottomTabsNavigator.d.ts.map +1 -0
  65. package/build/native-tabs/{NativeBottomTabs/NativeBottomTabsNavigator.js → NativeBottomTabsNavigator.js} +49 -14
  66. package/build/native-tabs/NativeBottomTabsNavigator.js.map +1 -0
  67. package/build/native-tabs/NativeBottomTabsRouter.d.ts.map +1 -0
  68. package/build/native-tabs/{NativeBottomTabs/NativeBottomTabsRouter.js → NativeBottomTabsRouter.js} +1 -1
  69. package/build/native-tabs/NativeBottomTabsRouter.js.map +1 -0
  70. package/build/native-tabs/{NativeBottomTabs/NativeTabTrigger.d.ts → NativeTabTrigger.d.ts} +1 -1
  71. package/build/native-tabs/NativeTabTrigger.d.ts.map +1 -0
  72. package/build/native-tabs/{NativeBottomTabs/NativeTabTrigger.js → NativeTabTrigger.js} +9 -5
  73. package/build/native-tabs/NativeTabTrigger.js.map +1 -0
  74. package/build/native-tabs/NativeTabs.d.ts.map +1 -0
  75. package/build/native-tabs/{NativeBottomTabs/NativeTabs.js → NativeTabs.js} +2 -0
  76. package/build/native-tabs/NativeTabs.js.map +1 -0
  77. package/build/native-tabs/NativeTabsTriggerTabBar.d.ts.map +1 -0
  78. package/build/native-tabs/NativeTabsTriggerTabBar.js.map +1 -0
  79. package/build/native-tabs/NativeTabsView.d.ts.map +1 -0
  80. package/build/native-tabs/NativeTabsView.js +103 -0
  81. package/build/native-tabs/NativeTabsView.js.map +1 -0
  82. package/build/native-tabs/NativeTabsView.web.d.ts.map +1 -0
  83. package/build/native-tabs/{NativeBottomTabs/NativeTabsView.web.js → NativeTabsView.web.js} +18 -57
  84. package/build/native-tabs/NativeTabsView.web.js.map +1 -0
  85. package/build/native-tabs/{NativeBottomTabs/appearance.d.ts → appearance.d.ts} +2 -2
  86. package/build/native-tabs/appearance.d.ts.map +1 -0
  87. package/build/native-tabs/{NativeBottomTabs/appearance.js → appearance.js} +18 -6
  88. package/build/native-tabs/appearance.js.map +1 -0
  89. package/build/native-tabs/common/elements.d.ts +1 -1
  90. package/build/native-tabs/common/elements.d.ts.map +1 -1
  91. package/build/native-tabs/common/elements.js.map +1 -1
  92. package/build/native-tabs/index.d.ts +4 -4
  93. package/build/native-tabs/index.d.ts.map +1 -1
  94. package/build/native-tabs/index.js +3 -3
  95. package/build/native-tabs/index.js.map +1 -1
  96. package/build/native-tabs/{NativeBottomTabs/types.d.ts → types.d.ts} +19 -6
  97. package/build/native-tabs/types.d.ts.map +1 -0
  98. package/build/native-tabs/types.js.map +1 -0
  99. package/build/native-tabs/{NativeBottomTabs/utils.d.ts → utils/children.d.ts} +1 -3
  100. package/build/native-tabs/utils/children.d.ts.map +1 -0
  101. package/build/native-tabs/{NativeBottomTabs/utils.js → utils/children.js} +1 -7
  102. package/build/native-tabs/utils/children.js.map +1 -0
  103. package/build/native-tabs/utils/icon.d.ts +25 -0
  104. package/build/native-tabs/utils/icon.d.ts.map +1 -0
  105. package/build/native-tabs/utils/icon.js +68 -0
  106. package/build/native-tabs/utils/icon.js.map +1 -0
  107. package/build/native-tabs/utils/index.d.ts +4 -0
  108. package/build/native-tabs/utils/index.d.ts.map +1 -0
  109. package/build/native-tabs/utils/index.js +11 -0
  110. package/build/native-tabs/utils/index.js.map +1 -0
  111. package/build/native-tabs/utils/label.d.ts +6 -0
  112. package/build/native-tabs/utils/label.d.ts.map +1 -0
  113. package/build/native-tabs/utils/label.js +15 -0
  114. package/build/native-tabs/utils/label.js.map +1 -0
  115. package/build/renderRootComponent.d.ts.map +1 -1
  116. package/build/renderRootComponent.js +4 -7
  117. package/build/renderRootComponent.js.map +1 -1
  118. package/build/split-view/elements.d.ts +10 -0
  119. package/build/split-view/elements.d.ts.map +1 -0
  120. package/build/split-view/elements.js +15 -0
  121. package/build/split-view/elements.js.map +1 -0
  122. package/build/split-view/index.d.ts +2 -0
  123. package/build/split-view/index.d.ts.map +1 -0
  124. package/build/split-view/index.js +6 -0
  125. package/build/split-view/index.js.map +1 -0
  126. package/build/split-view/split-view.d.ts +13 -0
  127. package/build/split-view/split-view.d.ts.map +1 -0
  128. package/build/split-view/split-view.js +93 -0
  129. package/build/split-view/split-view.js.map +1 -0
  130. package/build/static/html.d.ts +5 -15
  131. package/build/static/html.d.ts.map +1 -1
  132. package/build/static/html.js +9 -25
  133. package/build/static/html.js.map +1 -1
  134. package/build/static/registerRootComponent.d.ts +11 -0
  135. package/build/static/registerRootComponent.d.ts.map +1 -0
  136. package/build/static/registerRootComponent.js +11 -0
  137. package/build/static/registerRootComponent.js.map +1 -0
  138. package/build/types.d.ts +4 -2
  139. package/build/types.d.ts.map +1 -1
  140. package/build/types.js.map +1 -1
  141. package/build/ui/TabRouter.d.ts +3 -4
  142. package/build/ui/TabRouter.d.ts.map +1 -1
  143. package/build/ui/TabRouter.js +14 -67
  144. package/build/ui/TabRouter.js.map +1 -1
  145. package/build/ui/TabTrigger.d.ts +4 -5
  146. package/build/ui/TabTrigger.d.ts.map +1 -1
  147. package/build/ui/TabTrigger.js +9 -8
  148. package/build/ui/TabTrigger.js.map +1 -1
  149. package/build/ui/Tabs.d.ts +0 -1
  150. package/build/ui/Tabs.d.ts.map +1 -1
  151. package/build/ui/Tabs.js.map +1 -1
  152. package/html.js +1 -1
  153. package/internal/routing.d.ts +1 -0
  154. package/internal/routing.js +1 -0
  155. package/internal/rsc.d.ts +1 -0
  156. package/internal/rsc.js +1 -0
  157. package/internal/static.d.ts +1 -0
  158. package/internal/static.js +1 -0
  159. package/internal/testing.d.ts +1 -0
  160. package/internal/testing.js +1 -0
  161. package/internal/utils.d.ts +1 -0
  162. package/internal/utils.js +1 -0
  163. package/package.json +13 -11
  164. package/plugin/build/index.js +10 -0
  165. package/plugin/options.json +5 -0
  166. package/plugin/src/index.ts +17 -1
  167. package/rsc/headers.d.ts +1 -1
  168. package/rsc/headers.js +1 -1
  169. package/unstable-split-view.d.ts +1 -0
  170. package/unstable-split-view.js +1 -0
  171. package/build/getRoutesSSR.d.ts +0 -20
  172. package/build/getRoutesSSR.d.ts.map +0 -1
  173. package/build/getRoutesSSR.js +0 -97
  174. package/build/getRoutesSSR.js.map +0 -1
  175. package/build/getServerManifest.d.ts +0 -88
  176. package/build/getServerManifest.d.ts.map +0 -1
  177. package/build/getServerManifest.js +0 -238
  178. package/build/getServerManifest.js.map +0 -1
  179. package/build/loadStaticParamsAsync.d.ts +0 -9
  180. package/build/loadStaticParamsAsync.d.ts.map +0 -1
  181. package/build/loadStaticParamsAsync.js +0 -163
  182. package/build/loadStaticParamsAsync.js.map +0 -1
  183. package/build/native-tabs/NativeBottomTabs/NativeBottomTabsNavigator.d.ts.map +0 -1
  184. package/build/native-tabs/NativeBottomTabs/NativeBottomTabsNavigator.js.map +0 -1
  185. package/build/native-tabs/NativeBottomTabs/NativeBottomTabsRouter.d.ts.map +0 -1
  186. package/build/native-tabs/NativeBottomTabs/NativeBottomTabsRouter.js.map +0 -1
  187. package/build/native-tabs/NativeBottomTabs/NativeTabTrigger.d.ts.map +0 -1
  188. package/build/native-tabs/NativeBottomTabs/NativeTabTrigger.js.map +0 -1
  189. package/build/native-tabs/NativeBottomTabs/NativeTabs.d.ts.map +0 -1
  190. package/build/native-tabs/NativeBottomTabs/NativeTabs.js.map +0 -1
  191. package/build/native-tabs/NativeBottomTabs/NativeTabsTriggerTabBar.d.ts.map +0 -1
  192. package/build/native-tabs/NativeBottomTabs/NativeTabsTriggerTabBar.js.map +0 -1
  193. package/build/native-tabs/NativeBottomTabs/NativeTabsView.d.ts.map +0 -1
  194. package/build/native-tabs/NativeBottomTabs/NativeTabsView.js +0 -187
  195. package/build/native-tabs/NativeBottomTabs/NativeTabsView.js.map +0 -1
  196. package/build/native-tabs/NativeBottomTabs/NativeTabsView.web.d.ts.map +0 -1
  197. package/build/native-tabs/NativeBottomTabs/NativeTabsView.web.js.map +0 -1
  198. package/build/native-tabs/NativeBottomTabs/appearance.d.ts.map +0 -1
  199. package/build/native-tabs/NativeBottomTabs/appearance.js.map +0 -1
  200. package/build/native-tabs/NativeBottomTabs/types.d.ts.map +0 -1
  201. package/build/native-tabs/NativeBottomTabs/types.js.map +0 -1
  202. package/build/native-tabs/NativeBottomTabs/utils.d.ts.map +0 -1
  203. package/build/native-tabs/NativeBottomTabs/utils.js.map +0 -1
  204. package/build/routes-manifest.d.ts +0 -28
  205. package/build/routes-manifest.d.ts.map +0 -1
  206. package/build/routes-manifest.js +0 -30
  207. package/build/routes-manifest.js.map +0 -1
  208. package/build/rsc/middleware.d.ts +0 -8
  209. package/build/rsc/middleware.d.ts.map +0 -1
  210. package/build/rsc/middleware.js +0 -105
  211. package/build/rsc/middleware.js.map +0 -1
  212. package/build/rsc/path.d.ts +0 -34
  213. package/build/rsc/path.d.ts.map +0 -1
  214. package/build/rsc/path.js +0 -174
  215. package/build/rsc/path.js.map +0 -1
  216. package/build/rsc/router/create-expo-pages.d.ts +0 -20
  217. package/build/rsc/router/create-expo-pages.d.ts.map +0 -1
  218. package/build/rsc/router/create-expo-pages.js +0 -21
  219. package/build/rsc/router/create-expo-pages.js.map +0 -1
  220. package/build/rsc/router/create-pages.d.ts +0 -80
  221. package/build/rsc/router/create-pages.d.ts.map +0 -1
  222. package/build/rsc/router/create-pages.js +0 -232
  223. package/build/rsc/router/create-pages.js.map +0 -1
  224. package/build/rsc/router/defineRouter.d.ts +0 -30
  225. package/build/rsc/router/defineRouter.d.ts.map +0 -1
  226. package/build/rsc/router/defineRouter.js +0 -171
  227. package/build/rsc/router/defineRouter.js.map +0 -1
  228. package/build/rsc/router/expo-definedRouter.d.ts +0 -3
  229. package/build/rsc/router/expo-definedRouter.d.ts.map +0 -1
  230. package/build/rsc/router/expo-definedRouter.js +0 -112
  231. package/build/rsc/router/expo-definedRouter.js.map +0 -1
  232. package/build/rsc/router/noopRouter.d.ts +0 -3
  233. package/build/rsc/router/noopRouter.d.ts.map +0 -1
  234. package/build/rsc/router/noopRouter.js +0 -7
  235. package/build/rsc/router/noopRouter.js.map +0 -1
  236. package/build/rsc/rsc-renderer.d.ts +0 -44
  237. package/build/rsc/rsc-renderer.d.ts.map +0 -1
  238. package/build/rsc/rsc-renderer.js +0 -200
  239. package/build/rsc/rsc-renderer.js.map +0 -1
  240. package/build/rsc/server.d.ts +0 -65
  241. package/build/rsc/server.d.ts.map +0 -1
  242. package/build/rsc/server.js +0 -89
  243. package/build/rsc/server.js.map +0 -1
  244. package/build/static/getRootComponent.d.ts +0 -2
  245. package/build/static/getRootComponent.d.ts.map +0 -1
  246. package/build/static/getRootComponent.js +0 -25
  247. package/build/static/getRootComponent.js.map +0 -1
  248. package/build/static/getServerManifest.d.ts +0 -22
  249. package/build/static/getServerManifest.d.ts.map +0 -1
  250. package/build/static/getServerManifest.js +0 -50
  251. package/build/static/getServerManifest.js.map +0 -1
  252. package/build/static/renderStaticContent.d.ts +0 -15
  253. package/build/static/renderStaticContent.d.ts.map +0 -1
  254. package/build/static/renderStaticContent.js +0 -130
  255. package/build/static/renderStaticContent.js.map +0 -1
  256. package/build/typed-routes/generate.d.ts +0 -8
  257. package/build/typed-routes/generate.d.ts.map +0 -1
  258. package/build/typed-routes/generate.js +0 -186
  259. package/build/typed-routes/generate.js.map +0 -1
  260. package/build/typed-routes/index.d.ts +0 -35
  261. package/build/typed-routes/index.d.ts.map +0 -1
  262. package/build/typed-routes/index.js +0 -99
  263. package/build/typed-routes/index.js.map +0 -1
  264. package/build/typed-routes/testSetup.d.ts +0 -2
  265. package/build/typed-routes/testSetup.d.ts.map +0 -1
  266. package/build/typed-routes/testSetup.js +0 -42
  267. package/build/typed-routes/testSetup.js.map +0 -1
  268. package/build/utils/html.d.ts +0 -12
  269. package/build/utils/html.d.ts.map +0 -1
  270. package/build/utils/html.js +0 -29
  271. package/build/utils/html.js.map +0 -1
  272. package/node/render.js +0 -3
  273. /package/build/native-tabs/{NativeBottomTabs/NativeBottomTabsRouter.d.ts → NativeBottomTabsRouter.d.ts} +0 -0
  274. /package/build/native-tabs/{NativeBottomTabs/NativeTabs.d.ts → NativeTabs.d.ts} +0 -0
  275. /package/build/native-tabs/{NativeBottomTabs/NativeTabsTriggerTabBar.d.ts → NativeTabsTriggerTabBar.d.ts} +0 -0
  276. /package/build/native-tabs/{NativeBottomTabs/NativeTabsTriggerTabBar.js → NativeTabsTriggerTabBar.js} +0 -0
  277. /package/build/native-tabs/{NativeBottomTabs/NativeTabsView.d.ts → NativeTabsView.d.ts} +0 -0
  278. /package/build/native-tabs/{NativeBottomTabs/NativeTabsView.web.d.ts → NativeTabsView.web.d.ts} +0 -0
  279. /package/build/native-tabs/{NativeBottomTabs/types.js → types.js} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-expo-pages.js","sourceRoot":"","sources":["../../../src/rsc/router/create-expo-pages.ts"],"names":[],"mappings":";;AAmBA,0CAQC;AA3BD,iDAA6C;AAU7C;;;;;;;;GAQG;AACH,SAAgB,eAAe,CAC7B,EAAkF;IAElF,OAAO,CAAC,eAAkC,EAAc,EAAE;QACxD,OAAO;YACL,OAAO,EAAE,IAAA,0BAAW,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;SACjE,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { createPages } from './create-pages';\nimport { Options as GetRoutesOptions } from '../../getRoutes';\nimport { EntriesDev } from '../server';\n\ntype CreatePagesFn = Parameters<typeof createPages>[0];\ntype CreatePagesFns = Parameters<CreatePagesFn>[0];\ntype CreatePagesOptions = Parameters<CreatePagesFn>[1] & {\n getRouteOptions?: GetRoutesOptions;\n};\n\n/**\n * Wrapper around `createPages` to pass data from the server to the fn\n *\n * This is separated from the `createPages` function allowing us to keep the createPages\n * in sync with the original Waku implementation.\n *\n * @param fn\n * @returns\n */\nexport function createExpoPages(\n fn: (fn: CreatePagesFns, options: CreatePagesOptions) => ReturnType<CreatePagesFn>\n) {\n return (getRouteOptions?: GetRoutesOptions): EntriesDev => {\n return {\n default: createPages((a, b) => fn(a, { ...b, getRouteOptions })),\n };\n };\n}\n"]}
@@ -1,80 +0,0 @@
1
- /**
2
- * Copyright © 2024 650 Industries.
3
- * Copyright © 2024 2023 Daishi Kato
4
- *
5
- * This source code is licensed under the MIT license found in the
6
- * LICENSE file in the root directory of this source tree.
7
- *
8
- * https://github.com/dai-shi/waku/blob/3d1cc7d714b67b142c847e879c30f0724fc457a7/packages/waku/src/router/create-pages.ts#L1
9
- */
10
- import type { FunctionComponent, ReactNode } from 'react';
11
- import type { RouteProps } from './common.js';
12
- import type { BuildConfig } from '../server.js';
13
- /**
14
- * Type version of `String.prototype.split()`. Splits the first string argument by the second string argument
15
- * @example
16
- * ```ts
17
- * // ['a', 'b', 'c']
18
- * type Case1 = Split<'abc', ''>
19
- * // ['a', 'b', 'c']
20
- * type Case2 = Split<'a,b,c', ','>
21
- * ```
22
- */
23
- type Split<Str extends string, Del extends string | number> = string extends Str ? string[] : '' extends Str ? [] : Str extends `${infer T}${Del}${infer U}` ? [T, ...Split<U, Del>] : [Str];
24
- /** Assumes that the path is a part of a slug path. */
25
- type IsValidPathItem<T> = T extends `/${infer _}` ? false : T extends '[]' | '' ? false : true;
26
- /**
27
- * This is a helper type to check if a path is valid in a slug path.
28
- */
29
- export type IsValidPathInSlugPath<T> = T extends `/${infer L}/${infer R}` ? IsValidPathItem<L> extends true ? IsValidPathInSlugPath<`/${R}`> : false : T extends `/${infer U}` ? IsValidPathItem<U> : false;
30
- /** Checks if a particular slug name exists in a path. */
31
- export type HasSlugInPath<T, K extends string> = T extends `/[${K}]/${infer _}` ? true : T extends `/${infer _}/${infer U}` ? HasSlugInPath<`/${U}`, K> : T extends `/[${K}]` ? true : false;
32
- export type HasWildcardInPath<T> = T extends `/[...${string}]/${string}` ? true : T extends `/${infer _}/${infer U}` ? HasWildcardInPath<`/${U}`> : T extends `/[...${string}]` ? true : false;
33
- export type PathWithSlug<T, K extends string> = IsValidPathInSlugPath<T> extends true ? (HasSlugInPath<T, K> extends true ? T : never) : never;
34
- type _GetSlugs<Route extends string, SplitRoute extends string[] = Split<Route, '/'>, Result extends string[] = []> = SplitRoute extends [] ? Result : SplitRoute extends [`${infer MaybeSlug}`, ...infer Rest] ? Rest extends string[] ? MaybeSlug extends `[${infer Slug}]` ? _GetSlugs<Route, Rest, [...Result, Slug]> : _GetSlugs<Route, Rest, Result> : never : Result;
35
- export type GetSlugs<Route extends string> = _GetSlugs<Route>;
36
- export type StaticSlugRoutePathsTuple<T extends string, Slugs extends unknown[] = GetSlugs<T>, Result extends string[] = []> = Slugs extends [] ? Result : Slugs extends [infer _, ...infer Rest] ? StaticSlugRoutePathsTuple<T, Rest, [...Result, string]> : never;
37
- type StaticSlugRoutePaths<T extends string> = HasWildcardInPath<T> extends true ? string[] | string[][] : StaticSlugRoutePathsTuple<T> extends [string] ? string[] : StaticSlugRoutePathsTuple<T>[];
38
- export type PathWithoutSlug<T> = T extends '/' ? T : IsValidPathInSlugPath<T> extends true ? HasSlugInPath<T, string> extends true ? never : T : never;
39
- type PathWithStaticSlugs<T extends string> = T extends `/` ? T : IsValidPathInSlugPath<T> extends true ? T : never;
40
- export type PathWithWildcard<Path, SlugKey extends string, WildSlugKey extends string> = PathWithSlug<Path, SlugKey | `...${WildSlugKey}`>;
41
- export type CreatePage = <Path extends string, SlugKey extends string, WildSlugKey extends string>(page: ({
42
- render: 'static';
43
- path: PathWithoutSlug<Path>;
44
- component: FunctionComponent<RouteProps>;
45
- } | {
46
- render: 'static';
47
- path: PathWithStaticSlugs<Path>;
48
- staticPaths: StaticSlugRoutePaths<Path>;
49
- component: FunctionComponent<RouteProps & Record<SlugKey, string>>;
50
- } | {
51
- render: 'dynamic';
52
- path: PathWithoutSlug<Path>;
53
- component: FunctionComponent<RouteProps>;
54
- } | {
55
- render: 'dynamic';
56
- path: PathWithWildcard<Path, SlugKey, WildSlugKey>;
57
- component: FunctionComponent<RouteProps & Record<SlugKey, string> & Record<WildSlugKey, string[]>>;
58
- }) & {
59
- unstable_disableSSR?: boolean;
60
- }) => void;
61
- export type CreateLayout = <T extends string>(layout: {
62
- render: 'static' | 'dynamic';
63
- path: PathWithoutSlug<T>;
64
- component: FunctionComponent<Omit<RouteProps, 'searchParams'> & {
65
- children: ReactNode;
66
- }>;
67
- }) => void;
68
- export declare function createPages(fn: (fns: {
69
- createPage: CreatePage;
70
- createLayout: CreateLayout;
71
- unstable_setBuildData: (path: string, data: unknown) => void;
72
- }, opts: {
73
- unstable_buildConfig: BuildConfig | undefined;
74
- }) => Promise<void>): {
75
- renderEntries: import("../server.js").RenderEntries;
76
- getBuildConfig: import("../server.js").GetBuildConfig | undefined;
77
- getSsrConfig: import("../server.js").GetSsrConfig | undefined;
78
- };
79
- export {};
80
- //# sourceMappingURL=create-pages.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-pages.d.ts","sourceRoot":"","sources":["../../../src/rsc/router/create-pages.ts"],"names":[],"mappings":"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"}
@@ -1,232 +0,0 @@
1
- "use strict";
2
- /* eslint-disable @typescript-eslint/no-unused-vars */
3
- /**
4
- * Copyright © 2024 650 Industries.
5
- * Copyright © 2024 2023 Daishi Kato
6
- *
7
- * This source code is licensed under the MIT license found in the
8
- * LICENSE file in the root directory of this source tree.
9
- *
10
- * https://github.com/dai-shi/waku/blob/3d1cc7d714b67b142c847e879c30f0724fc457a7/packages/waku/src/router/create-pages.ts#L1
11
- */
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.createPages = createPages;
14
- const react_1 = require("react");
15
- const defineRouter_1 = require("./defineRouter");
16
- const path_1 = require("../path");
17
- const hasPathSpecPrefix = (prefix, path) => {
18
- for (let i = 0; i < prefix.length; i++) {
19
- if (i >= path.length ||
20
- prefix[i].type !== path[i].type ||
21
- prefix[i].name !== path[i].name) {
22
- return false;
23
- }
24
- }
25
- return true;
26
- };
27
- const sanitizeSlug = (slug) => slug.replace(/\./g, '').replace(/ /g, '-');
28
- function createPages(fn) {
29
- let configured = false;
30
- // TODO I think there's room for improvement to refactor these structures
31
- const staticPathSet = new Set();
32
- const dynamicPagePathMap = new Map();
33
- const wildcardPagePathMap = new Map();
34
- const dynamicLayoutPathMap = new Map();
35
- const staticComponentMap = new Map();
36
- const noSsrSet = new WeakSet();
37
- const buildDataMap = new Map();
38
- const registerStaticComponent = (id, component) => {
39
- if (staticComponentMap.has(id) && staticComponentMap.get(id) !== component) {
40
- throw new Error(`Duplicated component for: ${id}`);
41
- }
42
- staticComponentMap.set(id, component);
43
- };
44
- const createPage = (page) => {
45
- if (configured) {
46
- throw new Error('no longer available');
47
- }
48
- const pathSpec = (0, path_1.parsePathWithSlug)(page.path);
49
- if (page.unstable_disableSSR) {
50
- noSsrSet.add(pathSpec);
51
- }
52
- const { numSlugs, numWildcards } = (() => {
53
- let numSlugs = 0;
54
- let numWildcards = 0;
55
- for (const slug of pathSpec) {
56
- if (slug.type !== 'literal') {
57
- numSlugs++;
58
- }
59
- if (slug.type === 'wildcard') {
60
- numWildcards++;
61
- }
62
- }
63
- return { numSlugs, numWildcards };
64
- })();
65
- if (page.render === 'static' && numSlugs === 0) {
66
- staticPathSet.add([page.path, pathSpec]);
67
- const id = (0, path_1.joinPath)(page.path, 'page').replace(/^\//, '');
68
- registerStaticComponent(id, page.component);
69
- }
70
- else if (page.render === 'static' && numSlugs > 0 && 'staticPaths' in page) {
71
- const staticPaths = page.staticPaths.map((item) => (Array.isArray(item) ? item : [item]).map(sanitizeSlug));
72
- for (const staticPath of staticPaths) {
73
- if (staticPath.length !== numSlugs && numWildcards === 0) {
74
- throw new Error('staticPaths does not match with slug pattern');
75
- }
76
- const mapping = {};
77
- let slugIndex = 0;
78
- const pathItems = [];
79
- pathSpec.forEach(({ type, name }) => {
80
- switch (type) {
81
- case 'literal':
82
- pathItems.push(name);
83
- break;
84
- case 'wildcard':
85
- mapping[name] = staticPath.slice(slugIndex);
86
- staticPath.slice(slugIndex++).forEach((slug) => {
87
- pathItems.push(slug);
88
- });
89
- break;
90
- case 'group':
91
- pathItems.push(staticPath[slugIndex++]);
92
- mapping[name] = pathItems[pathItems.length - 1];
93
- break;
94
- }
95
- });
96
- staticPathSet.add([page.path, pathItems.map((name) => ({ type: 'literal', name }))]);
97
- const id = (0, path_1.joinPath)(...pathItems, 'page');
98
- const WrappedComponent = (props) => (0, react_1.createElement)(page.component, { ...props, ...mapping });
99
- registerStaticComponent(id, WrappedComponent);
100
- }
101
- }
102
- else if (page.render === 'dynamic' && numWildcards === 0) {
103
- if (dynamicPagePathMap.has(page.path)) {
104
- throw new Error(`Duplicated dynamic path: ${page.path}`);
105
- }
106
- dynamicPagePathMap.set(page.path, [pathSpec, page.component]);
107
- }
108
- else if (page.render === 'dynamic' && numWildcards === 1) {
109
- if (wildcardPagePathMap.has(page.path)) {
110
- throw new Error(`Duplicated dynamic path: ${page.path}`);
111
- }
112
- wildcardPagePathMap.set(page.path, [pathSpec, page.component]);
113
- }
114
- else {
115
- throw new Error('Invalid page configuration: ' + page.path);
116
- }
117
- };
118
- const createLayout = (layout) => {
119
- if (configured) {
120
- throw new Error('no longer available');
121
- }
122
- if (layout.render === 'static') {
123
- const id = (0, path_1.joinPath)(layout.path, 'layout').replace(/^\//, '');
124
- registerStaticComponent(id, layout.component);
125
- }
126
- else if (layout.render === 'dynamic') {
127
- if (dynamicLayoutPathMap.has(layout.path)) {
128
- throw new Error(`Duplicated dynamic path: ${layout.path}`);
129
- }
130
- const pathSpec = (0, path_1.parsePathWithSlug)(layout.path);
131
- dynamicLayoutPathMap.set(layout.path, [pathSpec, layout.component]);
132
- }
133
- else {
134
- throw new Error('Invalid layout configuration');
135
- }
136
- };
137
- const unstable_setBuildData = (path, data) => {
138
- buildDataMap.set(path, data);
139
- };
140
- let ready;
141
- const configure = async (buildConfig) => {
142
- if (!configured && !ready) {
143
- ready = fn({ createPage, createLayout, unstable_setBuildData }, { unstable_buildConfig: buildConfig });
144
- await ready;
145
- configured = true;
146
- }
147
- await ready;
148
- };
149
- return (0, defineRouter_1.unstable_defineRouter)(async () => {
150
- await configure();
151
- const paths = [];
152
- for (const [path, pathSpec] of staticPathSet) {
153
- const noSsr = noSsrSet.has(pathSpec);
154
- const isStatic = (() => {
155
- for (const [_, [layoutPathSpec]] of dynamicLayoutPathMap) {
156
- if (hasPathSpecPrefix(layoutPathSpec, pathSpec)) {
157
- return false;
158
- }
159
- }
160
- return true;
161
- })();
162
- paths.push({
163
- pattern: (0, path_1.path2regexp)((0, path_1.parsePathWithSlug)(path)),
164
- path: pathSpec,
165
- isStatic,
166
- noSsr,
167
- data: buildDataMap.get(path),
168
- });
169
- }
170
- for (const [path, [pathSpec]] of dynamicPagePathMap) {
171
- const noSsr = noSsrSet.has(pathSpec);
172
- paths.push({
173
- pattern: (0, path_1.path2regexp)((0, path_1.parsePathWithSlug)(path)),
174
- path: pathSpec,
175
- isStatic: false,
176
- noSsr,
177
- data: buildDataMap.get(path),
178
- });
179
- }
180
- for (const [path, [pathSpec]] of wildcardPagePathMap) {
181
- const noSsr = noSsrSet.has(pathSpec);
182
- paths.push({
183
- pattern: (0, path_1.path2regexp)((0, path_1.parsePathWithSlug)(path)),
184
- path: pathSpec,
185
- isStatic: false,
186
- noSsr,
187
- data: buildDataMap.get(path),
188
- });
189
- }
190
- return paths;
191
- }, async (id, { unstable_setShouldSkip, unstable_buildConfig }) => {
192
- await configure(unstable_buildConfig);
193
- const staticComponent = staticComponentMap.get(id);
194
- if (staticComponent) {
195
- unstable_setShouldSkip([]);
196
- return staticComponent;
197
- }
198
- for (const [_, [pathSpec, Component]] of dynamicPagePathMap) {
199
- const mapping = (0, path_1.getPathMapping)([...pathSpec, { type: 'literal', name: 'page' }], id);
200
- if (mapping) {
201
- if (Object.keys(mapping).length === 0) {
202
- unstable_setShouldSkip();
203
- return Component;
204
- }
205
- const WrappedComponent = (props) => (0, react_1.createElement)(Component, { ...props, ...mapping });
206
- unstable_setShouldSkip();
207
- return WrappedComponent;
208
- }
209
- }
210
- for (const [_, [pathSpec, Component]] of wildcardPagePathMap) {
211
- const mapping = (0, path_1.getPathMapping)([...pathSpec, { type: 'literal', name: 'page' }], id);
212
- if (mapping) {
213
- const WrappedComponent = (props) => (0, react_1.createElement)(Component, { ...props, ...mapping });
214
- unstable_setShouldSkip();
215
- return WrappedComponent;
216
- }
217
- }
218
- for (const [_, [pathSpec, Component]] of dynamicLayoutPathMap) {
219
- const mapping = (0, path_1.getPathMapping)([...pathSpec, { type: 'literal', name: 'layout' }], id);
220
- if (mapping) {
221
- if (Object.keys(mapping).length) {
222
- throw new Error('[Bug] layout should not have slugs');
223
- }
224
- unstable_setShouldSkip();
225
- return Component;
226
- }
227
- }
228
- unstable_setShouldSkip([]); // negative cache
229
- return null; // not found
230
- });
231
- }
232
- //# sourceMappingURL=create-pages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-pages.js","sourceRoot":"","sources":["../../../src/rsc/router/create-pages.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\n/**\n * Copyright © 2024 650 Industries.\n * Copyright © 2024 2023 Daishi Kato\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * https://github.com/dai-shi/waku/blob/3d1cc7d714b67b142c847e879c30f0724fc457a7/packages/waku/src/router/create-pages.ts#L1\n */\n\nimport { createElement } from 'react';\nimport type { FunctionComponent, ReactNode } from 'react';\n\nimport type { RouteProps } from './common.js';\nimport { unstable_defineRouter } from './defineRouter';\nimport { joinPath, parsePathWithSlug, getPathMapping, path2regexp } from '../path';\nimport type { PathSpec } from '../path';\nimport type { BuildConfig } from '../server.js';\n\nconst hasPathSpecPrefix = (prefix: PathSpec, path: PathSpec) => {\n for (let i = 0; i < prefix.length; i++) {\n if (\n i >= path.length ||\n prefix[i]!.type !== path[i]!.type ||\n prefix[i]!.name !== path[i]!.name\n ) {\n return false;\n }\n }\n return true;\n};\n\nconst sanitizeSlug = (slug: string) => slug.replace(/\\./g, '').replace(/ /g, '-');\n\n// createPages API (a wrapper around unstable_defineRouter)\n\n/**\n * Type version of `String.prototype.split()`. Splits the first string argument by the second string argument\n * @example\n * ```ts\n * // ['a', 'b', 'c']\n * type Case1 = Split<'abc', ''>\n * // ['a', 'b', 'c']\n * type Case2 = Split<'a,b,c', ','>\n * ```\n */\ntype Split<Str extends string, Del extends string | number> = string extends Str\n ? string[]\n : '' extends Str\n ? []\n : Str extends `${infer T}${Del}${infer U}`\n ? [T, ...Split<U, Del>]\n : [Str];\n\n/** Assumes that the path is a part of a slug path. */\ntype IsValidPathItem<T> = T extends `/${infer _}` ? false : T extends '[]' | '' ? false : true;\n/**\n * This is a helper type to check if a path is valid in a slug path.\n */\nexport type IsValidPathInSlugPath<T> = T extends `/${infer L}/${infer R}`\n ? IsValidPathItem<L> extends true\n ? IsValidPathInSlugPath<`/${R}`>\n : false\n : T extends `/${infer U}`\n ? IsValidPathItem<U>\n : false;\n/** Checks if a particular slug name exists in a path. */\nexport type HasSlugInPath<T, K extends string> = T extends `/[${K}]/${infer _}`\n ? true\n : T extends `/${infer _}/${infer U}`\n ? HasSlugInPath<`/${U}`, K>\n : T extends `/[${K}]`\n ? true\n : false;\n\nexport type HasWildcardInPath<T> = T extends `/[...${string}]/${string}`\n ? true\n : T extends `/${infer _}/${infer U}`\n ? HasWildcardInPath<`/${U}`>\n : T extends `/[...${string}]`\n ? true\n : false;\n\nexport type PathWithSlug<T, K extends string> =\n IsValidPathInSlugPath<T> extends true ? (HasSlugInPath<T, K> extends true ? T : never) : never;\n\ntype _GetSlugs<\n Route extends string,\n SplitRoute extends string[] = Split<Route, '/'>,\n Result extends string[] = [],\n> = SplitRoute extends []\n ? Result\n : SplitRoute extends [`${infer MaybeSlug}`, ...infer Rest]\n ? Rest extends string[]\n ? MaybeSlug extends `[${infer Slug}]`\n ? _GetSlugs<Route, Rest, [...Result, Slug]>\n : _GetSlugs<Route, Rest, Result>\n : never\n : Result;\n\nexport type GetSlugs<Route extends string> = _GetSlugs<Route>;\n\nexport type StaticSlugRoutePathsTuple<\n T extends string,\n Slugs extends unknown[] = GetSlugs<T>,\n Result extends string[] = [],\n> = Slugs extends []\n ? Result\n : Slugs extends [infer _, ...infer Rest]\n ? StaticSlugRoutePathsTuple<T, Rest, [...Result, string]>\n : never;\n\ntype StaticSlugRoutePaths<T extends string> =\n HasWildcardInPath<T> extends true\n ? string[] | string[][]\n : StaticSlugRoutePathsTuple<T> extends [string]\n ? string[]\n : StaticSlugRoutePathsTuple<T>[];\n\nexport type PathWithoutSlug<T> = T extends '/'\n ? T\n : IsValidPathInSlugPath<T> extends true\n ? HasSlugInPath<T, string> extends true\n ? never\n : T\n : never;\n\ntype PathWithStaticSlugs<T extends string> = T extends `/`\n ? T\n : IsValidPathInSlugPath<T> extends true\n ? T\n : never;\n\nexport type PathWithWildcard<\n Path,\n SlugKey extends string,\n WildSlugKey extends string,\n> = PathWithSlug<Path, SlugKey | `...${WildSlugKey}`>;\n\nexport type CreatePage = <Path extends string, SlugKey extends string, WildSlugKey extends string>(\n page: (\n | {\n render: 'static';\n path: PathWithoutSlug<Path>;\n component: FunctionComponent<RouteProps>;\n }\n | {\n render: 'static';\n path: PathWithStaticSlugs<Path>;\n staticPaths: StaticSlugRoutePaths<Path>;\n component: FunctionComponent<RouteProps & Record<SlugKey, string>>;\n }\n | {\n render: 'dynamic';\n path: PathWithoutSlug<Path>;\n component: FunctionComponent<RouteProps>;\n }\n | {\n render: 'dynamic';\n path: PathWithWildcard<Path, SlugKey, WildSlugKey>;\n component: FunctionComponent<\n RouteProps & Record<SlugKey, string> & Record<WildSlugKey, string[]>\n >;\n }\n ) & { unstable_disableSSR?: boolean }\n) => void;\n\nexport type CreateLayout = <T extends string>(layout: {\n render: 'static' | 'dynamic';\n path: PathWithoutSlug<T>;\n component: FunctionComponent<Omit<RouteProps, 'searchParams'> & { children: ReactNode }>;\n}) => void;\n\nexport function createPages(\n fn: (\n fns: {\n createPage: CreatePage;\n createLayout: CreateLayout;\n unstable_setBuildData: (path: string, data: unknown) => void;\n },\n opts: {\n unstable_buildConfig: BuildConfig | undefined;\n }\n ) => Promise<void>\n) {\n let configured = false;\n\n // TODO I think there's room for improvement to refactor these structures\n const staticPathSet = new Set<[string, PathSpec]>();\n const dynamicPagePathMap = new Map<string, [PathSpec, FunctionComponent<any>]>();\n const wildcardPagePathMap = new Map<string, [PathSpec, FunctionComponent<any>]>();\n const dynamicLayoutPathMap = new Map<string, [PathSpec, FunctionComponent<any>]>();\n const staticComponentMap = new Map<string, FunctionComponent<any>>();\n const noSsrSet = new WeakSet<PathSpec>();\n const buildDataMap = new Map<string, unknown>();\n\n const registerStaticComponent = (id: string, component: FunctionComponent<any>) => {\n if (staticComponentMap.has(id) && staticComponentMap.get(id) !== component) {\n throw new Error(`Duplicated component for: ${id}`);\n }\n staticComponentMap.set(id, component);\n };\n\n const createPage: CreatePage = (page) => {\n if (configured) {\n throw new Error('no longer available');\n }\n const pathSpec = parsePathWithSlug(page.path);\n if (page.unstable_disableSSR) {\n noSsrSet.add(pathSpec);\n }\n const { numSlugs, numWildcards } = (() => {\n let numSlugs = 0;\n let numWildcards = 0;\n for (const slug of pathSpec) {\n if (slug.type !== 'literal') {\n numSlugs++;\n }\n if (slug.type === 'wildcard') {\n numWildcards++;\n }\n }\n return { numSlugs, numWildcards };\n })();\n if (page.render === 'static' && numSlugs === 0) {\n staticPathSet.add([page.path, pathSpec]);\n const id = joinPath(page.path, 'page').replace(/^\\//, '');\n registerStaticComponent(id, page.component);\n } else if (page.render === 'static' && numSlugs > 0 && 'staticPaths' in page) {\n const staticPaths = page.staticPaths.map((item) =>\n (Array.isArray(item) ? item : [item]).map(sanitizeSlug)\n );\n for (const staticPath of staticPaths) {\n if (staticPath.length !== numSlugs && numWildcards === 0) {\n throw new Error('staticPaths does not match with slug pattern');\n }\n const mapping: Record<string, string | string[]> = {};\n let slugIndex = 0;\n const pathItems: string[] = [];\n pathSpec.forEach(({ type, name }) => {\n switch (type) {\n case 'literal':\n pathItems.push(name!);\n break;\n case 'wildcard':\n mapping[name!] = staticPath.slice(slugIndex);\n staticPath.slice(slugIndex++).forEach((slug) => {\n pathItems.push(slug);\n });\n break;\n case 'group':\n pathItems.push(staticPath[slugIndex++]!);\n mapping[name!] = pathItems[pathItems.length - 1]!;\n break;\n }\n });\n staticPathSet.add([page.path, pathItems.map((name) => ({ type: 'literal', name }))]);\n const id = joinPath(...pathItems, 'page');\n const WrappedComponent = (props: Record<string, unknown>) =>\n createElement(page.component as any, { ...props, ...mapping });\n registerStaticComponent(id, WrappedComponent);\n }\n } else if (page.render === 'dynamic' && numWildcards === 0) {\n if (dynamicPagePathMap.has(page.path)) {\n throw new Error(`Duplicated dynamic path: ${page.path}`);\n }\n dynamicPagePathMap.set(page.path, [pathSpec, page.component]);\n } else if (page.render === 'dynamic' && numWildcards === 1) {\n if (wildcardPagePathMap.has(page.path)) {\n throw new Error(`Duplicated dynamic path: ${page.path}`);\n }\n wildcardPagePathMap.set(page.path, [pathSpec, page.component]);\n } else {\n throw new Error('Invalid page configuration: ' + page.path);\n }\n };\n\n const createLayout: CreateLayout = (layout) => {\n if (configured) {\n throw new Error('no longer available');\n }\n if (layout.render === 'static') {\n const id = joinPath(layout.path, 'layout').replace(/^\\//, '');\n registerStaticComponent(id, layout.component);\n } else if (layout.render === 'dynamic') {\n if (dynamicLayoutPathMap.has(layout.path)) {\n throw new Error(`Duplicated dynamic path: ${layout.path}`);\n }\n const pathSpec = parsePathWithSlug(layout.path);\n dynamicLayoutPathMap.set(layout.path, [pathSpec, layout.component]);\n } else {\n throw new Error('Invalid layout configuration');\n }\n };\n\n const unstable_setBuildData = (path: string, data: unknown) => {\n buildDataMap.set(path, data);\n };\n\n let ready: Promise<void> | undefined;\n const configure = async (buildConfig?: BuildConfig) => {\n if (!configured && !ready) {\n ready = fn(\n { createPage, createLayout, unstable_setBuildData },\n { unstable_buildConfig: buildConfig }\n );\n await ready;\n configured = true;\n }\n await ready;\n };\n\n return unstable_defineRouter(\n async () => {\n await configure();\n const paths: {\n pattern: string;\n path: PathSpec;\n isStatic: boolean;\n noSsr: boolean;\n data: unknown;\n }[] = [];\n for (const [path, pathSpec] of staticPathSet) {\n const noSsr = noSsrSet.has(pathSpec);\n const isStatic = (() => {\n for (const [_, [layoutPathSpec]] of dynamicLayoutPathMap) {\n if (hasPathSpecPrefix(layoutPathSpec, pathSpec)) {\n return false;\n }\n }\n return true;\n })();\n\n paths.push({\n pattern: path2regexp(parsePathWithSlug(path)),\n path: pathSpec,\n isStatic,\n noSsr,\n data: buildDataMap.get(path),\n });\n }\n for (const [path, [pathSpec]] of dynamicPagePathMap) {\n const noSsr = noSsrSet.has(pathSpec);\n paths.push({\n pattern: path2regexp(parsePathWithSlug(path)),\n path: pathSpec,\n isStatic: false,\n noSsr,\n data: buildDataMap.get(path),\n });\n }\n for (const [path, [pathSpec]] of wildcardPagePathMap) {\n const noSsr = noSsrSet.has(pathSpec);\n paths.push({\n pattern: path2regexp(parsePathWithSlug(path)),\n path: pathSpec,\n isStatic: false,\n noSsr,\n data: buildDataMap.get(path),\n });\n }\n return paths;\n },\n async (id, { unstable_setShouldSkip, unstable_buildConfig }) => {\n await configure(unstable_buildConfig);\n const staticComponent = staticComponentMap.get(id);\n if (staticComponent) {\n unstable_setShouldSkip([]);\n return staticComponent;\n }\n for (const [_, [pathSpec, Component]] of dynamicPagePathMap) {\n const mapping = getPathMapping([...pathSpec, { type: 'literal', name: 'page' }], id);\n if (mapping) {\n if (Object.keys(mapping).length === 0) {\n unstable_setShouldSkip();\n return Component;\n }\n const WrappedComponent = (props: Record<string, unknown>) =>\n createElement(Component, { ...props, ...mapping });\n unstable_setShouldSkip();\n return WrappedComponent;\n }\n }\n for (const [_, [pathSpec, Component]] of wildcardPagePathMap) {\n const mapping = getPathMapping([...pathSpec, { type: 'literal', name: 'page' }], id);\n if (mapping) {\n const WrappedComponent = (props: Record<string, unknown>) =>\n createElement(Component, { ...props, ...mapping });\n unstable_setShouldSkip();\n return WrappedComponent;\n }\n }\n for (const [_, [pathSpec, Component]] of dynamicLayoutPathMap) {\n const mapping = getPathMapping([...pathSpec, { type: 'literal', name: 'layout' }], id);\n if (mapping) {\n if (Object.keys(mapping).length) {\n throw new Error('[Bug] layout should not have slugs');\n }\n unstable_setShouldSkip();\n return Component;\n }\n }\n unstable_setShouldSkip([]); // negative cache\n return null; // not found\n }\n );\n}\n"]}
@@ -1,30 +0,0 @@
1
- /**
2
- * Copyright © 2024 650 Industries.
3
- * Copyright © 2024 2023 Daishi Kato
4
- *
5
- * This source code is licensed under the MIT license found in the
6
- * LICENSE file in the root directory of this source tree.
7
- */
8
- import type { FunctionComponent, ReactNode } from 'react';
9
- import type { RouteProps, ShouldSkip } from './common';
10
- import type { PathSpec } from '../path';
11
- import { defineEntries } from '../server';
12
- import type { BuildConfig } from '../server';
13
- type RoutePropsForLayout = Omit<RouteProps, 'searchParams'> & {
14
- children: ReactNode;
15
- };
16
- type ShouldSkipValue = ShouldSkip[number][1];
17
- export declare function unstable_defineRouter(getPathConfig: () => Promise<Iterable<{
18
- pattern: string;
19
- path: PathSpec;
20
- isStatic?: boolean;
21
- noSsr?: boolean;
22
- data?: unknown;
23
- }>>, getComponent: (componentId: string, // "**/layout" or "**/page"
24
- options: {
25
- unstable_setShouldSkip: (val?: ShouldSkipValue) => void;
26
- unstable_buildConfig: BuildConfig | undefined;
27
- }) => Promise<FunctionComponent<RouteProps> | FunctionComponent<RoutePropsForLayout> | null>): ReturnType<typeof defineEntries>;
28
- export declare function unstable_redirect(pathname: string, searchParams?: URLSearchParams, skip?: string[]): void;
29
- export {};
30
- //# sourceMappingURL=defineRouter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"defineRouter.d.ts","sourceRoot":"","sources":["../../../src/rsc/router/defineRouter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAkB,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAW1E,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,aAAa,EAAY,MAAM,WAAW,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAA+C,MAAM,WAAW,CAAC;AAE1F,KAAK,mBAAmB,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG;IAC5D,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,KAAK,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAgB7C,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,OAAO,CAC1B,QAAQ,CAAC;IACP,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC,CACH,EACD,YAAY,EAAE,CACZ,WAAW,EAAE,MAAM,EAAE,2BAA2B;AAChD,OAAO,EAAE;IAEP,sBAAsB,EAAE,CAAC,GAAG,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;IACxD,oBAAoB,EAAE,WAAW,GAAG,SAAS,CAAC;CAC/C,KACE,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,GAC1F,UAAU,CAAC,OAAO,aAAa,CAAC,CAmKlC;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,eAAe,EAC9B,IAAI,CAAC,EAAE,MAAM,EAAE,QAUhB"}
@@ -1,171 +0,0 @@
1
- "use strict";
2
- /**
3
- * Copyright © 2024 650 Industries.
4
- * Copyright © 2024 2023 Daishi Kato
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE file in the root directory of this source tree.
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.unstable_defineRouter = unstable_defineRouter;
11
- exports.unstable_redirect = unstable_redirect;
12
- const react_1 = require("react");
13
- const client_1 = require("./client");
14
- const common_1 = require("./common");
15
- const host_1 = require("./host");
16
- const path_1 = require("../path");
17
- const server_1 = require("../server");
18
- const safeJsonParse = (str) => {
19
- if (typeof str === 'string') {
20
- try {
21
- const obj = JSON.parse(str);
22
- if (typeof obj === 'object') {
23
- return obj;
24
- }
25
- }
26
- catch {
27
- // ignore
28
- }
29
- }
30
- return undefined;
31
- };
32
- function unstable_defineRouter(getPathConfig, getComponent) {
33
- let cachedPathConfig;
34
- const getMyPathConfig = async (buildConfig) => {
35
- if (buildConfig) {
36
- return buildConfig;
37
- }
38
- if (!cachedPathConfig) {
39
- cachedPathConfig = Array.from(await getPathConfig()).map((item) => {
40
- const is404 = item.path.length === 1 &&
41
- item.path[0].type === 'literal' &&
42
- item.path[0].name === '404';
43
- return {
44
- pattern: item.pattern,
45
- pathname: item.path,
46
- isStatic: item.isStatic,
47
- customData: { is404, noSsr: !!item.noSsr, data: item.data },
48
- };
49
- });
50
- }
51
- return cachedPathConfig;
52
- };
53
- const existsPath = async (pathname, buildConfig) => {
54
- const pathConfig = await getMyPathConfig(buildConfig);
55
- const found = pathConfig.find(({ pathname: pathSpec }) => (0, path_1.getPathMapping)(pathSpec, pathname));
56
- return found
57
- ? found.customData.noSsr
58
- ? ['FOUND', 'NO_SSR']
59
- : ['FOUND']
60
- : pathConfig.some(({ customData: { is404 } }) => is404) // FIXMEs should avoid re-computation
61
- ? ['NOT_FOUND', 'HAS_404']
62
- : ['NOT_FOUND'];
63
- };
64
- const renderEntries = async (input, { params, buildConfig }) => {
65
- const pathname = (0, common_1.parseInputString)(input);
66
- if ((await existsPath(pathname, buildConfig))[0] === 'NOT_FOUND') {
67
- return null;
68
- }
69
- const shouldSkipObj = {};
70
- const parsedParams = safeJsonParse(params);
71
- const query = typeof parsedParams?.query === 'string' ? parsedParams.query : '';
72
- const skip = Array.isArray(parsedParams?.skip) ? parsedParams?.skip : [];
73
- const componentIds = (0, common_1.getComponentIds)(pathname);
74
- const entries = (await Promise.all(componentIds.map(async (id) => {
75
- if (skip?.includes(id)) {
76
- return [];
77
- }
78
- const setShouldSkip = (val) => {
79
- if (val) {
80
- shouldSkipObj[id] = val;
81
- }
82
- else {
83
- delete shouldSkipObj[id];
84
- }
85
- };
86
- const component = await getComponent(id, {
87
- unstable_setShouldSkip: setShouldSkip,
88
- unstable_buildConfig: buildConfig,
89
- });
90
- if (!component) {
91
- return [];
92
- }
93
- const element = (0, react_1.createElement)(component, id.endsWith('/layout') ? { path: pathname } : { path: pathname, query }, (0, react_1.createElement)(host_1.Children));
94
- return [[id, element]];
95
- }))).flat();
96
- entries.push([common_1.SHOULD_SKIP_ID, Object.entries(shouldSkipObj)]);
97
- entries.push([common_1.LOCATION_ID, [pathname, query]]);
98
- return Object.fromEntries(entries);
99
- };
100
- const getBuildConfig = async (unstable_collectClientModules) => {
101
- const pathConfig = await getMyPathConfig();
102
- const path2moduleIds = {};
103
- for (const { pathname: pathSpec } of pathConfig) {
104
- if (pathSpec.some(({ type }) => type !== 'literal')) {
105
- continue;
106
- }
107
- const pathname = '/' + pathSpec.map(({ name }) => name).join('/');
108
- const input = (0, common_1.getInputString)(pathname);
109
- const moduleIds = await unstable_collectClientModules(input);
110
- path2moduleIds[pathname] = moduleIds;
111
- }
112
- const customCode = `
113
- globalThis.__EXPO_ROUTER_PREFETCH__ = (path) => {
114
- const path2ids = ${JSON.stringify(path2moduleIds)};
115
- for (const id of path2ids[path] || []) {
116
- import(id);
117
- }
118
- };`;
119
- const buildConfig = [];
120
- for (const { pathname: pathSpec, isStatic, customData } of pathConfig) {
121
- const entries = [];
122
- if (pathSpec.every(({ type }) => type === 'literal')) {
123
- const pathname = '/' + pathSpec.map(({ name }) => name).join('/');
124
- const input = (0, common_1.getInputString)(pathname);
125
- entries.push({ input, isStatic });
126
- }
127
- buildConfig.push({
128
- pathname: pathSpec,
129
- isStatic,
130
- entries,
131
- customCode,
132
- customData,
133
- });
134
- }
135
- return buildConfig;
136
- };
137
- const getSsrConfig = async (pathname, { searchParams, buildConfig }) => {
138
- const pathStatus = await existsPath(pathname, buildConfig);
139
- if (pathStatus[1] === 'NO_SSR') {
140
- return null;
141
- }
142
- if (pathStatus[0] === 'NOT_FOUND') {
143
- if (pathStatus[1] === 'HAS_404') {
144
- pathname = '/404';
145
- }
146
- else {
147
- return null;
148
- }
149
- }
150
- const componentIds = (0, common_1.getComponentIds)(pathname);
151
- const input = (0, common_1.getInputString)(pathname);
152
- const html = (0, react_1.createElement)(client_1.ServerRouter, { route: { path: pathname, query: searchParams.toString(), hash: '' } }, componentIds.reduceRight((acc, id) => (0, react_1.createElement)(host_1.Slot, { id, fallback: acc }, acc), null));
153
- return {
154
- input,
155
- params: JSON.stringify({ query: searchParams.toString() }),
156
- html,
157
- };
158
- };
159
- return { renderEntries, getBuildConfig, getSsrConfig };
160
- }
161
- function unstable_redirect(pathname, searchParams, skip) {
162
- if (skip) {
163
- searchParams = new URLSearchParams(searchParams);
164
- for (const id of skip) {
165
- searchParams.append(common_1.PARAM_KEY_SKIP, id);
166
- }
167
- }
168
- const input = (0, common_1.getInputString)(pathname);
169
- (0, server_1.rerender)(input, searchParams);
170
- }
171
- //# sourceMappingURL=defineRouter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"defineRouter.js","sourceRoot":"","sources":["../../../src/rsc/router/defineRouter.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 { createElement } from 'react';\nimport type { ComponentProps, FunctionComponent, ReactNode } from 'react';\n\nimport { ServerRouter } from './client';\nimport {\n getComponentIds,\n getInputString,\n parseInputString,\n PARAM_KEY_SKIP,\n SHOULD_SKIP_ID,\n LOCATION_ID,\n} from './common';\nimport type { RouteProps, ShouldSkip } from './common';\nimport { Children, Slot } from './host';\nimport { getPathMapping } from '../path';\nimport type { PathSpec } from '../path';\nimport { defineEntries, rerender } from '../server';\nimport type { BuildConfig, RenderEntries, GetBuildConfig, GetSsrConfig } from '../server';\n\ntype RoutePropsForLayout = Omit<RouteProps, 'searchParams'> & {\n children: ReactNode;\n};\n\ntype ShouldSkipValue = ShouldSkip[number][1];\n\nconst safeJsonParse = (str: unknown) => {\n if (typeof str === 'string') {\n try {\n const obj = JSON.parse(str);\n if (typeof obj === 'object') {\n return obj as Record<string, unknown>;\n }\n } catch {\n // ignore\n }\n }\n return undefined;\n};\n\nexport function unstable_defineRouter(\n getPathConfig: () => Promise<\n Iterable<{\n pattern: string;\n path: PathSpec;\n isStatic?: boolean;\n noSsr?: boolean;\n data?: unknown; // For build: put in customData\n }>\n >,\n getComponent: (\n componentId: string, // \"**/layout\" or \"**/page\"\n options: {\n // TODO setShouldSkip API is too hard to understand\n unstable_setShouldSkip: (val?: ShouldSkipValue) => void;\n unstable_buildConfig: BuildConfig | undefined;\n }\n ) => Promise<FunctionComponent<RouteProps> | FunctionComponent<RoutePropsForLayout> | null>\n): ReturnType<typeof defineEntries> {\n type MyPathConfig = {\n pattern: string;\n pathname: PathSpec;\n isStatic?: boolean | undefined;\n customData: { noSsr?: boolean; is404: boolean; data: unknown };\n }[];\n let cachedPathConfig: MyPathConfig | undefined;\n const getMyPathConfig = async (buildConfig?: BuildConfig): Promise<MyPathConfig> => {\n if (buildConfig) {\n return buildConfig as MyPathConfig;\n }\n if (!cachedPathConfig) {\n cachedPathConfig = Array.from(await getPathConfig()).map((item) => {\n const is404 =\n item.path.length === 1 &&\n item.path[0]!.type === 'literal' &&\n item.path[0]!.name === '404';\n return {\n pattern: item.pattern,\n pathname: item.path,\n isStatic: item.isStatic,\n customData: { is404, noSsr: !!item.noSsr, data: item.data },\n };\n });\n }\n return cachedPathConfig;\n };\n const existsPath = async (\n pathname: string,\n buildConfig: BuildConfig | undefined\n ): Promise<['FOUND', 'NO_SSR'?] | ['NOT_FOUND', 'HAS_404'?]> => {\n const pathConfig = await getMyPathConfig(buildConfig);\n const found = pathConfig.find(({ pathname: pathSpec }) => getPathMapping(pathSpec, pathname));\n return found\n ? found.customData.noSsr\n ? ['FOUND', 'NO_SSR']\n : ['FOUND']\n : pathConfig.some(({ customData: { is404 } }) => is404) // FIXMEs should avoid re-computation\n ? ['NOT_FOUND', 'HAS_404']\n : ['NOT_FOUND'];\n };\n const renderEntries: RenderEntries = async (input, { params, buildConfig }) => {\n const pathname = parseInputString(input);\n if ((await existsPath(pathname, buildConfig))[0] === 'NOT_FOUND') {\n return null;\n }\n const shouldSkipObj: {\n [componentId: ShouldSkip[number][0]]: ShouldSkip[number][1];\n } = {};\n\n const parsedParams = safeJsonParse(params);\n\n const query = typeof parsedParams?.query === 'string' ? parsedParams.query : '';\n const skip = Array.isArray(parsedParams?.skip) ? (parsedParams?.skip as unknown[]) : [];\n const componentIds = getComponentIds(pathname);\n const entries: (readonly [string, ReactNode])[] = (\n await Promise.all(\n componentIds.map(async (id) => {\n if (skip?.includes(id)) {\n return [];\n }\n const setShouldSkip = (val?: ShouldSkipValue) => {\n if (val) {\n shouldSkipObj[id] = val;\n } else {\n delete shouldSkipObj[id];\n }\n };\n const component = await getComponent(id, {\n unstable_setShouldSkip: setShouldSkip,\n unstable_buildConfig: buildConfig,\n });\n if (!component) {\n return [];\n }\n const element = createElement(\n component as FunctionComponent<{\n path: string;\n query?: string;\n }>,\n id.endsWith('/layout') ? { path: pathname } : { path: pathname, query },\n createElement(Children)\n );\n return [[id, element]] as const;\n })\n )\n ).flat();\n entries.push([SHOULD_SKIP_ID, Object.entries(shouldSkipObj)]);\n entries.push([LOCATION_ID, [pathname, query]]);\n return Object.fromEntries(entries);\n };\n\n const getBuildConfig: GetBuildConfig = async (unstable_collectClientModules) => {\n const pathConfig = await getMyPathConfig();\n const path2moduleIds: Record<string, string[]> = {};\n\n for (const { pathname: pathSpec } of pathConfig) {\n if (pathSpec.some(({ type }) => type !== 'literal')) {\n continue;\n }\n\n const pathname = '/' + pathSpec.map(({ name }) => name).join('/');\n const input = getInputString(pathname);\n const moduleIds = await unstable_collectClientModules(input);\n path2moduleIds[pathname] = moduleIds;\n }\n const customCode = `\nglobalThis.__EXPO_ROUTER_PREFETCH__ = (path) => {\n const path2ids = ${JSON.stringify(path2moduleIds)};\n for (const id of path2ids[path] || []) {\n import(id);\n }\n};`;\n const buildConfig: BuildConfig = [];\n for (const { pathname: pathSpec, isStatic, customData } of pathConfig) {\n const entries: BuildConfig[number]['entries'] = [];\n if (pathSpec.every(({ type }) => type === 'literal')) {\n const pathname = '/' + pathSpec.map(({ name }) => name).join('/');\n const input = getInputString(pathname);\n entries.push({ input, isStatic });\n }\n buildConfig.push({\n pathname: pathSpec,\n isStatic,\n entries,\n customCode,\n customData,\n });\n }\n return buildConfig;\n };\n\n const getSsrConfig: GetSsrConfig = async (pathname, { searchParams, buildConfig }) => {\n const pathStatus = await existsPath(pathname, buildConfig);\n if (pathStatus[1] === 'NO_SSR') {\n return null;\n }\n if (pathStatus[0] === 'NOT_FOUND') {\n if (pathStatus[1] === 'HAS_404') {\n pathname = '/404';\n } else {\n return null;\n }\n }\n const componentIds = getComponentIds(pathname);\n const input = getInputString(pathname);\n const html = createElement(\n ServerRouter as FunctionComponent<Omit<ComponentProps<typeof ServerRouter>, 'children'>>,\n { route: { path: pathname, query: searchParams.toString(), hash: '' } },\n componentIds.reduceRight(\n (acc: ReactNode, id) => createElement(Slot, { id, fallback: acc }, acc),\n null\n )\n );\n return {\n input,\n params: JSON.stringify({ query: searchParams.toString() }),\n html,\n };\n };\n\n return { renderEntries, getBuildConfig, getSsrConfig };\n}\n\nexport function unstable_redirect(\n pathname: string,\n searchParams?: URLSearchParams,\n skip?: string[]\n) {\n if (skip) {\n searchParams = new URLSearchParams(searchParams);\n for (const id of skip) {\n searchParams.append(PARAM_KEY_SKIP, id);\n }\n }\n const input = getInputString(pathname);\n rerender(input, searchParams);\n}\n"]}
@@ -1,3 +0,0 @@
1
- declare const _default: (getRouteOptions?: import("../../getRoutes").Options) => import("../server").EntriesDev;
2
- export default _default;
3
- //# sourceMappingURL=expo-definedRouter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expo-definedRouter.d.ts","sourceRoot":"","sources":["../../../src/rsc/router/expo-definedRouter.ts"],"names":[],"mappings":";AAmBA,wBAyHG"}