one 1.12.5 → 1.12.6

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 (450) hide show
  1. package/devtools/source-inspector.mjs +7 -27
  2. package/dist/cjs/Frozen.native.js +1 -1
  3. package/dist/cjs/Root.native.js +5 -5
  4. package/dist/cjs/Root.native.js.map +1 -1
  5. package/dist/cjs/__mocks__/@react-navigation/native-stack.native.js.map +1 -1
  6. package/dist/cjs/__mocks__/expo-linking.native.js.map +1 -1
  7. package/dist/cjs/__mocks__/expo-modules-core.native.js.map +1 -1
  8. package/dist/cjs/__mocks__/react-native-screens.native.js.map +1 -1
  9. package/dist/cjs/babel-plugins/environment-guard.native.js.map +1 -1
  10. package/dist/cjs/babel-plugins/inline-one-server-url.native.js.map +1 -1
  11. package/dist/cjs/babel-plugins/one-router-metro.native.js.map +1 -1
  12. package/dist/cjs/babel-plugins/remove-server-code.native.js.map +1 -1
  13. package/dist/cjs/cli/build.cjs +8 -11
  14. package/dist/cjs/cli/build.native.js +25 -28
  15. package/dist/cjs/cli/build.native.js.map +1 -1
  16. package/dist/cjs/cli/buildPage.native.js +6 -6
  17. package/dist/cjs/cli/buildPage.native.js.map +1 -1
  18. package/dist/cjs/cli/buildPageWorker.native.js +1 -1
  19. package/dist/cjs/cli/buildPageWorker.native.js.map +1 -1
  20. package/dist/cjs/cli/checkNodeVersion.native.js.map +1 -1
  21. package/dist/cjs/cli/daemon.native.js +1 -1
  22. package/dist/cjs/cli/daemon.native.js.map +1 -1
  23. package/dist/cjs/cli/dev.native.js +4 -4
  24. package/dist/cjs/cli/dev.native.js.map +1 -1
  25. package/dist/cjs/cli/generateRoutes.native.js +3 -3
  26. package/dist/cjs/cli/generateRoutes.native.js.map +1 -1
  27. package/dist/cjs/cli/generateSitemap.native.js.map +1 -1
  28. package/dist/cjs/cli/generateSitemap.test.native.js +1 -1
  29. package/dist/cjs/cli/generateSitemap.test.native.js.map +1 -1
  30. package/dist/cjs/cli/label-process.native.js.map +1 -1
  31. package/dist/cjs/cli/main.native.js +1 -1
  32. package/dist/cjs/cli/main.native.js.map +1 -1
  33. package/dist/cjs/cli/patch.native.js +1 -1
  34. package/dist/cjs/cli/patch.native.js.map +1 -1
  35. package/dist/cjs/cli/prebuild.native.js.map +1 -1
  36. package/dist/cjs/cli/runAndroid.native.js.map +1 -1
  37. package/dist/cjs/cli/runIos.native.js.map +1 -1
  38. package/dist/cjs/cli/securityScan.native.js.map +1 -1
  39. package/dist/cjs/cli/workerPool.native.js.map +1 -1
  40. package/dist/cjs/cli.native.js.map +1 -1
  41. package/dist/cjs/clientLoaderResolver.native.js.map +1 -1
  42. package/dist/cjs/config.native.js +1 -1
  43. package/dist/cjs/config.native.js.map +1 -1
  44. package/dist/cjs/constants.native.js +1 -1
  45. package/dist/cjs/constants.native.js.map +1 -1
  46. package/dist/cjs/createAPIRoute.native.js.map +1 -1
  47. package/dist/cjs/createApp.native.js +3 -3
  48. package/dist/cjs/createHandleRequest.native.js +5 -5
  49. package/dist/cjs/createHandleRequest.native.js.map +1 -1
  50. package/dist/cjs/createHandleRequest.test.native.js +1 -1
  51. package/dist/cjs/createHandleRequest.test.native.js.map +1 -1
  52. package/dist/cjs/createMiddleware.native.js.map +1 -1
  53. package/dist/cjs/daemon/index.native.js +7 -7
  54. package/dist/cjs/daemon/index.native.js.map +1 -1
  55. package/dist/cjs/daemon/ipc.native.js +1 -1
  56. package/dist/cjs/daemon/ipc.native.js.map +1 -1
  57. package/dist/cjs/daemon/picker.native.js.map +1 -1
  58. package/dist/cjs/daemon/proxy.native.js.map +1 -1
  59. package/dist/cjs/daemon/registry.native.js.map +1 -1
  60. package/dist/cjs/daemon/server.native.js +4 -4
  61. package/dist/cjs/daemon/server.native.js.map +1 -1
  62. package/dist/cjs/daemon/tui.native.js +3 -3
  63. package/dist/cjs/daemon/tui.native.js.map +1 -1
  64. package/dist/cjs/daemon/types.native.js.map +1 -1
  65. package/dist/cjs/daemon/utils.native.js.map +1 -1
  66. package/dist/cjs/devtools/registry.native.js.map +1 -1
  67. package/dist/cjs/drawer.native.js +1 -1
  68. package/dist/cjs/drawer.native.js.map +1 -1
  69. package/dist/cjs/fallbackViews/Sitemap.native.js.map +1 -1
  70. package/dist/cjs/fallbackViews/Unmatched.native.js.map +1 -1
  71. package/dist/cjs/fork/NavigationContainer.native.js +5 -5
  72. package/dist/cjs/fork/NavigationContainer.native.js.map +1 -1
  73. package/dist/cjs/fork/SSRNavigationContainer.native.js.map +1 -1
  74. package/dist/cjs/fork/__tests__/getPathFromState.test.native.js +2 -2
  75. package/dist/cjs/fork/__tests__/getPathFromState.test.native.js.map +1 -1
  76. package/dist/cjs/fork/__tests__/getStateFromPath.test.native.js +3 -3
  77. package/dist/cjs/fork/__tests__/getStateFromPath.test.native.js.map +1 -1
  78. package/dist/cjs/fork/_shared.native.js.map +1 -1
  79. package/dist/cjs/fork/createMemoryHistory.native.js.map +1 -1
  80. package/dist/cjs/fork/extractPathFromURL.native.js.map +1 -1
  81. package/dist/cjs/fork/findFocusedRoute.native.js.map +1 -1
  82. package/dist/cjs/fork/getPathFromState-mods.native.js +2 -2
  83. package/dist/cjs/fork/getPathFromState-mods.native.js.map +1 -1
  84. package/dist/cjs/fork/getPathFromState.native.js +3 -3
  85. package/dist/cjs/fork/getPathFromState.native.js.map +1 -1
  86. package/dist/cjs/fork/getPathFromState.test.native.js +1 -1
  87. package/dist/cjs/fork/getPathFromState.test.native.js.map +1 -1
  88. package/dist/cjs/fork/getStateFromPath-mods.native.js +1 -1
  89. package/dist/cjs/fork/getStateFromPath-mods.native.js.map +1 -1
  90. package/dist/cjs/fork/getStateFromPath.native.js +4 -4
  91. package/dist/cjs/fork/getStateFromPath.native.js.map +1 -1
  92. package/dist/cjs/fork/getStateFromPath.test.native.js +4 -4
  93. package/dist/cjs/fork/getStateFromPath.test.native.js.map +1 -1
  94. package/dist/cjs/fork/useLinking.native.js +1 -1
  95. package/dist/cjs/fork/useThenable.native.js.map +1 -1
  96. package/dist/cjs/fork/validatePathConfig.native.js.map +1 -1
  97. package/dist/cjs/getReactNavigationConfig.native.js +1 -1
  98. package/dist/cjs/getReactNavigationConfig.native.js.map +1 -1
  99. package/dist/cjs/getURL.native.js +1 -1
  100. package/dist/cjs/head/Head.native.js +1 -1
  101. package/dist/cjs/head/Head.native.js.map +1 -1
  102. package/dist/cjs/head/HeadModule.native.js.map +1 -1
  103. package/dist/cjs/head/index.native.js +1 -1
  104. package/dist/cjs/head/index.native.js.map +1 -1
  105. package/dist/cjs/head/types.native.js.map +1 -1
  106. package/dist/cjs/head/url.native.js.map +1 -1
  107. package/dist/cjs/hooks.native.js +4 -4
  108. package/dist/cjs/hooks.native.js.map +1 -1
  109. package/dist/cjs/hooks.test.native.js.map +1 -1
  110. package/dist/cjs/href.native.js.map +1 -1
  111. package/dist/cjs/image/getImageData.native.js.map +1 -1
  112. package/dist/cjs/image.native.js +1 -1
  113. package/dist/cjs/image.native.js.map +1 -1
  114. package/dist/cjs/index.native.js +42 -42
  115. package/dist/cjs/index.native.js.map +1 -1
  116. package/dist/cjs/interfaces/router.native.js.map +1 -1
  117. package/dist/cjs/layouts/Drawer.native.js +1 -1
  118. package/dist/cjs/layouts/Drawer.native.js.map +1 -1
  119. package/dist/cjs/layouts/Stack.native.js +5 -5
  120. package/dist/cjs/layouts/Stack.native.js.map +1 -1
  121. package/dist/cjs/layouts/Tabs.native.js +2 -2
  122. package/dist/cjs/layouts/Tabs.native.js.map +1 -1
  123. package/dist/cjs/layouts/stack-utils/StackHeaderBackButton.native.js.map +1 -1
  124. package/dist/cjs/layouts/stack-utils/StackHeaderComponent.native.js +6 -6
  125. package/dist/cjs/layouts/stack-utils/StackHeaderComponent.native.js.map +1 -1
  126. package/dist/cjs/layouts/stack-utils/StackHeaderLeft.native.js.map +1 -1
  127. package/dist/cjs/layouts/stack-utils/StackHeaderRight.native.js.map +1 -1
  128. package/dist/cjs/layouts/stack-utils/StackHeaderSearchBar.native.js.map +1 -1
  129. package/dist/cjs/layouts/stack-utils/StackHeaderTitle.native.js +1 -1
  130. package/dist/cjs/layouts/stack-utils/StackHeaderTitle.native.js.map +1 -1
  131. package/dist/cjs/layouts/stack-utils/StackScreen.native.js +2 -2
  132. package/dist/cjs/layouts/stack-utils/StackScreen.native.js.map +1 -1
  133. package/dist/cjs/layouts/stack-utils/__tests__/composition.test.native.js +8 -8
  134. package/dist/cjs/layouts/stack-utils/__tests__/composition.test.native.js.map +1 -1
  135. package/dist/cjs/layouts/stack-utils/index.native.js +7 -7
  136. package/dist/cjs/layouts/stack-utils/index.native.js.map +1 -1
  137. package/dist/cjs/layouts/withLayoutContext.native.js +7 -7
  138. package/dist/cjs/layouts/withLayoutContext.native.js.map +1 -1
  139. package/dist/cjs/link/Link.native.js +2 -2
  140. package/dist/cjs/link/Link.native.js.map +1 -1
  141. package/dist/cjs/link/Redirect.native.js +2 -2
  142. package/dist/cjs/link/Redirect.native.js.map +1 -1
  143. package/dist/cjs/link/href.native.js.map +1 -1
  144. package/dist/cjs/link/linking.native.js +3 -3
  145. package/dist/cjs/link/path.native.js.map +1 -1
  146. package/dist/cjs/link/prefetchIntent.native.js.map +1 -1
  147. package/dist/cjs/link/prefetchIntent.test.native.js +1 -1
  148. package/dist/cjs/link/prefetchIntent.test.native.js.map +1 -1
  149. package/dist/cjs/link/prefetchViewport.native.js.map +1 -1
  150. package/dist/cjs/link/prefetchViewport.test.native.js +1 -1
  151. package/dist/cjs/link/prefetchViewport.test.native.js.map +1 -1
  152. package/dist/cjs/link/useLinkTo.native.js +3 -3
  153. package/dist/cjs/link/useLinkTo.native.js.map +1 -1
  154. package/dist/cjs/link/useLoadedNavigation.native.js +1 -1
  155. package/dist/cjs/link/useLoadedNavigation.native.js.map +1 -1
  156. package/dist/cjs/metro-config/getViteMetroPluginOptions.native.js +1 -1
  157. package/dist/cjs/metro-config/getViteMetroPluginOptions.native.js.map +1 -1
  158. package/dist/cjs/notFoundState.native.js.map +1 -1
  159. package/dist/cjs/polyfills-mobile.native.js +1 -1
  160. package/dist/cjs/polyfills-mobile.native.js.map +1 -1
  161. package/dist/cjs/polyfills-server.native.js.map +1 -1
  162. package/dist/cjs/router/FlagsContext.native.js.map +1 -1
  163. package/dist/cjs/router/Route.native.js +2 -2
  164. package/dist/cjs/router/Route.native.js.map +1 -1
  165. package/dist/cjs/router/RouteInfoContext.native.js +1 -1
  166. package/dist/cjs/router/RouteInfoContext.native.js.map +1 -1
  167. package/dist/cjs/router/RouterStore.native.js.map +1 -1
  168. package/dist/cjs/router/SpaShellContext.native.js.map +1 -1
  169. package/dist/cjs/router/createRoute.native.js +1 -1
  170. package/dist/cjs/router/createRoute.native.js.map +1 -1
  171. package/dist/cjs/router/filterRootHTML.native.js.map +1 -1
  172. package/dist/cjs/router/findRouteNode.native.js.map +1 -1
  173. package/dist/cjs/router/getLinkingConfig.native.js +2 -2
  174. package/dist/cjs/router/getLinkingConfig.native.js.map +1 -1
  175. package/dist/cjs/router/getNormalizedStatePath.native.js +1 -1
  176. package/dist/cjs/router/getNormalizedStatePath.native.js.map +1 -1
  177. package/dist/cjs/router/getRouteInfo.native.js +5 -5
  178. package/dist/cjs/router/getRouteInfo.native.js.map +1 -1
  179. package/dist/cjs/router/getRoutes.native.js +4 -4
  180. package/dist/cjs/router/getRoutes.native.js.map +1 -1
  181. package/dist/cjs/router/getRoutes.test.native.js +1 -1
  182. package/dist/cjs/router/getRoutes.test.native.js.map +1 -1
  183. package/dist/cjs/router/glob-patterns.native.js.map +1 -1
  184. package/dist/cjs/router/imperative-api.native.js +1 -1
  185. package/dist/cjs/router/imperative-api.native.js.map +1 -1
  186. package/dist/cjs/router/interceptRoutes.native.js +2 -2
  187. package/dist/cjs/router/interceptRoutes.native.js.map +1 -1
  188. package/dist/cjs/router/isIndexPath.native.js.map +1 -1
  189. package/dist/cjs/router/lastAction.native.js.map +1 -1
  190. package/dist/cjs/router/linkingConfig.native.js +3 -3
  191. package/dist/cjs/router/linkingConfig.native.js.map +1 -1
  192. package/dist/cjs/router/matchers.native.js.map +1 -1
  193. package/dist/cjs/router/matchers.test.native.js +1 -1
  194. package/dist/cjs/router/matchers.test.native.js.map +1 -1
  195. package/dist/cjs/router/router.native.js +24 -24
  196. package/dist/cjs/router/router.native.js.map +1 -1
  197. package/dist/cjs/router/serverLocationContext.native.js.map +1 -1
  198. package/dist/cjs/router/sortRoutes.native.js +1 -1
  199. package/dist/cjs/router/sortRoutes.native.js.map +1 -1
  200. package/dist/cjs/router/useInitializeOneRouter.native.js +4 -4
  201. package/dist/cjs/router/useInitializeOneRouter.native.js.map +1 -1
  202. package/dist/cjs/router/useNavigation.native.js +2 -2
  203. package/dist/cjs/router/useNavigation.native.js.map +1 -1
  204. package/dist/cjs/router/useScreens.native.js +11 -11
  205. package/dist/cjs/router/useScreens.native.js.map +1 -1
  206. package/dist/cjs/router/useViteRoutes.native.js +1 -1
  207. package/dist/cjs/router/useViteRoutes.native.js.map +1 -1
  208. package/dist/cjs/router/utils/getNavigateAction.native.js +2 -2
  209. package/dist/cjs/router/utils/getNavigateAction.native.js.map +1 -1
  210. package/dist/cjs/router/utils/getNavigateAction.test.native.js +1 -1
  211. package/dist/cjs/router/utils/getNavigateAction.test.native.js.map +1 -1
  212. package/dist/cjs/screensFeatureFlags.native.js.map +1 -1
  213. package/dist/cjs/serve-worker.cjs +16 -23
  214. package/dist/cjs/serve-worker.native.js +19 -26
  215. package/dist/cjs/serve-worker.native.js.map +1 -1
  216. package/dist/cjs/serve.native.js +4 -4
  217. package/dist/cjs/serve.native.js.map +1 -1
  218. package/dist/cjs/server/ServerContextScript.native.js +4 -4
  219. package/dist/cjs/server/ServerContextScript.native.js.map +1 -1
  220. package/dist/cjs/server/createRoutesManifest.native.js +2 -2
  221. package/dist/cjs/server/createRoutesManifest.native.js.map +1 -1
  222. package/dist/cjs/server/getServerManifest.native.js +1 -1
  223. package/dist/cjs/server/getServerManifest.native.js.map +1 -1
  224. package/dist/cjs/server/getServerManifest.test.native.js +1 -1
  225. package/dist/cjs/server/getServerManifest.test.native.js.map +1 -1
  226. package/dist/cjs/server/oneServe.cjs +4 -1
  227. package/dist/cjs/server/oneServe.native.js +10 -7
  228. package/dist/cjs/server/oneServe.native.js.map +1 -1
  229. package/dist/cjs/server/setServerGlobals.native.js.map +1 -1
  230. package/dist/cjs/server/setupBuildOptions.native.js.map +1 -1
  231. package/dist/cjs/server/setupServerGlobals.native.js +1 -1
  232. package/dist/cjs/server/setupServerGlobals.native.js.map +1 -1
  233. package/dist/cjs/server/ssrLoaderData.native.js.map +1 -1
  234. package/dist/cjs/server/staticHtmlFetcher.native.js.map +1 -1
  235. package/dist/cjs/server/workerHandler.cjs +492 -0
  236. package/dist/cjs/server/workerHandler.native.js +673 -0
  237. package/dist/cjs/server/workerHandler.native.js.map +1 -0
  238. package/dist/cjs/server-render.native.js.map +1 -1
  239. package/dist/cjs/skewProtection.native.js +2 -2
  240. package/dist/cjs/skewProtection.native.js.map +1 -1
  241. package/dist/cjs/testing-utils.native.js +2 -2
  242. package/dist/cjs/testing-utils.native.js.map +1 -1
  243. package/dist/cjs/typed-routes/generateRouteTypes.native.js +5 -5
  244. package/dist/cjs/typed-routes/generateRouteTypes.native.js.map +1 -1
  245. package/dist/cjs/typed-routes/getTypedRoutesDeclarationFile.native.js +2 -2
  246. package/dist/cjs/typed-routes/getTypedRoutesDeclarationFile.native.js.map +1 -1
  247. package/dist/cjs/typed-routes/injectRouteHelpers.native.js.map +1 -1
  248. package/dist/cjs/types.native.js.map +1 -1
  249. package/dist/cjs/ui/Slot.native.js.map +1 -1
  250. package/dist/cjs/ui/TabContext.native.js.map +1 -1
  251. package/dist/cjs/ui/TabList.native.js +1 -1
  252. package/dist/cjs/ui/TabList.native.js.map +1 -1
  253. package/dist/cjs/ui/TabRouter.native.js.map +1 -1
  254. package/dist/cjs/ui/TabSlot.native.js +2 -2
  255. package/dist/cjs/ui/TabSlot.native.js.map +1 -1
  256. package/dist/cjs/ui/TabTrigger.native.js +5 -5
  257. package/dist/cjs/ui/TabTrigger.native.js.map +1 -1
  258. package/dist/cjs/ui/Tabs.native.js +16 -16
  259. package/dist/cjs/ui/Tabs.native.js.map +1 -1
  260. package/dist/cjs/ui/common.native.js +4 -4
  261. package/dist/cjs/ui/common.native.js.map +1 -1
  262. package/dist/cjs/ui/index.native.js +1 -1
  263. package/dist/cjs/ui/index.native.js.map +1 -1
  264. package/dist/cjs/ui/useComponent.native.js.map +1 -1
  265. package/dist/cjs/useFocusEffect.native.js +1 -1
  266. package/dist/cjs/useFocusEffect.native.js.map +1 -1
  267. package/dist/cjs/useLoader.native.js +16 -16
  268. package/dist/cjs/useLoader.native.js.map +1 -1
  269. package/dist/cjs/useMatches.native.js +1 -1
  270. package/dist/cjs/useMatches.native.js.map +1 -1
  271. package/dist/cjs/useMatches.test.native.js +1 -1
  272. package/dist/cjs/useMatches.test.native.js.map +1 -1
  273. package/dist/cjs/useServerHeadInsertion.native.js.map +1 -1
  274. package/dist/cjs/utils/assertIsReady.native.js.map +1 -1
  275. package/dist/cjs/utils/children.native.js.map +1 -1
  276. package/dist/cjs/utils/cleanUrl.native.js +3 -3
  277. package/dist/cjs/utils/cleanUrl.native.js.map +1 -1
  278. package/dist/cjs/utils/cleanUrl.test.native.js +1 -1
  279. package/dist/cjs/utils/cleanUrl.test.native.js.map +1 -1
  280. package/dist/cjs/utils/dynamicImport.native.js.map +1 -1
  281. package/dist/cjs/utils/ensureExists.native.js.map +1 -1
  282. package/dist/cjs/utils/evictOldest.native.js.map +1 -1
  283. package/dist/cjs/utils/existsAsync.native.js.map +1 -1
  284. package/dist/cjs/utils/getPageExport.native.js.map +1 -1
  285. package/dist/cjs/utils/getPathnameFromFilePath.native.js.map +1 -1
  286. package/dist/cjs/utils/getPathnameFromFilePath.test.native.js +1 -1
  287. package/dist/cjs/utils/getPathnameFromFilePath.test.native.js.map +1 -1
  288. package/dist/cjs/utils/getRouterRootFromOneOptions.native.js.map +1 -1
  289. package/dist/cjs/utils/globDir.native.js.map +1 -1
  290. package/dist/cjs/utils/hashString.native.js.map +1 -1
  291. package/dist/cjs/utils/htmlEscape.native.js.map +1 -1
  292. package/dist/cjs/utils/isResponse.native.js.map +1 -1
  293. package/dist/cjs/utils/isRolldown.native.js.map +1 -1
  294. package/dist/cjs/utils/isStatus.native.js.map +1 -1
  295. package/dist/cjs/utils/pLimit.native.js.map +1 -1
  296. package/dist/cjs/utils/platform.native.js.map +1 -1
  297. package/dist/cjs/utils/promiseWithResolvers.native.js.map +1 -1
  298. package/dist/cjs/utils/rand.native.js.map +1 -1
  299. package/dist/cjs/utils/redirect.native.js +2 -2
  300. package/dist/cjs/utils/redirect.native.js.map +1 -1
  301. package/dist/cjs/utils/removeParams.native.js.map +1 -1
  302. package/dist/cjs/utils/removeSearch.native.js.map +1 -1
  303. package/dist/cjs/utils/removeUndefined.native.js.map +1 -1
  304. package/dist/cjs/utils/style.native.js.map +1 -1
  305. package/dist/cjs/utils/toAbsolute.native.js.map +1 -1
  306. package/dist/cjs/utils/trackLoaderDependencies.native.js +1 -1
  307. package/dist/cjs/utils/trackLoaderDependencies.native.js.map +1 -1
  308. package/dist/cjs/utils/url.native.js.map +1 -1
  309. package/dist/cjs/utils/useConstant.native.js.map +1 -1
  310. package/dist/cjs/utils/watchFile.native.js.map +1 -1
  311. package/dist/cjs/utils/weakKey.native.js.map +1 -1
  312. package/dist/cjs/utils/weakMemo.native.js.map +1 -1
  313. package/dist/cjs/utils/withStaticProperties.native.js.map +1 -1
  314. package/dist/cjs/utils/workerImport.native.js.map +1 -1
  315. package/dist/cjs/validateParams.native.js.map +1 -1
  316. package/dist/cjs/validateSearch.native.js.map +1 -1
  317. package/dist/cjs/vercel/build/buildVercelOutputDirectory.native.js +5 -5
  318. package/dist/cjs/vercel/build/buildVercelOutputDirectory.native.js.map +1 -1
  319. package/dist/cjs/vercel/build/config/vc-build-output-config-base.native.js.map +1 -1
  320. package/dist/cjs/vercel/build/config/vc-config-base.native.js.map +1 -1
  321. package/dist/cjs/vercel/build/config/vc-package-base.native.js.map +1 -1
  322. package/dist/cjs/vercel/build/generate/createApiServerlessFunction.native.js +3 -3
  323. package/dist/cjs/vercel/build/generate/createApiServerlessFunction.native.js.map +1 -1
  324. package/dist/cjs/vercel/build/generate/createSsrServerlessFunction.native.js +3 -3
  325. package/dist/cjs/vercel/build/generate/createSsrServerlessFunction.native.js.map +1 -1
  326. package/dist/cjs/vercel/build/getPathFromRoute.native.js +1 -1
  327. package/dist/cjs/vercel/build/getPathFromRoute.native.js.map +1 -1
  328. package/dist/cjs/views/EmptyRoute.native.js +1 -1
  329. package/dist/cjs/views/EmptyRoute.native.js.map +1 -1
  330. package/dist/cjs/views/ErrorBoundary.native.js.map +1 -1
  331. package/dist/cjs/views/LoadProgressBar.native.js +1 -1
  332. package/dist/cjs/views/LoadProgressBar.native.js.map +1 -1
  333. package/dist/cjs/views/Navigator.native.js +8 -8
  334. package/dist/cjs/views/Navigator.native.js.map +1 -1
  335. package/dist/cjs/views/OneStackRouter.native.js.map +1 -1
  336. package/dist/cjs/views/Protected.native.js.map +1 -1
  337. package/dist/cjs/views/RootErrorBoundary.native.js.map +1 -1
  338. package/dist/cjs/views/Screen.native.js +1 -1
  339. package/dist/cjs/views/Screen.native.js.map +1 -1
  340. package/dist/cjs/views/ScrollBehavior.native.js +2 -2
  341. package/dist/cjs/views/ScrollBehavior.native.js.map +1 -1
  342. package/dist/cjs/views/SourceInspector.native.js.map +1 -1
  343. package/dist/cjs/views/Try.native.js.map +1 -1
  344. package/dist/cjs/vite/DevHead.native.js +1 -1
  345. package/dist/cjs/vite/DevHead.native.js.map +1 -1
  346. package/dist/cjs/vite/constants.native.js.map +1 -1
  347. package/dist/cjs/vite/customNodeExternals.native.js.map +1 -1
  348. package/dist/cjs/vite/ensureTsConfig.native.js +2 -2
  349. package/dist/cjs/vite/ensureTsConfig.native.js.map +1 -1
  350. package/dist/cjs/vite/findDepsToOptimize.native.js.map +1 -1
  351. package/dist/cjs/vite/getManifest.native.js +2 -2
  352. package/dist/cjs/vite/getManifest.native.js.map +1 -1
  353. package/dist/cjs/vite/loadConfig.native.js +1 -1
  354. package/dist/cjs/vite/loadConfig.native.js.map +1 -1
  355. package/dist/cjs/vite/makePluginWebOnly.native.js.map +1 -1
  356. package/dist/cjs/vite/one.cjs +6 -2
  357. package/dist/cjs/vite/one.native.js +23 -20
  358. package/dist/cjs/vite/one.native.js.map +1 -1
  359. package/dist/cjs/vite/plugins/SSRCSSPlugin.native.js +1 -1
  360. package/dist/cjs/vite/plugins/SSRCSSPlugin.native.js.map +1 -1
  361. package/dist/cjs/vite/plugins/clientTreeShakePlugin.native.js +1 -1
  362. package/dist/cjs/vite/plugins/clientTreeShakePlugin.native.js.map +1 -1
  363. package/dist/cjs/vite/plugins/clientTreeShakePlugin.test.native.js +1 -1
  364. package/dist/cjs/vite/plugins/clientTreeShakePlugin.test.native.js.map +1 -1
  365. package/dist/cjs/vite/plugins/criticalCSSPlugin.native.js.map +1 -1
  366. package/dist/cjs/vite/plugins/criticalCSSPlugin.test.native.js.map +1 -1
  367. package/dist/cjs/vite/plugins/devtoolsPlugin.native.js.map +1 -1
  368. package/dist/cjs/vite/plugins/environmentGuardPlugin.native.js.map +1 -1
  369. package/dist/cjs/vite/plugins/environmentGuardPlugin.test.native.js +1 -1
  370. package/dist/cjs/vite/plugins/environmentGuardPlugin.test.native.js.map +1 -1
  371. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js +12 -12
  372. package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js.map +1 -1
  373. package/dist/cjs/vite/plugins/fixDependenciesPlugin.native.js.map +1 -1
  374. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.native.js +2 -2
  375. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.native.js.map +1 -1
  376. package/dist/cjs/vite/plugins/imageDataPlugin.native.js +1 -1
  377. package/dist/cjs/vite/plugins/imageDataPlugin.native.js.map +1 -1
  378. package/dist/cjs/vite/plugins/imageDataPlugin.test.native.js.map +1 -1
  379. package/dist/cjs/vite/plugins/removeReactNativeWebAnimatedPlugin.native.js.map +1 -1
  380. package/dist/cjs/vite/plugins/sourceInspectorPlugin.cjs +12 -25
  381. package/dist/cjs/vite/plugins/sourceInspectorPlugin.native.js +11 -40
  382. package/dist/cjs/vite/plugins/sourceInspectorPlugin.native.js.map +1 -1
  383. package/dist/cjs/vite/plugins/useDomPlugin.native.js.map +1 -1
  384. package/dist/cjs/vite/plugins/virtualEntryConstants.native.js.map +1 -1
  385. package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js +2 -2
  386. package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js.map +1 -1
  387. package/dist/cjs/vite/plugins/virtualEntryPlugin.test.native.js +1 -1
  388. package/dist/cjs/vite/plugins/virtualEntryPlugin.test.native.js.map +1 -1
  389. package/dist/cjs/vite/plugins/warmRoutesPlugin.native.js.map +1 -1
  390. package/dist/cjs/vite/replaceLoader.native.js.map +1 -1
  391. package/dist/cjs/vite/resolveResponse.native.js +2 -2
  392. package/dist/cjs/vite/resolveResponse.native.js.map +1 -1
  393. package/dist/cjs/vite/types.native.js.map +1 -1
  394. package/dist/cjs/vite-auto-warm.native.js +1 -1
  395. package/dist/cjs/vite-auto-warm.native.js.map +1 -1
  396. package/dist/cjs/vite.native.js +9 -9
  397. package/dist/cjs/vite.native.js.map +1 -1
  398. package/dist/cjs/zero/getQueryKey.native.js +1 -1
  399. package/dist/cjs/zero/getQueryKey.native.js.map +1 -1
  400. package/dist/cjs/zero/isZeroQuery.native.js.map +1 -1
  401. package/dist/cjs/zero/resolveQuery.native.js.map +1 -1
  402. package/dist/cjs/zero/subscribeToQuery.native.js.map +1 -1
  403. package/dist/cjs/zero/types.native.js.map +1 -1
  404. package/dist/cjs/zero/useQuery.native.js +4 -4
  405. package/dist/cjs/zero/useQuery.native.js.map +1 -1
  406. package/dist/cjs/zero/useQueryZero.native.js.map +1 -1
  407. package/dist/cjs/zero.native.js +3 -3
  408. package/dist/cjs/zero.native.js.map +1 -1
  409. package/dist/esm/cli/build.mjs +8 -11
  410. package/dist/esm/cli/build.mjs.map +1 -1
  411. package/dist/esm/cli/build.native.js +8 -11
  412. package/dist/esm/cli/build.native.js.map +1 -1
  413. package/dist/esm/serve-worker.mjs +11 -7
  414. package/dist/esm/serve-worker.mjs.map +1 -1
  415. package/dist/esm/serve-worker.native.js +11 -7
  416. package/dist/esm/serve-worker.native.js.map +1 -1
  417. package/dist/esm/server/oneServe.mjs +4 -1
  418. package/dist/esm/server/oneServe.mjs.map +1 -1
  419. package/dist/esm/server/oneServe.native.js +4 -1
  420. package/dist/esm/server/oneServe.native.js.map +1 -1
  421. package/dist/esm/server/workerHandler.mjs +469 -0
  422. package/dist/esm/server/workerHandler.mjs.map +1 -0
  423. package/dist/esm/server/workerHandler.native.js +647 -0
  424. package/dist/esm/server/workerHandler.native.js.map +1 -0
  425. package/dist/esm/vite/one.mjs +6 -2
  426. package/dist/esm/vite/one.mjs.map +1 -1
  427. package/dist/esm/vite/one.native.js +5 -2
  428. package/dist/esm/vite/one.native.js.map +1 -1
  429. package/dist/esm/vite/plugins/sourceInspectorPlugin.mjs +11 -24
  430. package/dist/esm/vite/plugins/sourceInspectorPlugin.mjs.map +1 -1
  431. package/dist/esm/vite/plugins/sourceInspectorPlugin.native.js +10 -39
  432. package/dist/esm/vite/plugins/sourceInspectorPlugin.native.js.map +1 -1
  433. package/package.json +10 -10
  434. package/src/cli/build.ts +8 -11
  435. package/src/serve-worker.ts +20 -22
  436. package/src/server/oneServe.ts +1 -1
  437. package/src/server/workerHandler.ts +767 -0
  438. package/src/vite/one.ts +2 -1
  439. package/src/vite/plugins/sourceInspectorPlugin.ts +22 -56
  440. package/src/vite/types.ts +8 -0
  441. package/types/cli/build.d.ts.map +1 -1
  442. package/types/serve-worker.d.ts +10 -21
  443. package/types/serve-worker.d.ts.map +1 -1
  444. package/types/server/workerHandler.d.ts +23 -0
  445. package/types/server/workerHandler.d.ts.map +1 -0
  446. package/types/vite/one.d.ts.map +1 -1
  447. package/types/vite/plugins/sourceInspectorPlugin.d.ts +3 -1
  448. package/types/vite/plugins/sourceInspectorPlugin.d.ts.map +1 -1
  449. package/types/vite/types.d.ts +7 -0
  450. package/types/vite/types.d.ts.map +1 -1
