@rangojs/router 0.9.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 (846) 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/outlet-context.d.ts +9 -0
  745. package/dist/types/outlet-provider.d.ts +2 -1
  746. package/dist/types/route-content-wrapper.d.ts +4 -1
  747. package/dist/types/rsc/nonce.d.ts +10 -0
  748. package/dist/types/rsc/types.d.ts +6 -2
  749. package/dist/types/ssr/index.d.ts +18 -0
  750. package/dist/types/ssr/ssr-root.d.ts +16 -0
  751. package/dist/types/ssr-suspension-warning.d.ts +20 -0
  752. package/dist/types/types/loader-types.d.ts +5 -1
  753. package/dist/types/types/segments.d.ts +17 -0
  754. package/dist/types/vite/discovery/state.d.ts +6 -0
  755. package/dist/types/vite/plugin-types.d.ts +27 -0
  756. package/dist/types/vite/plugins/virtual-entries.d.ts +1 -1
  757. package/dist/types/vite/utils/shared-utils.d.ts +1 -0
  758. package/dist/types.d.ts +1479 -0
  759. package/dist/types.d.ts.map +1 -0
  760. package/dist/types.js +10 -0
  761. package/dist/types.js.map +1 -0
  762. package/dist/urls.d.ts +441 -0
  763. package/dist/urls.d.ts.map +1 -0
  764. package/dist/urls.gen.d.ts +8 -0
  765. package/dist/urls.gen.d.ts.map +1 -0
  766. package/dist/urls.gen.js +8 -0
  767. package/dist/urls.gen.js.map +1 -0
  768. package/dist/urls.js +443 -0
  769. package/dist/urls.js.map +1 -0
  770. package/dist/use-loader.d.ts +127 -0
  771. package/dist/use-loader.d.ts.map +1 -0
  772. package/dist/use-loader.js +237 -0
  773. package/dist/use-loader.js.map +1 -0
  774. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  775. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  776. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  777. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  778. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  779. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  780. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  781. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  782. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  783. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  784. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  785. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  786. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  787. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  788. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  789. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  790. package/dist/vite/ast-handler-extract.d.ts +49 -0
  791. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  792. package/dist/vite/ast-handler-extract.js +249 -0
  793. package/dist/vite/ast-handler-extract.js.map +1 -0
  794. package/dist/vite/expose-action-id.d.ts +19 -0
  795. package/dist/vite/expose-action-id.d.ts.map +1 -0
  796. package/dist/vite/expose-action-id.js +250 -0
  797. package/dist/vite/expose-action-id.js.map +1 -0
  798. package/dist/vite/expose-id-utils.d.ts +69 -0
  799. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  800. package/dist/vite/expose-id-utils.js +289 -0
  801. package/dist/vite/expose-id-utils.js.map +1 -0
  802. package/dist/vite/expose-internal-ids.d.ts +22 -0
  803. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  804. package/dist/vite/expose-internal-ids.js +886 -0
  805. package/dist/vite/expose-internal-ids.js.map +1 -0
  806. package/dist/vite/index.d.ts +149 -0
  807. package/dist/vite/index.d.ts.map +1 -0
  808. package/dist/vite/index.js +51 -22
  809. package/dist/vite/index.js.bak +5448 -0
  810. package/dist/vite/index.js.map +1 -0
  811. package/dist/vite/index.named-routes.gen.ts +103 -0
  812. package/dist/vite/package-resolution.d.ts +43 -0
  813. package/dist/vite/package-resolution.d.ts.map +1 -0
  814. package/dist/vite/package-resolution.js +112 -0
  815. package/dist/vite/package-resolution.js.map +1 -0
  816. package/dist/vite/virtual-entries.d.ts +25 -0
  817. package/dist/vite/virtual-entries.d.ts.map +1 -0
  818. package/dist/vite/virtual-entries.js +110 -0
  819. package/dist/vite/virtual-entries.js.map +1 -0
  820. package/package.json +21 -22
  821. package/skills/loader/SKILL.md +17 -2
  822. package/src/browser/merge-segment-loaders.ts +4 -0
  823. package/src/client.tsx +2 -0
  824. package/src/outlet-context.ts +9 -0
  825. package/src/outlet-provider.tsx +4 -0
  826. package/src/route-content-wrapper.tsx +7 -0
  827. package/src/router/segment-resolution/fresh.ts +48 -17
  828. package/src/router.ts +7 -2
  829. package/src/rsc/handler.ts +4 -4
  830. package/src/rsc/nonce.ts +16 -0
  831. package/src/rsc/shell-capture.ts +39 -6
  832. package/src/rsc/types.ts +6 -2
  833. package/src/segment-system.tsx +57 -12
  834. package/src/ssr/index.tsx +53 -1
  835. package/src/ssr/ssr-root.tsx +50 -22
  836. package/src/ssr-suspension-warning.ts +68 -0
  837. package/src/types/loader-types.ts +5 -1
  838. package/src/types/segments.ts +17 -0
  839. package/src/use-loader.tsx +24 -1
  840. package/src/vite/discovery/shell-prerender-phase.ts +5 -0
  841. package/src/vite/discovery/state.ts +6 -0
  842. package/src/vite/plugin-types.ts +28 -0
  843. package/src/vite/plugins/virtual-entries.ts +26 -3
  844. package/src/vite/rango.ts +3 -0
  845. package/src/vite/router-discovery.ts +31 -19
  846. package/src/vite/utils/shared-utils.ts +8 -2
