@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
@@ -179,6 +179,30 @@ function wrapDefaultOutletContent(
179
179
  return createViewTransitionBoundary(transition, content);
180
180
  }
181
181
 
182
+ /**
183
+ * Per-loader stream map for read-site suspension. { ssr: false } loaders were
184
+ * awaited before flush (fresh.ts), so deliver the SETTLED result, not the
185
+ * settled promise: the read site decodes synchronously instead of use()ing a
186
+ * Flight chunk whose fulfilled-at-read-time status is a scheduling race the
187
+ * SSR-completeness contract must not depend on. Unflagged siblings keep the
188
+ * promise (deliberate streaming). Flagged ids are collected as input for the
189
+ * dev SSR-suspension diagnostic (ssr-suspension-warning.ts).
190
+ */
191
+ async function buildLoaderStreams(loaders: ResolvedSegment[]): Promise<{
192
+ streams: Record<string, unknown>;
193
+ awaitedIds: string[] | undefined;
194
+ }> {
195
+ const streams: Record<string, unknown> = {};
196
+ let awaitedIds: string[] | undefined;
197
+ for (const l of loaders) {
198
+ streams[l.loaderId!] = l.awaitBeforeFlush
199
+ ? await l.loaderData
200
+ : l.loaderData;
201
+ if (l.awaitBeforeFlush) (awaitedIds ??= []).push(l.loaderId!);
202
+ }
203
+ return { streams, awaitedIds };
204
+ }
205
+
182
206
  /**
183
207
  * Render segments into a React tree with proper layout nesting
184
208
  *
@@ -477,6 +501,7 @@ export async function renderSegments(
477
501
  // microtask suspension is what makes SSR emit the loading() fallback
478
502
  // for content-suspending routes (segment-loader-promise.ts).
479
503
  let boundaryLoaderStreams: Record<string, unknown> | undefined;
504
+ let boundaryAwaitedLoaderIds: string[] | undefined;
480
505
  if (forceAwait || isAction) {
481
506
  const awaitStart = segDebug ? performance.now() : 0;
482
507
  boundaryLoaderData = await loaderDataPromise;
@@ -487,10 +512,10 @@ export async function renderSegments(
487
512
  });
488
513
  }
489
514
  } else if (loaderEntries.length > 0) {
490
- boundaryLoaderStreams = {};
491
- for (const l of loaderEntries) {
492
- boundaryLoaderStreams[l.loaderId!] = l.loaderData;
493
- }
515
+ ({
516
+ streams: boundaryLoaderStreams,
517
+ awaitedIds: boundaryAwaitedLoaderIds,
518
+ } = await buildLoaderStreams(loaderEntries));
494
519
  if (segDebug) {
495
520
  segDebugLog(
496
521
  `segment ${id}: per-loader streams via LoaderBoundary (read-site suspense)`,
@@ -503,6 +528,7 @@ export async function renderSegments(
503
528
  loaderDataPromise: boundaryLoaderData,
504
529
  loaderIds,
505
530
  loaderStreams: boundaryLoaderStreams,
531
+ awaitedLoaderIds: boundaryAwaitedLoaderIds,
506
532
  fallback: loading,
507
533
  outletKey: key,
508
534
  outletContent,
@@ -537,6 +563,7 @@ export async function renderSegments(
537
563
  let loaderData: Record<string, any> = {};
538
564
  let errorFallback: ReactNode = null;
539
565
  let loaderStreams: Record<string, unknown> | undefined;
566
+ let awaitedLoaderIds: string[] | undefined;
540
567
  if (forceAwait || isAction) {
541
568
  const layoutAwaitStart = segDebug ? performance.now() : 0;
542
569
  const resolvedData = await buildLoaderPromise(layoutLoaders);
@@ -560,10 +587,8 @@ export async function renderSegments(
560
587
  }
561
588
  }
562
589
  } else if (layoutLoaders.length > 0) {
563
- loaderStreams = {};
564
- for (const l of layoutLoaders) {
565
- loaderStreams[l.loaderId!] = l.loaderData;
566
- }
590
+ ({ streams: loaderStreams, awaitedIds: awaitedLoaderIds } =
591
+ await buildLoaderStreams(layoutLoaders));
567
592
  if (segDebug) {
568
593
  segDebugLog(
569
594
  `segment ${id}: layout loaders streaming to read sites (no loading())`,
@@ -599,12 +624,29 @@ export async function renderSegments(
599
624
 
600
625
  p.loaderIds = ownedLoaders.map((l) => l.loaderId!);
601
626
  const aggregated = getMemoizedLoaderPromise(ownedLoaders);
602
- if ((forceAwait || isAction) && aggregated instanceof Promise) {
627
+ // Parallel slots must NOT take the loaderStreams path.
628
+ // LoaderResolver skips use(aggregate) when streams are set, so
629
+ // the already-rendered slot handler commits immediately. That
630
+ // bakes a live-lane hole into the shell (semantic-matrix PPR3 /
631
+ // shell-cache slot-use: masked loaderData is what pins
632
+ // "srv badge pending...") and, on reuse, leaves a stale stream
633
+ // map that ignores the post-action aggregate (mini @cart).
634
+ // Flagged (ssr:false) delivery still holds: when every owned
635
+ // loader paid the pre-flush await, settle the aggregate so
636
+ // LoaderResolver decodes the array without a Flight-chunk use().
637
+ const settleParallelAggregate =
638
+ forceAwait ||
639
+ isAction ||
640
+ ownedLoaders.every((l) => l.awaitBeforeFlush === true);
641
+ if (settleParallelAggregate) {
603
642
  const parallelAwaitStart = segDebug ? performance.now() : 0;
604
- p.loaderDataPromise = await aggregated;
643
+ p.loaderDataPromise =
644
+ aggregated instanceof Promise ? await aggregated : aggregated;
645
+ p.loaderStreams = undefined;
646
+ p.awaitedLoaderIds = undefined;
605
647
  if (segDebug) {
606
648
  segDebugLog(
607
- `segment ${id}: parallel ${p.id} loaders awaited (forceAwait/action)`,
649
+ `segment ${id}: parallel ${p.id} loaders awaited (forceAwait/action/ssr:false)`,
608
650
  {
609
651
  loaderIds: p.loaderIds,
610
652
  ms: Math.round(performance.now() - parallelAwaitStart),
@@ -613,9 +655,11 @@ export async function renderSegments(
613
655
  }
614
656
  } else {
615
657
  p.loaderDataPromise = aggregated;
658
+ p.loaderStreams = undefined;
659
+ p.awaitedLoaderIds = undefined;
616
660
  if (segDebug) {
617
661
  segDebugLog(
618
- `segment ${id}: parallel ${p.id} loaders streaming (suspense)`,
662
+ `segment ${id}: parallel ${p.id} loaders via aggregate (suspense)`,
619
663
  { loaderIds: p.loaderIds },
620
664
  );
621
665
  }
@@ -630,6 +674,7 @@ export async function renderSegments(
630
674
  parallel: node.parallel,
631
675
  loaderData: Object.keys(loaderData).length > 0 ? loaderData : undefined,
632
676
  loaderStreams,
677
+ awaitedLoaderIds,
633
678
  pending: outletPending,
634
679
  children: errorFallback ?? nodeContent,
635
680
  });
@@ -108,7 +108,7 @@ export type LoaderEntry = {
108
108
  cache?: EntryCacheConfig;
109
109
  /**
110
110
  * Document renders await this loader before segment resolution returns
111
- * (loader(Def, { stream: "navigation" })), so its data, handle pushes, and
111
+ * (loader(Def, { ssr: false })), so its data, handle pushes, and
112
112
  * thrown notFound()/redirect() deterministically precede first flush.
113
113
  * Resolved at DSL-evaluation time from ctx.isSSR — entries are cached
114
114
  * per-isSSR (router/manifest.ts cache key), so the flag is already
@@ -620,7 +620,7 @@ export interface RequestContext<
620
620
 
621
621
  /**
622
622
  * @internal Loader IDs ($$id) whose entries carry `awaitBeforeFlush`
623
- * (loader(Def, { stream: "navigation" })): segment resolution awaits these
623
+ * (loader(Def, { ssr: false })): segment resolution awaits these
624
624
  * before returning, so the render barrier cannot resolve until they settle.
625
625
  * rendered() checks this set to fail fast — a flagged loader awaiting the
626
626
  * barrier is a guaranteed cycle, not a race. Registered by resolveLoaders
package/src/ssr/index.tsx CHANGED
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { createSsrRootComponent } from "./ssr-root.js";
2
+ import { createSsrRootComponent, deserializeSsrPayload } from "./ssr-root.js";
3
3
  import { injectRSCPayloadEager } from "./inject-rsc-eager.js";
4
4
  import { runWithPreinitNonce } from "./preinit-client-references.js";
5
5
  import { SHELL_CAPTURE_MAX_WAIT_MS } from "../rsc/shell-capture-constants.js";
@@ -26,6 +26,7 @@ interface RenderToReadableStreamOptions {
26
26
  bootstrapModules?: string[];
27
27
  nonce?: string;
28
28
  formState?: unknown;
29
+ progressiveChunkSize?: number;
29
30
  }
30
31
 
31
32
  /**
@@ -43,6 +44,7 @@ interface PrerenderOptions {
43
44
  bootstrapScriptContent?: string;
44
45
  bootstrapModules?: string[];
45
46
  onError?: (error: unknown) => void;
47
+ progressiveChunkSize?: number;
46
48
  }
47
49
 
48
50
  /**
@@ -114,6 +116,14 @@ export interface SSRRenderOptions {
114
116
  * only (runtime captures own the search variants, seeded per key).
115
117
  */
