@timber-js/app 0.2.0-alpha.21 → 0.2.0-alpha.211

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 (1393) hide show
  1. package/LICENSE +8 -0
  2. package/agent-skill.md +346 -0
  3. package/bin/timber.mjs +15 -1
  4. package/dist/_chunks/actions-Rjk4htmA.js +1199 -0
  5. package/dist/_chunks/actions-Rjk4htmA.js.map +1 -0
  6. package/dist/_chunks/als-registry-DaxkVjt5.js +45 -0
  7. package/dist/_chunks/als-registry-DaxkVjt5.js.map +1 -0
  8. package/dist/_chunks/als-slots-BEEIPKYm.js +26 -0
  9. package/dist/_chunks/als-slots-BEEIPKYm.js.map +1 -0
  10. package/dist/_chunks/base-path-DaQrzbez.js +80 -0
  11. package/dist/_chunks/base-path-DaQrzbez.js.map +1 -0
  12. package/dist/_chunks/build-manifest-DWppEdLB.js +86 -0
  13. package/dist/_chunks/build-manifest-DWppEdLB.js.map +1 -0
  14. package/dist/_chunks/build-output-helper-RV_BRcF1.js +367 -0
  15. package/dist/_chunks/build-output-helper-RV_BRcF1.js.map +1 -0
  16. package/dist/_chunks/cache-api-DGdYfNJn.js +1182 -0
  17. package/dist/_chunks/cache-api-DGdYfNJn.js.map +1 -0
  18. package/dist/_chunks/canonicalize-CgHoscYO.js +66 -0
  19. package/dist/_chunks/canonicalize-CgHoscYO.js.map +1 -0
  20. package/dist/_chunks/chains-DGX9zmg9.js +272 -0
  21. package/dist/_chunks/chains-DGX9zmg9.js.map +1 -0
  22. package/dist/_chunks/classify-QwG5rxKI.js +147 -0
  23. package/dist/_chunks/classify-QwG5rxKI.js.map +1 -0
  24. package/dist/_chunks/cli-check-ajNY3B2e.js +252 -0
  25. package/dist/_chunks/cli-check-ajNY3B2e.js.map +1 -0
  26. package/dist/_chunks/cli-context-By7k2xVo.js +70 -0
  27. package/dist/_chunks/cli-context-By7k2xVo.js.map +1 -0
  28. package/dist/_chunks/cli-schema-sync-D2eI8jEg.js +299 -0
  29. package/dist/_chunks/cli-schema-sync-D2eI8jEg.js.map +1 -0
  30. package/dist/_chunks/client-dep-entries-2HCF09no.js +66 -0
  31. package/dist/_chunks/client-dep-entries-2HCF09no.js.map +1 -0
  32. package/dist/_chunks/cloudflare-Byxl8FWP.js +1333 -0
  33. package/dist/_chunks/cloudflare-Byxl8FWP.js.map +1 -0
  34. package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
  35. package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
  36. package/dist/_chunks/codegen-Bps1sLKJ.js +432 -0
  37. package/dist/_chunks/codegen-Bps1sLKJ.js.map +1 -0
  38. package/dist/_chunks/convention-lint-DLmhGsRS.js +590 -0
  39. package/dist/_chunks/convention-lint-DLmhGsRS.js.map +1 -0
  40. package/dist/_chunks/dev-server-TFpEwm3H.js +2039 -0
  41. package/dist/_chunks/dev-server-TFpEwm3H.js.map +1 -0
  42. package/dist/_chunks/dist-DtrJyBbw.js +386 -0
  43. package/dist/_chunks/dist-DtrJyBbw.js.map +1 -0
  44. package/dist/_chunks/error-boundary-DsNScGRM.js +1024 -0
  45. package/dist/_chunks/error-boundary-DsNScGRM.js.map +1 -0
  46. package/dist/_chunks/fast-hash-C-tVYrLb.js +41 -0
  47. package/dist/_chunks/fast-hash-C-tVYrLb.js.map +1 -0
  48. package/dist/_chunks/format-BKclgVbk.js +14 -0
  49. package/dist/_chunks/format-BKclgVbk.js.map +1 -0
  50. package/dist/_chunks/fs-identity-BRKuL215.js +207 -0
  51. package/dist/_chunks/fs-identity-BRKuL215.js.map +1 -0
  52. package/dist/_chunks/graph-cache-CYiUS2aS.js +303 -0
  53. package/dist/_chunks/graph-cache-CYiUS2aS.js.map +1 -0
  54. package/dist/_chunks/href-validation-BIrxavIy.js +213 -0
  55. package/dist/_chunks/href-validation-BIrxavIy.js.map +1 -0
  56. package/dist/_chunks/json-lossy-check-CVuRs2hG.js +66 -0
  57. package/dist/_chunks/json-lossy-check-CVuRs2hG.js.map +1 -0
  58. package/dist/_chunks/live-graph-cNuWMYQI.js +151 -0
  59. package/dist/_chunks/live-graph-cNuWMYQI.js.map +1 -0
  60. package/dist/_chunks/logger-BP0LN6vP.js +662 -0
  61. package/dist/_chunks/logger-BP0LN6vP.js.map +1 -0
  62. package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → metadata-routes-DSDjM_hJ.js} +71 -27
  63. package/dist/_chunks/metadata-routes-DSDjM_hJ.js.map +1 -0
  64. package/dist/_chunks/navigation-root-BQfo1-kG.js +126 -0
  65. package/dist/_chunks/navigation-root-BQfo1-kG.js.map +1 -0
  66. package/dist/_chunks/param-value-C8TNYchQ.js +66 -0
  67. package/dist/_chunks/param-value-C8TNYchQ.js.map +1 -0
  68. package/dist/_chunks/plugin-context-BPBPc3lL.js +345 -0
  69. package/dist/_chunks/plugin-context-BPBPc3lL.js.map +1 -0
  70. package/dist/_chunks/poison-rules-DoEhbqaY.js +110 -0
  71. package/dist/_chunks/poison-rules-DoEhbqaY.js.map +1 -0
  72. package/dist/_chunks/poison-scan-CfQ3unZR.js +99 -0
  73. package/dist/_chunks/poison-scan-CfQ3unZR.js.map +1 -0
  74. package/dist/_chunks/purge-store-Byr8XOjU.js +14 -0
  75. package/dist/_chunks/purge-store-Byr8XOjU.js.map +1 -0
  76. package/dist/_chunks/render-timeout-DOf_BBcO.js +46 -0
  77. package/dist/_chunks/render-timeout-DOf_BBcO.js.map +1 -0
  78. package/dist/_chunks/resolve-schema-CBR6Lm4i.js +50 -0
  79. package/dist/_chunks/resolve-schema-CBR6Lm4i.js.map +1 -0
  80. package/dist/_chunks/rolldown-runtime-D7D4PA-g.js +13 -0
  81. package/dist/_chunks/rsc-cache-key-ClUiXQnK.js +243 -0
  82. package/dist/_chunks/rsc-cache-key-ClUiXQnK.js.map +1 -0
  83. package/dist/_chunks/rsc-media-type-DDc7duTD.js +61 -0
  84. package/dist/_chunks/rsc-media-type-DDc7duTD.js.map +1 -0
  85. package/dist/_chunks/rsc-payload-path-dffcs4jp.js +54 -0
  86. package/dist/_chunks/rsc-payload-path-dffcs4jp.js.map +1 -0
  87. package/dist/_chunks/scan-BoP17W3w.js +140 -0
  88. package/dist/_chunks/scan-BoP17W3w.js.map +1 -0
  89. package/dist/_chunks/scanner-DmqdxzbW.js +2056 -0
  90. package/dist/_chunks/scanner-DmqdxzbW.js.map +1 -0
  91. package/dist/_chunks/schema-bridge-C83xa9lT.js +199 -0
  92. package/dist/_chunks/schema-bridge-C83xa9lT.js.map +1 -0
  93. package/dist/_chunks/segment-classify-C539Pa2O.js +197 -0
  94. package/dist/_chunks/segment-classify-C539Pa2O.js.map +1 -0
  95. package/dist/_chunks/segment-context-xtPUGfdq.js +137 -0
  96. package/dist/_chunks/segment-context-xtPUGfdq.js.map +1 -0
  97. package/dist/_chunks/segment-keys-D5hu1hz4.js +62 -0
  98. package/dist/_chunks/segment-keys-D5hu1hz4.js.map +1 -0
  99. package/dist/_chunks/singleflight-BeVMMKi0.js +55 -0
  100. package/dist/_chunks/singleflight-BeVMMKi0.js.map +1 -0
  101. package/dist/_chunks/sizeof-BM1409x2.js +36 -0
  102. package/dist/_chunks/sizeof-BM1409x2.js.map +1 -0
  103. package/dist/_chunks/ssr-data-nA3I70_n.js +49 -0
  104. package/dist/_chunks/ssr-data-nA3I70_n.js.map +1 -0
  105. package/dist/_chunks/state-BhNGPsdi.js +50 -0
  106. package/dist/_chunks/state-BhNGPsdi.js.map +1 -0
  107. package/dist/_chunks/status-page-marker-BRX9Ib-d.js +564 -0
  108. package/dist/_chunks/status-page-marker-BRX9Ib-d.js.map +1 -0
  109. package/dist/_chunks/tree-match-6yihorhk.js +169 -0
  110. package/dist/_chunks/tree-match-6yihorhk.js.map +1 -0
  111. package/dist/_chunks/use-query-states-I3JMng6J.js +226 -0
  112. package/dist/_chunks/use-query-states-I3JMng6J.js.map +1 -0
  113. package/dist/_chunks/walkers-Czu2jXFq.js +144 -0
  114. package/dist/_chunks/walkers-Czu2jXFq.js.map +1 -0
  115. package/dist/_chunks/write-file-atomic-D1qWqHb4.js +32 -0
  116. package/dist/_chunks/write-file-atomic-D1qWqHb4.js.map +1 -0
  117. package/dist/adapters/build-output-helper.d.ts +72 -0
  118. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  119. package/dist/adapters/canonicalize-module.d.ts +8 -0
  120. package/dist/adapters/canonicalize-module.d.ts.map +1 -0
  121. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  122. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  123. package/dist/adapters/cloudflare-dev.js +74 -0
  124. package/dist/adapters/cloudflare-dev.js.map +1 -0
  125. package/dist/adapters/cloudflare-kv-cache.d.ts +65 -0
  126. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  127. package/dist/adapters/cloudflare-kv-cache.js +123 -0
  128. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  129. package/dist/adapters/cloudflare.d.ts +224 -24
  130. package/dist/adapters/cloudflare.d.ts.map +1 -1
  131. package/dist/adapters/cloudflare.js +2 -188
  132. package/dist/adapters/compress-module.d.ts +25 -4
  133. package/dist/adapters/compress-module.d.ts.map +1 -1
  134. package/dist/adapters/fs-identity.d.ts +63 -0
  135. package/dist/adapters/fs-identity.d.ts.map +1 -0
  136. package/dist/adapters/nitro-presets.d.ts +31 -0
  137. package/dist/adapters/nitro-presets.d.ts.map +1 -0
  138. package/dist/adapters/nitro-preview.d.ts +64 -0
  139. package/dist/adapters/nitro-preview.d.ts.map +1 -0
  140. package/dist/adapters/nitro.d.ts +54 -37
  141. package/dist/adapters/nitro.d.ts.map +1 -1
  142. package/dist/adapters/nitro.js +631 -359
  143. package/dist/adapters/nitro.js.map +1 -1
  144. package/dist/adapters/shared.d.ts +67 -0
  145. package/dist/adapters/shared.d.ts.map +1 -0
  146. package/dist/adapters/types.d.ts +122 -16
  147. package/dist/adapters/types.d.ts.map +1 -1
  148. package/dist/adapters/types.js +0 -0
  149. package/dist/analyze/chains.d.ts +124 -0
  150. package/dist/analyze/chains.d.ts.map +1 -0
  151. package/dist/analyze/classify.d.ts +153 -0
  152. package/dist/analyze/classify.d.ts.map +1 -0
  153. package/dist/analyze/crawl-entry.d.ts +17 -0
  154. package/dist/analyze/crawl-entry.d.ts.map +1 -0
  155. package/dist/analyze/crawl-entry.js +314 -0
  156. package/dist/analyze/crawl-entry.js.map +1 -0
  157. package/dist/analyze/crawl.d.ts +134 -0
  158. package/dist/analyze/crawl.d.ts.map +1 -0
  159. package/dist/analyze/graph-cache.d.ts +104 -0
  160. package/dist/analyze/graph-cache.d.ts.map +1 -0
  161. package/dist/analyze/graph-command.d.ts +43 -0
  162. package/dist/analyze/graph-command.d.ts.map +1 -0
  163. package/dist/analyze/graph-command.js +472 -0
  164. package/dist/analyze/graph-command.js.map +1 -0
  165. package/dist/analyze/live-graph.d.ts +81 -0
  166. package/dist/analyze/live-graph.d.ts.map +1 -0
  167. package/dist/analyze/poison-rules.d.ts +72 -0
  168. package/dist/analyze/poison-rules.d.ts.map +1 -0
  169. package/dist/analyze/poison-scan.d.ts +48 -0
  170. package/dist/analyze/poison-scan.d.ts.map +1 -0
  171. package/dist/analyze/scan.d.ts +73 -0
  172. package/dist/analyze/scan.d.ts.map +1 -0
  173. package/dist/cache/cache-api.d.ts +48 -0
  174. package/dist/cache/cache-api.d.ts.map +1 -0
  175. package/dist/cache/fast-hash.d.ts +5 -0
  176. package/dist/cache/fast-hash.d.ts.map +1 -1
  177. package/dist/cache/handler-store.d.ts +33 -0
  178. package/dist/cache/handler-store.d.ts.map +1 -0
  179. package/dist/cache/index.d.ts +32 -9
  180. package/dist/cache/index.d.ts.map +1 -1
  181. package/dist/cache/index.js +3 -326
  182. package/dist/cache/invalidation-epoch.d.ts +43 -0
  183. package/dist/cache/invalidation-epoch.d.ts.map +1 -0
  184. package/dist/cache/json-lossy-check.d.ts +11 -0
  185. package/dist/cache/json-lossy-check.d.ts.map +1 -0
  186. package/dist/cache/redis-handler.d.ts +141 -9
  187. package/dist/cache/redis-handler.d.ts.map +1 -1
  188. package/dist/cache/singleflight.d.ts +21 -2
  189. package/dist/cache/singleflight.d.ts.map +1 -1
  190. package/dist/cache/sizeof.d.ts +22 -0
  191. package/dist/cache/sizeof.d.ts.map +1 -0
  192. package/dist/cache/stable-stringify.d.ts +9 -0
  193. package/dist/cache/stable-stringify.d.ts.map +1 -1
  194. package/dist/cache/store.d.ts +53 -0
  195. package/dist/cache/store.d.ts.map +1 -0
  196. package/dist/cache/stores/cloudflare-kv.d.ts +38 -0
  197. package/dist/cache/stores/cloudflare-kv.d.ts.map +1 -0
  198. package/dist/cache/stores/cloudflare-kv.js +29 -0
  199. package/dist/cache/stores/cloudflare-kv.js.map +1 -0
  200. package/dist/cache/stores/memory.d.ts +42 -0
  201. package/dist/cache/stores/memory.d.ts.map +1 -0
  202. package/dist/cache/stores/memory.js +90 -0
  203. package/dist/cache/stores/memory.js.map +1 -0
  204. package/dist/cache/stores/redis.d.ts +69 -0
  205. package/dist/cache/stores/redis.d.ts.map +1 -0
  206. package/dist/cache/stores/redis.js +35 -0
  207. package/dist/cache/stores/redis.js.map +1 -0
  208. package/dist/cache/stores/vercel.d.ts +36 -0
  209. package/dist/cache/stores/vercel.d.ts.map +1 -0
  210. package/dist/cache/stores/vercel.js +33 -0
  211. package/dist/cache/stores/vercel.js.map +1 -0
  212. package/dist/cache/tag-aware-handler.d.ts +52 -0
  213. package/dist/cache/tag-aware-handler.d.ts.map +1 -0
  214. package/dist/cache/timber-cache.d.ts +21 -11
  215. package/dist/cache/timber-cache.d.ts.map +1 -1
  216. package/dist/cdn/cloudflare-purge.d.ts +23 -0
  217. package/dist/cdn/cloudflare-purge.d.ts.map +1 -0
  218. package/dist/cdn/cloudflare-purge.js +30 -0
  219. package/dist/cdn/cloudflare-purge.js.map +1 -0
  220. package/dist/cdn/fastly-purge.d.ts +25 -0
  221. package/dist/cdn/fastly-purge.d.ts.map +1 -0
  222. package/dist/cdn/fastly-purge.js +33 -0
  223. package/dist/cdn/fastly-purge.js.map +1 -0
  224. package/dist/cdn/headers.d.ts +97 -0
  225. package/dist/cdn/headers.d.ts.map +1 -0
  226. package/dist/cdn/index.d.ts +5 -0
  227. package/dist/cdn/index.d.ts.map +1 -0
  228. package/dist/cdn/index.js +94 -0
  229. package/dist/cdn/index.js.map +1 -0
  230. package/dist/cdn/purge-store.d.ts +23 -0
  231. package/dist/cdn/purge-store.d.ts.map +1 -0
  232. package/dist/cdn/workers-cache-purge.d.ts +20 -0
  233. package/dist/cdn/workers-cache-purge.d.ts.map +1 -0
  234. package/dist/cdn/workers-cache-purge.js +35 -0
  235. package/dist/cdn/workers-cache-purge.js.map +1 -0
  236. package/dist/cli-check.d.ts +133 -0
  237. package/dist/cli-check.d.ts.map +1 -0
  238. package/dist/cli-context.d.ts +54 -0
  239. package/dist/cli-context.d.ts.map +1 -0
  240. package/dist/cli-schema-sync.d.ts +59 -0
  241. package/dist/cli-schema-sync.d.ts.map +1 -0
  242. package/dist/cli.d.ts +85 -13
  243. package/dist/cli.d.ts.map +1 -1
  244. package/dist/cli.js +224 -63
  245. package/dist/cli.js.map +1 -1
  246. package/dist/client/browser-dev.d.ts +42 -2
  247. package/dist/client/browser-dev.d.ts.map +1 -1
  248. package/dist/client/browser-entry/action-dispatch.d.ts +19 -0
  249. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  250. package/dist/client/browser-entry/action-queue.d.ts +63 -0
  251. package/dist/client/browser-entry/action-queue.d.ts.map +1 -0
  252. package/dist/client/browser-entry/hmr.d.ts +21 -0
  253. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  254. package/dist/client/browser-entry/hydrate.d.ts +53 -0
  255. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  256. package/dist/client/browser-entry/index.d.ts +30 -0
  257. package/dist/client/browser-entry/index.d.ts.map +1 -0
  258. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  259. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  260. package/dist/client/browser-entry/router-init.d.ts +41 -0
  261. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  262. package/dist/client/browser-entry/rsc-stream.d.ts +32 -0
  263. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  264. package/dist/client/browser-entry/scroll.d.ts +28 -0
  265. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  266. package/dist/client/deny-last-resort.d.ts +29 -0
  267. package/dist/client/deny-last-resort.d.ts.map +1 -0
  268. package/dist/client/error-boundary.d.ts +58 -9
  269. package/dist/client/error-boundary.d.ts.map +1 -1
  270. package/dist/client/error-boundary.js +2 -126
  271. package/dist/client/error-reconstituter.d.ts +55 -0
  272. package/dist/client/error-reconstituter.d.ts.map +1 -0
  273. package/dist/client/form.d.ts +16 -27
  274. package/dist/client/form.d.ts.map +1 -1
  275. package/dist/client/global-context.d.ts +15 -0
  276. package/dist/client/global-context.d.ts.map +1 -0
  277. package/dist/client/history.d.ts +50 -9
  278. package/dist/client/history.d.ts.map +1 -1
  279. package/dist/client/index.d.ts +20 -33
  280. package/dist/client/index.d.ts.map +1 -1
  281. package/dist/client/index.js +330 -1150
  282. package/dist/client/index.js.map +1 -1
  283. package/dist/client/internal.d.ts +20 -0
  284. package/dist/client/internal.d.ts.map +1 -0
  285. package/dist/client/internal.js +792 -0
  286. package/dist/client/internal.js.map +1 -0
  287. package/dist/client/link.d.ts +85 -60
  288. package/dist/client/link.d.ts.map +1 -1
  289. package/dist/client/location-search.d.ts +12 -0
  290. package/dist/client/location-search.d.ts.map +1 -0
  291. package/dist/client/navigation-api.d.ts +133 -0
  292. package/dist/client/navigation-api.d.ts.map +1 -0
  293. package/dist/client/navigation-commit.d.ts +111 -0
  294. package/dist/client/navigation-commit.d.ts.map +1 -0
  295. package/dist/client/navigation-context.d.ts +54 -36
  296. package/dist/client/navigation-context.d.ts.map +1 -1
  297. package/dist/client/navigation-root.d.ts +106 -0
  298. package/dist/client/navigation-root.d.ts.map +1 -0
  299. package/dist/client/navigation-transition.d.ts +192 -0
  300. package/dist/client/navigation-transition.d.ts.map +1 -0
  301. package/dist/client/nuqs-adapter.d.ts +1 -1
  302. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  303. package/dist/client/params-context.d.ts +81 -0
  304. package/dist/client/params-context.d.ts.map +1 -0
  305. package/dist/client/react-root.d.ts +45 -0
  306. package/dist/client/react-root.d.ts.map +1 -0
  307. package/dist/client/router-effects.d.ts +137 -0
  308. package/dist/client/router-effects.d.ts.map +1 -0
  309. package/dist/client/router-lifecycle.d.ts +98 -0
  310. package/dist/client/router-lifecycle.d.ts.map +1 -0
  311. package/dist/client/router-pipeline.d.ts +84 -0
  312. package/dist/client/router-pipeline.d.ts.map +1 -0
  313. package/dist/client/router-ref.d.ts +2 -2
  314. package/dist/client/router-ref.d.ts.map +1 -1
  315. package/dist/client/router-skew.d.ts +21 -0
  316. package/dist/client/router-skew.d.ts.map +1 -0
  317. package/dist/client/router-types.d.ts +334 -0
  318. package/dist/client/router-types.d.ts.map +1 -0
  319. package/dist/client/router-url.d.ts +24 -0
  320. package/dist/client/router-url.d.ts.map +1 -0
  321. package/dist/client/router.d.ts +1 -97
  322. package/dist/client/router.d.ts.map +1 -1
  323. package/dist/client/rsc-fetch.d.ts +110 -28
  324. package/dist/client/rsc-fetch.d.ts.map +1 -1
  325. package/dist/client/segment-cache.d.ts +186 -25
  326. package/dist/client/segment-cache.d.ts.map +1 -1
  327. package/dist/client/segment-context.d.ts.map +1 -1
  328. package/dist/client/segment-outlet.d.ts +68 -0
  329. package/dist/client/segment-outlet.d.ts.map +1 -0
  330. package/dist/client/segment-update-context.d.ts +15 -0
  331. package/dist/client/segment-update-context.d.ts.map +1 -0
  332. package/dist/client/shallow-url.d.ts +10 -0
  333. package/dist/client/shallow-url.d.ts.map +1 -0
  334. package/dist/client/slot-content-cache-context.d.ts +35 -0
  335. package/dist/client/slot-content-cache-context.d.ts.map +1 -0
  336. package/dist/client/slot-context.d.ts +31 -0
  337. package/dist/client/slot-context.d.ts.map +1 -0
  338. package/dist/client/slot-outlet.d.ts +16 -0
  339. package/dist/client/slot-outlet.d.ts.map +1 -0
  340. package/dist/client/slot-provider.d.ts +25 -0
  341. package/dist/client/slot-provider.d.ts.map +1 -0
  342. package/dist/client/ssr-data.d.ts +26 -50
  343. package/dist/client/ssr-data.d.ts.map +1 -1
  344. package/dist/client/stale-client.d.ts +69 -0
  345. package/dist/client/stale-client.d.ts.map +1 -0
  346. package/dist/client/state.d.ts +21 -13
  347. package/dist/client/state.d.ts.map +1 -1
  348. package/dist/client/status-page-marker.d.ts +25 -0
  349. package/dist/client/status-page-marker.d.ts.map +1 -0
  350. package/dist/client/top-loader.d.ts +7 -6
  351. package/dist/client/top-loader.d.ts.map +1 -1
  352. package/dist/client/unload-guard.d.ts +5 -0
  353. package/dist/client/unload-guard.d.ts.map +1 -1
  354. package/dist/client/use-cookie.d.ts +12 -0
  355. package/dist/client/use-cookie.d.ts.map +1 -1
  356. package/dist/client/use-link-status.d.ts +5 -5
  357. package/dist/client/use-link-status.d.ts.map +1 -1
  358. package/dist/client/use-pathname.d.ts +13 -11
  359. package/dist/client/use-pathname.d.ts.map +1 -1
  360. package/dist/client/use-pending-navigation.d.ts +23 -0
  361. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  362. package/dist/client/use-query-states.d.ts +10 -4
  363. package/dist/client/use-query-states.d.ts.map +1 -1
  364. package/dist/client/use-router.d.ts +15 -8
  365. package/dist/client/use-router.d.ts.map +1 -1
  366. package/dist/client/use-search-params.d.ts +15 -8
  367. package/dist/client/use-search-params.d.ts.map +1 -1
  368. package/dist/client/use-segment-params.d.ts +55 -0
  369. package/dist/client/use-segment-params.d.ts.map +1 -0
  370. package/dist/codec.d.ts +69 -0
  371. package/dist/codec.d.ts.map +1 -0
  372. package/dist/codec.js +76 -0
  373. package/dist/codec.js.map +1 -0
  374. package/dist/config-types.d.ts +323 -0
  375. package/dist/config-types.d.ts.map +1 -0
  376. package/dist/config-validation.d.ts +68 -0
  377. package/dist/config-validation.d.ts.map +1 -0
  378. package/dist/cookies/define-cookie.d.ts +58 -25
  379. package/dist/cookies/define-cookie.d.ts.map +1 -1
  380. package/dist/cookies/index.d.ts +3 -2
  381. package/dist/cookies/index.d.ts.map +1 -1
  382. package/dist/cookies/index.js +256 -36
  383. package/dist/cookies/index.js.map +1 -1
  384. package/dist/cookies/json-cookie.d.ts +64 -0
  385. package/dist/cookies/json-cookie.d.ts.map +1 -0
  386. package/dist/cookies/validation.d.ts +34 -0
  387. package/dist/cookies/validation.d.ts.map +1 -0
  388. package/dist/dev-tools/404-page.d.ts +50 -0
  389. package/dist/dev-tools/404-page.d.ts.map +1 -0
  390. package/dist/dev-tools/browser-logs.d.ts +40 -0
  391. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  392. package/dist/dev-tools/dev-page-shell.d.ts +95 -0
  393. package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
  394. package/dist/dev-tools/error-page.d.ts +32 -0
  395. package/dist/dev-tools/error-page.d.ts.map +1 -0
  396. package/dist/dev-tools/holding-server.d.ts +46 -0
  397. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  398. package/dist/dev-tools/hydration-overlay.d.ts +11 -0
  399. package/dist/dev-tools/hydration-overlay.d.ts.map +1 -0
  400. package/dist/dev-tools/index.d.ts +31 -0
  401. package/dist/dev-tools/index.d.ts.map +1 -0
  402. package/dist/dev-tools/instrumentation.d.ts +74 -0
  403. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  404. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  405. package/dist/dev-tools/logger.d.ts.map +1 -0
  406. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +17 -3
  407. package/dist/dev-tools/logs.d.ts.map +1 -0
  408. package/dist/{plugins/dev-error-overlay.d.ts → dev-tools/overlay.d.ts} +15 -25
  409. package/dist/dev-tools/overlay.d.ts.map +1 -0
  410. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  411. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  412. package/dist/dev-tools/terminal.d.ts +28 -0
  413. package/dist/dev-tools/terminal.d.ts.map +1 -0
  414. package/dist/fonts/ast-walk.d.ts +68 -0
  415. package/dist/fonts/ast-walk.d.ts.map +1 -0
  416. package/dist/fonts/ast.d.ts +112 -8
  417. package/dist/fonts/ast.d.ts.map +1 -1
  418. package/dist/fonts/bundle.d.ts +50 -0
  419. package/dist/fonts/bundle.d.ts.map +1 -0
  420. package/dist/fonts/css.d.ts +1 -1
  421. package/dist/fonts/dev-middleware.d.ts +22 -0
  422. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  423. package/dist/fonts/fallbacks.d.ts +0 -7
  424. package/dist/fonts/fallbacks.d.ts.map +1 -1
  425. package/dist/fonts/google.d.ts +5 -3
  426. package/dist/fonts/google.d.ts.map +1 -1
  427. package/dist/fonts/local.d.ts +5 -5
  428. package/dist/fonts/local.d.ts.map +1 -1
  429. package/dist/fonts/paths.d.ts +43 -0
  430. package/dist/fonts/paths.d.ts.map +1 -0
  431. package/dist/fonts/pipeline.d.ts +177 -0
  432. package/dist/fonts/pipeline.d.ts.map +1 -0
  433. package/dist/fonts/transform.d.ts +82 -0
  434. package/dist/fonts/transform.d.ts.map +1 -0
  435. package/dist/fonts/types.d.ts +47 -1
  436. package/dist/fonts/types.d.ts.map +1 -1
  437. package/dist/fonts/virtual-modules.d.ts +77 -0
  438. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  439. package/dist/index.d.ts +35 -181
  440. package/dist/index.d.ts.map +1 -1
  441. package/dist/index.js +8871 -14233
  442. package/dist/index.js.map +1 -1
  443. package/dist/params/codec-registry.d.ts +26 -0
  444. package/dist/params/codec-registry.d.ts.map +1 -0
  445. package/dist/params/define-schema.d.ts +81 -0
  446. package/dist/params/define-schema.d.ts.map +1 -0
  447. package/dist/params/index.d.ts +5 -0
  448. package/dist/params/index.d.ts.map +1 -0
  449. package/dist/params/index.js +34 -0
  450. package/dist/params/index.js.map +1 -0
  451. package/dist/params/resolve-schema.d.ts +34 -0
  452. package/dist/params/resolve-schema.d.ts.map +1 -0
  453. package/dist/plugin-context.d.ts +262 -0
  454. package/dist/plugin-context.d.ts.map +1 -0
  455. package/dist/plugins/build-manifest.d.ts +7 -3
  456. package/dist/plugins/build-manifest.d.ts.map +1 -1
  457. package/dist/plugins/build-report.d.ts +61 -11
  458. package/dist/plugins/build-report.d.ts.map +1 -1
  459. package/dist/plugins/cache.d.ts +64 -0
  460. package/dist/plugins/cache.d.ts.map +1 -0
  461. package/dist/plugins/callsite-ast.d.ts +117 -0
  462. package/dist/plugins/callsite-ast.d.ts.map +1 -0
  463. package/dist/plugins/callsite-jsx.d.ts +35 -0
  464. package/dist/plugins/callsite-jsx.d.ts.map +1 -0
  465. package/dist/plugins/chunks.d.ts +11 -4
  466. package/dist/plugins/chunks.d.ts.map +1 -1
  467. package/dist/plugins/client-chunks.d.ts +40 -0
  468. package/dist/plugins/client-chunks.d.ts.map +1 -0
  469. package/dist/plugins/client-dep-entries.d.ts +44 -0
  470. package/dist/plugins/client-dep-entries.d.ts.map +1 -0
  471. package/dist/plugins/cloudflare-wasm.d.ts +21 -0
  472. package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
  473. package/dist/plugins/content.d.ts +1 -1
  474. package/dist/plugins/content.d.ts.map +1 -1
  475. package/dist/plugins/dev-discovery.d.ts +123 -0
  476. package/dist/plugins/dev-discovery.d.ts.map +1 -0
  477. package/dist/plugins/dev-server.d.ts +24 -1
  478. package/dist/plugins/dev-server.d.ts.map +1 -1
  479. package/dist/plugins/entries.d.ts +34 -4
  480. package/dist/plugins/entries.d.ts.map +1 -1
  481. package/dist/plugins/fonts.d.ts +35 -74
  482. package/dist/plugins/fonts.d.ts.map +1 -1
  483. package/dist/plugins/graph-endpoint.d.ts +112 -0
  484. package/dist/plugins/graph-endpoint.d.ts.map +1 -0
  485. package/dist/plugins/mdx.d.ts +18 -5
  486. package/dist/plugins/mdx.d.ts.map +1 -1
  487. package/dist/plugins/post-build.d.ts +110 -0
  488. package/dist/plugins/post-build.d.ts.map +1 -0
  489. package/dist/plugins/prebuilt-capture.d.ts +67 -0
  490. package/dist/plugins/prebuilt-capture.d.ts.map +1 -0
  491. package/dist/plugins/prebuilt-options-analysis.d.ts +40 -0
  492. package/dist/plugins/prebuilt-options-analysis.d.ts.map +1 -0
  493. package/dist/plugins/prebuilt.d.ts +98 -0
  494. package/dist/plugins/prebuilt.d.ts.map +1 -0
  495. package/dist/plugins/prerender-sugar.d.ts +39 -0
  496. package/dist/plugins/prerender-sugar.d.ts.map +1 -0
  497. package/dist/plugins/react-resolve.d.ts +49 -0
  498. package/dist/plugins/react-resolve.d.ts.map +1 -0
  499. package/dist/plugins/request-dep/analysis.d.ts +106 -0
  500. package/dist/plugins/request-dep/analysis.d.ts.map +1 -0
  501. package/dist/plugins/request-dep/index.d.ts +75 -0
  502. package/dist/plugins/request-dep/index.d.ts.map +1 -0
  503. package/dist/plugins/request-dep/origin.d.ts +61 -0
  504. package/dist/plugins/request-dep/origin.d.ts.map +1 -0
  505. package/dist/plugins/routing.d.ts +1 -1
  506. package/dist/plugins/routing.d.ts.map +1 -1
  507. package/dist/plugins/rsc-assets-manifest.d.ts +33 -0
  508. package/dist/plugins/rsc-assets-manifest.d.ts.map +1 -0
  509. package/dist/plugins/server-bundle.d.ts.map +1 -1
  510. package/dist/plugins/shims.d.ts +29 -5
  511. package/dist/plugins/shims.d.ts.map +1 -1
  512. package/dist/plugins/static-build.d.ts +246 -26
  513. package/dist/plugins/static-build.d.ts.map +1 -1
  514. package/dist/routing/codegen-shared.d.ts +26 -0
  515. package/dist/routing/codegen-shared.d.ts.map +1 -0
  516. package/dist/routing/codegen-types.d.ts +61 -0
  517. package/dist/routing/codegen-types.d.ts.map +1 -0
  518. package/dist/routing/codegen-write.d.ts +42 -0
  519. package/dist/routing/codegen-write.d.ts.map +1 -0
  520. package/dist/routing/codegen.d.ts +8 -3
  521. package/dist/routing/codegen.d.ts.map +1 -1
  522. package/dist/routing/collision-probe.d.ts +104 -0
  523. package/dist/routing/collision-probe.d.ts.map +1 -0
  524. package/dist/routing/collision-spaces.d.ts +26 -0
  525. package/dist/routing/collision-spaces.d.ts.map +1 -0
  526. package/dist/routing/convention-lint.d.ts +55 -0
  527. package/dist/routing/convention-lint.d.ts.map +1 -0
  528. package/dist/routing/export-detect.d.ts +91 -0
  529. package/dist/routing/export-detect.d.ts.map +1 -0
  530. package/dist/routing/file-cache.d.ts +8 -0
  531. package/dist/routing/file-cache.d.ts.map +1 -0
  532. package/dist/routing/index.d.ts +13 -7
  533. package/dist/routing/index.d.ts.map +1 -1
  534. package/dist/routing/index.js +5 -2
  535. package/dist/routing/interception-overlap.d.ts +35 -0
  536. package/dist/routing/interception-overlap.d.ts.map +1 -0
  537. package/dist/routing/interception.d.ts +234 -10
  538. package/dist/routing/interception.d.ts.map +1 -1
  539. package/dist/routing/link-codegen.d.ts +105 -0
  540. package/dist/routing/link-codegen.d.ts.map +1 -0
  541. package/dist/routing/manifest-codegen.d.ts +26 -0
  542. package/dist/routing/manifest-codegen.d.ts.map +1 -0
  543. package/dist/routing/scanner.d.ts +14 -10
  544. package/dist/routing/scanner.d.ts.map +1 -1
  545. package/dist/routing/schema-validation.d.ts +35 -0
  546. package/dist/routing/schema-validation.d.ts.map +1 -0
  547. package/dist/routing/segment-classify.d.ts +114 -0
  548. package/dist/routing/segment-classify.d.ts.map +1 -0
  549. package/dist/routing/segment-codegen.d.ts +38 -0
  550. package/dist/routing/segment-codegen.d.ts.map +1 -0
  551. package/dist/routing/segment-keys.d.ts +118 -0
  552. package/dist/routing/segment-keys.d.ts.map +1 -0
  553. package/dist/routing/slot-placement.d.ts +48 -0
  554. package/dist/routing/slot-placement.d.ts.map +1 -0
  555. package/dist/routing/types.d.ts +81 -26
  556. package/dist/routing/types.d.ts.map +1 -1
  557. package/dist/routing/walkers.d.ts +57 -0
  558. package/dist/routing/walkers.d.ts.map +1 -0
  559. package/dist/rsc-runtime/rsc.d.ts +1 -1
  560. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  561. package/dist/rsc-runtime/ssr.d.ts +14 -0
  562. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  563. package/dist/rsc-runtime/transforms.d.ts +13 -0
  564. package/dist/rsc-runtime/transforms.d.ts.map +1 -0
  565. package/dist/schema-bridge.d.ts +145 -0
  566. package/dist/schema-bridge.d.ts.map +1 -0
  567. package/dist/search-params/define.d.ts +262 -0
  568. package/dist/search-params/define.d.ts.map +1 -0
  569. package/dist/search-params/index.d.ts +3 -7
  570. package/dist/search-params/index.d.ts.map +1 -1
  571. package/dist/search-params/index.js +179 -360
  572. package/dist/search-params/index.js.map +1 -1
  573. package/dist/search-params/parse-total.d.ts +81 -0
  574. package/dist/search-params/parse-total.d.ts.map +1 -0
  575. package/dist/search-params/serialize-equal.d.ts +9 -0
  576. package/dist/search-params/serialize-equal.d.ts.map +1 -0
  577. package/dist/search-params/wrappers.d.ts +76 -0
  578. package/dist/search-params/wrappers.d.ts.map +1 -0
  579. package/dist/server/access-gate.d.ts +98 -10
  580. package/dist/server/access-gate.d.ts.map +1 -1
  581. package/dist/server/action-client.d.ts +44 -9
  582. package/dist/server/action-client.d.ts.map +1 -1
  583. package/dist/server/action-encryption.d.ts +76 -0
  584. package/dist/server/action-encryption.d.ts.map +1 -0
  585. package/dist/server/action-handler.d.ts +40 -5
  586. package/dist/server/action-handler.d.ts.map +1 -1
  587. package/dist/server/actions.d.ts +78 -40
  588. package/dist/server/actions.d.ts.map +1 -1
  589. package/dist/server/als-registry.d.ts +166 -16
  590. package/dist/server/als-registry.d.ts.map +1 -1
  591. package/dist/server/body-limits.d.ts.map +1 -1
  592. package/dist/server/build-manifest.d.ts +25 -30
  593. package/dist/server/build-manifest.d.ts.map +1 -1
  594. package/dist/server/canonicalize.d.ts +10 -0
  595. package/dist/server/canonicalize.d.ts.map +1 -1
  596. package/dist/server/chain-url-parts.d.ts +82 -0
  597. package/dist/server/chain-url-parts.d.ts.map +1 -0
  598. package/dist/server/children-interception.d.ts +49 -0
  599. package/dist/server/children-interception.d.ts.map +1 -0
  600. package/dist/server/coalesce-tick.d.ts +40 -0
  601. package/dist/server/coalesce-tick.d.ts.map +1 -0
  602. package/dist/server/compress.d.ts.map +1 -1
  603. package/dist/server/cookie-context.d.ts +149 -0
  604. package/dist/server/cookie-context.d.ts.map +1 -0
  605. package/dist/server/cookie-parsing.d.ts +65 -0
  606. package/dist/server/cookie-parsing.d.ts.map +1 -0
  607. package/dist/server/csp-nonce.d.ts +36 -0
  608. package/dist/server/csp-nonce.d.ts.map +1 -0
  609. package/dist/server/csrf.d.ts +58 -15
  610. package/dist/server/csrf.d.ts.map +1 -1
  611. package/dist/server/debug.d.ts +0 -1
  612. package/dist/server/debug.d.ts.map +1 -1
  613. package/dist/server/default-logger.d.ts +23 -0
  614. package/dist/server/default-logger.d.ts.map +1 -0
  615. package/dist/server/default-status-page.d.ts +45 -0
  616. package/dist/server/default-status-page.d.ts.map +1 -0
  617. package/dist/server/deny-boundary.d.ts +257 -0
  618. package/dist/server/deny-boundary.d.ts.map +1 -0
  619. package/dist/server/deny-renderer.d.ts +21 -15
  620. package/dist/server/deny-renderer.d.ts.map +1 -1
  621. package/dist/server/early-hints-sender.d.ts.map +1 -1
  622. package/dist/server/early-hints.d.ts +14 -12
  623. package/dist/server/early-hints.d.ts.map +1 -1
  624. package/dist/server/error-boundary-wrapper.d.ts +102 -10
  625. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  626. package/dist/server/error-response-headers.d.ts +3 -0
  627. package/dist/server/error-response-headers.d.ts.map +1 -0
  628. package/dist/server/fallback-error.d.ts +19 -7
  629. package/dist/server/fallback-error.d.ts.map +1 -1
  630. package/dist/server/flight-injection-state.d.ts +66 -0
  631. package/dist/server/flight-injection-state.d.ts.map +1 -0
  632. package/dist/server/flight-scripts.d.ts +45 -0
  633. package/dist/server/flight-scripts.d.ts.map +1 -0
  634. package/dist/server/form-data.d.ts +41 -0
  635. package/dist/server/form-data.d.ts.map +1 -1
  636. package/dist/server/form-flash.d.ts +2 -2
  637. package/dist/server/head-response.d.ts +35 -0
  638. package/dist/server/head-response.d.ts.map +1 -0
  639. package/dist/server/html-injector-core.d.ts +257 -0
  640. package/dist/server/html-injector-core.d.ts.map +1 -0
  641. package/dist/server/html-injectors.d.ts +84 -42
  642. package/dist/server/html-injectors.d.ts.map +1 -1
  643. package/dist/server/index.d.ts +17 -54
  644. package/dist/server/index.d.ts.map +1 -1
  645. package/dist/server/index.js +195 -2922
  646. package/dist/server/index.js.map +1 -1
  647. package/dist/server/instrumentation.d.ts +11 -4
  648. package/dist/server/instrumentation.d.ts.map +1 -1
  649. package/dist/server/internal.d.ts +47 -0
  650. package/dist/server/internal.d.ts.map +1 -0
  651. package/dist/server/internal.js +4645 -0
  652. package/dist/server/internal.js.map +1 -0
  653. package/dist/server/json-status-response.d.ts +34 -0
  654. package/dist/server/json-status-response.d.ts.map +1 -0
  655. package/dist/server/logger.d.ts +78 -7
  656. package/dist/server/logger.d.ts.map +1 -1
  657. package/dist/server/metadata-collector.d.ts +73 -0
  658. package/dist/server/metadata-collector.d.ts.map +1 -0
  659. package/dist/server/metadata-platform.d.ts +2 -2
  660. package/dist/server/metadata-render.d.ts +2 -2
  661. package/dist/server/metadata-render.d.ts.map +1 -1
  662. package/dist/server/metadata-routes.d.ts +71 -11
  663. package/dist/server/metadata-routes.d.ts.map +1 -1
  664. package/dist/server/metadata-social.d.ts +2 -2
  665. package/dist/server/metadata.d.ts +10 -2
  666. package/dist/server/metadata.d.ts.map +1 -1
  667. package/dist/server/middleware-runner.d.ts +20 -5
  668. package/dist/server/middleware-runner.d.ts.map +1 -1
  669. package/dist/server/node-stream-transforms.d.ts +105 -0
  670. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  671. package/dist/server/nuqs-ssr-provider.d.ts +7 -3
  672. package/dist/server/nuqs-ssr-provider.d.ts.map +1 -1
  673. package/dist/server/param-coercion.d.ts +83 -0
  674. package/dist/server/param-coercion.d.ts.map +1 -0
  675. package/dist/server/pipeline-helpers.d.ts +193 -0
  676. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  677. package/dist/server/pipeline-interception.d.ts +70 -9
  678. package/dist/server/pipeline-interception.d.ts.map +1 -1
  679. package/dist/server/pipeline-metadata.d.ts +7 -1
  680. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  681. package/dist/server/pipeline-outcome.d.ts +59 -0
  682. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  683. package/dist/server/pipeline-phases.d.ts +70 -0
  684. package/dist/server/pipeline-phases.d.ts.map +1 -0
  685. package/dist/server/pipeline.d.ts +147 -23
  686. package/dist/server/pipeline.d.ts.map +1 -1
  687. package/dist/server/port-resolution.d.ts +31 -0
  688. package/dist/server/port-resolution.d.ts.map +1 -0
  689. package/dist/server/prebuilt/cache-key.d.ts +63 -0
  690. package/dist/server/prebuilt/cache-key.d.ts.map +1 -0
  691. package/dist/server/prebuilt/capture-render.d.ts +25 -0
  692. package/dist/server/prebuilt/capture-render.d.ts.map +1 -0
  693. package/dist/server/prebuilt/capture-routes.d.ts +37 -0
  694. package/dist/server/prebuilt/capture-routes.d.ts.map +1 -0
  695. package/dist/server/prebuilt/capture-state.d.ts +101 -0
  696. package/dist/server/prebuilt/capture-state.d.ts.map +1 -0
  697. package/dist/server/prebuilt/key-discipline.d.ts +52 -0
  698. package/dist/server/prebuilt/key-discipline.d.ts.map +1 -0
  699. package/dist/server/prebuilt/lifetime.d.ts +38 -0
  700. package/dist/server/prebuilt/lifetime.d.ts.map +1 -0
  701. package/dist/server/prebuilt/manifest-tag-index.d.ts +27 -0
  702. package/dist/server/prebuilt/manifest-tag-index.d.ts.map +1 -0
  703. package/dist/server/prebuilt/overlay.d.ts +100 -0
  704. package/dist/server/prebuilt/overlay.d.ts.map +1 -0
  705. package/dist/server/prebuilt/payload-source.d.ts +79 -0
  706. package/dist/server/prebuilt/payload-source.d.ts.map +1 -0
  707. package/dist/server/prebuilt/slots.d.ts +106 -0
  708. package/dist/server/prebuilt/slots.d.ts.map +1 -0
  709. package/dist/server/prebuilt/synthetic-store.d.ts +67 -0
  710. package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -0
  711. package/dist/server/prebuilt-builder.d.ts +121 -0
  712. package/dist/server/prebuilt-builder.d.ts.map +1 -0
  713. package/dist/server/prebuilt-runtime.d.ts +111 -0
  714. package/dist/server/prebuilt-runtime.d.ts.map +1 -0
  715. package/dist/server/primitives.d.ts +101 -90
  716. package/dist/server/primitives.d.ts.map +1 -1
  717. package/dist/server/publish-params.d.ts +33 -0
  718. package/dist/server/publish-params.d.ts.map +1 -0
  719. package/dist/server/react-cache-bridge.d.ts +59 -0
  720. package/dist/server/react-cache-bridge.d.ts.map +1 -0
  721. package/dist/server/react-cache-scope.d.ts +49 -0
  722. package/dist/server/react-cache-scope.d.ts.map +1 -0
  723. package/dist/server/render-timeout.d.ts +66 -0
  724. package/dist/server/render-timeout.d.ts.map +1 -0
  725. package/dist/server/render-utils.d.ts +35 -0
  726. package/dist/server/render-utils.d.ts.map +1 -0
  727. package/dist/server/request-context.d.ts +128 -103
  728. package/dist/server/request-context.d.ts.map +1 -1
  729. package/dist/server/request-dep.d.ts +15 -0
  730. package/dist/server/request-dep.d.ts.map +1 -0
  731. package/dist/server/response-cache-policy.d.ts +3 -0
  732. package/dist/server/response-cache-policy.d.ts.map +1 -0
  733. package/dist/server/route-element-builder.d.ts +57 -30
  734. package/dist/server/route-element-builder.d.ts.map +1 -1
  735. package/dist/server/route-element-helpers.d.ts +12 -0
  736. package/dist/server/route-element-helpers.d.ts.map +1 -0
  737. package/dist/server/route-handler.d.ts +1 -1
  738. package/dist/server/route-handler.d.ts.map +1 -1
  739. package/dist/server/route-matcher.d.ts +55 -38
  740. package/dist/server/route-matcher.d.ts.map +1 -1
  741. package/dist/server/route-module-loader.d.ts +37 -0
  742. package/dist/server/route-module-loader.d.ts.map +1 -0
  743. package/dist/server/rsc-cache-key-guard.d.ts +78 -0
  744. package/dist/server/rsc-cache-key-guard.d.ts.map +1 -0
  745. package/dist/server/rsc-entry/action-dispatcher.d.ts +67 -0
  746. package/dist/server/rsc-entry/action-dispatcher.d.ts.map +1 -0
  747. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  748. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  749. package/dist/server/rsc-entry/api-handler.d.ts +19 -3
  750. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  751. package/dist/server/rsc-entry/deny-fallback.d.ts +55 -0
  752. package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -0
  753. package/dist/server/rsc-entry/error-renderer.d.ts +35 -21
  754. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  755. package/dist/server/rsc-entry/helpers.d.ts +14 -59
  756. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  757. package/dist/server/rsc-entry/index.d.ts +30 -6
  758. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  759. package/dist/server/rsc-entry/render-route.d.ts +50 -0
  760. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  761. package/dist/server/rsc-entry/render-signals.d.ts +65 -0
  762. package/dist/server/rsc-entry/render-signals.d.ts.map +1 -0
  763. package/dist/server/rsc-entry/revalidate-renderer.d.ts +98 -0
  764. package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
  765. package/dist/server/rsc-entry/rsc-payload.d.ts +30 -6
  766. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  767. package/dist/server/rsc-entry/rsc-stream.d.ts +12 -30
  768. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  769. package/dist/server/rsc-entry/ssr-bridge.d.ts +6 -2
  770. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  771. package/dist/server/rsc-entry/ssr-renderer.d.ts +44 -7
  772. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  773. package/dist/server/rsc-error-envelope.d.ts +11 -0
  774. package/dist/server/rsc-error-envelope.d.ts.map +1 -0
  775. package/dist/server/safe-load.d.ts +39 -0
  776. package/dist/server/safe-load.d.ts.map +1 -0
  777. package/dist/server/sensitive-fields.d.ts +74 -0
  778. package/dist/server/sensitive-fields.d.ts.map +1 -0
  779. package/dist/server/signal-identity.d.ts +43 -0
  780. package/dist/server/signal-identity.d.ts.map +1 -0
  781. package/dist/server/sitemap-generator.d.ts +130 -0
  782. package/dist/server/sitemap-generator.d.ts.map +1 -0
  783. package/dist/server/sitemap-handler.d.ts +22 -0
  784. package/dist/server/sitemap-handler.d.ts.map +1 -0
  785. package/dist/server/skippable-prefix.d.ts +29 -0
  786. package/dist/server/skippable-prefix.d.ts.map +1 -0
  787. package/dist/server/slot-interception.d.ts +80 -0
  788. package/dist/server/slot-interception.d.ts.map +1 -0
  789. package/dist/server/slot-resolver.d.ts +138 -7
  790. package/dist/server/slot-resolver.d.ts.map +1 -1
  791. package/dist/server/slot-subtree-contain.d.ts +54 -0
  792. package/dist/server/slot-subtree-contain.d.ts.map +1 -0
  793. package/dist/server/ssr-bridge-types.d.ts +198 -0
  794. package/dist/server/ssr-bridge-types.d.ts.map +1 -0
  795. package/dist/server/ssr-entry.d.ts +8 -47
  796. package/dist/server/ssr-entry.d.ts.map +1 -1
  797. package/dist/server/ssr-render.d.ts +60 -27
  798. package/dist/server/ssr-render.d.ts.map +1 -1
  799. package/dist/server/ssr-wrappers.d.ts +93 -0
  800. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  801. package/dist/server/state-tree-diff.d.ts +44 -9
  802. package/dist/server/state-tree-diff.d.ts.map +1 -1
  803. package/dist/server/static-generator.d.ts +112 -0
  804. package/dist/server/static-generator.d.ts.map +1 -0
  805. package/dist/server/static-not-found.d.ts +52 -0
  806. package/dist/server/static-not-found.d.ts.map +1 -0
  807. package/dist/server/status-code-resolver.d.ts +26 -15
  808. package/dist/server/status-code-resolver.d.ts.map +1 -1
  809. package/dist/server/stream-utils.d.ts +59 -0
  810. package/dist/server/stream-utils.d.ts.map +1 -0
  811. package/dist/server/tracing.d.ts +57 -26
  812. package/dist/server/tracing.d.ts.map +1 -1
  813. package/dist/server/tree-match.d.ts +59 -0
  814. package/dist/server/tree-match.d.ts.map +1 -0
  815. package/dist/server/types.d.ts +89 -8
  816. package/dist/server/types.d.ts.map +1 -1
  817. package/dist/server/utils/element-type.d.ts +50 -0
  818. package/dist/server/utils/element-type.d.ts.map +1 -0
  819. package/dist/server/utils/escape-html.d.ts +14 -0
  820. package/dist/server/utils/escape-html.d.ts.map +1 -0
  821. package/dist/server/version-skew.d.ts +61 -0
  822. package/dist/server/version-skew.d.ts.map +1 -0
  823. package/dist/server/workers-cache-bridge.d.ts +26 -0
  824. package/dist/server/workers-cache-bridge.d.ts.map +1 -0
  825. package/dist/shared/als-slots.d.ts +42 -0
  826. package/dist/shared/als-slots.d.ts.map +1 -0
  827. package/dist/shared/base-path.d.ts +56 -0
  828. package/dist/shared/base-path.d.ts.map +1 -0
  829. package/dist/shared/csrf-reject.d.ts +16 -0
  830. package/dist/shared/csrf-reject.d.ts.map +1 -0
  831. package/dist/shared/error-digest.d.ts +28 -0
  832. package/dist/shared/error-digest.d.ts.map +1 -0
  833. package/dist/shared/href-validation.d.ts +49 -0
  834. package/dist/shared/href-validation.d.ts.map +1 -0
  835. package/dist/shared/merge-search-params.d.ts +22 -0
  836. package/dist/shared/merge-search-params.d.ts.map +1 -0
  837. package/dist/shared/param-value.d.ts +104 -0
  838. package/dist/shared/param-value.d.ts.map +1 -0
  839. package/dist/shared/payload-root.d.ts +110 -0
  840. package/dist/shared/payload-root.d.ts.map +1 -0
  841. package/dist/shared/redirect-type.d.ts +17 -0
  842. package/dist/shared/redirect-type.d.ts.map +1 -0
  843. package/dist/shared/rsc-cache-key.d.ts +163 -0
  844. package/dist/shared/rsc-cache-key.d.ts.map +1 -0
  845. package/dist/shared/rsc-error-envelope.d.ts +16 -0
  846. package/dist/shared/rsc-error-envelope.d.ts.map +1 -0
  847. package/dist/shared/rsc-manifest.d.ts +28 -0
  848. package/dist/shared/rsc-manifest.d.ts.map +1 -0
  849. package/dist/shared/rsc-media-type.d.ts +52 -0
  850. package/dist/shared/rsc-media-type.d.ts.map +1 -0
  851. package/dist/shared/rsc-payload-path.d.ts +48 -0
  852. package/dist/shared/rsc-payload-path.d.ts.map +1 -0
  853. package/dist/shared/segment-info.d.ts +66 -0
  854. package/dist/shared/segment-info.d.ts.map +1 -0
  855. package/dist/shared/slot-params.d.ts +52 -0
  856. package/dist/shared/slot-params.d.ts.map +1 -0
  857. package/dist/shared/static-platform-files.d.ts +71 -0
  858. package/dist/shared/static-platform-files.d.ts.map +1 -0
  859. package/dist/shared/status-reason-phrase.d.ts +26 -0
  860. package/dist/shared/status-reason-phrase.d.ts.map +1 -0
  861. package/dist/shims/font-google.d.ts +1 -1
  862. package/dist/shims/font-google.d.ts.map +1 -1
  863. package/dist/shims/font-google.js +42 -0
  864. package/dist/shims/font-google.js.map +1 -0
  865. package/dist/shims/font-local.d.ts +26 -0
  866. package/dist/shims/font-local.d.ts.map +1 -0
  867. package/dist/shims/font-local.js +20 -0
  868. package/dist/shims/font-local.js.map +1 -0
  869. package/dist/shims/headers.d.ts +53 -1
  870. package/dist/shims/headers.d.ts.map +1 -1
  871. package/dist/shims/image.d.ts +120 -120
  872. package/dist/shims/image.d.ts.map +1 -1
  873. package/dist/shims/navigation-client.d.ts +25 -12
  874. package/dist/shims/navigation-client.d.ts.map +1 -1
  875. package/dist/shims/navigation-rsc.d.ts +21 -0
  876. package/dist/shims/navigation-rsc.d.ts.map +1 -0
  877. package/dist/shims/navigation.d.ts +10 -5
  878. package/dist/shims/navigation.d.ts.map +1 -1
  879. package/dist/utils/state-machine.d.ts +80 -0
  880. package/dist/utils/state-machine.d.ts.map +1 -0
  881. package/dist/utils/write-file-atomic.d.ts +17 -0
  882. package/dist/utils/write-file-atomic.d.ts.map +1 -0
  883. package/docs/api/30-api-server.mdx +239 -0
  884. package/docs/api/31-api-client.mdx +170 -0
  885. package/docs/api/32-api-cache.mdx +339 -0
  886. package/docs/api/33-api-search-params.mdx +176 -0
  887. package/docs/api/34-api-config.mdx +359 -0
  888. package/docs/api/35-api-typescript.mdx +91 -0
  889. package/docs/api/36-cli.mdx +202 -0
  890. package/docs/learn/00-introduction.mdx +109 -0
  891. package/docs/learn/01-quick-start.mdx +94 -0
  892. package/docs/learn/02-pages-and-layouts.mdx +147 -0
  893. package/docs/learn/03-fetching-data.mdx +227 -0
  894. package/docs/learn/04-access-control.mdx +115 -0
  895. package/docs/learn/05-the-flush-point.mdx +175 -0
  896. package/docs/learn/06-typed-params.mdx +275 -0
  897. package/docs/learn/07-typed-routes.mdx +108 -0
  898. package/docs/learn/08-forms-and-actions.mdx +146 -0
  899. package/docs/learn/09-streaming.mdx +140 -0
  900. package/docs/learn/10-caching.mdx +270 -0
  901. package/docs/learn/11-middleware.mdx +164 -0
  902. package/docs/learn/12-error-handling.mdx +192 -0
  903. package/docs/learn/13-deploying.mdx +287 -0
  904. package/llms.txt +55 -0
  905. package/package.json +120 -29
  906. package/src/adapters/build-output-helper.ts +353 -0
  907. package/src/adapters/canonicalize-module.ts +29 -0
  908. package/src/adapters/cloudflare-dev.ts +183 -0
  909. package/src/adapters/cloudflare-kv-cache.ts +207 -0
  910. package/src/adapters/cloudflare.ts +809 -150
  911. package/src/adapters/compress-module.ts +110 -86
  912. package/src/adapters/fs-identity.ts +155 -0
  913. package/src/adapters/nitro-presets.ts +124 -0
  914. package/src/adapters/nitro-preview.ts +476 -0
  915. package/src/adapters/nitro.ts +317 -457
  916. package/src/adapters/raw-imports.d.ts +5 -0
  917. package/src/adapters/shared.ts +283 -0
  918. package/src/adapters/types.ts +127 -17
  919. package/src/adapters/wrangler.d.ts +7 -0
  920. package/src/analyze/chains.ts +411 -0
  921. package/src/analyze/classify.ts +259 -0
  922. package/src/analyze/crawl-entry.ts +68 -0
  923. package/src/analyze/crawl.ts +500 -0
  924. package/src/analyze/graph-cache.ts +331 -0
  925. package/src/analyze/graph-command.ts +762 -0
  926. package/src/analyze/live-graph.ts +232 -0
  927. package/src/analyze/poison-rules.ts +165 -0
  928. package/src/analyze/poison-scan.ts +159 -0
  929. package/src/analyze/scan.ts +149 -0
  930. package/src/cache/cache-api.ts +107 -0
  931. package/src/cache/fast-hash.ts +5 -0
  932. package/src/cache/handler-store.ts +76 -0
  933. package/src/cache/index.ts +115 -22
  934. package/src/cache/invalidation-epoch.ts +93 -0
  935. package/src/cache/json-lossy-check.ts +69 -0
  936. package/src/cache/redis-handler.ts +198 -20
  937. package/src/cache/singleflight.ts +72 -6
  938. package/src/cache/sizeof.ts +35 -0
  939. package/src/cache/stable-stringify.ts +65 -2
  940. package/src/cache/store.ts +71 -0
  941. package/src/cache/stores/cloudflare-kv.ts +52 -0
  942. package/src/cache/stores/memory.ts +125 -0
  943. package/src/cache/stores/redis.ts +97 -0
  944. package/src/cache/stores/vercel.ts +59 -0
  945. package/src/cache/tag-aware-handler.ts +254 -0
  946. package/src/cache/timber-cache.ts +165 -40
  947. package/src/cdn/cloudflare-purge.ts +50 -0
  948. package/src/cdn/fastly-purge.ts +63 -0
  949. package/src/cdn/headers.ts +153 -0
  950. package/src/cdn/index.ts +23 -0
  951. package/src/cdn/purge-store.ts +34 -0
  952. package/src/cdn/workers-cache-purge.ts +34 -0
  953. package/src/cli-check.ts +417 -0
  954. package/src/cli-context.ts +119 -0
  955. package/src/cli-schema-sync.ts +401 -0
  956. package/src/cli.ts +330 -78
  957. package/src/client/browser-dev.ts +192 -5
  958. package/src/client/browser-entry/action-dispatch.ts +237 -0
  959. package/src/client/browser-entry/action-queue.ts +152 -0
  960. package/src/client/browser-entry/hmr.ts +70 -0
  961. package/src/client/browser-entry/hydrate.ts +143 -0
  962. package/src/client/browser-entry/index.ts +120 -0
  963. package/src/client/browser-entry/post-hydration.ts +99 -0
  964. package/src/client/browser-entry/router-init.ts +406 -0
  965. package/src/client/browser-entry/rsc-stream.ts +145 -0
  966. package/src/client/browser-entry/scroll.ts +50 -0
  967. package/src/client/deny-last-resort.tsx +54 -0
  968. package/src/client/error-boundary.tsx +279 -61
  969. package/src/client/error-reconstituter.tsx +84 -0
  970. package/src/client/form.tsx +36 -32
  971. package/src/client/global-context.ts +31 -0
  972. package/src/client/history.ts +74 -11
  973. package/src/client/index.ts +89 -53
  974. package/src/client/internal.ts +54 -0
  975. package/src/client/link.tsx +468 -151
  976. package/src/client/location-search.ts +15 -0
  977. package/src/client/navigation-api.ts +380 -0
  978. package/src/client/navigation-commit.ts +318 -0
  979. package/src/client/navigation-context.ts +67 -134
  980. package/src/client/navigation-root.tsx +236 -0
  981. package/src/client/navigation-transition.ts +337 -0
  982. package/src/client/nuqs-adapter.tsx +21 -9
  983. package/src/client/params-context.ts +187 -0
  984. package/src/client/react-root.ts +82 -0
  985. package/src/client/router-effects.ts +235 -0
  986. package/src/client/router-lifecycle.ts +354 -0
  987. package/src/client/router-pipeline.ts +458 -0
  988. package/src/client/router-ref.ts +3 -3
  989. package/src/client/router-skew.ts +30 -0
  990. package/src/client/router-types.ts +370 -0
  991. package/src/client/router-url.ts +32 -0
  992. package/src/client/router.ts +491 -424
  993. package/src/client/rsc-fetch.ts +510 -109
  994. package/src/client/segment-cache.ts +362 -41
  995. package/src/client/segment-context.ts +7 -4
  996. package/src/client/segment-outlet.tsx +96 -0
  997. package/src/client/segment-update-context.ts +23 -0
  998. package/src/client/shallow-url.ts +22 -0
  999. package/src/client/slot-content-cache-context.ts +43 -0
  1000. package/src/client/slot-context.ts +50 -0
  1001. package/src/client/slot-outlet.tsx +22 -0
  1002. package/src/client/slot-provider.tsx +32 -0
  1003. package/src/client/ssr-data.ts +27 -67
  1004. package/src/client/stale-client.ts +191 -0
  1005. package/src/client/state.ts +31 -24
  1006. package/src/client/status-page-marker.tsx +32 -0
  1007. package/src/client/top-loader.tsx +13 -10
  1008. package/src/client/unload-guard.ts +35 -3
  1009. package/src/client/use-cookie.ts +70 -18
  1010. package/src/client/use-link-status.ts +7 -7
  1011. package/src/client/use-pathname.ts +22 -31
  1012. package/src/client/use-pending-navigation.ts +40 -0
  1013. package/src/client/use-query-states.ts +206 -36
  1014. package/src/client/use-router.ts +31 -9
  1015. package/src/client/use-search-params.ts +38 -49
  1016. package/src/client/use-segment-params.ts +69 -0
  1017. package/src/client/use-selected-layout-segment.ts +2 -2
  1018. package/src/codec.ts +149 -0
  1019. package/src/config-types.ts +323 -0
  1020. package/src/config-validation.ts +464 -0
  1021. package/src/cookies/define-cookie.ts +222 -53
  1022. package/src/cookies/index.ts +13 -2
  1023. package/src/cookies/json-cookie.ts +105 -0
  1024. package/src/cookies/validation.ts +192 -0
  1025. package/src/dev-tools/404-page.ts +286 -0
  1026. package/src/dev-tools/browser-logs.ts +55 -0
  1027. package/src/dev-tools/dev-page-shell.ts +278 -0
  1028. package/src/dev-tools/error-page.ts +331 -0
  1029. package/src/dev-tools/holding-server.ts +185 -0
  1030. package/src/dev-tools/hydration-overlay.ts +158 -0
  1031. package/src/dev-tools/index.ts +79 -0
  1032. package/src/dev-tools/instrumentation.ts +261 -0
  1033. package/src/{server/dev-logger.ts → dev-tools/logger.ts} +33 -51
  1034. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +122 -26
  1035. package/src/{plugins/dev-error-overlay.ts → dev-tools/overlay.ts} +25 -80
  1036. package/src/dev-tools/stack-classifier.ts +75 -0
  1037. package/src/dev-tools/terminal.ts +182 -0
  1038. package/src/fonts/ast-walk.ts +235 -0
  1039. package/src/fonts/ast.ts +479 -128
  1040. package/src/fonts/bundle.ts +138 -0
  1041. package/src/fonts/css.ts +1 -1
  1042. package/src/fonts/dev-middleware.ts +85 -0
  1043. package/src/fonts/fallbacks.ts +0 -23
  1044. package/src/fonts/google.ts +101 -19
  1045. package/src/fonts/local.ts +12 -11
  1046. package/src/fonts/paths.ts +58 -0
  1047. package/src/fonts/pipeline.ts +348 -0
  1048. package/src/fonts/transform.ts +311 -0
  1049. package/src/fonts/types.ts +52 -1
  1050. package/src/fonts/virtual-modules.ts +179 -0
  1051. package/src/index.ts +513 -380
  1052. package/src/params/codec-registry.ts +34 -0
  1053. package/src/params/define-schema.ts +115 -0
  1054. package/src/params/index.ts +17 -0
  1055. package/src/params/resolve-schema.ts +84 -0
  1056. package/src/plugin-context.ts +502 -0
  1057. package/src/plugins/build-manifest.ts +204 -36
  1058. package/src/plugins/build-report.ts +299 -87
  1059. package/src/plugins/cache.ts +243 -0
  1060. package/src/plugins/callsite-ast.ts +472 -0
  1061. package/src/plugins/callsite-jsx.ts +243 -0
  1062. package/src/plugins/chunks.ts +74 -5
  1063. package/src/plugins/client-chunks.ts +185 -0
  1064. package/src/plugins/client-dep-entries.ts +78 -0
  1065. package/src/plugins/cloudflare-wasm.ts +141 -0
  1066. package/src/plugins/content.ts +31 -2
  1067. package/src/plugins/dev-discovery.ts +218 -0
  1068. package/src/plugins/dev-server.ts +360 -97
  1069. package/src/plugins/entries.ts +149 -16
  1070. package/src/plugins/fonts.ts +260 -657
  1071. package/src/plugins/graph-endpoint.ts +532 -0
  1072. package/src/plugins/mdx.ts +108 -35
  1073. package/src/plugins/post-build.ts +327 -0
  1074. package/src/plugins/prebuilt-capture.ts +213 -0
  1075. package/src/plugins/prebuilt-options-analysis.ts +175 -0
  1076. package/src/plugins/prebuilt.ts +670 -0
  1077. package/src/plugins/prerender-sugar.ts +316 -0
  1078. package/src/plugins/react-resolve.ts +149 -0
  1079. package/src/plugins/request-dep/analysis.ts +447 -0
  1080. package/src/plugins/request-dep/index.ts +376 -0
  1081. package/src/plugins/request-dep/origin.ts +310 -0
  1082. package/src/plugins/routing.ts +273 -277
  1083. package/src/plugins/rsc-assets-manifest.ts +251 -0
  1084. package/src/plugins/server-bundle.ts +99 -14
  1085. package/src/plugins/shims.ts +260 -97
  1086. package/src/plugins/static-build.ts +681 -71
  1087. package/src/react-canary.d.ts +2 -0
  1088. package/src/routing/codegen-shared.ts +39 -0
  1089. package/src/routing/codegen-types.ts +62 -0
  1090. package/src/routing/codegen-write.ts +163 -0
  1091. package/src/routing/codegen.ts +349 -232
  1092. package/src/routing/collision-probe.ts +438 -0
  1093. package/src/routing/collision-spaces.ts +281 -0
  1094. package/src/routing/convention-lint.ts +651 -0
  1095. package/src/routing/export-detect.ts +536 -0
  1096. package/src/routing/file-cache.ts +23 -0
  1097. package/src/routing/index.ts +16 -7
  1098. package/src/routing/interception-overlap.ts +141 -0
  1099. package/src/routing/interception.ts +1044 -67
  1100. package/src/routing/link-codegen.ts +280 -0
  1101. package/src/routing/manifest-codegen.ts +232 -0
  1102. package/src/routing/scanner.ts +417 -223
  1103. package/src/routing/schema-validation.ts +155 -0
  1104. package/src/routing/segment-classify.ts +280 -0
  1105. package/src/routing/segment-codegen.ts +99 -0
  1106. package/src/routing/segment-keys.ts +186 -0
  1107. package/src/routing/slot-placement.ts +97 -0
  1108. package/src/routing/types.ts +82 -26
  1109. package/src/routing/walkers.ts +98 -0
  1110. package/src/rsc-runtime/rsc.ts +9 -0
  1111. package/src/rsc-runtime/ssr.ts +51 -0
  1112. package/src/rsc-runtime/transforms.ts +13 -0
  1113. package/src/rsc-runtime/vendor-types.d.ts +27 -0
  1114. package/src/schema-bridge.ts +382 -0
  1115. package/src/search-params/define.ts +677 -0
  1116. package/src/search-params/index.ts +14 -20
  1117. package/src/search-params/parse-total.ts +91 -0
  1118. package/src/search-params/serialize-equal.ts +14 -0
  1119. package/src/search-params/wrappers.ts +150 -0
  1120. package/src/server/access-gate.tsx +195 -56
  1121. package/src/server/action-client.ts +126 -33
  1122. package/src/server/action-encryption.ts +144 -0
  1123. package/src/server/action-handler.ts +457 -111
  1124. package/src/server/actions.ts +172 -85
  1125. package/src/server/als-registry.ts +224 -25
  1126. package/src/server/body-limits.ts +10 -2
  1127. package/src/server/build-manifest.ts +33 -57
  1128. package/src/server/canonicalize.ts +6 -3
  1129. package/src/server/chain-url-parts.ts +163 -0
  1130. package/src/server/children-interception.ts +116 -0
  1131. package/src/server/coalesce-tick.ts +75 -0
  1132. package/src/server/compress.ts +43 -8
  1133. package/src/server/cookie-context.ts +454 -0
  1134. package/src/server/cookie-parsing.ts +163 -0
  1135. package/src/server/csp-nonce.ts +58 -0
  1136. package/src/server/csrf.ts +228 -35
  1137. package/src/server/debug.ts +0 -1
  1138. package/src/server/default-logger.ts +100 -0
  1139. package/src/server/default-status-page.ts +88 -0
  1140. package/src/server/deny-boundary.ts +527 -0
  1141. package/src/server/deny-renderer.ts +201 -179
  1142. package/src/server/early-hints-sender.ts +4 -3
  1143. package/src/server/early-hints.ts +39 -29
  1144. package/src/server/error-boundary-wrapper.ts +160 -44
  1145. package/src/server/error-response-headers.ts +18 -0
  1146. package/src/server/fallback-error.ts +88 -104
  1147. package/src/server/flight-injection-state.ts +113 -0
  1148. package/src/server/flight-scripts.ts +67 -0
  1149. package/src/server/form-data.ts +124 -12
  1150. package/src/server/form-flash.ts +3 -3
  1151. package/src/server/head-response.ts +54 -0
  1152. package/src/server/html-injector-core.ts +512 -0
  1153. package/src/server/html-injectors.ts +270 -255
  1154. package/src/server/index.ts +36 -192
  1155. package/src/server/instrumentation.ts +11 -4
  1156. package/src/server/internal.ts +168 -0
  1157. package/src/server/json-status-response.ts +105 -0
  1158. package/src/server/logger.ts +126 -38
  1159. package/src/server/metadata-collector.ts +177 -0
  1160. package/src/server/metadata-platform.ts +2 -2
  1161. package/src/server/metadata-render.ts +30 -8
  1162. package/src/server/metadata-routes.ts +220 -24
  1163. package/src/server/metadata-social.ts +2 -2
  1164. package/src/server/metadata.ts +23 -2
  1165. package/src/server/middleware-runner.ts +32 -5
  1166. package/src/server/node-stream-transforms.ts +323 -0
  1167. package/src/server/nuqs-ssr-provider.tsx +8 -7
  1168. package/src/server/param-coercion.ts +201 -0
  1169. package/src/server/pipeline-helpers.ts +485 -0
  1170. package/src/server/pipeline-interception.ts +241 -32
  1171. package/src/server/pipeline-metadata.ts +15 -1
  1172. package/src/server/pipeline-outcome.ts +290 -0
  1173. package/src/server/pipeline-phases.ts +496 -0
  1174. package/src/server/pipeline.ts +385 -427
  1175. package/src/server/port-resolution.ts +53 -0
  1176. package/src/server/prebuilt/cache-key.ts +299 -0
  1177. package/src/server/prebuilt/capture-render.ts +118 -0
  1178. package/src/server/prebuilt/capture-routes.ts +104 -0
  1179. package/src/server/prebuilt/capture-state.ts +196 -0
  1180. package/src/server/prebuilt/key-discipline.ts +122 -0
  1181. package/src/server/prebuilt/lifetime.ts +151 -0
  1182. package/src/server/prebuilt/manifest-tag-index.ts +46 -0
  1183. package/src/server/prebuilt/overlay.ts +256 -0
  1184. package/src/server/prebuilt/payload-source.ts +202 -0
  1185. package/src/server/prebuilt/slots.ts +202 -0
  1186. package/src/server/prebuilt/synthetic-store.ts +125 -0
  1187. package/src/server/prebuilt-builder.ts +514 -0
  1188. package/src/server/prebuilt-runtime.ts +813 -0
  1189. package/src/server/primitives.ts +153 -171
  1190. package/src/server/publish-params.ts +42 -0
  1191. package/src/server/react-cache-bridge.ts +124 -0
  1192. package/src/server/react-cache-scope.ts +104 -0
  1193. package/src/server/render-timeout.ts +128 -0
  1194. package/src/server/render-utils.ts +45 -0
  1195. package/src/server/request-context.ts +269 -332
  1196. package/src/server/request-dep.ts +37 -0
  1197. package/src/server/response-cache-policy.ts +45 -0
  1198. package/src/server/route-element-builder.ts +514 -355
  1199. package/src/server/route-element-helpers.ts +37 -0
  1200. package/src/server/route-handler.ts +67 -27
  1201. package/src/server/route-matcher.ts +238 -267
  1202. package/src/server/route-module-loader.ts +161 -0
  1203. package/src/server/rsc-cache-key-guard.ts +122 -0
  1204. package/src/server/rsc-entry/action-dispatcher.ts +142 -0
  1205. package/src/server/rsc-entry/action-middleware-runner.ts +130 -0
  1206. package/src/server/rsc-entry/api-handler.ts +49 -81
  1207. package/src/server/rsc-entry/deny-fallback.ts +151 -0
  1208. package/src/server/rsc-entry/error-renderer.ts +301 -113
  1209. package/src/server/rsc-entry/helpers.ts +90 -115
  1210. package/src/server/rsc-entry/index.ts +370 -350
  1211. package/src/server/rsc-entry/render-route.ts +229 -0
  1212. package/src/server/rsc-entry/render-signals.ts +108 -0
  1213. package/src/server/rsc-entry/revalidate-renderer.ts +349 -0
  1214. package/src/server/rsc-entry/rsc-payload.ts +192 -72
  1215. package/src/server/rsc-entry/rsc-stream.ts +128 -131
  1216. package/src/server/rsc-entry/ssr-bridge.ts +19 -6
  1217. package/src/server/rsc-entry/ssr-renderer.ts +300 -137
  1218. package/src/server/rsc-error-envelope.ts +18 -0
  1219. package/src/server/rsc-prop-warnings.ts +1 -1
  1220. package/src/server/safe-load.ts +53 -0
  1221. package/src/server/sensitive-fields.ts +230 -0
  1222. package/src/server/server-only-guard-noop.js +3 -0
  1223. package/src/server/server-timing.ts +1 -1
  1224. package/src/server/signal-identity.ts +112 -0
  1225. package/src/server/sitemap-generator.ts +337 -0
  1226. package/src/server/sitemap-handler.ts +157 -0
  1227. package/src/server/skippable-prefix.ts +172 -0
  1228. package/src/server/slot-interception.ts +168 -0
  1229. package/src/server/slot-resolver.ts +707 -300
  1230. package/src/server/slot-subtree-contain.ts +273 -0
  1231. package/src/server/ssr-bridge-types.ts +201 -0
  1232. package/src/server/ssr-entry.ts +225 -104
  1233. package/src/server/ssr-render.ts +354 -91
  1234. package/src/server/ssr-wrappers.tsx +162 -0
  1235. package/src/server/state-tree-diff.ts +85 -30
  1236. package/src/server/static-generator.ts +680 -0
  1237. package/src/server/static-not-found.ts +134 -0
  1238. package/src/server/status-code-resolver.ts +107 -148
  1239. package/src/server/stream-utils.ts +343 -0
  1240. package/src/server/tracing.ts +163 -68
  1241. package/src/server/tree-match.ts +494 -0
  1242. package/src/server/types.ts +96 -11
  1243. package/src/server/utils/element-type.ts +88 -0
  1244. package/src/server/utils/escape-html.ts +20 -0
  1245. package/src/server/version-skew.ts +104 -0
  1246. package/src/server/waituntil-bridge.ts +1 -1
  1247. package/src/server/workers-cache-bridge.ts +33 -0
  1248. package/src/shared/als-slots.ts +74 -0
  1249. package/src/shared/base-path.ts +80 -0
  1250. package/src/shared/csrf-reject.ts +15 -0
  1251. package/src/shared/error-digest.ts +46 -0
  1252. package/src/shared/href-validation.ts +159 -0
  1253. package/src/shared/merge-search-params.ts +55 -0
  1254. package/src/shared/param-value.ts +281 -0
  1255. package/src/shared/payload-root.ts +153 -0
  1256. package/src/shared/redirect-type.ts +17 -0
  1257. package/src/shared/rsc-cache-key.ts +269 -0
  1258. package/src/shared/rsc-error-envelope.ts +16 -0
  1259. package/src/shared/rsc-manifest.ts +29 -0
  1260. package/src/shared/rsc-media-type.ts +59 -0
  1261. package/src/shared/rsc-payload-path.ts +52 -0
  1262. package/src/shared/segment-info.ts +67 -0
  1263. package/src/shared/slot-params.ts +109 -0
  1264. package/src/shared/static-platform-files.ts +75 -0
  1265. package/src/shared/status-reason-phrase.ts +61 -0
  1266. package/src/shims/font-google.ts +1 -1
  1267. package/src/shims/font-local.ts +34 -0
  1268. package/src/shims/headers.ts +122 -1
  1269. package/src/shims/navigation-client.ts +36 -32
  1270. package/src/shims/navigation-rsc.ts +47 -0
  1271. package/src/shims/navigation.ts +10 -7
  1272. package/src/utils/state-machine.ts +111 -0
  1273. package/src/utils/write-file-atomic.ts +32 -0
  1274. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  1275. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  1276. package/dist/_chunks/debug-B3Gypr3D.js +0 -108
  1277. package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
  1278. package/dist/_chunks/format-RyoGQL74.js +0 -164
  1279. package/dist/_chunks/format-RyoGQL74.js.map +0 -1
  1280. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  1281. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  1282. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
  1283. package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
  1284. package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
  1285. package/dist/_chunks/ssr-data-MjmprTmO.js +0 -88
  1286. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  1287. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  1288. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  1289. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  1290. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  1291. package/dist/_chunks/use-query-states-D5KaffOK.js +0 -109
  1292. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  1293. package/dist/adapters/cloudflare.js.map +0 -1
  1294. package/dist/cache/index.js.map +0 -1
  1295. package/dist/cache/register-cached-function.d.ts +0 -17
  1296. package/dist/cache/register-cached-function.d.ts.map +0 -1
  1297. package/dist/client/browser-entry.d.ts +0 -21
  1298. package/dist/client/browser-entry.d.ts.map +0 -1
  1299. package/dist/client/error-boundary.js.map +0 -1
  1300. package/dist/client/head.d.ts +0 -16
  1301. package/dist/client/head.d.ts.map +0 -1
  1302. package/dist/client/link-status-provider.d.ts +0 -11
  1303. package/dist/client/link-status-provider.d.ts.map +0 -1
  1304. package/dist/client/segment-merger.d.ts +0 -119
  1305. package/dist/client/segment-merger.d.ts.map +0 -1
  1306. package/dist/client/stale-reload.d.ts +0 -44
  1307. package/dist/client/stale-reload.d.ts.map +0 -1
  1308. package/dist/client/transition-root.d.ts +0 -74
  1309. package/dist/client/transition-root.d.ts.map +0 -1
  1310. package/dist/client/types.d.ts +0 -14
  1311. package/dist/client/types.d.ts.map +0 -1
  1312. package/dist/client/use-navigation-pending.d.ts +0 -26
  1313. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  1314. package/dist/client/use-params.d.ts +0 -92
  1315. package/dist/client/use-params.d.ts.map +0 -1
  1316. package/dist/content/index.d.ts +0 -11
  1317. package/dist/content/index.d.ts.map +0 -1
  1318. package/dist/content/index.js +0 -2
  1319. package/dist/plugins/adapter-build.d.ts +0 -18
  1320. package/dist/plugins/adapter-build.d.ts.map +0 -1
  1321. package/dist/plugins/cache-transform.d.ts +0 -36
  1322. package/dist/plugins/cache-transform.d.ts.map +0 -1
  1323. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  1324. package/dist/plugins/dev-logs.d.ts.map +0 -1
  1325. package/dist/plugins/dynamic-transform.d.ts +0 -72
  1326. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  1327. package/dist/plugins/server-action-exports.d.ts +0 -26
  1328. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  1329. package/dist/routing/status-file-lint.d.ts +0 -33
  1330. package/dist/routing/status-file-lint.d.ts.map +0 -1
  1331. package/dist/search-params/analyze.d.ts +0 -54
  1332. package/dist/search-params/analyze.d.ts.map +0 -1
  1333. package/dist/search-params/builtin-codecs.d.ts +0 -105
  1334. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  1335. package/dist/search-params/codecs.d.ts +0 -53
  1336. package/dist/search-params/codecs.d.ts.map +0 -1
  1337. package/dist/search-params/create.d.ts +0 -106
  1338. package/dist/search-params/create.d.ts.map +0 -1
  1339. package/dist/search-params/registry.d.ts +0 -20
  1340. package/dist/search-params/registry.d.ts.map +0 -1
  1341. package/dist/server/asset-headers.d.ts +0 -42
  1342. package/dist/server/asset-headers.d.ts.map +0 -1
  1343. package/dist/server/client-module-map.d.ts +0 -47
  1344. package/dist/server/client-module-map.d.ts.map +0 -1
  1345. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  1346. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  1347. package/dist/server/dev-logger.d.ts.map +0 -1
  1348. package/dist/server/dev-span-processor.d.ts +0 -29
  1349. package/dist/server/dev-span-processor.d.ts.map +0 -1
  1350. package/dist/server/dev-warnings.d.ts +0 -129
  1351. package/dist/server/dev-warnings.d.ts.map +0 -1
  1352. package/dist/server/flush.d.ts +0 -74
  1353. package/dist/server/flush.d.ts.map +0 -1
  1354. package/dist/server/manifest-status-resolver.d.ts +0 -58
  1355. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  1356. package/dist/server/prerender.d.ts +0 -77
  1357. package/dist/server/prerender.d.ts.map +0 -1
  1358. package/dist/server/tree-builder.d.ts +0 -126
  1359. package/dist/server/tree-builder.d.ts.map +0 -1
  1360. package/dist/utils/directive-parser.d.ts +0 -70
  1361. package/dist/utils/directive-parser.d.ts.map +0 -1
  1362. package/src/cache/register-cached-function.ts +0 -103
  1363. package/src/client/browser-entry.ts +0 -678
  1364. package/src/client/head.ts +0 -61
  1365. package/src/client/link-status-provider.tsx +0 -30
  1366. package/src/client/segment-merger.ts +0 -339
  1367. package/src/client/stale-reload.ts +0 -87
  1368. package/src/client/transition-root.tsx +0 -166
  1369. package/src/client/types.ts +0 -21
  1370. package/src/client/use-navigation-pending.ts +0 -38
  1371. package/src/client/use-params.ts +0 -141
  1372. package/src/content/index.ts +0 -13
  1373. package/src/plugins/adapter-build.ts +0 -118
  1374. package/src/plugins/cache-transform.ts +0 -199
  1375. package/src/plugins/dynamic-transform.ts +0 -161
  1376. package/src/plugins/server-action-exports.ts +0 -220
  1377. package/src/routing/status-file-lint.ts +0 -112
  1378. package/src/search-params/analyze.ts +0 -192
  1379. package/src/search-params/builtin-codecs.ts +0 -228
  1380. package/src/search-params/codecs.ts +0 -153
  1381. package/src/search-params/create.ts +0 -321
  1382. package/src/search-params/registry.ts +0 -31
  1383. package/src/server/asset-headers.ts +0 -81
  1384. package/src/server/client-module-map.ts +0 -58
  1385. package/src/server/dev-fetch-instrumentation.ts +0 -96
  1386. package/src/server/dev-span-processor.ts +0 -78
  1387. package/src/server/dev-warnings.ts +0 -283
  1388. package/src/server/flush.ts +0 -182
  1389. package/src/server/manifest-status-resolver.ts +0 -215
  1390. package/src/server/prerender.ts +0 -139
  1391. package/src/server/tree-builder.ts +0 -382
  1392. package/src/shims/server-only-noop.js +0 -6
  1393. package/src/utils/directive-parser.ts +0 -529
