@rangojs/router 0.8.0 → 0.10.0

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 (884) hide show
  1. package/dist/__internal.d.ts +83 -0
  2. package/dist/__internal.d.ts.map +1 -0
  3. package/dist/__internal.js +19 -0
  4. package/dist/__internal.js.map +1 -0
  5. package/dist/__mocks__/version.d.ts +7 -0
  6. package/dist/__mocks__/version.d.ts.map +1 -0
  7. package/dist/__mocks__/version.js +7 -0
  8. package/dist/__mocks__/version.js.map +1 -0
  9. package/dist/__tests__/client-href.test.d.ts +2 -0
  10. package/dist/__tests__/client-href.test.d.ts.map +1 -0
  11. package/dist/__tests__/client-href.test.js +74 -0
  12. package/dist/__tests__/client-href.test.js.map +1 -0
  13. package/dist/__tests__/component-utils.test.d.ts +2 -0
  14. package/dist/__tests__/component-utils.test.d.ts.map +1 -0
  15. package/dist/__tests__/component-utils.test.js +51 -0
  16. package/dist/__tests__/component-utils.test.js.map +1 -0
  17. package/dist/__tests__/event-controller.test.d.ts +2 -0
  18. package/dist/__tests__/event-controller.test.d.ts.map +1 -0
  19. package/dist/__tests__/event-controller.test.js +538 -0
  20. package/dist/__tests__/event-controller.test.js.map +1 -0
  21. package/dist/__tests__/helpers/route-tree.d.ts +118 -0
  22. package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
  23. package/dist/__tests__/helpers/route-tree.js +374 -0
  24. package/dist/__tests__/helpers/route-tree.js.map +1 -0
  25. package/dist/__tests__/match-result.test.d.ts +2 -0
  26. package/dist/__tests__/match-result.test.d.ts.map +1 -0
  27. package/dist/__tests__/match-result.test.js +154 -0
  28. package/dist/__tests__/match-result.test.js.map +1 -0
  29. package/dist/__tests__/navigation-store.test.d.ts +2 -0
  30. package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
  31. package/dist/__tests__/navigation-store.test.js +440 -0
  32. package/dist/__tests__/navigation-store.test.js.map +1 -0
  33. package/dist/__tests__/partial-update.test.d.ts +2 -0
  34. package/dist/__tests__/partial-update.test.d.ts.map +1 -0
  35. package/dist/__tests__/partial-update.test.js +1009 -0
  36. package/dist/__tests__/partial-update.test.js.map +1 -0
  37. package/dist/__tests__/reverse-types.test.d.ts +8 -0
  38. package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
  39. package/dist/__tests__/reverse-types.test.js +656 -0
  40. package/dist/__tests__/reverse-types.test.js.map +1 -0
  41. package/dist/__tests__/route-definition.test.d.ts +2 -0
  42. package/dist/__tests__/route-definition.test.d.ts.map +1 -0
  43. package/dist/__tests__/route-definition.test.js +55 -0
  44. package/dist/__tests__/route-definition.test.js.map +1 -0
  45. package/dist/__tests__/router-helpers.test.d.ts +2 -0
  46. package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
  47. package/dist/__tests__/router-helpers.test.js +377 -0
  48. package/dist/__tests__/router-helpers.test.js.map +1 -0
  49. package/dist/__tests__/router-integration-2.test.d.ts +2 -0
  50. package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
  51. package/dist/__tests__/router-integration-2.test.js +426 -0
  52. package/dist/__tests__/router-integration-2.test.js.map +1 -0
  53. package/dist/__tests__/router-integration.test.d.ts +2 -0
  54. package/dist/__tests__/router-integration.test.d.ts.map +1 -0
  55. package/dist/__tests__/router-integration.test.js +1051 -0
  56. package/dist/__tests__/router-integration.test.js.map +1 -0
  57. package/dist/__tests__/search-params.test.d.ts +5 -0
  58. package/dist/__tests__/search-params.test.d.ts.map +1 -0
  59. package/dist/__tests__/search-params.test.js +306 -0
  60. package/dist/__tests__/search-params.test.js.map +1 -0
  61. package/dist/__tests__/segment-system.test.d.ts +2 -0
  62. package/dist/__tests__/segment-system.test.d.ts.map +1 -0
  63. package/dist/__tests__/segment-system.test.js +627 -0
  64. package/dist/__tests__/segment-system.test.js.map +1 -0
  65. package/dist/__tests__/static-handler-types.test.d.ts +8 -0
  66. package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
  67. package/dist/__tests__/static-handler-types.test.js +63 -0
  68. package/dist/__tests__/static-handler-types.test.js.map +1 -0
  69. package/dist/__tests__/urls.test.d.ts +2 -0
  70. package/dist/__tests__/urls.test.d.ts.map +1 -0
  71. package/dist/__tests__/urls.test.js +421 -0
  72. package/dist/__tests__/urls.test.js.map +1 -0
  73. package/dist/__tests__/use-mount.test.d.ts +2 -0
  74. package/dist/__tests__/use-mount.test.d.ts.map +1 -0
  75. package/dist/__tests__/use-mount.test.js +35 -0
  76. package/dist/__tests__/use-mount.test.js.map +1 -0
  77. package/dist/bin/rango.d.ts +2 -0
  78. package/dist/bin/rango.d.ts.map +1 -0
  79. package/dist/bin/rango.js.map +1 -0
  80. package/dist/browser/event-controller.d.ts +191 -0
  81. package/dist/browser/event-controller.d.ts.map +1 -0
  82. package/dist/browser/event-controller.js +559 -0
  83. package/dist/browser/event-controller.js.map +1 -0
  84. package/dist/browser/index.d.ts +2 -0
  85. package/dist/browser/index.d.ts.map +1 -0
  86. package/dist/browser/index.js +14 -0
  87. package/dist/browser/index.js.map +1 -0
  88. package/dist/browser/link-interceptor.d.ts +38 -0
  89. package/dist/browser/link-interceptor.d.ts.map +1 -0
  90. package/dist/browser/link-interceptor.js +99 -0
  91. package/dist/browser/link-interceptor.js.map +1 -0
  92. package/dist/browser/logging.d.ts +10 -0
  93. package/dist/browser/logging.d.ts.map +1 -0
  94. package/dist/browser/logging.js +29 -0
  95. package/dist/browser/logging.js.map +1 -0
  96. package/dist/browser/lru-cache.d.ts +17 -0
  97. package/dist/browser/lru-cache.d.ts.map +1 -0
  98. package/dist/browser/lru-cache.js +50 -0
  99. package/dist/browser/lru-cache.js.map +1 -0
  100. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  101. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  102. package/dist/browser/merge-segment-loaders.js +102 -0
  103. package/dist/browser/merge-segment-loaders.js.map +1 -0
  104. package/dist/browser/navigation-bridge.d.ts +102 -0
  105. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  106. package/dist/browser/navigation-bridge.js +708 -0
  107. package/dist/browser/navigation-bridge.js.map +1 -0
  108. package/dist/browser/navigation-client.d.ts +25 -0
  109. package/dist/browser/navigation-client.d.ts.map +1 -0
  110. package/dist/browser/navigation-client.js +157 -0
  111. package/dist/browser/navigation-client.js.map +1 -0
  112. package/dist/browser/navigation-store.d.ts +101 -0
  113. package/dist/browser/navigation-store.d.ts.map +1 -0
  114. package/dist/browser/navigation-store.js +625 -0
  115. package/dist/browser/navigation-store.js.map +1 -0
  116. package/dist/browser/partial-update.d.ts +75 -0
  117. package/dist/browser/partial-update.d.ts.map +1 -0
  118. package/dist/browser/partial-update.js +426 -0
  119. package/dist/browser/partial-update.js.map +1 -0
  120. package/dist/browser/react/Link.d.ts +86 -0
  121. package/dist/browser/react/Link.d.ts.map +1 -0
  122. package/dist/browser/react/Link.js +128 -0
  123. package/dist/browser/react/Link.js.map +1 -0
  124. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  125. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  126. package/dist/browser/react/NavigationProvider.js +216 -0
  127. package/dist/browser/react/NavigationProvider.js.map +1 -0
  128. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  129. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  130. package/dist/browser/react/ScrollRestoration.js +57 -0
  131. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  132. package/dist/browser/react/context.d.ts +46 -0
  133. package/dist/browser/react/context.d.ts.map +1 -0
  134. package/dist/browser/react/context.js +10 -0
  135. package/dist/browser/react/context.js.map +1 -0
  136. package/dist/browser/react/index.d.ts +11 -0
  137. package/dist/browser/react/index.d.ts.map +1 -0
  138. package/dist/browser/react/index.js +22 -0
  139. package/dist/browser/react/index.js.map +1 -0
  140. package/dist/browser/react/location-state-shared.d.ts +63 -0
  141. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  142. package/dist/browser/react/location-state-shared.js +81 -0
  143. package/dist/browser/react/location-state-shared.js.map +1 -0
  144. package/dist/browser/react/location-state.d.ts +23 -0
  145. package/dist/browser/react/location-state.d.ts.map +1 -0
  146. package/dist/browser/react/location-state.js +29 -0
  147. package/dist/browser/react/location-state.js.map +1 -0
  148. package/dist/browser/react/mount-context.d.ts +24 -0
  149. package/dist/browser/react/mount-context.d.ts.map +1 -0
  150. package/dist/browser/react/mount-context.js +24 -0
  151. package/dist/browser/react/mount-context.js.map +1 -0
  152. package/dist/browser/react/use-action.d.ts +64 -0
  153. package/dist/browser/react/use-action.d.ts.map +1 -0
  154. package/dist/browser/react/use-action.js +134 -0
  155. package/dist/browser/react/use-action.js.map +1 -0
  156. package/dist/browser/react/use-client-cache.d.ts +41 -0
  157. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  158. package/dist/browser/react/use-client-cache.js +39 -0
  159. package/dist/browser/react/use-client-cache.js.map +1 -0
  160. package/dist/browser/react/use-handle.d.ts +31 -0
  161. package/dist/browser/react/use-handle.d.ts.map +1 -0
  162. package/dist/browser/react/use-handle.js +144 -0
  163. package/dist/browser/react/use-handle.js.map +1 -0
  164. package/dist/browser/react/use-href.d.ts +33 -0
  165. package/dist/browser/react/use-href.d.ts.map +1 -0
  166. package/dist/browser/react/use-href.js +39 -0
  167. package/dist/browser/react/use-href.js.map +1 -0
  168. package/dist/browser/react/use-link-status.d.ts +37 -0
  169. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  170. package/dist/browser/react/use-link-status.js +99 -0
  171. package/dist/browser/react/use-link-status.js.map +1 -0
  172. package/dist/browser/react/use-mount.d.ts +25 -0
  173. package/dist/browser/react/use-mount.d.ts.map +1 -0
  174. package/dist/browser/react/use-mount.js +30 -0
  175. package/dist/browser/react/use-mount.js.map +1 -0
  176. package/dist/browser/react/use-navigation.d.ts +27 -0
  177. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  178. package/dist/browser/react/use-navigation.js +87 -0
  179. package/dist/browser/react/use-navigation.js.map +1 -0
  180. package/dist/browser/react/use-segments.d.ts +38 -0
  181. package/dist/browser/react/use-segments.d.ts.map +1 -0
  182. package/dist/browser/react/use-segments.js +130 -0
  183. package/dist/browser/react/use-segments.js.map +1 -0
  184. package/dist/browser/request-controller.d.ts +26 -0
  185. package/dist/browser/request-controller.d.ts.map +1 -0
  186. package/dist/browser/request-controller.js +147 -0
  187. package/dist/browser/request-controller.js.map +1 -0
  188. package/dist/browser/rsc-router.d.ts +129 -0
  189. package/dist/browser/rsc-router.d.ts.map +1 -0
  190. package/dist/browser/rsc-router.js +195 -0
  191. package/dist/browser/rsc-router.js.map +1 -0
  192. package/dist/browser/scroll-restoration.d.ts +93 -0
  193. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  194. package/dist/browser/scroll-restoration.js +321 -0
  195. package/dist/browser/scroll-restoration.js.map +1 -0
  196. package/dist/browser/segment-structure-assert.d.ts +17 -0
  197. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  198. package/dist/browser/segment-structure-assert.js +59 -0
  199. package/dist/browser/segment-structure-assert.js.map +1 -0
  200. package/dist/browser/server-action-bridge.d.ts +26 -0
  201. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  202. package/dist/browser/server-action-bridge.js +668 -0
  203. package/dist/browser/server-action-bridge.js.map +1 -0
  204. package/dist/browser/shallow.d.ts +12 -0
  205. package/dist/browser/shallow.d.ts.map +1 -0
  206. package/dist/browser/shallow.js +34 -0
  207. package/dist/browser/shallow.js.map +1 -0
  208. package/dist/browser/types.d.ts +369 -0
  209. package/dist/browser/types.d.ts.map +1 -0
  210. package/dist/browser/types.js +2 -0
  211. package/dist/browser/types.js.map +1 -0
  212. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  213. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  214. package/dist/build/__tests__/generate-cli.test.js +237 -0
  215. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  216. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  217. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  218. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  219. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  220. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  221. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  222. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  223. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  224. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  225. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  226. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  227. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  228. package/dist/build/generate-manifest.d.ts +81 -0
  229. package/dist/build/generate-manifest.d.ts.map +1 -0
  230. package/dist/build/generate-manifest.js +276 -0
  231. package/dist/build/generate-manifest.js.map +1 -0
  232. package/dist/build/generate-route-types.d.ts +115 -0
  233. package/dist/build/generate-route-types.d.ts.map +1 -0
  234. package/dist/build/generate-route-types.js +740 -0
  235. package/dist/build/generate-route-types.js.map +1 -0
  236. package/dist/build/index.d.ts +21 -0
  237. package/dist/build/index.d.ts.map +1 -0
  238. package/dist/build/index.js +21 -0
  239. package/dist/build/index.js.map +1 -0
  240. package/dist/build/route-trie.d.ts +71 -0
  241. package/dist/build/route-trie.d.ts.map +1 -0
  242. package/dist/build/route-trie.js +175 -0
  243. package/dist/build/route-trie.js.map +1 -0
  244. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  245. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  246. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  247. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  248. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  249. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  250. package/dist/cache/__tests__/document-cache.test.js +345 -0
  251. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  252. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  253. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  254. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  256. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  257. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  258. package/dist/cache/__tests__/memory-store.test.js +367 -0
  259. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  260. package/dist/cache/cache-scope.d.ts +102 -0
  261. package/dist/cache/cache-scope.d.ts.map +1 -0
  262. package/dist/cache/cache-scope.js +440 -0
  263. package/dist/cache/cache-scope.js.map +1 -0
  264. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  265. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  266. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  268. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  269. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  270. package/dist/cache/cf/cf-cache-store.js +242 -0
  271. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  272. package/dist/cache/cf/index.d.ts +14 -0
  273. package/dist/cache/cf/index.d.ts.map +1 -0
  274. package/dist/cache/cf/index.js +17 -0
  275. package/dist/cache/cf/index.js.map +1 -0
  276. package/dist/cache/document-cache.d.ts +64 -0
  277. package/dist/cache/document-cache.d.ts.map +1 -0
  278. package/dist/cache/document-cache.js +228 -0
  279. package/dist/cache/document-cache.js.map +1 -0
  280. package/dist/cache/index.d.ts +19 -0
  281. package/dist/cache/index.d.ts.map +1 -0
  282. package/dist/cache/index.js +21 -0
  283. package/dist/cache/index.js.map +1 -0
  284. package/dist/cache/memory-segment-store.d.ts +110 -0
  285. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  286. package/dist/cache/memory-segment-store.js +117 -0
  287. package/dist/cache/memory-segment-store.js.map +1 -0
  288. package/dist/cache/memory-store.d.ts +41 -0
  289. package/dist/cache/memory-store.d.ts.map +1 -0
  290. package/dist/cache/memory-store.js +191 -0
  291. package/dist/cache/memory-store.js.map +1 -0
  292. package/dist/cache/types.d.ts +317 -0
  293. package/dist/cache/types.d.ts.map +1 -0
  294. package/dist/cache/types.js +12 -0
  295. package/dist/cache/types.js.map +1 -0
  296. package/dist/client.d.ts +248 -0
  297. package/dist/client.d.ts.map +1 -0
  298. package/dist/client.js +367 -0
  299. package/dist/client.js.map +1 -0
  300. package/dist/client.rsc.d.ts +26 -0
  301. package/dist/client.rsc.d.ts.map +1 -0
  302. package/dist/client.rsc.js +46 -0
  303. package/dist/client.rsc.js.map +1 -0
  304. package/dist/component-utils.d.ts +36 -0
  305. package/dist/component-utils.d.ts.map +1 -0
  306. package/dist/component-utils.js +61 -0
  307. package/dist/component-utils.js.map +1 -0
  308. package/dist/components/DefaultDocument.d.ts +13 -0
  309. package/dist/components/DefaultDocument.d.ts.map +1 -0
  310. package/dist/components/DefaultDocument.js +15 -0
  311. package/dist/components/DefaultDocument.js.map +1 -0
  312. package/dist/debug.d.ts +58 -0
  313. package/dist/debug.d.ts.map +1 -0
  314. package/dist/debug.js +157 -0
  315. package/dist/debug.js.map +1 -0
  316. package/dist/default-error-boundary.d.ts +11 -0
  317. package/dist/default-error-boundary.d.ts.map +1 -0
  318. package/dist/default-error-boundary.js +45 -0
  319. package/dist/default-error-boundary.js.map +1 -0
  320. package/dist/deps/browser.d.ts +2 -0
  321. package/dist/deps/browser.d.ts.map +1 -0
  322. package/dist/deps/browser.js +3 -0
  323. package/dist/deps/browser.js.map +1 -0
  324. package/dist/deps/html-stream-client.d.ts +2 -0
  325. package/dist/deps/html-stream-client.d.ts.map +1 -0
  326. package/dist/deps/html-stream-client.js +3 -0
  327. package/dist/deps/html-stream-client.js.map +1 -0
  328. package/dist/deps/html-stream-server.d.ts +2 -0
  329. package/dist/deps/html-stream-server.d.ts.map +1 -0
  330. package/dist/deps/html-stream-server.js +3 -0
  331. package/dist/deps/html-stream-server.js.map +1 -0
  332. package/dist/deps/rsc.d.ts +2 -0
  333. package/dist/deps/rsc.d.ts.map +1 -0
  334. package/dist/deps/rsc.js +4 -0
  335. package/dist/deps/rsc.js.map +1 -0
  336. package/dist/deps/ssr.d.ts +2 -0
  337. package/dist/deps/ssr.d.ts.map +1 -0
  338. package/dist/deps/ssr.js +3 -0
  339. package/dist/deps/ssr.js.map +1 -0
  340. package/dist/errors.d.ts +174 -0
  341. package/dist/errors.d.ts.map +1 -0
  342. package/dist/errors.js +241 -0
  343. package/dist/errors.js.map +1 -0
  344. package/dist/handle.d.ts +78 -0
  345. package/dist/handle.d.ts.map +1 -0
  346. package/dist/handle.js +82 -0
  347. package/dist/handle.js.map +1 -0
  348. package/dist/handles/MetaTags.d.ts +14 -0
  349. package/dist/handles/MetaTags.d.ts.map +1 -0
  350. package/dist/handles/MetaTags.js +136 -0
  351. package/dist/handles/MetaTags.js.map +1 -0
  352. package/dist/handles/index.d.ts +6 -0
  353. package/dist/handles/index.d.ts.map +1 -0
  354. package/dist/handles/index.js +6 -0
  355. package/dist/handles/index.js.map +1 -0
  356. package/dist/handles/meta.d.ts +39 -0
  357. package/dist/handles/meta.d.ts.map +1 -0
  358. package/dist/handles/meta.js +202 -0
  359. package/dist/handles/meta.js.map +1 -0
  360. package/dist/host/__tests__/errors.test.d.ts +2 -0
  361. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  362. package/dist/host/__tests__/errors.test.js +76 -0
  363. package/dist/host/__tests__/errors.test.js.map +1 -0
  364. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  365. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  366. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  368. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  369. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  370. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  371. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  372. package/dist/host/__tests__/router.test.d.ts +2 -0
  373. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  374. package/dist/host/__tests__/router.test.js +241 -0
  375. package/dist/host/__tests__/router.test.js.map +1 -0
  376. package/dist/host/__tests__/testing.test.d.ts +2 -0
  377. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  378. package/dist/host/__tests__/testing.test.js +64 -0
  379. package/dist/host/__tests__/testing.test.js.map +1 -0
  380. package/dist/host/__tests__/utils.test.d.ts +2 -0
  381. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  382. package/dist/host/__tests__/utils.test.js +29 -0
  383. package/dist/host/__tests__/utils.test.js.map +1 -0
  384. package/dist/host/cookie-handler.d.ts +34 -0
  385. package/dist/host/cookie-handler.d.ts.map +1 -0
  386. package/dist/host/cookie-handler.js +124 -0
  387. package/dist/host/cookie-handler.js.map +1 -0
  388. package/dist/host/errors.d.ts +56 -0
  389. package/dist/host/errors.d.ts.map +1 -0
  390. package/dist/host/errors.js +79 -0
  391. package/dist/host/errors.js.map +1 -0
  392. package/dist/host/index.d.ts +29 -0
  393. package/dist/host/index.d.ts.map +1 -0
  394. package/dist/host/index.js +32 -0
  395. package/dist/host/index.js.map +1 -0
  396. package/dist/host/pattern-matcher.d.ts +36 -0
  397. package/dist/host/pattern-matcher.d.ts.map +1 -0
  398. package/dist/host/pattern-matcher.js +172 -0
  399. package/dist/host/pattern-matcher.js.map +1 -0
  400. package/dist/host/router.d.ts +26 -0
  401. package/dist/host/router.d.ts.map +1 -0
  402. package/dist/host/router.js +218 -0
  403. package/dist/host/router.js.map +1 -0
  404. package/dist/host/testing.d.ts +36 -0
  405. package/dist/host/testing.d.ts.map +1 -0
  406. package/dist/host/testing.js +55 -0
  407. package/dist/host/testing.js.map +1 -0
  408. package/dist/host/types.d.ts +115 -0
  409. package/dist/host/types.d.ts.map +1 -0
  410. package/dist/host/types.js +7 -0
  411. package/dist/host/types.js.map +1 -0
  412. package/dist/host/utils.d.ts +21 -0
  413. package/dist/host/utils.d.ts.map +1 -0
  414. package/dist/host/utils.js +23 -0
  415. package/dist/host/utils.js.map +1 -0
  416. package/dist/href-client.d.ts +131 -0
  417. package/dist/href-client.d.ts.map +1 -0
  418. package/dist/href-client.js +64 -0
  419. package/dist/href-client.js.map +1 -0
  420. package/dist/href-context.d.ts +29 -0
  421. package/dist/href-context.d.ts.map +1 -0
  422. package/dist/href-context.js +21 -0
  423. package/dist/href-context.js.map +1 -0
  424. package/dist/index.d.ts +73 -0
  425. package/dist/index.d.ts.map +1 -0
  426. package/dist/index.js +91 -0
  427. package/dist/index.js.map +1 -0
  428. package/dist/index.rsc.d.ts +32 -0
  429. package/dist/index.rsc.d.ts.map +1 -0
  430. package/dist/index.rsc.js +40 -0
  431. package/dist/index.rsc.js.map +1 -0
  432. package/dist/internal-debug.d.ts +2 -0
  433. package/dist/internal-debug.d.ts.map +1 -0
  434. package/dist/internal-debug.js +5 -0
  435. package/dist/internal-debug.js.map +1 -0
  436. package/dist/loader.d.ts +14 -0
  437. package/dist/loader.d.ts.map +1 -0
  438. package/dist/loader.js +20 -0
  439. package/dist/loader.js.map +1 -0
  440. package/dist/loader.rsc.d.ts +19 -0
  441. package/dist/loader.rsc.d.ts.map +1 -0
  442. package/dist/loader.rsc.js +99 -0
  443. package/dist/loader.rsc.js.map +1 -0
  444. package/dist/network-error-thrower.d.ts +17 -0
  445. package/dist/network-error-thrower.d.ts.map +1 -0
  446. package/dist/network-error-thrower.js +14 -0
  447. package/dist/network-error-thrower.js.map +1 -0
  448. package/dist/outlet-context.d.ts +13 -0
  449. package/dist/outlet-context.d.ts.map +1 -0
  450. package/dist/outlet-context.js +3 -0
  451. package/dist/outlet-context.js.map +1 -0
  452. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  453. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  454. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  455. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  456. package/dist/prerender/param-hash.d.ts +16 -0
  457. package/dist/prerender/param-hash.d.ts.map +1 -0
  458. package/dist/prerender/param-hash.js +36 -0
  459. package/dist/prerender/param-hash.js.map +1 -0
  460. package/dist/prerender/store.d.ts +38 -0
  461. package/dist/prerender/store.d.ts.map +1 -0
  462. package/dist/prerender/store.js +61 -0
  463. package/dist/prerender/store.js.map +1 -0
  464. package/dist/prerender.d.ts +66 -0
  465. package/dist/prerender.d.ts.map +1 -0
  466. package/dist/prerender.js +57 -0
  467. package/dist/prerender.js.map +1 -0
  468. package/dist/reverse.d.ts +196 -0
  469. package/dist/reverse.d.ts.map +1 -0
  470. package/dist/reverse.js +78 -0
  471. package/dist/reverse.js.map +1 -0
  472. package/dist/root-error-boundary.d.ts +33 -0
  473. package/dist/root-error-boundary.d.ts.map +1 -0
  474. package/dist/root-error-boundary.js +165 -0
  475. package/dist/root-error-boundary.js.map +1 -0
  476. package/dist/route-content-wrapper.d.ts +46 -0
  477. package/dist/route-content-wrapper.d.ts.map +1 -0
  478. package/dist/route-content-wrapper.js +77 -0
  479. package/dist/route-content-wrapper.js.map +1 -0
  480. package/dist/route-definition.d.ts +421 -0
  481. package/dist/route-definition.d.ts.map +1 -0
  482. package/dist/route-definition.js +868 -0
  483. package/dist/route-definition.js.map +1 -0
  484. package/dist/route-map-builder.d.ts +155 -0
  485. package/dist/route-map-builder.d.ts.map +1 -0
  486. package/dist/route-map-builder.js +237 -0
  487. package/dist/route-map-builder.js.map +1 -0
  488. package/dist/route-types.d.ts +165 -0
  489. package/dist/route-types.d.ts.map +1 -0
  490. package/dist/route-types.js +7 -0
  491. package/dist/route-types.js.map +1 -0
  492. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  493. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  494. package/dist/router/__tests__/handler-context.test.js +65 -0
  495. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  496. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  497. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  498. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  500. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  501. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  502. package/dist/router/__tests__/match-context.test.js +92 -0
  503. package/dist/router/__tests__/match-context.test.js.map +1 -0
  504. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  505. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  506. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  507. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  508. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  509. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  510. package/dist/router/__tests__/match-result.test.js +457 -0
  511. package/dist/router/__tests__/match-result.test.js.map +1 -0
  512. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  513. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  514. package/dist/router/__tests__/on-error.test.js +678 -0
  515. package/dist/router/__tests__/on-error.test.js.map +1 -0
  516. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  517. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  518. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  519. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  520. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  521. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  522. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  524. package/dist/router/error-handling.d.ts +77 -0
  525. package/dist/router/error-handling.d.ts.map +1 -0
  526. package/dist/router/error-handling.js +202 -0
  527. package/dist/router/error-handling.js.map +1 -0
  528. package/dist/router/handler-context.d.ts +20 -0
  529. package/dist/router/handler-context.d.ts.map +1 -0
  530. package/dist/router/handler-context.js +198 -0
  531. package/dist/router/handler-context.js.map +1 -0
  532. package/dist/router/intercept-resolution.d.ts +66 -0
  533. package/dist/router/intercept-resolution.d.ts.map +1 -0
  534. package/dist/router/intercept-resolution.js +246 -0
  535. package/dist/router/intercept-resolution.js.map +1 -0
  536. package/dist/router/loader-resolution.d.ts +64 -0
  537. package/dist/router/loader-resolution.d.ts.map +1 -0
  538. package/dist/router/loader-resolution.js +284 -0
  539. package/dist/router/loader-resolution.js.map +1 -0
  540. package/dist/router/logging.d.ts +15 -0
  541. package/dist/router/logging.d.ts.map +1 -0
  542. package/dist/router/logging.js +99 -0
  543. package/dist/router/logging.js.map +1 -0
  544. package/dist/router/manifest.d.ts +22 -0
  545. package/dist/router/manifest.d.ts.map +1 -0
  546. package/dist/router/manifest.js +181 -0
  547. package/dist/router/manifest.js.map +1 -0
  548. package/dist/router/match-api.d.ts +35 -0
  549. package/dist/router/match-api.d.ts.map +1 -0
  550. package/dist/router/match-api.js +406 -0
  551. package/dist/router/match-api.js.map +1 -0
  552. package/dist/router/match-context.d.ts +206 -0
  553. package/dist/router/match-context.d.ts.map +1 -0
  554. package/dist/router/match-context.js +17 -0
  555. package/dist/router/match-context.js.map +1 -0
  556. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  557. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  558. package/dist/router/match-middleware/background-revalidation.js +75 -0
  559. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  560. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  561. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  562. package/dist/router/match-middleware/cache-lookup.js +257 -0
  563. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  564. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  565. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  566. package/dist/router/match-middleware/cache-store.js +108 -0
  567. package/dist/router/match-middleware/cache-store.js.map +1 -0
  568. package/dist/router/match-middleware/index.d.ts +81 -0
  569. package/dist/router/match-middleware/index.d.ts.map +1 -0
  570. package/dist/router/match-middleware/index.js +80 -0
  571. package/dist/router/match-middleware/index.js.map +1 -0
  572. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  573. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  574. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  575. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  576. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  577. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  578. package/dist/router/match-middleware/segment-resolution.js +53 -0
  579. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  580. package/dist/router/match-pipelines.d.ts +147 -0
  581. package/dist/router/match-pipelines.d.ts.map +1 -0
  582. package/dist/router/match-pipelines.js +82 -0
  583. package/dist/router/match-pipelines.js.map +1 -0
  584. package/dist/router/match-result.d.ts +126 -0
  585. package/dist/router/match-result.d.ts.map +1 -0
  586. package/dist/router/match-result.js +93 -0
  587. package/dist/router/match-result.js.map +1 -0
  588. package/dist/router/metrics.d.ts +20 -0
  589. package/dist/router/metrics.d.ts.map +1 -0
  590. package/dist/router/metrics.js +47 -0
  591. package/dist/router/metrics.js.map +1 -0
  592. package/dist/router/middleware.d.ts +249 -0
  593. package/dist/router/middleware.d.ts.map +1 -0
  594. package/dist/router/middleware.js +434 -0
  595. package/dist/router/middleware.js.map +1 -0
  596. package/dist/router/middleware.test.d.ts +2 -0
  597. package/dist/router/middleware.test.d.ts.map +1 -0
  598. package/dist/router/middleware.test.js +816 -0
  599. package/dist/router/middleware.test.js.map +1 -0
  600. package/dist/router/pattern-matching.d.ts +149 -0
  601. package/dist/router/pattern-matching.d.ts.map +1 -0
  602. package/dist/router/pattern-matching.js +349 -0
  603. package/dist/router/pattern-matching.js.map +1 -0
  604. package/dist/router/revalidation.d.ts +44 -0
  605. package/dist/router/revalidation.d.ts.map +1 -0
  606. package/dist/router/revalidation.js +147 -0
  607. package/dist/router/revalidation.js.map +1 -0
  608. package/dist/router/router-context.d.ts +135 -0
  609. package/dist/router/router-context.d.ts.map +1 -0
  610. package/dist/router/router-context.js +36 -0
  611. package/dist/router/router-context.js.map +1 -0
  612. package/dist/router/segment-resolution.d.ts +127 -0
  613. package/dist/router/segment-resolution.d.ts.map +1 -0
  614. package/dist/router/segment-resolution.js +919 -0
  615. package/dist/router/segment-resolution.js.map +1 -0
  616. package/dist/router/trie-matching.d.ts +40 -0
  617. package/dist/router/trie-matching.d.ts.map +1 -0
  618. package/dist/router/trie-matching.js +127 -0
  619. package/dist/router/trie-matching.js.map +1 -0
  620. package/dist/router/types.d.ts +136 -0
  621. package/dist/router/types.d.ts.map +1 -0
  622. package/dist/router/types.js +7 -0
  623. package/dist/router/types.js.map +1 -0
  624. package/dist/router.d.ts +753 -0
  625. package/dist/router.d.ts.map +1 -0
  626. package/dist/router.gen.d.ts +6 -0
  627. package/dist/router.gen.d.ts.map +1 -0
  628. package/dist/router.gen.js +6 -0
  629. package/dist/router.gen.js.map +1 -0
  630. package/dist/router.js +1304 -0
  631. package/dist/router.js.map +1 -0
  632. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  633. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  634. package/dist/rsc/__tests__/helpers.test.js +140 -0
  635. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  636. package/dist/rsc/handler.d.ts +45 -0
  637. package/dist/rsc/handler.d.ts.map +1 -0
  638. package/dist/rsc/handler.js +1172 -0
  639. package/dist/rsc/handler.js.map +1 -0
  640. package/dist/rsc/helpers.d.ts +16 -0
  641. package/dist/rsc/helpers.d.ts.map +1 -0
  642. package/dist/rsc/helpers.js +55 -0
  643. package/dist/rsc/helpers.js.map +1 -0
  644. package/dist/rsc/index.d.ts +22 -0
  645. package/dist/rsc/index.d.ts.map +1 -0
  646. package/dist/rsc/index.js +23 -0
  647. package/dist/rsc/index.js.map +1 -0
  648. package/dist/rsc/nonce.d.ts +9 -0
  649. package/dist/rsc/nonce.d.ts.map +1 -0
  650. package/dist/rsc/nonce.js +18 -0
  651. package/dist/rsc/nonce.js.map +1 -0
  652. package/dist/rsc/types.d.ts +206 -0
  653. package/dist/rsc/types.d.ts.map +1 -0
  654. package/dist/rsc/types.js +8 -0
  655. package/dist/rsc/types.js.map +1 -0
  656. package/dist/search-params.d.ts +103 -0
  657. package/dist/search-params.d.ts.map +1 -0
  658. package/dist/search-params.js +74 -0
  659. package/dist/search-params.js.map +1 -0
  660. package/dist/segment-system.d.ts +75 -0
  661. package/dist/segment-system.d.ts.map +1 -0
  662. package/dist/segment-system.js +336 -0
  663. package/dist/segment-system.js.map +1 -0
  664. package/dist/server/context.d.ts +245 -0
  665. package/dist/server/context.d.ts.map +1 -0
  666. package/dist/server/context.js +197 -0
  667. package/dist/server/context.js.map +1 -0
  668. package/dist/server/fetchable-loader-store.d.ts +18 -0
  669. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  670. package/dist/server/fetchable-loader-store.js +18 -0
  671. package/dist/server/fetchable-loader-store.js.map +1 -0
  672. package/dist/server/handle-store.d.ts +85 -0
  673. package/dist/server/handle-store.d.ts.map +1 -0
  674. package/dist/server/handle-store.js +142 -0
  675. package/dist/server/handle-store.js.map +1 -0
  676. package/dist/server/loader-registry.d.ts +55 -0
  677. package/dist/server/loader-registry.d.ts.map +1 -0
  678. package/dist/server/loader-registry.js +132 -0
  679. package/dist/server/loader-registry.js.map +1 -0
  680. package/dist/server/request-context.d.ts +226 -0
  681. package/dist/server/request-context.d.ts.map +1 -0
  682. package/dist/server/request-context.js +290 -0
  683. package/dist/server/request-context.js.map +1 -0
  684. package/dist/server/root-layout.d.ts +4 -0
  685. package/dist/server/root-layout.d.ts.map +1 -0
  686. package/dist/server/root-layout.js +5 -0
  687. package/dist/server/root-layout.js.map +1 -0
  688. package/dist/server.d.ts +15 -0
  689. package/dist/server.d.ts.map +1 -0
  690. package/dist/server.js +20 -0
  691. package/dist/server.js.map +1 -0
  692. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  693. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  694. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  696. package/dist/ssr/index.d.ts +98 -0
  697. package/dist/ssr/index.d.ts.map +1 -0
  698. package/dist/ssr/index.js +158 -0
  699. package/dist/ssr/index.js.map +1 -0
  700. package/dist/static-handler.d.ts +50 -0
  701. package/dist/static-handler.d.ts.map +1 -0
  702. package/dist/static-handler.gen.d.ts +5 -0
  703. package/dist/static-handler.gen.d.ts.map +1 -0
  704. package/dist/static-handler.gen.js +5 -0
  705. package/dist/static-handler.gen.js.map +1 -0
  706. package/dist/static-handler.js +29 -0
  707. package/dist/static-handler.js.map +1 -0
  708. package/dist/theme/ThemeProvider.d.ts +20 -0
  709. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  710. package/dist/theme/ThemeProvider.js +240 -0
  711. package/dist/theme/ThemeProvider.js.map +1 -0
  712. package/dist/theme/ThemeScript.d.ts +48 -0
  713. package/dist/theme/ThemeScript.d.ts.map +1 -0
  714. package/dist/theme/ThemeScript.js +13 -0
  715. package/dist/theme/ThemeScript.js.map +1 -0
  716. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  717. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  718. package/dist/theme/__tests__/theme.test.js +103 -0
  719. package/dist/theme/__tests__/theme.test.js.map +1 -0
  720. package/dist/theme/constants.d.ts +29 -0
  721. package/dist/theme/constants.d.ts.map +1 -0
  722. package/dist/theme/constants.js +48 -0
  723. package/dist/theme/constants.js.map +1 -0
  724. package/dist/theme/index.d.ts +31 -0
  725. package/dist/theme/index.d.ts.map +1 -0
  726. package/dist/theme/index.js +36 -0
  727. package/dist/theme/index.js.map +1 -0
  728. package/dist/theme/theme-context.d.ts +40 -0
  729. package/dist/theme/theme-context.d.ts.map +1 -0
  730. package/dist/theme/theme-context.js +60 -0
  731. package/dist/theme/theme-context.js.map +1 -0
  732. package/dist/theme/theme-script.d.ts +27 -0
  733. package/dist/theme/theme-script.d.ts.map +1 -0
  734. package/dist/theme/theme-script.js +147 -0
  735. package/dist/theme/theme-script.js.map +1 -0
  736. package/dist/theme/types.d.ts +163 -0
  737. package/dist/theme/types.d.ts.map +1 -0
  738. package/dist/theme/types.js +11 -0
  739. package/dist/theme/types.js.map +1 -0
  740. package/dist/theme/use-theme.d.ts +12 -0
  741. package/dist/theme/use-theme.d.ts.map +1 -0
  742. package/dist/theme/use-theme.js +40 -0
  743. package/dist/theme/use-theme.js.map +1 -0
  744. package/dist/types/client-urls/server-projection.d.ts +4 -4
  745. package/dist/types/client-urls/types.d.ts +13 -12
  746. package/dist/types/outlet-context.d.ts +9 -0
  747. package/dist/types/outlet-provider.d.ts +2 -1
  748. package/dist/types/route-content-wrapper.d.ts +4 -1
  749. package/dist/types/route-definition/helpers-types.d.ts +6 -5
  750. package/dist/types/router/segment-resolution/loader-mask.d.ts +1 -1
  751. package/dist/types/rsc/nonce.d.ts +10 -0
  752. package/dist/types/rsc/shell-capture.d.ts +9 -0
  753. package/dist/types/rsc/types.d.ts +14 -2
  754. package/dist/types/server/context.d.ts +1 -1
  755. package/dist/types/server/request-context.d.ts +1 -1
  756. package/dist/types/ssr/index.d.ts +34 -0
  757. package/dist/types/ssr/ssr-root.d.ts +21 -0
  758. package/dist/types/ssr-suspension-warning.d.ts +20 -0
  759. package/dist/types/types/loader-types.d.ts +28 -22
  760. package/dist/types/types/segments.d.ts +17 -0
  761. package/dist/types/urls/path-helper-types.d.ts +8 -7
  762. package/dist/types/vite/discovery/state.d.ts +6 -0
  763. package/dist/types/vite/plugin-types.d.ts +27 -0
  764. package/dist/types/vite/plugins/virtual-entries.d.ts +1 -1
  765. package/dist/types/vite/utils/shared-utils.d.ts +1 -0
  766. package/dist/types.d.ts +1479 -0
  767. package/dist/types.d.ts.map +1 -0
  768. package/dist/types.js +10 -0
  769. package/dist/types.js.map +1 -0
  770. package/dist/urls.d.ts +441 -0
  771. package/dist/urls.d.ts.map +1 -0
  772. package/dist/urls.gen.d.ts +8 -0
  773. package/dist/urls.gen.d.ts.map +1 -0
  774. package/dist/urls.gen.js +8 -0
  775. package/dist/urls.gen.js.map +1 -0
  776. package/dist/urls.js +443 -0
  777. package/dist/urls.js.map +1 -0
  778. package/dist/use-loader.d.ts +127 -0
  779. package/dist/use-loader.d.ts.map +1 -0
  780. package/dist/use-loader.js +237 -0
  781. package/dist/use-loader.js.map +1 -0
  782. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  783. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  784. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  785. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  786. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  787. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  788. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  789. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  790. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  791. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  792. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  793. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  794. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  795. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  796. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  797. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  798. package/dist/vite/ast-handler-extract.d.ts +49 -0
  799. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  800. package/dist/vite/ast-handler-extract.js +249 -0
  801. package/dist/vite/ast-handler-extract.js.map +1 -0
  802. package/dist/vite/expose-action-id.d.ts +19 -0
  803. package/dist/vite/expose-action-id.d.ts.map +1 -0
  804. package/dist/vite/expose-action-id.js +250 -0
  805. package/dist/vite/expose-action-id.js.map +1 -0
  806. package/dist/vite/expose-id-utils.d.ts +69 -0
  807. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  808. package/dist/vite/expose-id-utils.js +289 -0
  809. package/dist/vite/expose-id-utils.js.map +1 -0
  810. package/dist/vite/expose-internal-ids.d.ts +22 -0
  811. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  812. package/dist/vite/expose-internal-ids.js +886 -0
  813. package/dist/vite/expose-internal-ids.js.map +1 -0
  814. package/dist/vite/index.d.ts +149 -0
  815. package/dist/vite/index.d.ts.map +1 -0
  816. package/dist/vite/index.js +58 -26
  817. package/dist/vite/index.js.bak +5448 -0
  818. package/dist/vite/index.js.map +1 -0
  819. package/dist/vite/index.named-routes.gen.ts +103 -0
  820. package/dist/vite/package-resolution.d.ts +43 -0
  821. package/dist/vite/package-resolution.d.ts.map +1 -0
  822. package/dist/vite/package-resolution.js +112 -0
  823. package/dist/vite/package-resolution.js.map +1 -0
  824. package/dist/vite/virtual-entries.d.ts +25 -0
  825. package/dist/vite/virtual-entries.d.ts.map +1 -0
  826. package/dist/vite/virtual-entries.js +110 -0
  827. package/dist/vite/virtual-entries.js.map +1 -0
  828. package/package.json +1 -1
  829. package/skills/breadcrumbs/SKILL.md +2 -2
  830. package/skills/catalog.json +2 -2
  831. package/skills/client-urls/SKILL.md +9 -8
  832. package/skills/comparison/references/framework-comparison.md +2 -2
  833. package/skills/hooks/data.md +1 -1
  834. package/skills/hooks/handle-and-actions.md +1 -1
  835. package/skills/loader/SKILL.md +46 -30
  836. package/skills/migrate-nextjs/SKILL.md +3 -3
  837. package/skills/migrate-react-router/component-migration.md +1 -1
  838. package/skills/migrate-react-router/data-and-actions.md +1 -1
  839. package/skills/migrate-react-router/route-mapping.md +1 -1
  840. package/skills/parallel/SKILL.md +1 -1
  841. package/skills/ppr/SKILL.md +1 -1
  842. package/skills/rango/SKILL.md +20 -20
  843. package/skills/router-setup/SKILL.md +1 -1
  844. package/skills/scripts/SKILL.md +1 -1
  845. package/skills/shell-manifest/SKILL.md +1 -1
  846. package/src/browser/merge-segment-loaders.ts +4 -0
  847. package/src/browser/react/Link.tsx +27 -4
  848. package/src/client-urls/client-urls.ts +12 -9
  849. package/src/client-urls/server-projection.ts +6 -6
  850. package/src/client-urls/types.ts +13 -12
  851. package/src/client.tsx +2 -0
  852. package/src/outlet-context.ts +9 -0
  853. package/src/outlet-provider.tsx +4 -0
  854. package/src/route-content-wrapper.tsx +7 -0
  855. package/src/route-definition/dsl-helpers.ts +7 -3
  856. package/src/route-definition/helpers-types.ts +6 -5
  857. package/src/router/loader-resolution.ts +3 -3
  858. package/src/router/segment-resolution/fresh.ts +50 -19
  859. package/src/router/segment-resolution/loader-cache.ts +1 -1
  860. package/src/router/segment-resolution/loader-mask.ts +1 -1
  861. package/src/router.ts +7 -2
  862. package/src/rsc/handler.ts +4 -4
  863. package/src/rsc/nonce.ts +16 -0
  864. package/src/rsc/rsc-rendering.ts +10 -0
  865. package/src/rsc/shell-capture.ts +49 -6
  866. package/src/rsc/ssr-setup.ts +4 -0
  867. package/src/rsc/types.ts +24 -4
  868. package/src/segment-system.tsx +57 -12
  869. package/src/server/context.ts +1 -1
  870. package/src/server/request-context.ts +1 -1
  871. package/src/ssr/index.tsx +75 -3
  872. package/src/ssr/ssr-root.tsx +67 -23
  873. package/src/ssr-suspension-warning.ts +68 -0
  874. package/src/types/loader-types.ts +25 -19
  875. package/src/types/segments.ts +17 -0
  876. package/src/urls/path-helper-types.ts +8 -7
  877. package/src/use-loader.tsx +24 -1
  878. package/src/vite/discovery/shell-prerender-phase.ts +5 -0
  879. package/src/vite/discovery/state.ts +6 -0
  880. package/src/vite/plugin-types.ts +28 -0
  881. package/src/vite/plugins/virtual-entries.ts +26 -3
  882. package/src/vite/rango.ts +3 -0
  883. package/src/vite/router-discovery.ts +31 -19
  884. package/src/vite/utils/shared-utils.ts +8 -2
