@rangojs/router 0.0.0-experimental.0b82333f

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 (1108) hide show
  1. package/AGENTS.md +9 -0
  2. package/README.md +899 -0
  3. package/dist/__internal.d.ts +83 -0
  4. package/dist/__internal.d.ts.map +1 -0
  5. package/dist/__internal.js +19 -0
  6. package/dist/__internal.js.map +1 -0
  7. package/dist/__mocks__/version.d.ts +7 -0
  8. package/dist/__mocks__/version.d.ts.map +1 -0
  9. package/dist/__mocks__/version.js +7 -0
  10. package/dist/__mocks__/version.js.map +1 -0
  11. package/dist/__tests__/client-href.test.d.ts +2 -0
  12. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  13. package/dist/__tests__/client-href.test.js +74 -0
  14. package/dist/__tests__/client-href.test.js.map +1 -0
  15. package/dist/__tests__/component-utils.test.d.ts +2 -0
  16. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  17. package/dist/__tests__/component-utils.test.js +51 -0
  18. package/dist/__tests__/component-utils.test.js.map +1 -0
  19. package/dist/__tests__/event-controller.test.d.ts +2 -0
  20. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  21. package/dist/__tests__/event-controller.test.js +538 -0
  22. package/dist/__tests__/event-controller.test.js.map +1 -0
  23. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  24. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  25. package/dist/__tests__/helpers/route-tree.js +374 -0
  26. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  27. package/dist/__tests__/match-result.test.d.ts +2 -0
  28. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  29. package/dist/__tests__/match-result.test.js +154 -0
  30. package/dist/__tests__/match-result.test.js.map +1 -0
  31. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  32. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  33. package/dist/__tests__/navigation-store.test.js +440 -0
  34. package/dist/__tests__/navigation-store.test.js.map +1 -0
  35. package/dist/__tests__/partial-update.test.d.ts +2 -0
  36. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  37. package/dist/__tests__/partial-update.test.js +1009 -0
  38. package/dist/__tests__/partial-update.test.js.map +1 -0
  39. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  40. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  41. package/dist/__tests__/reverse-types.test.js +656 -0
  42. package/dist/__tests__/reverse-types.test.js.map +1 -0
  43. package/dist/__tests__/route-definition.test.d.ts +2 -0
  44. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  45. package/dist/__tests__/route-definition.test.js +55 -0
  46. package/dist/__tests__/route-definition.test.js.map +1 -0
  47. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  48. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  49. package/dist/__tests__/router-helpers.test.js +377 -0
  50. package/dist/__tests__/router-helpers.test.js.map +1 -0
  51. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  52. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  53. package/dist/__tests__/router-integration-2.test.js +426 -0
  54. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  55. package/dist/__tests__/router-integration.test.d.ts +2 -0
  56. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  57. package/dist/__tests__/router-integration.test.js +1051 -0
  58. package/dist/__tests__/router-integration.test.js.map +1 -0
  59. package/dist/__tests__/search-params.test.d.ts +5 -0
  60. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  61. package/dist/__tests__/search-params.test.js +306 -0
  62. package/dist/__tests__/search-params.test.js.map +1 -0
  63. package/dist/__tests__/segment-system.test.d.ts +2 -0
  64. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  65. package/dist/__tests__/segment-system.test.js +627 -0
  66. package/dist/__tests__/segment-system.test.js.map +1 -0
  67. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  68. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  69. package/dist/__tests__/static-handler-types.test.js +63 -0
  70. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  71. package/dist/__tests__/urls.test.d.ts +2 -0
  72. package/dist/__tests__/urls.test.d.ts.map +1 -0
  73. package/dist/__tests__/urls.test.js +421 -0
  74. package/dist/__tests__/urls.test.js.map +1 -0
  75. package/dist/__tests__/use-mount.test.d.ts +2 -0
  76. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  77. package/dist/__tests__/use-mount.test.js +35 -0
  78. package/dist/__tests__/use-mount.test.js.map +1 -0
  79. package/dist/bin/rango.d.ts +2 -0
  80. package/dist/bin/rango.d.ts.map +1 -0
  81. package/dist/bin/rango.js +1601 -0
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/dist/browser/react/use-client-cache.js +39 -0
  162. package/dist/browser/react/use-client-cache.js.map +1 -0
  163. package/dist/browser/react/use-handle.d.ts +31 -0
  164. package/dist/browser/react/use-handle.d.ts.map +1 -0
  165. package/dist/browser/react/use-handle.js +144 -0
  166. package/dist/browser/react/use-handle.js.map +1 -0
  167. package/dist/browser/react/use-href.d.ts +33 -0
  168. package/dist/browser/react/use-href.d.ts.map +1 -0
  169. package/dist/browser/react/use-href.js +39 -0
  170. package/dist/browser/react/use-href.js.map +1 -0
  171. package/dist/browser/react/use-link-status.d.ts +37 -0
  172. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  173. package/dist/browser/react/use-link-status.js +99 -0
  174. package/dist/browser/react/use-link-status.js.map +1 -0
  175. package/dist/browser/react/use-mount.d.ts +25 -0
  176. package/dist/browser/react/use-mount.d.ts.map +1 -0
  177. package/dist/browser/react/use-mount.js +30 -0
  178. package/dist/browser/react/use-mount.js.map +1 -0
  179. package/dist/browser/react/use-navigation.d.ts +27 -0
  180. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  181. package/dist/browser/react/use-navigation.js +87 -0
  182. package/dist/browser/react/use-navigation.js.map +1 -0
  183. package/dist/browser/react/use-segments.d.ts +38 -0
  184. package/dist/browser/react/use-segments.d.ts.map +1 -0
  185. package/dist/browser/react/use-segments.js +130 -0
  186. package/dist/browser/react/use-segments.js.map +1 -0
  187. package/dist/browser/request-controller.d.ts +26 -0
  188. package/dist/browser/request-controller.d.ts.map +1 -0
  189. package/dist/browser/request-controller.js +147 -0
  190. package/dist/browser/request-controller.js.map +1 -0
  191. package/dist/browser/rsc-router.d.ts +129 -0
  192. package/dist/browser/rsc-router.d.ts.map +1 -0
  193. package/dist/browser/rsc-router.js +195 -0
  194. package/dist/browser/rsc-router.js.map +1 -0
  195. package/dist/browser/scroll-restoration.d.ts +93 -0
  196. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  197. package/dist/browser/scroll-restoration.js +321 -0
  198. package/dist/browser/scroll-restoration.js.map +1 -0
  199. package/dist/browser/segment-structure-assert.d.ts +17 -0
  200. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  201. package/dist/browser/segment-structure-assert.js +59 -0
  202. package/dist/browser/segment-structure-assert.js.map +1 -0
  203. package/dist/browser/server-action-bridge.d.ts +26 -0
  204. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  205. package/dist/browser/server-action-bridge.js +668 -0
  206. package/dist/browser/server-action-bridge.js.map +1 -0
  207. package/dist/browser/shallow.d.ts +12 -0
  208. package/dist/browser/shallow.d.ts.map +1 -0
  209. package/dist/browser/shallow.js +34 -0
  210. package/dist/browser/shallow.js.map +1 -0
  211. package/dist/browser/types.d.ts +369 -0
  212. package/dist/browser/types.d.ts.map +1 -0
  213. package/dist/browser/types.js +2 -0
  214. package/dist/browser/types.js.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  216. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  217. package/dist/build/__tests__/generate-cli.test.js +237 -0
  218. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  220. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  221. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  222. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  224. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  225. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  226. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  228. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  230. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  231. package/dist/build/generate-manifest.d.ts +81 -0
  232. package/dist/build/generate-manifest.d.ts.map +1 -0
  233. package/dist/build/generate-manifest.js +276 -0
  234. package/dist/build/generate-manifest.js.map +1 -0
  235. package/dist/build/generate-route-types.d.ts +115 -0
  236. package/dist/build/generate-route-types.d.ts.map +1 -0
  237. package/dist/build/generate-route-types.js +740 -0
  238. package/dist/build/generate-route-types.js.map +1 -0
  239. package/dist/build/index.d.ts +21 -0
  240. package/dist/build/index.d.ts.map +1 -0
  241. package/dist/build/index.js +21 -0
  242. package/dist/build/index.js.map +1 -0
  243. package/dist/build/route-trie.d.ts +71 -0
  244. package/dist/build/route-trie.d.ts.map +1 -0
  245. package/dist/build/route-trie.js +175 -0
  246. package/dist/build/route-trie.js.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  248. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  249. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  250. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  252. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  253. package/dist/cache/__tests__/document-cache.test.js +345 -0
  254. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  258. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  260. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  261. package/dist/cache/__tests__/memory-store.test.js +367 -0
  262. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  263. package/dist/cache/cache-scope.d.ts +102 -0
  264. package/dist/cache/cache-scope.d.ts.map +1 -0
  265. package/dist/cache/cache-scope.js +440 -0
  266. package/dist/cache/cache-scope.js.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  270. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  272. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  273. package/dist/cache/cf/cf-cache-store.js +242 -0
  274. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  275. package/dist/cache/cf/index.d.ts +14 -0
  276. package/dist/cache/cf/index.d.ts.map +1 -0
  277. package/dist/cache/cf/index.js +17 -0
  278. package/dist/cache/cf/index.js.map +1 -0
  279. package/dist/cache/document-cache.d.ts +64 -0
  280. package/dist/cache/document-cache.d.ts.map +1 -0
  281. package/dist/cache/document-cache.js +228 -0
  282. package/dist/cache/document-cache.js.map +1 -0
  283. package/dist/cache/index.d.ts +19 -0
  284. package/dist/cache/index.d.ts.map +1 -0
  285. package/dist/cache/index.js +21 -0
  286. package/dist/cache/index.js.map +1 -0
  287. package/dist/cache/memory-segment-store.d.ts +110 -0
  288. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  289. package/dist/cache/memory-segment-store.js +117 -0
  290. package/dist/cache/memory-segment-store.js.map +1 -0
  291. package/dist/cache/memory-store.d.ts +41 -0
  292. package/dist/cache/memory-store.d.ts.map +1 -0
  293. package/dist/cache/memory-store.js +191 -0
  294. package/dist/cache/memory-store.js.map +1 -0
  295. package/dist/cache/types.d.ts +317 -0
  296. package/dist/cache/types.d.ts.map +1 -0
  297. package/dist/cache/types.js +12 -0
  298. package/dist/cache/types.js.map +1 -0
  299. package/dist/client.d.ts +248 -0
  300. package/dist/client.d.ts.map +1 -0
  301. package/dist/client.js +367 -0
  302. package/dist/client.js.map +1 -0
  303. package/dist/client.rsc.d.ts +26 -0
  304. package/dist/client.rsc.d.ts.map +1 -0
  305. package/dist/client.rsc.js +46 -0
  306. package/dist/client.rsc.js.map +1 -0
  307. package/dist/component-utils.d.ts +36 -0
  308. package/dist/component-utils.d.ts.map +1 -0
  309. package/dist/component-utils.js +61 -0
  310. package/dist/component-utils.js.map +1 -0
  311. package/dist/components/DefaultDocument.d.ts +13 -0
  312. package/dist/components/DefaultDocument.d.ts.map +1 -0
  313. package/dist/components/DefaultDocument.js +15 -0
  314. package/dist/components/DefaultDocument.js.map +1 -0
  315. package/dist/debug.d.ts +58 -0
  316. package/dist/debug.d.ts.map +1 -0
  317. package/dist/debug.js +157 -0
  318. package/dist/debug.js.map +1 -0
  319. package/dist/default-error-boundary.d.ts +11 -0
  320. package/dist/default-error-boundary.d.ts.map +1 -0
  321. package/dist/default-error-boundary.js +45 -0
  322. package/dist/default-error-boundary.js.map +1 -0
  323. package/dist/deps/browser.d.ts +2 -0
  324. package/dist/deps/browser.d.ts.map +1 -0
  325. package/dist/deps/browser.js +3 -0
  326. package/dist/deps/browser.js.map +1 -0
  327. package/dist/deps/html-stream-client.d.ts +2 -0
  328. package/dist/deps/html-stream-client.d.ts.map +1 -0
  329. package/dist/deps/html-stream-client.js +3 -0
  330. package/dist/deps/html-stream-client.js.map +1 -0
  331. package/dist/deps/html-stream-server.d.ts +2 -0
  332. package/dist/deps/html-stream-server.d.ts.map +1 -0
  333. package/dist/deps/html-stream-server.js +3 -0
  334. package/dist/deps/html-stream-server.js.map +1 -0
  335. package/dist/deps/rsc.d.ts +2 -0
  336. package/dist/deps/rsc.d.ts.map +1 -0
  337. package/dist/deps/rsc.js +4 -0
  338. package/dist/deps/rsc.js.map +1 -0
  339. package/dist/deps/ssr.d.ts +2 -0
  340. package/dist/deps/ssr.d.ts.map +1 -0
  341. package/dist/deps/ssr.js +3 -0
  342. package/dist/deps/ssr.js.map +1 -0
  343. package/dist/errors.d.ts +174 -0
  344. package/dist/errors.d.ts.map +1 -0
  345. package/dist/errors.js +241 -0
  346. package/dist/errors.js.map +1 -0
  347. package/dist/handle.d.ts +78 -0
  348. package/dist/handle.d.ts.map +1 -0
  349. package/dist/handle.js +82 -0
  350. package/dist/handle.js.map +1 -0
  351. package/dist/handles/MetaTags.d.ts +14 -0
  352. package/dist/handles/MetaTags.d.ts.map +1 -0
  353. package/dist/handles/MetaTags.js +136 -0
  354. package/dist/handles/MetaTags.js.map +1 -0
  355. package/dist/handles/index.d.ts +6 -0
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/dist/handles/index.js +6 -0
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/dist/href-context.d.ts +29 -0
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/dist/network-error-thrower.d.ts +17 -0
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/theme/ThemeProvider.d.ts +20 -0
  712. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  713. package/dist/theme/ThemeProvider.js +240 -0
  714. package/dist/theme/ThemeProvider.js.map +1 -0
  715. package/dist/theme/ThemeScript.d.ts +48 -0
  716. package/dist/theme/ThemeScript.d.ts.map +1 -0
  717. package/dist/theme/ThemeScript.js +13 -0
  718. package/dist/theme/ThemeScript.js.map +1 -0
  719. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  720. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  721. package/dist/theme/__tests__/theme.test.js +103 -0
  722. package/dist/theme/__tests__/theme.test.js.map +1 -0
  723. package/dist/theme/constants.d.ts +29 -0
  724. package/dist/theme/constants.d.ts.map +1 -0
  725. package/dist/theme/constants.js +48 -0
  726. package/dist/theme/constants.js.map +1 -0
  727. package/dist/theme/index.d.ts +31 -0
  728. package/dist/theme/index.d.ts.map +1 -0
  729. package/dist/theme/index.js +36 -0
  730. package/dist/theme/index.js.map +1 -0
  731. package/dist/theme/theme-context.d.ts +40 -0
  732. package/dist/theme/theme-context.d.ts.map +1 -0
  733. package/dist/theme/theme-context.js +60 -0
  734. package/dist/theme/theme-context.js.map +1 -0
  735. package/dist/theme/theme-script.d.ts +27 -0
  736. package/dist/theme/theme-script.d.ts.map +1 -0
  737. package/dist/theme/theme-script.js +147 -0
  738. package/dist/theme/theme-script.js.map +1 -0
  739. package/dist/theme/types.d.ts +163 -0
  740. package/dist/theme/types.d.ts.map +1 -0
  741. package/dist/theme/types.js +11 -0
  742. package/dist/theme/types.js.map +1 -0
  743. package/dist/theme/use-theme.d.ts +12 -0
  744. package/dist/theme/use-theme.d.ts.map +1 -0
  745. package/dist/theme/use-theme.js +40 -0
  746. package/dist/theme/use-theme.js.map +1 -0
  747. package/dist/types.d.ts +1479 -0
  748. package/dist/types.d.ts.map +1 -0
  749. package/dist/types.js +10 -0
  750. package/dist/types.js.map +1 -0
  751. package/dist/urls.d.ts +441 -0
  752. package/dist/urls.d.ts.map +1 -0
  753. package/dist/urls.gen.d.ts +8 -0
  754. package/dist/urls.gen.d.ts.map +1 -0
  755. package/dist/urls.gen.js +8 -0
  756. package/dist/urls.gen.js.map +1 -0
  757. package/dist/urls.js +443 -0
  758. package/dist/urls.js.map +1 -0
  759. package/dist/use-loader.d.ts +127 -0
  760. package/dist/use-loader.d.ts.map +1 -0
  761. package/dist/use-loader.js +237 -0
  762. package/dist/use-loader.js.map +1 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  775. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  777. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  779. package/dist/vite/ast-handler-extract.d.ts +49 -0
  780. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  781. package/dist/vite/ast-handler-extract.js +249 -0
  782. package/dist/vite/ast-handler-extract.js.map +1 -0
  783. package/dist/vite/expose-action-id.d.ts +19 -0
  784. package/dist/vite/expose-action-id.d.ts.map +1 -0
  785. package/dist/vite/expose-action-id.js +250 -0
  786. package/dist/vite/expose-action-id.js.map +1 -0
  787. package/dist/vite/expose-id-utils.d.ts +69 -0
  788. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  789. package/dist/vite/expose-id-utils.js +289 -0
  790. package/dist/vite/expose-id-utils.js.map +1 -0
  791. package/dist/vite/expose-internal-ids.d.ts +22 -0
  792. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  793. package/dist/vite/expose-internal-ids.js +886 -0
  794. package/dist/vite/expose-internal-ids.js.map +1 -0
  795. package/dist/vite/index.d.ts +149 -0
  796. package/dist/vite/index.d.ts.map +1 -0
  797. package/dist/vite/index.js +5214 -0
  798. package/dist/vite/index.js.map +1 -0
  799. package/dist/vite/index.named-routes.gen.ts +103 -0
  800. package/dist/vite/package-resolution.d.ts +43 -0
  801. package/dist/vite/package-resolution.d.ts.map +1 -0
  802. package/dist/vite/package-resolution.js +112 -0
  803. package/dist/vite/package-resolution.js.map +1 -0
  804. package/dist/vite/virtual-entries.d.ts +25 -0
  805. package/dist/vite/virtual-entries.d.ts.map +1 -0
  806. package/dist/vite/virtual-entries.js +110 -0
  807. package/dist/vite/virtual-entries.js.map +1 -0
  808. package/package.json +177 -0
  809. package/skills/breadcrumbs/SKILL.md +250 -0
  810. package/skills/cache-guide/SKILL.md +262 -0
  811. package/skills/caching/SKILL.md +220 -0
  812. package/skills/composability/SKILL.md +172 -0
  813. package/skills/debug-manifest/SKILL.md +112 -0
  814. package/skills/document-cache/SKILL.md +182 -0
  815. package/skills/fonts/SKILL.md +167 -0
  816. package/skills/hooks/SKILL.md +704 -0
  817. package/skills/host-router/SKILL.md +218 -0
  818. package/skills/intercept/SKILL.md +313 -0
  819. package/skills/layout/SKILL.md +310 -0
  820. package/skills/links/SKILL.md +239 -0
  821. package/skills/loader/SKILL.md +596 -0
  822. package/skills/middleware/SKILL.md +339 -0
  823. package/skills/mime-routes/SKILL.md +128 -0
  824. package/skills/parallel/SKILL.md +305 -0
  825. package/skills/prerender/SKILL.md +643 -0
  826. package/skills/rango/SKILL.md +118 -0
  827. package/skills/response-routes/SKILL.md +411 -0
  828. package/skills/route/SKILL.md +385 -0
  829. package/skills/router-setup/SKILL.md +439 -0
  830. package/skills/tailwind/SKILL.md +129 -0
  831. package/skills/theme/SKILL.md +79 -0
  832. package/skills/typesafety/SKILL.md +623 -0
  833. package/skills/use-cache/SKILL.md +324 -0
  834. package/src/__internal.ts +273 -0
  835. package/src/bin/rango.ts +321 -0
  836. package/src/browser/action-coordinator.ts +97 -0
  837. package/src/browser/action-response-classifier.ts +99 -0
  838. package/src/browser/event-controller.ts +899 -0
  839. package/src/browser/history-state.ts +80 -0
  840. package/src/browser/index.ts +18 -0
  841. package/src/browser/intercept-utils.ts +52 -0
  842. package/src/browser/link-interceptor.ts +141 -0
  843. package/src/browser/logging.ts +55 -0
  844. package/src/browser/merge-segment-loaders.ts +134 -0
  845. package/src/browser/navigation-bridge.ts +640 -0
  846. package/src/browser/navigation-client.ts +215 -0
  847. package/src/browser/navigation-store.ts +806 -0
  848. package/src/browser/navigation-transaction.ts +295 -0
  849. package/src/browser/network-error-handler.ts +61 -0
  850. package/src/browser/partial-update.ts +552 -0
  851. package/src/browser/prefetch/cache.ts +154 -0
  852. package/src/browser/prefetch/fetch.ts +135 -0
  853. package/src/browser/prefetch/observer.ts +65 -0
  854. package/src/browser/prefetch/policy.ts +48 -0
  855. package/src/browser/prefetch/queue.ts +88 -0
  856. package/src/browser/rango-state.ts +112 -0
  857. package/src/browser/react/Link.tsx +360 -0
  858. package/src/browser/react/NavigationProvider.tsx +386 -0
  859. package/src/browser/react/ScrollRestoration.tsx +94 -0
  860. package/src/browser/react/context.ts +59 -0
  861. package/src/browser/react/filter-segment-order.ts +11 -0
  862. package/src/browser/react/index.ts +52 -0
  863. package/src/browser/react/location-state-shared.ts +162 -0
  864. package/src/browser/react/location-state.ts +107 -0
  865. package/src/browser/react/mount-context.ts +37 -0
  866. package/src/browser/react/nonce-context.ts +23 -0
  867. package/src/browser/react/shallow-equal.ts +27 -0
  868. package/src/browser/react/use-action.ts +218 -0
  869. package/src/browser/react/use-client-cache.ts +58 -0
  870. package/src/browser/react/use-handle.ts +162 -0
  871. package/src/browser/react/use-href.tsx +40 -0
  872. package/src/browser/react/use-link-status.ts +135 -0
  873. package/src/browser/react/use-mount.ts +31 -0
  874. package/src/browser/react/use-navigation.ts +99 -0
  875. package/src/browser/react/use-params.ts +65 -0
  876. package/src/browser/react/use-pathname.ts +47 -0
  877. package/src/browser/react/use-router.ts +63 -0
  878. package/src/browser/react/use-search-params.ts +56 -0
  879. package/src/browser/react/use-segments.ts +171 -0
  880. package/src/browser/response-adapter.ts +73 -0
  881. package/src/browser/rsc-router.tsx +431 -0
  882. package/src/browser/scroll-restoration.ts +384 -0
  883. package/src/browser/segment-reconciler.ts +216 -0
  884. package/src/browser/segment-structure-assert.ts +83 -0
  885. package/src/browser/server-action-bridge.ts +667 -0
  886. package/src/browser/shallow.ts +40 -0
  887. package/src/browser/types.ts +538 -0
  888. package/src/browser/validate-redirect-origin.ts +29 -0
  889. package/src/build/generate-manifest.ts +438 -0
  890. package/src/build/generate-route-types.ts +36 -0
  891. package/src/build/index.ts +35 -0
  892. package/src/build/route-trie.ts +265 -0
  893. package/src/build/route-types/ast-helpers.ts +25 -0
  894. package/src/build/route-types/ast-route-extraction.ts +98 -0
  895. package/src/build/route-types/codegen.ts +102 -0
  896. package/src/build/route-types/include-resolution.ts +411 -0
  897. package/src/build/route-types/param-extraction.ts +48 -0
  898. package/src/build/route-types/per-module-writer.ts +128 -0
  899. package/src/build/route-types/router-processing.ts +469 -0
  900. package/src/build/route-types/scan-filter.ts +78 -0
  901. package/src/build/runtime-discovery.ts +231 -0
  902. package/src/cache/background-task.ts +34 -0
  903. package/src/cache/cache-key-utils.ts +44 -0
  904. package/src/cache/cache-policy.ts +125 -0
  905. package/src/cache/cache-runtime.ts +338 -0
  906. package/src/cache/cache-scope.ts +382 -0
  907. package/src/cache/cf/cf-cache-store.ts +540 -0
  908. package/src/cache/cf/index.ts +25 -0
  909. package/src/cache/document-cache.ts +369 -0
  910. package/src/cache/handle-capture.ts +81 -0
  911. package/src/cache/handle-snapshot.ts +41 -0
  912. package/src/cache/index.ts +43 -0
  913. package/src/cache/memory-segment-store.ts +328 -0
  914. package/src/cache/profile-registry.ts +73 -0
  915. package/src/cache/read-through-swr.ts +134 -0
  916. package/src/cache/segment-codec.ts +256 -0
  917. package/src/cache/taint.ts +98 -0
  918. package/src/cache/types.ts +342 -0
  919. package/src/client.rsc.tsx +85 -0
  920. package/src/client.tsx +601 -0
  921. package/src/component-utils.ts +76 -0
  922. package/src/components/DefaultDocument.tsx +27 -0
  923. package/src/context-var.ts +86 -0
  924. package/src/debug.ts +243 -0
  925. package/src/default-error-boundary.tsx +88 -0
  926. package/src/deps/browser.ts +8 -0
  927. package/src/deps/html-stream-client.ts +2 -0
  928. package/src/deps/html-stream-server.ts +2 -0
  929. package/src/deps/rsc.ts +10 -0
  930. package/src/deps/ssr.ts +2 -0
  931. package/src/errors.ts +365 -0
  932. package/src/handle.ts +135 -0
  933. package/src/handles/MetaTags.tsx +246 -0
  934. package/src/handles/breadcrumbs.ts +66 -0
  935. package/src/handles/index.ts +7 -0
  936. package/src/handles/meta.ts +264 -0
  937. package/src/host/cookie-handler.ts +165 -0
  938. package/src/host/errors.ts +97 -0
  939. package/src/host/index.ts +53 -0
  940. package/src/host/pattern-matcher.ts +214 -0
  941. package/src/host/router.ts +352 -0
  942. package/src/host/testing.ts +79 -0
  943. package/src/host/types.ts +146 -0
  944. package/src/host/utils.ts +25 -0
  945. package/src/href-client.ts +222 -0
  946. package/src/index.rsc.ts +233 -0
  947. package/src/index.ts +277 -0
  948. package/src/internal-debug.ts +11 -0
  949. package/src/loader.rsc.ts +89 -0
  950. package/src/loader.ts +64 -0
  951. package/src/network-error-thrower.tsx +23 -0
  952. package/src/outlet-context.ts +15 -0
  953. package/src/outlet-provider.tsx +45 -0
  954. package/src/prerender/param-hash.ts +37 -0
  955. package/src/prerender/store.ts +185 -0
  956. package/src/prerender.ts +463 -0
  957. package/src/reverse.ts +330 -0
  958. package/src/root-error-boundary.tsx +289 -0
  959. package/src/route-content-wrapper.tsx +196 -0
  960. package/src/route-definition/dsl-helpers.ts +934 -0
  961. package/src/route-definition/helper-factories.ts +200 -0
  962. package/src/route-definition/helpers-types.ts +430 -0
  963. package/src/route-definition/index.ts +52 -0
  964. package/src/route-definition/redirect.ts +93 -0
  965. package/src/route-definition.ts +1 -0
  966. package/src/route-map-builder.ts +275 -0
  967. package/src/route-name.ts +53 -0
  968. package/src/route-types.ts +259 -0
  969. package/src/router/content-negotiation.ts +116 -0
  970. package/src/router/debug-manifest.ts +72 -0
  971. package/src/router/error-handling.ts +287 -0
  972. package/src/router/find-match.ts +158 -0
  973. package/src/router/handler-context.ts +451 -0
  974. package/src/router/intercept-resolution.ts +395 -0
  975. package/src/router/lazy-includes.ts +234 -0
  976. package/src/router/loader-resolution.ts +420 -0
  977. package/src/router/logging.ts +248 -0
  978. package/src/router/manifest.ts +267 -0
  979. package/src/router/match-api.ts +620 -0
  980. package/src/router/match-context.ts +266 -0
  981. package/src/router/match-handlers.ts +440 -0
  982. package/src/router/match-middleware/background-revalidation.ts +223 -0
  983. package/src/router/match-middleware/cache-lookup.ts +634 -0
  984. package/src/router/match-middleware/cache-store.ts +295 -0
  985. package/src/router/match-middleware/index.ts +81 -0
  986. package/src/router/match-middleware/intercept-resolution.ts +306 -0
  987. package/src/router/match-middleware/segment-resolution.ts +192 -0
  988. package/src/router/match-pipelines.ts +179 -0
  989. package/src/router/match-result.ts +219 -0
  990. package/src/router/metrics.ts +282 -0
  991. package/src/router/middleware-cookies.ts +55 -0
  992. package/src/router/middleware-types.ts +222 -0
  993. package/src/router/middleware.ts +748 -0
  994. package/src/router/pattern-matching.ts +563 -0
  995. package/src/router/prerender-match.ts +402 -0
  996. package/src/router/preview-match.ts +170 -0
  997. package/src/router/revalidation.ts +289 -0
  998. package/src/router/router-context.ts +316 -0
  999. package/src/router/router-interfaces.ts +452 -0
  1000. package/src/router/router-options.ts +592 -0
  1001. package/src/router/router-registry.ts +24 -0
  1002. package/src/router/segment-resolution/fresh.ts +570 -0
  1003. package/src/router/segment-resolution/helpers.ts +263 -0
  1004. package/src/router/segment-resolution/loader-cache.ts +198 -0
  1005. package/src/router/segment-resolution/revalidation.ts +1239 -0
  1006. package/src/router/segment-resolution/static-store.ts +67 -0
  1007. package/src/router/segment-resolution.ts +21 -0
  1008. package/src/router/segment-wrappers.ts +289 -0
  1009. package/src/router/telemetry-otel.ts +299 -0
  1010. package/src/router/telemetry.ts +300 -0
  1011. package/src/router/timeout.ts +148 -0
  1012. package/src/router/trie-matching.ts +239 -0
  1013. package/src/router/types.ts +170 -0
  1014. package/src/router.ts +1002 -0
  1015. package/src/rsc/handler-context.ts +45 -0
  1016. package/src/rsc/handler.ts +1089 -0
  1017. package/src/rsc/helpers.ts +198 -0
  1018. package/src/rsc/index.ts +36 -0
  1019. package/src/rsc/loader-fetch.ts +209 -0
  1020. package/src/rsc/manifest-init.ts +86 -0
  1021. package/src/rsc/nonce.ts +32 -0
  1022. package/src/rsc/origin-guard.ts +141 -0
  1023. package/src/rsc/progressive-enhancement.ts +379 -0
  1024. package/src/rsc/response-error.ts +37 -0
  1025. package/src/rsc/response-route-handler.ts +347 -0
  1026. package/src/rsc/rsc-rendering.ts +237 -0
  1027. package/src/rsc/runtime-warnings.ts +42 -0
  1028. package/src/rsc/server-action.ts +348 -0
  1029. package/src/rsc/ssr-setup.ts +128 -0
  1030. package/src/rsc/types.ts +263 -0
  1031. package/src/search-params.ts +230 -0
  1032. package/src/segment-system.tsx +454 -0
  1033. package/src/server/context.ts +591 -0
  1034. package/src/server/cookie-store.ts +190 -0
  1035. package/src/server/fetchable-loader-store.ts +37 -0
  1036. package/src/server/handle-store.ts +308 -0
  1037. package/src/server/loader-registry.ts +133 -0
  1038. package/src/server/request-context.ts +914 -0
  1039. package/src/server/root-layout.tsx +10 -0
  1040. package/src/server/tsconfig.json +14 -0
  1041. package/src/server.ts +51 -0
  1042. package/src/ssr/index.tsx +365 -0
  1043. package/src/static-handler.ts +114 -0
  1044. package/src/theme/ThemeProvider.tsx +297 -0
  1045. package/src/theme/ThemeScript.tsx +61 -0
  1046. package/src/theme/constants.ts +62 -0
  1047. package/src/theme/index.ts +48 -0
  1048. package/src/theme/theme-context.ts +44 -0
  1049. package/src/theme/theme-script.ts +155 -0
  1050. package/src/theme/types.ts +182 -0
  1051. package/src/theme/use-theme.ts +44 -0
  1052. package/src/types/boundaries.ts +158 -0
  1053. package/src/types/cache-types.ts +198 -0
  1054. package/src/types/error-types.ts +192 -0
  1055. package/src/types/global-namespace.ts +100 -0
  1056. package/src/types/handler-context.ts +687 -0
  1057. package/src/types/index.ts +88 -0
  1058. package/src/types/loader-types.ts +183 -0
  1059. package/src/types/route-config.ts +170 -0
  1060. package/src/types/route-entry.ts +102 -0
  1061. package/src/types/segments.ts +148 -0
  1062. package/src/types.ts +1 -0
  1063. package/src/urls/include-helper.ts +197 -0
  1064. package/src/urls/index.ts +53 -0
  1065. package/src/urls/path-helper-types.ts +339 -0
  1066. package/src/urls/path-helper.ts +329 -0
  1067. package/src/urls/pattern-types.ts +95 -0
  1068. package/src/urls/response-types.ts +106 -0
  1069. package/src/urls/type-extraction.ts +372 -0
  1070. package/src/urls/urls-function.ts +98 -0
  1071. package/src/urls.ts +1 -0
  1072. package/src/use-loader.tsx +354 -0
  1073. package/src/vite/discovery/bundle-postprocess.ts +184 -0
  1074. package/src/vite/discovery/discover-routers.ts +344 -0
  1075. package/src/vite/discovery/prerender-collection.ts +385 -0
  1076. package/src/vite/discovery/route-types-writer.ts +258 -0
  1077. package/src/vite/discovery/self-gen-tracking.ts +47 -0
  1078. package/src/vite/discovery/state.ts +110 -0
  1079. package/src/vite/discovery/virtual-module-codegen.ts +203 -0
  1080. package/src/vite/index.ts +16 -0
  1081. package/src/vite/plugin-types.ts +131 -0
  1082. package/src/vite/plugins/cjs-to-esm.ts +93 -0
  1083. package/src/vite/plugins/client-ref-dedup.ts +115 -0
  1084. package/src/vite/plugins/client-ref-hashing.ts +105 -0
  1085. package/src/vite/plugins/expose-action-id.ts +365 -0
  1086. package/src/vite/plugins/expose-id-utils.ts +287 -0
  1087. package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
  1088. package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
  1089. package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
  1090. package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
  1091. package/src/vite/plugins/expose-ids/types.ts +45 -0
  1092. package/src/vite/plugins/expose-internal-ids.ts +569 -0
  1093. package/src/vite/plugins/refresh-cmd.ts +65 -0
  1094. package/src/vite/plugins/use-cache-transform.ts +323 -0
  1095. package/src/vite/plugins/version-injector.ts +83 -0
  1096. package/src/vite/plugins/version-plugin.ts +254 -0
  1097. package/src/vite/plugins/version.d.ts +12 -0
  1098. package/src/vite/plugins/virtual-entries.ts +123 -0
  1099. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  1100. package/src/vite/rango.ts +510 -0
  1101. package/src/vite/router-discovery.ts +785 -0
  1102. package/src/vite/utils/ast-handler-extract.ts +517 -0
  1103. package/src/vite/utils/banner.ts +36 -0
  1104. package/src/vite/utils/bundle-analysis.ts +137 -0
  1105. package/src/vite/utils/manifest-utils.ts +70 -0
  1106. package/src/vite/utils/package-resolution.ts +121 -0
  1107. package/src/vite/utils/prerender-utils.ts +189 -0
  1108. package/src/vite/utils/shared-utils.ts +169 -0