116
118
  search?: string;
119
+
120
+ /**
121
+ * The live request's origin, seeding the SSR store location so
122
+ * origin-dependent markup (Link's data-external) agrees with the
123
+ * browser's window.location across hydration. Absent on the build-time
124
+ * prerender pass (host-agnostic bare captures).
125
+ */
126
+ origin?: string;
117
127
  }
118
128
 
119
129
  /**
@@ -160,6 +170,23 @@ export interface SSRDependencies<TEnv = unknown> {
160
170
  */
161
171
  headScripts?: HeadScriptsOption;
162
172
 
173
+ /**
174
+ * Fizz `progressiveChunkSize`, forwarded verbatim to renderToReadableStream
175
+ * (live SSR) and prerender (shell capture); resume() inherits the capture
176
+ * value from the postponed state. The generated virtual SSR entry threads
177
+ * the `rango({ progressiveChunkSize })` plugin option here (canonical docs
178
+ * on `RangoBaseOptions.progressiveChunkSize` in vite/plugin-types.ts).
179
+ *
180
+ * When UNSET, createSSRHandler auto-raises to Number.MAX_SAFE_INTEGER for
181
+ * document renders whose matched chain has a `loader(Def, { ssr: false })`
182
+ * entry (payload segments carry `awaitBeforeFlush`): the loader was awaited
183
+ * before first flush precisely so its content ships in-place, and React
184
+ * 19.2's Fizz would otherwise move any completed boundary over ~500 bytes
185
+ * to an end-of-stream `<div hidden>` + $RC reveal once the shell saturates
186
+ * the default 12800 budget. An explicit value disables the auto-raise.
187
+ */
188
+ progressiveChunkSize?: number;
189
+
163
190
  /**
164
191
  * prerender from react-dom/static.edge. Optional; required only by
165
192
  * {@link createShellCaptureHandler} for PPR shell capture.
@@ -363,6 +390,13 @@ interface ShellCaptureOptions {
363
390
  * the shell's own key. MUST equal the resume pass's seed for the same key.
364
391
  */
