@rangojs/router 0.0.0-experimental.141 → 0.0.0-experimental.143

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 (918) hide show
  1. package/AGENTS.md +6 -10
  2. package/README.md +17 -0
  3. package/dist/__internal.d.ts +83 -0
  4. package/dist/__internal.d.ts.map +1 -0
  5. package/dist/__internal.js +19 -0
  6. package/dist/__internal.js.map +1 -0
  7. package/dist/__mocks__/version.d.ts +7 -0
  8. package/dist/__mocks__/version.d.ts.map +1 -0
  9. package/dist/__mocks__/version.js +7 -0
  10. package/dist/__mocks__/version.js.map +1 -0
  11. package/dist/__tests__/client-href.test.d.ts +2 -0
  12. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  13. package/dist/__tests__/client-href.test.js +74 -0
  14. package/dist/__tests__/client-href.test.js.map +1 -0
  15. package/dist/__tests__/component-utils.test.d.ts +2 -0
  16. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  17. package/dist/__tests__/component-utils.test.js +51 -0
  18. package/dist/__tests__/component-utils.test.js.map +1 -0
  19. package/dist/__tests__/event-controller.test.d.ts +2 -0
  20. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  21. package/dist/__tests__/event-controller.test.js +538 -0
  22. package/dist/__tests__/event-controller.test.js.map +1 -0
  23. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  24. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  25. package/dist/__tests__/helpers/route-tree.js +374 -0
  26. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  27. package/dist/__tests__/match-result.test.d.ts +2 -0
  28. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  29. package/dist/__tests__/match-result.test.js +154 -0
  30. package/dist/__tests__/match-result.test.js.map +1 -0
  31. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  32. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  33. package/dist/__tests__/navigation-store.test.js +440 -0
  34. package/dist/__tests__/navigation-store.test.js.map +1 -0
  35. package/dist/__tests__/partial-update.test.d.ts +2 -0
  36. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  37. package/dist/__tests__/partial-update.test.js +1009 -0
  38. package/dist/__tests__/partial-update.test.js.map +1 -0
  39. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  40. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  41. package/dist/__tests__/reverse-types.test.js +656 -0
  42. package/dist/__tests__/reverse-types.test.js.map +1 -0
  43. package/dist/__tests__/route-definition.test.d.ts +2 -0
  44. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  45. package/dist/__tests__/route-definition.test.js +55 -0
  46. package/dist/__tests__/route-definition.test.js.map +1 -0
  47. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  48. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  49. package/dist/__tests__/router-helpers.test.js +377 -0
  50. package/dist/__tests__/router-helpers.test.js.map +1 -0
  51. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  52. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  53. package/dist/__tests__/router-integration-2.test.js +426 -0
  54. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  55. package/dist/__tests__/router-integration.test.d.ts +2 -0
  56. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  57. package/dist/__tests__/router-integration.test.js +1051 -0
  58. package/dist/__tests__/router-integration.test.js.map +1 -0
  59. package/dist/__tests__/search-params.test.d.ts +5 -0
  60. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  61. package/dist/__tests__/search-params.test.js +306 -0
  62. package/dist/__tests__/search-params.test.js.map +1 -0
  63. package/dist/__tests__/segment-system.test.d.ts +2 -0
  64. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  65. package/dist/__tests__/segment-system.test.js +627 -0
  66. package/dist/__tests__/segment-system.test.js.map +1 -0
  67. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  68. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  69. package/dist/__tests__/static-handler-types.test.js +63 -0
  70. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  71. package/dist/__tests__/urls.test.d.ts +2 -0
  72. package/dist/__tests__/urls.test.d.ts.map +1 -0
  73. package/dist/__tests__/urls.test.js +421 -0
  74. package/dist/__tests__/urls.test.js.map +1 -0
  75. package/dist/__tests__/use-mount.test.d.ts +2 -0
  76. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  77. package/dist/__tests__/use-mount.test.js +35 -0
  78. package/dist/__tests__/use-mount.test.js.map +1 -0
  79. package/dist/bin/rango.d.ts +2 -0
  80. package/dist/bin/rango.d.ts.map +1 -0
  81. package/dist/bin/rango.js.map +1 -0
  82. package/dist/browser/event-controller.d.ts +191 -0
  83. package/dist/browser/event-controller.d.ts.map +1 -0
  84. package/dist/browser/event-controller.js +559 -0
  85. package/dist/browser/event-controller.js.map +1 -0
  86. package/dist/browser/index.d.ts +2 -0
  87. package/dist/browser/index.d.ts.map +1 -0
  88. package/dist/browser/index.js +14 -0
  89. package/dist/browser/index.js.map +1 -0
  90. package/dist/browser/link-interceptor.d.ts +38 -0
  91. package/dist/browser/link-interceptor.d.ts.map +1 -0
  92. package/dist/browser/link-interceptor.js +99 -0
  93. package/dist/browser/link-interceptor.js.map +1 -0
  94. package/dist/browser/logging.d.ts +10 -0
  95. package/dist/browser/logging.d.ts.map +1 -0
  96. package/dist/browser/logging.js +29 -0
  97. package/dist/browser/logging.js.map +1 -0
  98. package/dist/browser/lru-cache.d.ts +17 -0
  99. package/dist/browser/lru-cache.d.ts.map +1 -0
  100. package/dist/browser/lru-cache.js +50 -0
  101. package/dist/browser/lru-cache.js.map +1 -0
  102. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  103. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  104. package/dist/browser/merge-segment-loaders.js +102 -0
  105. package/dist/browser/merge-segment-loaders.js.map +1 -0
  106. package/dist/browser/navigation-bridge.d.ts +102 -0
  107. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  108. package/dist/browser/navigation-bridge.js +708 -0
  109. package/dist/browser/navigation-bridge.js.map +1 -0
  110. package/dist/browser/navigation-client.d.ts +25 -0
  111. package/dist/browser/navigation-client.d.ts.map +1 -0
  112. package/dist/browser/navigation-client.js +157 -0
  113. package/dist/browser/navigation-client.js.map +1 -0
  114. package/dist/browser/navigation-store.d.ts +101 -0
  115. package/dist/browser/navigation-store.d.ts.map +1 -0
  116. package/dist/browser/navigation-store.js +625 -0
  117. package/dist/browser/navigation-store.js.map +1 -0
  118. package/dist/browser/partial-update.d.ts +75 -0
  119. package/dist/browser/partial-update.d.ts.map +1 -0
  120. package/dist/browser/partial-update.js +426 -0
  121. package/dist/browser/partial-update.js.map +1 -0
  122. package/dist/browser/react/Link.d.ts +86 -0
  123. package/dist/browser/react/Link.d.ts.map +1 -0
  124. package/dist/browser/react/Link.js +128 -0
  125. package/dist/browser/react/Link.js.map +1 -0
  126. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  127. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  128. package/dist/browser/react/NavigationProvider.js +216 -0
  129. package/dist/browser/react/NavigationProvider.js.map +1 -0
  130. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  132. package/dist/browser/react/ScrollRestoration.js +57 -0
  133. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  134. package/dist/browser/react/context.d.ts +46 -0
  135. package/dist/browser/react/context.d.ts.map +1 -0
  136. package/dist/browser/react/context.js +10 -0
  137. package/dist/browser/react/context.js.map +1 -0
  138. package/dist/browser/react/index.d.ts +11 -0
  139. package/dist/browser/react/index.d.ts.map +1 -0
  140. package/dist/browser/react/index.js +22 -0
  141. package/dist/browser/react/index.js.map +1 -0
  142. package/dist/browser/react/location-state-shared.d.ts +63 -0
  143. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  144. package/dist/browser/react/location-state-shared.js +81 -0
  145. package/dist/browser/react/location-state-shared.js.map +1 -0
  146. package/dist/browser/react/location-state.d.ts +23 -0
  147. package/dist/browser/react/location-state.d.ts.map +1 -0
  148. package/dist/browser/react/location-state.js +29 -0
  149. package/dist/browser/react/location-state.js.map +1 -0
  150. package/dist/browser/react/mount-context.d.ts +24 -0
  151. package/dist/browser/react/mount-context.d.ts.map +1 -0
  152. package/dist/browser/react/mount-context.js +24 -0
  153. package/dist/browser/react/mount-context.js.map +1 -0
  154. package/dist/browser/react/use-action.d.ts +64 -0
  155. package/dist/browser/react/use-action.d.ts.map +1 -0
  156. package/dist/browser/react/use-action.js +134 -0
  157. package/dist/browser/react/use-action.js.map +1 -0
  158. package/dist/browser/react/use-client-cache.d.ts +41 -0
  159. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  160. package/dist/browser/react/use-client-cache.js +39 -0
  161. package/dist/browser/react/use-client-cache.js.map +1 -0
  162. package/dist/browser/react/use-handle.d.ts +31 -0
  163. package/dist/browser/react/use-handle.d.ts.map +1 -0
  164. package/dist/browser/react/use-handle.js +144 -0
  165. package/dist/browser/react/use-handle.js.map +1 -0
  166. package/dist/browser/react/use-href.d.ts +33 -0
  167. package/dist/browser/react/use-href.d.ts.map +1 -0
  168. package/dist/browser/react/use-href.js +39 -0
  169. package/dist/browser/react/use-href.js.map +1 -0
  170. package/dist/browser/react/use-link-status.d.ts +37 -0
  171. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  172. package/dist/browser/react/use-link-status.js +99 -0
  173. package/dist/browser/react/use-link-status.js.map +1 -0
  174. package/dist/browser/react/use-mount.d.ts +25 -0
  175. package/dist/browser/react/use-mount.d.ts.map +1 -0
  176. package/dist/browser/react/use-mount.js +30 -0
  177. package/dist/browser/react/use-mount.js.map +1 -0
  178. package/dist/browser/react/use-navigation.d.ts +27 -0
  179. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  180. package/dist/browser/react/use-navigation.js +87 -0
  181. package/dist/browser/react/use-navigation.js.map +1 -0
  182. package/dist/browser/react/use-segments.d.ts +38 -0
  183. package/dist/browser/react/use-segments.d.ts.map +1 -0
  184. package/dist/browser/react/use-segments.js +130 -0
  185. package/dist/browser/react/use-segments.js.map +1 -0
  186. package/dist/browser/request-controller.d.ts +26 -0
  187. package/dist/browser/request-controller.d.ts.map +1 -0
  188. package/dist/browser/request-controller.js +147 -0
  189. package/dist/browser/request-controller.js.map +1 -0
  190. package/dist/browser/rsc-router.d.ts +129 -0
  191. package/dist/browser/rsc-router.d.ts.map +1 -0
  192. package/dist/browser/rsc-router.js +195 -0
  193. package/dist/browser/rsc-router.js.map +1 -0
  194. package/dist/browser/scroll-restoration.d.ts +93 -0
  195. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  196. package/dist/browser/scroll-restoration.js +321 -0
  197. package/dist/browser/scroll-restoration.js.map +1 -0
  198. package/dist/browser/segment-structure-assert.d.ts +17 -0
  199. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  200. package/dist/browser/segment-structure-assert.js +59 -0
  201. package/dist/browser/segment-structure-assert.js.map +1 -0
  202. package/dist/browser/server-action-bridge.d.ts +26 -0
  203. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  204. package/dist/browser/server-action-bridge.js +668 -0
  205. package/dist/browser/server-action-bridge.js.map +1 -0
  206. package/dist/browser/shallow.d.ts +12 -0
  207. package/dist/browser/shallow.d.ts.map +1 -0
  208. package/dist/browser/shallow.js +34 -0
  209. package/dist/browser/shallow.js.map +1 -0
  210. package/dist/browser/types.d.ts +369 -0
  211. package/dist/browser/types.d.ts.map +1 -0
  212. package/dist/browser/types.js +2 -0
  213. package/dist/browser/types.js.map +1 -0
  214. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  216. package/dist/build/__tests__/generate-cli.test.js +237 -0
  217. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  218. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  220. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  221. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  222. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  224. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  225. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  226. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  228. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  230. package/dist/build/generate-manifest.d.ts +81 -0
  231. package/dist/build/generate-manifest.d.ts.map +1 -0
  232. package/dist/build/generate-manifest.js +276 -0
  233. package/dist/build/generate-manifest.js.map +1 -0
  234. package/dist/build/generate-route-types.d.ts +115 -0
  235. package/dist/build/generate-route-types.d.ts.map +1 -0
  236. package/dist/build/generate-route-types.js +740 -0
  237. package/dist/build/generate-route-types.js.map +1 -0
  238. package/dist/build/index.d.ts +21 -0
  239. package/dist/build/index.d.ts.map +1 -0
  240. package/dist/build/index.js +21 -0
  241. package/dist/build/index.js.map +1 -0
  242. package/dist/build/route-trie.d.ts +71 -0
  243. package/dist/build/route-trie.d.ts.map +1 -0
  244. package/dist/build/route-trie.js +175 -0
  245. package/dist/build/route-trie.js.map +1 -0
  246. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  248. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  249. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  250. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  252. package/dist/cache/__tests__/document-cache.test.js +345 -0
  253. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  254. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  258. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  260. package/dist/cache/__tests__/memory-store.test.js +367 -0
  261. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  262. package/dist/cache/cache-scope.d.ts +102 -0
  263. package/dist/cache/cache-scope.d.ts.map +1 -0
  264. package/dist/cache/cache-scope.js +440 -0
  265. package/dist/cache/cache-scope.js.map +1 -0
  266. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  270. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  272. package/dist/cache/cf/cf-cache-store.js +242 -0
  273. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  274. package/dist/cache/cf/index.d.ts +14 -0
  275. package/dist/cache/cf/index.d.ts.map +1 -0
  276. package/dist/cache/cf/index.js +17 -0
  277. package/dist/cache/cf/index.js.map +1 -0
  278. package/dist/cache/document-cache.d.ts +64 -0
  279. package/dist/cache/document-cache.d.ts.map +1 -0
  280. package/dist/cache/document-cache.js +228 -0
  281. package/dist/cache/document-cache.js.map +1 -0
  282. package/dist/cache/index.d.ts +19 -0
  283. package/dist/cache/index.d.ts.map +1 -0
  284. package/dist/cache/index.js +21 -0
  285. package/dist/cache/index.js.map +1 -0
  286. package/dist/cache/memory-segment-store.d.ts +110 -0
  287. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  288. package/dist/cache/memory-segment-store.js +117 -0
  289. package/dist/cache/memory-segment-store.js.map +1 -0
  290. package/dist/cache/memory-store.d.ts +41 -0
  291. package/dist/cache/memory-store.d.ts.map +1 -0
  292. package/dist/cache/memory-store.js +191 -0
  293. package/dist/cache/memory-store.js.map +1 -0
  294. package/dist/cache/types.d.ts +317 -0
  295. package/dist/cache/types.d.ts.map +1 -0
  296. package/dist/cache/types.js +12 -0
  297. package/dist/cache/types.js.map +1 -0
  298. package/dist/client.d.ts +248 -0
  299. package/dist/client.d.ts.map +1 -0
  300. package/dist/client.js +367 -0
  301. package/dist/client.js.map +1 -0
  302. package/dist/client.rsc.d.ts +26 -0
  303. package/dist/client.rsc.d.ts.map +1 -0
  304. package/dist/client.rsc.js +46 -0
  305. package/dist/client.rsc.js.map +1 -0
  306. package/dist/component-utils.d.ts +36 -0
  307. package/dist/component-utils.d.ts.map +1 -0
  308. package/dist/component-utils.js +61 -0
  309. package/dist/component-utils.js.map +1 -0
  310. package/dist/components/DefaultDocument.d.ts +13 -0
  311. package/dist/components/DefaultDocument.d.ts.map +1 -0
  312. package/dist/components/DefaultDocument.js +15 -0
  313. package/dist/components/DefaultDocument.js.map +1 -0
  314. package/dist/debug.d.ts +58 -0
  315. package/dist/debug.d.ts.map +1 -0
  316. package/dist/debug.js +157 -0
  317. package/dist/debug.js.map +1 -0
  318. package/dist/default-error-boundary.d.ts +11 -0
  319. package/dist/default-error-boundary.d.ts.map +1 -0
  320. package/dist/default-error-boundary.js +45 -0
  321. package/dist/default-error-boundary.js.map +1 -0
  322. package/dist/deps/browser.d.ts +2 -0
  323. package/dist/deps/browser.d.ts.map +1 -0
  324. package/dist/deps/browser.js +3 -0
  325. package/dist/deps/browser.js.map +1 -0
  326. package/dist/deps/html-stream-client.d.ts +2 -0
  327. package/dist/deps/html-stream-client.d.ts.map +1 -0
  328. package/dist/deps/html-stream-client.js +3 -0
  329. package/dist/deps/html-stream-client.js.map +1 -0
  330. package/dist/deps/html-stream-server.d.ts +2 -0
  331. package/dist/deps/html-stream-server.d.ts.map +1 -0
  332. package/dist/deps/html-stream-server.js +3 -0
  333. package/dist/deps/html-stream-server.js.map +1 -0
  334. package/dist/deps/rsc.d.ts +2 -0
  335. package/dist/deps/rsc.d.ts.map +1 -0
  336. package/dist/deps/rsc.js +4 -0
  337. package/dist/deps/rsc.js.map +1 -0
  338. package/dist/deps/ssr.d.ts +2 -0
  339. package/dist/deps/ssr.d.ts.map +1 -0
  340. package/dist/deps/ssr.js +3 -0
  341. package/dist/deps/ssr.js.map +1 -0
  342. package/dist/errors.d.ts +174 -0
  343. package/dist/errors.d.ts.map +1 -0
  344. package/dist/errors.js +241 -0
  345. package/dist/errors.js.map +1 -0
  346. package/dist/handle.d.ts +78 -0
  347. package/dist/handle.d.ts.map +1 -0
  348. package/dist/handle.js +82 -0
  349. package/dist/handle.js.map +1 -0
  350. package/dist/handles/MetaTags.d.ts +14 -0
  351. package/dist/handles/MetaTags.d.ts.map +1 -0
  352. package/dist/handles/MetaTags.js +136 -0
  353. package/dist/handles/MetaTags.js.map +1 -0
  354. package/dist/handles/index.d.ts +6 -0
  355. package/dist/handles/index.d.ts.map +1 -0
  356. package/dist/handles/index.js +6 -0
  357. package/dist/handles/index.js.map +1 -0
  358. package/dist/handles/meta.d.ts +39 -0
  359. package/dist/handles/meta.d.ts.map +1 -0
  360. package/dist/handles/meta.js +202 -0
  361. package/dist/handles/meta.js.map +1 -0
  362. package/dist/host/__tests__/errors.test.d.ts +2 -0
  363. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  364. package/dist/host/__tests__/errors.test.js +76 -0
  365. package/dist/host/__tests__/errors.test.js.map +1 -0
  366. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  370. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  372. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  374. package/dist/host/__tests__/router.test.d.ts +2 -0
  375. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  376. package/dist/host/__tests__/router.test.js +241 -0
  377. package/dist/host/__tests__/router.test.js.map +1 -0
  378. package/dist/host/__tests__/testing.test.d.ts +2 -0
  379. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  380. package/dist/host/__tests__/testing.test.js +64 -0
  381. package/dist/host/__tests__/testing.test.js.map +1 -0
  382. package/dist/host/__tests__/utils.test.d.ts +2 -0
  383. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  384. package/dist/host/__tests__/utils.test.js +29 -0
  385. package/dist/host/__tests__/utils.test.js.map +1 -0
  386. package/dist/host/cookie-handler.d.ts +34 -0
  387. package/dist/host/cookie-handler.d.ts.map +1 -0
  388. package/dist/host/cookie-handler.js +124 -0
  389. package/dist/host/cookie-handler.js.map +1 -0
  390. package/dist/host/errors.d.ts +56 -0
  391. package/dist/host/errors.d.ts.map +1 -0
  392. package/dist/host/errors.js +79 -0
  393. package/dist/host/errors.js.map +1 -0
  394. package/dist/host/index.d.ts +29 -0
  395. package/dist/host/index.d.ts.map +1 -0
  396. package/dist/host/index.js +32 -0
  397. package/dist/host/index.js.map +1 -0
  398. package/dist/host/pattern-matcher.d.ts +36 -0
  399. package/dist/host/pattern-matcher.d.ts.map +1 -0
  400. package/dist/host/pattern-matcher.js +172 -0
  401. package/dist/host/pattern-matcher.js.map +1 -0
  402. package/dist/host/router.d.ts +26 -0
  403. package/dist/host/router.d.ts.map +1 -0
  404. package/dist/host/router.js +218 -0
  405. package/dist/host/router.js.map +1 -0
  406. package/dist/host/testing.d.ts +36 -0
  407. package/dist/host/testing.d.ts.map +1 -0
  408. package/dist/host/testing.js +55 -0
  409. package/dist/host/testing.js.map +1 -0
  410. package/dist/host/types.d.ts +115 -0
  411. package/dist/host/types.d.ts.map +1 -0
  412. package/dist/host/types.js +7 -0
  413. package/dist/host/types.js.map +1 -0
  414. package/dist/host/utils.d.ts +21 -0
  415. package/dist/host/utils.d.ts.map +1 -0
  416. package/dist/host/utils.js +23 -0
  417. package/dist/host/utils.js.map +1 -0
  418. package/dist/href-client.d.ts +131 -0
  419. package/dist/href-client.d.ts.map +1 -0
  420. package/dist/href-client.js +64 -0
  421. package/dist/href-client.js.map +1 -0
  422. package/dist/href-context.d.ts +29 -0
  423. package/dist/href-context.d.ts.map +1 -0
  424. package/dist/href-context.js +21 -0
  425. package/dist/href-context.js.map +1 -0
  426. package/dist/index.d.ts +73 -0
  427. package/dist/index.d.ts.map +1 -0
  428. package/dist/index.js +91 -0
  429. package/dist/index.js.map +1 -0
  430. package/dist/index.rsc.d.ts +32 -0
  431. package/dist/index.rsc.d.ts.map +1 -0
  432. package/dist/index.rsc.js +40 -0
  433. package/dist/index.rsc.js.map +1 -0
  434. package/dist/internal-debug.d.ts +2 -0
  435. package/dist/internal-debug.d.ts.map +1 -0
  436. package/dist/internal-debug.js +5 -0
  437. package/dist/internal-debug.js.map +1 -0
  438. package/dist/loader.d.ts +14 -0
  439. package/dist/loader.d.ts.map +1 -0
  440. package/dist/loader.js +20 -0
  441. package/dist/loader.js.map +1 -0
  442. package/dist/loader.rsc.d.ts +19 -0
  443. package/dist/loader.rsc.d.ts.map +1 -0
  444. package/dist/loader.rsc.js +99 -0
  445. package/dist/loader.rsc.js.map +1 -0
  446. package/dist/network-error-thrower.d.ts +17 -0
  447. package/dist/network-error-thrower.d.ts.map +1 -0
  448. package/dist/network-error-thrower.js +14 -0
  449. package/dist/network-error-thrower.js.map +1 -0
  450. package/dist/outlet-context.d.ts +13 -0
  451. package/dist/outlet-context.d.ts.map +1 -0
  452. package/dist/outlet-context.js +3 -0
  453. package/dist/outlet-context.js.map +1 -0
  454. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  456. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  457. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  458. package/dist/prerender/param-hash.d.ts +16 -0
  459. package/dist/prerender/param-hash.d.ts.map +1 -0
  460. package/dist/prerender/param-hash.js +36 -0
  461. package/dist/prerender/param-hash.js.map +1 -0
  462. package/dist/prerender/store.d.ts +38 -0
  463. package/dist/prerender/store.d.ts.map +1 -0
  464. package/dist/prerender/store.js +61 -0
  465. package/dist/prerender/store.js.map +1 -0
  466. package/dist/prerender.d.ts +66 -0
  467. package/dist/prerender.d.ts.map +1 -0
  468. package/dist/prerender.js +57 -0
  469. package/dist/prerender.js.map +1 -0
  470. package/dist/reverse.d.ts +196 -0
  471. package/dist/reverse.d.ts.map +1 -0
  472. package/dist/reverse.js +78 -0
  473. package/dist/reverse.js.map +1 -0
  474. package/dist/root-error-boundary.d.ts +33 -0
  475. package/dist/root-error-boundary.d.ts.map +1 -0
  476. package/dist/root-error-boundary.js +165 -0
  477. package/dist/root-error-boundary.js.map +1 -0
  478. package/dist/route-content-wrapper.d.ts +46 -0
  479. package/dist/route-content-wrapper.d.ts.map +1 -0
  480. package/dist/route-content-wrapper.js +77 -0
  481. package/dist/route-content-wrapper.js.map +1 -0
  482. package/dist/route-definition.d.ts +421 -0
  483. package/dist/route-definition.d.ts.map +1 -0
  484. package/dist/route-definition.js +868 -0
  485. package/dist/route-definition.js.map +1 -0
  486. package/dist/route-map-builder.d.ts +155 -0
  487. package/dist/route-map-builder.d.ts.map +1 -0
  488. package/dist/route-map-builder.js +237 -0
  489. package/dist/route-map-builder.js.map +1 -0
  490. package/dist/route-types.d.ts +165 -0
  491. package/dist/route-types.d.ts.map +1 -0
  492. package/dist/route-types.js +7 -0
  493. package/dist/route-types.js.map +1 -0
  494. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  496. package/dist/router/__tests__/handler-context.test.js +65 -0
  497. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  498. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  502. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  503. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  504. package/dist/router/__tests__/match-context.test.js +92 -0
  505. package/dist/router/__tests__/match-context.test.js.map +1 -0
  506. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  508. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  509. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  510. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  511. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  512. package/dist/router/__tests__/match-result.test.js +457 -0
  513. package/dist/router/__tests__/match-result.test.js.map +1 -0
  514. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  515. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  516. package/dist/router/__tests__/on-error.test.js +678 -0
  517. package/dist/router/__tests__/on-error.test.js.map +1 -0
  518. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  520. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  521. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  522. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  526. package/dist/router/error-handling.d.ts +77 -0
  527. package/dist/router/error-handling.d.ts.map +1 -0
  528. package/dist/router/error-handling.js +202 -0
  529. package/dist/router/error-handling.js.map +1 -0
  530. package/dist/router/handler-context.d.ts +20 -0
  531. package/dist/router/handler-context.d.ts.map +1 -0
  532. package/dist/router/handler-context.js +198 -0
  533. package/dist/router/handler-context.js.map +1 -0
  534. package/dist/router/intercept-resolution.d.ts +66 -0
  535. package/dist/router/intercept-resolution.d.ts.map +1 -0
  536. package/dist/router/intercept-resolution.js +246 -0
  537. package/dist/router/intercept-resolution.js.map +1 -0
  538. package/dist/router/loader-resolution.d.ts +64 -0
  539. package/dist/router/loader-resolution.d.ts.map +1 -0
  540. package/dist/router/loader-resolution.js +284 -0
  541. package/dist/router/loader-resolution.js.map +1 -0
  542. package/dist/router/logging.d.ts +15 -0
  543. package/dist/router/logging.d.ts.map +1 -0
  544. package/dist/router/logging.js +99 -0
  545. package/dist/router/logging.js.map +1 -0
  546. package/dist/router/manifest.d.ts +22 -0
  547. package/dist/router/manifest.d.ts.map +1 -0
  548. package/dist/router/manifest.js +181 -0
  549. package/dist/router/manifest.js.map +1 -0
  550. package/dist/router/match-api.d.ts +35 -0
  551. package/dist/router/match-api.d.ts.map +1 -0
  552. package/dist/router/match-api.js +406 -0
  553. package/dist/router/match-api.js.map +1 -0
  554. package/dist/router/match-context.d.ts +206 -0
  555. package/dist/router/match-context.d.ts.map +1 -0
  556. package/dist/router/match-context.js +17 -0
  557. package/dist/router/match-context.js.map +1 -0
  558. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  560. package/dist/router/match-middleware/background-revalidation.js +75 -0
  561. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  562. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  564. package/dist/router/match-middleware/cache-lookup.js +257 -0
  565. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  566. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  567. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  568. package/dist/router/match-middleware/cache-store.js +108 -0
  569. package/dist/router/match-middleware/cache-store.js.map +1 -0
  570. package/dist/router/match-middleware/index.d.ts +81 -0
  571. package/dist/router/match-middleware/index.d.ts.map +1 -0
  572. package/dist/router/match-middleware/index.js +80 -0
  573. package/dist/router/match-middleware/index.js.map +1 -0
  574. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  576. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  577. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  578. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  580. package/dist/router/match-middleware/segment-resolution.js +53 -0
  581. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  582. package/dist/router/match-pipelines.d.ts +147 -0
  583. package/dist/router/match-pipelines.d.ts.map +1 -0
  584. package/dist/router/match-pipelines.js +82 -0
  585. package/dist/router/match-pipelines.js.map +1 -0
  586. package/dist/router/match-result.d.ts +126 -0
  587. package/dist/router/match-result.d.ts.map +1 -0
  588. package/dist/router/match-result.js +93 -0
  589. package/dist/router/match-result.js.map +1 -0
  590. package/dist/router/metrics.d.ts +20 -0
  591. package/dist/router/metrics.d.ts.map +1 -0
  592. package/dist/router/metrics.js +47 -0
  593. package/dist/router/metrics.js.map +1 -0
  594. package/dist/router/middleware.d.ts +249 -0
  595. package/dist/router/middleware.d.ts.map +1 -0
  596. package/dist/router/middleware.js +434 -0
  597. package/dist/router/middleware.js.map +1 -0
  598. package/dist/router/middleware.test.d.ts +2 -0
  599. package/dist/router/middleware.test.d.ts.map +1 -0
  600. package/dist/router/middleware.test.js +816 -0
  601. package/dist/router/middleware.test.js.map +1 -0
  602. package/dist/router/pattern-matching.d.ts +149 -0
  603. package/dist/router/pattern-matching.d.ts.map +1 -0
  604. package/dist/router/pattern-matching.js +349 -0
  605. package/dist/router/pattern-matching.js.map +1 -0
  606. package/dist/router/revalidation.d.ts +44 -0
  607. package/dist/router/revalidation.d.ts.map +1 -0
  608. package/dist/router/revalidation.js +147 -0
  609. package/dist/router/revalidation.js.map +1 -0
  610. package/dist/router/router-context.d.ts +135 -0
  611. package/dist/router/router-context.d.ts.map +1 -0
  612. package/dist/router/router-context.js +36 -0
  613. package/dist/router/router-context.js.map +1 -0
  614. package/dist/router/segment-resolution.d.ts +127 -0
  615. package/dist/router/segment-resolution.d.ts.map +1 -0
  616. package/dist/router/segment-resolution.js +919 -0
  617. package/dist/router/segment-resolution.js.map +1 -0
  618. package/dist/router/trie-matching.d.ts +40 -0
  619. package/dist/router/trie-matching.d.ts.map +1 -0
  620. package/dist/router/trie-matching.js +127 -0
  621. package/dist/router/trie-matching.js.map +1 -0
  622. package/dist/router/types.d.ts +136 -0
  623. package/dist/router/types.d.ts.map +1 -0
  624. package/dist/router/types.js +7 -0
  625. package/dist/router/types.js.map +1 -0
  626. package/dist/router.d.ts +753 -0
  627. package/dist/router.d.ts.map +1 -0
  628. package/dist/router.gen.d.ts +6 -0
  629. package/dist/router.gen.d.ts.map +1 -0
  630. package/dist/router.gen.js +6 -0
  631. package/dist/router.gen.js.map +1 -0
  632. package/dist/router.js +1304 -0
  633. package/dist/router.js.map +1 -0
  634. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  636. package/dist/rsc/__tests__/helpers.test.js +140 -0
  637. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  638. package/dist/rsc/handler.d.ts +45 -0
  639. package/dist/rsc/handler.d.ts.map +1 -0
  640. package/dist/rsc/handler.js +1172 -0
  641. package/dist/rsc/handler.js.map +1 -0
  642. package/dist/rsc/helpers.d.ts +16 -0
  643. package/dist/rsc/helpers.d.ts.map +1 -0
  644. package/dist/rsc/helpers.js +55 -0
  645. package/dist/rsc/helpers.js.map +1 -0
  646. package/dist/rsc/index.d.ts +22 -0
  647. package/dist/rsc/index.d.ts.map +1 -0
  648. package/dist/rsc/index.js +23 -0
  649. package/dist/rsc/index.js.map +1 -0
  650. package/dist/rsc/nonce.d.ts +9 -0
  651. package/dist/rsc/nonce.d.ts.map +1 -0
  652. package/dist/rsc/nonce.js +18 -0
  653. package/dist/rsc/nonce.js.map +1 -0
  654. package/dist/rsc/types.d.ts +206 -0
  655. package/dist/rsc/types.d.ts.map +1 -0
  656. package/dist/rsc/types.js +8 -0
  657. package/dist/rsc/types.js.map +1 -0
  658. package/dist/search-params.d.ts +103 -0
  659. package/dist/search-params.d.ts.map +1 -0
  660. package/dist/search-params.js +74 -0
  661. package/dist/search-params.js.map +1 -0
  662. package/dist/segment-system.d.ts +75 -0
  663. package/dist/segment-system.d.ts.map +1 -0
  664. package/dist/segment-system.js +336 -0
  665. package/dist/segment-system.js.map +1 -0
  666. package/dist/server/context.d.ts +245 -0
  667. package/dist/server/context.d.ts.map +1 -0
  668. package/dist/server/context.js +197 -0
  669. package/dist/server/context.js.map +1 -0
  670. package/dist/server/fetchable-loader-store.d.ts +18 -0
  671. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  672. package/dist/server/fetchable-loader-store.js +18 -0
  673. package/dist/server/fetchable-loader-store.js.map +1 -0
  674. package/dist/server/handle-store.d.ts +85 -0
  675. package/dist/server/handle-store.d.ts.map +1 -0
  676. package/dist/server/handle-store.js +142 -0
  677. package/dist/server/handle-store.js.map +1 -0
  678. package/dist/server/loader-registry.d.ts +55 -0
  679. package/dist/server/loader-registry.d.ts.map +1 -0
  680. package/dist/server/loader-registry.js +132 -0
  681. package/dist/server/loader-registry.js.map +1 -0
  682. package/dist/server/request-context.d.ts +226 -0
  683. package/dist/server/request-context.d.ts.map +1 -0
  684. package/dist/server/request-context.js +290 -0
  685. package/dist/server/request-context.js.map +1 -0
  686. package/dist/server/root-layout.d.ts +4 -0
  687. package/dist/server/root-layout.d.ts.map +1 -0
  688. package/dist/server/root-layout.js +5 -0
  689. package/dist/server/root-layout.js.map +1 -0
  690. package/dist/server.d.ts +15 -0
  691. package/dist/server.d.ts.map +1 -0
  692. package/dist/server.js +20 -0
  693. package/dist/server.js.map +1 -0
  694. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  698. package/dist/ssr/index.d.ts +98 -0
  699. package/dist/ssr/index.d.ts.map +1 -0
  700. package/dist/ssr/index.js +158 -0
  701. package/dist/ssr/index.js.map +1 -0
  702. package/dist/static-handler.d.ts +50 -0
  703. package/dist/static-handler.d.ts.map +1 -0
  704. package/dist/static-handler.gen.d.ts +5 -0
  705. package/dist/static-handler.gen.d.ts.map +1 -0
  706. package/dist/static-handler.gen.js +5 -0
  707. package/dist/static-handler.gen.js.map +1 -0
  708. package/dist/static-handler.js +29 -0
  709. package/dist/static-handler.js.map +1 -0
  710. package/dist/theme/ThemeProvider.d.ts +20 -0
  711. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  712. package/dist/theme/ThemeProvider.js +240 -0
  713. package/dist/theme/ThemeProvider.js.map +1 -0
  714. package/dist/theme/ThemeScript.d.ts +48 -0
  715. package/dist/theme/ThemeScript.d.ts.map +1 -0
  716. package/dist/theme/ThemeScript.js +13 -0
  717. package/dist/theme/ThemeScript.js.map +1 -0
  718. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  719. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  720. package/dist/theme/__tests__/theme.test.js +103 -0
  721. package/dist/theme/__tests__/theme.test.js.map +1 -0
  722. package/dist/theme/constants.d.ts +29 -0
  723. package/dist/theme/constants.d.ts.map +1 -0
  724. package/dist/theme/constants.js +48 -0
  725. package/dist/theme/constants.js.map +1 -0
  726. package/dist/theme/index.d.ts +31 -0
  727. package/dist/theme/index.d.ts.map +1 -0
  728. package/dist/theme/index.js +36 -0
  729. package/dist/theme/index.js.map +1 -0
  730. package/dist/theme/theme-context.d.ts +40 -0
  731. package/dist/theme/theme-context.d.ts.map +1 -0
  732. package/dist/theme/theme-context.js +60 -0
  733. package/dist/theme/theme-context.js.map +1 -0
  734. package/dist/theme/theme-script.d.ts +27 -0
  735. package/dist/theme/theme-script.d.ts.map +1 -0
  736. package/dist/theme/theme-script.js +147 -0
  737. package/dist/theme/theme-script.js.map +1 -0
  738. package/dist/theme/types.d.ts +163 -0
  739. package/dist/theme/types.d.ts.map +1 -0
  740. package/dist/theme/types.js +11 -0
  741. package/dist/theme/types.js.map +1 -0
  742. package/dist/theme/use-theme.d.ts +12 -0
  743. package/dist/theme/use-theme.d.ts.map +1 -0
  744. package/dist/theme/use-theme.js +40 -0
  745. package/dist/theme/use-theme.js.map +1 -0
  746. package/dist/types.d.ts +1479 -0
  747. package/dist/types.d.ts.map +1 -0
  748. package/dist/types.js +10 -0
  749. package/dist/types.js.map +1 -0
  750. package/dist/urls.d.ts +441 -0
  751. package/dist/urls.d.ts.map +1 -0
  752. package/dist/urls.gen.d.ts +8 -0
  753. package/dist/urls.gen.d.ts.map +1 -0
  754. package/dist/urls.gen.js +8 -0
  755. package/dist/urls.gen.js.map +1 -0
  756. package/dist/urls.js +443 -0
  757. package/dist/urls.js.map +1 -0
  758. package/dist/use-loader.d.ts +127 -0
  759. package/dist/use-loader.d.ts.map +1 -0
  760. package/dist/use-loader.js +237 -0
  761. package/dist/use-loader.js.map +1 -0
  762. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  763. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  766. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  767. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  770. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  771. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  774. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  775. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  776. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  777. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  778. package/dist/vite/ast-handler-extract.d.ts +49 -0
  779. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  780. package/dist/vite/ast-handler-extract.js +249 -0
  781. package/dist/vite/ast-handler-extract.js.map +1 -0
  782. package/dist/vite/expose-action-id.d.ts +19 -0
  783. package/dist/vite/expose-action-id.d.ts.map +1 -0
  784. package/dist/vite/expose-action-id.js +250 -0
  785. package/dist/vite/expose-action-id.js.map +1 -0
  786. package/dist/vite/expose-id-utils.d.ts +69 -0
  787. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  788. package/dist/vite/expose-id-utils.js +289 -0
  789. package/dist/vite/expose-id-utils.js.map +1 -0
  790. package/dist/vite/expose-internal-ids.d.ts +22 -0
  791. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  792. package/dist/vite/expose-internal-ids.js +886 -0
  793. package/dist/vite/expose-internal-ids.js.map +1 -0
  794. package/dist/vite/index.d.ts +149 -0
  795. package/dist/vite/index.d.ts.map +1 -0
  796. package/dist/vite/index.js +84 -15
  797. package/dist/vite/index.js.bak +5448 -0
  798. package/dist/vite/index.js.map +1 -0
  799. package/dist/vite/index.named-routes.gen.ts +103 -0
  800. package/dist/vite/package-resolution.d.ts +43 -0
  801. package/dist/vite/package-resolution.d.ts.map +1 -0
  802. package/dist/vite/package-resolution.js +112 -0
  803. package/dist/vite/package-resolution.js.map +1 -0
  804. package/dist/vite/virtual-entries.d.ts +25 -0
  805. package/dist/vite/virtual-entries.d.ts.map +1 -0
  806. package/dist/vite/virtual-entries.js +110 -0
  807. package/dist/vite/virtual-entries.js.map +1 -0
  808. package/package.json +21 -18
  809. package/skills/api-client/SKILL.md +1 -1
  810. package/skills/breadcrumbs/SKILL.md +1 -1
  811. package/skills/cache-guide/SKILL.md +1 -1
  812. package/skills/caching/SKILL.md +35 -1
  813. package/skills/catalog.json +265 -0
  814. package/skills/comparison/references/framework-comparison.md +1 -1
  815. package/skills/composability/SKILL.md +33 -1
  816. package/skills/debug-manifest/SKILL.md +1 -1
  817. package/skills/document-cache/SKILL.md +9 -1
  818. package/skills/fonts/SKILL.md +1 -1
  819. package/skills/handler-use/SKILL.md +1 -1
  820. package/skills/hooks/SKILL.md +54 -892
  821. package/skills/hooks/data.md +273 -0
  822. package/skills/hooks/handle-and-actions.md +103 -0
  823. package/skills/hooks/navigation.md +110 -0
  824. package/skills/hooks/outlets.md +41 -0
  825. package/skills/hooks/state.md +228 -0
  826. package/skills/hooks/urls.md +135 -0
  827. package/skills/host-router/SKILL.md +1 -1
  828. package/skills/i18n/SKILL.md +1 -1
  829. package/skills/intercept/SKILL.md +8 -1
  830. package/skills/layout/SKILL.md +1 -1
  831. package/skills/links/SKILL.md +1 -1
  832. package/skills/loader/SKILL.md +8 -1
  833. package/skills/middleware/SKILL.md +1 -1
  834. package/skills/migrate-nextjs/SKILL.md +133 -1
  835. package/skills/migrate-react-router/SKILL.md +42 -816
  836. package/skills/migrate-react-router/cloudflare-workers.md +129 -0
  837. package/skills/migrate-react-router/component-migration.md +196 -0
  838. package/skills/migrate-react-router/data-and-actions.md +225 -0
  839. package/skills/migrate-react-router/route-mapping.md +271 -0
  840. package/skills/mime-routes/SKILL.md +1 -1
  841. package/skills/observability/SKILL.md +9 -1
  842. package/skills/parallel/SKILL.md +10 -1
  843. package/skills/ppr/SKILL.md +331 -32
  844. package/skills/prerender/SKILL.md +8 -1
  845. package/skills/rango/SKILL.md +12 -12
  846. package/skills/response-routes/SKILL.md +1 -1
  847. package/skills/route/SKILL.md +9 -1
  848. package/skills/router-setup/SKILL.md +1 -1
  849. package/skills/scripts/SKILL.md +1 -1
  850. package/skills/server-actions/SKILL.md +3 -2
  851. package/skills/shell-manifest/SKILL.md +1 -1
  852. package/skills/streams-and-websockets/SKILL.md +1 -1
  853. package/skills/tailwind/SKILL.md +1 -1
  854. package/skills/testing/SKILL.md +1 -1
  855. package/skills/theme/SKILL.md +1 -1
  856. package/skills/typesafety/SKILL.md +45 -919
  857. package/skills/typesafety/env-and-bindings.md +254 -0
  858. package/skills/typesafety/generated-files-and-cli.md +335 -0
  859. package/skills/typesafety/params-and-search.md +153 -0
  860. package/skills/typesafety/route-types.md +209 -0
  861. package/skills/use-cache/SKILL.md +7 -1
  862. package/skills/vercel/SKILL.md +1 -1
  863. package/skills/view-transitions/SKILL.md +1 -1
  864. package/src/browser/event-controller.ts +41 -10
  865. package/src/browser/logging.ts +10 -0
  866. package/src/browser/merge-segment-loaders.ts +6 -4
  867. package/src/browser/navigation-client.ts +5 -1
  868. package/src/browser/navigation-store.ts +46 -6
  869. package/src/browser/partial-update.ts +27 -15
  870. package/src/browser/prefetch/cache.ts +26 -4
  871. package/src/browser/prefetch/fetch.ts +27 -17
  872. package/src/browser/react/Link.tsx +13 -3
  873. package/src/browser/react/NavigationProvider.tsx +21 -19
  874. package/src/browser/scroll-restoration.ts +7 -5
  875. package/src/browser/segment-reconciler.ts +31 -21
  876. package/src/browser/types.ts +12 -0
  877. package/src/cache/cache-runtime.ts +203 -23
  878. package/src/cache/document-cache.ts +20 -9
  879. package/src/cache/memory-segment-store.ts +53 -2
  880. package/src/cache/segment-codec.ts +4 -4
  881. package/src/cache/shell-snapshot.ts +50 -1
  882. package/src/cache/types.ts +25 -5
  883. package/src/cache/vercel/vercel-cache-store.ts +131 -107
  884. package/src/cloudflare/tracing.ts +7 -8
  885. package/src/index.rsc.ts +1 -0
  886. package/src/index.ts +12 -8
  887. package/src/route-definition/helpers-types.ts +5 -4
  888. package/src/route-map-builder.ts +24 -1
  889. package/src/router/find-match.ts +15 -1
  890. package/src/router/instrument.ts +9 -4
  891. package/src/router/manifest.ts +13 -5
  892. package/src/router/match-api.ts +70 -30
  893. package/src/router/match-handlers.ts +176 -135
  894. package/src/router/match-result.ts +35 -15
  895. package/src/router/middleware.ts +46 -32
  896. package/src/router/request-classification.ts +20 -7
  897. package/src/router/route-snapshot.ts +10 -0
  898. package/src/router/router-interfaces.ts +9 -0
  899. package/src/router/segment-resolution/fresh.ts +25 -4
  900. package/src/router/segment-resolution/loader-cache.ts +57 -8
  901. package/src/router/segment-resolution/loader-mask.ts +26 -3
  902. package/src/router/segment-resolution/loader-snapshot.ts +251 -0
  903. package/src/router/telemetry-otel.ts +6 -8
  904. package/src/router/tracing.ts +14 -5
  905. package/src/router.ts +15 -6
  906. package/src/rsc/handler.ts +46 -30
  907. package/src/rsc/nonce.ts +10 -1
  908. package/src/rsc/rsc-rendering.ts +39 -8
  909. package/src/rsc/shell-capture.ts +201 -13
  910. package/src/rsc/shell-serve.ts +26 -0
  911. package/src/server/cookie-store.ts +6 -0
  912. package/src/server/request-context.ts +33 -0
  913. package/src/ssr/index.tsx +7 -0
  914. package/src/testing/dispatch.ts +142 -37
  915. package/src/urls/path-helper-types.ts +9 -4
  916. package/src/vercel/tracing.ts +7 -7
  917. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  918. package/src/vite/router-discovery.ts +78 -15
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ppr
3
- description: PPR shell caching — opt a page route in with the `ppr` path option; the router serves the cached HTML shell instantly and resumes the live holes
3
+ description: PPR shell caching — opt a page route in with the `ppr` path option; the router serves the cached HTML shell instantly and resumes the live holes. Use when a page should render instantly from a cached shell while specific parts stay live, or asking about partial prerendering in Rango.
4
4
  argument-hint: "[setup]"
