one 1.2.47 → 1.2.49

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 (818) hide show
  1. package/dist/cjs/Root.js +6 -1
  2. package/dist/cjs/Root.js.map +1 -1
  3. package/dist/cjs/Root.native.js.map +1 -1
  4. package/dist/cjs/babel-plugins/one-router-metro.js +4 -1
  5. package/dist/cjs/babel-plugins/one-router-metro.js.map +1 -1
  6. package/dist/cjs/babel-plugins/one-router-metro.native.js.map +1 -1
  7. package/dist/cjs/babel-plugins/remove-server-code.js +3 -1
  8. package/dist/cjs/babel-plugins/remove-server-code.js.map +1 -1
  9. package/dist/cjs/babel-plugins/remove-server-code.native.js.map +1 -1
  10. package/dist/cjs/cli/build.js +31 -8
  11. package/dist/cjs/cli/build.js.map +1 -1
  12. package/dist/cjs/cli/build.native.js.map +1 -1
  13. package/dist/cjs/cli/buildPage.js +14 -4
  14. package/dist/cjs/cli/buildPage.js.map +1 -1
  15. package/dist/cjs/cli/buildPage.native.js.map +1 -1
  16. package/dist/cjs/cli/generateRoutes.js +3 -1
  17. package/dist/cjs/cli/generateRoutes.js.map +1 -1
  18. package/dist/cjs/cli/generateRoutes.native.js.map +1 -1
  19. package/dist/cjs/cli/generateSitemap.js.map +1 -1
  20. package/dist/cjs/cli/generateSitemap.native.js.map +1 -1
  21. package/dist/cjs/cli/generateSitemap.test.js +14 -4
  22. package/dist/cjs/cli/generateSitemap.test.js.map +1 -1
  23. package/dist/cjs/cli/generateSitemap.test.native.js.map +1 -1
  24. package/dist/cjs/cli/main.js +4 -2
  25. package/dist/cjs/cli/main.js.map +1 -1
  26. package/dist/cjs/cli/main.native.js.map +1 -1
  27. package/dist/cjs/cli/prebuild.js.map +1 -1
  28. package/dist/cjs/cli/prebuild.native.js.map +1 -1
  29. package/dist/cjs/clientLoaderResolver.js.map +1 -1
  30. package/dist/cjs/clientLoaderResolver.native.js.map +1 -1
  31. package/dist/cjs/config.js +3 -1
  32. package/dist/cjs/config.js.map +1 -1
  33. package/dist/cjs/config.native.js.map +1 -1
  34. package/dist/cjs/constants.js.map +1 -1
  35. package/dist/cjs/constants.native.js.map +1 -1
  36. package/dist/cjs/createApp.js +9 -1
  37. package/dist/cjs/createApp.js.map +1 -1
  38. package/dist/cjs/createHandleRequest.js +9 -3
  39. package/dist/cjs/createHandleRequest.js.map +1 -1
  40. package/dist/cjs/createHandleRequest.native.js.map +1 -1
  41. package/dist/cjs/fork/__tests__/getPathFromState.test.js +90 -88
  42. package/dist/cjs/fork/__tests__/getPathFromState.test.js.map +1 -1
  43. package/dist/cjs/fork/__tests__/getPathFromState.test.native.js.map +1 -1
  44. package/dist/cjs/fork/__tests__/getStateFromPath.test.js +163 -86
  45. package/dist/cjs/fork/__tests__/getStateFromPath.test.js.map +1 -1
  46. package/dist/cjs/fork/__tests__/getStateFromPath.test.native.js.map +1 -1
  47. package/dist/cjs/fork/_shared.js.map +1 -1
  48. package/dist/cjs/fork/_shared.native.js.map +1 -1
  49. package/dist/cjs/fork/extractPathFromURL.js.map +1 -1
  50. package/dist/cjs/fork/extractPathFromURL.native.js.map +1 -1
  51. package/dist/cjs/fork/getPathFromState-mods.js +4 -1
  52. package/dist/cjs/fork/getPathFromState-mods.js.map +1 -1
  53. package/dist/cjs/fork/getPathFromState-mods.native.js.map +1 -1
  54. package/dist/cjs/fork/getPathFromState.js +3 -1
  55. package/dist/cjs/fork/getPathFromState.js.map +1 -1
  56. package/dist/cjs/fork/getPathFromState.native.js.map +1 -1
  57. package/dist/cjs/fork/getStateFromPath-mods.js.map +1 -1
  58. package/dist/cjs/fork/getStateFromPath-mods.native.js.map +1 -1
  59. package/dist/cjs/fork/getStateFromPath.js +7 -1
  60. package/dist/cjs/fork/getStateFromPath.js.map +1 -1
  61. package/dist/cjs/fork/getStateFromPath.native.js.map +1 -1
  62. package/dist/cjs/fork/getStateFromPath.test.js +21 -8
  63. package/dist/cjs/fork/getStateFromPath.test.js.map +1 -1
  64. package/dist/cjs/fork/getStateFromPath.test.native.js.map +1 -1
  65. package/dist/cjs/fork/useBackButton.js.map +1 -1
  66. package/dist/cjs/fork/useDocumentTitle.js +4 -1
  67. package/dist/cjs/fork/useDocumentTitle.js.map +1 -1
  68. package/dist/cjs/fork/useLinking.js +4 -1
  69. package/dist/cjs/fork/useLinking.js.map +1 -1
  70. package/dist/cjs/fork/validatePathConfig.js.map +1 -1
  71. package/dist/cjs/fork/validatePathConfig.native.js.map +1 -1
  72. package/dist/cjs/hooks.js.map +1 -1
  73. package/dist/cjs/hooks.native.js.map +1 -1
  74. package/dist/cjs/index.js.map +1 -1
  75. package/dist/cjs/layouts/Tabs.js.map +1 -1
  76. package/dist/cjs/layouts/Tabs.native.js.map +1 -1
  77. package/dist/cjs/layouts/withLayoutContext.js +10 -8
  78. package/dist/cjs/layouts/withLayoutContext.js.map +1 -1
  79. package/dist/cjs/layouts/withLayoutContext.native.js.map +1 -1
  80. package/dist/cjs/link/Link.js.map +1 -1
  81. package/dist/cjs/link/Link.native.js.map +1 -1
  82. package/dist/cjs/link/linking.js +3 -1
  83. package/dist/cjs/link/linking.js.map +1 -1
  84. package/dist/cjs/link/linking.native.js.map +1 -1
  85. package/dist/cjs/link/useLinkTo.js.map +1 -1
  86. package/dist/cjs/link/useLinkTo.native.js.map +1 -1
  87. package/dist/cjs/link/useLoadedNavigation.js.map +1 -1
  88. package/dist/cjs/link/useLoadedNavigation.native.js.map +1 -1
  89. package/dist/cjs/metro-config/getViteMetroPluginOptions.cjs +6 -8
  90. package/dist/cjs/metro-config/getViteMetroPluginOptions.js +8 -10
  91. package/dist/cjs/metro-config/getViteMetroPluginOptions.js.map +1 -1
  92. package/dist/cjs/metro-config/getViteMetroPluginOptions.native.js +9 -11
  93. package/dist/cjs/metro-config/getViteMetroPluginOptions.native.js.map +1 -1
  94. package/dist/cjs/router/Route.js.map +1 -1
  95. package/dist/cjs/router/Route.native.js.map +1 -1
  96. package/dist/cjs/router/RouteInfoContext.js +7 -1
  97. package/dist/cjs/router/RouteInfoContext.js.map +1 -1
  98. package/dist/cjs/router/RouteInfoContext.native.js.map +1 -1
  99. package/dist/cjs/router/filterRootHTML.js.map +1 -1
  100. package/dist/cjs/router/filterRootHTML.native.js.map +1 -1
  101. package/dist/cjs/router/getLinkingConfig.js.map +1 -1
  102. package/dist/cjs/router/getLinkingConfig.native.js.map +1 -1
  103. package/dist/cjs/router/getNormalizedStatePath.js.map +1 -1
  104. package/dist/cjs/router/getNormalizedStatePath.native.js.map +1 -1
  105. package/dist/cjs/router/getRoutes.js +3 -1
  106. package/dist/cjs/router/getRoutes.js.map +1 -1
  107. package/dist/cjs/router/getRoutes.native.js.map +1 -1
  108. package/dist/cjs/router/linkingConfig.js.map +1 -1
  109. package/dist/cjs/router/linkingConfig.native.js.map +1 -1
  110. package/dist/cjs/router/matchers.cjs +1 -1
  111. package/dist/cjs/router/matchers.js +1 -1
  112. package/dist/cjs/router/matchers.js.map +1 -1
  113. package/dist/cjs/router/matchers.native.js +1 -1
  114. package/dist/cjs/router/matchers.native.js.map +1 -1
  115. package/dist/cjs/router/matchers.test.js +6 -2
  116. package/dist/cjs/router/matchers.test.js.map +1 -1
  117. package/dist/cjs/router/matchers.test.native.js.map +1 -1
  118. package/dist/cjs/router/router.js +13 -3
  119. package/dist/cjs/router/router.js.map +1 -1
  120. package/dist/cjs/router/router.native.js.map +1 -1
  121. package/dist/cjs/router/useNavigation.js.map +1 -1
  122. package/dist/cjs/router/useNavigation.native.js.map +1 -1
  123. package/dist/cjs/router/useScreens.cjs +73 -51
  124. package/dist/cjs/router/useScreens.js +72 -45
  125. package/dist/cjs/router/useScreens.js.map +1 -1
  126. package/dist/cjs/router/useScreens.native.js +30 -19
  127. package/dist/cjs/router/useScreens.native.js.map +1 -1
  128. package/dist/cjs/router/useViteRoutes.cjs +26 -8
  129. package/dist/cjs/router/useViteRoutes.js +28 -9
  130. package/dist/cjs/router/useViteRoutes.js.map +1 -1
  131. package/dist/cjs/router/useViteRoutes.native.js +33 -13
  132. package/dist/cjs/router/useViteRoutes.native.js.map +1 -1
  133. package/dist/cjs/router/utils/getNavigateAction.js.map +1 -1
  134. package/dist/cjs/router/utils/getNavigateAction.native.js.map +1 -1
  135. package/dist/cjs/server/createRoutesManifest.js.map +1 -1
  136. package/dist/cjs/server/createRoutesManifest.native.js.map +1 -1
  137. package/dist/cjs/server/getServerManifest.js +3 -1
  138. package/dist/cjs/server/getServerManifest.js.map +1 -1
  139. package/dist/cjs/server/getServerManifest.native.js.map +1 -1
  140. package/dist/cjs/server/oneServe.js +9 -2
  141. package/dist/cjs/server/oneServe.js.map +1 -1
  142. package/dist/cjs/server/oneServe.native.js.map +1 -1
  143. package/dist/cjs/server/setupBuildOptions.js.map +1 -1
  144. package/dist/cjs/server/setupBuildOptions.native.js.map +1 -1
  145. package/dist/cjs/server/staticHtmlFetcher.js.map +1 -1
  146. package/dist/cjs/server/staticHtmlFetcher.native.js.map +1 -1
  147. package/dist/cjs/server-render.js.map +1 -1
  148. package/dist/cjs/server-render.native.js.map +1 -1
  149. package/dist/cjs/typed-routes/getTypedRoutesDeclarationFile.js +14 -2
  150. package/dist/cjs/typed-routes/getTypedRoutesDeclarationFile.js.map +1 -1
  151. package/dist/cjs/typed-routes/getTypedRoutesDeclarationFile.native.js.map +1 -1
  152. package/dist/cjs/typed-routes/injectRouteHelpers.js +4 -1
  153. package/dist/cjs/typed-routes/injectRouteHelpers.js.map +1 -1
  154. package/dist/cjs/typed-routes/injectRouteHelpers.native.js.map +1 -1
  155. package/dist/cjs/ui/Slot.js.map +1 -1
  156. package/dist/cjs/ui/Slot.native.js.map +1 -1
  157. package/dist/cjs/ui/TabContext.js +3 -1
  158. package/dist/cjs/ui/TabContext.js.map +1 -1
  159. package/dist/cjs/ui/TabContext.native.js.map +1 -1
  160. package/dist/cjs/ui/TabRouter.js.map +1 -1
  161. package/dist/cjs/ui/TabRouter.native.js.map +1 -1
  162. package/dist/cjs/ui/TabTrigger.js +17 -2
  163. package/dist/cjs/ui/TabTrigger.js.map +1 -1
  164. package/dist/cjs/ui/TabTrigger.native.js.map +1 -1
  165. package/dist/cjs/ui/Tabs.js +5 -1
  166. package/dist/cjs/ui/Tabs.js.map +1 -1
  167. package/dist/cjs/ui/Tabs.native.js.map +1 -1
  168. package/dist/cjs/ui/common.js +3 -1
  169. package/dist/cjs/ui/common.js.map +1 -1
  170. package/dist/cjs/ui/common.native.js.map +1 -1
  171. package/dist/cjs/useLoader.js +4 -1
  172. package/dist/cjs/useLoader.js.map +1 -1
  173. package/dist/cjs/useLoader.native.js.map +1 -1
  174. package/dist/cjs/utils/cleanUrl.js.map +1 -1
  175. package/dist/cjs/utils/cleanUrl.native.js.map +1 -1
  176. package/dist/cjs/utils/url.js +3 -1
  177. package/dist/cjs/utils/url.js.map +1 -1
  178. package/dist/cjs/utils/url.native.js.map +1 -1
  179. package/dist/cjs/vercel/build/buildVercelOutputDirectory.js +29 -10
  180. package/dist/cjs/vercel/build/buildVercelOutputDirectory.js.map +1 -1
  181. package/dist/cjs/vercel/build/buildVercelOutputDirectory.native.js.map +1 -1
  182. package/dist/cjs/vercel/build/generate/createApiServerlessFunction.js +11 -3
  183. package/dist/cjs/vercel/build/generate/createApiServerlessFunction.js.map +1 -1
  184. package/dist/cjs/vercel/build/generate/createApiServerlessFunction.native.js.map +1 -1
  185. package/dist/cjs/vercel/build/generate/createSsrServerlessFunction.js +9 -2
  186. package/dist/cjs/vercel/build/generate/createSsrServerlessFunction.js.map +1 -1
  187. package/dist/cjs/vercel/build/generate/createSsrServerlessFunction.native.js.map +1 -1
  188. package/dist/cjs/vercel/build/getPathFromRoute.js +4 -1
  189. package/dist/cjs/vercel/build/getPathFromRoute.js.map +1 -1
  190. package/dist/cjs/vercel/build/getPathFromRoute.native.js.map +1 -1
  191. package/dist/cjs/views/Navigator.js +16 -8
  192. package/dist/cjs/views/Navigator.js.map +1 -1
  193. package/dist/cjs/views/Navigator.native.js.map +1 -1
  194. package/dist/cjs/views/RootErrorBoundary.js +4 -2
  195. package/dist/cjs/views/RootErrorBoundary.js.map +1 -1
  196. package/dist/cjs/views/RootErrorBoundary.native.js.map +1 -1
  197. package/dist/cjs/views/Screen.js +4 -1
  198. package/dist/cjs/views/Screen.js.map +1 -1
  199. package/dist/cjs/views/Screen.native.js.map +1 -1
  200. package/dist/cjs/vite/DevHead.cjs +14 -0
  201. package/dist/cjs/vite/DevHead.js +18 -0
  202. package/dist/cjs/vite/DevHead.js.map +1 -1
  203. package/dist/cjs/vite/loadConfig.js +6 -2
  204. package/dist/cjs/vite/loadConfig.js.map +1 -1
  205. package/dist/cjs/vite/loadConfig.native.js.map +1 -1
  206. package/dist/cjs/vite/one-server-only.js +3 -1
  207. package/dist/cjs/vite/one-server-only.js.map +1 -1
  208. package/dist/cjs/vite/one.cjs +9 -2
  209. package/dist/cjs/vite/one.js +18 -5
  210. package/dist/cjs/vite/one.js.map +1 -1
  211. package/dist/cjs/vite/one.native.js +17 -12
  212. package/dist/cjs/vite/one.native.js.map +1 -1
  213. package/dist/cjs/vite/plugins/SSRCSSPlugin.js +5 -1
  214. package/dist/cjs/vite/plugins/SSRCSSPlugin.js.map +1 -1
  215. package/dist/cjs/vite/plugins/SSRCSSPlugin.native.js.map +1 -1
  216. package/dist/cjs/vite/plugins/clientTreeShakePlugin.js +8 -2
  217. package/dist/cjs/vite/plugins/clientTreeShakePlugin.js.map +1 -1
  218. package/dist/cjs/vite/plugins/clientTreeShakePlugin.native.js.map +1 -1
  219. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.cjs +1 -1
  220. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.js +12 -5
  221. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.js.map +1 -1
  222. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js +4 -1
  223. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js.map +1 -1
  224. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.cjs +1 -1
  225. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.js +1 -1
  226. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.js.map +1 -1
  227. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.native.js +6 -3
  228. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.native.js.map +1 -1
  229. package/dist/cjs/vite/plugins/removeReactNativeWebAnimatedPlugin.js.map +1 -1
  230. package/dist/cjs/vite/plugins/removeReactNativeWebAnimatedPlugin.native.js.map +1 -1
  231. package/dist/cjs/vite/plugins/virtualEntryPlugin.js +13 -3
  232. package/dist/cjs/vite/plugins/virtualEntryPlugin.js.map +1 -1
  233. package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js.map +1 -1
  234. package/dist/cjs/vite/replaceLoader.js +4 -1
  235. package/dist/cjs/vite/replaceLoader.js.map +1 -1
  236. package/dist/cjs/vite/replaceLoader.native.js.map +1 -1
  237. package/dist/cjs/vite/resolveResponse.js.map +1 -1
  238. package/dist/cjs/vite/resolveResponse.native.js.map +1 -1
  239. package/dist/cjs/zero/subscribeToQuery.js.map +1 -1
  240. package/dist/cjs/zero/subscribeToQuery.native.js.map +1 -1
  241. package/dist/cjs/zero/useQueryZero.js +3 -1
  242. package/dist/cjs/zero/useQueryZero.js.map +1 -1
  243. package/dist/cjs/zero/useQueryZero.native.js.map +1 -1
  244. package/dist/esm/Root.js +6 -1
  245. package/dist/esm/Root.js.map +1 -1
  246. package/dist/esm/Root.mjs.map +1 -1
  247. package/dist/esm/Root.native.js.map +1 -1
  248. package/dist/esm/babel-plugins/one-router-metro.js +4 -1
  249. package/dist/esm/babel-plugins/one-router-metro.js.map +1 -1
  250. package/dist/esm/babel-plugins/one-router-metro.mjs.map +1 -1
  251. package/dist/esm/babel-plugins/one-router-metro.native.js.map +1 -1
  252. package/dist/esm/babel-plugins/remove-server-code.js +7 -2
  253. package/dist/esm/babel-plugins/remove-server-code.js.map +1 -1
  254. package/dist/esm/babel-plugins/remove-server-code.mjs.map +1 -1
  255. package/dist/esm/babel-plugins/remove-server-code.native.js.map +1 -1
  256. package/dist/esm/cli/build.js +31 -8
  257. package/dist/esm/cli/build.js.map +1 -1
  258. package/dist/esm/cli/build.mjs.map +1 -1
  259. package/dist/esm/cli/build.native.js.map +1 -1
  260. package/dist/esm/cli/buildPage.js +14 -4
  261. package/dist/esm/cli/buildPage.js.map +1 -1
  262. package/dist/esm/cli/buildPage.mjs.map +1 -1
  263. package/dist/esm/cli/buildPage.native.js.map +1 -1
  264. package/dist/esm/cli/generateRoutes.js +3 -1
  265. package/dist/esm/cli/generateRoutes.js.map +1 -1
  266. package/dist/esm/cli/generateRoutes.mjs.map +1 -1
  267. package/dist/esm/cli/generateRoutes.native.js.map +1 -1
  268. package/dist/esm/cli/generateSitemap.js.map +1 -1
  269. package/dist/esm/cli/generateSitemap.mjs.map +1 -1
  270. package/dist/esm/cli/generateSitemap.native.js.map +1 -1
  271. package/dist/esm/cli/generateSitemap.test.js +14 -4
  272. package/dist/esm/cli/generateSitemap.test.js.map +1 -1
  273. package/dist/esm/cli/generateSitemap.test.mjs.map +1 -1
  274. package/dist/esm/cli/generateSitemap.test.native.js.map +1 -1
  275. package/dist/esm/cli/main.js +4 -2
  276. package/dist/esm/cli/main.js.map +1 -1
  277. package/dist/esm/cli/main.mjs.map +1 -1
  278. package/dist/esm/cli/main.native.js.map +1 -1
  279. package/dist/esm/cli/prebuild.js.map +1 -1
  280. package/dist/esm/cli/prebuild.mjs.map +1 -1
  281. package/dist/esm/cli/prebuild.native.js.map +1 -1
  282. package/dist/esm/clientLoaderResolver.js.map +1 -1
  283. package/dist/esm/clientLoaderResolver.mjs.map +1 -1
  284. package/dist/esm/clientLoaderResolver.native.js.map +1 -1
  285. package/dist/esm/config.js +3 -1
  286. package/dist/esm/config.js.map +1 -1
  287. package/dist/esm/config.mjs.map +1 -1
  288. package/dist/esm/config.native.js.map +1 -1
  289. package/dist/esm/constants.js.map +1 -1
  290. package/dist/esm/constants.mjs.map +1 -1
  291. package/dist/esm/constants.native.js.map +1 -1
  292. package/dist/esm/createApp.js +9 -1
  293. package/dist/esm/createApp.js.map +1 -1
  294. package/dist/esm/createApp.mjs.map +1 -1
  295. package/dist/esm/createHandleRequest.js +9 -3
  296. package/dist/esm/createHandleRequest.js.map +1 -1
  297. package/dist/esm/createHandleRequest.mjs.map +1 -1
  298. package/dist/esm/createHandleRequest.native.js.map +1 -1
  299. package/dist/esm/fork/__tests__/getPathFromState.test.js +90 -88
  300. package/dist/esm/fork/__tests__/getPathFromState.test.js.map +1 -1
  301. package/dist/esm/fork/__tests__/getPathFromState.test.mjs.map +1 -1
  302. package/dist/esm/fork/__tests__/getPathFromState.test.native.js.map +1 -1
  303. package/dist/esm/fork/__tests__/getStateFromPath.test.js +163 -86
  304. package/dist/esm/fork/__tests__/getStateFromPath.test.js.map +1 -1
  305. package/dist/esm/fork/__tests__/getStateFromPath.test.mjs.map +1 -1
  306. package/dist/esm/fork/__tests__/getStateFromPath.test.native.js.map +1 -1
  307. package/dist/esm/fork/_shared.js.map +1 -1
  308. package/dist/esm/fork/_shared.mjs.map +1 -1
  309. package/dist/esm/fork/_shared.native.js.map +1 -1
  310. package/dist/esm/fork/extractPathFromURL.js.map +1 -1
  311. package/dist/esm/fork/extractPathFromURL.mjs.map +1 -1
  312. package/dist/esm/fork/extractPathFromURL.native.js.map +1 -1
  313. package/dist/esm/fork/getPathFromState-mods.js +4 -1
  314. package/dist/esm/fork/getPathFromState-mods.js.map +1 -1
  315. package/dist/esm/fork/getPathFromState-mods.mjs.map +1 -1
  316. package/dist/esm/fork/getPathFromState-mods.native.js.map +1 -1
  317. package/dist/esm/fork/getPathFromState.js +3 -1
  318. package/dist/esm/fork/getPathFromState.js.map +1 -1
  319. package/dist/esm/fork/getPathFromState.mjs.map +1 -1
  320. package/dist/esm/fork/getPathFromState.native.js.map +1 -1
  321. package/dist/esm/fork/getStateFromPath-mods.js.map +1 -1
  322. package/dist/esm/fork/getStateFromPath-mods.mjs.map +1 -1
  323. package/dist/esm/fork/getStateFromPath-mods.native.js.map +1 -1
  324. package/dist/esm/fork/getStateFromPath.js +7 -1
  325. package/dist/esm/fork/getStateFromPath.js.map +1 -1
  326. package/dist/esm/fork/getStateFromPath.mjs.map +1 -1
  327. package/dist/esm/fork/getStateFromPath.native.js.map +1 -1
  328. package/dist/esm/fork/getStateFromPath.test.js +25 -9
  329. package/dist/esm/fork/getStateFromPath.test.js.map +1 -1
  330. package/dist/esm/fork/getStateFromPath.test.mjs.map +1 -1
  331. package/dist/esm/fork/getStateFromPath.test.native.js.map +1 -1
  332. package/dist/esm/fork/useBackButton.js.map +1 -1
  333. package/dist/esm/fork/useBackButton.mjs.map +1 -1
  334. package/dist/esm/fork/useDocumentTitle.js +4 -1
  335. package/dist/esm/fork/useDocumentTitle.js.map +1 -1
  336. package/dist/esm/fork/useDocumentTitle.mjs.map +1 -1
  337. package/dist/esm/fork/useLinking.js +4 -1
  338. package/dist/esm/fork/useLinking.js.map +1 -1
  339. package/dist/esm/fork/useLinking.mjs.map +1 -1
  340. package/dist/esm/fork/validatePathConfig.js.map +1 -1
  341. package/dist/esm/fork/validatePathConfig.mjs.map +1 -1
  342. package/dist/esm/fork/validatePathConfig.native.js.map +1 -1
  343. package/dist/esm/hooks.js.map +1 -1
  344. package/dist/esm/hooks.mjs.map +1 -1
  345. package/dist/esm/hooks.native.js.map +1 -1
  346. package/dist/esm/index.js +3 -1
  347. package/dist/esm/index.js.map +1 -1
  348. package/dist/esm/index.mjs.map +1 -1
  349. package/dist/esm/index.native.js.map +1 -1
  350. package/dist/esm/layouts/Tabs.js.map +1 -1
  351. package/dist/esm/layouts/Tabs.mjs.map +1 -1
  352. package/dist/esm/layouts/Tabs.native.js.map +1 -1
  353. package/dist/esm/layouts/withLayoutContext.js +10 -8
  354. package/dist/esm/layouts/withLayoutContext.js.map +1 -1
  355. package/dist/esm/layouts/withLayoutContext.mjs.map +1 -1
  356. package/dist/esm/layouts/withLayoutContext.native.js.map +1 -1
  357. package/dist/esm/link/Link.js.map +1 -1
  358. package/dist/esm/link/Link.mjs.map +1 -1
  359. package/dist/esm/link/Link.native.js.map +1 -1
  360. package/dist/esm/link/linking.js +3 -1
  361. package/dist/esm/link/linking.js.map +1 -1
  362. package/dist/esm/link/linking.mjs.map +1 -1
  363. package/dist/esm/link/linking.native.js.map +1 -1
  364. package/dist/esm/link/useLinkTo.js.map +1 -1
  365. package/dist/esm/link/useLinkTo.mjs.map +1 -1
  366. package/dist/esm/link/useLinkTo.native.js.map +1 -1
  367. package/dist/esm/link/useLoadedNavigation.js +3 -1
  368. package/dist/esm/link/useLoadedNavigation.js.map +1 -1
  369. package/dist/esm/link/useLoadedNavigation.mjs.map +1 -1
  370. package/dist/esm/link/useLoadedNavigation.native.js.map +1 -1
  371. package/dist/esm/metro-config/getViteMetroPluginOptions.js +8 -10
  372. package/dist/esm/metro-config/getViteMetroPluginOptions.js.map +1 -1
  373. package/dist/esm/metro-config/getViteMetroPluginOptions.mjs +6 -8
  374. package/dist/esm/metro-config/getViteMetroPluginOptions.mjs.map +1 -1
  375. package/dist/esm/metro-config/getViteMetroPluginOptions.native.js +9 -11
  376. package/dist/esm/metro-config/getViteMetroPluginOptions.native.js.map +1 -1
  377. package/dist/esm/router/Route.js.map +1 -1
  378. package/dist/esm/router/Route.mjs.map +1 -1
  379. package/dist/esm/router/Route.native.js.map +1 -1
  380. package/dist/esm/router/RouteInfoContext.js +7 -1
  381. package/dist/esm/router/RouteInfoContext.js.map +1 -1
  382. package/dist/esm/router/RouteInfoContext.mjs.map +1 -1
  383. package/dist/esm/router/RouteInfoContext.native.js.map +1 -1
  384. package/dist/esm/router/filterRootHTML.js.map +1 -1
  385. package/dist/esm/router/filterRootHTML.mjs.map +1 -1
  386. package/dist/esm/router/filterRootHTML.native.js.map +1 -1
  387. package/dist/esm/router/getLinkingConfig.js.map +1 -1
  388. package/dist/esm/router/getLinkingConfig.mjs.map +1 -1
  389. package/dist/esm/router/getLinkingConfig.native.js.map +1 -1
  390. package/dist/esm/router/getNormalizedStatePath.js.map +1 -1
  391. package/dist/esm/router/getNormalizedStatePath.mjs.map +1 -1
  392. package/dist/esm/router/getNormalizedStatePath.native.js.map +1 -1
  393. package/dist/esm/router/getRoutes.js +3 -1
  394. package/dist/esm/router/getRoutes.js.map +1 -1
  395. package/dist/esm/router/getRoutes.mjs.map +1 -1
  396. package/dist/esm/router/getRoutes.native.js.map +1 -1
  397. package/dist/esm/router/linkingConfig.js +3 -1
  398. package/dist/esm/router/linkingConfig.js.map +1 -1
  399. package/dist/esm/router/linkingConfig.mjs.map +1 -1
  400. package/dist/esm/router/linkingConfig.native.js.map +1 -1
  401. package/dist/esm/router/matchers.js +1 -1
  402. package/dist/esm/router/matchers.js.map +1 -1
  403. package/dist/esm/router/matchers.mjs +1 -1
  404. package/dist/esm/router/matchers.mjs.map +1 -1
  405. package/dist/esm/router/matchers.native.js +1 -1
  406. package/dist/esm/router/matchers.native.js.map +1 -1
  407. package/dist/esm/router/matchers.test.js +6 -2
  408. package/dist/esm/router/matchers.test.js.map +1 -1
  409. package/dist/esm/router/matchers.test.mjs.map +1 -1
  410. package/dist/esm/router/router.js +16 -4
  411. package/dist/esm/router/router.js.map +1 -1
  412. package/dist/esm/router/router.mjs.map +1 -1
  413. package/dist/esm/router/router.native.js.map +1 -1
  414. package/dist/esm/router/useNavigation.js.map +1 -1
  415. package/dist/esm/router/useNavigation.mjs.map +1 -1
  416. package/dist/esm/router/useNavigation.native.js.map +1 -1
  417. package/dist/esm/router/useScreens.js +73 -46
  418. package/dist/esm/router/useScreens.js.map +1 -1
  419. package/dist/esm/router/useScreens.mjs +74 -52
  420. package/dist/esm/router/useScreens.mjs.map +1 -1
  421. package/dist/esm/router/useScreens.native.js +30 -19
  422. package/dist/esm/router/useScreens.native.js.map +1 -1
  423. package/dist/esm/router/useViteRoutes.js +28 -9
  424. package/dist/esm/router/useViteRoutes.js.map +1 -1
  425. package/dist/esm/router/useViteRoutes.mjs +26 -8
  426. package/dist/esm/router/useViteRoutes.mjs.map +1 -1
  427. package/dist/esm/router/useViteRoutes.native.js +33 -13
  428. package/dist/esm/router/useViteRoutes.native.js.map +1 -1
  429. package/dist/esm/router/utils/getNavigateAction.js.map +1 -1
  430. package/dist/esm/router/utils/getNavigateAction.mjs.map +1 -1
  431. package/dist/esm/router/utils/getNavigateAction.native.js.map +1 -1
  432. package/dist/esm/server/createRoutesManifest.js.map +1 -1
  433. package/dist/esm/server/createRoutesManifest.mjs.map +1 -1
  434. package/dist/esm/server/createRoutesManifest.native.js.map +1 -1
  435. package/dist/esm/server/getServerManifest.js +3 -1
  436. package/dist/esm/server/getServerManifest.js.map +1 -1
  437. package/dist/esm/server/getServerManifest.mjs.map +1 -1
  438. package/dist/esm/server/getServerManifest.native.js.map +1 -1
  439. package/dist/esm/server/oneServe.js +9 -2
  440. package/dist/esm/server/oneServe.js.map +1 -1
  441. package/dist/esm/server/oneServe.mjs.map +1 -1
  442. package/dist/esm/server/oneServe.native.js.map +1 -1
  443. package/dist/esm/server/setupBuildOptions.js.map +1 -1
  444. package/dist/esm/server/setupBuildOptions.mjs.map +1 -1
  445. package/dist/esm/server/setupBuildOptions.native.js.map +1 -1
  446. package/dist/esm/server/staticHtmlFetcher.js.map +1 -1
  447. package/dist/esm/server/staticHtmlFetcher.mjs.map +1 -1
  448. package/dist/esm/server/staticHtmlFetcher.native.js.map +1 -1
  449. package/dist/esm/server-render.js.map +1 -1
  450. package/dist/esm/server-render.mjs.map +1 -1
  451. package/dist/esm/server-render.native.js.map +1 -1
  452. package/dist/esm/typed-routes/getTypedRoutesDeclarationFile.js +14 -2
  453. package/dist/esm/typed-routes/getTypedRoutesDeclarationFile.js.map +1 -1
  454. package/dist/esm/typed-routes/getTypedRoutesDeclarationFile.mjs.map +1 -1
  455. package/dist/esm/typed-routes/getTypedRoutesDeclarationFile.native.js.map +1 -1
  456. package/dist/esm/typed-routes/injectRouteHelpers.js +4 -1
  457. package/dist/esm/typed-routes/injectRouteHelpers.js.map +1 -1
  458. package/dist/esm/typed-routes/injectRouteHelpers.mjs.map +1 -1
  459. package/dist/esm/typed-routes/injectRouteHelpers.native.js.map +1 -1
  460. package/dist/esm/ui/Slot.js.map +1 -1
  461. package/dist/esm/ui/Slot.mjs.map +1 -1
  462. package/dist/esm/ui/Slot.native.js.map +1 -1
  463. package/dist/esm/ui/TabContext.js +3 -1
  464. package/dist/esm/ui/TabContext.js.map +1 -1
  465. package/dist/esm/ui/TabContext.mjs.map +1 -1
  466. package/dist/esm/ui/TabContext.native.js.map +1 -1
  467. package/dist/esm/ui/TabRouter.js.map +1 -1
  468. package/dist/esm/ui/TabRouter.mjs.map +1 -1
  469. package/dist/esm/ui/TabRouter.native.js.map +1 -1
  470. package/dist/esm/ui/TabTrigger.js +21 -3
  471. package/dist/esm/ui/TabTrigger.js.map +1 -1
  472. package/dist/esm/ui/TabTrigger.mjs.map +1 -1
  473. package/dist/esm/ui/TabTrigger.native.js.map +1 -1
  474. package/dist/esm/ui/Tabs.js +5 -1
  475. package/dist/esm/ui/Tabs.js.map +1 -1
  476. package/dist/esm/ui/Tabs.mjs.map +1 -1
  477. package/dist/esm/ui/Tabs.native.js.map +1 -1
  478. package/dist/esm/ui/common.js +8 -2
  479. package/dist/esm/ui/common.js.map +1 -1
  480. package/dist/esm/ui/common.mjs.map +1 -1
  481. package/dist/esm/ui/common.native.js.map +1 -1
  482. package/dist/esm/useLoader.js +4 -1
  483. package/dist/esm/useLoader.js.map +1 -1
  484. package/dist/esm/useLoader.mjs.map +1 -1
  485. package/dist/esm/useLoader.native.js.map +1 -1
  486. package/dist/esm/utils/cleanUrl.js.map +1 -1
  487. package/dist/esm/utils/cleanUrl.mjs.map +1 -1
  488. package/dist/esm/utils/cleanUrl.native.js.map +1 -1
  489. package/dist/esm/utils/url.js +3 -1
  490. package/dist/esm/utils/url.js.map +1 -1
  491. package/dist/esm/utils/url.mjs.map +1 -1
  492. package/dist/esm/utils/url.native.js.map +1 -1
  493. package/dist/esm/vercel/build/buildVercelOutputDirectory.js +29 -10
  494. package/dist/esm/vercel/build/buildVercelOutputDirectory.js.map +1 -1
  495. package/dist/esm/vercel/build/buildVercelOutputDirectory.mjs.map +1 -1
  496. package/dist/esm/vercel/build/buildVercelOutputDirectory.native.js.map +1 -1
  497. package/dist/esm/vercel/build/generate/createApiServerlessFunction.js +11 -3
  498. package/dist/esm/vercel/build/generate/createApiServerlessFunction.js.map +1 -1
  499. package/dist/esm/vercel/build/generate/createApiServerlessFunction.mjs.map +1 -1
  500. package/dist/esm/vercel/build/generate/createApiServerlessFunction.native.js.map +1 -1
  501. package/dist/esm/vercel/build/generate/createSsrServerlessFunction.js +9 -2
  502. package/dist/esm/vercel/build/generate/createSsrServerlessFunction.js.map +1 -1
  503. package/dist/esm/vercel/build/generate/createSsrServerlessFunction.mjs.map +1 -1
  504. package/dist/esm/vercel/build/generate/createSsrServerlessFunction.native.js.map +1 -1
  505. package/dist/esm/vercel/build/getPathFromRoute.js +4 -1
  506. package/dist/esm/vercel/build/getPathFromRoute.js.map +1 -1
  507. package/dist/esm/vercel/build/getPathFromRoute.mjs.map +1 -1
  508. package/dist/esm/vercel/build/getPathFromRoute.native.js.map +1 -1
  509. package/dist/esm/views/Navigator.js +20 -9
  510. package/dist/esm/views/Navigator.js.map +1 -1
  511. package/dist/esm/views/Navigator.mjs.map +1 -1
  512. package/dist/esm/views/Navigator.native.js.map +1 -1
  513. package/dist/esm/views/RootErrorBoundary.js +4 -2
  514. package/dist/esm/views/RootErrorBoundary.js.map +1 -1
  515. package/dist/esm/views/RootErrorBoundary.mjs.map +1 -1
  516. package/dist/esm/views/RootErrorBoundary.native.js.map +1 -1
  517. package/dist/esm/views/Screen.js +4 -1
  518. package/dist/esm/views/Screen.js.map +1 -1
  519. package/dist/esm/views/Screen.mjs.map +1 -1
  520. package/dist/esm/views/Screen.native.js.map +1 -1
  521. package/dist/esm/vite/DevHead.js +18 -0
  522. package/dist/esm/vite/DevHead.js.map +1 -1
  523. package/dist/esm/vite/DevHead.mjs +14 -0
  524. package/dist/esm/vite/DevHead.mjs.map +1 -1
  525. package/dist/esm/vite/loadConfig.js +6 -2
  526. package/dist/esm/vite/loadConfig.js.map +1 -1
  527. package/dist/esm/vite/loadConfig.mjs.map +1 -1
  528. package/dist/esm/vite/loadConfig.native.js.map +1 -1
  529. package/dist/esm/vite/one-server-only.js +3 -1
  530. package/dist/esm/vite/one-server-only.js.map +1 -1
  531. package/dist/esm/vite/one-server-only.mjs.map +1 -1
  532. package/dist/esm/vite/one.js +18 -5
  533. package/dist/esm/vite/one.js.map +1 -1
  534. package/dist/esm/vite/one.mjs +9 -2
  535. package/dist/esm/vite/one.mjs.map +1 -1
  536. package/dist/esm/vite/one.native.js +17 -12
  537. package/dist/esm/vite/one.native.js.map +1 -1
  538. package/dist/esm/vite/plugins/SSRCSSPlugin.js +5 -1
  539. package/dist/esm/vite/plugins/SSRCSSPlugin.js.map +1 -1
  540. package/dist/esm/vite/plugins/SSRCSSPlugin.mjs.map +1 -1
  541. package/dist/esm/vite/plugins/SSRCSSPlugin.native.js.map +1 -1
  542. package/dist/esm/vite/plugins/clientTreeShakePlugin.js +12 -3
  543. package/dist/esm/vite/plugins/clientTreeShakePlugin.js.map +1 -1
  544. package/dist/esm/vite/plugins/clientTreeShakePlugin.mjs.map +1 -1
  545. package/dist/esm/vite/plugins/clientTreeShakePlugin.native.js.map +1 -1
  546. package/dist/esm/vite/plugins/fileSystemRouterPlugin.js +13 -6
  547. package/dist/esm/vite/plugins/fileSystemRouterPlugin.js.map +1 -1
  548. package/dist/esm/vite/plugins/fileSystemRouterPlugin.mjs +2 -2
  549. package/dist/esm/vite/plugins/fileSystemRouterPlugin.mjs.map +1 -1
  550. package/dist/esm/vite/plugins/fileSystemRouterPlugin.native.js +5 -2
  551. package/dist/esm/vite/plugins/fileSystemRouterPlugin.native.js.map +1 -1
  552. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.js +2 -2
  553. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.js.map +1 -1
  554. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.mjs +2 -2
  555. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.mjs.map +1 -1
  556. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.native.js +7 -4
  557. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.native.js.map +1 -1
  558. package/dist/esm/vite/plugins/removeReactNativeWebAnimatedPlugin.js.map +1 -1
  559. package/dist/esm/vite/plugins/removeReactNativeWebAnimatedPlugin.mjs.map +1 -1
  560. package/dist/esm/vite/plugins/removeReactNativeWebAnimatedPlugin.native.js.map +1 -1
  561. package/dist/esm/vite/plugins/virtualEntryPlugin.js +13 -3
  562. package/dist/esm/vite/plugins/virtualEntryPlugin.js.map +1 -1
  563. package/dist/esm/vite/plugins/virtualEntryPlugin.mjs.map +1 -1
  564. package/dist/esm/vite/plugins/virtualEntryPlugin.native.js.map +1 -1
  565. package/dist/esm/vite/replaceLoader.js +4 -1
  566. package/dist/esm/vite/replaceLoader.js.map +1 -1
  567. package/dist/esm/vite/replaceLoader.mjs.map +1 -1
  568. package/dist/esm/vite/replaceLoader.native.js.map +1 -1
  569. package/dist/esm/vite/resolveResponse.js +5 -1
  570. package/dist/esm/vite/resolveResponse.js.map +1 -1
  571. package/dist/esm/vite/resolveResponse.mjs.map +1 -1
  572. package/dist/esm/vite/resolveResponse.native.js.map +1 -1
  573. package/dist/esm/zero/subscribeToQuery.js.map +1 -1
  574. package/dist/esm/zero/subscribeToQuery.mjs.map +1 -1
  575. package/dist/esm/zero/subscribeToQuery.native.js.map +1 -1
  576. package/dist/esm/zero/useQueryZero.js +3 -1
  577. package/dist/esm/zero/useQueryZero.js.map +1 -1
  578. package/dist/esm/zero/useQueryZero.mjs.map +1 -1
  579. package/dist/esm/zero/useQueryZero.native.js.map +1 -1
  580. package/metro-entry-ctx.js +2 -1
  581. package/package.json +10 -10
  582. package/src/Root.tsx +14 -5
  583. package/src/babel-plugins/one-router-metro.ts +4 -1
  584. package/src/babel-plugins/remove-server-code.ts +15 -4
  585. package/src/cli/build.ts +33 -8
  586. package/src/cli/buildPage.ts +15 -4
  587. package/src/cli/generateRoutes.ts +3 -1
  588. package/src/cli/generateSitemap.test.ts +14 -4
  589. package/src/cli/generateSitemap.ts +7 -2
  590. package/src/cli/main.ts +3 -1
  591. package/src/cli/prebuild.ts +5 -1
  592. package/src/clientLoaderResolver.ts +4 -1
  593. package/src/config.ts +6 -2
  594. package/src/constants.ts +4 -2
  595. package/src/createApp.tsx +11 -3
  596. package/src/createHandleRequest.ts +17 -6
  597. package/src/fork/__tests__/getPathFromState.test.tsx +128 -107
  598. package/src/fork/__tests__/getStateFromPath.test.tsx +181 -95
  599. package/src/fork/_shared.ts +2 -1
  600. package/src/fork/extractPathFromURL.ts +2 -1
  601. package/src/fork/getPathFromState-mods.ts +8 -2
  602. package/src/fork/getPathFromState.ts +16 -5
  603. package/src/fork/getStateFromPath-mods.ts +13 -3
  604. package/src/fork/getStateFromPath.test.ts +25 -9
  605. package/src/fork/getStateFromPath.ts +21 -5
  606. package/src/fork/useBackButton.native.tsx +3 -1
  607. package/src/fork/useBackButton.tsx +3 -1
  608. package/src/fork/useDocumentTitle.tsx +4 -1
  609. package/src/fork/useLinking.native.ts +3 -1
  610. package/src/fork/useLinking.ts +9 -3
  611. package/src/fork/validatePathConfig.ts +6 -1
  612. package/src/head/Head.ios.tsx +3 -1
  613. package/src/hooks.tsx +4 -2
  614. package/src/index.ts +4 -1
  615. package/src/interfaces/router.ts +29 -13
  616. package/src/layouts/Tabs.tsx +5 -1
  617. package/src/layouts/withLayoutContext.tsx +24 -21
  618. package/src/link/Link.tsx +3 -1
  619. package/src/link/linking.ts +3 -1
  620. package/src/link/useLinkTo.tsx +3 -1
  621. package/src/link/useLoadedNavigation.ts +5 -1
  622. package/src/metro-config/getViteMetroPluginOptions.ts +20 -22
  623. package/src/router/Route.tsx +3 -1
  624. package/src/router/RouteInfoContext.tsx +3 -1
  625. package/src/router/filterRootHTML.ts +5 -1
  626. package/src/router/getLinkingConfig.ts +4 -1
  627. package/src/router/getNormalizedStatePath.tsx +4 -1
  628. package/src/router/getRoutes.ts +13 -4
  629. package/src/router/linkingConfig.ts +4 -1
  630. package/src/router/matchers.test.ts +6 -2
  631. package/src/router/matchers.ts +1 -1
  632. package/src/router/router.ts +25 -6
  633. package/src/router/useNavigation.ts +4 -1
  634. package/src/router/useScreens.tsx +127 -64
  635. package/src/router/useViteRoutes.tsx +44 -2
  636. package/src/router/utils/getNavigateAction.ts +4 -2
  637. package/src/server/createRoutesManifest.ts +4 -1
  638. package/src/server/getServerManifest.ts +7 -2
  639. package/src/server/oneServe.ts +21 -8
  640. package/src/server/setupBuildOptions.ts +2 -1
  641. package/src/server/staticHtmlFetcher.ts +3 -1
  642. package/src/server-render.tsx +4 -1
  643. package/src/typed-routes/getTypedRoutesDeclarationFile.ts +20 -4
  644. package/src/typed-routes/injectRouteHelpers.ts +12 -3
  645. package/src/types.ts +2 -2
  646. package/src/ui/Slot.tsx +4 -2
  647. package/src/ui/TabContext.tsx +3 -1
  648. package/src/ui/TabRouter.tsx +7 -2
  649. package/src/ui/TabTrigger.tsx +20 -3
  650. package/src/ui/Tabs.tsx +8 -2
  651. package/src/ui/common.tsx +19 -5
  652. package/src/useLoader.ts +9 -4
  653. package/src/utils/cleanUrl.ts +5 -1
  654. package/src/utils/url.ts +3 -1
  655. package/src/vercel/build/buildVercelOutputDirectory.ts +31 -10
  656. package/src/vercel/build/generate/createApiServerlessFunction.ts +11 -3
  657. package/src/vercel/build/generate/createSsrServerlessFunction.ts +10 -3
  658. package/src/vercel/build/getPathFromRoute.ts +4 -1
  659. package/src/views/Navigator.tsx +21 -9
  660. package/src/views/RootErrorBoundary.tsx +3 -1
  661. package/src/views/Screen.tsx +4 -1
  662. package/src/vite/DevHead.tsx +15 -0
  663. package/src/vite/loadConfig.ts +6 -2
  664. package/src/vite/one-server-only.tsx +10 -4
  665. package/src/vite/one.ts +80 -47
  666. package/src/vite/plugins/SSRCSSPlugin.ts +9 -2
  667. package/src/vite/plugins/clientTreeShakePlugin.ts +22 -6
  668. package/src/vite/plugins/fileSystemRouterPlugin.tsx +14 -5
  669. package/src/vite/plugins/generateFileSystemRouteTypesPlugin.tsx +6 -3
  670. package/src/vite/plugins/removeReactNativeWebAnimatedPlugin.ts +3 -1
  671. package/src/vite/plugins/virtualEntryPlugin.ts +22 -5
  672. package/src/vite/replaceLoader.ts +7 -1
  673. package/src/vite/resolveResponse.ts +6 -2
  674. package/src/vite/types.ts +6 -3
  675. package/src/zero/subscribeToQuery.ts +4 -1
  676. package/src/zero/types.ts +8 -9
  677. package/src/zero/useQuery.ts +1 -1
  678. package/src/zero/useQueryZero.ts +3 -1
  679. package/types/Root.d.ts.map +1 -1
  680. package/types/babel-plugins/one-router-metro.d.ts.map +1 -1
  681. package/types/babel-plugins/remove-server-code.d.ts.map +1 -1
  682. package/types/cli/build.d.ts.map +1 -1
  683. package/types/cli/buildPage.d.ts.map +1 -1
  684. package/types/cli/generateRoutes.d.ts.map +1 -1
  685. package/types/cli/generateSitemap.d.ts.map +1 -1
  686. package/types/cli/main.d.ts.map +1 -1
  687. package/types/cli/prebuild.d.ts.map +1 -1
  688. package/types/clientLoaderResolver.d.ts.map +1 -1
  689. package/types/config.d.ts.map +1 -1
  690. package/types/constants.d.ts.map +1 -1
  691. package/types/createApp.d.ts.map +1 -1
  692. package/types/createHandleRequest.d.ts +1 -1
  693. package/types/createHandleRequest.d.ts.map +1 -1
  694. package/types/fork/_shared.d.ts.map +1 -1
  695. package/types/fork/extractPathFromURL.d.ts.map +1 -1
  696. package/types/fork/getPathFromState.d.ts.map +1 -1
  697. package/types/fork/getStateFromPath-mods.d.ts.map +1 -1
  698. package/types/fork/getStateFromPath.d.ts.map +1 -1
  699. package/types/fork/useBackButton.d.ts.map +1 -1
  700. package/types/fork/useBackButton.native.d.ts.map +1 -1
  701. package/types/fork/useDocumentTitle.d.ts.map +1 -1
  702. package/types/fork/useLinking.d.ts.map +1 -1
  703. package/types/fork/useLinking.native.d.ts.map +1 -1
  704. package/types/fork/validatePathConfig.d.ts.map +1 -1
  705. package/types/head/Head.ios.d.ts.map +1 -1
  706. package/types/hooks.d.ts +2 -2
  707. package/types/hooks.d.ts.map +1 -1
  708. package/types/index.d.ts +1 -1
  709. package/types/index.d.ts.map +1 -1
  710. package/types/interfaces/router.d.ts.map +1 -1
  711. package/types/layouts/Tabs.d.ts.map +1 -1
  712. package/types/layouts/withLayoutContext.d.ts.map +1 -1
  713. package/types/link/Link.d.ts.map +1 -1
  714. package/types/link/linking.d.ts.map +1 -1
  715. package/types/link/useLinkTo.d.ts.map +1 -1
  716. package/types/link/useLoadedNavigation.d.ts.map +1 -1
  717. package/types/metro-config/getViteMetroPluginOptions.d.ts.map +1 -1
  718. package/types/router/Route.d.ts.map +1 -1
  719. package/types/router/RouteInfoContext.d.ts.map +1 -1
  720. package/types/router/filterRootHTML.d.ts.map +1 -1
  721. package/types/router/getNormalizedStatePath.d.ts.map +1 -1
  722. package/types/router/getRoutes.d.ts.map +1 -1
  723. package/types/router/linkingConfig.d.ts.map +1 -1
  724. package/types/router/router.d.ts.map +1 -1
  725. package/types/router/useNavigation.d.ts.map +1 -1
  726. package/types/router/useScreens.d.ts.map +1 -1
  727. package/types/router/useViteRoutes.d.ts.map +1 -1
  728. package/types/router/utils/getNavigateAction.d.ts.map +1 -1
  729. package/types/server/createRoutesManifest.d.ts.map +1 -1
  730. package/types/server/getServerManifest.d.ts.map +1 -1
  731. package/types/server/oneServe.d.ts.map +1 -1
  732. package/types/server/setupBuildOptions.d.ts.map +1 -1
  733. package/types/server/staticHtmlFetcher.d.ts.map +1 -1
  734. package/types/server-render.d.ts.map +1 -1
  735. package/types/types.d.ts +2 -2
  736. package/types/ui/Slot.d.ts.map +1 -1
  737. package/types/ui/TabContext.d.ts.map +1 -1
  738. package/types/ui/TabRouter.d.ts.map +1 -1
  739. package/types/ui/TabTrigger.d.ts.map +1 -1
  740. package/types/ui/Tabs.d.ts.map +1 -1
  741. package/types/ui/common.d.ts.map +1 -1
  742. package/types/useLoader.d.ts.map +1 -1
  743. package/types/utils/cleanUrl.d.ts.map +1 -1
  744. package/types/utils/url.d.ts.map +1 -1
  745. package/types/vercel/build/buildVercelOutputDirectory.d.ts.map +1 -1
  746. package/types/vercel/build/generate/createApiServerlessFunction.d.ts.map +1 -1
  747. package/types/vercel/build/generate/createSsrServerlessFunction.d.ts.map +1 -1
  748. package/types/vercel/build/getPathFromRoute.d.ts.map +1 -1
  749. package/types/views/Navigator.d.ts +1 -1
  750. package/types/views/Navigator.d.ts.map +1 -1
  751. package/types/views/RootErrorBoundary.d.ts.map +1 -1
  752. package/types/views/Screen.d.ts +1 -1
  753. package/types/views/Screen.d.ts.map +1 -1
  754. package/types/vite/DevHead.d.ts.map +1 -1
  755. package/types/vite/loadConfig.d.ts.map +1 -1
  756. package/types/vite/one-server-only.d.ts +2 -2
  757. package/types/vite/one-server-only.d.ts.map +1 -1
  758. package/types/vite/one.d.ts.map +1 -1
  759. package/types/vite/plugins/SSRCSSPlugin.d.ts.map +1 -1
  760. package/types/vite/plugins/clientTreeShakePlugin.d.ts.map +1 -1
  761. package/types/vite/plugins/fileSystemRouterPlugin.d.ts.map +1 -1
  762. package/types/vite/plugins/generateFileSystemRouteTypesPlugin.d.ts.map +1 -1
  763. package/types/vite/plugins/removeReactNativeWebAnimatedPlugin.d.ts.map +1 -1
  764. package/types/vite/plugins/virtualEntryPlugin.d.ts.map +1 -1
  765. package/types/vite/replaceLoader.d.ts +2 -2
  766. package/types/vite/replaceLoader.d.ts.map +1 -1
  767. package/types/vite/resolveResponse.d.ts.map +1 -1
  768. package/types/vite/types.d.ts +1 -1
  769. package/types/vite/types.d.ts.map +1 -1
  770. package/types/zero/subscribeToQuery.d.ts.map +1 -1
  771. package/types/zero/types.d.ts.map +1 -1
  772. package/types/zero/useQueryZero.d.ts.map +1 -1
  773. package/vendor/react/cjs/react-jsx-dev-runtime.development.js +1230 -1078
  774. package/vendor/react/cjs/react-jsx-dev-runtime.production.min.js +4 -1
  775. package/vendor/react/cjs/react-jsx-dev-runtime.profiling.min.js +4 -1
  776. package/vendor/react/cjs/react-jsx-runtime.development.js +1244 -1092
  777. package/vendor/react/cjs/react-jsx-runtime.production.min.js +23 -2
  778. package/vendor/react/cjs/react-jsx-runtime.profiling.min.js +23 -2
  779. package/vendor/react/cjs/react.development.js +2604 -2324
  780. package/vendor/react/cjs/react.production.min.js +360 -17
  781. package/vendor/react/cjs/react.shared-subset.development.js +9 -7
  782. package/vendor/react/cjs/react.shared-subset.production.min.js +2 -1
  783. package/vendor/react/index.js +3 -3
  784. package/vendor/react/jsx-dev-runtime.js +3 -3
  785. package/vendor/react/jsx-runtime.js +3 -3
  786. package/vendor/react/react.shared-subset.js +3 -3
  787. package/vendor/react/umd/react.development.js +1430 -1152
  788. package/vendor/react/umd/react.production.min.js +657 -22
  789. package/vendor/react/umd/react.profiling.min.js +657 -22
  790. package/vendor/react-dom/cjs/react-dom-server-legacy.browser.development.js +7183 -5938
  791. package/vendor/react-dom/cjs/react-dom-server-legacy.browser.production.min.js +1941 -84
  792. package/vendor/react-dom/cjs/react-dom-server-legacy.node.development.js +7239 -5986
  793. package/vendor/react-dom/cjs/react-dom-server-legacy.node.production.min.js +2055 -92
  794. package/vendor/react-dom/cjs/react-dom-server.browser.development.js +7146 -5924
  795. package/vendor/react-dom/cjs/react-dom-server.browser.production.min.js +1997 -87
  796. package/vendor/react-dom/cjs/react-dom-server.node.development.js +7210 -5976
  797. package/vendor/react-dom/cjs/react-dom-server.node.production.min.js +2075 -93
  798. package/vendor/react-dom/cjs/react-dom-test-utils.development.js +1700 -1487
  799. package/vendor/react-dom/cjs/react-dom-test-utils.production.min.js +653 -31
  800. package/vendor/react-dom/cjs/react-dom.development.js +29568 -25248
  801. package/vendor/react-dom/cjs/react-dom.production.min.js +8208 -310
  802. package/vendor/react-dom/cjs/react-dom.profiling.min.js +8750 -343
  803. package/vendor/react-dom/client.js +15 -15
  804. package/vendor/react-dom/index.js +8 -8
  805. package/vendor/react-dom/profiling.js +8 -8
  806. package/vendor/react-dom/server.browser.js +12 -12
  807. package/vendor/react-dom/server.js +2 -2
  808. package/vendor/react-dom/server.node.js +12 -12
  809. package/vendor/react-dom/test-utils.js +3 -3
  810. package/vendor/react-dom/umd/react-dom-server-legacy.browser.development.js +3735 -2502
  811. package/vendor/react-dom/umd/react-dom-server-legacy.browser.production.min.js +1964 -66
  812. package/vendor/react-dom/umd/react-dom-server.browser.development.js +3724 -2511
  813. package/vendor/react-dom/umd/react-dom-server.browser.production.min.js +2017 -67
  814. package/vendor/react-dom/umd/react-dom-test-utils.development.js +777 -563
  815. package/vendor/react-dom/umd/react-dom-test-utils.production.min.js +678 -24
  816. package/vendor/react-dom/umd/react-dom.development.js +15978 -11854
  817. package/vendor/react-dom/umd/react-dom.production.min.js +8328 -256
  818. package/vendor/react-dom/umd/react-dom.profiling.min.js +8868 -274