@@ -757,6 +757,18 @@ Response construction (real 404, no warm-up race). Client navigations stream
757
757
  exactly as before. Scoped per LOADER: the flagged loader awaits only itself;
758
758
  siblings keep streaming.
759
759
 
760
+ Delivery is in-place, not merely in-document. React's Fizz outlines any
761
+ COMPLETED Suspense boundary over ~500 bytes to an end-of-stream
762
+ `<div hidden>` + `$RC()` reveal once the shell saturates its 12800-byte
763
+ `progressiveChunkSize` budget — the bytes are in the HTML, but not at their
764
+ document position, and a consumer that doesn't execute scripts never sees
765
+ them revealed. When the matched chain has a flagged loader, the document
766
+ render raises the budget to `MAX_SAFE_INTEGER` automatically, so the awaited
767
+ content renders where it belongs. Pin the budget yourself (in either
768
+ direction) with `rango({ progressiveChunkSize })` in the Vite config — an
769
+ explicit value disables the auto-raise. Boundaries hoisting stylesheets
770
+ still outline; their reveal must wait for the CSS.
771
+
760
772
  The costs and constraints:
761
773
 
762
774
  - Every document load pays the flagged loader's latency before first byte.
@@ -766,8 +778,11 @@ The costs and constraints:
766
778
  document render awaits the loader before the render barrier resolves, so
767
779
  that wait is a cycle by construction; it throws a deadlock error naming the
768
780
  fix.
769
- - PPR capture renders mask loaders and skip the await the flag does not
770
- bake anything into a shell (`/ppr`).
781
+ - PPR capture is the BAKE lane for flagged loaders (`/ppr`): the capture
782
+ render awaits them too, and the settled result — handle pushes included —
783
+ freezes into the stored shell. Unflagged loaders stay masked as live
784
+ holes. The `progressiveChunkSize` auto-raise is live-document only;
785
+ captured shells outline per the explicit option or React's default.
771
786
 
772
787
  Also available in `clientUrls()` route groups (`/client-urls`), where the
773
788
  loader-heavy shape makes it most useful. `LoaderOptions` is exported from the
@@ -45,6 +45,10 @@ export function mergeSegmentLoaders(
45
45
  }),
46
46
  // Keep all loader IDs from cache
47
47
  loaderIds: fromCache.loaderIds,
48
+ // The rebuilt aggregate is the source of truth. Cached per-loader
49
+ // streams would make LoaderResolver ignore loaderDataPromise.
50
+ loaderStreams: undefined,
51
+ awaitedLoaderIds: undefined,
48
52
  };
49
53
  }
50
54
 
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>
@@ -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
  // ---------------------------------------------------------------------------