5
5
  ---
6
6
 
@@ -17,6 +17,14 @@ Compare `/document-cache`, which freezes the WHOLE response including loader
17
17
  output. Shell caching is for pages that mix a stable shell with live data: the
18
18
  shell is shared per host+URL, the holes are per request.
19
19
 
20
+ ## Not this skill if…
21
+
22
+ - You want the WHOLE response frozen, loader output included — see
23
+ `/document-cache`.
24
+ - You want routes rendered at build time with `Static()`/`Prerender()` — the
25
+ `ppr` path option captures at runtime; see `/prerender`.
26
+ - You are unsure which cache layer you need — start at `/cache-guide`.
27
+
20
28
  ## Setup: one path option, no middleware
21
29
 
22
30
  PPR is a DOCUMENT-level property declared on the page route via the `ppr` path
@@ -41,7 +49,7 @@ export const urlpatterns = urls(({ path, layout, loader, loading }) => [
41
49
  { name: "product", ppr: { ttl: 600, swr: 120 } },
42
50
  () => [
43
51
  loader(LivePriceLoader),
44
- loading(<PriceSkeleton />), // the structural hole boundary
52
+ loading(<PriceSkeleton />), // structural hole: the loader subtree stays live
45
53
  ],
46
54
  ),
47
55
  ]),