@@ -87,12 +87,12 @@ export interface ClientUrlLoaderRecord {
87
87
  /** Client-run per-loader revalidation predicates; empty = locked defaults. */
88
88
  readonly revalidate: readonly ClientRevalidateFn[];
89
89
  /**
90
- * loader(Def, { stream: "navigation" }): document renders await this loader
91
- * before first flush (see {@link LoaderOptions}). Projected into the server
92
- * tree, where the per-isSSR entry stamping applies — client navigations
93
- * stream regardless.
90
+ * loader(Def, { ssr: false }): document renders await this loader before
91
+ * first flush (see {@link LoaderOptions}). Projected into the server tree,
92
+ * where the per-isSSR entry stamping applies — client navigations stream
93
+ * regardless.
94
94
  */
95
- readonly stream?: "navigation";
95
+ readonly ssr?: false;
96
96
  }
97
97
 
98
98
  /**
@@ -141,13 +141,14 @@ export interface ClientUrlHelpers {
141
141
  * revalidate() only — a CLIENT-RUN per-loader predicate; its decision (not
142
142
  * the function) is sent with the revalidation request.
143
143
  *
144
- * Pass `{ stream: "navigation" }` to await this loader before first flush
145
- * on DOCUMENT requests (see {@link LoaderOptions}) the opt-in for loaders
146
- * whose data, handle pushes, or thrown notFound()/redirect() must be in the
147
- * SSR'd HTML. Per-loader: a dynamic sibling keeps streaming. Under a
148
- * `ppr` group route the flag BAKES: the loader executes at shell capture
149
- * and its settled return freezes into the shell (nested promises stay
150
- * live holes).
144
+ * Pass `{ ssr: false }` the same knob as loading(fallback, { ssr:
145
+ * false }) to await this loader before first flush on DOCUMENT requests
146
+ * (see {@link LoaderOptions}): the opt-in for loaders whose data, handle
147
+ * pushes, or thrown notFound()/redirect() must be in the SSR'd HTML.
148
+ * Per-loader: a streaming sibling keeps streaming. Under a `ppr` group
149
+ * route the flag BAKES: the loader executes at shell capture and its
150
+ * settled return freezes into the shell (nested promises stay live
151
+ * holes).
151
152
  */
