@rangojs/router 0.0.0-experimental.11 → 0.0.0-experimental.111

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 (1141) hide show
  1. package/AGENTS.md +9 -0
  2. package/README.md +1037 -4
  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 +1635 -158
  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/{src/href-context.ts → dist/href-context.d.ts} +7 -11
  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 +6148 -2425
  798. package/dist/vite/index.js.bak +5448 -0
  799. package/dist/vite/index.js.map +1 -0
  800. package/dist/vite/index.named-routes.gen.ts +103 -0
  801. package/dist/vite/package-resolution.d.ts +43 -0
  802. package/dist/vite/package-resolution.d.ts.map +1 -0
  803. package/{src/vite/package-resolution.ts → dist/vite/package-resolution.js} +53 -66
  804. package/dist/vite/package-resolution.js.map +1 -0
  805. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  806. package/dist/vite/virtual-entries.d.ts +25 -0
  807. package/dist/vite/virtual-entries.d.ts.map +1 -0
  808. package/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +12 -16
  809. package/dist/vite/virtual-entries.js.map +1 -0
  810. package/package.json +62 -54
  811. package/skills/breadcrumbs/SKILL.md +252 -0
  812. package/skills/bundle-analysis/SKILL.md +159 -0
  813. package/skills/cache-guide/SKILL.md +473 -0
  814. package/skills/caching/SKILL.md +94 -24
  815. package/skills/composability/SKILL.md +197 -0
  816. package/skills/debug-manifest/SKILL.md +12 -8
  817. package/skills/document-cache/SKILL.md +18 -16
  818. package/skills/fonts/SKILL.md +6 -4
  819. package/skills/handler-use/SKILL.md +364 -0
  820. package/skills/hooks/SKILL.md +524 -71
  821. package/skills/host-router/SKILL.md +243 -0
  822. package/skills/i18n/SKILL.md +276 -0
  823. package/skills/intercept/SKILL.md +173 -8
  824. package/skills/layout/SKILL.md +123 -5
  825. package/skills/links/SKILL.md +316 -25
  826. package/skills/loader/SKILL.md +620 -50
  827. package/skills/middleware/SKILL.md +211 -37
  828. package/skills/migrate-nextjs/SKILL.md +562 -0
  829. package/skills/migrate-react-router/SKILL.md +769 -0
  830. package/skills/mime-routes/SKILL.md +42 -11
  831. package/skills/observability/SKILL.md +137 -0
  832. package/skills/parallel/SKILL.md +271 -3
  833. package/skills/prerender/SKILL.md +448 -63
  834. package/skills/rango/SKILL.md +293 -21
  835. package/skills/response-routes/SKILL.md +210 -100
  836. package/skills/route/SKILL.md +310 -14
  837. package/skills/router-setup/SKILL.md +211 -33
  838. package/skills/server-actions/SKILL.md +751 -0
  839. package/skills/streams-and-websockets/SKILL.md +283 -0
  840. package/skills/theme/SKILL.md +9 -8
  841. package/skills/typesafety/SKILL.md +622 -91
  842. package/skills/use-cache/SKILL.md +324 -0
  843. package/skills/view-transitions/SKILL.md +212 -0
  844. package/src/__augment-tests__/augment.ts +81 -0
  845. package/src/__augment-tests__/augmented.check.ts +117 -0
  846. package/src/__internal.ts +102 -4
  847. package/src/bin/rango.ts +312 -15
  848. package/src/browser/action-coordinator.ts +97 -0
  849. package/src/browser/action-response-classifier.ts +99 -0
  850. package/src/browser/app-shell.ts +52 -0
  851. package/src/browser/app-version.ts +14 -0
  852. package/src/browser/event-controller.ts +136 -68
  853. package/src/browser/history-state.ts +101 -0
  854. package/src/browser/index.ts +3 -3
  855. package/src/browser/intercept-utils.ts +52 -0
  856. package/src/browser/link-interceptor.ts +24 -4
  857. package/src/browser/logging.ts +55 -0
  858. package/src/browser/merge-segment-loaders.ts +20 -12
  859. package/src/browser/navigation-bridge.ts +370 -561
  860. package/src/browser/navigation-client.ts +228 -70
  861. package/src/browser/navigation-store.ts +97 -55
  862. package/src/browser/navigation-transaction.ts +293 -0
  863. package/src/browser/network-error-handler.ts +61 -0
  864. package/src/browser/partial-update.ts +376 -315
  865. package/src/browser/prefetch/cache.ts +314 -0
  866. package/src/browser/prefetch/fetch.ts +282 -0
  867. package/src/browser/prefetch/observer.ts +65 -0
  868. package/src/browser/prefetch/policy.ts +48 -0
  869. package/src/browser/prefetch/queue.ts +191 -0
  870. package/src/browser/prefetch/resource-ready.ts +77 -0
  871. package/src/browser/rango-state.ts +152 -0
  872. package/src/browser/react/Link.tsx +255 -71
  873. package/src/browser/react/NavigationProvider.tsx +152 -24
  874. package/src/browser/react/context.ts +11 -0
  875. package/src/browser/react/filter-segment-order.ts +55 -0
  876. package/src/browser/react/index.ts +15 -12
  877. package/src/browser/react/location-state-shared.ts +176 -53
  878. package/src/browser/react/location-state.ts +90 -19
  879. package/src/browser/react/mount-context.ts +6 -1
  880. package/src/browser/react/nonce-context.ts +23 -0
  881. package/src/browser/react/shallow-equal.ts +27 -0
  882. package/src/browser/react/use-action.ts +29 -51
  883. package/src/browser/react/use-client-cache.ts +5 -3
  884. package/src/browser/react/use-handle.ts +41 -123
  885. package/src/browser/react/use-link-status.ts +6 -5
  886. package/src/browser/react/use-navigation.ts +44 -65
  887. package/src/browser/react/use-params.ts +78 -0
  888. package/src/browser/react/use-pathname.ts +47 -0
  889. package/src/browser/react/use-reverse.ts +99 -0
  890. package/src/browser/react/use-router.ts +96 -0
  891. package/src/browser/react/use-search-params.ts +56 -0
  892. package/src/browser/react/use-segments.ts +85 -99
  893. package/src/browser/response-adapter.ts +73 -0
  894. package/src/browser/rsc-router.tsx +254 -72
  895. package/src/browser/scroll-restoration.ts +132 -49
  896. package/src/browser/segment-reconciler.ts +243 -0
  897. package/src/browser/segment-structure-assert.ts +17 -1
  898. package/src/browser/server-action-bridge.ts +510 -603
  899. package/src/browser/shallow.ts +6 -1
  900. package/src/browser/types.ts +158 -48
  901. package/src/browser/validate-redirect-origin.ts +29 -0
  902. package/src/build/generate-manifest.ts +87 -26
  903. package/src/build/generate-route-types.ts +39 -828
  904. package/src/build/index.ts +2 -5
  905. package/src/build/route-trie.ts +84 -31
  906. package/src/build/route-types/ast-helpers.ts +25 -0
  907. package/src/build/route-types/ast-route-extraction.ts +98 -0
  908. package/src/build/route-types/codegen.ts +102 -0
  909. package/src/build/route-types/include-resolution.ts +418 -0
  910. package/src/build/route-types/param-extraction.ts +48 -0
  911. package/src/build/route-types/per-module-writer.ts +128 -0
  912. package/src/build/route-types/router-processing.ts +618 -0
  913. package/src/build/route-types/scan-filter.ts +85 -0
  914. package/src/build/runtime-discovery.ts +231 -0
  915. package/src/cache/background-task.ts +34 -0
  916. package/src/cache/cache-key-utils.ts +44 -0
  917. package/src/cache/cache-policy.ts +125 -0
  918. package/src/cache/cache-runtime.ts +342 -0
  919. package/src/cache/cache-scope.ts +167 -307
  920. package/src/cache/cf/cf-cache-store.ts +573 -21
  921. package/src/cache/cf/index.ts +13 -3
  922. package/src/cache/document-cache.ts +116 -77
  923. package/src/cache/handle-capture.ts +81 -0
  924. package/src/cache/handle-snapshot.ts +41 -0
  925. package/src/cache/index.ts +1 -15
  926. package/src/cache/memory-segment-store.ts +191 -13
  927. package/src/cache/profile-registry.ts +73 -0
  928. package/src/cache/read-through-swr.ts +134 -0
  929. package/src/cache/segment-codec.ts +256 -0
  930. package/src/cache/taint.ts +153 -0
  931. package/src/cache/types.ts +72 -122
  932. package/src/client.rsc.tsx +6 -1
  933. package/src/client.tsx +117 -303
  934. package/src/component-utils.ts +4 -4
  935. package/src/components/DefaultDocument.tsx +5 -1
  936. package/src/context-var.ts +156 -0
  937. package/src/debug.ts +19 -9
  938. package/src/errors.ts +96 -8
  939. package/src/handle.ts +56 -11
  940. package/src/handles/MetaTags.tsx +73 -20
  941. package/src/handles/breadcrumbs.ts +66 -0
  942. package/src/handles/index.ts +1 -0
  943. package/src/handles/meta.ts +30 -13
  944. package/src/host/cookie-handler.ts +21 -15
  945. package/src/host/errors.ts +8 -8
  946. package/src/host/index.ts +6 -9
  947. package/src/host/pattern-matcher.ts +27 -27
  948. package/src/host/router.ts +176 -82
  949. package/src/host/testing.ts +8 -8
  950. package/src/host/types.ts +46 -9
  951. package/src/host/utils.ts +2 -2
  952. package/src/href-client.ts +196 -56
  953. package/src/index.rsc.ts +141 -22
  954. package/src/index.ts +215 -53
  955. package/src/internal-debug.ts +11 -0
  956. package/src/loader-store.ts +463 -0
  957. package/src/loader.rsc.ts +25 -143
  958. package/src/loader.ts +27 -10
  959. package/src/network-error-thrower.tsx +3 -1
  960. package/src/outlet-context.ts +1 -1
  961. package/src/outlet-provider.tsx +45 -0
  962. package/src/prerender/param-hash.ts +4 -2
  963. package/src/prerender/store.ts +122 -17
  964. package/src/prerender.ts +397 -29
  965. package/src/response-utils.ts +28 -0
  966. package/src/reverse.ts +231 -121
  967. package/src/root-error-boundary.tsx +41 -29
  968. package/src/route-content-wrapper.tsx +7 -4
  969. package/src/route-definition/dsl-helpers.ts +1106 -0
  970. package/src/route-definition/helper-factories.ts +90 -0
  971. package/src/route-definition/helpers-types.ts +485 -0
  972. package/src/route-definition/index.ts +55 -0
  973. package/src/route-definition/redirect.ts +101 -0
  974. package/src/route-definition/resolve-handler-use.ts +155 -0
  975. package/src/route-definition/use-item-types.ts +32 -0
  976. package/src/route-definition.ts +1 -1431
  977. package/src/route-map-builder.ts +162 -123
  978. package/src/route-name.ts +53 -0
  979. package/src/route-types.ts +77 -44
  980. package/src/router/content-negotiation.ts +215 -0
  981. package/src/router/debug-manifest.ts +72 -0
  982. package/src/router/error-handling.ts +10 -10
  983. package/src/router/find-match.ts +160 -0
  984. package/src/router/handler-context.ts +376 -109
  985. package/src/router/intercept-resolution.ts +35 -20
  986. package/src/router/lazy-includes.ts +237 -0
  987. package/src/router/loader-resolution.ts +330 -145
  988. package/src/router/logging.ts +251 -0
  989. package/src/router/manifest.ts +70 -22
  990. package/src/router/match-api.ts +196 -261
  991. package/src/router/match-context.ts +4 -2
  992. package/src/router/match-handlers.ts +441 -0
  993. package/src/router/match-middleware/background-revalidation.ts +108 -93
  994. package/src/router/match-middleware/cache-lookup.ts +414 -91
  995. package/src/router/match-middleware/cache-store.ts +91 -29
  996. package/src/router/match-middleware/intercept-resolution.ts +48 -21
  997. package/src/router/match-middleware/segment-resolution.ts +73 -9
  998. package/src/router/match-pipelines.ts +10 -45
  999. package/src/router/match-result.ts +154 -35
  1000. package/src/router/metrics.ts +241 -16
  1001. package/src/router/middleware-cookies.ts +55 -0
  1002. package/src/router/middleware-types.ts +209 -0
  1003. package/src/router/middleware.ts +373 -371
  1004. package/src/router/navigation-snapshot.ts +182 -0
  1005. package/src/router/pattern-matching.ts +291 -54
  1006. package/src/router/prerender-match.ts +502 -0
  1007. package/src/router/preview-match.ts +98 -0
  1008. package/src/router/request-classification.ts +310 -0
  1009. package/src/router/revalidation.ts +195 -40
  1010. package/src/router/route-snapshot.ts +245 -0
  1011. package/src/router/router-context.ts +41 -21
  1012. package/src/router/router-interfaces.ts +490 -0
  1013. package/src/router/router-options.ts +618 -0
  1014. package/src/router/router-registry.ts +21 -0
  1015. package/src/router/segment-resolution/fresh.ts +756 -0
  1016. package/src/router/segment-resolution/helpers.ts +268 -0
  1017. package/src/router/segment-resolution/loader-cache.ts +199 -0
  1018. package/src/router/segment-resolution/revalidation.ts +1407 -0
  1019. package/src/router/segment-resolution/static-store.ts +67 -0
  1020. package/src/router/segment-resolution.ts +21 -1336
  1021. package/src/router/segment-wrappers.ts +291 -0
  1022. package/src/router/substitute-pattern-params.ts +56 -0
  1023. package/src/router/telemetry-otel.ts +299 -0
  1024. package/src/router/telemetry.ts +300 -0
  1025. package/src/router/timeout.ts +148 -0
  1026. package/src/router/trie-matching.ts +111 -39
  1027. package/src/router/types.ts +17 -9
  1028. package/src/router/url-params.ts +49 -0
  1029. package/src/router.ts +707 -2291
  1030. package/src/rsc/handler-context.ts +45 -0
  1031. package/src/rsc/handler.ts +864 -1117
  1032. package/src/rsc/helpers.ts +181 -19
  1033. package/src/rsc/index.ts +1 -21
  1034. package/src/rsc/loader-fetch.ts +229 -0
  1035. package/src/rsc/manifest-init.ts +90 -0
  1036. package/src/rsc/nonce.ts +14 -0
  1037. package/src/rsc/origin-guard.ts +141 -0
  1038. package/src/rsc/progressive-enhancement.ts +395 -0
  1039. package/src/rsc/response-error.ts +37 -0
  1040. package/src/rsc/response-route-handler.ts +360 -0
  1041. package/src/rsc/rsc-rendering.ts +256 -0
  1042. package/src/rsc/runtime-warnings.ts +42 -0
  1043. package/src/rsc/server-action.ts +360 -0
  1044. package/src/rsc/ssr-setup.ts +128 -0
  1045. package/src/rsc/types.ts +52 -11
  1046. package/src/search-params.ts +230 -0
  1047. package/src/segment-content-promise.ts +67 -0
  1048. package/src/segment-loader-promise.ts +122 -0
  1049. package/src/segment-system.tsx +187 -38
  1050. package/src/serialize.ts +243 -0
  1051. package/src/server/context.ts +403 -88
  1052. package/src/server/cookie-store.ts +190 -0
  1053. package/src/server/fetchable-loader-store.ts +37 -0
  1054. package/src/server/handle-store.ts +113 -15
  1055. package/src/server/loader-registry.ts +24 -64
  1056. package/src/server/request-context.ts +603 -109
  1057. package/src/server.ts +35 -155
  1058. package/src/ssr/index.tsx +107 -30
  1059. package/src/static-handler.ts +126 -0
  1060. package/src/theme/ThemeProvider.tsx +21 -15
  1061. package/src/theme/ThemeScript.tsx +5 -5
  1062. package/src/theme/constants.ts +5 -2
  1063. package/src/theme/index.ts +4 -14
  1064. package/src/theme/theme-context.ts +4 -30
  1065. package/src/theme/theme-script.ts +21 -18
  1066. package/src/types/boundaries.ts +158 -0
  1067. package/src/types/cache-types.ts +198 -0
  1068. package/src/types/error-types.ts +192 -0
  1069. package/src/types/global-namespace.ts +113 -0
  1070. package/src/types/handler-context.ts +806 -0
  1071. package/src/types/index.ts +89 -0
  1072. package/src/types/loader-types.ts +209 -0
  1073. package/src/types/request-scope.ts +126 -0
  1074. package/src/types/route-config.ts +170 -0
  1075. package/src/types/route-entry.ts +120 -0
  1076. package/src/types/segments.ts +167 -0
  1077. package/src/types.ts +1 -1763
  1078. package/src/urls/include-helper.ts +164 -0
  1079. package/src/urls/index.ts +50 -0
  1080. package/src/urls/path-helper-types.ts +372 -0
  1081. package/src/urls/path-helper.ts +329 -0
  1082. package/src/urls/pattern-types.ts +124 -0
  1083. package/src/urls/response-types.ts +109 -0
  1084. package/src/urls/type-extraction.ts +282 -0
  1085. package/src/urls/urls-function.ts +94 -0
  1086. package/src/urls.ts +1 -1288
  1087. package/src/use-loader.tsx +511 -107
  1088. package/src/vite/debug.ts +184 -0
  1089. package/src/vite/discovery/bundle-postprocess.ts +181 -0
  1090. package/src/vite/discovery/discover-routers.ts +374 -0
  1091. package/src/vite/discovery/discovery-errors.ts +194 -0
  1092. package/src/vite/discovery/gate-state.ts +171 -0
  1093. package/src/vite/discovery/prerender-collection.ts +480 -0
  1094. package/src/vite/discovery/route-types-writer.ts +258 -0
  1095. package/src/vite/discovery/self-gen-tracking.ts +73 -0
  1096. package/src/vite/discovery/state.ts +143 -0
  1097. package/src/vite/discovery/virtual-module-codegen.ts +193 -0
  1098. package/src/vite/index.ts +15 -2012
  1099. package/src/vite/plugin-types.ts +103 -0
  1100. package/src/vite/plugins/cjs-to-esm.ts +98 -0
  1101. package/src/vite/plugins/client-ref-dedup.ts +131 -0
  1102. package/src/vite/plugins/client-ref-hashing.ts +117 -0
  1103. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1104. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1105. package/src/vite/plugins/cloudflare-protocol-stub.ts +214 -0
  1106. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +109 -66
  1107. package/src/vite/plugins/expose-id-utils.ts +303 -0
  1108. package/src/vite/plugins/expose-ids/export-analysis.ts +320 -0
  1109. package/src/vite/plugins/expose-ids/handler-transform.ts +209 -0
  1110. package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
  1111. package/src/vite/plugins/expose-ids/router-transform.ts +127 -0
  1112. package/src/vite/plugins/expose-ids/types.ts +45 -0
  1113. package/src/vite/plugins/expose-internal-ids.ts +816 -0
  1114. package/src/vite/plugins/performance-tracks.ts +92 -0
  1115. package/src/vite/plugins/refresh-cmd.ts +127 -0
  1116. package/src/vite/plugins/use-cache-transform.ts +336 -0
  1117. package/src/vite/plugins/version-injector.ts +109 -0
  1118. package/src/vite/plugins/version-plugin.ts +323 -0
  1119. package/src/vite/plugins/virtual-entries.ts +123 -0
  1120. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  1121. package/src/vite/rango.ts +509 -0
  1122. package/src/vite/router-discovery.ts +1511 -0
  1123. package/src/vite/utils/ast-handler-extract.ts +517 -0
  1124. package/src/vite/utils/banner.ts +36 -0
  1125. package/src/vite/utils/bundle-analysis.ts +139 -0
  1126. package/src/vite/utils/forward-user-plugins.ts +193 -0
  1127. package/src/vite/utils/manifest-utils.ts +86 -0
  1128. package/src/vite/utils/package-resolution.ts +161 -0
  1129. package/src/vite/utils/prerender-utils.ts +222 -0
  1130. package/src/vite/utils/shared-utils.ts +174 -0
  1131. package/CLAUDE.md +0 -43
  1132. package/src/browser/lru-cache.ts +0 -69
  1133. package/src/browser/request-controller.ts +0 -164
  1134. package/src/cache/memory-store.ts +0 -253
  1135. package/src/router.gen.ts +0 -6
  1136. package/src/urls.gen.ts +0 -8
  1137. package/src/vite/expose-handle-id.ts +0 -209
  1138. package/src/vite/expose-loader-id.ts +0 -426
  1139. package/src/vite/expose-location-state-id.ts +0 -177
  1140. package/src/vite/expose-prerender-handler-id.ts +0 -429
  1141. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