@@ -57,6 +65,60 @@ const router = createRouter<AppBindings>({
57
65
  export default router;
58
66
  ```
59
67
 
68
+ That is ONE of two hole mechanisms — the loader one. Do not conclude PPR
69
+ requires a loader:
70
+
71
+ ### The same opt-in with NO loader and NO loading() — promise holes
72
+
73
+ A route (or its layouts) whose live regions are pending promises under
74
+ `<Suspense>` PPRs with no `loader()` and no `loading()` anywhere. Hand the
75
+ un-awaited promise over as a prop; the consumer suspends under its OWN
76
+ boundary; the boundary postpones at capture and becomes the hole:
77
+
78
+ ```typescript
79
+ // Handler: kick off the fetch, do NOT await it.
80
+ function ProductPage(ctx: HandlerContext) {
81
+ const reviews = fetchReviews(ctx.params.id); // Promise<Review[]> — pending
82
+ return (
83
+ <main>
84
+ <h1>Product {ctx.params.id}</h1> {/* shell — baked into the prelude */}
85
+ <ReviewsSection promise={reviews} /> {/* hole — resumes per request */}
86
+ </main>
87
+ );
88
+ }
89
+ ```
90
+
91
+ ```tsx
92
+ // ReviewsSection.tsx — the consumer owns its Suspense boundary.
93
+ "use client";
94
+
95
+ import { Suspense, use } from "react";
96
+
97
+ function Inner({ promise }: { promise: Promise<Review[]> }) {
98
+ return <ReviewList reviews={use(promise)} />;
99
+ }
100
+ export function ReviewsSection({ promise }: { promise: Promise<Review[]> }) {
101
+ return (
102
+ <Suspense fallback={<ReviewsSkeleton />}>
103
+ <Inner promise={promise} />
104
+ </Suspense>
105
+ );
106
+ }
107
+ ```
108
+
109
+ ```typescript
110
+ path("/products/:id", ProductPage, { name: "product", ppr: true });
111
+ // No use() list at all: no loader, no loading, still a shell + live hole.
112
+ ```
113
+
114
+ At capture the pending fetch cannot win the task-quantized quiet window, so
115
+ the boundary postpones — fallback in the frozen prelude, value resumed fresh
116
+ on every HIT. This is the PHYSICS class from the hole doctrine below, and it
117
+ is exactly how an existing Suspense-shaped tree (e.g. migrated from Next.js
118
+ PPR) works with zero restructuring. The e2e proof is
119
+ `e2e/test-app/src/components/ShellPhysicsValue.tsx` — a promise hole living in
120
+ a LAYOUT with no loader registration at all.
121
+
60
122
  A route WITHOUT the `ppr` option is pure axis 1: no store read, no capture, no
61
123
  logs, zero cost. `ppr` is per page route — declaring it on a layout is not
62
124
  supported (subtree inheritance is a possible follow-up).
@@ -107,21 +169,100 @@ On a document GET to a ppr route the router runs:
107
169
  point is after the chain, an unauthorized request NEVER sees shell bytes — put
108
170
  auth middleware anywhere (global or route DSL) and it guards PPR for free.
109
171
 
172
+ ## Verifying it works
173
+
174
+ The header exists on DOCUMENT responses only. A bare `curl` (no `Accept`)
175
+ content-negotiates a Flight payload (`text/x-component`) with NO
176
+ `x-rango-shell` header at all — which reads as "PPR is off" but is only the
177
+ wrong request shape:
178
+
179
+ ```
180
+ curl -s -D - -o /dev/null -H "Accept: text/html" https://app.example.com/products/1 | grep -i x-rango-shell
181
+ ```
182
+
183
+ - First document GET: `MISS`, plus a background capture.
184
+ - Production (workerd/node): the SECOND request is a `HIT`.
185
+ - Dev: expect a few extra MISSes — cold module transforms abort the capture
186
+ window (per-attempt breadcrumbs: start the server with
187
+ `INTERNAL_RANGO_DEBUG=1`). This self-heals; only a route that NEVER flips
188
+ has a real hole/eligibility problem (the once-per-key warning tells the two
189
+ apart).
190
+ - A HIT is one ordinary document: the frozen prelude first (view-source shows
191
+ your baked shell, with hole fallbacks in place), then
192
+ `<div hidden id="S:0">…` segments as the holes resume, per request.
193
+ - A ppr-declared route that CANNOT be honored (missing shell store family,
194
+ per-request nonce) serves plain axis 1 with NO header and warns once per
195
+ key — no header + a declared `ppr` means look for that warning.
196
+
110
197
  ## The hole doctrine (encode this in your head)
111
198
 
112
199
  Holes are **render-defined**, decided by the shape of the tree, on three rules:
113
200
 
114
201
  | Class | What makes the hole | At capture | At serve |
115
202
  | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | ---------------------------------- |
116
- | **STRUCTURAL** | the ENTIRE segment subtree under a `loading()` registration | loaders masked; the LoaderBoundary postpones; the fallback bakes in as route structure | loaders run fresh; resume fills it |
203
+ | **STRUCTURAL** | the ENTIRE segment subtree under a `loading()` registration — the loader LIVE lane | loaders masked; the LoaderBoundary postpones; the fallback bakes in as route structure | loaders run fresh; resume fills it |
117
204
  | **PHYSICS** | any promise NESTED in handed-over data still pending at capture, under the consumer's own `<Suspense>` — handler props, handle containers (`push({ x: promise })`), loader-carried | real I/O cannot win the task-quantized quiet window; the boundary postpones | the promise settles and streams in |
118
- | **SHELL** | awaited handler data, TOP-LEVEL `push(promise)` (awaited before SSR), resolved promises, replayed `cache()` segments | baked into the prelude | served from the frozen prelude |
205
+ | **SHELL** | awaited handler data, TOP-LEVEL `push(promise)` (awaited before SSR), resolved promises, replayed `cache()` segments, BAKE-lane loader containers | baked into the prelude | served from the frozen prelude |
206
+
207
+ ONE rule for promises, every lane — handlers, handles, AND loaders: **a promise
208
+ nested inside your data is never baked; the container settles.** A loader
209
+ without `loading()` is the BAKE lane (see below): its settled container is
210
+ shell material, exactly like awaited handler data and top-level handle pushes.
211
+
212
+ **`loading()` is NOT the gate for holes — it is the LANE SELECTOR for loader
213
+ data.** A pending promise under any plain `<Suspense>` postpones and is a hole
214
+ at whatever level it suspends — the PHYSICS row needs no `loading()` anywhere
215
+ (the e2e fixture's physics and nested-handle holes sit in a layout with none).
216
+ A route without a loader PPRs on pure promise/Suspense holes. For loaders,
217
+ `loading()` picks the lane: present = the GUARANTEED live lane (masked at
218
+ capture, fresh every serve, immune to fast resolution); absent = the bake lane
219
+ (the container is shell material, nested promises stay live).
220
+
221
+ The three promise positions, side by side:
222
+
223
+ ```typescript
224
+ async function Handler(ctx: HandlerContext) {
225
+ const push = ctx.use(MyHandle);
226
+
227
+ push(fetchBadge()); // TOP-LEVEL push: awaited pre-SSR → BAKED
228
+ push({ label: "x", stat: fetchStat() }); // NESTED in container → container baked,
229
+ // stat streams → HOLE (consumer Suspends it)
230
+
231
+ const data = await fetchHeader(ctx); // awaited by the handler → BAKED
232
+
233
+ return (
234
+ <section>
235
+ <Header data={data} /> {/* shell */}
236
+ <StatsPanel promise={fetchStats(ctx)} /> {/* un-awaited prop + own
237
+ <Suspense> + use() → HOLE */}
238
+ </section>
239
+ );
240
+ }
241
+ ```
119
242
 
120
- The unified rule for promises: **a promise nested inside your data is never
121
- baked; the container settles.** The one asymmetry to remember versus loaders: a
122
- LOADER container is a hole via `loading()` (the whole loader value is live),
123
- while a HANDLE container is shell via root consumption (the handles generator
124
- is drained before SSR) — only the promises nested inside it stay live.
243
+ ### Choosing the hole mechanism
244
+
245
+ | Your live region is… | Use | Why |
246
+ | ----------------------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
247
+ | loader data, must be fresh EVERY serve | `loader()` + `loading()` (the live lane) | the guaranteed structural hole — masked at capture, fresh every serve, immune to fast resolution |
248
+ | loader data, shell container + live parts | bake-lane loader (no `loading()`): `{ static, dynamic: promise }` | container bakes (snapshot-pinned per shell); nested promises hole at the consumer's `<Suspense>` |
249
+ | handler-fetched real I/O (db, fetch) | un-awaited promise prop + consumer `<Suspense>` + `use()` | no loader needed; real latency postpones by physics |
250
+ | per-segment metadata consumed elsewhere | handle container with a NESTED promise + consumer `<Suspense>` | container is shell, nested value streams — "nesting = liveness" |
251
+ | already-resolved / instant / synchronous values | `loader(() => Promise.resolve(x))` + `loading()` | a raw promise that settles inside the quiet window BAKES; only the live lane guarantees live |
252
+ | none of the above | nothing | it bakes — that is what the shell is for |
253
+
254
+ The physics caveat in one line: promise holes are holes because the I/O is
255
+ genuinely pending at capture. If the value can resolve near-instantly (memory
256
+ read, warmed cache), it may bake into the shell — when liveness must be
257
+ guaranteed rather than probable, use the live lane (`loading()`). The same
258
+ physics governs bake-lane nested promises, with one shape guarantee: a nested
259
+ promise that settles inside the window pins its VALUE, but the container key
260
+ KEEPS its promise shape on HITs (the snapshot rehydrates a
261
+ `Promise.resolve(pinned)`), so an unconditional `use(data.x)` consumer never
262
+ breaks — it just reads the pinned value. Note the timing consequence: whether
263
+ such a value is pinned or live can vary per capture (concurrent loader traffic
264
+ extends the quiet window), so treat "fast-resolving promise on the bake lane"
265
+ as PINNED for correctness purposes.
125
266
 
126
267
  ### Handles: "nesting = liveness"
127
268
 
@@ -139,13 +280,104 @@ Put it in a loader: `loader(() => Promise.resolve(x))` + `loading()`. Loaders
139
280
  are always the live lane — masked at capture, fresh on every serve — no matter
140
281
  how fast the value settles.
141
282
 
142
- ### The structural negative: a loader route without loading()
283
+ ### The bake lane: loaders without loading() on THEIR entry
284
+
285
+ A loader on an entry with no renderable `loading()` EXECUTES during capture
286
+ (the capture gate holds open for its real latency, bounded by the 5s guard).
287
+ Its settled container bakes into the prelude; every promise still nested in it
288
+ postpones at the consumer's own `<Suspense>` — a hole. On every HIT the
289
+ capture snapshot's loader family overlays the recorded container onto the
290
+ fresh run, so the payload matches the frozen prelude byte-for-byte while the
291
+ nested promises run fresh. The return shape is the declaration:
292
+
293
+ ```typescript
294
+ export const StorefrontContextLoader = createLoader(async (ctx) => {
295
+ const config = await loadSiteConfig(ctx.params.locale); // bakes (pinned per shell)
296
+ return {
297
+ config, // shell material
298
+ basket: fetchBasket(ctx), // hole — consumer <Suspense>s it, fresh per request
299
+ };
300
+ });
301
+ ```
143
302
 
144
- The loading-less branch awaits loader data at TREE-BUILD, above every Suspense
145
- boundary, so under capture's masked loaders the whole tree pins above `<body>`,
146
- the prelude comes back trivial, and the sanity gate refuses to store. Observable
147
- symptom: `x-rango-shell: MISS` forever plus a once-per-key worker warning. Add
148
- `loading()` to the loader route and keep shell material in a layout.
303
+ The lane is decided PER TREE NODE, at the entry that REGISTERS the loaders —
304
+ `loading()` on a CHILD route does not change a parent layout's lane, and
305
+ `loading()` IS valid on layout and parallel entries, not just routes.
306
+
307
+ Three hard edges (each e2e/unit-pinned):
308
+
309
+ - **Identity refuses.** `cookies()`/`headers()` inside a bake-lane loader
310
+ throws during capture and the capture REFUSES (deterministic, once-per-key
311
+ warned) — identity can never bake into the shared shell. Give that loader's
312
+ entry `loading()` (the live lane is exempt) or move the identity-dependent
313
+ part into a nested promise. The guard's scope is EXACTLY those two calls:
314
+ per-user state read from a middleware-provided object (`ctx.get("session")`)
315
+ does NOT refuse — it bakes silently as the capturing user's data (see
316
+ Pitfalls: the session-object bake trap).
317
+ - **A rejecting bake-lane loader refuses.** Error UI never bakes.
318
+ - **Baked containers show CAPTURE-time data** for the shell's lifetime on
319
+ document GETs (client navigations stay fresh — axis 1). That IS the bake
320
+ lane's meaning; if a value must be fresh on every serve, it belongs on the
321
+ live lane (`loading()`) or in a nested promise.
322
+
323
+ ### The layout-with-loaders playbook (the storefront case)
324
+
325
+ The most common real-app shape: an app-wide layout registers per-user loaders
326
+ (session context, basket, wishlist) and the page under it declares `ppr`.
327
+ Those loaders are on the BAKE lane (no `loading()` on the layout), so the page
328
+ captures and HITs — the question is which parts of their data should bake vs
329
+ stay live. Your levers, in order of preference:
330
+
331
+ 1. **Shape the return value.** Shared/config data returns as plain values
332
+ (bakes, pinned per shell); per-request data returns as NESTED promises
333
+ consumed under the widget's own `<Suspense>` (live holes). No `loading()`,
334
+ no restructuring. One wall: a bake-lane loader that reads
335
+ `cookies()`/`headers()` refuses the capture — identity belongs in a nested
336
+ promise or on the live lane.
337
+ 2. **Do NOT put `loading()` on the layout itself** — that flips the WHOLE
338
+ layout to the live lane and the LoaderBoundary fallback wraps the layout's
339
+ ENTIRE subtree: chrome (header, nav, footer) falls out of the shell into
340
+ the skeleton. Technically PPR, practically pointless.
341
+ 3. **Guaranteed-fresh widgets: a parallel slot with its OWN `loading()`.**
342
+ Parallel-owned loaders get their own per-slot boundary (`fresh.ts` tags
343
+ them with the slot's loading; `segment-system.tsx` builds a per-slot
344
+ LoaderBoundary), so the chrome bakes into the shell and each widget is an
345
+ independent, widget-sized hole:
346
+
347
+ ```typescript
348
+ layout(StoreChrome, () => [
349
+ // chrome renders NO loader data itself — it bakes into the shell
350
+ parallel({ "@basket": BasketBadge }, () => [
351
+ loader(BasketLoader),
352
+ loading(<BadgeSkeleton />), // hole the size of a badge, not a page
353
+ ]),
354
+ // Descriptor form when the slot handler needs ctx (annotate it —
355
+ // StaticHandlerDefinition in the union blocks inference there):
356
+ parallel({
357
+ "@wishlist": {
358
+ handler: (ctx: HandlerContext) => (
359
+ <WishlistBadge listUrl={ctx.reverse("wishlist")} />
360
+ ),
361
+ use: () => [loader(WishlistLoader), loading(<BadgeSkeleton />)],
362
+ },
363
+ }),
364
+ path("/", HomePage, { name: "home", ppr: true }),
365
+ ]),
366
+ ```
367
+
368
+ Slot-owned loaders are masked at capture and GUARANTEED fresh per serve —
369
+ use this where the bake lane's physics (a fast resolve bakes) or pinning
370
+ (capture-time data for the shell's lifetime) is not acceptable, at the cost
371
+ of a widget-sized fallback in the shell.
372
+
373
+ 4. **Shared layout data can also leave the loader lane entirely**: an
374
+ un-awaited handler promise under the consumer's `<Suspense>` (a physics
375
+ hole) or `cache()`/`"use cache"` to bake it with tag-invalidation.
376
+
377
+ The identity rule, stated once: per-user data on a PPR page lives in a NESTED
378
+ promise (a hole, fresh per request) or behind `loading()` (the live lane).
379
+ Reading `cookies()`/`headers()` where the value would bake — handler shell
380
+ material or a bake-lane container — refuses the capture by construction.
149
381
 
150
382
  ## Execution matrix
151
383
 
@@ -154,7 +386,7 @@ symptom: `x-rango-shell: MISS` forever plus a once-per-key worker warning. Add
154
386
  | Middleware chain | runs (full) | **NOT re-run** — inherits the request's post-middleware context | runs (full) — commit point is after it |
155
387
  | `router.match` | runs | re-runs under a derived context | runs (behind the flushed prelude) |
156
388
  | Handlers | run | run on UNCACHED segments; `cache()`d segments replay (mixed-chain) | run (same mixed-chain rules as any render) |
157
- | Loaders | run **fresh** | **MASKED** (never execute) — the structural holes | run **fresh** |
389
+ | Loaders | run **fresh** | LIVE lane (`loading()`): MASKED; BAKE lane: execute + snapshot-pin | run **fresh** (bake containers overlaid from the snapshot) |
158
390
  | Flight render | full | full | full (hydration needs the whole payload — no Flight resume) |
159
391
  | HTML production | full fizz | `prerender` + abort → prelude + postponed | `resume` only the holes — O(paths to holes) |
160
392
  | Shell store | schedules a bg capture | `putShell(key, …)` | `getShell(key)`; a stale/SWR hit also schedules a recapture |
@@ -166,10 +398,11 @@ post-middleware state (`ctx` variables included, which is what makes
166
398
  middleware-derived shell content photograph correctly). Guarding is
167
399
  serve-time: the commit point runs the full chain on EVERY serve.
168
400
 
169
- Because handlers on uncached segments EXECUTE during capture, the
170
- `cookies()`/`headers()` capture guard is load-bearing: those reads THROW during
171
- a capture render (`assertNotInsideShellCapture`), so identity can never leak
172
- into a shared shell through them. Loaders are exempt (always fresh).
401
+ Because handlers on uncached segments EXECUTE during capture — and BAKE-lane
402
+ loaders now do too — the `cookies()`/`headers()` capture guard is load-bearing:
403
+ those reads THROW during a capture render (`assertNotInsideShellCapture`), so
404
+ identity can never leak into a shared shell through them. Live-lane loaders
405
+ (behind `loading()`) are exempt: masked at capture, they never run there.
173
406
 
174
407
  ## allReady: the SEO/bot story
175
408
 
@@ -188,15 +421,21 @@ middleware on every serve. A 401/redirect short-circuit returns before any
188
421
  shell byte.
189
422
 
190
423
  **(b) Identity can't leak via cookies/headers.** `cookies()` and `headers()`
191
- THROW during the background capture render. A shell that reads them is
192
- PPR-ineligible by construction.
424
+ THROW during the background capture render — in handlers AND in bake-lane
425
+ loaders (whose containers would bake). A shell that reads them is
426
+ PPR-ineligible by construction; the live lane (`loading()`) stays exempt.
193
427
 
194
428
  **(c) Residual hazard — middleware-derived per-user state.** A `ctx` variable
195
429
  set by an upstream auth middleware and rendered by shell material is
196
430
  photographed into the SHARED shell (the capture inherits post-middleware
197
- state). That is scope fidelity working as designed — for shared values. If the
198
- value is per-user: shell-cache only public/shared pages, put per-user content
199
- in loaders, or key per variant at the CDN tier.
431
+ state). That is scope fidelity working as designed — for shared values. The
432
+ same hazard reaches BAKE-LANE LOADERS: a loader reading a middleware-provided
433
+ session object (`ctx.get("session")`) never calls `cookies()` itself, so the
434
+ guard cannot see it — whatever it returns as settled container data is
435
+ photographed as the CAPTURING user's state. If the
436
+ value is per-user: shell-cache only public/shared pages, keep per-user content
437
+ in nested pending promises or live-lane (`loading()`) loaders — NOT in a
438
+ bake-lane container — or key per variant at the CDN tier.
200
439
 
201
440
  ## What always stays on axis 1
202
441
 
@@ -206,6 +445,38 @@ and any store without the shell family. A stored shell is invalidated when
206
445
  `React.version` changes (postponed state is build-coupled), so deploys
207
446
  self-heal via recapture.
208
447
 
448
+ The per-request CSP nonce guarantee covers BOTH ways a nonce arrives — the
449
+ `createRouter({ nonce })` provider AND a direct `ctx.set(nonce, value)` token
450
+ write in middleware (the `nonce` token from `@rangojs/router`). Either way the
451
+ nonce ends up rendered into the document (`useNonce()` puts the provider nonce
452
+ on every nonced script/style/meta; a token nonce is rendered by whatever app
453
+ code reads `ctx.get(nonce)`), so a shell shared per host+URL cannot bake it
454
+ without freezing one request's nonce for every visitor (the browser's CSP
455
+ would then reject the frozen nonce for all but the capture request). The serve
456
+ gate reads the token off the post-middleware request variables at the commit
457
+ point (which runs after the whole middleware chain), so a middleware-set nonce
458
+ blocks capture the same as a provider one. Because the route DECLARED `ppr`
459
+ but cannot be honored, it logs a once-per-key worker warning (same
460
+ declared-intent-cannot-be-honored doctrine as the missing-store warning) and
461
+ serves pure axis 1 with no `x-rango-shell` header. An undeclared route stays
462
+ silent.
463
+
464
+ ### The proper way to supply a nonce
465
+
466
+ `createRouter({ nonce })` is the canonical path — supply the nonce THERE, not
467
+ via a token write. The provider value is threaded into the router's own SSR
468
+ machinery: `NonceContext`/`useNonce()`, automatic nonce attributes on
469
+ `<Scripts />` and `<MetaTags />` output, and the inlined Flight payload
470
+ scripts. It ALSO sets the `nonce` token, so `ctx.get(nonce)` works in
471
+ middleware and handlers for the CSP response header. A direct
472
+ `ctx.set(nonce, value)` write in middleware is app-managed only: the router
473
+ resolves its SSR nonce BEFORE middleware runs, so a token-set value is
474
+ readable via `ctx.get(nonce)` and gates PPR (this section), but the router
475
+ will NOT apply it to its own scripts — `useNonce()` stays undefined and the
476
+ Flight payload scripts carry no nonce, which a nonce-only `script-src` policy
477
+ would then block. If you need a per-request nonce, use the provider; reserve
478
+ the token for READING the value.
479
+
209
480
  ## Options: PartialPrerenderProps
210
481
 
211
482
  ```typescript
@@ -247,12 +518,38 @@ know (a tenant id, a deploy marker).
247
518
 
248
519
  ## Pitfalls
249
520
 
250
- - **Loader route without `loading()`**: eternal MISS plus a once-per-key
251
- console warning (see "The structural negative").
521
+ - **A bake-lane loader that reads `cookies()`/`headers()`**: the capture is
522
+ REFUSED (deterministic, once-per-key warned) — the route stays on axis 1.
523
+ Move identity into a nested promise or behind `loading()`.
524
+ - **A bake-lane container that must be fresh per document GET**: it is
525
+ snapshot-pinned for the shell's lifetime by design. Use the live lane
526
+ (`loading()`) or a nested promise instead.
527
+ - **A bake-lane loader slower than the capture guard (~5s)**: the capture
528
+ cannot hold for it — eternal MISS with the once-per-key warning.
252
529
  - **Per-user value in shell material**: baked into the shared shell —
253
530
  deterministically, not by race (handler promises deep-settle at the ring-3
254
531
  write on cached chains; awaited/resolved values bake everywhere). Put
255
- per-user data in a loader.
532
+ per-user data in a nested pending promise or a live-lane (`loading()`)
533
+ loader — a BAKE-lane loader container bakes just like handler material.
534
+ - **The session-object bake trap (the guard cannot save you here)**: the
535
+ capture guard sees `cookies()`/`headers()` calls ONLY. A bake-lane loader
536
+ reading a middleware-provided session object (`ctx.get("session")`) refuses
537
+ nothing — and its FAST-RESOLVE branch is the killer:
538
+
539
+ ```typescript
540
+ const CartLoader = createLoader(async (ctx) => {
541
+ const basketId = ctx.get("session")!.get("basketId");
542
+ if (!basketId) return { cart: Promise.resolve(null) }; // SETTLED → BAKES
543
+ return { cart: fetchBasket(basketId) }; // pending → hole
544
+ });
545
+ ```
546
+
547
+ If the capturing request is anonymous (it usually is), `cart: null` bakes
548
+ and is snapshot-pinned: every logged-in user gets the anonymous badge on
549
+ every HIT. The branch asymmetry makes it nondeterministic per capture. Any
550
+ loader whose data is per-user belongs on the live lane — for a header
551
+ widget, a parallel slot with its own `loading()` (playbook lever 3).
552
+
256
553
  - **Theme on a HIT is capture-then-corrected**: the resume tree replays the
257
554
  CAPTURE's `initialTheme` (resume requires it to match the frozen prelude);
258
555
  the visitor's cookie theme is applied pre-paint by the FOUC script and
@@ -264,15 +561,17 @@ cache"` value baked into the shell is PINNED at capture (the capture data
264
561
  snapshot) and replayed on every HIT, so the shell stays byte-identical to the
265
562
  frozen prelude even after that cache entry expires, gets recomputed, or is
266
563
  tag-invalidated. This is deliberate — parity beats freshness inside the shell.
267
- If a shell region needs to be fresh, put it under a `loading()` hole (holes are
268
- never pinned) or make the SHELL itself invalidatable by adding the tag to
269
- `ppr.tags`. Ring-1/ring-3 tag invalidation does NOT drop the shell.
564
+ If a shell region needs to be fresh, put it under a hole — `loading()` for
565
+ loader data, or an un-awaited promise under the consumer's `<Suspense>`
566
+ (holes are never pinned) — or make the SHELL itself invalidatable by adding
567
+ the tag to `ppr.tags`. Ring-1/ring-3 tag invalidation does NOT drop the shell.
270
568
  - **Uncached nondeterminism in the shell is a hydration hazard**: a raw
271
569
  `Date.now()` / `Math.random()` / uncached `fetch` rendered directly in shell
272
570
  material (outside any cache ring) drifts between capture and hit and the
273
571
  snapshot CANNOT pin it — it was never a cache read. It will mismatch the frozen
274
572
  prelude and detonate hydration. Wrap it in `cache()`/`"use cache"` (then it is
275
- pinned) or move it under a `loading()` hole.
573
+ pinned) or move it under a hole (`loading()`, or a pending-promise
574
+ `<Suspense>` region).
276
575
  - **Stacking with `/document-cache`**: pick one per route — the document cache
