@rangojs/router 0.0.0-experimental.9 → 0.0.0-experimental.b9cb8739

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