@@ -1,24 +1,24 @@
1
1
  ---
2
2
  name: prerender
3
- description: Pre-render route segments at build time with createPrerenderHandler and passthrough fallback
3
+ description: Pre-render route segments at build time with Prerender and Passthrough live fallback
4
4
  argument-hint: [passthrough]
5
5
  ---
6
6
 
7
- # Pre-rendering with createPrerenderHandler
7
+ # Pre-rendering with Prerender
8
8
 
9
9
  Pre-rendering is **caching at build time**. Same serialization format, same
10
10
  deserialization path, same segment system. The worker handles every request --
11
11
  there are NO static .html or .rsc files served from assets. The worker reads
12
12
  pre-computed Flight payloads instead of executing handler code.
13
13
 
14
- ## API: createPrerenderHandler
14
+ ## API: Prerender
15
15
 
16
16
  ### Static Route (no params)
17
17
 
18
18
  ```typescript
19
- import { createPrerenderHandler } from "@rangojs/router";
19
+ import { Prerender } from "@rangojs/router";
20
20
 
21
- export const AboutPage = createPrerenderHandler(async (ctx) => {
21
+ export const AboutPage = Prerender(async (ctx) => {
22
22
  const content = await fs.readFile("content/about.md", "utf-8");
23
23
  return <Page content={markdownToJsx(content)} />;
24
24
  });
@@ -32,7 +32,7 @@ path("/about", AboutPage, { name: "about" })
32
32
  Params come first, handler second:
33
33
 
34
34
  ```typescript