@@ -0,0 +1,1172 @@
1
+ /// <reference types="@vitejs/plugin-rsc/types" />
2
+ /// <reference path="../vite/version.d.ts" />
3
+ /**
4
+ * RSC Request Handler
5
+ *
6
+ * Main request handler for RSC rendering, server actions, loader fetching,
7
+ * and progressive enhancement (no-JS form submissions).
8
+ */
9
+ import { createElement } from "react";
10
+ import { renderSegments } from "../segment-system.js";
11
+ import { RouteNotFoundError, RouterError } from "../errors.js";
12
+ import { getLoaderLazy } from "../server/loader-registry.js";
13
+ import { matchMiddleware, executeMiddleware, executeLoaderMiddleware, } from "../router/middleware.js";
14
+ import { runWithRequestContext, setRequestContextParams, requireRequestContext, createRequestContext, } from "../server/request-context.js";
15
+ import * as rscDeps from "@vitejs/plugin-rsc/rsc";
16
+ import { hasBodyContent, createResponseWithMergedHeaders } from "./helpers.js";
17
+ import { generateNonce } from "./nonce.js";
18
+ import { VERSION } from "@rangojs/router:version";
19
+ import { invokeOnError } from "../router/error-handling.js";
20
+ import { getGlobalRouteMap, hasCachedManifest, setCachedManifest, getRouteTrie, setRouteTrie, getPrecomputedEntries, waitForManifestReady, getRouterManifest, getRouterTrie, setRouterManifest, setRouterTrie, } from "../route-map-builder.js";
21
+ /**
22
+ * Build a ResponseError payload from a caught error.
23
+ * RouterError messages are always exposed (developer-crafted).
24
+ * Standard Error messages are hidden in production.
25
+ */
26
+ function createResponseErrorPayload(error, isDev) {
27
+ if (error instanceof RouterError) {
28
+ return {
29
+ message: error.message,
30
+ code: error.code,
31
+ ...(error.type ? { type: error.type } : {}),
32
+ ...(isDev && error.stack ? { stack: error.stack } : {}),
33
+ };
34
+ }
35
+ if (error instanceof Error) {
36
+ return {
37
+ message: isDev ? error.message : "Internal Server Error",
38
+ ...(isDev && error.stack ? { stack: error.stack } : {}),
39
+ };
40
+ }
41
+ return {
42
+ message: isDev ? String(error) : "Internal Server Error",
43
+ };
44
+ }
45
+ /**
46
+ * Create an RSC request handler.
47
+ *
48
+ * **Recommended:** Use `router.createHandler()` instead for simpler setup:
49
+ * ```tsx
50
+ * const router = createRouter({ document, urls, nonce: () => true });
51
+ * export const fetch = router.createHandler();
52
+ * ```
53
+ *
54
+ * This function is still useful for advanced cases like per-request cache
55
+ * configuration (e.g., Cloudflare Workers with ExecutionContext).
56
+ *
57
+ * @example Basic usage (deps and loadSSRModule have sensible defaults)
58
+ * ```tsx
59
+ * import { createRSCHandler } from "@rangojs/router/rsc";
60
+ * import { router } from "./router.js";
61
+ *
62
+ * export default createRSCHandler({ router });
63
+ * ```
64
+ *
65
+ * @example With custom deps (advanced)
66
+ * ```tsx
67
+ * import { createRSCHandler } from "@rangojs/router/rsc";
68
+ * import * as rsc from "@vitejs/plugin-rsc/rsc";
69
+ * import { router } from "./router.js";
70
+ *
71
+ * export default createRSCHandler({
72
+ * router,
73
+ * deps: rsc,
74
+ * loadSSRModule: () => import.meta.viteRsc.loadModule("ssr", "index"),
75
+ * });
76
+ * ```
77
+ */
78
+ export function createRSCHandler(options) {
79
+ const { router, version = VERSION, nonce: nonceProvider } = options;
80
+ // Use provided deps or default to @vitejs/plugin-rsc/rsc exports
81
+ const deps = options.deps ?? rscDeps;
82
+ const { renderToReadableStream, decodeReply, createTemporaryReferenceSet, loadServerAction, decodeAction, decodeFormState, } = deps;
83
+ // Use provided loadSSRModule or default to vite RSC module loader
84
+ const loadSSRModule = options.loadSSRModule ??
85
+ (() => import.meta.viteRsc.loadModule("ssr", "index"));
86
+ /**
87
+ * Wrapper for invokeOnError that binds the router's onError callback.
88
+ * Uses the shared utility from router/error-handling.ts for consistent behavior.
89
+ */
90
+ function callOnError(error, phase, context) {
91
+ invokeOnError(router.onError, error, phase, context, "RSC");
92
+ }
93
+ return async function handler(request, env = {}) {
94
+ const handlerStart = performance.now();
95
+ // Connection warmup: return 204 immediately before any processing
96
+ if (router.warmupEnabled && request.method === "HEAD") {
97
+ const warmupUrl = new URL(request.url);
98
+ if (warmupUrl.searchParams.has("_rsc_warmup")) {
99
+ return new Response(null, { status: 204 });
100
+ }
101
+ }
102
+ // Resolve nonce if provider is set
103
+ const nonceStart = performance.now();
104
+ let nonce;
105
+ if (nonceProvider) {
106
+ const result = await nonceProvider(request, env);
107
+ nonce = result === true ? generateNonce() : result;
108
+ }
109
+ const nonceDur = performance.now() - nonceStart;
110
+ const url = new URL(request.url);
111
+ // Match global middleware
112
+ const mwMatchStart = performance.now();
113
+ const matchedMiddleware = matchMiddleware(url.pathname, router.middleware);
114
+ const mwMatchDur = performance.now() - mwMatchStart;
115
+ // Shared variables between middleware and route handlers
116
+ // Initialize from env.Variables if provided (allows pre-seeding from worker entry)
117
+ const variables = {
118
+ ...(env?.Variables ?? {}),
119
+ };
120
+ // Store nonce in variables so middleware can access via ctx.get('nonce')
121
+ if (nonce) {
122
+ variables.nonce = nonce;
123
+ }
124
+ // Resolve cache store configuration
125
+ // Priority: options.cache (handler override) > router.cache (router default)
126
+ // Store is enabled only if: config provided, enabled, and no ?__no_cache query param
127
+ let cacheStore = undefined;
128
+ const cacheOption = options.cache ?? router.cache;
129
+ if (cacheOption && !url.searchParams.has("__no_cache")) {
130
+ const cacheConfig = typeof cacheOption === "function" ? cacheOption(env) : cacheOption;
131
+ if (cacheConfig.enabled !== false) {
132
+ cacheStore = cacheConfig.store;
133
+ }
134
+ }
135
+ // Route manifest is populated at startup via the virtual module
136
+ // (virtual:rsc-router/routes-manifest). In build/production, it's inlined
137
+ // into the bundle. In dev mode (Node), the discovery plugin populates it
138
+ // via setManifestReadyPromise(). In dev mode (Cloudflare), Miniflare runs
139
+ // in a separate isolate where module-level state doesn't carry over, so
140
+ // we generate inline from the router's urlpatterns.
141
+ //
142
+ // In multi-router setups (e.g. createHostRouter), each router must have
143
+ // its own per-router manifest. We check per-router data first: even if
144
+ // the global manifest was set by a different router, this router still
145
+ // needs its own trie and manifest for correct matching.
146
+ const manifestCacheStart = performance.now();
147
+ const hasRouterData = getRouterManifest(router.id) !== undefined;
148
+ if (!hasRouterData) {
149
+ if (!hasCachedManifest()) {
150
+ const readyPromise = waitForManifestReady();
151
+ if (readyPromise) {
152
+ await readyPromise;
153
+ }
154
+ }
155
+ if (!getRouterManifest(router.id) && router.urlpatterns) {
156
+ // Cloudflare dev: generate manifest inline for this router.
157
+ // Each router generates its own manifest independently so
158
+ // multi-router setups (host routing) work correctly.
159
+ const { generateManifest } = await import("../build/generate-manifest.js");
160
+ const generated = generateManifest(router.urlpatterns);
161
+ if (generated._routeAncestry &&
162
+ Object.keys(generated._routeAncestry).length > 0) {
163
+ const { buildRouteTrie } = await import("../build/route-trie.js");
164
+ // Map each route to its include() staticPrefix so the trie
165
+ // returns the correct sp for lazy entry lookup in findMatch.
166
+ const routeToStaticPrefix = {};
167
+ for (const name of Object.keys(generated.routeManifest)) {
168
+ routeToStaticPrefix[name] = "";
169
+ }
170
+ // Override with prefix from include() entries so the trie
171
+ // returns the correct sp for lazy entry lookup in findMatch.
172
+ // Walk recursively to include routes in nested includes.
173
+ if (generated.prefixTree) {
174
+ const visitPrefixNode = (node) => {
175
+ const sp = node.staticPrefix || "";
176
+ for (const route of (node.routes || [])) {
177
+ routeToStaticPrefix[route] = sp;
178
+ }
179
+ for (const child of Object.values(node.children || {})) {
180
+ visitPrefixNode(child);
181
+ }
182
+ };
183
+ for (const node of Object.values(generated.prefixTree)) {
184
+ visitPrefixNode(node);
185
+ }
186
+ }
187
+ const trie = buildRouteTrie(generated.routeManifest, generated._routeAncestry, routeToStaticPrefix, generated.routeTrailingSlash, generated.prerenderRoutes ? new Set(generated.prerenderRoutes) : undefined, generated.passthroughRoutes ? new Set(generated.passthroughRoutes) : undefined, generated.responseTypeRoutes);
188
+ setRouterTrie(router.id, trie);
189
+ // Set global trie only if not already set by another router
190
+ if (!getRouteTrie()) {
191
+ setRouteTrie(trie);
192
+ }
193
+ }
194
+ setRouterManifest(router.id, generated.routeManifest);
195
+ // Merge into global manifest (needed for reverse/href across routers)
196
+ const existing = hasCachedManifest() ? getGlobalRouteMap() : {};
197
+ setCachedManifest({ ...existing, ...generated.routeManifest });
198
+ }
199
+ if (!getRouterManifest(router.id) && !hasCachedManifest()) {
200
+ throw new Error('Route manifest not available. Ensure "virtual:rsc-router/routes-manifest" is imported in your entry file.');
201
+ }
202
+ }
203
+ const manifestCacheDur = performance.now() - manifestCacheStart;
204
+ // Note: Route map for useHref() is loaded lazily via getGlobalRouteMap()
205
+ // This allows it to include all routes from lazy includes after manifest loading
206
+ // Create unified request context with all methods
207
+ // Includes: stub response, handle store, loader memoization, use(), cookies, headers, cache store
208
+ // params starts empty, populated after route matching via setRequestContextParams
209
+ const ctxCreateStart = performance.now();
210
+ const requestContext = createRequestContext({
211
+ env,
212
+ request,
213
+ url,
214
+ variables,
215
+ cacheStore,
216
+ executionContext: env.ctx,
217
+ themeConfig: router.themeConfig,
218
+ });
219
+ const ctxCreateDur = performance.now() - ctxCreateStart;
220
+ // Accumulate handler-level timing for Server-Timing header
221
+ const handlerTiming = [
222
+ `handler-nonce;dur=${nonceDur.toFixed(2)}`,
223
+ `handler-mw-match;dur=${mwMatchDur.toFixed(2)}`,
224
+ `handler-manifest-cache;dur=${manifestCacheDur.toFixed(2)}`,
225
+ `handler-ctx-create;dur=${ctxCreateDur.toFixed(2)}`,
226
+ ];
227
+ // Store timing data in variables for downstream access
228
+ variables.__handlerTiming = handlerTiming;
229
+ variables.__handlerStart = handlerStart;
230
+ // Wrap entire request handling in request context
231
+ // Makes context available via getRequestContext() throughout:
232
+ // - Middleware execution
233
+ // - Route handlers and loaders
234
+ // - Server components during rendering
235
+ // - Error boundaries
236
+ // - Streaming
237
+ return runWithRequestContext(requestContext, async () => {
238
+ // Core handler logic (wrapped by middleware)
239
+ const coreHandler = async () => {
240
+ return coreRequestHandler(request, env, url, variables, nonce);
241
+ };
242
+ // Execute middleware chain if any, otherwise call core handler directly
243
+ if (matchedMiddleware.length > 0) {
244
+ return executeMiddleware(matchedMiddleware, request, env, variables, coreHandler);
245
+ }
246
+ return coreHandler();
247
+ });
248
+ };
249
+ // Core request handling logic (separated for middleware wrapping)
250
+ async function coreRequestHandler(request, env, url, variables, nonce) {
251
+ // First, check for route-level middleware
252
+ const previewStart = performance.now();
253
+ const preview = await router.previewMatch(request, env);
254
+ const previewDur = performance.now() - previewStart;
255
+ const handlerTiming = variables.__handlerTiming || [];
256
+ handlerTiming.push(`handler-preview-match;dur=${previewDur.toFixed(2)}`);
257
+ // Response route short-circuit: skip entire RSC pipeline
258
+ if (preview?.responseType && preview.handler) {
259
+ const isPartial = url.searchParams.has("_rsc_partial");
260
+ // Partial requests (client-side navigation) to response routes
261
+ // get X-RSC-Reload to trigger hard navigation in the browser
262
+ if (isPartial) {
263
+ const cleanUrl = new URL(url);
264
+ cleanUrl.searchParams.delete("_rsc_partial");
265
+ cleanUrl.searchParams.delete("_rsc_segments");
266
+ cleanUrl.searchParams.delete("_rsc_v");
267
+ cleanUrl.searchParams.delete("_rsc_stale");
268
+ cleanUrl.searchParams.delete("_rsc_action");
269
+ cleanUrl.searchParams.delete("_rsc_prev");
270
+ return createResponseWithMergedHeaders(null, {
271
+ status: 200,
272
+ headers: {
273
+ "X-RSC-Reload": cleanUrl.toString(),
274
+ "content-type": "text/x-component;charset=utf-8",
275
+ },
276
+ });
277
+ }
278
+ // Build lightweight context for response handler
279
+ const bindings = env?.Bindings ?? env;
280
+ const reqCtx = requireRequestContext();
281
+ const responseHandlerCtx = {
282
+ request,
283
+ params: preview.params || {},
284
+ env: bindings,
285
+ searchParams: url.searchParams,
286
+ url,
287
+ pathname: url.pathname,
288
+ href: (name, hrefParams) => {
289
+ if (name.startsWith("/")) {
290
+ if (!hrefParams)
291
+ return name;
292
+ return name.replace(/:([^/]+)/g, (_, key) => {
293
+ const value = hrefParams[key];
294
+ if (value === undefined)
295
+ throw new Error(`Missing param "${key}" for path "${name}"`);
296
+ return encodeURIComponent(value);
297
+ });
298
+ }
299
+ return name;
300
+ },
301
+ get: (key) => variables[key],
302
+ header: (name, value) => reqCtx.header(name, value),
303
+ setCookie: (name, value, options) => reqCtx.setCookie(name, value, options),
304
+ };
305
+ // Call handler directly, wrapped by route middleware if present
306
+ const callHandler = async () => {
307
+ // JSON response routes: wrap in { data } / { error } envelope
308
+ if (preview.responseType === "json") {
309
+ const errorCtx = { request, url, env };
310
+ try {
311
+ const result = await preview.handler(responseHandlerCtx);
312
+ if (result instanceof Response) {
313
+ const mergedHeaders = {};
314
+ result.headers.forEach((value, key) => {
315
+ mergedHeaders[key] = value;
316
+ });
317
+ return createResponseWithMergedHeaders(result.body, {
318
+ status: result.status,
319
+ headers: mergedHeaders,
320
+ });
321
+ }
322
+ return createResponseWithMergedHeaders(JSON.stringify({ data: result }), { status: 200, headers: { "content-type": "application/json;charset=utf-8" } });
323
+ }
324
+ catch (error) {
325
+ callOnError(error, "handler", errorCtx);
326
+ const isDev = process.env.NODE_ENV !== "production";
327
+ const status = error instanceof RouterError ? error.status : 500;
328
+ return createResponseWithMergedHeaders(JSON.stringify({ error: createResponseErrorPayload(error, isDev) }), { status, headers: { "content-type": "application/json;charset=utf-8" } });
329
+ }
330
+ }
331
+ // Non-JSON response routes: catch errors and return plain Response
332
+ const errorCtx = { request, url, env };
333
+ try {
334
+ const result = await preview.handler(responseHandlerCtx);
335
+ if (result instanceof Response) {
336
+ // Handler returned a Response directly -- pass through
337
+ const mergedHeaders = {};
338
+ result.headers.forEach((value, key) => {
339
+ mergedHeaders[key] = value;
340
+ });
341
+ return createResponseWithMergedHeaders(result.body, {
342
+ status: result.status,
343
+ headers: mergedHeaders,
344
+ });
345
+ }
346
+ // Auto-wrap based on response type tag
347
+ switch (preview.responseType) {
348
+ case "text":
349
+ return createResponseWithMergedHeaders(String(result), { status: 200, headers: { "content-type": "text/plain;charset=utf-8" } });
350
+ case "html":
351
+ return createResponseWithMergedHeaders(String(result), { status: 200, headers: { "content-type": "text/html;charset=utf-8" } });
352
+ case "xml":
353
+ return createResponseWithMergedHeaders(String(result), { status: 200, headers: { "content-type": "application/xml;charset=utf-8" } });
354
+ case "md":
355
+ return createResponseWithMergedHeaders(String(result), { status: 200, headers: { "content-type": "text/markdown;charset=utf-8" } });
356
+ default:
357
+ // image, stream, any -- must return Response
358
+ throw new Error(`Response route handler for "${preview.responseType}" must return a Response object, got ${typeof result}`);
359
+ }
360
+ }
361
+ catch (error) {
362
+ callOnError(error, "handler", errorCtx);
363
+ const isDev = process.env.NODE_ENV !== "production";
364
+ const status = error instanceof RouterError ? error.status : 500;
365
+ const message = error instanceof RouterError
366
+ ? error.message
367
+ : isDev && error instanceof Error
368
+ ? error.message
369
+ : "Internal Server Error";
370
+ return createResponseWithMergedHeaders(message, {
371
+ status,
372
+ headers: { "content-type": "text/plain;charset=utf-8" },
373
+ });
374
+ }
375
+ };
376
+ // Wrap callHandler to append Vary: Accept on content-negotiated responses
377
+ const callHandlerWithVary = async () => {
378
+ const response = await callHandler();
379
+ if (preview.negotiated) {
380
+ response.headers.append("Vary", "Accept");
381
+ }
382
+ return response;
383
+ };
384
+ if (preview.routeMiddleware && preview.routeMiddleware.length > 0) {
385
+ const middlewareEntries = preview.routeMiddleware.map((mw) => ({
386
+ entry: {
387
+ pattern: null,
388
+ regex: null,
389
+ paramNames: [],
390
+ handler: mw.handler,
391
+ mountPrefix: null,
392
+ },
393
+ params: mw.params,
394
+ }));
395
+ return executeMiddleware(middlewareEntries, request, env, variables, callHandlerWithVary);
396
+ }
397
+ return callHandlerWithVary();
398
+ }
399
+ // Wrap RSC handler to append Vary: Accept on content-negotiated routes
400
+ const rscHandler = async () => {
401
+ const response = await coreRequestHandlerInner(request, env, url, variables, nonce);
402
+ if (preview?.negotiated) {
403
+ response.headers.append("Vary", "Accept");
404
+ }
405
+ return response;
406
+ };
407
+ if (preview?.routeMiddleware && preview.routeMiddleware.length > 0) {
408
+ // Convert route middleware to app middleware format for execution
409
+ const middlewareEntries = preview.routeMiddleware.map((mw) => ({
410
+ entry: {
411
+ pattern: null,
412
+ regex: null,
413
+ paramNames: [],
414
+ handler: mw.handler,
415
+ mountPrefix: null,
416
+ },
417
+ params: mw.params,
418
+ }));
419
+ // Execute route middleware wrapping the actual request handling
420
+ return executeMiddleware(middlewareEntries, request, env, variables, rscHandler);
421
+ }
422
+ // No route middleware, proceed directly
423
+ return rscHandler();
424
+ }
425
+ // Inner request handler (actual RSC logic, wrapped by route middleware if any)
426
+ async function coreRequestHandlerInner(request, env, url, variables, nonce) {
427
+ const isPartial = url.searchParams.has("_rsc_partial");
428
+ const isAction = request.headers.has("rsc-action") || url.searchParams.has("_rsc_action");
429
+ const actionId = request.headers.get("rsc-action") || url.searchParams.get("_rsc_action");
430
+ // Version mismatch detection - client may have stale code after HMR/deployment
431
+ // If versions don't match, tell the client to reload
432
+ const clientVersion = url.searchParams.get("_rsc_v");
433
+ if (version && clientVersion && clientVersion !== version) {
434
+ console.log(`[RSC] Version mismatch: client=${clientVersion}, server=${version}. Forcing reload.`);
435
+ // Clean URL by removing RSC params
436
+ const cleanUrl = new URL(url);
437
+ cleanUrl.searchParams.delete("_rsc_partial");
438
+ cleanUrl.searchParams.delete("_rsc_segments");
439
+ cleanUrl.searchParams.delete("_rsc_v");
440
+ cleanUrl.searchParams.delete("_rsc_stale");
441
+ cleanUrl.searchParams.delete("_rsc_action");
442
+ cleanUrl.searchParams.delete("_rsc_prev");
443
+ // For actions, reload current page (referer)
444
+ // For navigation, load the target URL
445
+ const reloadUrl = isAction
446
+ ? request.headers.get("referer") || cleanUrl.toString()
447
+ : cleanUrl.toString();
448
+ // Return special response that tells client to reload
449
+ return createResponseWithMergedHeaders(null, {
450
+ status: 200,
451
+ headers: {
452
+ "X-RSC-Reload": reloadUrl,
453
+ "content-type": "text/x-component;charset=utf-8",
454
+ },
455
+ });
456
+ }
457
+ // Debug manifest endpoint: ?__debug_manifest on any route.
458
+ // Always available in dev, requires allowDebugManifest option in production.
459
+ const isDev = process.env.NODE_ENV !== "production";
460
+ if (url.searchParams.has("__debug_manifest") &&
461
+ (isDev || router.allowDebugManifest)) {
462
+ const trie = getRouterTrie(router.id) ?? getRouteTrie();
463
+ const routeManifest = getRouterManifest(router.id) ?? getGlobalRouteMap();
464
+ const { extractAncestryFromTrie } = await import("../build/route-trie.js");
465
+ return new Response(JSON.stringify({
466
+ routerId: router.id,
467
+ routeManifest,
468
+ routeAncestry: trie ? extractAncestryFromTrie(trie) : {},
469
+ routeTrie: trie,
470
+ precomputedEntries: getPrecomputedEntries(),
471
+ }, null, 2), {
472
+ headers: { "Content-Type": "application/json" },
473
+ });
474
+ }
475
+ // Get handle store from request context (created at start of request)
476
+ const handleStore = requireRequestContext()._handleStore;
477
+ try {
478
+ // ============================================================================
479
+ // PROGRESSIVE ENHANCEMENT: No-JS Form Submissions
480
+ // ============================================================================
481
+ const progressiveResult = await handleProgressiveEnhancement(request, env, url, isAction, handleStore, nonce);
482
+ if (progressiveResult) {
483
+ return progressiveResult;
484
+ }
485
+ // ============================================================================
486
+ // SERVER ACTION EXECUTION (JavaScript-enabled client)
487
+ // ============================================================================
488
+ if (isAction && actionId) {
489
+ return handleServerAction(request, env, url, actionId, handleStore);
490
+ }
491
+ // ============================================================================
492
+ // LOADER FETCH EXECUTION (data fetching with RSC serialization)
493
+ // ============================================================================
494
+ const isLoaderRequest = url.searchParams.has("_rsc_loader");
495
+ if (isLoaderRequest) {
496
+ return handleLoaderFetch(request, env, url, variables);
497
+ }
498
+ // ============================================================================
499
+ // REGULAR RSC RENDERING (Navigation)
500
+ // ============================================================================
501
+ // Note: Must use "return await" for try/catch to catch async rejections
502
+ return await handleRscRendering(request, env, url, isPartial, handleStore, nonce);
503
+ }
504
+ catch (error) {
505
+ // Check if middleware/handler returned Response
506
+ if (error instanceof Response) {
507
+ // During partial (client-side navigation), a 200 Response from a handler
508
+ // means the route serves raw content (JSON, text, etc.), not JSX.
509
+ // Signal the browser to hard-navigate so it renders the raw response.
510
+ // Only for 200 — redirects (3xx) work already because the browser follows
511
+ // them automatically to a URL that serves Flight data.
512
+ if (isPartial && error.status === 200) {
513
+ console.warn(`[RSC] Route handler at ${url.pathname} returned a Response during client-side navigation. ` +
514
+ `Falling back to hard navigation. Use data-external on the <Link> to avoid the extra round-trip.`);
515
+ const cleanUrl = new URL(url);
516
+ cleanUrl.searchParams.delete("_rsc_partial");
517
+ cleanUrl.searchParams.delete("_rsc_segments");
518
+ cleanUrl.searchParams.delete("_rsc_v");
519
+ cleanUrl.searchParams.delete("_rsc_stale");
520
+ cleanUrl.searchParams.delete("_rsc_action");
521
+ cleanUrl.searchParams.delete("_rsc_prev");
522
+ return createResponseWithMergedHeaders(null, {
523
+ status: 200,
524
+ headers: {
525
+ "X-RSC-Reload": cleanUrl.toString(),
526
+ "content-type": "text/x-component;charset=utf-8",
527
+ },
528
+ });
529
+ }
530
+ return error;
531
+ }
532
+ // Render 404 page for unmatched routes
533
+ // Check both instanceof and error.name for cross-bundle compatibility
534
+ const isRouteNotFound = error instanceof RouteNotFoundError ||
535
+ (error instanceof Error && error.name === "RouteNotFoundError");
536
+ if (isRouteNotFound) {
537
+ callOnError(error, "routing", {
538
+ request,
539
+ url,
540
+ env,
541
+ handledByBoundary: true, // Handled by notFound component
542
+ });
543
+ // Get notFound component from router options or use default
544
+ const notFoundOption = router.notFound;
545
+ const notFoundComponent = typeof notFoundOption === "function"
546
+ ? notFoundOption({ pathname: url.pathname })
547
+ : (notFoundOption ?? createElement("h1", null, "Not Found"));
548
+ // Create a simple segment for the 404 page
549
+ const notFoundSegment = {
550
+ id: "notFound",
551
+ namespace: "notFound",
552
+ type: "route",
553
+ index: 0,
554
+ component: notFoundComponent,
555
+ params: {},
556
+ };
557
+ // Render with rootLayout to maintain app shell
558
+ const root = await renderSegments([notFoundSegment], {
559
+ rootLayout: router.rootLayout,
560
+ // No routeName for not-found routes
561
+ });
562
+ const payload = {
563
+ root,
564
+ metadata: {
565
+ pathname: url.pathname,
566
+ segments: [notFoundSegment],
567
+ matched: [],
568
+ diff: [],
569
+ isPartial: false,
570
+ handles: handleStore.stream(),
571
+ version,
572
+ themeConfig: router.themeConfig,
573
+ warmupEnabled: router.warmupEnabled,
574
+ initialTheme: requireRequestContext().theme,
575
+ // No routeName for not-found routes
576
+ },
577
+ };
578
+ const rscStream = renderToReadableStream(payload);
579
+ // Determine if this is an RSC request or HTML request
580
+ const isRscRequest = (!request.headers.get("accept")?.includes("text/html") &&
581
+ !url.searchParams.has("__html")) ||
582
+ url.searchParams.has("__rsc");
583
+ if (isRscRequest) {
584
+ return createResponseWithMergedHeaders(rscStream, {
585
+ status: 404,
586
+ headers: { "content-type": "text/x-component;charset=utf-8" },
587
+ });
588
+ }
589
+ // Delegate to SSR for HTML response
590
+ const ssrModule = await loadSSRModule();
591
+ const htmlStream = await ssrModule.renderHTML(rscStream, { nonce });
592
+ return createResponseWithMergedHeaders(htmlStream, {
593
+ status: 404,
594
+ headers: { "content-type": "text/html;charset=utf-8" },
595
+ });
596
+ }
597
+ // Report unhandled errors
598
+ callOnError(error, "routing", {
599
+ request,
600
+ url,
601
+ env,
602
+ handledByBoundary: false,
603
+ });
604
+ console.error(`[RSC] Error:`, error);
605
+ throw error;
606
+ }
607
+ }
608
+ // ============================================================================
609
+ // PROGRESSIVE ENHANCEMENT HANDLER
610
+ // When JavaScript is disabled, React renders forms with hidden fields
611
+ // ($ACTION_REF_*, $ACTION_KEY) containing the action reference.
612
+ // We detect these and return HTML instead of RSC stream.
613
+ // ============================================================================
614
+ async function handleProgressiveEnhancement(request, env, url, isAction, handleStore, nonce) {
615
+ const contentType = request.headers.get("content-type") || "";
616
+ const isFormSubmission = contentType.includes("multipart/form-data") ||
617
+ contentType.includes("application/x-www-form-urlencoded");
618
+ if (request.method !== "POST" || isAction || !isFormSubmission) {
619
+ return null;
620
+ }
621
+ // Clone the request to read FormData without consuming it
622
+ const formData = await request.clone().formData();
623
+ // Look for React's progressive enhancement hidden fields
624
+ let isDirectAction = false;
625
+ let isUseActionState = false;
626
+ let directActionId = null;
627
+ formData.forEach((_value, key) => {
628
+ if (key.startsWith("$ACTION_ID_")) {
629
+ isDirectAction = true;
630
+ directActionId = key.slice("$ACTION_ID_".length);
631
+ }
632
+ else if (key.startsWith("$ACTION_REF_")) {
633
+ isUseActionState = true;
634
+ }
635
+ });
636
+ if (!isDirectAction && !isUseActionState) {
637
+ return null;
638
+ }
639
+ // Execute action and return HTML
640
+ let actionResult = undefined;
641
+ let reactFormState = null;
642
+ if (isUseActionState) {
643
+ try {
644
+ const boundAction = await decodeAction(formData);
645
+ actionResult = await boundAction();
646
+ }
647
+ catch (error) {
648
+ callOnError(error, "action", {
649
+ request,
650
+ url,
651
+ env,
652
+ handledByBoundary: false,
653
+ });
654
+ console.error("[RSC] Progressive enhancement action error:", error);
655
+ }
656
+ }
657
+ else if (isDirectAction && directActionId) {
658
+ const temporaryReferences = createTemporaryReferenceSet();
659
+ let args = [];
660
+ try {
661
+ args = await decodeReply(formData, { temporaryReferences });
662
+ }
663
+ catch {
664
+ args = [formData];
665
+ }
666
+ try {
667
+ const loadedAction = await loadServerAction(directActionId);
668
+ actionResult = await loadedAction.apply(null, args);
669
+ }
670
+ catch (error) {
671
+ callOnError(error, "action", {
672
+ request,
673
+ url,
674
+ env,
675
+ actionId: directActionId,
676
+ handledByBoundary: false,
677
+ });
678
+ console.error("[RSC] Progressive enhancement action error:", error);
679
+ }
680
+ }
681
+ // Decode form state for useActionState progressive enhancement
682
+ try {
683
+ reactFormState = await decodeFormState(actionResult, formData);
684
+ }
685
+ catch (error) {
686
+ callOnError(error, "action", {
687
+ request,
688
+ url,
689
+ env,
690
+ handledByBoundary: false,
691
+ });
692
+ console.error("[RSC] Failed to decode form state:", error);
693
+ }
694
+ // Re-render the page and return HTML
695
+ const renderRequest = new Request(url.toString(), {
696
+ method: "GET",
697
+ headers: new Headers({ accept: "text/html" }),
698
+ });
699
+ const match = await router.match(renderRequest, env);
700
+ if (match.redirect) {
701
+ return createResponseWithMergedHeaders(null, {
702
+ status: 308,
703
+ headers: { Location: match.redirect },
704
+ });
705
+ }
706
+ const root = renderSegments(match.segments, {
707
+ rootLayout: router.rootLayout,
708
+ });
709
+ const payload = {
710
+ root,
711
+ metadata: {
712
+ pathname: url.pathname,
713
+ segments: match.segments,
714
+ matched: match.matched,
715
+ diff: match.diff,
716
+ isPartial: false,
717
+ rootLayout: router.rootLayout,
718
+ handles: handleStore.stream(),
719
+ version,
720
+ themeConfig: router.themeConfig,
721
+ warmupEnabled: router.warmupEnabled,
722
+ initialTheme: requireRequestContext().theme,
723
+ },
724
+ formState: actionResult,
725
+ };
726
+ const rscStream = renderToReadableStream(payload);
727
+ const ssrModule = await loadSSRModule();
728
+ const htmlStream = await ssrModule.renderHTML(rscStream, {
729
+ formState: reactFormState,
730
+ nonce,
731
+ });
732
+ return createResponseWithMergedHeaders(htmlStream, {
733
+ headers: { "content-type": "text/html;charset=utf-8" },
734
+ });
735
+ }
736
+ // ============================================================================
737
+ // SERVER ACTION HANDLER
738
+ // ============================================================================
739
+ async function handleServerAction(request, env, url, actionId, handleStore) {
740
+ const temporaryReferences = createTemporaryReferenceSet();
741
+ // Decode action arguments from request body
742
+ const contentType = request.headers.get("content-type") || "";
743
+ let args = [];
744
+ let actionFormData;
745
+ try {
746
+ const body = contentType.includes("multipart/form-data")
747
+ ? await request.formData()
748
+ : await request.text();
749
+ if (body instanceof FormData) {
750
+ actionFormData = body;
751
+ }
752
+ if (hasBodyContent(body)) {
753
+ args = await decodeReply(body, { temporaryReferences });
754
+ }
755
+ }
756
+ catch (error) {
757
+ callOnError(error, "action", {
758
+ request,
759
+ url,
760
+ env,
761
+ actionId,
762
+ handledByBoundary: false,
763
+ });
764
+ throw new Error(`Failed to decode action arguments: ${error}`, {
765
+ cause: error,
766
+ });
767
+ }
768
+ // Execute the server action
769
+ let returnValue;
770
+ let actionStatus = 200;
771
+ let loadedAction;
772
+ try {
773
+ loadedAction = await loadServerAction(actionId);
774
+ const data = await loadedAction.apply(null, args);
775
+ returnValue = { ok: true, data };
776
+ }
777
+ catch (error) {
778
+ returnValue = { ok: false, data: error };
779
+ actionStatus = 500;
780
+ // Try to render error boundary
781
+ const errorResult = await router.matchError(request, env, error, "route");
782
+ // Report the action error (handledByBoundary indicates if error boundary will render)
783
+ callOnError(error, "action", {
784
+ request,
785
+ url,
786
+ env,
787
+ actionId,
788
+ handledByBoundary: !!errorResult,
789
+ });
790
+ if (errorResult) {
791
+ setRequestContextParams(errorResult.params);
792
+ const payload = {
793
+ root: null,
794
+ metadata: {
795
+ pathname: url.pathname,
796
+ segments: errorResult.segments,
797
+ isPartial: true,
798
+ matched: errorResult.matched,
799
+ diff: errorResult.diff,
800
+ isError: true,
801
+ handles: handleStore.stream(),
802
+ version,
803
+ },
804
+ returnValue,
805
+ };
806
+ const rscStream = renderToReadableStream(payload, {
807
+ temporaryReferences,
808
+ });
809
+ return createResponseWithMergedHeaders(rscStream, {
810
+ status: actionStatus,
811
+ headers: { "content-type": "text/x-component;charset=utf-8" },
812
+ });
813
+ }
814
+ }
815
+ // Revalidate after action
816
+ const resolvedActionId = loadedAction?.$id ??
817
+ loadedAction?.$$id ??
818
+ actionId;
819
+ const actionContext = {
820
+ actionId: resolvedActionId,
821
+ actionUrl: new URL(request.url),
822
+ actionResult: returnValue.data,
823
+ formData: actionFormData,
824
+ };
825
+ const matchResult = await router.matchPartial(request, env, actionContext);
826
+ if (!matchResult) {
827
+ // Fall back to full render
828
+ const fullMatch = await router.match(request, env);
829
+ setRequestContextParams(fullMatch.params);
830
+ if (fullMatch.redirect) {
831
+ return createResponseWithMergedHeaders(null, {
832
+ status: 308,
833
+ headers: { Location: fullMatch.redirect },
834
+ });
835
+ }
836
+ const renderStart = performance.now();
837
+ const root = renderSegments(fullMatch.segments, {
838
+ rootLayout: router.rootLayout,
839
+ isAction: true,
840
+ });
841
+ const renderDuration = performance.now() - renderStart;
842
+ const serverTiming = fullMatch.serverTiming
843
+ ? `${fullMatch.serverTiming}, rendering;dur=${renderDuration.toFixed(2)}`
844
+ : `rendering;dur=${renderDuration.toFixed(2)}`;
845
+ const payload = {
846
+ root,
847
+ metadata: {
848
+ pathname: url.pathname,
849
+ segments: fullMatch.segments,
850
+ matched: fullMatch.matched,
851
+ diff: fullMatch.diff,
852
+ handles: handleStore.stream(),
853
+ version,
854
+ },
855
+ returnValue,
856
+ };
857
+ const rscStream = renderToReadableStream(payload, {
858
+ temporaryReferences,
859
+ });
860
+ const headers = {
861
+ "content-type": "text/x-component;charset=utf-8",
862
+ };
863
+ if (serverTiming) {
864
+ headers["Server-Timing"] = serverTiming;
865
+ }
866
+ return createResponseWithMergedHeaders(rscStream, {
867
+ status: actionStatus,
868
+ headers,
869
+ });
870
+ }
871
+ // Return updated segments
872
+ setRequestContextParams(matchResult.params);
873
+ const renderStart = performance.now();
874
+ const renderDuration = performance.now() - renderStart;
875
+ const serverTiming = matchResult.serverTiming
876
+ ? `${matchResult.serverTiming}, rendering;dur=${renderDuration.toFixed(2)}`
877
+ : `rendering;dur=${renderDuration.toFixed(2)}`;
878
+ const payload = {
879
+ root: null,
880
+ metadata: {
881
+ pathname: url.pathname,
882
+ segments: matchResult.segments,
883
+ isPartial: true,
884
+ matched: matchResult.matched,
885
+ diff: matchResult.diff,
886
+ slots: matchResult.slots,
887
+ handles: handleStore.stream(),
888
+ version,
889
+ },
890
+ returnValue,
891
+ };
892
+ const rscStream = renderToReadableStream(payload, {
893
+ temporaryReferences,
894
+ });
895
+ const actionHeaders = {
896
+ "content-type": "text/x-component;charset=utf-8",
897
+ };
898
+ if (serverTiming) {
899
+ actionHeaders["Server-Timing"] = serverTiming;
900
+ }
901
+ return createResponseWithMergedHeaders(rscStream, {
902
+ status: actionStatus,
903
+ headers: actionHeaders,
904
+ });
905
+ }
906
+ // ============================================================================
907
+ // LOADER FETCH HANDLER
908
+ // Supports GET (params in query string) and POST/PUT/PATCH/DELETE (JSON body)
909
+ // ============================================================================
910
+ async function handleLoaderFetch(request, env, url, variables) {
911
+ const loaderId = url.searchParams.get("_rsc_loader");
912
+ if (!loaderId) {
913
+ return createResponseWithMergedHeaders("Missing _rsc_loader parameter", {
914
+ status: 400,
915
+ });
916
+ }
917
+ // Look up loader lazily
918
+ const registeredLoader = await getLoaderLazy(loaderId);
919
+ if (!registeredLoader) {
920
+ return createResponseWithMergedHeaders(`Loader "${loaderId}" not found in registry`, { status: 404 });
921
+ }
922
+ // Parse params and body based on request method
923
+ let loaderParams = {};
924
+ let loaderBody = undefined;
925
+ const isBodyMethod = request.method !== "GET" && request.method !== "HEAD";
926
+ if (isBodyMethod) {
927
+ try {
928
+ const contentType = request.headers.get("content-type") || "";
929
+ if (contentType.includes("application/json")) {
930
+ const jsonBody = (await request.json());
931
+ loaderParams = jsonBody.params ?? {};
932
+ loaderBody = jsonBody.body;
933
+ }
934
+ }
935
+ catch {
936
+ return createResponseWithMergedHeaders("Invalid JSON body", {
937
+ status: 400,
938
+ });
939
+ }
940
+ }
941
+ else {
942
+ const loaderParamsJson = url.searchParams.get("_rsc_loader_params");
943
+ if (loaderParamsJson) {
944
+ try {
945
+ loaderParams = JSON.parse(loaderParamsJson);
946
+ }
947
+ catch {
948
+ return createResponseWithMergedHeaders("Invalid _rsc_loader_params JSON", { status: 400 });
949
+ }
950
+ }
951
+ }
952
+ // Execute the loader with middleware
953
+ try {
954
+ const { fn, middleware } = registeredLoader;
955
+ return await executeLoaderMiddleware(middleware, request, env, loaderParams, variables, async () => {
956
+ const ctx = requireRequestContext();
957
+ const loaderCtx = {
958
+ ...ctx,
959
+ params: loaderParams,
960
+ body: loaderBody,
961
+ };
962
+ const result = await fn(loaderCtx);
963
+ const loaderPayload = { loaderResult: result };
964
+ const rscStream = renderToReadableStream(loaderPayload);
965
+ return createResponseWithMergedHeaders(rscStream, {
966
+ headers: { "content-type": "text/x-component;charset=utf-8" },
967
+ });
968
+ });
969
+ }
970
+ catch (error) {
971
+ const err = error instanceof Error ? error : new Error(String(error));
972
+ const isDev = process.env.NODE_ENV !== "production";
973
+ console.error("[RSC] Loader error:", error);
974
+ callOnError(error, "loader", {
975
+ request,
976
+ url,
977
+ env,
978
+ loaderName: loaderId,
979
+ handledByBoundary: false,
980
+ });
981
+ const errorPayload = {
982
+ loaderResult: null,
983
+ loaderError: {
984
+ message: isDev ? err.message : "An error occurred",
985
+ name: err.name,
986
+ },
987
+ };
988
+ const rscStream = renderToReadableStream(errorPayload);
989
+ return createResponseWithMergedHeaders(rscStream, {
990
+ status: 500,
991
+ headers: { "content-type": "text/x-component;charset=utf-8" },
992
+ });
993
+ }
994
+ }
995
+ // ============================================================================
996
+ // RSC RENDERING HANDLER (Navigation)
997
+ // ============================================================================
998
+ async function handleRscRendering(request, env, url, isPartial, handleStore, nonce) {
999
+ // Retrieve handler-level timing from variables
1000
+ const reqCtx = requireRequestContext();
1001
+ const handlerTimingArr = reqCtx.var.__handlerTiming || [];
1002
+ const handlerStart = reqCtx.var.__handlerStart || 0;
1003
+ let payload;
1004
+ let serverTiming;
1005
+ if (isPartial) {
1006
+ // Partial render (navigation)
1007
+ const result = await router.matchPartial(request, env);
1008
+ if (!result) {
1009
+ // Fall back to full render
1010
+ const match = await router.match(request, env);
1011
+ setRequestContextParams(match.params);
1012
+ if (match.redirect) {
1013
+ return createResponseWithMergedHeaders(null, {
1014
+ status: 308,
1015
+ headers: { Location: match.redirect },
1016
+ });
1017
+ }
1018
+ const renderStart = performance.now();
1019
+ const root = renderSegments(match.segments, {
1020
+ rootLayout: router.rootLayout,
1021
+ });
1022
+ const renderDuration = performance.now() - renderStart;
1023
+ serverTiming = match.serverTiming
1024
+ ? `${match.serverTiming}, rendering;dur=${renderDuration.toFixed(2)}`
1025
+ : `rendering;dur=${renderDuration.toFixed(2)}`;
1026
+ payload = {
1027
+ root,
1028
+ metadata: {
1029
+ pathname: url.pathname,
1030
+ segments: match.segments,
1031
+ matched: match.matched,
1032
+ diff: match.diff,
1033
+ isPartial: false,
1034
+ handles: handleStore.stream(),
1035
+ version,
1036
+ themeConfig: router.themeConfig,
1037
+ initialTheme: reqCtx.theme,
1038
+ },
1039
+ };
1040
+ }
1041
+ else {
1042
+ setRequestContextParams(result.params);
1043
+ serverTiming = result.serverTiming;
1044
+ payload = {
1045
+ root: null,
1046
+ metadata: {
1047
+ pathname: url.pathname,
1048
+ segments: result.segments,
1049
+ matched: result.matched,
1050
+ diff: result.diff,
1051
+ isPartial: true,
1052
+ slots: result.slots,
1053
+ handles: handleStore.stream(),
1054
+ version,
1055
+ },
1056
+ };
1057
+ }
1058
+ }
1059
+ else {
1060
+ // Full render (initial page load)
1061
+ const match = await router.match(request, env);
1062
+ setRequestContextParams(match.params);
1063
+ if (match.redirect) {
1064
+ return createResponseWithMergedHeaders(null, {
1065
+ status: 308,
1066
+ headers: { Location: match.redirect },
1067
+ });
1068
+ }
1069
+ // Caching is now handled in router.match() via cache provider in request context
1070
+ // match.segments already contains cached or fresh segments as appropriate
1071
+ if (url.searchParams.has("__prerender_collect")) {
1072
+ // Build-time prerender collection: serialize segments and handle data
1073
+ // to JSON for storage as build artifacts. At runtime the worker
1074
+ // deserializes these and feeds them through the normal segment pipeline.
1075
+ const nonLoaderSegments = match.segments.filter((s) => s.type !== "loader");
1076
+ await handleStore.settled;
1077
+ const { serializeSegments } = await import("../cache/cache-scope.js");
1078
+ const serializedSegments = await serializeSegments(nonLoaderSegments);
1079
+ const handles = {};
1080
+ for (const seg of nonLoaderSegments) {
1081
+ const segHandles = handleStore.getDataForSegment(seg.id);
1082
+ if (Object.keys(segHandles).length > 0) {
1083
+ handles[seg.id] = segHandles;
1084
+ }
1085
+ }
1086
+ return new Response(JSON.stringify({
1087
+ segments: serializedSegments,
1088
+ handles,
1089
+ routeName: match.routeName,
1090
+ params: match.params,
1091
+ }), { headers: { "Content-Type": "application/json" } });
1092
+ }
1093
+ else {
1094
+ const renderStart = performance.now();
1095
+ const root = renderSegments(match.segments, {
1096
+ rootLayout: router.rootLayout,
1097
+ });
1098
+ const renderDuration = performance.now() - renderStart;
1099
+ serverTiming = match.serverTiming
1100
+ ? `${match.serverTiming}, rendering;dur=${renderDuration.toFixed(2)}`
1101
+ : `rendering;dur=${renderDuration.toFixed(2)}`;
1102
+ payload = {
1103
+ root,
1104
+ metadata: {
1105
+ pathname: url.pathname,
1106
+ segments: match.segments,
1107
+ matched: match.matched,
1108
+ diff: match.diff,
1109
+ isPartial: false,
1110
+ rootLayout: router.rootLayout,
1111
+ handles: handleStore.stream(),
1112
+ version,
1113
+ themeConfig: router.themeConfig,
1114
+ initialTheme: reqCtx.theme,
1115
+ },
1116
+ };
1117
+ }
1118
+ }
1119
+ // Serialize to RSC stream
1120
+ const rscSerializeStart = performance.now();
1121
+ const rscStream = renderToReadableStream(payload);
1122
+ const rscSerializeDur = performance.now() - rscSerializeStart;
1123
+ // Determine if this is an RSC request or HTML request
1124
+ const isRscRequest = (!request.headers.get("accept")?.includes("text/html") &&
1125
+ !url.searchParams.has("__html")) ||
1126
+ url.searchParams.has("__rsc");
1127
+ // Build complete Server-Timing: handler phases + match/manifest + rendering + RSC serialize
1128
+ const timingParts = [...handlerTimingArr];
1129
+ if (serverTiming) {
1130
+ timingParts.push(serverTiming);
1131
+ }
1132
+ timingParts.push(`rsc-serialize;dur=${rscSerializeDur.toFixed(2)}`);
1133
+ if (isRscRequest) {
1134
+ const fullTiming = timingParts.join(", ");
1135
+ const rscHeaders = {
1136
+ "content-type": "text/x-component;charset=utf-8",
1137
+ vary: "accept",
1138
+ };
1139
+ if (fullTiming) {
1140
+ rscHeaders["Server-Timing"] = fullTiming;
1141
+ }
1142
+ return createResponseWithMergedHeaders(rscStream, {
1143
+ headers: rscHeaders,
1144
+ });
1145
+ }
1146
+ // Delegate to SSR for HTML response
1147
+ const ssrModuleStart = performance.now();
1148
+ const ssrModule = await loadSSRModule();
1149
+ const ssrModuleDur = performance.now() - ssrModuleStart;
1150
+ timingParts.push(`ssr-module-load;dur=${ssrModuleDur.toFixed(2)}`);
1151
+ const ssrRenderStart = performance.now();
1152
+ const htmlStream = await ssrModule.renderHTML(rscStream, { nonce });
1153
+ const ssrRenderDur = performance.now() - ssrRenderStart;
1154
+ timingParts.push(`ssr-render-html;dur=${ssrRenderDur.toFixed(2)}`);
1155
+ // Add total handler duration
1156
+ if (handlerStart) {
1157
+ const totalHandler = performance.now() - handlerStart;
1158
+ timingParts.push(`handler-total;dur=${totalHandler.toFixed(2)}`);
1159
+ }
1160
+ const fullTiming = timingParts.join(", ");
1161
+ const htmlHeaders = {
1162
+ "content-type": "text/html;charset=utf-8",
1163
+ };
1164
+ if (fullTiming) {
1165
+ htmlHeaders["Server-Timing"] = fullTiming;
1166
+ }
1167
+ return createResponseWithMergedHeaders(htmlStream, {
1168
+ headers: htmlHeaders,
1169
+ });
1170
+ }
1171
+ }
1172
+ //# sourceMappingURL=handler.js.map