@@ -0,0 +1,14 @@
1
+ //#region src/cdn/purge-store.ts
2
+ var handler;
3
+ /** Install a CDN purge handler. Called by the framework at boot from timber.config.ts. */
4
+ function setCdnPurgeHandler(h) {
5
+ handler = h;
6
+ }
7
+ /** Get the current CDN purge handler, if configured. */
8
+ function getCdnPurgeHandler() {
9
+ return handler;
10
+ }
11
+ //#endregion
12
+ export { setCdnPurgeHandler as n, getCdnPurgeHandler as t };
13
+
14
+ //# sourceMappingURL=purge-store-Byr8XOjU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purge-store-Byr8XOjU.js","names":[],"sources":["../../src/cdn/purge-store.ts"],"sourcesContent":["/**\n * CDN purge handler singleton — same pattern as cache/handler-store.ts.\n *\n * Set via timber.config.ts or setCdnPurgeHandler() at boot. When set,\n * cache.invalidate({ tag }) also triggers CDN purge for the invalidated\n * tags, so revalidateTag() composes with CDN caching out of the box.\n *\n * See design/25-production-deployments.md §Layer 2.\n */\n\nexport interface CdnPurgeHandler {\n /**\n * Purge the given cache tags from the CDN.\n * Called by cache.invalidate when a tag is invalidated.\n */\n purgeTags(tags: string[]): Promise<void>;\n}\n\nlet handler: CdnPurgeHandler | undefined;\n\n/** Install a CDN purge handler. Called by the framework at boot from timber.config.ts. */\nexport function setCdnPurgeHandler(h: CdnPurgeHandler): void {\n handler = h;\n}\n\n/** Get the current CDN purge handler, if configured. */\nexport function getCdnPurgeHandler(): CdnPurgeHandler | undefined {\n return handler;\n}\n\n/** @internal — reset for tests only. */\nexport function _resetCdnPurgeHandler(): void {\n handler = undefined;\n}\n"],"mappings":";AAkBA,IAAI;;AAGJ,SAAgB,mBAAmB,GAA0B;CAC3D,UAAU;AACZ;;AAGA,SAAgB,qBAAkD;CAChE,OAAO;AACT"}
@@ -0,0 +1,46 @@
1
+ //#region src/server/render-timeout.ts
2
+ /**
3
+ * Render timeout utilities for SSR streaming pipeline.
4
+ *
5
+ * Provides a RenderTimeoutError class and a helper to create
6
+ * timeout-guarded AbortSignals. Used to defend against hung RSC
7
+ * streams and infinite SSR renders.
8
+ *
9
+ * Design doc: 02-rendering-pipeline.md §"Streaming Constraints"
10
+ */
11
+ /** `renderTimeoutMs` when timber.config.ts leaves it unset. */
12
+ var DEFAULT_RENDER_TIMEOUT_MS = 3e4;
13
+ /**
14
+ * What `renderTimeoutMs: 0` means: a safety ceiling, never "no timeout" —
15
+ * an unbounded render or singleflight wait can hang a connection or
16
+ * deadlock a cache key forever.
17
+ */
18
+ var RENDER_TIMEOUT_CEILING_MS = 12e4;
19
+ /**
20
+ * The one mapping from configured `renderTimeoutMs` to the timeout every
21
+ * consumer enforces. Config enters the runtime already resolved (the
22
+ * runtime config module, static generation's options), so readers never
23
+ * see 0 or undefined.
24
+ */
25
+ function resolveRenderTimeoutMs(configured) {
26
+ return (configured ?? 3e4) || 12e4;
27
+ }
28
+ /**
29
+ * Error thrown when an SSR render or RSC stream read exceeds the
30
+ * configured timeout. Callers can check `instanceof RenderTimeoutError`
31
+ * to distinguish timeout from other errors and return a 504 or close
32
+ * the connection cleanly.
33
+ */
34
+ var RenderTimeoutError = class extends Error {
35
+ timeoutMs;
36
+ constructor(timeoutMs, context) {
37
+ const message = context ? `Render timeout after ${timeoutMs}ms: ${context}` : `Render timeout after ${timeoutMs}ms`;
38
+ super(message);
39
+ this.name = "RenderTimeoutError";
40
+ this.timeoutMs = timeoutMs;
41
+ }
42
+ };
43
+ //#endregion
44
+ export { resolveRenderTimeoutMs as i, RENDER_TIMEOUT_CEILING_MS as n, RenderTimeoutError as r, DEFAULT_RENDER_TIMEOUT_MS as t };
45
+
46
+ //# sourceMappingURL=render-timeout-DOf_BBcO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-timeout-DOf_BBcO.js","names":[],"sources":["../../src/server/render-timeout.ts"],"sourcesContent":["/**\n * Render timeout utilities for SSR streaming pipeline.\n *\n * Provides a RenderTimeoutError class and a helper to create\n * timeout-guarded AbortSignals. Used to defend against hung RSC\n * streams and infinite SSR renders.\n *\n * Design doc: 02-rendering-pipeline.md §\"Streaming Constraints\"\n */\n\n/** `renderTimeoutMs` when timber.config.ts leaves it unset. */\nexport const DEFAULT_RENDER_TIMEOUT_MS = 30_000;\n\n/**\n * What `renderTimeoutMs: 0` means: a safety ceiling, never \"no timeout\" —\n * an unbounded render or singleflight wait can hang a connection or\n * deadlock a cache key forever.\n */\nexport const RENDER_TIMEOUT_CEILING_MS = 120_000;\n\n/**\n * The one mapping from configured `renderTimeoutMs` to the timeout every\n * consumer enforces. Config enters the runtime already resolved (the\n * runtime config module, static generation's options), so readers never\n * see 0 or undefined.\n */\nexport function resolveRenderTimeoutMs(configured: number | undefined): number {\n return (configured ?? DEFAULT_RENDER_TIMEOUT_MS) || RENDER_TIMEOUT_CEILING_MS;\n}\n\n/**\n * Error thrown when an SSR render or RSC stream read exceeds the\n * configured timeout. Callers can check `instanceof RenderTimeoutError`\n * to distinguish timeout from other errors and return a 504 or close\n * the connection cleanly.\n */\nexport class RenderTimeoutError extends Error {\n readonly timeoutMs: number;\n\n constructor(timeoutMs: number, context?: string) {\n const message = context\n ? `Render timeout after ${timeoutMs}ms: ${context}`\n : `Render timeout after ${timeoutMs}ms`;\n super(message);\n this.name = 'RenderTimeoutError';\n this.timeoutMs = timeoutMs;\n }\n}\n\n/**\n * Result of createRenderTimeout — an AbortSignal that fires after\n * the given duration, plus a cancel function to clear the timer\n * when the render completes normally.\n */\nexport interface RenderTimeout {\n /** AbortSignal that aborts after timeoutMs. */\n signal: AbortSignal;\n /** Cancel the timeout timer. Call this when the render completes. */\n cancel: () => void;\n}\n\n/**\n * Create a render timeout that aborts after the given duration.\n *\n * Returns an AbortSignal and a cancel function. The signal fires\n * with a RenderTimeoutError as the abort reason after `timeoutMs`.\n * Call `cancel()` when the render completes to prevent the timeout\n * from firing.\n *\n * If an existing `parentSignal` is provided, the returned signal\n * aborts when either the parent signal or the timeout fires —\n * whichever comes first.\n */\nexport function createRenderTimeout(timeoutMs: number, parentSignal?: AbortSignal): RenderTimeout {\n const controller = new AbortController();\n const reason = new RenderTimeoutError(timeoutMs, 'RSC stream read timed out');\n\n const timer = setTimeout(() => controller.abort(reason), timeoutMs);\n\n let onParentAbort: (() => void) | null = null;\n\n if (parentSignal) {\n if (parentSignal.aborted) {\n clearTimeout(timer);\n controller.abort(parentSignal.reason);\n } else {\n onParentAbort = () => {\n clearTimeout(timer);\n controller.abort(parentSignal.reason);\n };\n parentSignal.addEventListener('abort', onParentAbort, { once: true });\n }\n }\n\n return {\n signal: controller.signal,\n cancel: () => {\n clearTimeout(timer);\n if (onParentAbort && parentSignal) {\n parentSignal.removeEventListener('abort', onParentAbort);\n onParentAbort = null;\n }\n },\n };\n}\n\n/**\n * Race a promise against a timeout. Rejects with RenderTimeoutError\n * if the promise does not resolve within `timeoutMs`.\n *\n * Used to guard individual `rscReader.read()` calls inside pullLoop.\n */\nexport function withTimeout<T>(\n promise: Promise<T>,\n timeoutMs: number,\n context?: string\n): Promise<T> {\n let timer: ReturnType<typeof setTimeout>;\n const timeoutPromise = new Promise<never>((_resolve, reject) => {\n timer = setTimeout(() => {\n reject(new RenderTimeoutError(timeoutMs, context));\n }, timeoutMs);\n });\n\n return Promise.race([promise, timeoutPromise]).finally(() => {\n clearTimeout(timer!);\n });\n}\n"],"mappings":";;;;;;;;;;;AAWA,IAAa,4BAA4B;;;;;;AAOzC,IAAa,4BAA4B;;;;;;;AAQzC,SAAgB,uBAAuB,YAAwC;CAC7E,QAAQ,cAAA,QAAA;AACV;;;;;;;AAQA,IAAa,qBAAb,cAAwC,MAAM;CAC5C;CAEA,YAAY,WAAmB,SAAkB;EAC/C,MAAM,UAAU,UACZ,wBAAwB,UAAU,MAAM,YACxC,wBAAwB,UAAU;EACtC,MAAM,OAAO;EACb,KAAK,OAAO;EACZ,KAAK,YAAY;CACnB;AACF"}
@@ -0,0 +1,50 @@
1
+ import { a as resolveCodecOrSchema, r as isCodec } from "./schema-bridge-C83xa9lT.js";
2
+ //#region src/params/resolve-schema.ts
3
+ /**
4
+ * Reconstruct the bracket key for a segment from its type and param name.
5
+ * Used by the coercion layer to look up codecs in the bracket-keyed map.
6
+ *
7
+ * 'dynamic' + 'id' → '[id]'
8
+ * 'catch-all' + 'slug' → '[...slug]'
9
+ * 'optional-catch-all' + 'slug' → '[[...slug]]'
10
+ */
11
+ function toBracketKey(segmentType, paramName) {
12
+ switch (segmentType) {
13
+ case "catch-all": return `[...${paramName}]`;
14
+ case "optional-catch-all": return `[[...${paramName}]]`;
15
+ default: return `[${paramName}]`;
16
+ }
17
+ }
18
+ var CATCH_ALL_RE = /^\[\.\.\..+\]$/;
19
+ var OPTIONAL_CATCH_ALL_RE = /^\[\[\.\.\..+\]\]$/;
20
+ function isCatchAllKey(key) {
21
+ return CATCH_ALL_RE.test(key) || OPTIONAL_CATCH_ALL_RE.test(key);
22
+ }
23
+ function isOptionalCatchAllKey(key) {
24
+ return OPTIONAL_CATCH_ALL_RE.test(key);
25
+ }
26
+ /**
27
+ * Resolve the global schema's segmentParams into a map of bracket-keyed
28
+ * param name → resolved Codec.
29
+ *
30
+ * Keys are preserved exactly as written in `app/schema.ts` so that
31
+ * `[id]`, `[...id]`, and `[[...id]]` remain distinct entries.
32
+ * The coercion layer in `param-coercion.ts` reconstructs bracket keys
33
+ * from matched segment metadata to look up the correct codec.
34
+ *
35
+ * Input: { '[id]': z.coerce.number(), '[...slug]': codec.string }
36
+ * Output: { '[id]': Codec<number>, '[...slug]': Codec<string> }
37
+ */
38
+ function resolveSchemaCodecs(segmentParams) {
39
+ const resolved = Object.create(null);
40
+ for (const [bracketName, value] of Object.entries(segmentParams)) {
41
+ if (isCatchAllKey(bracketName) && isCodec(value) && !("__catchAll" in value)) throw new Error(`[timber] Schema error: '${bracketName}' is a catch-all segment and requires an array codec (e.g. codec.catchAll(codec.string)). Got a scalar codec.`);
42
+ if (isOptionalCatchAllKey(bracketName) && isCodec(value) && "__catchAll" in value && !("__optional" in value)) throw new Error(`[timber] Schema error: '${bracketName}' is an optional catch-all segment and requires codec.optionalCatchAll() (e.g. codec.optionalCatchAll(codec.string)). Got a non-optional catch-all codec.`);
43
+ resolved[bracketName] = resolveCodecOrSchema(bracketName, value, "param");
44
+ }
45
+ return resolved;
46
+ }
47
+ //#endregion
48
+ export { toBracketKey as n, resolveSchemaCodecs as t };
49
+
50
+ //# sourceMappingURL=resolve-schema-CBR6Lm4i.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-schema-CBR6Lm4i.js","names":[],"sources":["../../src/params/resolve-schema.ts"],"sourcesContent":["/**\n * Schema resolution — resolves the global schema's segmentParams into\n * a runtime-ready codec map keyed by bracket name (e.g. '[id]').\n *\n * Bracket keys are preserved so that `[id]`, `[...id]`, and `[[...id]]`\n * remain distinct entries. The coercion layer reconstructs bracket keys\n * from matched segment metadata to look up the correct codec.\n *\n * Design doc: design/41-global-params.md §Pipeline Integration\n */\n\nimport type { Codec } from '../codec.ts';\nimport { isCodec, resolveCodecOrSchema } from '../schema-bridge.ts';\n\n/**\n * Reconstruct the bracket key for a segment from its type and param name.\n * Used by the coercion layer to look up codecs in the bracket-keyed map.\n *\n * 'dynamic' + 'id' → '[id]'\n * 'catch-all' + 'slug' → '[...slug]'\n * 'optional-catch-all' + 'slug' → '[[...slug]]'\n */\nexport function toBracketKey(segmentType: string, paramName: string): string {\n switch (segmentType) {\n case 'catch-all':\n return `[...${paramName}]`;\n case 'optional-catch-all':\n return `[[...${paramName}]]`;\n default:\n return `[${paramName}]`;\n }\n}\n\nconst CATCH_ALL_RE = /^\\[\\.\\.\\..+\\]$/;\nconst OPTIONAL_CATCH_ALL_RE = /^\\[\\[\\.\\.\\..+\\]\\]$/;\n\nfunction isCatchAllKey(key: string): boolean {\n return CATCH_ALL_RE.test(key) || OPTIONAL_CATCH_ALL_RE.test(key);\n}\n\nfunction isOptionalCatchAllKey(key: string): boolean {\n return OPTIONAL_CATCH_ALL_RE.test(key);\n}\n\n/**\n * Resolve the global schema's segmentParams into a map of bracket-keyed\n * param name → resolved Codec.\n *\n * Keys are preserved exactly as written in `app/schema.ts` so that\n * `[id]`, `[...id]`, and `[[...id]]` remain distinct entries.\n * The coercion layer in `param-coercion.ts` reconstructs bracket keys\n * from matched segment metadata to look up the correct codec.\n *\n * Input: { '[id]': z.coerce.number(), '[...slug]': codec.string }\n * Output: { '[id]': Codec<number>, '[...slug]': Codec<string> }\n */\nexport function resolveSchemaCodecs(\n segmentParams: Record<string, unknown>\n): Record<string, Codec<unknown>> {\n const resolved: Record<string, Codec<unknown>> = Object.create(null);\n\n for (const [bracketName, value] of Object.entries(segmentParams)) {\n if (isCatchAllKey(bracketName) && isCodec(value) && !('__catchAll' in value)) {\n throw new Error(\n `[timber] Schema error: '${bracketName}' is a catch-all segment and requires an array codec ` +\n `(e.g. codec.catchAll(codec.string)). Got a scalar codec.`\n );\n }\n if (\n isOptionalCatchAllKey(bracketName) &&\n isCodec(value) &&\n '__catchAll' in value &&\n !('__optional' in value)\n ) {\n throw new Error(\n `[timber] Schema error: '${bracketName}' is an optional catch-all segment and requires codec.optionalCatchAll() ` +\n `(e.g. codec.optionalCatchAll(codec.string)). Got a non-optional catch-all codec.`\n );\n }\n resolved[bracketName] = resolveCodecOrSchema(bracketName, value, 'param');\n }\n\n return resolved;\n}\n"],"mappings":";;;;;;;;;;AAsBA,SAAgB,aAAa,aAAqB,WAA2B;CAC3E,QAAQ,aAAR;EACE,KAAK,aACH,OAAO,OAAO,UAAU;EAC1B,KAAK,sBACH,OAAO,QAAQ,UAAU;EAC3B,SACE,OAAO,IAAI,UAAU;CACzB;AACF;AAEA,IAAM,eAAe;AACrB,IAAM,wBAAwB;AAE9B,SAAS,cAAc,KAAsB;CAC3C,OAAO,aAAa,KAAK,GAAG,KAAK,sBAAsB,KAAK,GAAG;AACjE;AAEA,SAAS,sBAAsB,KAAsB;CACnD,OAAO,sBAAsB,KAAK,GAAG;AACvC;;;;;;;;;;;;;AAcA,SAAgB,oBACd,eACgC;CAChC,MAAM,WAA2C,OAAO,OAAO,IAAI;CAEnE,KAAK,MAAM,CAAC,aAAa,UAAU,OAAO,QAAQ,aAAa,GAAG;EAChE,IAAI,cAAc,WAAW,KAAK,QAAQ,KAAK,KAAK,EAAE,gBAAgB,QACpE,MAAM,IAAI,MACR,2BAA2B,YAAY,8GAEzC;EAEF,IACE,sBAAsB,WAAW,KACjC,QAAQ,KAAK,KACb,gBAAgB,SAChB,EAAE,gBAAgB,QAElB,MAAM,IAAI,MACR,2BAA2B,YAAY,0JAEzC;EAEF,SAAS,eAAe,qBAAqB,aAAa,OAAO,OAAO;CAC1E;CAEA,OAAO;AACT"}
@@ -0,0 +1,13 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __defProp = Object.defineProperty;
3
+ var __exportAll = (all, no_symbols) => {
4
+ let target = {};
5
+ for (var name in all) __defProp(target, name, {
6
+ get: all[name],
7
+ enumerable: true
8
+ });
9
+ if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
10
+ return target;
11
+ };
12
+ //#endregion
13
+ export { __exportAll as t };
@@ -0,0 +1,243 @@
1
+ //#region src/shared/rsc-cache-key.ts
2
+ /**
3
+ * The `_rsc` payload cache key — derived identically on both sides.
4
+ *
5
+ * The client puts this in the payload URL so the document and its Flight
6
+ * payload occupy different cache keys (TIM-1268). The server recomputes it
7
+ * from the received headers so a request cannot claim one client's key while
8
+ * sending another client's headers — see `server/rsc-cache-key-guard.ts`.
9
+ * Both sides must agree exactly, which is why the derivation lives here and
10
+ * not in either one.
11
+ *
12
+ * Isomorphic: no server or client imports. The browser bundle audit
13
+ * (`tests/client-bundle-audit.test.ts`) enforces the client half of that.
14
+ *
15
+ * See design/19-client-navigation.md §"The `_rsc` cache key".
16
+ */
17
+ /**
18
+ * Digest length in hex characters. 128 bits: the origin guard compares a
19
+ * caller-supplied key against a recomputed one, so the relevant bound is a
20
+ * birthday attack (an attacker who can influence a victim's `X-Timber-URL`
21
+ * gets to search both sides), not second preimage. 64 bits would fall to
22
+ * ~2^32 work; 128 puts it at 2^64.
23
+ */
24
+ var KEY_HEX_LENGTH = 32;
25
+ /**
26
+ * Marks a value as a framework-issued key, and versions the derivation.
27
+ *
28
+ * Without it, an application value that happened to be 32 lowercase hex — an
29
+ * MD5, a token — is indistinguishable from a forged claim: both are "the
30
+ * right shape, the wrong digest", and no information in the value separates
31
+ * them. So the exemption cannot key on shape alone.
32
+ *
33
+ * The prefix resolves that because it is anchored to the address the
34
+ * victim's own client uses. A payload lives at `?_rsc=1.<digest>`, so
35
+ * anything aimed at that cache entry must carry the prefix and therefore
36
+ * gets validated; anything without it cannot be addressing a payload URL at
37
+ * all, and is exempt as application data. An attacker cannot both hit the
38
+ * victim's cache key and dodge the check.
39
+ *
40
+ * The version component also gives the derivation a migration path: the
41
+ * client and the origin must agree byte for byte, so a future change to the
42
+ * canonical form can be rolled out by bumping this instead of a flag day.
43
+ */
44
+ var KEY_PREFIX = "1.";
45
+ /**
46
+ * The request headers that vary an RSC payload response, in canonical
47
+ * casing — this list is also emitted verbatim as the response's `Vary`
48
+ * tokens (`server/pipeline.ts`), since "what varies the response" is one
49
+ * question with one answer, not two lists that happen to agree.
50
+ *
51
+ * This list is the contract, and it is enforced rather than trusted:
52
+ * `tests/rsc-cache-key.test.ts` asserts that the header names
53
+ * `buildRscHeaders()` can emit are exactly this set. A header added to the
54
+ * request without being added here fails that test, because a varying input
55
+ * outside the key is precisely the cache-poisoning hazard the key exists to
56
+ * close.
57
+ *
58
+ * **No credentials, session identifiers, or user-supplied content may be
59
+ * added.** Every value here is hashed into a URL, and URLs are logged by
60
+ * proxies, CDNs, and origin access logs. `fnv1aHash` is a cache-key hash,
61
+ * not a KDF — a low-entropy secret would be recoverable by brute force.
62
+ * Authentication travels on cookies, which never enter the key.
63
+ */
64
+ var RSC_KEY_HEADERS = [
65
+ "Accept",
66
+ "X-Timber-State-Tree",
67
+ "X-Timber-URL",
68
+ "X-Timber-Deployment-Id"
69
+ ];
70
+ /**
71
+ * Whether a value could be a key this module produced.
72
+ *
73
+ * `_rsc` is not a reserved parameter name — an application may already use
74
+ * it for its own search state, including for a value that happens to look
75
+ * like a digest. Anything without the `KEY_PREFIX` is therefore application
76
+ * data, not a claim on a payload cache key, and the origin guard leaves it
77
+ * alone rather than penalizing the response.
78
+ *
79
+ * Derived from `KEY_PREFIX` and `KEY_HEX_LENGTH` rather than spelled again,
80
+ * so the shape cannot drift from the digest that has to satisfy it.
81
+ *
82
+ * Ignoring a malformed value costs no protection: clients only ever send
83
+ * well-formed keys, so a URL bearing a malformed one is an address no
84
+ * legitimate request will ever ask for, and nothing can be poisoned at an
85
+ * address nobody reads.
86
+ */
87
+ function isRscCacheKeyShape(value) {
88
+ if (!value.startsWith(KEY_PREFIX)) return false;
89
+ const digest = value.slice(2);
90
+ return digest.length === KEY_HEX_LENGTH && /^[0-9a-f]+$/.test(digest);
91
+ }
92
+ /**
93
+ * The query parameter carrying the payload cache key.
94
+ *
95
+ * Spelled here rather than at each of the four places that read or write it
96
+ * — the client that appends it, the origin guard that validates it, and the
97
+ * strip below — because it is a wire contract between two independent
98
+ * implementations, exactly like the digest itself.
99
+ */
100
+ var RSC_KEY_PARAM = "_rsc";
101
+ /**
102
+ * Decode one raw `name` or `value` the way `URLSearchParams` does:
103
+ * `application/x-www-form-urlencoded`, so `+` is a space.
104
+ *
105
+ * Malformed percent-escapes throw in `decodeURIComponent`. `URLSearchParams`
106
+ * leaves those bytes as-is rather than throwing, and so do we — a pair we
107
+ * cannot decode is by definition not the framework's, so it is kept.
108
+ */
109
+ function formDecode(raw) {
110
+ try {
111
+ return decodeURIComponent(raw.replace(/\+/g, " "));
112
+ } catch {
113
+ return raw;
114
+ }
115
+ }
116
+ /**
117
+ * Remove framework-issued `_rsc` values from a raw query string.
118
+ *
119
+ * Only values matching `isRscCacheKeyShape` are removed. `_rsc` is not a
120
+ * reserved name (see that function), so `/search?_rsc=foo` is application
121
+ * state and survives — the same exemption the origin guard applies, derived
122
+ * from the same predicate so the two cannot disagree about what "ours"
123
+ * means.
124
+ *
125
+ * Operates on the raw string rather than round-tripping through
126
+ * `URLSearchParams`, so every surviving pair keeps its original bytes.
127
+ * Re-serializing would rewrite `?b` as `?b=` and `?a=%7E` as `?a=~` on RSC
128
+ * navigations only, which is the same class of inconsistency this function
129
+ * exists to remove.
130
+ *
131
+ * Matching decodes the name, because `?%5Frsc=<key>` is a `_rsc` parameter
132
+ * as far as `URLSearchParams` is concerned — the same reasoning as the
133
+ * guard's fast path.
134
+ *
135
+ * @param search - `url.search`, with or without the leading `?`.
136
+ * @returns The query string including a leading `?`, or `''` if empty.
137
+ */
138
+ function stripRscCacheKey(search) {
139
+ const query = search.startsWith("?") ? search.slice(1) : search;
140
+ if (query === "") return "";
141
+ const result = query.split("&").filter((pair) => {
142
+ const eq = pair.indexOf("=");
143
+ if (formDecode(eq === -1 ? pair : pair.slice(0, eq)) !== "_rsc") return true;
144
+ return !isRscCacheKeyShape(eq === -1 ? "" : formDecode(pair.slice(eq + 1)));
145
+ }).join("&");
146
+ return result === "" ? "" : `?${result}`;
147
+ }
148
+ /**
149
+ * The search state application code sees, for any request URL.
150
+ *
151
+ * The `_rsc` key rides on the payload URL of every RSC navigation and on no
152
+ * other request, so reading search params straight off `req.url` makes the
153
+ * same page observe different search state depending on whether it was
154
+ * reached by a full load or a client navigation — and lets the cache key
155
+ * leak into whatever the page builds from it: a canonical URL, a pagination
156
+ * link, an analytics payload (TIM-1272).
157
+ *
158
+ * Every application-facing derivation of search state goes through here.
159
+ * `params` and `search` are returned together, from one strip, because they
160
+ * are two views of one answer and were previously two expressions that had
161
+ * to agree.
162
+ *
163
+ * The raw request URL is deliberately untouched: `server/rsc-cache-key-guard.ts`
164
+ * still reads the parameter from `req.url` to bind the key to the request.
165
+ */
166
+ function appVisibleSearch(url) {
167
+ const search = stripRscCacheKey(url.search);
168
+ return {
169
+ params: new URLSearchParams(search),
170
+ search
171
+ };
172
+ }
173
+ /**
174
+ * Compute the `_rsc` cache key for a request.
175
+ *
176
+ * Absent headers are omitted rather than sent as empty, so "header missing"
177
+ * and "header present but empty" produce different keys.
178
+ *
179
+ * Values are length-prefixed rather than delimiter-separated. Any delimiter
180
+ * can be forged by a value that contains it: with a `\0` separator, an
181
+ * `accept` of `a\nx-timber-url\0b` serializes identically to an `accept` of
182
+ * `a` alongside an `x-timber-url` of `b`, which would let one header claim
183
+ * another's key. HTTP forbids control characters in header values and both
184
+ * `fetch()` and the server runtime reject them, so this is defense in depth
185
+ * — but a length prefix is unambiguous for *any* content, which is a
186
+ * property worth having in a function whose whole job is to be agreed on by
187
+ * two independent implementations.
188
+ *
189
+ * SHA-256, truncated to 128 bits. A fast non-cryptographic hash is the
190
+ * obvious choice for a cache key and is the wrong one here: the origin
191
+ * *compares* this value against a recomputed one, which makes it a check.
192
+ * FNV-1a — used for timber's other cache keys — is a multiply-xor over a
193
+ * fixed field, so an attacker controlling a few bytes of any input (their
194
+ * own `X-Timber-URL`, say) can solve for a chosen digest rather than search
195
+ * for one, and forge a key belonging to somebody else.
196
+ *
197
+ * Returns `null` when no digest is available — `crypto.subtle` is absent in
198
+ * non-secure browsing contexts (plain `http://` on a LAN address). Callers
199
+ * must treat that as "no key", never as "key matches": the client omits the
200
+ * parameter and the server refuses to share-cache. That returns those
201
+ * clients to the pre-TIM-1268 posture, where `Vary` alone separates HTML
202
+ * from Flight — acceptable, because a non-secure origin has no shared-CDN
203
+ * caching story to protect in the first place.
204
+ */
205
+ async function rscCacheKey(lookup) {
206
+ const subtle = globalThis.crypto?.subtle;
207
+ if (!subtle) return null;
208
+ let canonical = "";
209
+ for (const name of RSC_KEY_HEADERS) {
210
+ const value = lookup(name);
211
+ if (value == null) continue;
212
+ canonical += `${name.toLowerCase()}:${value.length}:${value}`;
213
+ }
214
+ const digest = await subtle.digest("SHA-256", new TextEncoder().encode(canonical));
215
+ let hex = "";
216
+ for (const byte of new Uint8Array(digest, 0, KEY_HEX_LENGTH / 2)) hex += byte.toString(16).padStart(2, "0");
217
+ return KEY_PREFIX + hex;
218
+ }
219
+ /**
220
+ * An unverifiable stand-in key, for the one case where the digest cannot be
221
+ * computed: `crypto.subtle` is absent in non-secure browsing contexts.
222
+ * `crypto.getRandomValues` is not gated that way, so it is available exactly
223
+ * where the digest is not.
224
+ *
225
+ * Carries `KEY_PREFIX` like any other key, so the origin reads it as a claim
226
+ * it cannot verify — and refuses to share-cache the response — rather than
227
+ * exempting it as application data. Lives here so the prefix has one home.
228
+ */
229
+ function randomRscCacheKey() {
230
+ const bytes = new Uint8Array(KEY_HEX_LENGTH / 2);
231
+ globalThis.crypto.getRandomValues(bytes);
232
+ return KEY_PREFIX + [...bytes].map((b) => b.toString(16).padStart(2, "0")).join("");
233
+ }
234
+ /** Build a case-insensitive lookup over a plain header record. */
235
+ function recordLookup(headers) {
236
+ const lowered = {};
237
+ for (const name of Object.keys(headers)) lowered[name.toLowerCase()] = headers[name];
238
+ return (name) => lowered[name.toLowerCase()];
239
+ }
240
+ //#endregion
241
+ export { randomRscCacheKey as a, stripRscCacheKey as c, isRscCacheKeyShape as i, RSC_KEY_PARAM as n, recordLookup as o, appVisibleSearch as r, rscCacheKey as s, RSC_KEY_HEADERS as t };
242
+
243
+ //# sourceMappingURL=rsc-cache-key-ClUiXQnK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsc-cache-key-ClUiXQnK.js","names":[],"sources":["../../src/shared/rsc-cache-key.ts"],"sourcesContent":["/**\n * The `_rsc` payload cache key — derived identically on both sides.\n *\n * The client puts this in the payload URL so the document and its Flight\n * payload occupy different cache keys (TIM-1268). The server recomputes it\n * from the received headers so a request cannot claim one client's key while\n * sending another client's headers — see `server/rsc-cache-key-guard.ts`.\n * Both sides must agree exactly, which is why the derivation lives here and\n * not in either one.\n *\n * Isomorphic: no server or client imports. The browser bundle audit\n * (`tests/client-bundle-audit.test.ts`) enforces the client half of that.\n *\n * See design/19-client-navigation.md §\"The `_rsc` cache key\".\n */\n\n/**\n * Digest length in hex characters. 128 bits: the origin guard compares a\n * caller-supplied key against a recomputed one, so the relevant bound is a\n * birthday attack (an attacker who can influence a victim's `X-Timber-URL`\n * gets to search both sides), not second preimage. 64 bits would fall to\n * ~2^32 work; 128 puts it at 2^64.\n */\nconst KEY_HEX_LENGTH = 32;\n\n/**\n * Marks a value as a framework-issued key, and versions the derivation.\n *\n * Without it, an application value that happened to be 32 lowercase hex — an\n * MD5, a token — is indistinguishable from a forged claim: both are \"the\n * right shape, the wrong digest\", and no information in the value separates\n * them. So the exemption cannot key on shape alone.\n *\n * The prefix resolves that because it is anchored to the address the\n * victim's own client uses. A payload lives at `?_rsc=1.<digest>`, so\n * anything aimed at that cache entry must carry the prefix and therefore\n * gets validated; anything without it cannot be addressing a payload URL at\n * all, and is exempt as application data. An attacker cannot both hit the\n * victim's cache key and dodge the check.\n *\n * The version component also gives the derivation a migration path: the\n * client and the origin must agree byte for byte, so a future change to the\n * canonical form can be rolled out by bumping this instead of a flag day.\n */\nconst KEY_PREFIX = '1.';\n\n/**\n * The request headers that vary an RSC payload response, in canonical\n * casing — this list is also emitted verbatim as the response's `Vary`\n * tokens (`server/pipeline.ts`), since \"what varies the response\" is one\n * question with one answer, not two lists that happen to agree.\n *\n * This list is the contract, and it is enforced rather than trusted:\n * `tests/rsc-cache-key.test.ts` asserts that the header names\n * `buildRscHeaders()` can emit are exactly this set. A header added to the\n * request without being added here fails that test, because a varying input\n * outside the key is precisely the cache-poisoning hazard the key exists to\n * close.\n *\n * **No credentials, session identifiers, or user-supplied content may be\n * added.** Every value here is hashed into a URL, and URLs are logged by\n * proxies, CDNs, and origin access logs. `fnv1aHash` is a cache-key hash,\n * not a KDF — a low-entropy secret would be recoverable by brute force.\n * Authentication travels on cookies, which never enter the key.\n */\nexport const RSC_KEY_HEADERS = [\n 'Accept',\n 'X-Timber-State-Tree',\n 'X-Timber-URL',\n 'X-Timber-Deployment-Id',\n] as const;\n\n/**\n * Whether a value could be a key this module produced.\n *\n * `_rsc` is not a reserved parameter name — an application may already use\n * it for its own search state, including for a value that happens to look\n * like a digest. Anything without the `KEY_PREFIX` is therefore application\n * data, not a claim on a payload cache key, and the origin guard leaves it\n * alone rather than penalizing the response.\n *\n * Derived from `KEY_PREFIX` and `KEY_HEX_LENGTH` rather than spelled again,\n * so the shape cannot drift from the digest that has to satisfy it.\n *\n * Ignoring a malformed value costs no protection: clients only ever send\n * well-formed keys, so a URL bearing a malformed one is an address no\n * legitimate request will ever ask for, and nothing can be poisoned at an\n * address nobody reads.\n */\nexport function isRscCacheKeyShape(value: string): boolean {\n if (!value.startsWith(KEY_PREFIX)) return false;\n const digest = value.slice(KEY_PREFIX.length);\n return digest.length === KEY_HEX_LENGTH && /^[0-9a-f]+$/.test(digest);\n}\n\n/**\n * The query parameter carrying the payload cache key.\n *\n * Spelled here rather than at each of the four places that read or write it\n * — the client that appends it, the origin guard that validates it, and the\n * strip below — because it is a wire contract between two independent\n * implementations, exactly like the digest itself.\n */\nexport const RSC_KEY_PARAM = '_rsc';\n\n// ─── Keeping the key out of application state ────────────────────────────\n\n/**\n * Decode one raw `name` or `value` the way `URLSearchParams` does:\n * `application/x-www-form-urlencoded`, so `+` is a space.\n *\n * Malformed percent-escapes throw in `decodeURIComponent`. `URLSearchParams`\n * leaves those bytes as-is rather than throwing, and so do we — a pair we\n * cannot decode is by definition not the framework's, so it is kept.\n */\nfunction formDecode(raw: string): string {\n try {\n return decodeURIComponent(raw.replace(/\\+/g, ' '));\n } catch {\n return raw;\n }\n}\n\n/**\n * Remove framework-issued `_rsc` values from a raw query string.\n *\n * Only values matching `isRscCacheKeyShape` are removed. `_rsc` is not a\n * reserved name (see that function), so `/search?_rsc=foo` is application\n * state and survives — the same exemption the origin guard applies, derived\n * from the same predicate so the two cannot disagree about what \"ours\"\n * means.\n *\n * Operates on the raw string rather than round-tripping through\n * `URLSearchParams`, so every surviving pair keeps its original bytes.\n * Re-serializing would rewrite `?b` as `?b=` and `?a=%7E` as `?a=~` on RSC\n * navigations only, which is the same class of inconsistency this function\n * exists to remove.\n *\n * Matching decodes the name, because `?%5Frsc=<key>` is a `_rsc` parameter\n * as far as `URLSearchParams` is concerned — the same reasoning as the\n * guard's fast path.\n *\n * @param search - `url.search`, with or without the leading `?`.\n * @returns The query string including a leading `?`, or `''` if empty.\n */\nexport function stripRscCacheKey(search: string): string {\n const query = search.startsWith('?') ? search.slice(1) : search;\n if (query === '') return '';\n const kept = query.split('&').filter((pair) => {\n const eq = pair.indexOf('=');\n if (formDecode(eq === -1 ? pair : pair.slice(0, eq)) !== RSC_KEY_PARAM) return true;\n return !isRscCacheKeyShape(eq === -1 ? '' : formDecode(pair.slice(eq + 1)));\n });\n const result = kept.join('&');\n return result === '' ? '' : `?${result}`;\n}\n\n/** A request's search state as application code should see it. */\nexport interface AppVisibleSearch {\n /** Parsed params, with the framework's cache key removed. */\n params: URLSearchParams;\n /** The matching raw query string — `''` or `?…`. */\n search: string;\n}\n\n/**\n * The search state application code sees, for any request URL.\n *\n * The `_rsc` key rides on the payload URL of every RSC navigation and on no\n * other request, so reading search params straight off `req.url` makes the\n * same page observe different search state depending on whether it was\n * reached by a full load or a client navigation — and lets the cache key\n * leak into whatever the page builds from it: a canonical URL, a pagination\n * link, an analytics payload (TIM-1272).\n *\n * Every application-facing derivation of search state goes through here.\n * `params` and `search` are returned together, from one strip, because they\n * are two views of one answer and were previously two expressions that had\n * to agree.\n *\n * The raw request URL is deliberately untouched: `server/rsc-cache-key-guard.ts`\n * still reads the parameter from `req.url` to bind the key to the request.\n */\nexport function appVisibleSearch(url: URL): AppVisibleSearch {\n const search = stripRscCacheKey(url.search);\n return { params: new URLSearchParams(search), search };\n}\n\n/**\n * Reads a header value by name. Must be case-insensitive — `Headers.get()`\n * already is, and `recordLookup` below makes a plain record so.\n */\nexport type HeaderLookup = (name: string) => string | null | undefined;\n\n/**\n * Compute the `_rsc` cache key for a request.\n *\n * Absent headers are omitted rather than sent as empty, so \"header missing\"\n * and \"header present but empty\" produce different keys.\n *\n * Values are length-prefixed rather than delimiter-separated. Any delimiter\n * can be forged by a value that contains it: with a `\\0` separator, an\n * `accept` of `a\\nx-timber-url\\0b` serializes identically to an `accept` of\n * `a` alongside an `x-timber-url` of `b`, which would let one header claim\n * another's key. HTTP forbids control characters in header values and both\n * `fetch()` and the server runtime reject them, so this is defense in depth\n * — but a length prefix is unambiguous for *any* content, which is a\n * property worth having in a function whose whole job is to be agreed on by\n * two independent implementations.\n *\n * SHA-256, truncated to 128 bits. A fast non-cryptographic hash is the\n * obvious choice for a cache key and is the wrong one here: the origin\n * *compares* this value against a recomputed one, which makes it a check.\n * FNV-1a — used for timber's other cache keys — is a multiply-xor over a\n * fixed field, so an attacker controlling a few bytes of any input (their\n * own `X-Timber-URL`, say) can solve for a chosen digest rather than search\n * for one, and forge a key belonging to somebody else.\n *\n * Returns `null` when no digest is available — `crypto.subtle` is absent in\n * non-secure browsing contexts (plain `http://` on a LAN address). Callers\n * must treat that as \"no key\", never as \"key matches\": the client omits the\n * parameter and the server refuses to share-cache. That returns those\n * clients to the pre-TIM-1268 posture, where `Vary` alone separates HTML\n * from Flight — acceptable, because a non-secure origin has no shared-CDN\n * caching story to protect in the first place.\n */\nexport async function rscCacheKey(lookup: HeaderLookup): Promise<string | null> {\n const subtle = globalThis.crypto?.subtle;\n if (!subtle) return null;\n let canonical = '';\n for (const name of RSC_KEY_HEADERS) {\n const value = lookup(name);\n if (value == null) continue;\n // Lowercased in the canonical form so the two implementations cannot\n // disagree over the casing of the constant they share.\n canonical += `${name.toLowerCase()}:${value.length}:${value}`;\n }\n const digest = await subtle.digest('SHA-256', new TextEncoder().encode(canonical));\n let hex = '';\n for (const byte of new Uint8Array(digest, 0, KEY_HEX_LENGTH / 2)) {\n hex += byte.toString(16).padStart(2, '0');\n }\n return KEY_PREFIX + hex;\n}\n\n/**\n * An unverifiable stand-in key, for the one case where the digest cannot be\n * computed: `crypto.subtle` is absent in non-secure browsing contexts.\n * `crypto.getRandomValues` is not gated that way, so it is available exactly\n * where the digest is not.\n *\n * Carries `KEY_PREFIX` like any other key, so the origin reads it as a claim\n * it cannot verify — and refuses to share-cache the response — rather than\n * exempting it as application data. Lives here so the prefix has one home.\n */\nexport function randomRscCacheKey(): string {\n const bytes = new Uint8Array(KEY_HEX_LENGTH / 2);\n globalThis.crypto.getRandomValues(bytes);\n return KEY_PREFIX + [...bytes].map((b) => b.toString(16).padStart(2, '0')).join('');\n}\n\n/** Build a case-insensitive lookup over a plain header record. */\nexport function recordLookup(headers: Record<string, string>): HeaderLookup {\n const lowered: Record<string, string> = {};\n for (const name of Object.keys(headers)) {\n lowered[name.toLowerCase()] = headers[name];\n }\n return (name) => lowered[name.toLowerCase()];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuBA,IAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;AAqBvB,IAAM,aAAa;;;;;;;;;;;;;;;;;;;;AAqBnB,IAAa,kBAAkB;CAC7B;CACA;CACA;CACA;AACF;;;;;;;;;;;;;;;;;;AAmBA,SAAgB,mBAAmB,OAAwB;CACzD,IAAI,CAAC,MAAM,WAAW,UAAU,GAAG,OAAO;CAC1C,MAAM,SAAS,MAAM,MAAM,CAAiB;CAC5C,OAAO,OAAO,WAAW,kBAAkB,cAAc,KAAK,MAAM;AACtE;;;;;;;;;AAUA,IAAa,gBAAgB;;;;;;;;;AAY7B,SAAS,WAAW,KAAqB;CACvC,IAAI;EACF,OAAO,mBAAmB,IAAI,QAAQ,OAAO,GAAG,CAAC;CACnD,QAAQ;EACN,OAAO;CACT;AACF;;;;;;;;;;;;;;;;;;;;;;;AAwBA,SAAgB,iBAAiB,QAAwB;CACvD,MAAM,QAAQ,OAAO,WAAW,GAAG,IAAI,OAAO,MAAM,CAAC,IAAI;CACzD,IAAI,UAAU,IAAI,OAAO;CAMzB,MAAM,SALO,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,SAAS;EAC7C,MAAM,KAAK,KAAK,QAAQ,GAAG;EAC3B,IAAI,WAAW,OAAO,KAAK,OAAO,KAAK,MAAM,GAAG,EAAE,CAAC,MAAA,QAAqB,OAAO;EAC/E,OAAO,CAAC,mBAAmB,OAAO,KAAK,KAAK,WAAW,KAAK,MAAM,KAAK,CAAC,CAAC,CAAC;CAC5E,CACe,CAAA,CAAK,KAAK,GAAG;CAC5B,OAAO,WAAW,KAAK,KAAK,IAAI;AAClC;;;;;;;;;;;;;;;;;;;AA4BA,SAAgB,iBAAiB,KAA4B;CAC3D,MAAM,SAAS,iBAAiB,IAAI,MAAM;CAC1C,OAAO;EAAE,QAAQ,IAAI,gBAAgB,MAAM;EAAG;CAAO;AACvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,eAAsB,YAAY,QAA8C;CAC9E,MAAM,SAAS,WAAW,QAAQ;CAClC,IAAI,CAAC,QAAQ,OAAO;CACpB,IAAI,YAAY;CAChB,KAAK,MAAM,QAAQ,iBAAiB;EAClC,MAAM,QAAQ,OAAO,IAAI;EACzB,IAAI,SAAS,MAAM;EAGnB,aAAa,GAAG,KAAK,YAAY,EAAE,GAAG,MAAM,OAAO,GAAG;CACxD;CACA,MAAM,SAAS,MAAM,OAAO,OAAO,WAAW,IAAI,YAAY,CAAC,CAAC,OAAO,SAAS,CAAC;CACjF,IAAI,MAAM;CACV,KAAK,MAAM,QAAQ,IAAI,WAAW,QAAQ,GAAG,iBAAiB,CAAC,GAC7D,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG;CAE1C,OAAO,aAAa;AACtB;;;;;;;;;;;AAYA,SAAgB,oBAA4B;CAC1C,MAAM,QAAQ,IAAI,WAAW,iBAAiB,CAAC;CAC/C,WAAW,OAAO,gBAAgB,KAAK;CACvC,OAAO,aAAa,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;AACpF;;AAGA,SAAgB,aAAa,SAA+C;CAC1E,MAAM,UAAkC,CAAC;CACzC,KAAK,MAAM,QAAQ,OAAO,KAAK,OAAO,GACpC,QAAQ,KAAK,YAAY,KAAK,QAAQ;CAExC,QAAQ,SAAS,QAAQ,KAAK,YAAY;AAC5C"}
@@ -0,0 +1,61 @@
1
+ //#region src/shared/rsc-media-type.ts
2
+ /**
3
+ * The RSC Flight media type, and the request predicate over it.
4
+ *
5
+ * One module owns the string because two independently-written spellings of
6
+ * "is this an RSC request?" must agree, and the consequence of them
7
+ * disagreeing is cache poisoning rather than a visible bug. The Cloudflare
8
+ * adapter's `isRsc` decides what may enter the edge cache; the origin's
9
+ * pipeline decides which headers may vary the response. TIM-1269 made the
10
+ * adapter's `VARY_HONORED` allowlist exempt `Accept` *because* `isRsc`
11
+ * excludes Flight responses from the cache, and exempt the `X-Timber-*`
12
+ * headers *because* the origin reads them only behind its own RSC check. If
13
+ * one predicate is ever tightened (a real media-type parse, a
14
+ * parameter-aware match) and the other is not, the adapter can classify a
15
+ * request as a document while the origin treats it as RSC, and store a
16
+ * Flight payload under the document's key — the class
17
+ * `design/48-payload-addressing.md` exists to prevent.
18
+ *
19
+ * `tests/rsc-media-type-single-source.test.ts` fails if the literal reappears
20
+ * in executable source outside this file.
21
+ *
22
+ * Isomorphic: zero imports, so `adapters/cloudflare.ts` — which Node's native
23
+ * ESM loader evaluates before Vite's resolver exists — can load it and
24
+ * interpolate the value into the generated worker. Same precedent as
25
+ * `shared/rsc-cache-key.ts`.
26
+ *
27
+ * See design/19-client-navigation.md, design/25-production-deployments.md
28
+ * §"`Vary` and the Workers Cache API".
29
+ */
30
+ /** Media type of a React Flight payload. */
31
+ var RSC_CONTENT_TYPE = "text/x-component";
32
+ /**
33
+ * Is this request asking for an RSC payload rather than a full document?
34
+ *
35
+ * Substring containment, deliberately: `Accept` is a list, and a client may
36
+ * send `text/x-component;charset=utf-8` or list it alongside other types.
37
+ * Tightening this to a real media-type parse is a behaviour change that has
38
+ * to move the adapter's generated `isRsc` in the same commit — see above.
39
+ */
40
+ function isRscRequest(req) {
41
+ return (req.headers.get("Accept") ?? "").includes(RSC_CONTENT_TYPE);
42
+ }
43
+ /**
44
+ * Does this Content-Type header value designate an RSC Flight payload?
45
+ *
46
+ * Case-insensitive exact media-type match per RFC 9110 §8.3.1 — media types
47
+ * are case-insensitive. Parameters (`;charset=utf-8`) are stripped before
48
+ * comparison.
49
+ *
50
+ * Contrast with `isRscRequest`, which uses substring containment because
51
+ * `Accept` is a list of types. A `Content-Type` header names exactly one
52
+ * type, so substring would over-match (e.g. `text/x-component-v2`).
53
+ */
54
+ function isRscContentType(contentType) {
55
+ if (!contentType) return false;
56
+ return contentType.split(";")[0].trim().toLowerCase() === RSC_CONTENT_TYPE;
57
+ }
58
+ //#endregion
59
+ export { isRscContentType as n, isRscRequest as r, RSC_CONTENT_TYPE as t };
60
+
61
+ //# sourceMappingURL=rsc-media-type-DDc7duTD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsc-media-type-DDc7duTD.js","names":[],"sources":["../../src/shared/rsc-media-type.ts"],"sourcesContent":["/**\n * The RSC Flight media type, and the request predicate over it.\n *\n * One module owns the string because two independently-written spellings of\n * \"is this an RSC request?\" must agree, and the consequence of them\n * disagreeing is cache poisoning rather than a visible bug. The Cloudflare\n * adapter's `isRsc` decides what may enter the edge cache; the origin's\n * pipeline decides which headers may vary the response. TIM-1269 made the\n * adapter's `VARY_HONORED` allowlist exempt `Accept` *because* `isRsc`\n * excludes Flight responses from the cache, and exempt the `X-Timber-*`\n * headers *because* the origin reads them only behind its own RSC check. If\n * one predicate is ever tightened (a real media-type parse, a\n * parameter-aware match) and the other is not, the adapter can classify a\n * request as a document while the origin treats it as RSC, and store a\n * Flight payload under the document's key — the class\n * `design/48-payload-addressing.md` exists to prevent.\n *\n * `tests/rsc-media-type-single-source.test.ts` fails if the literal reappears\n * in executable source outside this file.\n *\n * Isomorphic: zero imports, so `adapters/cloudflare.ts` — which Node's native\n * ESM loader evaluates before Vite's resolver exists — can load it and\n * interpolate the value into the generated worker. Same precedent as\n * `shared/rsc-cache-key.ts`.\n *\n * See design/19-client-navigation.md, design/25-production-deployments.md\n * §\"`Vary` and the Workers Cache API\".\n */\n\n/** Media type of a React Flight payload. */\nexport const RSC_CONTENT_TYPE = 'text/x-component';\n\n/**\n * Is this request asking for an RSC payload rather than a full document?\n *\n * Substring containment, deliberately: `Accept` is a list, and a client may\n * send `text/x-component;charset=utf-8` or list it alongside other types.\n * Tightening this to a real media-type parse is a behaviour change that has\n * to move the adapter's generated `isRsc` in the same commit — see above.\n */\nexport function isRscRequest(req: Request): boolean {\n return (req.headers.get('Accept') ?? '').includes(RSC_CONTENT_TYPE);\n}\n\n/**\n * Does this Content-Type header value designate an RSC Flight payload?\n *\n * Case-insensitive exact media-type match per RFC 9110 §8.3.1 — media types\n * are case-insensitive. Parameters (`;charset=utf-8`) are stripped before\n * comparison.\n *\n * Contrast with `isRscRequest`, which uses substring containment because\n * `Accept` is a list of types. A `Content-Type` header names exactly one\n * type, so substring would over-match (e.g. `text/x-component-v2`).\n */\nexport function isRscContentType(contentType: string | null): boolean {\n if (!contentType) return false;\n return contentType.split(';')[0].trim().toLowerCase() === RSC_CONTENT_TYPE;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,IAAa,mBAAmB;;;;;;;;;AAUhC,SAAgB,aAAa,KAAuB;CAClD,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK,GAAA,CAAI,SAAS,gBAAgB;AACpE;;;;;;;;;;;;AAaA,SAAgB,iBAAiB,aAAqC;CACpE,IAAI,CAAC,aAAa,OAAO;CACzB,OAAO,YAAY,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,YAAY,MAAM;AAC5D"}
@@ -0,0 +1,54 @@
1
+ //#region src/shared/rsc-payload-path.ts
2
+ /**
3
+ * Where a route's Flight payload lives in `output: 'static'`.
4
+ *
5
+ * The static build writes these files and the client fetches them, so the two
6
+ * halves must agree byte for byte. They used to state the naming rule
7
+ * separately — `plugins/static-build.ts` for the write and
8
+ * `client/rsc-fetch.ts` for the read — which is a duplicate representation with
9
+ * nothing checking it. One function now, called by both.
10
+ *
11
+ * ## The shape
12
+ *
13
+ * The payload path mirrors the HTML path: every route gets a directory and the
14
+ * artifact is the `index` inside it.
15
+ *
16
+ * / → /_rsc/index.rsc (cf. index.html)
17
+ * /about → /_rsc/about/index.rsc (cf. about/index.html)
18
+ * /blog/hello → /_rsc/blog/hello/index.rsc
19
+ *
20
+ * That shape is **injective**, which the previous one (`/about` →
21
+ * `/_rsc/about.rsc`, root → `/_rsc/index.rsc`) was not: a site with both `/`
22
+ * and `/index` produced two payloads at `_rsc/index.rsc`, and the second write
23
+ * won silently — a client navigation to one route was served the other route's
24
+ * payload, same content type and same shape, undetectable downstream
25
+ * (TIM-1266).
26
+ *
27
+ * Injectivity holds because two distinct non-root routes give distinct
28
+ * directories, and the root's `/_rsc/index.rsc` has no directory component for
29
+ * a non-root route to occupy — reaching it would need an empty route path,
30
+ * which is not a route.
31
+ *
32
+ * Isomorphic: no server, client, or build-time imports.
33
+ */
34
+ /**
35
+ * The route-space path of a route's static Flight payload.
36
+ *
37
+ * @param routePath A route-space pathname: leading slash, no deployment base,
38
+ * no query or fragment, no trailing slash (except the root `/`). Callers
39
+ * normalize; this function does not, because the two callers normalize from
40
+ * different sources (a browser URL, a build-time route entry).
41
+ */
42
+ /**
43
+ * The directory, relative to the site root, that holds every static RSC
44
+ * payload. The one spelling: the build writes, hashes, and reports it as
45
+ * content-hashed from here.
46
+ */
47
+ var RSC_PAYLOAD_DIR = "_rsc";
48
+ function rscPayloadPath(routePath) {
49
+ return `/${RSC_PAYLOAD_DIR}${routePath === "/" ? "" : routePath}/index.rsc`;
50
+ }
51
+ //#endregion
52
+ export { rscPayloadPath as n, RSC_PAYLOAD_DIR as t };
53
+
54
+ //# sourceMappingURL=rsc-payload-path-dffcs4jp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsc-payload-path-dffcs4jp.js","names":[],"sources":["../../src/shared/rsc-payload-path.ts"],"sourcesContent":["/**\n * Where a route's Flight payload lives in `output: 'static'`.\n *\n * The static build writes these files and the client fetches them, so the two\n * halves must agree byte for byte. They used to state the naming rule\n * separately — `plugins/static-build.ts` for the write and\n * `client/rsc-fetch.ts` for the read — which is a duplicate representation with\n * nothing checking it. One function now, called by both.\n *\n * ## The shape\n *\n * The payload path mirrors the HTML path: every route gets a directory and the\n * artifact is the `index` inside it.\n *\n * / → /_rsc/index.rsc (cf. index.html)\n * /about → /_rsc/about/index.rsc (cf. about/index.html)\n * /blog/hello → /_rsc/blog/hello/index.rsc\n *\n * That shape is **injective**, which the previous one (`/about` →\n * `/_rsc/about.rsc`, root → `/_rsc/index.rsc`) was not: a site with both `/`\n * and `/index` produced two payloads at `_rsc/index.rsc`, and the second write\n * won silently — a client navigation to one route was served the other route's\n * payload, same content type and same shape, undetectable downstream\n * (TIM-1266).\n *\n * Injectivity holds because two distinct non-root routes give distinct\n * directories, and the root's `/_rsc/index.rsc` has no directory component for\n * a non-root route to occupy — reaching it would need an empty route path,\n * which is not a route.\n *\n * Isomorphic: no server, client, or build-time imports.\n */\n\n/**\n * The route-space path of a route's static Flight payload.\n *\n * @param routePath A route-space pathname: leading slash, no deployment base,\n * no query or fragment, no trailing slash (except the root `/`). Callers\n * normalize; this function does not, because the two callers normalize from\n * different sources (a browser URL, a build-time route entry).\n */\n/**\n * The directory, relative to the site root, that holds every static RSC\n * payload. The one spelling: the build writes, hashes, and reports it as\n * content-hashed from here.\n */\nexport const RSC_PAYLOAD_DIR = '_rsc';\n\nexport function rscPayloadPath(routePath: string): string {\n const prefix = routePath === '/' ? '' : routePath;\n return `/${RSC_PAYLOAD_DIR}${prefix}/index.rsc`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,IAAa,kBAAkB;AAE/B,SAAgB,eAAe,WAA2B;CAExD,OAAO,IAAI,kBADI,cAAc,MAAM,KAAK,UACJ;AACtC"}