35
- export const BlogPost = createPrerenderHandler(
35
+ export const BlogPost = Prerender(
36
36
  // 1. Params: which slugs to pre-render
37
37
  async () => {
38
38
  const files = await glob("content/blog/*.md");
@@ -51,8 +51,14 @@ path("/blog/:slug", BlogPost, { name: "blog.post" })
51
51
 
52
52
  ### With Passthrough (live fallback for unknown params)
53
53
 
54
+ Wrap a `Prerender` definition with `Passthrough()` to add a separate live handler
55
+ for unknown params at runtime. The build handler runs at build time, the live
56
+ handler runs at request time.
57
+
54
58
  ```typescript
55
- export const ProductPage = createPrerenderHandler(
59
+ import { Prerender, Passthrough } from "@rangojs/router";
60
+
61
+ export const ProductPageDef = Prerender(
56
62
  async () => {
57
63
  const top = await db.query("SELECT id FROM products WHERE featured");
58
64
  return top.map(p => ({ id: p.id }));
@@ -61,30 +67,42 @@ export const ProductPage = createPrerenderHandler(
61
67
  const product = await db.query("SELECT * FROM products WHERE id = ?", ctx.params.id);
62
68
  return <Product data={product} />;
63
69
  },
64
- { passthrough: true }
70
+ { concurrency: 4 }
65
71
  );
72
+
73
+ // In route definition:
74
+ path("/products/:id", Passthrough(ProductPageDef, async (ctx) => {
75
+ const product = await ctx.env.DB.query("SELECT * FROM products WHERE id = ?", ctx.params.id);
76
+ return <Product data={product} />;
77
+ }), { name: "product" })
66
78
  ```
67
79
 
68
- ## Passthrough Mode
80
+ ## Passthrough Wrapper
69
81
 
70
- Controls whether the handler stays in the RSC server bundle after build:
82
+ `Passthrough(prerenderDef, liveHandler)` wraps a `Prerender` definition with a
83
+ separate handler for runtime fallback. The build and live handlers are separate
84
+ functions — no `ctx.build` branching needed.
71
85
 
72
- | | `passthrough: false` (default) | `passthrough: true` |
73
- |---|---|---|
74
- | Known params | Served from pre-rendered Flight payload | Served from pre-rendered Flight payload |
75
- | Unknown params | Handler evicted, no live fallback | Handler runs live at request time |
76
- | Bundle size | Handler code + imports removed | Handler code kept in RSC bundle |
77
- | `revalidate()` | Not allowed (handler gone) | Allowed (handler can re-render) |
78
- | `loading()` | Ignored (segments fully resolved) | Works for live fallback renders |
86
+ | | Plain `Prerender` (no wrapper) | `Passthrough(def, liveHandler)` |
87
+ | ------------------- | --------------------------------------- | ---------------------------------------- |
88
+ | Known params | Served from pre-rendered Flight payload | Served from pre-rendered Flight payload |
89
+ | Unknown params | Handler evicted, no live fallback | Live handler runs at request time |
90
+ | `ctx.passthrough()` | Throws (not on Passthrough route) | Skips artifact, defers to live handler |
91
+ | Bundle size | Build handler code + imports removed | Build handler evicted, live handler kept |
92
+ | `revalidate()` | Not allowed (handler gone) | Allowed (live handler can re-render) |
93
+ | `loading()` | Ignored (segments fully resolved) | Works for live fallback renders |
79
94
 
80
- ### When to use passthrough
95
+ ### When to use Passthrough
96
+
97
+ Use `Passthrough()` when:
81
98
 
82
- Use `passthrough: true` when:
83
99
  - The route has a large or open-ended param space (e.g., user profiles, product pages)
84
100
  - You want to pre-render popular/known params for speed but still serve unknown params live
85
101
  - You need `revalidate()` on the route
102
+ - The live handler needs runtime bindings (e.g., `ctx.env.DB`)
103
+
104
+ Use plain `Prerender` (no wrapper) when:
86
105
 
87
- Use `passthrough: false` (default) when:
88
106
  - All possible params are known at build time (e.g., markdown files, config-driven pages)
89
107
  - You want maximum bundle size reduction (handler code + node:fs imports removed)
90
108
  - The route uses build-only APIs (node:fs, local files) not available at runtime
@@ -95,35 +113,101 @@ Handlers receive `BuildContext` at build time, a subset of the runtime `HandlerC
95
113
 
96
114
  ```typescript
97
115
  interface BuildContext<TParams> {
98
- params: TParams; // From getParams
99
- use: <T>(handle: Handle<T>) => (data: T) => void; // Push handle data
100
- url: URL; // Synthetic URL from pattern + params
101
- pathname: string; // Pathname from synthetic URL
102
- // NOT available: req, headers, cookies, env (throws descriptive errors)
116
+ params: TParams; // From getParams
117
+ build: true; // Always true at build time
118
+ dev: boolean; // true in Vite dev mode, false during production build
119
+ use: <T>(handle: Handle<T>) => (data: T) => void; // Push handle data
120
+ url: URL; // Synthetic URL from pattern + params
121
+ pathname: string; // Pathname from synthetic URL
122
+ set(key: string, value: any): void; // Set context variable (string key)
123
+ set<T>(contextVar: ContextVar<T>, value: T): void; // Set typed context variable
124
+ get(key: string): any; // Read context variable (string key)
125
+ get<T>(contextVar: ContextVar<T>): T | undefined; // Read typed context variable
126
+ reverse(
127
+ name: string,
128
+ params?: Record<string, string>,
129
+ search?: Record<string, unknown>,
130
+ ): string; // URL generation
131
+ passthrough(): PrerenderPassthroughResult; // Skip local artifact (Passthrough routes only)
132
+ env: DefaultEnv; // Available when buildEnv is configured in rango() (throws otherwise)
133
+ // NOT available: request, headers, cookies (always throw)
103
134
  }
104
135
  ```
105
136
 
137
+ Use `createVar<T>()` to share typed data from a Prerender handler to child layouts:
138
+
139
+ ```typescript
140
+ import { Prerender, createVar } from "@rangojs/router";
141
+
142
+ interface PaginationData { current: number; total: number; }
143
+ export const Pagination = createVar<PaginationData>();
144
+
145
+ export const ArticleList = Prerender<{ page: string }>(
146
+ async () => [{ page: "1" }, { page: "2" }],
147
+ async (ctx) => {
148
+ ctx.set(Pagination, { current: Number(ctx.params.page), total: 2 });
149
+ return <Articles />;
150
+ },
151
+ );
152
+ ```
153
+
106
154
  All items inside the path's use() callback (child layouts, parallels) also receive
107
155
  `BuildContext` during pre-rendering. Loaders are the exception -- they run at
108
156
  request time with full server context.
109
157
 
158
+ This is one reason prerender is a good fit for handler-first composition:
159
+ the handler and its child layouts/parallels participate in the same full
160
+ render pass, so data set with `ctx.set()` is available downstream via
161
+ `ctx.get()`.
162
+
163
+ At runtime, partial action revalidation follows a narrower rule: only
164
+ revalidated segments are recomputed. If a child segment depends on data
165
+ established by an outer handler/layout, that outer segment must also be
166
+ revalidated, or the child must load/guard the data independently.
167
+
168
+ ## Supported Export Patterns
169
+
170
+ All of the following are equivalent and fully supported by the Vite transform:
171
+
172
+ ```typescript
173
+ // Direct export (most common)
174
+ export const BlogPost = Prerender(getParams, handler);
175
+
176
+ // Separate declaration + named export
177
+ const BlogPost = Prerender(getParams, handler);
178
+ export { BlogPost };
179
+
180
+ // Aliased export
181
+ const InternalPage = Prerender(getParams, handler);
182
+ export { InternalPage as BlogPost };
183
+
184
+ // Aliased import
185
+ import { Prerender as cph } from "@rangojs/router";
186
+ export const BlogPost = cph(getParams, handler);
187
+ ```
188
+
189
+ All patterns support whole-file stubbing, expression stubbing, and build-time
190
+ module tracking. The same applies to `Static`.
191
+
110
192
  ## Handler Eviction
111
193
 
112
- In production builds, `createPrerenderHandler` exports are replaced with stubs:
194
+ In production builds, `Prerender` exports are replaced with stubs:
113
195
 
114
196
  ```typescript
115
197
  // Original
116
- export const BlogPost = createPrerenderHandler(getParams, handler);
198
+ export const BlogPost = Prerender(getParams, handler);
117
199
 
118
- // Stubbed (ships to server bundle when passthrough: false)
119
- export const BlogPost = { __brand: "prerenderHandler", $$id: "abc123#BlogPost" };
200
+ // Stubbed (all Prerender handlers are evicted)
201
+ export const BlogPost = {
202
+ __brand: "prerenderHandler",
203
+ $$id: "abc123#BlogPost",
204
+ };
120
205
  ```
121
206
 
122
- The original module and its imports (node:fs, markdown libs) are excluded from
123
- the bundle. With `passthrough: true`, the handler code stays in the RSC bundle.
207
+ All Prerender handlers are evicted in production. The live handler for
208
+ `Passthrough()` routes lives in the urls module and is not evicted.
124
209
 
125
- In client and SSR environments, ALL prerender handlers are always stubbed
126
- (passthrough only affects the RSC server bundle).
210
+ In client and SSR environments, ALL prerender handlers are always stubbed.
127
211
 
128
212
  ## Sub-use Semantics
129
213
 
@@ -139,12 +223,12 @@ path("/blog/:slug", BlogPost, { name: "blog.post" }, () => [
139
223
  ])
140
224
  ```
141
225
 
142
- If a parallel or child layout uses node APIs, wrap it in `createPrerenderHandler`
226
+ If a parallel or child layout uses node APIs, wrap it in `Prerender`
143
227
  (static, no getParams) so the Vite plugin can stub it:
144
228
 
145
229
  ```typescript
146
- // sidebar.tsx -- uses node:fs, must be a createPrerenderHandler
147
- export const BlogSidebar = createPrerenderHandler(async (ctx) => {
230
+ // sidebar.tsx -- uses node:fs, must be a Prerender
231
+ export const BlogSidebar = Prerender(async (ctx) => {
148
232
  const files = await fs.readdir("content/blog/");
149
233
  return <Sidebar posts={files.map(f => basename(f, ".md"))} />;
150
234
  });
@@ -157,22 +241,36 @@ path("/blog/:slug", BlogPost, { name: "blog.post" }, () => [
157
241
 
158
242
  ## Interaction with DSL Items
159
243
 
160
- | DSL item | Behavior with createPrerenderHandler |
161
- |----------------|--------------------------------------|
162
- | `loader()` | Live at runtime, bundled normally. Use `cache()` for caching. |
163
- | `revalidate()` | Not allowed without passthrough. Allowed with passthrough. |
164
- | `cache()` | Orthogonal -- use on parent layouts and loaders. |
165
- | `layout()` | Child layouts inside path are pre-rendered. Parent layouts are live. |
166
- | `parallel()` | Parallel slots inside path are pre-rendered. |
167
- | `middleware()` | Skipped during pre-render (no request). Runs at request time for loaders. |
168
- | `loading()` | Ignored without passthrough. Works for live fallback with passthrough. |
169
- | `intercept()` | Not pre-rendered (intercepts are navigation-triggered). |
244
+ | DSL item | Behavior with Prerender |
245
+ | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
246
+ | `loader()` | Live at runtime, bundled normally. Use `cache()` for caching. |
247
+ | `revalidate()` | Not allowed without Passthrough. Allowed with Passthrough. |
248
+ | `cache()` | Orthogonal -- use on parent layouts and loaders. |
249
+ | `layout()` | Child layouts inside path are pre-rendered. Parent layouts are live. |
250
+ | `parallel()` | Parallel slots inside path are pre-rendered. |
251
+ | `middleware()` | Skipped during pre-render (no request). Runs at request time for loaders. |
252
+ | `loading()` | Ignored without Passthrough. Works for live fallback with Passthrough. |
253
+ | `intercept()` | Pre-rendered at build time. Intercept variant stored under `/i` key alongside main segments. At runtime, the correct variant is served based on `ctx.isIntercept`. `when()` conditions are skipped at build time (all intercepts are pre-rendered unconditionally). |
254
+
255
+ When Passthrough revalidation is enabled, remember that revalidation is
256
+ still partial: opting a child segment into revalidation does not
257
+ implicitly re-run outer prerender-derived handlers/layouts.
170
258
 
171
259
  ## Dev Mode
172
260
 
173
- In dev mode, `createPrerenderHandler` is a normal handler. Routes render live
174
- on every request. No stubbing, no build-time pre-rendering. The handler runs
175
- with full runtime context (not BuildContext).
261
+ In dev mode there is no production-style prerender build pass and no handler
262
+ stubbing.
263
+
264
+ **Node.js dev server** — `Prerender` acts as a normal handler. Routes render
265
+ live on every request with full runtime context (`ctx.build === false`).
266
+
267
+ **Non-Node runtimes (Cloudflare workerd, Deno workers)** — Handlers that
268
+ depend on Node APIs (e.g. `node:fs`) cannot run in-process. The Vite plugin
269
+ can intercept these requests and resolve them via the `/__rsc_prerender`
270
+ endpoint, which runs `matchForPrerender` in a Node.js temp server. In this
271
+ path the handler receives `BuildContext` (`ctx.build === true`) and segments
272
+ are resolved identically to production prerendering, then served on-demand.
273
+ This only applies when `__PRERENDER_DEV_URL` is set by the plugin.
176
274
 
177
275
  ## Storage Layout
178
276
 
@@ -188,41 +286,230 @@ dist/static/__<hash>/
188
286
  _.flight # static route, no params
189
287
  ```
190
288
 
289
+ ## Concurrency
290
+
291
+ Prerender handlers can specify how many param sets render in parallel:
292
+
293
+ ```typescript
294
+ export const BlogPost = Prerender(
295
+ async () => posts.map(p => ({ slug: p.slug })),
296
+ async (ctx) => <PostPage slug={ctx.params.slug} />,
297
+ { concurrency: 4 },
298
+ );
299
+ ```
300
+
301
+ Default is `1` (sequential). Only `Prerender` supports concurrency; `Static` handlers
302
+ always render sequentially.
303
+
304
+ ## Skipping Entries with Skip
305
+
306
+ Throw `Skip` inside a Prerender or Static handler to skip an individual entry
307
+ without failing the build:
308
+
309
+ ```typescript
310
+ import { Prerender, Skip } from "@rangojs/router";
311
+
312
+ export const BlogPost = Prerender(
313
+ async () => [{ slug: "published" }, { slug: "draft" }],
314
+ async (ctx) => {
315
+ if (ctx.params.slug === "draft") {
316
+ throw new Skip("Draft articles are not pre-rendered");
317
+ }
318
+ return <PostPage slug={ctx.params.slug} />;
319
+ },
320
+ );
321
+
322
+ // Wrap with Passthrough to serve skipped params live at runtime
323
+ export const BlogPost = Passthrough(BlogPostDef, async (ctx) => {
324
+ if (ctx.params.slug === "draft") {
325
+ throw new Skip("Draft articles are not pre-rendered");
326
+ }
327
+ return <PostPage slug={ctx.params.slug} />;
328
+ });
329
+ ```
330
+
331
+ Skipped entries are excluded from the build output. With `Passthrough()`,
332
+ the live handler serves skipped params at request time.
333
+
334
+ `Skip` also works in `Static` handlers:
335
+
336
+ ```typescript
337
+ import { Static, Skip } from "@rangojs/router";
338
+
339
+ export const TocSidebar = Static(() => {
340
+ throw new Skip("Not ready for pre-rendering");
341
+ });
342
+ ```
343
+
344
+ ### Error behavior at build time
345
+
346
+ | Handler outcome | Effect |
347
+ | --------------------------- | ----------------------------------------------------- |
348
+ | JSX / `null` | Normal prerender entry, log OK |
349
+ | `return ctx.passthrough()` | Skip entry, log PASS, continue (Passthrough routes) |
350
+ | `throw new Skip("reason")` | Skip entry, log SKIP, continue with remaining entries |
351
+ | `throw new Error("reason")` | Log FAIL, stop ALL pre-rendering, fail the build |
352
+
353
+ Both error types propagate to the router's `onError` callback with phase
354
+ `"prerender"` or `"static"`.
355
+
356
+ ### Build logs
357
+
358
+ The build produces per-URL timing logs:
359
+
360
+ ```
361
+ [rango] Pre-rendering 12 URL(s) (concurrency: 4)...
362
+ [rango] OK /articles/hello (42ms)
363
+ [rango] PASS /articles/remote-only (5ms) - live fallback
364
+ [rango] SKIP /articles/draft-post (3ms) - Article is a draft
365
+ [rango] Pre-render complete: 11 done, 1 skipped (1204ms total)
366
+
367
+ [rango] Rendering 3 static handler(s)...
368
+ [rango] OK DocsLayout (28ms)
369
+ [rango] SKIP TocSidebar (1ms) - Not ready
370
+ [rango] Static render complete: 2 done, 1 skipped (120ms total)
371
+ ```
372
+
373
+ A `FAIL` line is logged per-URL when a handler throws a non-Skip error. The
374
+ error is re-thrown immediately, so no summary line is printed — the build
375
+ stops at the first failure.
376
+
377
+ ### Dev mode behavior
378
+
379
+ **Node.js dev server** — `Skip` behaves like a regular runtime error because
380
+ the handler runs live with `ctx.build === false`.
381
+
382
+ **Non-Node runtimes using `/__rsc_prerender`** — `Skip` participates in the
383
+ on-demand prerender path, so build-style skip logic does run for that request.
384
+ The dev prerender endpoint treats it like a prerender miss and the request
385
+ falls back according to normal dev/runtime behavior.
386
+
387
+ ## Per-Param Passthrough with ctx.passthrough()
388
+
389
+ On routes wrapped with `Passthrough()`, the build handler can return
390
+ `ctx.passthrough()` to skip writing a local prerender artifact for a specific
391
+ param set. At runtime, the missing entry falls through to the live handler.
392
+
393
+ ```typescript
394
+ export const BlogPostDef = Prerender(
395
+ async () => [{ slug: "a" }, { slug: "b" }, { slug: "c" }],
396
+ async (ctx) => {
397
+ const post = await getPost(ctx.params.slug);
398
+ if (!post) return ctx.passthrough();
399
+ return <article>{post.content}</article>;
400
+ },
401
+ );
402
+
403
+ export const BlogPost = Passthrough(BlogPostDef, async (ctx) => {
404
+ const post = await getPost(ctx.params.slug);
405
+ return <article>{post.content}</article>;
406
+ });
407
+ ```
408
+
409
+ ### Semantics
410
+
411
+ - JSX or `null` from the build handler produces a normal prerender entry.
412
+ - `ctx.passthrough()` returns a sentinel that signals "no local artifact".
413
+ The build skips the manifest entry for that param set.
414
+ - `ctx.passthrough()` on a route not wrapped with `Passthrough()` throws.
415
+ - `ctx.passthrough()` at runtime (`ctx.build === false`) also throws.
416
+ It is a build-time-only control flow.
417
+ - `getParams()` still enumerates the param set; the build handler decides
418
+ per-param whether to produce an artifact or defer to the live handler.
419
+
420
+ ### Difference from Skip
421
+
422
+ | Mechanism | Effect on build | Runtime behavior |
423
+ | ------------------- | ---------------------- | ------------------------------------------------------ |
424
+ | `throw new Skip()` | Skips entry, logs SKIP | No artifact, no live fallback unless Passthrough route |
425
+ | `ctx.passthrough()` | Skips entry, logs PASS | Always defers to live handler (requires Passthrough) |
426
+
427
+ Use `ctx.passthrough()` when you want the live handler to run at request time
428
+ for specific params. Use `Skip` when you want to exclude params entirely.
429
+
430
+ ### Use case: Remote storage
431
+
432
+ `ctx.passthrough()` enables a pattern where build-time data is stored in a
433
+ remote KV store instead of the local prerender manifest. The build handler
434
+ pre-computes data during `getParams`, pushes it to KV, then calls
435
+ `ctx.passthrough()` so the local build skips the artifact. At runtime,
436
+ the Passthrough live handler reads from KV:
437
+
438
+ ```typescript
439
+ export const ProductDef = Prerender(
440
+ async () => {
441
+ const products = await db.getFeaturedProducts();
442
+ for (const p of products) {
443
+ await kv.put(`product:${p.id}`, await renderProduct(p));
444
+ }
445
+ return products.map(p => ({ id: p.id }));
446
+ },
447
+ async (ctx) => {
448
+ // At build time: skip local artifact, data is in KV
449
+ return ctx.passthrough();
450
+ },
451
+ );
452
+
453
+ export const Product = Passthrough(ProductDef, async (ctx) => {
454
+ // At runtime: read from KV, fall back to DB
455
+ const cached = await kv.get(`product:${ctx.params.id}`);
456
+ if (cached) return cached;
457
+ return <Product data={await ctx.env.DB.getProduct(ctx.params.id)} />;
458
+ });
459
+ ```
460
+
461
+ ### Build logs
462
+
463
+ Passthrough entries are logged distinctly:
464
+
465
+ ```
466
+ [rango] OK /blog/a (42ms)
467
+ [rango] PASS /blog/b (3ms) - live fallback
468
+ [rango] OK /blog/c (38ms)
469
+ ```
470
+
191
471
  ## Edge Cases and Constraints
192
472
 
193
473
  ### Loaders are always live
474
+
194
475
  Loaders on pre-rendered routes run at request time. They are bundled normally
195
476
  and need `cache()` for caching. Do not use build-only APIs in loaders.
196
477
 
197
478
  ### Handle data is frozen
479
+
198
480
  Handle values pushed via `ctx.use()` during pre-rendering are baked into the
199
481
  Flight payload. They do not update at request time.
200
482
 
201
483
  ### Server actions work normally
484
+
202
485
  Actions do not re-render the B segment. The pre-rendered handler output stays
203
- frozen. Loaders are live and can be revalidated by actions. With `passthrough: true`
204
- and `revalidate()`, the handler itself can re-render live.
486
+ frozen. Loaders are live and can be revalidated by actions. With `Passthrough()`
487
+ and `revalidate()`, the live handler can re-render.
205
488
 
206
489
  ### Empty getParams
490
+
207
491
  If `getParams` returns an empty array, no Flight payloads are written. No error.
208
492
 
209
493
  ### Route name is required
210
- Routes using `createPrerenderHandler` must have a `name` in path options.
494
+
495
+ Routes using `Prerender` must have a `name` in path options.
211
496
  The name is used as the storage key for Flight payloads.
212
497
 
213
- ### No revalidate without passthrough
214
- Using `revalidate()` with `passthrough: false` produces a build-time warning.
498
+ ### No revalidate without Passthrough
499
+
500
+ Using `revalidate()` without `Passthrough()` produces a build-time warning.
215
501
  The handler is evicted -- there is nothing to re-render.
216
502
 
217
- ### loading() is ignored without passthrough
503
+ ### loading() is ignored without Passthrough
504
+
218
505
  Pre-rendered segments are fully resolved at build time and never suspend.
219
- With `passthrough: true`, `loading()` works for live fallback renders.
506
+ With `Passthrough()`, `loading()` works for live fallback renders.
220
507
 
221
508
  ## Complete Example
222
509
 
223
510
  ```typescript
224
511
  // pages/guides-handler.tsx
225
- import { createPrerenderHandler } from "@rangojs/router";
512
+ import { Prerender, Passthrough } from "@rangojs/router";
226
513
  import { Link } from "@rangojs/router/client";
227
514
  import { href } from "../router.js";
228
515
 
@@ -231,7 +518,7 @@ const knownGuides: Record<string, string> = {
231
518
  caching: "Caching Guide",
232
519
  };
233
520
 
234
- export const GuidesDetail = createPrerenderHandler<{ slug: string }>(
521
+ export const GuidesDetailDef = Prerender<{ slug: string }>(
235
522
  async () => Object.keys(knownGuides).map((slug) => ({ slug })),
236
523
  async (ctx) => {
237
524
  const title = knownGuides[ctx.params.slug] ?? `Guide: ${ctx.params.slug}`;
@@ -247,9 +534,23 @@ export const GuidesDetail = createPrerenderHandler<{ slug: string }>(
247
534
  </div>
248
535
  );
249
536
  },
250
- { passthrough: true },
251
537
  );
252
538
 
539
+ export const GuidesDetail = Passthrough(GuidesDetailDef, async (ctx) => {
540
+ const title = knownGuides[ctx.params.slug] ?? `Guide: ${ctx.params.slug}`;
541
+ return (
542
+ <div>
543
+ <h1>{title}</h1>
544
+ <p>Slug: {ctx.params.slug}</p>
545
+ <nav>
546
+ <Link to={href("guides.detail", { slug: "routing" })}>Routing</Link>
547
+ {" | "}
548
+ <Link to={href("guides.detail", { slug: "dynamic-test" })}>Dynamic</Link>
549
+ </nav>
550
+ </div>
551
+ );
552
+ });
553
+
253
554
  // pages/guides.tsx
254
555
  import { urls } from "@rangojs/router";
255
556
  import { GuidesDetail } from "./guides-handler.js";
@@ -259,23 +560,107 @@ export const guidesPatterns = urls(({ path }) => [
259
560
  ]);
260
561
 
261
562
  // urls.tsx
262
- import { urls, include } from "@rangojs/router";
563
+ import { urls } from "@rangojs/router";
263
564
  import { guidesPatterns } from "./pages/guides.js";
264
565
 
265
- export const urlpatterns = urls(({ path }) => [
566
+ export const urlpatterns = urls(({ path, include }) => [
266
567
  path("/", HomePage, { name: "home" }),
267
568
  include("/guides", guidesPatterns, { name: "guides" }),
268
569
  ]);
269
570
  ```
270
571
 
572
+ ## Interaction with intercept()
573
+
574
+ When a pre-rendered route is also the target of an `intercept()`, the build system
575
+ resolves the intercept handler at build time and stores a combined entry (main
576
+ segments + intercept segments) under an `/i`-suffixed key alongside the main entry:
577
+
578
+ ```
579
+ prerender store keys:
580
+ "blog.post/a1b2c3" -> main segments (full page)
581
+ "blog.post/a1b2c3/i" -> main segments + intercept segments (modal variant)
582
+ ```
583
+
584
+ At runtime, the cache-lookup middleware checks `ctx.isIntercept`:
585
+
586
+ - **Intercept navigation**: looks up `paramHash/i` first. If found, yields
587
+ the combined entry. `handleCacheHitIntercept()` extracts intercept segments
588
+ (filtered by `namespace?.startsWith("intercept:")`) and sets up slots.
589
+ - **Direct navigation**: looks up `paramHash` (no suffix). Standard prerender path.
590
+ - **Intercept miss (no `/i` entry)**: falls through to the normal pipeline so
591
+ intercept-resolution middleware runs live. This handles `when()` conditions
592
+ that prevented pre-rendering.
593
+
594
+ The `when()` callback receives an `InterceptSelectorContext` with `from.pathname`
595
+ which is unknown at build time. All intercepts are pre-rendered unconditionally;
596
+ `when()` is evaluated at runtime by the intercept-resolution middleware.
597
+
598
+ ### Example: Pre-rendered route with intercept
599
+
600
+ ```typescript
601
+ // Route handler is pre-rendered at build time
602
+ export const ProductDetail = Prerender(
603
+ async () => [{ slug: "shoes" }, { slug: "jacket" }],
604
+ async (ctx) => <ProductPage slug={ctx.params.slug} />,
605
+ );
606
+
607
+ // urls.tsx
608
+ layout(ShopLayout, () => [
609
+ path("/:slug", ProductDetail, { name: "detail" }, () => [
610
+ loader(ProductLoader),
611
+ ]),
612
+
613
+ // Intercept detail from shop index into a modal.
614
+ // At build time, this is resolved and stored under the /i key.
615
+ intercept("@modal", ".detail", <ProductModal />, () => [
616
+ when(({ from }) => from.pathname === "/shop"),
617
+ loader(ProductLoader),
618
+ ]),
619
+ ])
620
+ ```
621
+
622
+ Both `ProductPage` (main) and `ProductModal` (intercept) are frozen at build time.
623
+ Loaders run fresh at request time for both variants.
624
+
271
625
  ## Trie Flags
272
626
 
273
627
  Pre-rendered routes set flags on the route trie leaf at build time:
274
628
 
275
629
  - `pr: true` -- route has pre-rendered B segment data
276
- - `pt: true` -- passthrough mode (handler available for live fallback)
630
+ - `pt: true` -- route wrapped with `Passthrough()` (live handler available)
277
631
 
278
632
  At runtime, the cache-lookup middleware uses these flags:
633
+
279
634
  - `pr + hit` -- serve pre-rendered Flight payload
280
- - `pr + pt + miss` -- fall through to live handler (handler kept in bundle)
635
+ - `pr + pt + miss` -- fall through to Passthrough live handler
281
636
  - `pr + miss` (no pt) -- fall through (handler stubbed, no live render)
637
+
638
+ ## Contributor Checklist
639
+
640
+ Before changing prerender behavior, run these tests.
641
+
642
+ ### Tests to run
643
+
644
+ ```bash
645
+ # Core prerender e2e (Passthrough, eviction, loaders, sub-use, intercept)
646
+ pnpm --filter @rangojs/router exec playwright test prerender
647
+
648
+ # Prerender-specific unit test
649
+ pnpm --filter @rangojs/router run test:unit -- prerender-passthrough
650
+
651
+ # Semantic matrix (prerender rows cover intercept + ctx propagation)
652
+ pnpm --filter @rangojs/router exec playwright test semantic-matrix
653
+
654
+ # Handler-first (ctx.set/get visibility with prerender handlers)
655
+ pnpm --filter @rangojs/router exec playwright test handler-first
656
+ ```
657
+
658
+ ### Dev-only vs build-parity
659
+
660
+ - Prerender e2e tests run against a real production build by default (the
661
+ fixture builds the test app). Dev-mode prerender behavior is tested via
662
+ `/__rsc_prerender` endpoint tests and node.js dev-server fallback.
663
+ - Log-based assertions (build output lines, debug cache logs) are inherently
664
+ dev/build-only and do not need a production counterpart.
665
+ - Behavioral assertions (rendered content, loader freshness, Passthrough
666
+ fallback, intercept variant selection) must work in the production build.