@@ -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,6 +163,10 @@ 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(
@@ -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
  };
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.
@@ -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,
@@ -1503,6 +1506,15 @@ export function deriveShellCaptureContext(
1503
1506
  // applied ONLY at the captureHandles cache-write call site — every other
1504
1507
  // getDataForSegment consumer (the render-barrier snapshot, prerender)
1505
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.
1506
1518
  const handleLiveness = {
1507
1519
  holes: false,
1508
1520
  pendingPushes: 0,
@@ -1518,11 +1530,13 @@ export function deriveShellCaptureContext(
1518
1530
  const pushedInLoaderScope = isInsideLoaderScope();
1519
1531
  // Single walk: the mask reports whether it masked any nested thenable
1520
1532
  // (the liveness declaration) while building the capture copy.
1533
+ let maskedNestedThenable = false;
1521
1534
  const maskWithLiveness = (v: unknown): unknown => {
1522
1535
  const report: MaskReport = { thenable: false };
1523
1536
  const masked = maskNestedContainerThenables(v, undefined, report);
1524
- if (!pushedInLoaderScope && report.thenable) {
1525
- handleLiveness.holes = true;
1537
+ if (report.thenable) {
1538
+ maskedNestedThenable = true;
1539
+ if (!pushedInLoaderScope) handleLiveness.holes = true;
1526
1540
  }
1527
1541
  return masked;
1528
1542
  };
@@ -1534,11 +1548,30 @@ export function deriveShellCaptureContext(
1534
1548
  value.then(settle, settle);
1535
1549
  }
1536
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
+ }
1537
1556
  } else {
1538
1557
  masked = maskWithLiveness(value);
1539
- }
1540
- if (pushedInLoaderScope && typeof masked === "object" && masked !== null) {
1541
- 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
+ }
1542
1575
  }
1543
1576
  rawCapturePush(handleName, segmentId, masked);
1544
1577
  };
package/src/rsc/types.ts CHANGED
@@ -276,12 +276,16 @@ export interface HandlerCacheConfig {
276
276
 
277
277
  /**
278
278
  * Nonce provider function type.
279
- * 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.
280
284
  */
281
285
  export type NonceProvider<TEnv = unknown> = (
282
286
  request: Request,
283
287
  env: TEnv,
284
- ) => string | true | Promise<string | true>;
288
+ ) => string | boolean | Promise<string | boolean>;
285
289
 
286
290
  /**
287
291
  * Options for creating an RSC handler
@@ -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
  });
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
  /**
@@ -168,6 +170,23 @@ export interface SSRDependencies<TEnv = unknown> {
168
170
  */
169
171
  headScripts?: HeadScriptsOption;
170
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
+
171
190
  /**
172
191
  * prerender from react-dom/static.edge. Optional; required only by
173
192
  * {@link createShellCaptureHandler} for PPR shell capture.
@@ -497,9 +516,21 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
497
516
  // - rscStream2: For browser hydration (inject as __FLIGHT_DATA__)
498
517
  const [rscStream1, rscStream2] = rscStream.tee();
499
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
+
500
530
  const SsrRoot = createSsrRootComponent({
501
531
  createFromReadableStream,
502
532
  rscStream: rscStream1,
533
+ payload,
503
534
  nonce,
504
535
  // Live fizz seeds the request's RAW search. The shell capture pass
505
536
  // below and its resume twin seed the SHELL KEY's search instead
@@ -513,6 +544,18 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
513
544
  // Get bootstrap script content
514
545
  const bootstrapScriptContent = await loadBootstrapScriptContent();
515
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
+
516
559
  // Render React tree to HTML stream
517
560
  // Pass formState for useActionState progressive enhancement if provided
518
561
  // Pass nonce for CSP if provided. runWithPreinitNonce makes the same
@@ -523,6 +566,7 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
523
566
  ...resolveBootstrapOptions(bootstrapScriptContent, deps.headScripts),
524
567
  formState,
525
568
  nonce,
569
+ ...(progressiveChunkSize !== undefined && { progressiveChunkSize }),
526
570
  }),
527
571
  );
528
572
 
@@ -646,6 +690,14 @@ export function createShellCaptureHandler<TEnv = unknown>(
646
690
  const prerenderPromise = prerender(<SsrRoot />, {
647
691
  signal: controller.signal,
648
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
+ }),
649
701
  // Abort is how capture WORKS: once the shell is quiet we abort() to
650
702
  // freeze the prelude and let the still-pending holes postpone. React
651
703
  // reports the abort reason for each pending boundary through onError.