@@ -0,0 +1,767 @@
1
+ import {
2
+ CSS_PRELOAD_JS_POSTFIX,
3
+ LOADER_JS_POSTFIX_UNCACHED,
4
+ PRELOAD_JS_POSTFIX,
5
+ } from '../constants'
6
+ import {
7
+ compileManifest,
8
+ getURLfromRequestURL,
9
+ type RequestHandlers,
10
+ resolveAPIRoute,
11
+ resolveLoaderRoute,
12
+ resolvePageRoute,
13
+ } from '../createHandleRequest'
14
+ import type { RenderAppProps } from '../types'
15
+ import { getPathFromLoaderPath } from '../utils/cleanUrl'
16
+ import { isResponse } from '../utils/isResponse'
17
+ import { withRequestContext } from '../vite/resolveResponse'
18
+ import type { One } from '../vite/types'
19
+ import type { RouteInfoCompiled } from './createRoutesManifest'
20
+ import { setSSRLoaderData } from './ssrLoaderData'
21
+ import { getFetchStaticHtml } from './staticHtmlFetcher'
22
+
23
+ export type LazyRoutes = {
24
+ serverEntry: () => Promise<{
25
+ default: {
26
+ render: (props: any) => any
27
+ renderStream?: (props: any) => Promise<ReadableStream>
28
+ }
29
+ }>
30
+ pages: Record<string, () => Promise<any>>
31
+ api: Record<string, () => Promise<any>>
32
+ middlewares: Record<string, () => Promise<any>>
33
+ }
34
+
35
+ type WorkerHandlerOptions = {
36
+ oneOptions: One.PluginOptions
37
+ buildInfo: One.BuildInfo
38
+ lazyRoutes: LazyRoutes
39
+ }
40
+
41
+ export function createWorkerHandler(options: WorkerHandlerOptions) {
42
+ const { oneOptions } = options
43
+
44
+ // mutable state for route swapping
45
+ let currentLazyRoutes = options.lazyRoutes
46
+ let compiledManifest = compileManifest(options.buildInfo.manifest)
47
+ let routeToBuildInfo = options.buildInfo.routeToBuildInfo
48
+ let routeMap = options.buildInfo.routeMap
49
+ let currentPreloads = options.buildInfo.preloads
50
+ let currentCssPreloads = options.buildInfo.cssPreloads
51
+
52
+ const debugRouter = process.env.ONE_DEBUG_ROUTER
53
+
54
+ // compile redirects for fast matching
55
+ const redirects = oneOptions.web?.redirects
56
+ let compiledRedirects: Array<{
57
+ regex: RegExp
58
+ destination: string
59
+ permanent: boolean
60
+ }> | null = null
61
+
62
+ if (redirects?.length) {
63
+ compiledRedirects = redirects.map((r) => {
64
+ const regexSource = r.source.replace(/:(\w+)/g, (_, name) => `(?<${name}>[^/]+)`)
65
+ return {
66
+ regex: new RegExp(`^${regexSource}$`),
67
+ destination: r.destination,
68
+ permanent: r.permanent || false,
69
+ }
70
+ })
71
+ }
72
+
73
+ // pre-computed constants
74
+ const useStreaming = !process.env.ONE_BUFFERED_SSR
75
+ const htmlHeaders = { 'content-type': 'text/html' }
76
+ const ssrHtmlHeaders = { 'content-type': 'text/html', 'cache-control': 'no-cache' }
77
+
78
+ // caches
79
+ const loaderCache = new Map<string, Function | null>()
80
+ const moduleImportCache = new Map<string, any>()
81
+ const loaderCacheFnMap = new Map<string, Function | null>()
82
+ const pendingLoaderResults = new Map<
83
+ string,
84
+ { promise: Promise<any>; expires: number }
85
+ >()
86
+
87
+ // render entry (lazy loaded from serverEntry)
88
+ let render: ((props: RenderAppProps) => any) | null = null
89
+ let renderStream: ((props: RenderAppProps) => Promise<ReadableStream>) | null = null
90
+ let renderLoading: Promise<void> | null = null
91
+ let renderGeneration = 0
92
+
93
+ function ensureRenderLoaded(): void | Promise<void> {
94
+ if (render) return
95
+ if (renderLoading) return renderLoading
96
+ const gen = ++renderGeneration
97
+ renderLoading = (async () => {
98
+ const entry = await currentLazyRoutes.serverEntry()
99
+ // if updateRoutes was called while we were loading, discard stale entry
100
+ if (gen !== renderGeneration) return
101
+ render = entry.default.render as any
102
+ renderStream = (entry.default as any).renderStream || null
103
+ })()
104
+ return renderLoading
105
+ }
106
+
107
+ function findNearestNotFoundPath(urlPath: string): string {
108
+ let cur = urlPath
109
+ while (cur) {
110
+ const parent = cur.lastIndexOf('/') > 0 ? cur.slice(0, cur.lastIndexOf('/')) : ''
111
+ if (routeMap[`${parent}/+not-found`]) return `${parent}/+not-found`
112
+ if (!parent) break
113
+ cur = parent
114
+ }
115
+ return '/+not-found'
116
+ }
117
+
118
+ function make404LoaderJs(path: string, logReason?: string): string {
119
+ const nfPath = findNearestNotFoundPath(path)
120
+ if (logReason) console.error(`[one] 404 loader for ${path}: ${logReason}`)
121
+ return `export function loader(){return{__oneError:404,__oneErrorMessage:'Not Found',__oneNotFoundPath:${JSON.stringify(nfPath)}}}`
122
+ }
123
+
124
+ async function readStaticHtml(htmlPath: string): Promise<string | null> {
125
+ const fetchStaticHtml = getFetchStaticHtml()
126
+ if (fetchStaticHtml) return await fetchStaticHtml(htmlPath)
127
+ if (debugRouter) {
128
+ console.warn(`[one/worker] no fetchStaticHtml set, cannot read ${htmlPath}`)
129
+ }
130
+ return null
131
+ }
132
+
133
+ // resolve a route module's loader - sync on cache hit, async on cold start
134
+ function resolveLoaderSync(
135
+ lazyKey: string | undefined
136
+ ): Function | null | Promise<Function | null> {
137
+ const cacheKey = lazyKey || ''
138
+ const cached = loaderCache.get(cacheKey)
139
+ if (cached !== undefined) return cached
140
+
141
+ return (async () => {
142
+ let routeExported: any
143
+ if (moduleImportCache.has(cacheKey)) {
144
+ routeExported = moduleImportCache.get(cacheKey)
145
+ } else if (lazyKey && currentLazyRoutes.pages[lazyKey]) {
146
+ routeExported = await currentLazyRoutes.pages[lazyKey]()
147
+ moduleImportCache.set(cacheKey, routeExported)
148
+ } else {
149
+ console.warn(`[one/worker] no lazy route for ${cacheKey}`)
150
+ loaderCache.set(cacheKey, null)
151
+ return null
152
+ }
153
+
154
+ const loader = routeExported?.loader || null
155
+ loaderCache.set(cacheKey, loader)
156
+ loaderCacheFnMap.set(cacheKey, routeExported?.loaderCache ?? null)
157
+ return loader
158
+ })()
159
+ }
160
+
161
+ // import and run a loader with coalescing support
162
+ async function importAndRunLoader(
163
+ routeId: string,
164
+ lazyKey: string | undefined,
165
+ loaderProps: any
166
+ ): Promise<{ loaderData: unknown; routeId: string; isEnoent?: boolean }> {
167
+ if (!lazyKey) return { loaderData: undefined, routeId }
168
+
169
+ // check loaderCache coalescing before resolving
170
+ const cacheMapKey = lazyKey
171
+ const loaderCacheFn = loaderCacheFnMap.get(cacheMapKey)
172
+ let coalFullKey: string | undefined
173
+ let coalTtl = 0
174
+
175
+ if (loaderCacheFn) {
176
+ const cacheResult = loaderCacheFn(loaderProps?.params, loaderProps?.request)
177
+ const cacheKey = typeof cacheResult === 'string' ? cacheResult : cacheResult?.key
178
+ coalTtl = typeof cacheResult === 'string' ? 0 : (cacheResult?.ttl ?? 0)
179
+
180
+ if (cacheKey != null) {
181
+ coalFullKey = routeId + '\0' + cacheKey
182
+ const existing = pendingLoaderResults.get(coalFullKey)
183
+ if (existing && (!existing.expires || Date.now() < existing.expires)) {
184
+ const loaderData = await existing.promise
185
+ return { loaderData, routeId }
186
+ }
187
+ }
188
+ }
189
+
190
+ try {
191
+ const loaderOrPromise = resolveLoaderSync(lazyKey)
192
+ const loader =
193
+ loaderOrPromise instanceof Promise ? await loaderOrPromise : loaderOrPromise
194
+ if (!loader) return { loaderData: undefined, routeId }
195
+
196
+ if (coalFullKey) {
197
+ const promise = loader(loaderProps)
198
+ const entry = { promise, expires: 0 }
199
+ pendingLoaderResults.set(coalFullKey, entry)
200
+ promise.then(
201
+ () => {
202
+ entry.expires = coalTtl > 0 ? Date.now() + coalTtl : 0
203
+ if (coalTtl <= 0)
204
+ Promise.resolve().then(() => pendingLoaderResults.delete(coalFullKey!))
205
+ },
206
+ () => pendingLoaderResults.delete(coalFullKey!)
207
+ )
208
+ const loaderData = await promise
209
+ return { loaderData, routeId }
210
+ }
211
+
212
+ const loaderData = await loader(loaderProps)
213
+ return { loaderData, routeId }
214
+ } catch (err) {
215
+ if (isResponse(err)) throw err
216
+ if ((err as any)?.code === 'ENOENT')
217
+ return { loaderData: undefined, routeId, isEnoent: true }
218
+ console.error(`[one] Error running loader for ${routeId}:`, err)
219
+ return { loaderData: undefined, routeId }
220
+ }
221
+ }
222
+
223
+ // request handlers - worker-only, always uses lazyRoutes
224
+ const requestHandlers: RequestHandlers = {
225
+ async handleStaticFile() {
226
+ // workers serve static assets via platform (ASSETS binding)
227
+ return null
228
+ },
229
+
230
+ async handleAPI({ route }) {
231
+ if (currentLazyRoutes.api[route.page]) {
232
+ return await currentLazyRoutes.api[route.page]()
233
+ }
234
+ console.warn(`[one/worker] no lazy API route for ${route.page}`)
235
+ return null
236
+ },
237
+
238
+ async loadMiddleware(route) {
239
+ if (currentLazyRoutes.middlewares[route.contextKey]) {
240
+ return await currentLazyRoutes.middlewares[route.contextKey]()
241
+ }
242
+ console.warn(`[one/worker] no lazy middleware for ${route.contextKey}`)
243
+ return null
244
+ },
245
+
246
+ async handleLoader({ route, loaderProps }) {
247
+ const routeFile = (route as any).routeFile || route.file
248
+
249
+ let loader: Function | null
250
+ try {
251
+ const loaderResult = resolveLoaderSync(routeFile)
252
+ loader = loaderResult instanceof Promise ? await loaderResult : loaderResult
253
+ } catch (err) {
254
+ if ((err as any)?.code === 'ERR_MODULE_NOT_FOUND') return null
255
+ throw err
256
+ }
257
+
258
+ if (!loader) return null
259
+
260
+ let json
261
+ try {
262
+ json = await loader(loaderProps)
263
+ } catch (err) {
264
+ if ((err as any)?.code === 'ENOENT') {
265
+ return make404LoaderJs(
266
+ loaderProps?.path || '/',
267
+ `ENOENT ${(err as any)?.path || err}`
268
+ )
269
+ }
270
+ throw err
271
+ }
272
+
273
+ if (isResponse(json)) throw json
274
+ return `export function loader() { return ${JSON.stringify(json)} }`
275
+ },
276
+
277
+ async handlePage({ route, url, loaderProps }) {
278
+ const routeBuildInfo = routeToBuildInfo[route.file]
279
+
280
+ if (route.type === 'ssr') {
281
+ if (!routeBuildInfo) {
282
+ console.error(`Error in route`, route)
283
+ throw new Error(
284
+ `No buildinfo found for ${url}, route: ${route.file}, in keys:\n ${Object.keys(routeToBuildInfo).join('\n ')}`
285
+ )
286
+ }
287
+
288
+ try {
289
+ const layoutRoutes = route.layouts || []
290
+
291
+ // fast path: skip layouts with no loader
292
+ const layoutLoaderPromises: Array<ReturnType<typeof importAndRunLoader>> = []
293
+ const noLoaderResults: Array<{
294
+ loaderData: unknown
295
+ routeId: string
296
+ }> = []
297
+
298
+ for (const layout of layoutRoutes) {
299
+ const cacheKey = layout.contextKey || ''
300
+ const cachedLoader = loaderCache.get(cacheKey)
301
+
302
+ if (cachedLoader === null) {
303
+ noLoaderResults.push({
304
+ loaderData: undefined,
305
+ routeId: layout.contextKey,
306
+ })
307
+ } else {
308
+ layoutLoaderPromises.push(
309
+ importAndRunLoader(layout.contextKey, layout.contextKey, loaderProps)
310
+ )
311
+ }
312
+ }
313
+
314
+ const pageLoaderPromise = importAndRunLoader(
315
+ route.file,
316
+ route.file,
317
+ loaderProps
318
+ )
319
+
320
+ let layoutResults: Array<{
321
+ loaderData: unknown
322
+ routeId: string
323
+ isEnoent?: boolean
324
+ }>
325
+ let pageResult: {
326
+ loaderData: unknown
327
+ routeId: string
328
+ isEnoent?: boolean
329
+ }
330
+
331
+ try {
332
+ if (layoutLoaderPromises.length === 0) {
333
+ layoutResults = noLoaderResults
334
+ pageResult = await pageLoaderPromise
335
+ } else {
336
+ const [asyncLayoutResults, pr] = await Promise.all([
337
+ Promise.all(layoutLoaderPromises),
338
+ pageLoaderPromise,
339
+ ])
340
+ layoutResults = [...noLoaderResults, ...asyncLayoutResults]
341
+ pageResult = pr
342
+ }
343
+ } catch (err) {
344
+ if (isResponse(err)) return err
345
+ throw err
346
+ }
347
+
348
+ // loader ENOENT → serve nearest +not-found page
349
+ if (pageResult.isEnoent) {
350
+ const nfPath = findNearestNotFoundPath(loaderProps?.path || '/')
351
+ const nfHtml = routeMap[nfPath]
352
+ if (nfHtml) {
353
+ const html = await readStaticHtml(nfHtml)
354
+ if (html) {
355
+ return new Response(html, {
356
+ headers: { 'content-type': 'text/html' },
357
+ status: 404,
358
+ })
359
+ }
360
+ }
361
+ return new Response('404 Not Found', { status: 404 })
362
+ }
363
+
364
+ // build matches array (layouts + page)
365
+ const matchPathname = loaderProps?.path || '/'
366
+ const matchParams = loaderProps?.params || {}
367
+ const matches: One.RouteMatch[] = new Array(layoutResults.length + 1)
368
+ for (let i = 0; i < layoutResults.length; i++) {
369
+ const result = layoutResults[i]
370
+ matches[i] = {
371
+ routeId: result.routeId,
372
+ pathname: matchPathname,
373
+ params: matchParams,
374
+ loaderData: result.loaderData,
375
+ }
376
+ }
377
+ matches[layoutResults.length] = {
378
+ routeId: pageResult.routeId,
379
+ pathname: matchPathname,
380
+ params: matchParams,
381
+ loaderData: pageResult.loaderData,
382
+ }
383
+
384
+ const loaderData = pageResult.loaderData
385
+
386
+ // populate per-loader WeakMap for layout useLoader
387
+ for (const layout of layoutRoutes) {
388
+ const key = layout.contextKey
389
+ const loaderFn = loaderCache.get(key)
390
+ if (loaderFn) {
391
+ const result = layoutResults.find((r) => r.routeId === key)
392
+ if (result) setSSRLoaderData(loaderFn, result.loaderData)
393
+ }
394
+ }
395
+ const pageLoaderFn = loaderCache.get(route.file)
396
+ if (pageLoaderFn) setSSRLoaderData(pageLoaderFn, pageResult.loaderData)
397
+
398
+ globalThis['__vxrnresetState']?.()
399
+
400
+ const renderProps = {
401
+ mode: route.type,
402
+ loaderData,
403
+ loaderProps,
404
+ path: loaderProps?.path || '/',
405
+ preloads: routeBuildInfo.criticalPreloads || routeBuildInfo.preloads,
406
+ deferredPreloads: routeBuildInfo.deferredPreloads,
407
+ css: routeBuildInfo.css,
408
+ cssContents: routeBuildInfo.cssContents,
409
+ matches,
410
+ }
411
+
412
+ const _rl = ensureRenderLoaded()
413
+ if (_rl) await _rl
414
+
415
+ const status = route.isNotFound ? 404 : 200
416
+ const responseHeaders = route.isNotFound ? htmlHeaders : ssrHtmlHeaders
417
+
418
+ if (useStreaming) {
419
+ const stream = await renderStream!(renderProps)
420
+ return new Response(stream, { headers: responseHeaders, status })
421
+ }
422
+
423
+ const rendered = await render!(renderProps)
424
+ return new Response(rendered, { headers: responseHeaders, status })
425
+ } catch (err) {
426
+ if (isResponse(err)) return err
427
+ console.error(
428
+ `[one] Error rendering SSR route ${route.file}\n${err?.['stack'] ?? err}\nurl: ${url}`
429
+ )
430
+ return null
431
+ }
432
+ } else {
433
+ // SPA/SSG handling
434
+ const layoutRoutes = route.layouts || []
435
+ const needsSpaShell =
436
+ route.type === 'spa' &&
437
+ layoutRoutes.some(
438
+ (layout: any) =>
439
+ layout.layoutRenderMode === 'ssg' || layout.layoutRenderMode === 'ssr'
440
+ )
441
+
442
+ if (needsSpaShell) {
443
+ try {
444
+ const layoutResults = await Promise.all(
445
+ layoutRoutes.map((layout: any) =>
446
+ importAndRunLoader(layout.contextKey, layout.contextKey, loaderProps)
447
+ )
448
+ )
449
+
450
+ const matches: One.RouteMatch[] = layoutResults.map((result) => ({
451
+ routeId: result.routeId,
452
+ pathname: loaderProps?.path || '/',
453
+ params: loaderProps?.params || {},
454
+ loaderData: result.loaderData,
455
+ }))
456
+
457
+ globalThis['__vxrnresetState']?.()
458
+
459
+ const _rl = ensureRenderLoaded()
460
+ if (_rl) await _rl
461
+
462
+ const spaRouteBuildInfo = routeToBuildInfo[route.file]
463
+ const rendered = await render!({
464
+ mode: 'spa-shell',
465
+ loaderData: undefined,
466
+ loaderProps,
467
+ path: loaderProps?.path || '/',
468
+ preloads:
469
+ spaRouteBuildInfo?.criticalPreloads || spaRouteBuildInfo?.preloads,
470
+ deferredPreloads: spaRouteBuildInfo?.deferredPreloads,
471
+ css: spaRouteBuildInfo?.css,
472
+ cssContents: spaRouteBuildInfo?.cssContents,
473
+ matches,
474
+ })
475
+
476
+ return new Response(rendered, {
477
+ headers: htmlHeaders,
478
+ status: route.isNotFound ? 404 : 200,
479
+ })
480
+ } catch (err) {
481
+ if (isResponse(err)) return err
482
+ console.error(
483
+ `[one] Error rendering spa-shell for ${route.file}\n${err?.['stack'] ?? err}\nurl: ${url}`
484
+ )
485
+ }
486
+ }
487
+
488
+ // static HTML lookup for SPA/SSG
489
+ const isDynamicRoute = Object.keys(route.routeKeys).length > 0
490
+ const routeCleanPath = route.urlCleanPath.replace(/\?/g, '')
491
+ const notFoundKey = route.isNotFound
492
+ ? route.page.replace(/\[([^\]]+)\]/g, ':$1')
493
+ : null
494
+
495
+ const htmlPath = notFoundKey
496
+ ? routeMap[notFoundKey]
497
+ : isDynamicRoute
498
+ ? routeMap[routeCleanPath] || routeMap[url.pathname]
499
+ : routeMap[url.pathname] || routeMap[routeBuildInfo?.cleanPath]
500
+
501
+ if (htmlPath) {
502
+ const html = await readStaticHtml(htmlPath)
503
+ if (html) {
504
+ return new Response(html, {
505
+ headers: htmlHeaders,
506
+ status: route.isNotFound ? 404 : 200,
507
+ })
508
+ }
509
+ }
510
+
511
+ // dynamic route with no static HTML → 404
512
+ if (isDynamicRoute) {
513
+ const notFoundRoute = findNearestNotFoundPath(url.pathname)
514
+ const notFoundHtmlPath = routeMap[notFoundRoute]
515
+
516
+ if (notFoundHtmlPath) {
517
+ const notFoundHtml = await readStaticHtml(notFoundHtmlPath)
518
+ if (notFoundHtml) {
519
+ const notFoundMarker = `<script>window.__one404=${JSON.stringify({ originalPath: url.pathname, notFoundPath: notFoundRoute })}</script>`
520
+ const injectedHtml = notFoundHtml.includes('</head>')
521
+ ? notFoundHtml.replace('</head>', `${notFoundMarker}</head>`)
522
+ : notFoundHtml.replace('<body', `${notFoundMarker}<body`)
523
+
524
+ return new Response(injectedHtml, {
525
+ headers: htmlHeaders,
526
+ status: 404,
527
+ })
528
+ }
529
+ }
530
+
531
+ return new Response('404 Not Found', { status: 404 })
532
+ }
533
+
534
+ return null
535
+ }
536
+ },
537
+ }
538
+
539
+ // set cache headers based on route type
540
+ function setCacheHeaders(
541
+ response: Response,
542
+ route: RouteInfoCompiled,
543
+ isAPI: boolean
544
+ ): Response {
545
+ if (
546
+ !response.headers.has('cache-control') &&
547
+ !response.headers.has('Cache-Control')
548
+ ) {
549
+ try {
550
+ if (isAPI) {
551
+ response.headers.set('cache-control', 'no-store')
552
+ } else if (route.type === 'ssg' || route.type === 'spa') {
553
+ response.headers.set(
554
+ 'cache-control',
555
+ 'public, s-maxage=60, stale-while-revalidate=120'
556
+ )
557
+ } else {
558
+ response.headers.set('cache-control', 'no-cache')
559
+ }
560
+ } catch {
561
+ // headers might be immutable on some responses
562
+ }
563
+ }
564
+ return response
565
+ }
566
+
567
+ // the main fetch handler - matches request to route and dispatches
568
+ async function handleRequest(request: Request): Promise<Response | null> {
569
+ const url = getURLfromRequestURL(request)
570
+ const pathname = url.pathname
571
+ const method = request.method
572
+
573
+ // 1. redirects
574
+ if (compiledRedirects) {
575
+ for (const redirect of compiledRedirects) {
576
+ const match = redirect.regex.exec(pathname)
577
+ if (match) {
578
+ let destination = redirect.destination
579
+ if (match.groups) {
580
+ for (const [name, value] of Object.entries(match.groups)) {
581
+ destination = destination.replace(`:${name}`, value)
582
+ }
583
+ }
584
+ if (debugRouter) console.info(`[one] ↪ redirect ${pathname} → ${destination}`)
585
+ return new Response(null, {
586
+ status: redirect.permanent ? 301 : 302,
587
+ headers: {
588
+ location: new URL(destination, url.origin).toString(),
589
+ },
590
+ })
591
+ }
592
+ }
593
+ }
594
+
595
+ // 2. preload endpoints (empty response if no preload exists)
596
+ if (pathname.endsWith(PRELOAD_JS_POSTFIX)) {
597
+ if (!currentPreloads[pathname]) {
598
+ return new Response('', {
599
+ headers: { 'Content-Type': 'text/javascript' },
600
+ })
601
+ }
602
+ // preload exists - let platform serve the static file
603
+ return null
604
+ }
605
+
606
+ if (pathname.endsWith(CSS_PRELOAD_JS_POSTFIX)) {
607
+ if (!currentCssPreloads?.[pathname]) {
608
+ return new Response('export default Promise.resolve()', {
609
+ headers: { 'Content-Type': 'text/javascript' },
610
+ })
611
+ }
612
+ return null
613
+ }
614
+
615
+ // 3. loader refetch requests
616
+ if (pathname.endsWith(LOADER_JS_POSTFIX_UNCACHED)) {
617
+ const originalUrl = getPathFromLoaderPath(pathname)
618
+
619
+ for (const route of compiledManifest.pageRoutes) {
620
+ if (route.file === '') continue
621
+ if (!route.compiledRegex.test(originalUrl)) continue
622
+
623
+ // ssg dynamic route not in routeMap → 404
624
+ if (
625
+ route.type === 'ssg' &&
626
+ Object.keys(route.routeKeys).length > 0 &&
627
+ !routeMap[originalUrl]
628
+ ) {
629
+ return new Response(make404LoaderJs(originalUrl, 'ssg route not in routeMap'), {
630
+ headers: { 'Content-Type': 'text/javascript' },
631
+ })
632
+ }
633
+
634
+ const loaderRoute = {
635
+ ...route,
636
+ routeFile: route.file,
637
+ file: (route as any).loaderServerPath || pathname,
638
+ }
639
+
640
+ const finalUrl = new URL(originalUrl, url.origin)
641
+ finalUrl.search = url.search
642
+ const cleanedRequest = new Request(finalUrl, request)
643
+
644
+ try {
645
+ return await resolveLoaderRoute(
646
+ requestHandlers,
647
+ cleanedRequest,
648
+ finalUrl,
649
+ loaderRoute as any
650
+ )
651
+ } catch (err) {
652
+ if ((err as any)?.code === 'ERR_MODULE_NOT_FOUND') {
653
+ return new Response('export function loader() { return undefined }', {
654
+ headers: { 'Content-Type': 'text/javascript' },
655
+ })
656
+ }
657
+ console.error(`Error running loader: ${err}`)
658
+ return null
659
+ }
660
+ }
661
+
662
+ return null
663
+ }
664
+
665
+ // 4. skip plain .js/.css (let platform serve static assets)
666
+ if (pathname.endsWith('.js') || pathname.endsWith('.css')) {
667
+ return null
668
+ }
669
+
670
+ // 5. API routes (any method)
671
+ for (const route of compiledManifest.apiRoutes) {
672
+ if (route.compiledRegex.test(pathname)) {
673
+ if (debugRouter)
674
+ console.info(`[one] ⚡ ${pathname} → matched API route: ${route.page}`)
675
+ const response = await resolveAPIRoute(requestHandlers, request, url, route)
676
+ if (response && isResponse(response)) {
677
+ return setCacheHeaders(response, route, true)
678
+ }
679
+ return null
680
+ }
681
+ }
682
+
683
+ // 6. page routes (GET only)
684
+ if (method === 'GET') {
685
+ for (const route of compiledManifest.pageRoutes) {
686
+ if (!route.compiledRegex.test(pathname)) continue
687
+
688
+ if (debugRouter) {
689
+ console.info(
690
+ `[one] ⚡ ${pathname} → matched page route: ${route.page} (${route.type})`
691
+ )
692
+ }
693
+
694
+ // fast path: SSR without middleware
695
+ if (route.type === 'ssr' && !route.middlewares?.length) {
696
+ const params: Record<string, string> = {}
697
+ const match = route.compiledRegex.exec(pathname)
698
+ if (match?.groups) {
699
+ for (const [key, value] of Object.entries(match.groups)) {
700
+ params[route.routeKeys[key]] = value as string
701
+ }
702
+ }
703
+
704
+ const loaderProps = {
705
+ path: pathname,
706
+ search: url.search,
707
+ request,
708
+ params,
709
+ }
710
+
711
+ const response = await withRequestContext(async () => {
712
+ try {
713
+ return await requestHandlers.handlePage!({
714
+ request,
715
+ route,
716
+ url,
717
+ loaderProps,
718
+ })
719
+ } catch (err) {
720
+ if (isResponse(err)) return err as Response
721
+ throw err
722
+ }
723
+ })
724
+
725
+ if (response && isResponse(response)) {
726
+ return setCacheHeaders(response, route, false)
727
+ }
728
+ return null
729
+ }
730
+
731
+ // general path
732
+ try {
733
+ const response = await resolvePageRoute(requestHandlers, request, url, route)
734
+ if (response && isResponse(response)) {
735
+ return setCacheHeaders(response, route, false)
736
+ }
737
+ } catch (err) {
738
+ console.error(` [one] Error handling request: ${(err as any)['stack']}`)
739
+ }
740
+
741
+ return null
742
+ }
743
+ }
744
+
745
+ return null
746
+ }
747
+
748
+ function updateRoutes(newBuildInfo: One.BuildInfo, newLazyRoutes?: LazyRoutes) {
749
+ compiledManifest = compileManifest(newBuildInfo.manifest)
750
+ routeToBuildInfo = newBuildInfo.routeToBuildInfo
751
+ routeMap = newBuildInfo.routeMap
752
+ currentPreloads = newBuildInfo.preloads
753
+ currentCssPreloads = newBuildInfo.cssPreloads
754
+ if (newLazyRoutes) currentLazyRoutes = newLazyRoutes
755
+
756
+ // clear all caches
757
+ loaderCache.clear()
758
+ moduleImportCache.clear()
759
+ loaderCacheFnMap.clear()
760
+ pendingLoaderResults.clear()
761
+ render = null
762
+ renderStream = null
763
+ renderLoading = null
764
+ }
765
+
766
+ return { handleRequest, updateRoutes }
767
+ }