365
392
  search?: string;
393
+ /**
394
+ * The capture request's origin. Shell keys are host-scoped, so the resume
395
+ * pass's request agrees modulo protocol drift; seeding it keeps
396
+ * origin-dependent static markup (Link's data-external) identical across
397
+ * capture, resume, and browser hydration.
398
+ */
399
+ origin?: string;
366
400
  }
367
401
 
368
402
  /**
@@ -391,6 +425,8 @@ interface ShellResumeOptions {
391
425
  * postponed holes.
392
426
  */
393
427
  search?: string;
428
+ /** The HIT request's origin — same host as the capture's (key-scoped). */
429
+ origin?: string;
394
430
  }
395
431
 
396
432
  /**
@@ -472,7 +508,7 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
472
508
  rscStream: ReadableStream<Uint8Array>,
473
509
  options?: SSRRenderOptions,
474
510
  ): Promise<ReadableStream<Uint8Array>> {
475
- const { nonce, formState, streamMode, search } = options ?? {};
511
+ const { nonce, formState, streamMode, search, origin } = options ?? {};
476
512
 
477
513
  try {
478
514
  // Tee the stream:
@@ -480,9 +516,21 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
480
516
  // - rscStream2: For browser hydration (inject as __FLIGHT_DATA__)
481
517
  const [rscStream1, rscStream2] = rscStream.tee();
482
518
 
519
+ // Deserialization starts here (not lazily on SsrRoot's first render) so
520
+ // the auto-raise below can read payload metadata before the fizz call.
521
+ // The parallel no-op catch keeps a payload rejection off the
522
+ // unhandledRejection path if fizz errors before consuming the promise;
523
+ // SsrRoot's React.use() on the SAME promise still observes the rejection.
524
+ const payload = deserializeSsrPayload(
525
+ createFromReadableStream,
526
+ rscStream1,
527
+ );
528
+ payload.catch(() => {});
529
+
483
530
  const SsrRoot = createSsrRootComponent({
484
531
  createFromReadableStream,
485
532
  rscStream: rscStream1,
533
+ payload,
486
534
  nonce,
487
535
  // Live fizz seeds the request's RAW search. The shell capture pass
488
536
  // below and its resume twin seed the SHELL KEY's search instead
@@ -490,11 +538,24 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
490
538
  // same key => same seed, so the resume tree matches the captured
491
539
  // tree while static-part search reads render what the key names.
492
540
  search,
541
+ origin,
493
542
  });
494
543
 
495
544
  // Get bootstrap script content
496
545
  const bootstrapScriptContent = await loadBootstrapScriptContent();
497
546
 
547
+ // ssr:false auto-raise (see SSRDependencies.progressiveChunkSize).
548
+ // Awaiting the payload here is latency-neutral: fizz cannot emit even
549
+ // <html> until this same promise settles. A rejection lands in the
550
+ // catch below — the same reportRenderError path a shell error takes.
551
+ let progressiveChunkSize = deps.progressiveChunkSize;
552
+ if (progressiveChunkSize === undefined) {
553
+ const resolved = await payload;
554
+ if (resolved.metadata?.segments?.some((s) => s.awaitBeforeFlush)) {
555
+ progressiveChunkSize = Number.MAX_SAFE_INTEGER;
556
+ }
557
+ }
558
+
498
559
  // Render React tree to HTML stream
499
560
  // Pass formState for useActionState progressive enhancement if provided
500
561
  // Pass nonce for CSP if provided. runWithPreinitNonce makes the same
@@ -505,6 +566,7 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
505
566
  ...resolveBootstrapOptions(bootstrapScriptContent, deps.headScripts),
506
567
  formState,
507
568
  nonce,
569
+ ...(progressiveChunkSize !== undefined && { progressiveChunkSize }),
508
570
  }),
509
571
  );
510
572
 
@@ -594,6 +656,7 @@ export function createShellCaptureHandler<TEnv = unknown>(
594
656
  // The shell key's own search: static-part search reads render what
595
657
  // the key names, and the resume pass seeds the identical string.
596
658
  search: opts.search,
659
+ origin: opts.origin,
597
660
  });
598
661
 
599
662
  // Bootstrap load raced against the deadline. A load that never resolves
@@ -627,6 +690,14 @@ export function createShellCaptureHandler<TEnv = unknown>(
627
690
  const prerenderPromise = prerender(<SsrRoot />, {
628
691
  signal: controller.signal,
629
692
  ...resolveBootstrapOptions(bootstrapScriptContent, deps.headScripts),
693
+ // Explicit option only — the ssr:false auto-raise is live-SSR scoped
694
+ // (RangoBaseOptions.progressiveChunkSize documents the contract); the
695
+ // capture handler starts prerender without deserializing the payload,
696
+ // so segment metadata is not read here. The captured value rides the
697
+ // postponed state into every later resume().
698
+ ...(deps.progressiveChunkSize !== undefined && {
699
+ progressiveChunkSize: deps.progressiveChunkSize,
700
+ }),
630
701
  // Abort is how capture WORKS: once the shell is quiet we abort() to
631
702
  // freeze the prelude and let the still-pending holes postpone. React
632
703
  // reports the abort reason for each pending boundary through onError.
@@ -767,7 +838,7 @@ export function createShellResumeHandler<TEnv = unknown>(
767
838
  rscStream: ReadableStream<Uint8Array>,
768
839
  opts: ShellResumeOptions,
769
840
  ): Promise<ReadableStream<Uint8Array>> {
770
- const { postponed, nonce, search } = opts;
841
+ const { postponed, nonce, search, origin } = opts;
771
842
 
772
843
  try {
773
844
  if (postponed === null) {
@@ -800,6 +871,7 @@ export function createShellResumeHandler<TEnv = unknown>(
800
871
  // Same seed as the capture pass for this key: the resume tree must
801
872
  // match the captured tree above the holes, search reads included.
802
873
  search,
874
+ origin,
803
875
  });
804
876
 
805
877
  // EAGER injection (resume-only): the stored prelude — a complete document
@@ -70,13 +70,22 @@ function createSsrEventController(opts: {
70
70
  * names and both passes agree byte-for-byte.
71
71
  */