277
576
  would cache the composite.
278
577
  - **Dev + HMR**: works, but edits produce stale shells until TTL/recapture.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: prerender
3
- description: Pre-render route segments at build time with Prerender and Passthrough live fallback
3
+ description: Pre-render route segments at build time with Prerender and Passthrough live fallback. Use when a page's content is mostly static and shouldn't render on every request, speeding up cold responses, or deciding which routes to prerender vs render live.
4
4
  argument-hint: [passthrough]
5
5
  ---
6
6
 
@@ -11,6 +11,13 @@ 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
+ ## Not this skill if…
15
+
16
+ - You want a cached HTML shell captured at runtime, with holes and loaders
17
+ staying live per request — see `/ppr`.
18
+ - You want runtime segment caching with TTL/SWR — that is the `cache()` DSL:
19
+ see `/caching`. Prerender is the same cache filled at build time.
20
+
14
21
  ## API: Prerender
15
22
 
16
23
  ### Static Route (no params)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: rango
3
- description: Overview of @rangojs/router and available skills
3
+ description: Overview of @rangojs/router and available skills. Use when unsure which skill to reach for, starting a new task in a Rango app, or asking "what can this router do".
4
4
  argument-hint:
5
5
  ---
6
6
 
@@ -249,17 +249,17 @@ Grouped by concern — read when you need to…
249
249
 