152
153
  readonly loader: <TData>(
153
154
  definition: LoaderDefinition<TData>,
package/src/client.tsx CHANGED
@@ -49,6 +49,8 @@ function renderSlotContent(segment: ResolvedSegment | null): ReactNode {
49
49
  <LoaderBoundary
50
50
  loaderDataPromise={segment.loaderDataPromise!}
51
51
  loaderIds={segment.loaderIds!}
52
+ loaderStreams={segment.loaderStreams}
53
+ awaitedLoaderIds={segment.awaitedLoaderIds}
52
54
  fallback={segment.loading}
53
55
  outletKey={segment.id + "-loader"}
54
56
  outletContent={null}
@@ -18,6 +18,15 @@ export interface OutletContextValue {
18
18
  * the resolved `loaderData` record.
19
19
  */
20
20
  loaderStreams?: Record<string, unknown>;
21
+ /**
22
+ * Loader $$ids on this segment that the render awaited before first flush
23
+ * (loader(Def, { ssr: false })). Dev-diagnostic input only: useLoader uses
24
+ * it to warn when a read still suspends during SSR on a render that awaited
25
+ * flagged loaders (ssr-suspension-warning.ts). Present only on streaming
26
+ * lanes with flagged loaders (document and shell-capture renders); absent
27
+ * on forceAwait/action lanes.
28
+ */
29
+ awaitedLoaderIds?: readonly string[];
21
30
  parent?: OutletContextValue | null;
22
31
  /** Loading component for Suspense fallback (from segment's loading() definition) */
23
32
  loading?: ReactNode;
@@ -13,6 +13,7 @@ export function OutletProvider({
13
13
  segment,
14
14
  loaderData,
15
15
  loaderStreams,
16
+ awaitedLoaderIds,
16
17
  pending = false,
17
18
  children,
18
19
  }: {
@@ -21,6 +22,7 @@ export function OutletProvider({
21
22
  segment?: ResolvedSegment;
22
23
  loaderData?: Record<string, any>;
23
24
  loaderStreams?: Record<string, unknown>;
25
+ awaitedLoaderIds?: readonly string[];
24
26
  pending?: boolean;
25
27
  children: ReactNode;
26
28
  }): ReactNode {
@@ -34,6 +36,7 @@ export function OutletProvider({
34
36
  segment,
35
37
  loaderData,
36
38
  loaderStreams,
39
+ awaitedLoaderIds,
37
40
  pending,
38
41
  parent: parentContext,
39
42
  loading: segment?.loading,
@@ -44,6 +47,7 @@ export function OutletProvider({
44
47
  segment,
45
48
  loaderData,
46
49
  loaderStreams,
50
+ awaitedLoaderIds,
47
51
  pending,
48
52
  parentContext,
49
53
  ],
@@ -129,6 +129,9 @@ export interface LoaderBoundaryProps {
129
129
  * the children; useLoader suspends per loader at the read site.
130
130
  */
131
131
  loaderStreams?: Record<string, unknown>;
132
+ /** Dev-diagnostic input for the SSR suspension warning — see
133
+ * OutletContextValue.awaitedLoaderIds. Rides the streams lane only. */
134
+ awaitedLoaderIds?: readonly string[];
132
135
  fallback?: ReactNode;
133
136
  outletKey: string;
134
137
  outletContent: ReactNode;
@@ -141,6 +144,7 @@ export function LoaderBoundary({
141
144
  loaderDataPromise,
142
145
  loaderIds,
143
146
  loaderStreams,
147
+ awaitedLoaderIds,
144
148
  fallback,
145
149
  outletKey,
146
150
  outletContent,
@@ -154,6 +158,7 @@ export function LoaderBoundary({
154
158
  loaderDataPromise={loaderDataPromise}
155
159
  loaderIds={loaderIds}
156
160
  loaderStreams={loaderStreams}
161
+ awaitedLoaderIds={awaitedLoaderIds}
157
162
  outletKey={outletKey}
158
163
  outletContent={outletContent}
159
164
  segment={segment}
@@ -187,6 +192,7 @@ function LoaderResolver({
187
192
  loaderDataPromise,
188
193
  loaderIds,
189
194
  loaderStreams,
195
+ awaitedLoaderIds,
190
196
  outletKey,
191
197
  outletContent,
192
198
  segment,
@@ -201,6 +207,7 @@ function LoaderResolver({
201
207
  segment={segment}
202
208
  parallel={parallel}
203
209
  loaderStreams={loaderStreams}
210
+ awaitedLoaderIds={awaitedLoaderIds}
204
211
  >
205
212
  {children}
206
213
  </OutletProvider>
@@ -807,8 +807,12 @@ const loader: RouteHelpers<any, any>["loader"] = (
807
807
  "loader() received two use() callbacks. Pass loader(Def, options, use) or loader(Def, use).",
808
808
  );
809
809
  invariant(
810
- optionsGiven?.stream === undefined || optionsGiven.stream === "navigation",
811
- `loader() stream must be "navigation" (got ${JSON.stringify(optionsGiven?.stream)}). Omit it to stream on every render.`,
810
+ (optionsGiven as { stream?: unknown } | undefined)?.stream === undefined,
811
+ "loader() stream was replaced: use loader(Def, { ssr: false }) — the same knob as loading(fallback, { ssr: false }) to await the loader before first flush on document requests.",
812
+ );
813
+ invariant(
814
+ optionsGiven?.ssr === undefined || typeof optionsGiven.ssr === "boolean",
815
+ `loader() ssr must be a boolean (got ${JSON.stringify(optionsGiven?.ssr)}). Omit it (or pass true) to stream on every render.`,
812
816
  );
813
817
 
814
818
  const name = `${ctx.namespace}.$${store.getNextIndex("loader")}`;
@@ -820,7 +824,7 @@ const loader: RouteHelpers<any, any>["loader"] = (
820
824
  const loaderEntry: LoaderEntry = {
821
825
  loader: loaderDef,
822
826
  revalidate: [] as ShouldRevalidateFn<any, any>[],
823
- ...(optionsGiven?.stream === "navigation" && ctx.isSSR
827
+ ...(optionsGiven?.ssr === false && ctx.isSSR
824
828
  ? { awaitBeforeFlush: true as const }
825
829
  : {}),
826
830
  };
@@ -310,13 +310,14 @@ export type RouteHelpers<T extends RouteDefinition, TEnv> = {
310
310
  * return <div>{data.name}</div>;
311
311
  * }
312
312
  * ```
313
- * Pass `{ stream: "navigation" }` to await this loader before first flush on
314
- * DOCUMENT requests (see {@link LoaderOptions}) — the opt-in for loaders whose
315
- * data, handle pushes, or thrown notFound()/redirect() must be in the SSR'd
316
- * HTML. Per-loader: a dynamic sibling in the same segment keeps streaming.
313
+ * Pass `{ ssr: false }` the same knob as loading(fallback, { ssr:
314
+ * false }) — to await this loader before first flush on DOCUMENT requests
315
+ * (see {@link LoaderOptions}): the opt-in for loaders whose data, handle
316
+ * pushes, or thrown notFound()/redirect() must be in the SSR'd HTML.
317
+ * Per-loader: a streaming sibling in the same segment keeps streaming.
317
318
  *
318
319
  * ```typescript
319
- * loader(ProductLoader, { stream: "navigation" }, () => [cache()]),
320
+ * loader(ProductLoader, { ssr: false }, () => [cache()]),
320
321
  * loader(RecommendationsLoader), // still streams behind loading()
321
322
  * ```
322
323
  *
@@ -572,7 +572,7 @@ function createLoaderExecutor<TEnv>(
572
572
  }
573
573
 
574
574
  // awaitBeforeFlush cycle: segment resolution awaits this loader
575
- // (loader(Def, { stream: "navigation" })), the barrier awaits segment
575
+ // (loader(Def, { ssr: false })), the barrier awaits segment
576
576
  // resolution, and rendered() awaits the barrier — waiting here can
577
577
  // never complete. Fail fast with the cause instead of hanging the
578
578
  // document render. Only document renders populate the set (the flag is
@@ -581,10 +581,10 @@ function createLoaderExecutor<TEnv>(
581
581
  if (reqCtx._awaitBeforeFlushLoaderIds?.has(currentLoaderId)) {
582
582
  throw new Error(
583
583
  `Deadlock: loader "${currentLoaderId}" is registered with ` +
584
- `stream: "navigation", so the document render awaits it before ` +
584
+ `ssr: false, so the document render awaits it before ` +
585
585
  `the render barrier resolves — ctx.rendered() (and the ` +
586
586
  `ctx.get(handle) read it gates) can never settle here. Drop ` +
587
- `stream: "navigation" on this loader or move the handle read to ` +
587
+ `ssr: false on this loader or move the handle read to ` +
588
588
  `a component.`,
589
589
  );
590
590
  }
@@ -11,6 +11,7 @@ import {
11
11
  getParallelEntries,
12
12
  getParallelSlotEntries,
13
13
  type EntryData,
14
+ type LoaderEntry,
14
15
  } from "../../server/context";
15
16
  import type {
16
17
  HandlerContext,
@@ -45,6 +46,37 @@ import {
45
46
  latchPprHeaderScopeForEntries,
46
47
  } from "../../server/context.js";
47
48
 
49
+ /**
50
+ * Register flagged loader $$ids on the request context and return their
51
+ * indices. Must run BEFORE kickoff: rendered() checks the set to fail
52
+ * fast on the barrier cycle (resolution awaits the loader, the barrier
53
+ * awaits resolution).
54
+ */
55
+ function registerAwaitBeforeFlushIds(loaderEntries: LoaderEntry[]): number[] {
56
+ const awaitedIndices: number[] = [];
57
+ for (let i = 0; i < loaderEntries.length; i++) {
58
+ if (loaderEntries[i]!.awaitBeforeFlush) awaitedIndices.push(i);
59
+ }
60
+ if (awaitedIndices.length > 0) {
61
+ const reqCtx = _getRequestContext();
62
+ if (reqCtx) {
63
+ reqCtx._awaitBeforeFlushLoaderIds ??= new Set();
64
+ for (const i of awaitedIndices) {
65
+ reqCtx._awaitBeforeFlushLoaderIds.add(loaderEntries[i]!.loader.$$id);
66
+ }
67
+ }
68
+ }
69
+ return awaitedIndices;
70
+ }
71
+
72
+ function stampAwaitBeforeFlush(
73
+ loaderEntry: LoaderEntry,
74
+ ): { awaitBeforeFlush: true } | Record<string, never> {
75
+ return loaderEntry.awaitBeforeFlush === true
76
+ ? { awaitBeforeFlush: true as const }
77
+ : {};
78
+ }
79
+
48
80
  // ---------------------------------------------------------------------------
49
81
  // Fresh path (full match, no revalidation)
50
82
  // ---------------------------------------------------------------------------
@@ -104,7 +136,7 @@ export async function resolveLoaders<TEnv>(
104
136
  const errorContext = buildLoaderErrorContext(ctx);
105
137
 
106
138
  if (emitStreaming) {
107
- // awaitBeforeFlush (loader(Def, { stream: "navigation" })): document
139
+ // awaitBeforeFlush (loader(Def, { ssr: false })): document
108
140
  // renders await these loaders before returning, so their data is settled,
109
141
  // their handle pushes beat the barrier snapshot, and a thrown notFound()'s
110
142
  // status write deterministically precedes Response construction. The ids
@@ -112,23 +144,12 @@ export async function resolveLoaders<TEnv>(
112
144
  // the set to fail fast on the barrier cycle (segment resolution awaits the
113
145
  // loader, the barrier awaits segment resolution, rendered() awaits the
114
146
  // barrier), and the loader body can call rendered() before the await below
115
- // is reached. Skipped during shell capture: LIVE-lane loaders are masked
116
- // with never-resolving promises there (loader-mask.ts) and would hang.
117
- const awaitedIndices: number[] = [];
118
- if (!isShellCaptureActive()) {
119
- for (let i = 0; i < loaderEntries.length; i++) {
120
- if (loaderEntries[i]!.awaitBeforeFlush) awaitedIndices.push(i);
121
- }
122
- }
123
- if (awaitedIndices.length > 0) {
124
- const reqCtx = _getRequestContext();
125
- if (reqCtx) {
126
- reqCtx._awaitBeforeFlushLoaderIds ??= new Set();
127
- for (const i of awaitedIndices) {
128
- reqCtx._awaitBeforeFlushLoaderIds.add(loaderEntries[i]!.loader.$$id);
129
- }
130
- }
131
- }
147
+ // is reached.
148
+ //
149
+ // Shell-capture renders await too: flagged loaders BAKE at capture
150
+ // (loader-mask masks only LIVE-lane loaders). Capture must await them so
151
+ // bake-lane handle pushes land in the prelude.
152
+ const awaitedIndices = registerAwaitBeforeFlushIds(loaderEntries);
132
153
 
133
154
  // Streaming loaders: promises kick off now, settle during RSC serialization.
134
155
  const segments = loaderEntries.map((loaderEntry, i) => {
@@ -142,13 +163,17 @@ export async function resolveLoaders<TEnv>(
142
163
  component: null,
143
164
  params: ctx.params,
144
165
  loaderId: loader.$$id,
166
+ // Stamped on document AND capture renders: segment-system's
167
+ // value-delivery await and the dev SSR-suspension diagnostic both
168
+ // key off it.
169
+ ...stampAwaitBeforeFlush(loaderEntry),
145
170
  loaderData: deps.wrapLoaderPromise(
146
171
  runInsideLoaderScope(() =>
147
172
  resolveLoaderData(
148
173
  loaderEntry,
149
174
  ctx,
150
175
  ctx.pathname,
151
- // The bake key rides for flagged loaders too: stream:"navigation"
176
+ // The bake key rides for flagged loaders too: ssr:false
152
177
  // bakes at capture regardless of the entry's loading() lane
153
178
  // (loader-cache.ts capture branch) and its HIT-tail seed
154
179
  // overlay needs the same key.
@@ -188,6 +213,11 @@ export async function resolveLoaders<TEnv>(
188
213
  // collapsing the whole entry and discarding successful sibling data, and
189
214
  // (2) leave the other in-flight raw promises without a .catch, producing
190
215
  // unhandled rejections. Mirrors the loading path and intercept-resolution.
216
+ //
217
+ // Flagged loaders still get awaitBeforeFlush stamped: auto-raise and
218
+ // settled-value delivery key off the field, and this path already paid
219
+ // the pre-flush await.
220
+ registerAwaitBeforeFlushIds(loaderEntries);
191
221
  const pendingLoaderData = loaderEntries.map((loaderEntry, i) => {
192
222
  const { loader } = loaderEntry;
193
223
  const segmentId = `${shortCode}D${i}.${loader.$$id}`;
@@ -224,6 +254,7 @@ export async function resolveLoaders<TEnv>(
224
254
  component: null,
225
255
  params: ctx.params,
226
256
  loaderId: loader.$$id,
257
+ ...stampAwaitBeforeFlush(loaderEntry),
227
258
  loaderData: pending.wrapped,
228
259
  belongsToRoute,
229
260
  };
@@ -159,7 +159,7 @@ export function resolveLoaderData<TEnv>(
159
159
  if (isShellCaptureActive(reqCtx)) {
160
160
  // Capture lane, per LOADER (not per entry):
161
161
  //
162
- // - `stream: "navigation"` (awaitBeforeFlush) — the BAKE lane. The flag's
162
+ // - `ssr: false` (awaitBeforeFlush) — the BAKE lane. The flag's
163
163
  // document promise is "this loader's data is in the HTML before first
164
164
  // flush"; under ppr the pre-flush HTML IS the frozen prelude, so the
165
165
  // loader executes at capture and its SETTLED return bakes into the
@@ -44,7 +44,7 @@ export { createMaskedLoaderPromise } from "./mask-nested.js";
44
44
  /**
45
45
  * Entry-level lane input for an entry's loaders under PPR (the loading()
46
46
  * value; docs/design/loader-container-bake.md). The CAPTURE decision itself
47
- * is per LOADER in loader-cache.ts: a `stream: "navigation"`
47
+ * is per LOADER in loader-cache.ts: an `ssr: false`
48
48
  * (awaitBeforeFlush) loader BAKES at capture regardless of this value — the
49
49
  * flag's document promise ("data in the HTML before first flush") maps to
50
50
  * the frozen prelude — while every other loader is LIVE (masked at capture,
package/src/router.ts CHANGED
@@ -1167,11 +1167,16 @@ export function createRouter<TEnv = any>(
1167
1167
  | null = null;
1168
1168
 
1169
1169
  return async (request: Request, input: RouterRequestInput<TEnv> = {}) => {
1170
+ const requestedDiscoveryEpoch = request.headers.get(
1171
+ DEV_DISCOVERY_PROBE_HEADER,
1172
+ );
1170
1173
  if (
1171
1174
  devDiscoveryEpoch !== undefined &&
1172
- request.headers.get(DEV_DISCOVERY_PROBE_HEADER) ===
1173
- String(devDiscoveryEpoch)
1175
+ requestedDiscoveryEpoch !== null
1174
1176
  ) {
1177
+ // A stale generation must still answer as a probe. Rendering the app
1178
+ // on an epoch mismatch makes the readiness loop overlap full renders
1179
+ // with workerd reloads and can exhaust the dev server heap.
1175
1180
  return new Response(null, {
1176
1181
  headers: {
1177
1182
  [DEV_DISCOVERY_EPOCH_HEADER]: String(devDiscoveryEpoch),
@@ -45,7 +45,7 @@ import {
45
45
  handleResponseRoute,
46
46
  type ResponseRouteMatch,
47
47
  } from "./response-route-handler.js";
48
- import { generateNonce, nonce as nonceToken } from "./nonce.js";
48
+ import { nonce as nonceToken, resolveProviderNonce } from "./nonce.js";
49
49
  import { VERSION } from "@rangojs/router:version";
50
50
  import type { ErrorPhase } from "../types.js";
51
51
  import type { RouterRequestInput } from "../router/router-interfaces.js";
@@ -456,12 +456,12 @@ export function createRSCHandler<
456
456
  }
457
457
  }
458
458
 
459
- // Resolve nonce if provider is set
459
+ // Resolve nonce if provider is set. false/"" normalize to undefined —
460
+ // the per-request opt-out (resolveProviderNonce).
460
461
  const nonceStart = performance.now();
461
462
  let nonce: string | undefined;
462
463
  if (nonceProvider) {
463
- const result = await nonceProvider(request, env);
464
- nonce = result === true ? generateNonce() : result;
464
+ nonce = resolveProviderNonce(await nonceProvider(request, env));
465
465
  }
466
466
  const nonceDur = performance.now() - nonceStart;
467
467
 
package/src/rsc/nonce.ts CHANGED
@@ -25,6 +25,22 @@ import { createVar } from "../context-var.js";
25
25
  */
26
26
  export const nonce: ContextVar<string> = createVar<string>();
27
27
 
28
+ /**
29
+ * Normalize a NonceProvider return value to the nonce the request runs with.
30
+ * `true` auto-generates; `false` and the empty string are the per-request
31
+ * opt-out and normalize to undefined — without this, a falsy string would be
32
+ * threaded as-is into the render: never written to the token (`if (nonce)`)
33
+ * yet still `!== undefined` for the ppr shell gate (rsc-rendering.ts
34
+ * activeNonce), pinning a ppr route to axis 1 with no way to opt a request
35
+ * out while keeping the provider for the rest of the app.
36
+ */
37
+ export function resolveProviderNonce(
38
+ result: string | boolean,
39
+ ): string | undefined {
40
+ if (result === true) return generateNonce();
41
+ return result === false || result === "" ? undefined : result;
42
+ }
43
+
28
44
  /**
29
45
  * Generate a cryptographic nonce for CSP.
30
46
  * Returns a 16-byte random value encoded as base64.
@@ -155,6 +155,7 @@ function createShellCaptureDescriptor(
155
155
  ctx: HandlerContext<any>,
156
156
  key: string,
157
157
  searchSeed: string,
158
+ originSeed: string,
158
159
  pprConfig: ResolvedPprConfig,
159
160
  store: SegmentCacheStore<any>,
160
161
  navigationOnly?: true,
@@ -162,6 +163,11 @@ function createShellCaptureDescriptor(
162
163
  return {
163
164
  key,
164
165
  searchSeed,
166
+ // Derived from the same request URL as the key (the callers compute
167
+ // both next to each other, so they cannot drift): seeding the origin
168
+ // keeps origin-dependent static markup (Link's data-external)
169
+ // identical across capture, resume, and browser hydration.
170
+ originSeed,
165
171
  buildVersion: ctx.version,
166
172
  ttl: pprConfig.ttl,
167
173
  swr: pprConfig.swr,
@@ -519,6 +525,7 @@ function* shellServePlan<TEnv>(
519
525
  ctx,
520
526
  key,
521
527
  shellSearchSeed(url, reqCtx._searchParamsFilter),
528
+ url.origin,
522
529
  pprConfig,
523
530
  store,
524
531
  );
@@ -1004,6 +1011,7 @@ function scheduleNavigationShellCapture<TEnv>(
1004
1011
  partialCaptureKey ??
1005
1012
  buildNavigationShellKey(url, reqCtx._searchParamsFilter),
1006
1013
  shellSearchSeed(url, reqCtx._searchParamsFilter),
1014
+ url.origin,
1007
1015
  pprConfig,
1008
1016
  store,
1009
1017
  true,
@@ -1524,6 +1532,8 @@ function serveShellHit(
1524
1532
  // The shell key's own search — identical to the capture seed for
1525
1533
  // this key, so the resume tree matches the captured tree.
1526
1534
  search: shellSearchSeed(url, reqCtx._searchParamsFilter),
1535
+ // The HIT request's origin — same host as the capture's (key-scoped).
1536
+ origin: url.origin,
1527
1537
  }),
1528
1538
  );
1529
1539
  };
@@ -45,7 +45,10 @@ import {
45
45
  maskNestedContainerThenables,
46
46
  type MaskReport,
47
47
  } from "../router/segment-resolution/mask-nested.js";
48
- import { isInsideLoaderScope } from "../server/context.js";
48
+ import {
49
+ getCurrentLoaderBodyId,
50
+ isInsideLoaderScope,
51
+ } from "../server/context.js";
49
52
  import { isThenable } from "../handles/is-thenable.js";
50
53
  import type {
51
54
  ShellCacheEntry,
@@ -917,6 +920,15 @@ export interface ShellCaptureDescriptor {
917
920
  * Omitted (build-time bare-pathname captures) = search-less, same as "".
918
921
  */
919
922
  searchSeed?: string;
923
+ /**
924
+ * The scheduling request's origin, seeding the capture render's SSR store
925
+ * location. Shell keys are host-scoped, so the resume pass's request
926
+ * agrees modulo protocol drift; the seed keeps origin-dependent static
927
+ * markup (Link's data-external) identical across capture, resume, and
928
+ * browser hydration. Omitted (build-time host-agnostic captures) falls
929
+ * back to the internal host.
930
+ */
931
+ originSeed?: string;
920
932
  /**
921
933
  * The RSC handler's build version (HandlerContext.version), stamped into the
922
934
  * stored entry as ShellCacheEntry.buildVersion — the serve-side
@@ -1494,6 +1506,15 @@ export function deriveShellCaptureContext(
1494
1506
  // applied ONLY at the captureHandles cache-write call site — every other
1495
1507
  // getDataForSegment consumer (the render-barrier snapshot, prerender)
1496
1508
  // sees every push.
1509
+ // EXCEPTION — bake-lane { ssr: false } loaders: they execute at capture
1510
+ // and never re-run on a HIT, so neither exclusion rationale applies. The
1511
+ // capture awaits them (fresh.ts), their pushes are in the captured HTML
1512
+ // (<head> title/meta, useHandle echoes), and the stored snapshot MUST
1513
+ // carry the same values or HIT hydration mismatches against its own
1514
+ // prelude (server text present, client handle empty). Only their
1515
+ // settled, thenable-free pushes qualify — a deferred (thenable) push or
1516
+ // one with masked nested promises keeps the exclusion so the handle
1517
+ // encode cannot stall on a never-resolving mask.
1497
1518
  const handleLiveness = {
1498
1519
  holes: false,
1499
1520
  pendingPushes: 0,
@@ -1509,11 +1530,13 @@ export function deriveShellCaptureContext(
1509
1530
  const pushedInLoaderScope = isInsideLoaderScope();
1510
1531
  // Single walk: the mask reports whether it masked any nested thenable
1511
1532
  // (the liveness declaration) while building the capture copy.
1533
+ let maskedNestedThenable = false;
1512
1534
  const maskWithLiveness = (v: unknown): unknown => {
1513
1535
  const report: MaskReport = { thenable: false };
1514
1536
  const masked = maskNestedContainerThenables(v, undefined, report);
1515
- if (!pushedInLoaderScope && report.thenable) {
1516
- handleLiveness.holes = true;
1537
+ if (report.thenable) {
1538
+ maskedNestedThenable = true;
1539
+ if (!pushedInLoaderScope) handleLiveness.holes = true;
1517
1540
  }
1518
1541
  return masked;
1519
1542
  };
@@ -1525,11 +1548,30 @@ export function deriveShellCaptureContext(
1525
1548
  value.then(settle, settle);
1526
1549
  }
1527
1550
  masked = value.then(maskWithLiveness);
1551
+ // Deferred (thenable) loader pushes always keep the exclusion — the
1552
+ // bake-lane carve-out below is for settled values only.
1553
+ if (pushedInLoaderScope) {
1554
+ loaderScopedPushValues.add(masked as object);
1555
+ }
1528
1556
  } else {
1529
1557
  masked = maskWithLiveness(value);
1530
- }
1531
- if (pushedInLoaderScope && typeof masked === "object" && masked !== null) {
1532
- loaderScopedPushValues.add(masked);
1558
+ if (
1559
+ pushedInLoaderScope &&
1560
+ typeof masked === "object" &&
1561
+ masked !== null
1562
+ ) {
1563
+ // Bake-lane { ssr: false } loader pushes are shell material (see the
1564
+ // funnel comment above): keep them IN the stored snapshot when
1565
+ // settled and thenable-free; everything else stays excluded.
1566
+ const bodyLoaderId = getCurrentLoaderBodyId();
1567
+ const baked =
1568
+ bodyLoaderId !== undefined &&
1569
+ !maskedNestedThenable &&
1570
+ derivedCtx._awaitBeforeFlushLoaderIds?.has(bodyLoaderId) === true;
1571
+ if (!baked) {
1572
+ loaderScopedPushValues.add(masked);
1573
+ }
1574
+ }
1533
1575
  }
1534
1576
  rawCapturePush(handleName, segmentId, masked);
1535
1577
  };
@@ -1767,6 +1809,7 @@ async function captureAndStoreShell(
1767
1809
  // The shell key's own search seeds the capture render's store —
1768
1810
  // static-part search reads bake what the key names.
1769
1811
  search: capture.searchSeed,
1812
+ origin: capture.originSeed,
1770
1813
  }),
1771
1814
  );
1772
1815
  } catch (error) {
@@ -120,6 +120,10 @@ export function createSsrHtmlStage<TEnv>(
120
120
  ...options.render,
121
121
  streamMode,
122
122
  search: options.url.search,
123
+ // origin: same out-of-band channel — seeds the SSR store location
124
+ // so origin-dependent markup (Link's data-external) agrees with the
125
+ // browser's window.location across hydration.
126
+ origin: options.url.origin,
123
127
  }),
124
128
  ...(options.init && { init: options.init }),
125
129
  };
package/src/rsc/types.ts CHANGED
@@ -187,6 +187,12 @@ export interface SSRRenderOptions {
187
187
  * search; see ShellCaptureOptions.search in the SSR entry).
188
188
  */
189
189
  search?: string;
190
+ /**
191
+ * The live request's origin (`url.origin`), seeding the SSR store
192
+ * location so origin-dependent markup (Link's data-external) agrees with
193
+ * the browser across hydration. Absent on host-agnostic build captures.
194
+ */
195
+ origin?: string;
190
196
  }
191
197
 
192
198
  /**
@@ -208,7 +214,12 @@ export interface SSRModule {
208
214
  */
209
215
  captureShellHTML?: (
210
216
  rscStream: ReadableStream<Uint8Array>,
211
- options: { quiesce: Promise<void>; maxWaitMs?: number; search?: string },
217
+ options: {
218
+ quiesce: Promise<void>;
219
+ maxWaitMs?: number;
220
+ search?: string;
221
+ origin?: string;
222
+ },
212
223
  ) => Promise<{ prelude: Uint8Array; postponed: string | null } | null>;
213
224
 
214
225
  /**
@@ -221,7 +232,12 @@ export interface SSRModule {
221
232
  */
222
233
  resumeShellHTML?: (
223
234
  rscStream: ReadableStream<Uint8Array>,
224
- options: { postponed: string | null; nonce?: string; search?: string },
235
+ options: {
236
+ postponed: string | null;
237
+ nonce?: string;
238
+ search?: string;
239
+ origin?: string;
240
+ },
225
241
  ) => Promise<ReadableStream<Uint8Array>>;
226
242
  }
227
243
 
@@ -260,12 +276,16 @@ export interface HandlerCacheConfig {
260
276
 
261
277
  /**
262
278
  * Nonce provider function type.
263
- * Can return a nonce string, or true to auto-generate one.
279
+ * Return a nonce string to use verbatim, `true` to auto-generate one, or
280
+ * `false` (or an empty string) to serve THIS request without a nonce — the
281
+ * per-request opt-out for apps that nonce globally but declare `ppr` on some
282
+ * routes: a shell is shared per host+URL and can never bake a per-request
283
+ * nonce, so a ppr route only captures when its requests opt out here.
264
284
  */
265
285
  export type NonceProvider<TEnv = unknown> = (
266
286
  request: Request,
267
287
  env: TEnv,
268
- ) => string | true | Promise<string | true>;
288
+ ) => string | boolean | Promise<string | boolean>;
269
289
 
270
290
  /**
271
291
  * Options for creating an RSC handler