72
72
  search?: string;
73
+ /**
74
+ * Origin seeding the store location. Live fizz passes the request's real
75
+ * origin so origin-dependent markup (Link's data-external compares link
76
+ * origins against it) agrees with the browser's window.location; ppr
77
+ * capture/resume pass their request's origin (shell keys are host-scoped,
78
+ * so the two agree modulo protocol drift). Absent (build-time bare
79
+ * captures, tests) falls back to the historical internal host.
80
+ */
81
+ origin?: string;
73
82
  params?: Record<string, string>;
74
83
  handleData?: HandleData;
75
84
  matched?: string[];
76
85
  }): EventController {
77
86
  const location = new URL(
78
87
  `${opts.pathname}${opts.search ?? ""}`,
79
- "http://localhost",
88
+ opts.origin ?? "http://localhost",
80
89
  );
81
90
  let params = opts.params ?? {};
82
91
  const rawMatched = opts.matched ?? [];
@@ -130,6 +139,37 @@ function createSsrEventController(opts: {
130
139
  };
131
140
  }
132
141
 
142
+ /**
143
+ * Deserialize the Flight stream branch into the payload SsrRoot renders,
144
+ * fragment expansion included. Factored out of SsrRoot so createSSRHandler can
145
+ * create the promise BEFORE fizz starts and read metadata that must influence
146
+ * the fizz call itself (the ssr:false progressiveChunkSize auto-raise) —
147
+ * awaiting it there is latency-neutral because fizz cannot emit even <html>
148
+ * until this same promise settles.
149
+ */
150
+ export function deserializeSsrPayload(
151
+ createFromReadableStream: CreateFromReadableStream,
152
+ rscStream: ReadableStream<Uint8Array>,
153
+ ): Promise<RscPayload> {
154
+ // Shell-HIT tails carry replayed segments as VERBATIM stored fragments
155
+ // (segment-fragments.ts, issue #700); expand them through this
156
+ // environment's deserializer before anything reads the segments. Every
157
+ // other payload (full render, capture, actions) has no envelopes and
158
+ // pays one field scan.
159
+ // Promise.resolve() adoption is load-bearing: some wirings (the build
160
+ // temp server's vendored Flight client) return a THENABLE Chunk whose
161
+ // .then returns undefined — chaining on it directly yields undefined.
162
+ return Promise.resolve(createFromReadableStream<RscPayload>(rscStream)).then(
163
+ async (resolvedPayload) => {
164
+ await expandSegmentFragments(
165
+ resolvedPayload.metadata?.segments,
166
+ createFromReadableStream,
167
+ );
168
+ return resolvedPayload;
169
+ },
170
+ );
171
+ }
172
+
133
173
  /**
134
174
  * Options for {@link createSsrRootComponent}.
135
175
  */
@@ -138,6 +178,13 @@ export interface SsrRootOptions {
138
178
  createFromReadableStream: CreateFromReadableStream;
139
179
  /** The Flight stream branch to deserialize into the SSR VDOM. */
140
180
  rscStream: ReadableStream<Uint8Array>;
181
+ /**
182
+ * Pre-created payload promise (deserializeSsrPayload over the SAME
183
+ * rscStream). When present SsrRoot adopts it instead of deserializing
184
+ * lazily on first render — the stream can only be consumed once, so the
185
+ * caller that already started deserialization MUST pass the promise in.
186
+ */
187
+ payload?: Promise<RscPayload>;
141
188
  /** Nonce for CSP; propagated to NonceContext. */
142
189
  nonce?: string;
143
190
  /**
@@ -162,6 +209,11 @@ export interface SsrRootOptions {
162
209
  * the resume tree matches the captured tree above the postponed holes.
163
210
  */
164
211
  search?: string;
212
+ /**
213
+ * Origin seeding the SSR store location (see createSsrEventController):
214
+ * live fizz passes the request's origin; capture/resume pass theirs.
215
+ */
216
+ origin?: string;
165
217
  }
166
218
 
167
219
  /**
@@ -188,35 +240,26 @@ export function createSsrRootComponent(opts: SsrRootOptions): React.FC {
188
240
  nonce,
189
241
  onPayloadSettled,
190
242
  search,
243
+ origin,
191
244
  } = opts;
192
245
 
193
- let payload: Promise<RscPayload> | undefined;
246
+ // onPayloadSettled fires AFTER fragment expansion (inside
247
+ // deserializeSsrPayload): the capture's fizz-readiness gate must include
248
+ // fragment module loads.
249
+ const adoptPayload = (p: Promise<RscPayload>): Promise<RscPayload> => {
250
+ if (onPayloadSettled) p.then(onPayloadSettled, onPayloadSettled);
251
+ return p;
252
+ };
253
+ let payload: Promise<RscPayload> | undefined =
254
+ opts.payload && adoptPayload(opts.payload);
194
255
  let handlesPromise: Promise<HandleData> | undefined;
195
256
  let ssrContextValue: NavigationStoreContextValue | undefined;
196
257
  let rootPromise: Promise<React.ReactNode> | undefined;
197
258
 
198
259
  return function SsrRoot() {
199
- if (payload === undefined) {
200
- // Shell-HIT tails carry replayed segments as VERBATIM stored fragments
201
- // (segment-fragments.ts, issue #700); expand them through this
202
- // environment's deserializer before anything reads the segments. Every
203
- // other payload (full render, capture, actions) has no envelopes and
204
- // pays one field scan. onPayloadSettled fires AFTER expansion: the
205
- // capture's fizz-readiness gate must include fragment module loads.
206
- // Promise.resolve() adoption is load-bearing: some wirings (the build
207
- // temp server's vendored Flight client) return a THENABLE Chunk whose
208
- // .then returns undefined — chaining on it directly yields undefined.
209
- payload = Promise.resolve(
210
- createFromReadableStream<RscPayload>(rscStream),
211
- ).then(async (resolvedPayload) => {
212
- await expandSegmentFragments(
213
- resolvedPayload.metadata?.segments,
214
- createFromReadableStream,
215
- );
216
- return resolvedPayload;
217
- });
218
- if (onPayloadSettled) payload.then(onPayloadSettled, onPayloadSettled);
219
- }
260
+ payload ??= adoptPayload(
261
+ deserializeSsrPayload(createFromReadableStream, rscStream),
262
+ );
220
263
  const resolved = React.use(payload);
221
264
 
222
265
  const themeConfig = resolved.metadata?.themeConfig ?? null;
@@ -238,6 +281,7 @@ export function createSsrRootComponent(opts: SsrRootOptions): React.FC {
238
281
  eventController: createSsrEventController({
239
282
  pathname,
240
283
  search,
284
+ origin,
241
285
  params: resolved.metadata?.params,
242
286
  handleData,
243
287
  matched: resolved.metadata?.matched,
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Dev-only diagnostic for the { ssr: false } SSR-completeness opt-in.
3
+ *
4
+ * A document render that awaits flagged loaders before first flush is usually
5
+ * expected to produce an SSR-complete boundary — but the await is scoped per
6
+ * LOADER (see LoaderOptions in types/loader-types.ts), so one unflagged read
7
+ * under the same Suspense boundary still suspends it and the boundary streams
8
+ * as its fallback, invisible without JS. That failure mode looks exactly like
9
+ * the flag not working; a consumer app burned hours on byte-level archaeology
10
+ * before the unflagged sibling read was identified. This warning names the
11
+ * culprit at the suspension site instead.
12
+ *
13
+ * Fires at most once per loader id per process, only during the SSR pass
14
+ * (`window` undefined), only in dev, and only when the render actually awaited
15
+ * flagged loaders (`awaitedLoaderIds`, stamped by segment resolution on
16
+ * document AND shell-capture renders — capture awaits the same flagged lane;
17
+ * its masked live-lane reads suspend by design and dedupe against the live
18
+ * render's warnings through the once-per-id set).
19
+ */
20
+
21
+ const warned = new Set<string>();
22
+
23
+ /** Thenable statuses `use()` unwraps without suspending: React's re-check
24
+ * after `.then()` handles "fulfilled", and Flight chunks in the resolved_*
25
+ * states initialize synchronously inside that same call. Anything else
26
+ * (pending, blocked, an unstamped native promise) suspends at least once. */
27
+ function unwrapsSynchronously(stream: Promise<unknown>): boolean {
28
+ const status = (stream as { status?: string }).status;
29
+ return (
30
+ status === "fulfilled" ||
31
+ status === "resolved_model" ||
32
+ status === "resolved_module"
33
+ );
34
+ }
35
+
36
+ export function warnAwaitedSsrSuspension(
37
+ loaderId: string,
38
+ awaitedLoaderIds: readonly string[] | undefined,
39
+ stream: Promise<unknown>,
40
+ isServer: boolean = typeof window === "undefined",
41
+ ): void {
42
+ if (process.env.NODE_ENV === "production") return;
43
+ if (!isServer) return;
44
+ if (!awaitedLoaderIds || awaitedLoaderIds.length === 0) return;
45
+ if (unwrapsSynchronously(stream)) return;
46
+ if (warned.has(loaderId)) return;
47
+ warned.add(loaderId);
48
+
49
+ if (awaitedLoaderIds.includes(loaderId)) {
50
+ console.error(
51
+ `[rango] Loader "${loaderId}" is flagged { ssr: false } and was awaited ` +
52
+ `before first flush, but its useLoader read observed a still-pending ` +
53
+ `promise during SSR. If its Suspense fallback appears in the SSR'd HTML, ` +
54
+ `please report it to @rangojs/router with a reproduction.`,
55
+ );
56
+ return;
57
+ }
58
+
59
+ console.warn(
60
+ `[rango] The document render awaited { ssr: false } loader(s) ` +
61
+ `${JSON.stringify(awaitedLoaderIds)} before first flush, but ` +
62
+ `useLoader("${loaderId}") still suspended during SSR. "${loaderId}" is not ` +
63
+ `flagged, so the Suspense boundary above that read streams as its fallback ` +
64
+ `and the content under it stays hidden until JS runs. If the boundary must ` +
65
+ `be SSR-complete, flag "${loaderId}" with { ssr: false } too, or move its ` +
66
+ `read behind its own boundary. If it streams deliberately, ignore this.`,
67
+ );
68
+ }
@@ -75,7 +75,7 @@ export type LoaderContext<
75
75
  * later ones stream to the client and apply post-hydration (document lane)
76
76
  * or progressively (navigation/action lanes). To guarantee a loader's
77
77
  * handles are in the SSR'd document, register it as
78
- * `loader(Def, { stream: "navigation" })` so the document render awaits it
78
+ * `loader(Def, { ssr: false })` so the document render awaits it
79
79
  * (see {@link LoaderOptions}).
80
80
  *
81
81
  * @example
@@ -174,29 +174,35 @@ export type LoaderFn<
174
174
  > = (ctx: LoaderContext<TParams, TEnv>) => Promise<T> | T;
175
175
 
176
176
  /**
177
- * Delivery mode for a DSL-registered loader: `loader(Def, { stream })`.
177
+ * SSR delivery for a DSL-registered loader: `loader(Def, { ssr })`.
178
178
  *
179
- * Default (omitted): the loader streams on every render. Its data, its
180
- * `ctx.use(Handle)` pushes, and any `notFound()`/`redirect()` it throws may land
181
- * AFTER the document Response is constructed, so none of them are guaranteed to
182
- * be in the SSR'd HTML.
179
+ * Default (omitted / `true`): the loader streams on every render. Its data,
180
+ * its `ctx.use(Handle)` pushes, and any `notFound()`/`redirect()` it throws
181
+ * may land AFTER the document Response is constructed, so none of them are
182
+ * guaranteed to be in the SSR'd HTML.
183
183
  *
184
- * `"navigation"` narrows streaming to client navigations only: on a DOCUMENT
185
- * request the loader is awaited before first flush. `useLoader` still suspends,
186
- * but on an already-settled promise, so no fallback paints. This is the
187
- * SSR-completeness opt-in the name is about WHERE streaming still applies, not
188
- * about disabling it. Choose it when the loader feeds something that must exist
189
- * in the document: `<head>` meta via a handle, or a real 404 status (an awaited
190
- * `notFound()` deterministically precedes Response construction, where the
191
- * streamed default only wins that race opportunistically). It does NOT change
192
- * PPR capture behavior: capture renders mask loaders and skip this await.
184
+ * `ssr: false` turns SSR streaming off for this loader the same knob
185
+ * `loading(fallback, { ssr: false })` is for the fallback: on a DOCUMENT
186
+ * request the loader is awaited before first flush, so no fallback paints for
187
+ * it (`useLoader` still suspends, but on an already-settled promise). Client
188
+ * navigations keep streaming it. This is the SSR-completeness opt-in. Choose
189
+ * it when the loader feeds something that must exist in the document:
190
+ * `<head>` meta via a handle, or a real 404 status (an awaited `notFound()`
191
+ * deterministically precedes Response construction, where the streamed
192
+ * default only wins that race opportunistically). Under ppr it is also the
193
+ * BAKE lane: the loader executes at shell capture and its settled return is
194
+ * shell material (nested promises stay live holes) — see the ppr docs.
193
195
  *
194
- * Scoped per LOADER, not per segment: a baked loader alongside a deliberately
195
- * dynamic sibling awaits only itself, and the sibling keeps streaming behind its
196
- * `loading()`/Suspense boundary.
196
+ * Scoped per LOADER, not per segment: an `ssr: false` loader alongside a
197
+ * deliberately streaming sibling awaits only itself, and the sibling keeps
198
+ * streaming behind its `loading()`/Suspense boundary. Watch the scoping when
199
+ * the boundary must be SSR-complete: ONE unflagged read under it still
200
+ * suspends the whole boundary, which then streams as its fallback — looking
201
+ * exactly like the flag not working. In dev the router warns at the read
202
+ * site naming the unflagged loader (ssr-suspension-warning.ts).
197
203
  */
198
204
  export type LoaderOptions = {
199
- stream?: "navigation";
205
+ ssr?: boolean;
200
206
  };
201
207
 
202
208
  /**
@@ -166,10 +166,27 @@ export interface ResolvedSegment {
166
166
  loaderId?: string; // For loaders: the loader $$id identifier
167
167
  _inherited?: boolean; // For inherited loaders: dedup marker for buildMatchResult
168
168
  loaderData?: any; // For loaders: the resolved data from loader execution
169
+ /**
170
+ * True when this loader was awaited before first flush
171
+ * (loader(Def, { ssr: false })). Stamped by resolveLoaders (fresh.ts) on
172
+ * document AND shell-capture renders — capture bakes flagged loaders and
173
+ * awaits the same lane. Feeds segment-system's settled-value delivery and
174
+ * the dev SSR suspension warning (ssr-suspension-warning.ts).
175
+ */
176
+ awaitBeforeFlush?: true;
169
177
  parallelLoading?: ReactNode; // For parallel-owned loaders: the parallel's loading fallback
170
178
  // Intercept loader fields (for streaming loader data in parallel segments)
171
179
  loaderDataPromise?: Promise<any[]> | any[]; // Loader data promise or resolved array
172
180
  loaderIds?: string[]; // IDs ($$id) of loaders for this segment
181
+ /**
182
+ * Per-loader UNDECODED results for a layout/route stream map.
183
+ * Flagged (ssr:false) entries are settled values; unflagged siblings
184
+ * stay promises. Parallel slots do not use this channel — they pin
185
+ * loading() / live-lane holes via use(loaderDataPromise).
186
+ */
187
+ loaderStreams?: Record<string, unknown>;
188
+ /** $$ids of loaders this segment awaited before flush. Dev diagnostic. */
189
+ awaitedLoaderIds?: string[];
173
190
  // Error-specific fields
174
191
  error?: ErrorInfo; // For error segments: the error information
175
192
  // NotFound-specific fields