250
250
  **Data & caching** — fetch, mutate, and cache:
251
251
 
252
- | Skill | Description |
253
- | ----------------- | -------------------------------------------------------------------------------------------- |
254
- | `/loader` | Data loaders with `createLoader()` and `revalidate()` |
255
- | `/server-actions` | Mutations with `"use server"`, useActionState, validation, revalidation |
256
- | `/caching` | Segment caching with memory or KV stores |
257
- | `/use-cache` | Function-level caching with `"use cache"` directive |
258
- | `/cache-guide` | When to use `cache()` vs `"use cache"` — differences and decision guide |
259
- | `/document-cache` | Edge caching with Cache-Control headers |
260
- | `/ppr` | PPR shell caching: cached HTML shell served instantly, live loader holes resumed per request |
261
- | `/prerender` | Pre-render route segments at build time (Passthrough live fallback) |
262
- | `/shell-manifest` | Replayed handles as cache metadata read by live loaders (frozen shell, batched live holes) |
252
+ | Skill | Description |
253
+ | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
254
+ | `/loader` | Data loaders with `createLoader()` and `revalidate()` |
255
+ | `/server-actions` | Mutations with `"use server"`, useActionState, validation, revalidation |
256
+ | `/caching` | Segment caching with memory or KV stores |
257
+ | `/use-cache` | Function-level caching with `"use cache"` directive |
258
+ | `/cache-guide` | When to use `cache()` vs `"use cache"` — differences and decision guide |
259
+ | `/document-cache` | Edge caching with Cache-Control headers |
260
+ | `/ppr` | PPR shell caching: cached shell served instantly, live holes resumed — a hole is a `loading()` subtree OR a pending promise under `<Suspense>` (no loader needed) |
261
+ | `/prerender` | Pre-render route segments at build time (Passthrough live fallback) |
262
+ | `/shell-manifest` | Replayed handles as cache metadata read by live loaders (frozen shell, batched live holes) |
263
263
 