@@ -165,30 +165,28 @@ export function getViteMetroPluginOptions({
165
165
  [
166
166
  'babel-plugin-module-resolver',
167
167
  {
168
- alias: {
169
- // "vite-tsconfig-paths" for Metro
170
- ...Object.fromEntries(
171
- Object.entries(tsconfigPathsConfigLoadResult.paths).map(([k, v]) => {
172
- const key = (() => {
173
- if (k.endsWith('/*')) {
174
- return k.replace(/\/\*$/, '')
175
- }
176
-
177
- // If the key does not end with "/*", only alias exact matches.
178
- // Ref: https://www.npmjs.com/package/babel-plugin-module-resolver/v/3.0.0#regular-expression-alias
179
- return `${k}$`
180
- })()
181
-
182
- let value = v[0].replace(/\/\*$/, '')
183
-
184
- if (!value.startsWith('./')) {
185
- value = `./${value}`
168
+ // "vite-tsconfig-paths" for Metro
169
+ alias: Object.fromEntries(
170
+ Object.entries(tsconfigPathsConfigLoadResult.paths).map(([k, v]) => {
171
+ const key = (() => {
172
+ if (k.endsWith('/*')) {
173
+ return k.replace(/\/\*$/, '')
186
174
  }
187
175
 
188
- return [key, value]
189
- })
190
- ),
191
- },
176
+ // If the key does not end with "/*", only alias exact matches.
177
+ // Ref: https://www.npmjs.com/package/babel-plugin-module-resolver/v/3.0.0#regular-expression-alias
178
+ return `${k}$`
179
+ })()
180
+
181
+ let value = v[0].replace(/\/\*$/, '')
182
+
183
+ if (!value.startsWith('./')) {
184
+ value = `./${value}`
185
+ }
186
+
187
+ return [key, value]
188
+ })
189
+ ),
192
190
  },
193
191
  ],
194
192
  [
@@ -46,7 +46,9 @@ export type RouteNode = {
46
46
  middlewares?: RouteNode[]
47
47
  }
48
48
 
49
- export const RouteParamsContext = createContext<Record<string, string | undefined> | undefined>({})
49
+ export const RouteParamsContext = createContext<
50
+ Record<string, string | undefined> | undefined
51
+ >({})
50
52
 
51
53
  const CurrentRouteContext = React.createContext<RouteNode | null>(null)
52
54
 
@@ -56,7 +56,9 @@ export function RouteInfoContextProvider({ children }: { children: React.ReactNo
56
56
  currentStateRef.current = currentState
57
57
 
58
58
  return (
59
- <RouteInfoContext.Provider value={currentState ? lazilyCalculatedRouteInfo.current : undefined}>
59
+ <RouteInfoContext.Provider
60
+ value={currentState ? lazilyCalculatedRouteInfo.current : undefined}
61
+ >
60
62
  {children}
61
63
  </RouteInfoContext.Provider>
62
64
  )
@@ -70,7 +70,11 @@ export function filterRootHTML(el: React.ReactNode): FoundRootHTML {
70
70
  ) {
71
71
  // filter out HTML elements on native (e.g. <div>, <meta>)
72
72
  // preserve children so <div><Slot/></div> renders <Slot/> instead of nothing
73
- if (element.props && typeof element.props === 'object' && 'children' in element.props) {
73
+ if (
74
+ element.props &&
75
+ typeof element.props === 'object' &&
76
+ 'children' in element.props
77
+ ) {
74
78
  return traverse(element.props.children as React.ReactNode)
75
79
  }
76
80
  return null
@@ -54,7 +54,10 @@ export function getLinkingConfig(routes: RouteNode, metaOnly = true): OneLinking
54
54
  export const stateCache = new Map<string, any>()
55
55
 
56
56
  /** We can reduce work by memoizing the state by the pathname. This only works because the options (linking config) theoretically never change. */
57
- function getStateFromPathMemoized(path: string, options: Parameters<typeof getStateFromPath>[1]) {
57
+ function getStateFromPathMemoized(
58
+ path: string,
59
+ options: Parameters<typeof getStateFromPath>[1]
60
+ ) {
58
61
  const cached = stateCache.get(path)
59
62
  if (cached) {
60
63
  return cached
@@ -24,7 +24,10 @@ export function getNormalizedStatePath(
24
24
  const [pathname] = statePath.split('?')
25
25
  return {
26
26
  // Strip empty path at the start
27
- segments: stripBaseUrl(pathname, baseUrl).split('/').filter(Boolean).map(decodeURIComponent),
27
+ segments: stripBaseUrl(pathname, baseUrl)
28
+ .split('/')
29
+ .filter(Boolean)
30
+ .map(decodeURIComponent),
28
31
  // TODO: This is not efficient, we should generate based on the state instead
29
32
  // of converting to string then back to object
30
33
  params: Object.entries(params).reduce((prev, [key, value]) => {
@@ -350,10 +350,14 @@ function getFileMeta(key: string, options: Options) {
350
350
  const isLayout = filenameWithoutExtensions.startsWith('_layout')
351
351
  const isMiddleware = filenameWithoutExtensions.startsWith('_middleware')
352
352
 
353
- const [_fullname, renderModeFound] = filename.match(/\+(api|ssg|ssr|spa)\.(\w+\.)?[jt]sx?$/) || []
353
+ const [_fullname, renderModeFound] =
354
+ filename.match(/\+(api|ssg|ssr|spa)\.(\w+\.)?[jt]sx?$/) || []
354
355
  const renderMode = renderModeFound as 'api' | One.RouteRenderMode | undefined
355
356
 
356
- if (filenameWithoutExtensions.startsWith('(') && filenameWithoutExtensions.endsWith(')')) {
357
+ if (
358
+ filenameWithoutExtensions.startsWith('(') &&
359
+ filenameWithoutExtensions.endsWith(')')
360
+ ) {
357
361
  throw new Error(`Invalid route ./${key}. Routes cannot end with '(group)' syntax`)
358
362
  }
359
363
 
@@ -440,7 +444,10 @@ export function getIgnoreList(options?: Options) {
440
444
  *
441
445
  * /(a,b)/(c,d)/e.tsx => new Set(['a/c/e.tsx', 'a/d/e.tsx', 'b/c/e.tsx', 'b/d/e.tsx'])
442
446
  */
443
- export function extrapolateGroups(key: string, keys: Set<string> = new Set()): Set<string> {
447
+ export function extrapolateGroups(
448
+ key: string,
449
+ keys: Set<string> = new Set()
450
+ ): Set<string> {
444
451
  const match = matchArrayGroupName(key)
445
452
 
446
453
  if (!match) {
@@ -451,7 +458,9 @@ export function extrapolateGroups(key: string, keys: Set<string> = new Set()): S
451
458
  const groupsSet = new Set(groups)
452
459
 
453
460
  if (groupsSet.size !== groups.length) {
454
- throw new Error(`Array syntax cannot contain duplicate group name "${groups}" in "${key}".`)
461
+ throw new Error(
462
+ `Array syntax cannot contain duplicate group name "${groups}" in "${key}".`
463
+ )
455
464
  }
456
465
 
457
466
  if (groups.length === 1) {
@@ -1,5 +1,8 @@
1
1
  import type { OneRouter } from '../interfaces/router'
2
- import { getLinkingConfig as createLinkingConfig, type OneLinkingOptions } from './getLinkingConfig'
2
+ import {
3
+ getLinkingConfig as createLinkingConfig,
4
+ type OneLinkingOptions,
5
+ } from './getLinkingConfig'
3
6
  import type { RouteNode } from './Route'
4
7
 
5
8
  let linkingConfig: OneLinkingOptions | undefined
@@ -110,11 +110,15 @@ describe(matchArrayGroupName, () => {
110
110
  expect(matchArrayGroupName('leading/(foo,bar)/(fruit,apple)')).toEqual('foo,bar')
111
111
  expect(matchArrayGroupName('(leading)/(foo,bar)')).toEqual('foo,bar')
112
112
  expect(matchArrayGroupName('(leading)/(foo,bar)/trailing)')).toEqual('foo,bar')
113
- expect(matchArrayGroupName('(leading)/((foo),(bar))/trailing)')).toEqual('(foo),(bar)')
113
+ expect(matchArrayGroupName('(leading)/((foo),(bar))/trailing)')).toEqual(
114
+ '(foo),(bar)'
115
+ )
114
116
  })
115
117
  it.skip(`should only match the first group with array group syntax`, () => {
116
118
  expect(matchArrayGroupName('(leading)/(foo,bar)/(fruit,apple)')).toEqual('foo,bar')
117
- expect(matchArrayGroupName('(leading)/((foo),bar)/(fruit,apple)')).toEqual('(foo),bar')
119
+ expect(matchArrayGroupName('(leading)/((foo),bar)/(fruit,apple)')).toEqual(
120
+ '(foo),bar'
121
+ )
118
122
  expect(matchArrayGroupName('(leading)/(foo,bar)/((fruit),apple)')).toEqual('foo,bar')
119
123
  })
120
124
  })
@@ -28,7 +28,7 @@ export function matchDeepDynamicRouteName(name: string): string | undefined {
28
28
 
29
29
  /** Test `/` -> `page` */
30
30
  export function testNotFound(name: string): boolean {
31
- return /\+not-found$/.test(name)
31
+ return name.endsWith('+not-found')
32
32
  }
33
33
 
34
34
  /** Match `(page)` -> `page` */
@@ -4,7 +4,10 @@
4
4
  * the best decision.
5
5
  */
6
6
 
7
- import { type NavigationContainerRefWithCurrent, StackActions } from '@react-navigation/native'
7
+ import {
8
+ type NavigationContainerRefWithCurrent,
9
+ StackActions,
10
+ } from '@react-navigation/native'
8
11
  import * as Linking from 'expo-linking'
9
12
  import {
10
13
  type ComponentType,
@@ -77,7 +80,9 @@ export function initialize(
77
80
  const prefix = indent + (isLast ? '└─ ' : '├─ ')
78
81
  const childIndent = indent + (isLast ? ' ' : '│ ')
79
82
 
80
- const dynamicBadge = node.dynamic ? ` [${node.dynamic.map((d) => d.name).join(', ')}]` : ''
83
+ const dynamicBadge = node.dynamic
84
+ ? ` [${node.dynamic.map((d) => d.name).join(', ')}]`
85
+ : ''
81
86
  const typeBadge = node.type !== 'layout' ? ` (${node.type})` : ''
82
87
  const routeName = node.route || '/'
83
88
 
@@ -360,13 +365,21 @@ function syncStoreRootState() {
360
365
 
361
366
  export function useStoreRootState() {
362
367
  syncStoreRootState()
363
- const state = useSyncExternalStore(subscribeToRootState, rootStateSnapshot, rootStateSnapshot)
368
+ const state = useSyncExternalStore(
369
+ subscribeToRootState,
370
+ rootStateSnapshot,
371
+ rootStateSnapshot
372
+ )
364
373
  return useDeferredValue(state)
365
374
  }
366
375
 
367
376
  export function useStoreRouteInfo() {
368
377
  syncStoreRootState()
369
- const state = useSyncExternalStore(subscribeToRootState, routeInfoSnapshot, routeInfoSnapshot)
378
+ const state = useSyncExternalStore(
379
+ subscribeToRootState,
380
+ routeInfoSnapshot,
381
+ routeInfoSnapshot
382
+ )
370
383
  return useDeferredValue(state)
371
384
  }
372
385
 
@@ -445,7 +458,11 @@ export function preloadRoute(href: string, injectCSS = false): Promise<any> | un
445
458
  return preloadingLoader[href]
446
459
  }
447
460
 
448
- export async function linkTo(href: string, event?: string, options?: OneRouter.LinkToOptions) {
461
+ export async function linkTo(
462
+ href: string,
463
+ event?: string,
464
+ options?: OneRouter.LinkToOptions
465
+ ) {
449
466
  if (process.env.ONE_DEBUG_ROUTER) {
450
467
  console.info(`[one] 🔗 ${event || 'NAVIGATE'} ${href}`)
451
468
  }
@@ -513,7 +530,9 @@ export async function linkTo(href: string, event?: string, options?: OneRouter.L
513
530
  const state = linking.getStateFromPath!(href, linking.config)
514
531
 
515
532
  if (!state || state.routes.length === 0) {
516
- console.error('Could not generate a valid navigation state for the given path: ' + href)
533
+ console.error(
534
+ 'Could not generate a valid navigation state for the given path: ' + href
535
+ )
517
536
  console.error(`linking.config`, linking.config)
518
537
  console.error(`routes`, getSortedRoutes())
519
538
  return
@@ -44,7 +44,10 @@ export function useNavigation<T = NavigationProp<ReactNavigation.RootParamList>>
44
44
  return navigation
45
45
  }
46
46
 
47
- export function resolveParentId(contextKey: string, parentId?: string | null): string | null {
47
+ export function resolveParentId(
48
+ contextKey: string,
49
+ parentId?: string | null
50
+ ): string | null {
48
51
  if (!parentId) {
49
52
  return null
50
53
  }
@@ -7,7 +7,7 @@ import type {
7
7
  RouteProp,
8
8
  ScreenListeners,
9
9
  } from '@react-navigation/native'
10
- import React, { memo, Suspense, useId } from 'react'
10
+ import React, { memo, Suspense, useEffect, useId, useState } from 'react'
11
11
  import { SafeAreaView, ScrollView, Text, TouchableOpacity, View } from 'react-native'
12
12
  import { ServerContextScript } from '../server/ServerContextScript'
13
13
  import { getPageExport } from '../utils/getPageExport'
@@ -34,17 +34,102 @@ export const { Screen, Group } = createNavigatorFactory({} as any)()
34
34
  // so hydration sees identical content without 100KB+ JSON payload.
35
35
  const cachedInlineCSSElements: React.ReactNode[] =
36
36
  typeof document !== 'undefined'
37
- ? Array.from(document.querySelectorAll<HTMLStyleElement>('style[id^="__one_css_"]')).map(
38
- (el, i) => (
39
- <style
40
- key={`inline-css-${i}`}
41
- id={el.id}
42
- dangerouslySetInnerHTML={{ __html: el.innerHTML }}
43
- />
44
- )
45
- )
37
+ ? Array.from(
38
+ document.querySelectorAll<HTMLStyleElement>('style[id^="__one_css_"]')
39
+ ).map((el, i) => (
40
+ <style
41
+ key={`inline-css-${i}`}
42
+ id={el.id}
43
+ dangerouslySetInnerHTML={{ __html: el.innerHTML }}
44
+ />
45
+ ))
46
46
  : []
47
47
 
48
+ /**
49
+ * Separate component for rendering root layouts with HTML.
50
+ * This is extracted into its own component so React's HMR can properly track changes.
51
+ * When the LayoutComponent prop changes, React will re-render this component.
52
+ */
53
+ function RootLayoutRenderer({
54
+ LayoutComponent,
55
+ layoutProps,
56
+ forwardedRef,
57
+ }: {
58
+ LayoutComponent: React.ComponentType<any>
59
+ layoutProps: any
60
+ forwardedRef: any
61
+ }) {
62
+ // HMR support: force re-render when layout changes (dev only, web only)
63
+ if (process.env.NODE_ENV === 'development' && process.env.TAMAGUI_TARGET !== 'native') {
64
+ // eslint-disable-next-line react-hooks/rules-of-hooks
65
+ const [, setHmrKey] = useState(0)
66
+ // eslint-disable-next-line react-hooks/rules-of-hooks
67
+ useEffect(() => {
68
+ const handler = () => setHmrKey((k) => k + 1)
69
+ window.addEventListener('one-hmr-update', handler)
70
+ return () => window.removeEventListener('one-hmr-update', handler)
71
+ }, [])
72
+ }
73
+
74
+ // Call the layout component to get its output for HTML filtering
75
+ // @ts-expect-error
76
+ const out = LayoutComponent(layoutProps, forwardedRef)
77
+
78
+ const { children, bodyProps, head, htmlProps } = filterRootHTML(out)
79
+ const { children: headChildren, ...headProps } = (head?.props || {}) as Record<
80
+ string,
81
+ any
82
+ >
83
+ const serverContext = useServerContext()
84
+
85
+ let finalChildren = children
86
+
87
+ if (process.env.TAMAGUI_TARGET === 'native') {
88
+ // on native we just ignore all html/body/head
89
+ return finalChildren
90
+ }
91
+
92
+ finalChildren = (
93
+ <>
94
+ <head key="head" {...headProps}>
95
+ <DevHead />
96
+ <script
97
+ dangerouslySetInnerHTML={{
98
+ __html: `globalThis['global'] = globalThis`,
99
+ }}
100
+ />
101
+ {serverContext?.cssContents?.length || serverContext?.cssInlineCount
102
+ ? // Inline CSS: SSR renders fresh, client uses cached elements from module load
103
+ serverContext?.cssContents
104
+ ? serverContext.cssContents.map((content, i) => (
105
+ <style
106
+ key={`inline-css-${i}`}
107
+ id={`__one_css_${i}`}
108
+ dangerouslySetInnerHTML={{ __html: content }}
109
+ />
110
+ ))
111
+ : cachedInlineCSSElements
112
+ : serverContext?.css?.map((file) => (
113
+ <link key={file} rel="stylesheet" href={file} />
114
+ ))}
115
+ <ServerContextScript />
116
+ {headChildren}
117
+ </head>
118
+ <body key="body" suppressHydrationWarning {...bodyProps}>
119
+ <SafeAreaProviderCompat>{finalChildren}</SafeAreaProviderCompat>
120
+ </body>
121
+ </>
122
+ )
123
+
124
+ return (
125
+ // tamagui and libraries can add className on hydration to have ssr safe styling
126
+ // so supress hydration warnings here
127
+ <html suppressHydrationWarning lang="en-US" {...htmlProps}>
128
+ {finalChildren}
129
+ </html>
130
+ )
131
+ }
132
+
48
133
  export type ScreenProps<
49
134
  TOptions extends Record<string, any> = Record<string, any>,
50
135
  State extends NavigationState = NavigationState,
@@ -87,7 +172,9 @@ function getSortedChildren(
87
172
  const ordered = order
88
173
  .map(({ name, redirect, initialParams, listeners, options, getId }) => {
89
174
  if (!entries.length) {
90
- console.warn(`[Layout children]: Too many screens defined. Route "${name}" is extraneous.`)
175
+ console.warn(
176
+ `[Layout children]: Too many screens defined. Route "${name}" is extraneous.`
177
+ )
91
178
  return null
92
179
  }
93
180
  const matchIndex = entries.findIndex((child) => child.route === name)
@@ -185,6 +272,21 @@ export function getQualifiedRouteComponent(value: RouteNode) {
185
272
  }
186
273
 
187
274
  const ScreenComponent = React.forwardRef((props: any, ref) => {
275
+ // HMR support: force re-render when layout files change to get fresh module (dev only, web only)
276
+ if (
277
+ process.env.NODE_ENV === 'development' &&
278
+ process.env.TAMAGUI_TARGET !== 'native'
279
+ ) {
280
+ // eslint-disable-next-line react-hooks/rules-of-hooks
281
+ const [, setHmrKey] = useState(0)
282
+ // eslint-disable-next-line react-hooks/rules-of-hooks
283
+ useEffect(() => {
284
+ const handler = () => setHmrKey((k) => k + 1)
285
+ window.addEventListener('one-hmr-update', handler)
286
+ return () => window.removeEventListener('one-hmr-update', handler)
287
+ }, [])
288
+ }
289
+
188
290
  const res = value.loadRoute()
189
291
  const Component = getPageExport(fromImport(res)) as React.ComponentType<any>
190
292
 
@@ -195,59 +297,14 @@ export function getQualifiedRouteComponent(value: RouteNode) {
195
297
  console.groupEnd()
196
298
  }
197
299
 
198
- // this is causing HMR to not work on root layout
300
+ // Root layout with HTML support - use RootLayoutRenderer for proper HMR tracking
199
301
  if (props.segment === '') {
200
- // @ts-expect-error
201
- const out = Component(props, ref)
202
-
203
- const { children, bodyProps, head, htmlProps } = filterRootHTML(out)
204
- const { children: headChildren, ...headProps } = (head?.props || {}) as Record<string, any>
205
- const serverContext = useServerContext()
206
-
207
- // let finalChildren = <Suspense fallback={null}>{children}</Suspense>
208
- let finalChildren = children
209
-
210
- if (process.env.TAMAGUI_TARGET === 'native') {
211
- // on native we just ignore all html/body/head
212
- return finalChildren
213
- }
214
-
215
- finalChildren = (
216
- <>
217
- <head key="head" {...headProps}>
218
- <DevHead />
219
- <script
220
- dangerouslySetInnerHTML={{
221
- __html: `globalThis['global'] = globalThis`,
222
- }}
223
- />
224
- {serverContext?.cssContents?.length || serverContext?.cssInlineCount
225
- ? // Inline CSS: SSR renders fresh, client uses cached elements from module load
226
- serverContext?.cssContents
227
- ? serverContext.cssContents.map((content, i) => (
228
- <style
229
- key={`inline-css-${i}`}
230
- id={`__one_css_${i}`}
231
- dangerouslySetInnerHTML={{ __html: content }}
232
- />
233
- ))
234
- : cachedInlineCSSElements
235
- : serverContext?.css?.map((file) => <link key={file} rel="stylesheet" href={file} />)}
236
- <ServerContextScript />
237
- {headChildren}
238
- </head>
239
- <body key="body" suppressHydrationWarning {...bodyProps}>
240
- <SafeAreaProviderCompat>{finalChildren}</SafeAreaProviderCompat>
241
- </body>
242
- </>
243
- )
244
-
245
302
  return (
246
- // tamagui and libraries can add className on hydration to have ssr safe styling
247
- // so supress hydration warnings here
248
- <html suppressHydrationWarning lang="en-US" {...htmlProps}>
249
- {finalChildren}
250
- </html>
303
+ <RootLayoutRenderer
304
+ LayoutComponent={Component}
305
+ layoutProps={props}
306
+ forwardedRef={ref}
307
+ />
251
308
  )
252
309
  }
253
310
 
@@ -264,7 +321,10 @@ export function getQualifiedRouteComponent(value: RouteNode) {
264
321
  // i tried a lot of things, but didn't find the root cause, but native needs suspense or
265
322
  // else it hits an error about no suspense boundary being set
266
323
 
267
- if (process.env.TAMAGUI_TARGET === 'native' || process.env.ONE_SUSPEND_ROUTES === '1') {
324
+ if (
325
+ process.env.TAMAGUI_TARGET === 'native' ||
326
+ process.env.ONE_SUSPEND_ROUTES === '1'
327
+ ) {
268
328
  return <Suspense fallback={null}>{children}</Suspense>
269
329
  }
270
330
  return children
@@ -343,7 +403,10 @@ export function createGetIdForRoute(
343
403
  }
344
404
  }
345
405
 
346
- function routeToScreen(route: RouteNode, { options, ...props }: Partial<ScreenProps> = {}) {
406
+ function routeToScreen(
407
+ route: RouteNode,
408
+ { options, ...props }: Partial<ScreenProps> = {}
409
+ ) {
347
410
  return (
348
411
  <Screen
349
412
  // Users can override the screen getId function.
@@ -129,7 +129,8 @@ export async function preloadRouteModules(href: string): Promise<void> {
129
129
  (normalizedHref !== '' && routePath === normalizedHref.split('/')[0]) // top-level match
130
130
 
131
131
  // also check dynamic route patterns like docs/[slug]
132
- const isDynamicMatch = routePath.includes('[') && matchDynamicRoute(routePath, normalizedHref)
132
+ const isDynamicMatch =
133
+ routePath.includes('[') && matchDynamicRoute(routePath, normalizedHref)
133
134
 
134
135
  if ((isStaticMatch || isDynamicMatch) && typeof globbed[key] === 'function') {
135
136
  promises.push(
@@ -163,6 +164,7 @@ export function globbedRoutesToRouteContext(
163
164
  ): One.RouteContext {
164
165
  // make it look like webpack context
165
166
  const routesSync = {}
167
+ const routePaths = {} // Store full paths for HMR cache-busting imports
166
168
  const promises = {}
167
169
  const loadedRoutes = {}
168
170
  const clears = {}
@@ -184,11 +186,36 @@ export function globbedRoutesToRouteContext(
184
186
  }
185
187
  } else {
186
188
  routesSync[pathWithoutRelative] = loadRouteFunction
189
+ routePaths[pathWithoutRelative] = path // Store full path for HMR
187
190
  }
188
191
  })
189
192
 
190
193
  const moduleKeys = Object.keys(routesSync)
191
194
 
195
+ // Track HMR version for cache busting
196
+ let hmrVersion = 0
197
+
198
+ // Expose a function to clear the cache for HMR support
199
+ if (typeof window !== 'undefined') {
200
+ ;(window as any).__oneRouteCache = {
201
+ clear: () => {
202
+ hmrVersion++
203
+ // Clear all caches
204
+ Object.keys(loadedRoutes).forEach((key) => {
205
+ delete loadedRoutes[key]
206
+ })
207
+ Object.keys(promises).forEach((key) => {
208
+ delete promises[key]
209
+ })
210
+ // Clear preloaded modules too
211
+ Object.keys(preloadedModules).forEach((key) => {
212
+ delete preloadedModules[key]
213
+ })
214
+ },
215
+ getVersion: () => hmrVersion,
216
+ }
217
+ }
218
+
192
219
  function resolve(id: string) {
193
220
  clearTimeout(clears[id])
194
221
 
@@ -209,7 +236,22 @@ export function globbedRoutesToRouteContext(
209
236
  }
210
237
 
211
238
  if (!promises[id]) {
212
- promises[id] = routesSync[id]()
239
+ // In dev mode after HMR, use cache-busting import to get fresh module
240
+ // Note: we use a block + IIFE to help bundlers fully eliminate the import() call
241
+ // which Hermes cannot parse even as dead code
242
+ let importPromise: Promise<any>
243
+ if (
244
+ process.env.VITE_PLATFORM !== 'native' &&
245
+ process.env.NODE_ENV === 'development' &&
246
+ hmrVersion > 0 &&
247
+ routePaths[id]
248
+ ) {
249
+ importPromise = (0, eval)('imp' + 'ort')(`${routePaths[id]}?t=${Date.now()}`)
250
+ } else {
251
+ importPromise = routesSync[id]()
252
+ }
253
+
254
+ promises[id] = importPromise
213
255
  .then((val: any) => {
214
256
  loadedRoutes[id] = val
215
257
  delete promises[id]
@@ -47,7 +47,8 @@ export function getNavigateAction(
47
47
  !childState ||
48
48
  !nextNavigationState ||
49
49
  (dynamicMatch &&
50
- actionStateRoute.params?.[dynamicMatch.name] !== stateRoute.params?.[dynamicMatch.name])
50
+ actionStateRoute.params?.[dynamicMatch.name] !==
51
+ stateRoute.params?.[dynamicMatch.name])
51
52
 
52
53
  if (didActionAndCurrentStateDiverge) {
53
54
  break
@@ -71,7 +72,8 @@ export function getNavigateAction(
71
72
  payload.screen = actionStateRoute.name
72
73
  payload.params = { ...actionStateRoute.params }
73
74
 
74
- actionStateRoute = actionStateRoute.state?.routes[actionStateRoute.state?.routes.length - 1]
75
+ actionStateRoute =
76
+ actionStateRoute.state?.routes[actionStateRoute.state?.routes.length - 1]
75
77
 
76
78
  payload.params ??= {}
77
79
  payload = payload.params
@@ -25,7 +25,10 @@ function createMockModuleWithContext(map: string[] = []) {
25
25
  return contextModule as One.RouteContext
26
26
  }
27
27
 
28
- export function createRoutesManifest(paths: string[], options: Options): RoutesManifest | null {
28
+ export function createRoutesManifest(
29
+ paths: string[],
30
+ options: Options
31
+ ): RoutesManifest | null {
29
32
  const routeTree = getRoutes(createMockModuleWithContext(paths), {
30
33
  ...options,
31
34
  preserveApiRoutes: true,
@@ -85,7 +85,9 @@ export function getServerManifest(route: RouteNode): OneRouterServerManifestV1 {
85
85
  for (const [path, route] of flat) {
86
86
  if (pathToRoute[path]) {
87
87
  console.warn(`\n[one] ❌ Duplicate routes error`)
88
- console.warn(` Multiple routes at the same path! One route will always win over the other.`)
88
+ console.warn(
89
+ ` Multiple routes at the same path! One route will always win over the other.`
90
+ )
89
91
  console.warn(` path: ${path}`)
90
92
  console.warn(` first route: ${pathToRoute[path].contextKey}`)
91
93
  console.warn(` second route: ${route.contextKey}\n`)
@@ -141,7 +143,10 @@ function getGeneratedNamedRouteRegex(
141
143
  }
142
144
  }
143
145
 
144
- function getRouteEntry(normalizedRoute: string, node: RouteNode): OneRouterServerManifestV1Route {
146
+ function getRouteEntry(
147
+ normalizedRoute: string,
148
+ node: RouteNode
149
+ ): OneRouterServerManifestV1Route {
145
150
  const result = getPathMeta(normalizedRoute)
146
151
  return {
147
152
  file: node.contextKey,