264
264
  **Client & presentation** — build the client-side UX:
265
265
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: response-routes
3
- description: Response routes (path.json, path.text, etc.) for non-RSC endpoints with typed responses
3
+ description: Response routes (path.json, path.text, etc.) for non-RSC endpoints with typed responses. Use when building a JSON/text API endpoint alongside your pages, or asking how to return raw JSON instead of RSC from a route.
4
4
  argument-hint: [json|text|html|xml|md|image|stream]
5
5
  ---
6
6
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: route
3
- description: Define routes with path() in @rangojs/router
3
+ description: Define routes with path() in @rangojs/router. Use when creating a new page or route, or asking how to define a URL path and its handler.
4
4
  argument-hint: [pattern]
5
5
  ---
6
6
 
@@ -479,6 +479,14 @@ urls(({ path, layout }) => [
479
479
  ])
480
480
  ```
481
481
 
482
+ For composing whole route MODULES, reach for `include()` — and prefer the
483
+ code-split form `include("/shop", () => import("./shop-patterns"))` for any
484
+ group that is a natural unit: it keeps the group off the cold-start path, and
485
+ measured first-hit cost scales with routes-per-chunk, so many small groups
486
+ beat one giant one. Sizing rules and the numbers behind them:
487
+ [skills/composability](../composability/SKILL.md) → "Sizing async include
488
+ groups (measured)".
489
+
482
490
  ## View Transitions
483
491
 
484
492
  A route can configure its own `transition()` — the wrap goes around the route's component itself (routes are leaves; they have no separate default outlet channel). If the route component renders a `<ParallelOutlet />` directly, that slot remains inside the route's VT subtree, so prefer mounting parallel slots in a layout when combining intercept modals with route-level transitions. See [skills/view-transitions](../view-transitions/SKILL.md) for examples and the wrap-location rules across layouts, routes, and slots.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: router-setup
3
- description: Create and configure the RSC router with createRouter
3
+ description: Create and configure the RSC router with createRouter. Use when bootstrapping a new Rango app, or configuring top-level router options like base path, cache store, or environment.
4
4
  argument-hint: [option]
5
5
  ---
6
6
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: scripts
3
- description: Inject third-party scripts (GTM, analytics, widgets) into the document head/body via the Script handle
3
+ description: Inject third-party scripts (GTM, analytics, widgets) into the document head/body via the Script handle. Use when adding Google Tag Manager, an analytics snippet, or a third-party widget script to the page.
4
4
  argument-hint: "[vendor]"
5
5
  ---
6
6
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: server-actions
3
- description: Define and call server actions (`"use server"`) — forms, useActionState, useOptimistic, validation, error handling, redirects, revalidation
3
+ description: Define and call server actions (`"use server"`) — forms, useActionState, useOptimistic, validation, error handling, redirects, revalidation. Use when handling a form submission on the server, calling a server function from a client component, or needing optimistic UI after a mutation.
4
4
  argument-hint: "[action]"
5
5
  ---
6
6
 
@@ -24,7 +24,8 @@ with no framework wrapper. All standard React hooks (`useActionState`,
24
24
  Use loaders and route handlers for reads. Use actions for writes. After an
25
25
  action runs, the matched route tree can partially re-render so handlers and
26
26
  loaders that opt into revalidation see the new state — see "Revalidation"
27
- below.
27
+ below. For the read-side APIs (`createLoader`, `useLoader`, `useFetchLoader`),
28
+ see `/loader`.
28
29
 
29
30
  ## Revalidation Model
30
31
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: shell-manifest
3
- description: Shell manifest pattern — replayed handles as cache metadata that live loaders read, e.g. a prerendered product list with batched live prices
3
+ description: Shell manifest pattern — replayed handles as cache metadata that live loaders read, e.g. a prerendered product list with batched live prices. Use when a cached/prerendered shell needs to feed IDs or metadata to a live loader for freshly-fetched data.
4
4
  argument-hint:
5
5
  ---
6
6
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: streams-and-websockets
3
- description: Long-lived Response handlers — Server-Sent Events (SSE) via path.stream and WebSocket upgrades via path.any on Cloudflare Workers, including middleware interaction and runtime caveats.
3
+ description: Long-lived Response handlers — Server-Sent Events (SSE) via path.stream and WebSocket upgrades via path.any on Cloudflare Workers, including middleware interaction and runtime caveats. Use when streaming live updates to the browser, or opening a WebSocket connection from a route on Cloudflare Workers.
4
4
  argument-hint: "[sse | websocket | agents]"
5
5
  ---
6
6
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: tailwind
3
- description: Set up Tailwind CSS v4 with the Document component and CSS imports
3
+ description: Set up Tailwind CSS v4 with the Document component and CSS imports. Use when adding Tailwind CSS to a Rango app, or Tailwind classes aren't being applied or generated.
4
4
  argument-hint: [setup]
5
5
  ---
6
6
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: testing
3
- description: Test @rangojs/router apps — unit (loaders/middleware/reverse/components), integration (dispatch/Flight), and e2e (dev+prod parity, progressive enhancement)
3
+ description: Test @rangojs/router apps — unit (loaders/middleware/reverse/components), integration (dispatch/Flight), and e2e (dev+prod parity, progressive enhancement). Use when writing a unit test for a loader or middleware, or asking how to test a route end-to-end in dev and production.
4
4
  argument-hint: [layer]
5
5
  ---
6
6