@timber-js/app 0.2.0-alpha.208 → 0.2.0-alpha.209

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 (520) hide show
  1. package/dist/_chunks/{primitives-DLAnvsrk.js → actions-BerlqoXA.js} +640 -410
  2. package/dist/_chunks/actions-BerlqoXA.js.map +1 -0
  3. package/dist/_chunks/{als-registry-C6kcfprT.js → als-registry-DaxkVjt5.js} +6 -2
  4. package/dist/_chunks/als-registry-DaxkVjt5.js.map +1 -0
  5. package/dist/_chunks/{build-manifest-DTmSGLRz.js → build-manifest-DWppEdLB.js} +2 -51
  6. package/dist/_chunks/build-manifest-DWppEdLB.js.map +1 -0
  7. package/dist/_chunks/{build-output-helper-9dqCv1pZ.js → build-output-helper-RV_BRcF1.js} +50 -53
  8. package/dist/_chunks/build-output-helper-RV_BRcF1.js.map +1 -0
  9. package/dist/_chunks/{cache-api-CUD9Ezaq.js → cache-api-CR23J_NC.js} +64 -32
  10. package/dist/_chunks/cache-api-CR23J_NC.js.map +1 -0
  11. package/dist/_chunks/{chains-B4bgOl2g.js → chains-CpFg56UB.js} +2 -2
  12. package/dist/_chunks/{chains-B4bgOl2g.js.map → chains-CpFg56UB.js.map} +1 -1
  13. package/dist/_chunks/{cli-check-G8o30ldg.js → cli-check-C6Ev6wBO.js} +11 -52
  14. package/dist/_chunks/cli-check-C6Ev6wBO.js.map +1 -0
  15. package/dist/_chunks/cli-context-By7k2xVo.js +70 -0
  16. package/dist/_chunks/cli-context-By7k2xVo.js.map +1 -0
  17. package/dist/_chunks/{cli-schema-sync--LZKs8Zn.js → cli-schema-sync-CbT2AUUI.js} +3 -3
  18. package/dist/_chunks/{cli-schema-sync--LZKs8Zn.js.map → cli-schema-sync-CbT2AUUI.js.map} +1 -1
  19. package/dist/_chunks/{cloudflare-BFb__LYG.js → cloudflare-Byxl8FWP.js} +96 -53
  20. package/dist/_chunks/{cloudflare-BFb__LYG.js.map → cloudflare-Byxl8FWP.js.map} +1 -1
  21. package/dist/_chunks/{convention-lint-5KzoMg_A.js → convention-lint-jKTwKwPe.js} +21 -6
  22. package/dist/_chunks/convention-lint-jKTwKwPe.js.map +1 -0
  23. package/dist/_chunks/{dev-server-BzBxgYAV.js → dev-server-C4WZdB7L.js} +15 -167
  24. package/dist/_chunks/dev-server-C4WZdB7L.js.map +1 -0
  25. package/dist/_chunks/{error-boundary-BrHmG-2X.js → error-boundary-tA7kVfs4.js} +84 -104
  26. package/dist/_chunks/error-boundary-tA7kVfs4.js.map +1 -0
  27. package/dist/_chunks/{fs-identity-D7vb6GdI.js → fs-identity-BRKuL215.js} +3 -4
  28. package/dist/_chunks/fs-identity-BRKuL215.js.map +1 -0
  29. package/dist/_chunks/{graph-cache-CP4GEmf9.js → graph-cache-CYiUS2aS.js} +4 -5
  30. package/dist/_chunks/graph-cache-CYiUS2aS.js.map +1 -0
  31. package/dist/_chunks/{json-lossy-check-ClNvBM_3.js → json-lossy-check-ip0Qi0MT.js} +6 -3
  32. package/dist/_chunks/json-lossy-check-ip0Qi0MT.js.map +1 -0
  33. package/dist/_chunks/{live-graph-Bm5WTvcr.js → live-graph-Dv-JJCZw.js} +3 -3
  34. package/dist/_chunks/{live-graph-Bm5WTvcr.js.map → live-graph-Dv-JJCZw.js.map} +1 -1
  35. package/dist/_chunks/{logger-k2DQ4EUf.js → logger-DiDt5ppH.js} +192 -51
  36. package/dist/_chunks/logger-DiDt5ppH.js.map +1 -0
  37. package/dist/_chunks/{navigation-root-mHSK9psY.js → navigation-root-BQfo1-kG.js} +2 -2
  38. package/dist/_chunks/{navigation-root-mHSK9psY.js.map → navigation-root-BQfo1-kG.js.map} +1 -1
  39. package/dist/_chunks/{plugin-context-8idfR3UZ.js → plugin-context-BPBPc3lL.js} +28 -4
  40. package/dist/_chunks/plugin-context-BPBPc3lL.js.map +1 -0
  41. package/dist/_chunks/{poison-scan-DG5eI2_z.js → poison-scan-CpeT6_OJ.js} +2 -2
  42. package/dist/_chunks/{poison-scan-DG5eI2_z.js.map → poison-scan-CpeT6_OJ.js.map} +1 -1
  43. package/dist/_chunks/render-timeout-DOf_BBcO.js +46 -0
  44. package/dist/_chunks/render-timeout-DOf_BBcO.js.map +1 -0
  45. package/dist/_chunks/{rsc-payload-path-B_LBodc2.js → rsc-payload-path-dffcs4jp.js} +9 -3
  46. package/dist/_chunks/{rsc-payload-path-B_LBodc2.js.map → rsc-payload-path-dffcs4jp.js.map} +1 -1
  47. package/dist/_chunks/{scanner-BQ5sPIJ7.js → scanner-Bw0oq1HB.js} +2 -2
  48. package/dist/_chunks/{scanner-BQ5sPIJ7.js.map → scanner-Bw0oq1HB.js.map} +1 -1
  49. package/dist/_chunks/{navigation-context-D0TU0Jog.js → segment-context-xtPUGfdq.js} +36 -34
  50. package/dist/_chunks/segment-context-xtPUGfdq.js.map +1 -0
  51. package/dist/_chunks/{singleflight-2lUWfcAk.js → singleflight-BeVMMKi0.js} +4 -3
  52. package/dist/_chunks/{singleflight-2lUWfcAk.js.map → singleflight-BeVMMKi0.js.map} +1 -1
  53. package/dist/_chunks/{sizeof-lXffQ1Vr.js → sizeof-UwzwB1uM.js} +3 -2
  54. package/dist/_chunks/sizeof-UwzwB1uM.js.map +1 -0
  55. package/dist/_chunks/ssr-data-nA3I70_n.js +49 -0
  56. package/dist/_chunks/ssr-data-nA3I70_n.js.map +1 -0
  57. package/dist/_chunks/{state-FippDgxN.js → state-BhNGPsdi.js} +6 -8
  58. package/dist/_chunks/state-BhNGPsdi.js.map +1 -0
  59. package/dist/_chunks/{status-page-marker-CNbpUOPB.js → status-page-marker-gaihi0KZ.js} +53 -20
  60. package/dist/_chunks/status-page-marker-gaihi0KZ.js.map +1 -0
  61. package/dist/_chunks/{walkers-CN2N_bA-.js → walkers-BXExhzzk.js} +2 -2
  62. package/dist/_chunks/{walkers-CN2N_bA-.js.map → walkers-BXExhzzk.js.map} +1 -1
  63. package/dist/_chunks/write-file-atomic-D1qWqHb4.js +32 -0
  64. package/dist/_chunks/write-file-atomic-D1qWqHb4.js.map +1 -0
  65. package/dist/adapters/build-output-helper.d.ts +7 -7
  66. package/dist/adapters/build-output-helper.d.ts.map +1 -1
  67. package/dist/adapters/canonicalize-module.d.ts +8 -0
  68. package/dist/adapters/canonicalize-module.d.ts.map +1 -0
  69. package/dist/adapters/cloudflare-dev.js +1 -1
  70. package/dist/adapters/cloudflare-kv-cache.js +2 -2
  71. package/dist/adapters/cloudflare.d.ts +30 -8
  72. package/dist/adapters/cloudflare.d.ts.map +1 -1
  73. package/dist/adapters/cloudflare.js +2 -2
  74. package/dist/adapters/compress-module.d.ts +8 -0
  75. package/dist/adapters/compress-module.d.ts.map +1 -1
  76. package/dist/adapters/fs-identity.d.ts +2 -3
  77. package/dist/adapters/fs-identity.d.ts.map +1 -1
  78. package/dist/adapters/nitro-presets.d.ts +0 -6
  79. package/dist/adapters/nitro-presets.d.ts.map +1 -1
  80. package/dist/adapters/nitro-preview.d.ts +43 -11
  81. package/dist/adapters/nitro-preview.d.ts.map +1 -1
  82. package/dist/adapters/nitro.d.ts +1 -13
  83. package/dist/adapters/nitro.d.ts.map +1 -1
  84. package/dist/adapters/nitro.js +291 -176
  85. package/dist/adapters/nitro.js.map +1 -1
  86. package/dist/adapters/shared.d.ts +7 -2
  87. package/dist/adapters/shared.d.ts.map +1 -1
  88. package/dist/adapters/types.d.ts +105 -21
  89. package/dist/adapters/types.d.ts.map +1 -1
  90. package/dist/adapters/types.js +0 -0
  91. package/dist/analyze/crawl-entry.js +3 -3
  92. package/dist/analyze/graph-cache.d.ts.map +1 -1
  93. package/dist/analyze/graph-command.js +4 -4
  94. package/dist/cache/index.js +2 -2
  95. package/dist/cache/json-lossy-check.d.ts.map +1 -1
  96. package/dist/cache/singleflight.d.ts.map +1 -1
  97. package/dist/cache/sizeof.d.ts.map +1 -1
  98. package/dist/cache/stores/memory.js +1 -1
  99. package/dist/cache/tag-aware-handler.d.ts.map +1 -1
  100. package/dist/cdn/workers-cache-purge.js +1 -1
  101. package/dist/cli-check.d.ts +7 -37
  102. package/dist/cli-check.d.ts.map +1 -1
  103. package/dist/cli-context.d.ts +54 -0
  104. package/dist/cli-context.d.ts.map +1 -0
  105. package/dist/cli.d.ts +9 -9
  106. package/dist/cli.d.ts.map +1 -1
  107. package/dist/cli.js +20 -24
  108. package/dist/cli.js.map +1 -1
  109. package/dist/client/browser-dev.d.ts +1 -1
  110. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -1
  111. package/dist/client/browser-entry/hydrate.d.ts +19 -29
  112. package/dist/client/browser-entry/hydrate.d.ts.map +1 -1
  113. package/dist/client/browser-entry/index.d.ts +7 -7
  114. package/dist/client/browser-entry/post-hydration.d.ts +6 -9
  115. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -1
  116. package/dist/client/browser-entry/router-init.d.ts +6 -11
  117. package/dist/client/browser-entry/router-init.d.ts.map +1 -1
  118. package/dist/client/error-boundary.d.ts +4 -3
  119. package/dist/client/error-boundary.d.ts.map +1 -1
  120. package/dist/client/error-boundary.js +1 -1
  121. package/dist/client/error-reconstituter.d.ts +3 -9
  122. package/dist/client/error-reconstituter.d.ts.map +1 -1
  123. package/dist/client/history.d.ts +12 -11
  124. package/dist/client/history.d.ts.map +1 -1
  125. package/dist/client/index.d.ts +0 -1
  126. package/dist/client/index.d.ts.map +1 -1
  127. package/dist/client/index.js +5 -6
  128. package/dist/client/index.js.map +1 -1
  129. package/dist/client/internal.d.ts +3 -3
  130. package/dist/client/internal.d.ts.map +1 -1
  131. package/dist/client/internal.js +68 -104
  132. package/dist/client/internal.js.map +1 -1
  133. package/dist/client/navigation-commit.d.ts +16 -7
  134. package/dist/client/navigation-commit.d.ts.map +1 -1
  135. package/dist/client/navigation-context.d.ts +3 -5
  136. package/dist/client/navigation-context.d.ts.map +1 -1
  137. package/dist/client/react-root.d.ts +3 -2
  138. package/dist/client/react-root.d.ts.map +1 -1
  139. package/dist/client/router-pipeline.d.ts +1 -6
  140. package/dist/client/router-pipeline.d.ts.map +1 -1
  141. package/dist/client/router-types.d.ts +45 -39
  142. package/dist/client/router-types.d.ts.map +1 -1
  143. package/dist/client/router-url.d.ts +24 -0
  144. package/dist/client/router-url.d.ts.map +1 -0
  145. package/dist/client/router.d.ts.map +1 -1
  146. package/dist/client/rsc-fetch.d.ts +8 -4
  147. package/dist/client/rsc-fetch.d.ts.map +1 -1
  148. package/dist/client/ssr-data.d.ts +18 -64
  149. package/dist/client/ssr-data.d.ts.map +1 -1
  150. package/dist/client/state.d.ts +2 -5
  151. package/dist/client/state.d.ts.map +1 -1
  152. package/dist/client/use-pathname.d.ts +1 -1
  153. package/dist/config-types.d.ts +2 -1
  154. package/dist/config-types.d.ts.map +1 -1
  155. package/dist/config-validation.d.ts.map +1 -1
  156. package/dist/cookies/index.js +1 -1
  157. package/dist/dev-tools/dev-page-shell.d.ts +17 -0
  158. package/dist/dev-tools/dev-page-shell.d.ts.map +1 -1
  159. package/dist/dev-tools/index.d.ts +1 -1
  160. package/dist/dev-tools/index.d.ts.map +1 -1
  161. package/dist/dev-tools/instrumentation.d.ts +17 -2
  162. package/dist/dev-tools/instrumentation.d.ts.map +1 -1
  163. package/dist/dev-tools/overlay.d.ts +6 -27
  164. package/dist/dev-tools/overlay.d.ts.map +1 -1
  165. package/dist/index.d.ts.map +1 -1
  166. package/dist/index.js +531 -373
  167. package/dist/index.js.map +1 -1
  168. package/dist/plugin-context.d.ts +26 -40
  169. package/dist/plugin-context.d.ts.map +1 -1
  170. package/dist/plugins/build-manifest.d.ts.map +1 -1
  171. package/dist/plugins/build-report.d.ts +15 -2
  172. package/dist/plugins/build-report.d.ts.map +1 -1
  173. package/dist/plugins/dev-server.d.ts.map +1 -1
  174. package/dist/plugins/entries.d.ts.map +1 -1
  175. package/dist/plugins/fonts.d.ts +19 -1
  176. package/dist/plugins/fonts.d.ts.map +1 -1
  177. package/dist/plugins/post-build.d.ts +110 -0
  178. package/dist/plugins/post-build.d.ts.map +1 -0
  179. package/dist/plugins/prebuilt-capture.d.ts +11 -4
  180. package/dist/plugins/prebuilt-capture.d.ts.map +1 -1
  181. package/dist/plugins/prebuilt.d.ts +17 -1
  182. package/dist/plugins/prebuilt.d.ts.map +1 -1
  183. package/dist/plugins/prerender-sugar.d.ts.map +1 -1
  184. package/dist/plugins/rsc-assets-manifest.d.ts +33 -0
  185. package/dist/plugins/rsc-assets-manifest.d.ts.map +1 -0
  186. package/dist/plugins/shims.d.ts.map +1 -1
  187. package/dist/plugins/static-build.d.ts +32 -9
  188. package/dist/plugins/static-build.d.ts.map +1 -1
  189. package/dist/routing/codegen-write.d.ts +0 -9
  190. package/dist/routing/codegen-write.d.ts.map +1 -1
  191. package/dist/routing/index.js +2 -2
  192. package/dist/routing/segment-codegen.d.ts.map +1 -1
  193. package/dist/server/access-gate.d.ts.map +1 -1
  194. package/dist/server/action-handler.d.ts +5 -4
  195. package/dist/server/action-handler.d.ts.map +1 -1
  196. package/dist/server/actions.d.ts +46 -7
  197. package/dist/server/actions.d.ts.map +1 -1
  198. package/dist/server/als-registry.d.ts +58 -5
  199. package/dist/server/als-registry.d.ts.map +1 -1
  200. package/dist/server/children-interception.d.ts.map +1 -1
  201. package/dist/server/cookie-context.d.ts +2 -23
  202. package/dist/server/cookie-context.d.ts.map +1 -1
  203. package/dist/server/csp-nonce.d.ts +0 -9
  204. package/dist/server/csp-nonce.d.ts.map +1 -1
  205. package/dist/server/csrf.d.ts +27 -4
  206. package/dist/server/csrf.d.ts.map +1 -1
  207. package/dist/server/debug.d.ts +0 -1
  208. package/dist/server/debug.d.ts.map +1 -1
  209. package/dist/server/default-logger.d.ts +2 -1
  210. package/dist/server/default-logger.d.ts.map +1 -1
  211. package/dist/server/deny-boundary.d.ts +12 -6
  212. package/dist/server/deny-boundary.d.ts.map +1 -1
  213. package/dist/server/deny-renderer.d.ts +2 -2
  214. package/dist/server/deny-renderer.d.ts.map +1 -1
  215. package/dist/server/error-boundary-wrapper.d.ts +7 -3
  216. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  217. package/dist/server/fallback-error.d.ts +9 -2
  218. package/dist/server/fallback-error.d.ts.map +1 -1
  219. package/dist/server/head-response.d.ts +4 -4
  220. package/dist/server/html-injectors.d.ts.map +1 -1
  221. package/dist/server/index.d.ts +0 -1
  222. package/dist/server/index.d.ts.map +1 -1
  223. package/dist/server/index.js +3 -4
  224. package/dist/server/index.js.map +1 -1
  225. package/dist/server/instrumentation.d.ts +10 -3
  226. package/dist/server/instrumentation.d.ts.map +1 -1
  227. package/dist/server/internal.d.ts +1 -4
  228. package/dist/server/internal.d.ts.map +1 -1
  229. package/dist/server/internal.js +961 -581
  230. package/dist/server/internal.js.map +1 -1
  231. package/dist/server/json-status-response.d.ts +34 -0
  232. package/dist/server/json-status-response.d.ts.map +1 -0
  233. package/dist/server/logger.d.ts +26 -0
  234. package/dist/server/logger.d.ts.map +1 -1
  235. package/dist/server/param-coercion.d.ts +11 -6
  236. package/dist/server/param-coercion.d.ts.map +1 -1
  237. package/dist/server/pipeline-helpers.d.ts +95 -7
  238. package/dist/server/pipeline-helpers.d.ts.map +1 -1
  239. package/dist/server/pipeline-interception.d.ts +11 -0
  240. package/dist/server/pipeline-interception.d.ts.map +1 -1
  241. package/dist/server/pipeline-outcome.d.ts +11 -1
  242. package/dist/server/pipeline-outcome.d.ts.map +1 -1
  243. package/dist/server/pipeline-phases.d.ts +2 -2
  244. package/dist/server/pipeline-phases.d.ts.map +1 -1
  245. package/dist/server/pipeline.d.ts +23 -35
  246. package/dist/server/pipeline.d.ts.map +1 -1
  247. package/dist/server/prebuilt/capture-render.d.ts +25 -0
  248. package/dist/server/prebuilt/capture-render.d.ts.map +1 -0
  249. package/dist/server/prebuilt/capture-routes.d.ts +37 -0
  250. package/dist/server/prebuilt/capture-routes.d.ts.map +1 -0
  251. package/dist/server/prebuilt/capture-state.d.ts +79 -35
  252. package/dist/server/prebuilt/capture-state.d.ts.map +1 -1
  253. package/dist/server/prebuilt/lifetime.d.ts +38 -0
  254. package/dist/server/prebuilt/lifetime.d.ts.map +1 -0
  255. package/dist/server/prebuilt/slots.d.ts +7 -0
  256. package/dist/server/prebuilt/slots.d.ts.map +1 -1
  257. package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -1
  258. package/dist/server/prebuilt-builder.d.ts.map +1 -1
  259. package/dist/server/prebuilt-runtime.d.ts.map +1 -1
  260. package/dist/server/primitives.d.ts +6 -81
  261. package/dist/server/primitives.d.ts.map +1 -1
  262. package/dist/server/react-cache-bridge.d.ts +59 -0
  263. package/dist/server/react-cache-bridge.d.ts.map +1 -0
  264. package/dist/server/react-cache-scope.d.ts +49 -0
  265. package/dist/server/react-cache-scope.d.ts.map +1 -0
  266. package/dist/server/render-timeout.d.ts +15 -0
  267. package/dist/server/render-timeout.d.ts.map +1 -1
  268. package/dist/server/render-utils.d.ts +9 -0
  269. package/dist/server/render-utils.d.ts.map +1 -1
  270. package/dist/server/request-context.d.ts +26 -5
  271. package/dist/server/request-context.d.ts.map +1 -1
  272. package/dist/server/route-element-builder.d.ts.map +1 -1
  273. package/dist/server/route-handler.d.ts.map +1 -1
  274. package/dist/server/route-matcher.d.ts +7 -0
  275. package/dist/server/route-matcher.d.ts.map +1 -1
  276. package/dist/server/rsc-entry/action-middleware-runner.d.ts +22 -22
  277. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -1
  278. package/dist/server/rsc-entry/api-handler.d.ts +7 -0
  279. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  280. package/dist/server/rsc-entry/deny-fallback.d.ts +32 -6
  281. package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -1
  282. package/dist/server/rsc-entry/error-renderer.d.ts +11 -18
  283. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  284. package/dist/server/rsc-entry/helpers.d.ts +0 -1
  285. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  286. package/dist/server/rsc-entry/index.d.ts +5 -15
  287. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  288. package/dist/server/rsc-entry/render-route.d.ts +5 -6
  289. package/dist/server/rsc-entry/render-route.d.ts.map +1 -1
  290. package/dist/server/rsc-entry/render-signals.d.ts +65 -0
  291. package/dist/server/rsc-entry/render-signals.d.ts.map +1 -0
  292. package/dist/server/rsc-entry/revalidate-renderer.d.ts +6 -16
  293. package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -1
  294. package/dist/server/rsc-entry/rsc-payload.d.ts +7 -3
  295. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  296. package/dist/server/rsc-entry/rsc-stream.d.ts +8 -53
  297. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  298. package/dist/server/rsc-entry/ssr-bridge.d.ts +2 -2
  299. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  300. package/dist/server/rsc-entry/ssr-renderer.d.ts +9 -4
  301. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  302. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +1 -1
  303. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -1
  304. package/dist/server/signal-identity.d.ts +43 -0
  305. package/dist/server/signal-identity.d.ts.map +1 -0
  306. package/dist/server/slot-resolver.d.ts +4 -3
  307. package/dist/server/slot-resolver.d.ts.map +1 -1
  308. package/dist/server/slot-subtree-contain.d.ts.map +1 -1
  309. package/dist/server/ssr-bridge-types.d.ts +91 -53
  310. package/dist/server/ssr-bridge-types.d.ts.map +1 -1
  311. package/dist/server/ssr-entry.d.ts +8 -5
  312. package/dist/server/ssr-entry.d.ts.map +1 -1
  313. package/dist/server/ssr-render.d.ts +26 -40
  314. package/dist/server/ssr-render.d.ts.map +1 -1
  315. package/dist/server/ssr-wrappers.d.ts +1 -1
  316. package/dist/server/static-generator.d.ts.map +1 -1
  317. package/dist/server/stream-utils.d.ts +12 -0
  318. package/dist/server/stream-utils.d.ts.map +1 -1
  319. package/dist/server/tracing.d.ts +12 -16
  320. package/dist/server/tracing.d.ts.map +1 -1
  321. package/dist/server/types.d.ts +1 -1
  322. package/dist/server/version-skew.d.ts +3 -3
  323. package/dist/shared/csrf-reject.d.ts +16 -0
  324. package/dist/shared/csrf-reject.d.ts.map +1 -0
  325. package/dist/shared/error-digest.d.ts +28 -0
  326. package/dist/shared/error-digest.d.ts.map +1 -0
  327. package/dist/shared/payload-root.d.ts +11 -10
  328. package/dist/shared/payload-root.d.ts.map +1 -1
  329. package/dist/shared/rsc-payload-path.d.ts +6 -0
  330. package/dist/shared/rsc-payload-path.d.ts.map +1 -1
  331. package/dist/utils/write-file-atomic.d.ts +17 -0
  332. package/dist/utils/write-file-atomic.d.ts.map +1 -0
  333. package/docs/api/30-api-server.mdx +17 -14
  334. package/docs/api/32-api-cache.mdx +51 -23
  335. package/docs/api/34-api-config.mdx +34 -6
  336. package/docs/api/36-cli.mdx +11 -1
  337. package/docs/learn/03-fetching-data.mdx +17 -1
  338. package/docs/learn/04-access-control.mdx +1 -1
  339. package/docs/learn/10-caching.mdx +29 -11
  340. package/docs/learn/11-middleware.mdx +8 -2
  341. package/docs/learn/12-error-handling.mdx +6 -1
  342. package/package.json +5 -1
  343. package/src/adapters/build-output-helper.ts +55 -53
  344. package/src/adapters/canonicalize-module.ts +29 -0
  345. package/src/adapters/cloudflare.ts +105 -63
  346. package/src/adapters/compress-module.ts +16 -5
  347. package/src/adapters/fs-identity.ts +2 -3
  348. package/src/adapters/nitro-presets.ts +0 -15
  349. package/src/adapters/nitro-preview.ts +272 -136
  350. package/src/adapters/nitro.ts +119 -82
  351. package/src/adapters/shared.ts +23 -14
  352. package/src/adapters/types.ts +110 -21
  353. package/src/analyze/graph-cache.ts +3 -4
  354. package/src/cache/json-lossy-check.ts +3 -9
  355. package/src/cache/singleflight.ts +5 -2
  356. package/src/cache/sizeof.ts +3 -1
  357. package/src/cache/tag-aware-handler.ts +43 -26
  358. package/src/cli-check.ts +8 -98
  359. package/src/cli-context.ts +119 -0
  360. package/src/cli.ts +19 -28
  361. package/src/client/browser-dev.ts +1 -1
  362. package/src/client/browser-entry/action-dispatch.ts +26 -4
  363. package/src/client/browser-entry/hydrate.ts +53 -58
  364. package/src/client/browser-entry/index.ts +16 -27
  365. package/src/client/browser-entry/post-hydration.ts +6 -40
  366. package/src/client/browser-entry/router-init.ts +66 -84
  367. package/src/client/error-boundary.tsx +9 -41
  368. package/src/client/error-reconstituter.tsx +10 -5
  369. package/src/client/history.ts +18 -21
  370. package/src/client/index.ts +0 -1
  371. package/src/client/internal.ts +2 -7
  372. package/src/client/navigation-commit.ts +35 -18
  373. package/src/client/navigation-context.ts +3 -39
  374. package/src/client/react-root.ts +3 -2
  375. package/src/client/router-pipeline.ts +65 -128
  376. package/src/client/router-types.ts +46 -44
  377. package/src/client/router-url.ts +32 -0
  378. package/src/client/router.ts +43 -22
  379. package/src/client/rsc-fetch.ts +117 -155
  380. package/src/client/ssr-data.ts +19 -80
  381. package/src/client/state.ts +2 -9
  382. package/src/client/use-pathname.ts +1 -1
  383. package/src/config-types.ts +2 -1
  384. package/src/config-validation.ts +2 -1
  385. package/src/dev-tools/dev-page-shell.ts +18 -0
  386. package/src/dev-tools/index.ts +0 -2
  387. package/src/dev-tools/instrumentation.ts +50 -2
  388. package/src/dev-tools/overlay.ts +8 -238
  389. package/src/index.ts +24 -14
  390. package/src/plugin-context.ts +39 -40
  391. package/src/plugins/build-manifest.ts +4 -11
  392. package/src/plugins/build-report.ts +70 -70
  393. package/src/plugins/dev-server.ts +24 -44
  394. package/src/plugins/entries.ts +2 -1
  395. package/src/plugins/fonts.ts +35 -7
  396. package/src/plugins/post-build.ts +327 -0
  397. package/src/plugins/prebuilt-capture.ts +28 -32
  398. package/src/plugins/prebuilt.ts +54 -39
  399. package/src/plugins/prerender-sugar.ts +0 -4
  400. package/src/plugins/{adapter-build.ts → rsc-assets-manifest.ts} +20 -109
  401. package/src/plugins/shims.ts +1 -0
  402. package/src/plugins/static-build.ts +42 -74
  403. package/src/routing/codegen-write.ts +25 -3
  404. package/src/routing/segment-codegen.ts +3 -2
  405. package/src/rsc-runtime/vendor-types.d.ts +8 -0
  406. package/src/server/access-gate.tsx +2 -1
  407. package/src/server/action-client.ts +1 -1
  408. package/src/server/action-handler.ts +253 -110
  409. package/src/server/actions.ts +73 -25
  410. package/src/server/als-registry.ts +73 -5
  411. package/src/server/chain-url-parts.ts +1 -1
  412. package/src/server/children-interception.ts +2 -1
  413. package/src/server/cookie-context.ts +18 -48
  414. package/src/server/csp-nonce.ts +0 -12
  415. package/src/server/csrf.ts +140 -8
  416. package/src/server/debug.ts +0 -1
  417. package/src/server/default-logger.ts +2 -1
  418. package/src/server/deny-boundary.ts +25 -13
  419. package/src/server/deny-renderer.ts +30 -97
  420. package/src/server/error-boundary-wrapper.ts +7 -3
  421. package/src/server/fallback-error.ts +26 -11
  422. package/src/server/flight-scripts.ts +1 -1
  423. package/src/server/head-response.ts +4 -4
  424. package/src/server/html-injector-core.ts +2 -2
  425. package/src/server/html-injectors.ts +2 -4
  426. package/src/server/index.ts +0 -4
  427. package/src/server/instrumentation.ts +10 -3
  428. package/src/server/internal.ts +1 -6
  429. package/src/server/json-status-response.ts +105 -0
  430. package/src/server/logger.ts +39 -3
  431. package/src/server/param-coercion.ts +15 -12
  432. package/src/server/pipeline-helpers.ts +257 -12
  433. package/src/server/pipeline-interception.ts +133 -0
  434. package/src/server/pipeline-outcome.ts +103 -31
  435. package/src/server/pipeline-phases.ts +127 -237
  436. package/src/server/pipeline.ts +204 -207
  437. package/src/server/prebuilt/capture-render.ts +118 -0
  438. package/src/server/prebuilt/capture-routes.ts +104 -0
  439. package/src/server/prebuilt/capture-state.ts +155 -48
  440. package/src/server/prebuilt/lifetime.ts +151 -0
  441. package/src/server/prebuilt/slots.ts +14 -2
  442. package/src/server/prebuilt/synthetic-store.ts +3 -0
  443. package/src/server/prebuilt-builder.ts +30 -320
  444. package/src/server/prebuilt-runtime.ts +125 -129
  445. package/src/server/primitives.ts +8 -168
  446. package/src/server/react-cache-bridge.ts +124 -0
  447. package/src/server/react-cache-scope.ts +104 -0
  448. package/src/server/render-timeout.ts +20 -0
  449. package/src/server/render-utils.ts +11 -1
  450. package/src/server/request-context.ts +36 -9
  451. package/src/server/route-element-builder.ts +11 -6
  452. package/src/server/route-handler.ts +36 -23
  453. package/src/server/route-matcher.ts +15 -1
  454. package/src/server/rsc-entry/action-middleware-runner.ts +79 -123
  455. package/src/server/rsc-entry/api-handler.ts +27 -103
  456. package/src/server/rsc-entry/deny-fallback.ts +93 -26
  457. package/src/server/rsc-entry/error-renderer.ts +39 -91
  458. package/src/server/rsc-entry/helpers.ts +2 -4
  459. package/src/server/rsc-entry/index.ts +64 -58
  460. package/src/server/rsc-entry/render-route.ts +15 -80
  461. package/src/server/rsc-entry/render-signals.ts +108 -0
  462. package/src/server/rsc-entry/revalidate-renderer.ts +56 -57
  463. package/src/server/rsc-entry/rsc-payload.ts +28 -61
  464. package/src/server/rsc-entry/rsc-stream.ts +113 -213
  465. package/src/server/rsc-entry/ssr-bridge.ts +2 -2
  466. package/src/server/rsc-entry/ssr-renderer.ts +182 -263
  467. package/src/server/rsc-entry/wrap-action-dispatch.ts +12 -14
  468. package/src/server/signal-identity.ts +112 -0
  469. package/src/server/slot-resolver.ts +18 -18
  470. package/src/server/slot-subtree-contain.ts +2 -1
  471. package/src/server/ssr-bridge-types.ts +92 -56
  472. package/src/server/ssr-entry.ts +87 -111
  473. package/src/server/ssr-render.ts +55 -64
  474. package/src/server/ssr-wrappers.tsx +2 -2
  475. package/src/server/static-generator.ts +7 -42
  476. package/src/server/static-not-found.ts +3 -3
  477. package/src/server/stream-utils.ts +51 -0
  478. package/src/server/tracing.ts +58 -75
  479. package/src/server/types.ts +1 -1
  480. package/src/server/version-skew.ts +5 -5
  481. package/src/shared/csrf-reject.ts +15 -0
  482. package/src/shared/error-digest.ts +46 -0
  483. package/src/shared/payload-root.ts +11 -10
  484. package/src/shared/rsc-payload-path.ts +8 -1
  485. package/src/utils/write-file-atomic.ts +32 -0
  486. package/dist/_chunks/actions-jNrXdzgs.js +0 -346
  487. package/dist/_chunks/actions-jNrXdzgs.js.map +0 -1
  488. package/dist/_chunks/als-registry-C6kcfprT.js.map +0 -1
  489. package/dist/_chunks/build-manifest-DTmSGLRz.js.map +0 -1
  490. package/dist/_chunks/build-output-helper-9dqCv1pZ.js.map +0 -1
  491. package/dist/_chunks/cache-api-CUD9Ezaq.js.map +0 -1
  492. package/dist/_chunks/cli-check-G8o30ldg.js.map +0 -1
  493. package/dist/_chunks/convention-lint-5KzoMg_A.js.map +0 -1
  494. package/dist/_chunks/dev-server-BzBxgYAV.js.map +0 -1
  495. package/dist/_chunks/error-boundary-BrHmG-2X.js.map +0 -1
  496. package/dist/_chunks/fs-identity-D7vb6GdI.js.map +0 -1
  497. package/dist/_chunks/graph-cache-CP4GEmf9.js.map +0 -1
  498. package/dist/_chunks/json-lossy-check-ClNvBM_3.js.map +0 -1
  499. package/dist/_chunks/logger-k2DQ4EUf.js.map +0 -1
  500. package/dist/_chunks/navigation-context-D0TU0Jog.js.map +0 -1
  501. package/dist/_chunks/plugin-context-8idfR3UZ.js.map +0 -1
  502. package/dist/_chunks/primitives-DLAnvsrk.js.map +0 -1
  503. package/dist/_chunks/segment-context-D9_89u34.js +0 -34
  504. package/dist/_chunks/segment-context-D9_89u34.js.map +0 -1
  505. package/dist/_chunks/sizeof-lXffQ1Vr.js.map +0 -1
  506. package/dist/_chunks/ssr-data-D6T6Y3ef.js +0 -60
  507. package/dist/_chunks/ssr-data-D6T6Y3ef.js.map +0 -1
  508. package/dist/_chunks/state-FippDgxN.js.map +0 -1
  509. package/dist/_chunks/status-page-marker-CNbpUOPB.js.map +0 -1
  510. package/dist/client/types.d.ts +0 -14
  511. package/dist/client/types.d.ts.map +0 -1
  512. package/dist/plugins/adapter-build.d.ts +0 -38
  513. package/dist/plugins/adapter-build.d.ts.map +0 -1
  514. package/dist/server/asset-headers.d.ts +0 -32
  515. package/dist/server/asset-headers.d.ts.map +0 -1
  516. package/dist/server/dev-source-map.d.ts +0 -22
  517. package/dist/server/dev-source-map.d.ts.map +0 -1
  518. package/src/client/types.ts +0 -21
  519. package/src/server/asset-headers.ts +0 -59
  520. package/src/server/dev-source-map.ts +0 -31
@@ -42,33 +42,26 @@
42
42
  * → skip that entry, warn, keep building.
43
43
  */
44
44
 
45
- import { createElement } from 'react';
46
-
47
- import { requestContextAls } from './als-registry.ts';
48
45
  import type { CoercedParams } from '../shared/param-value.ts';
49
46
  import { ParamCoercionError } from './param-coercion.ts';
50
- import { SlotOutlet } from '../client/slot-outlet.tsx';
51
47
  import { coerceSegmentParams } from './param-coercion.ts';
52
- import { isDenySignal, isRedirectSignal } from './primitives.ts';
53
- import {
54
- beginCapture,
55
- endCapture,
56
- PrebuiltCaptureCycleError,
57
- type NestedWrapperRender,
58
- } from './prebuilt/capture-state.ts';
48
+ import { isDenySignal, isRedirectSignal } from './signal-identity.ts';
59
49
  import { computeComponentCacheKey } from './prebuilt/cache-key.ts';
60
- import { LAYOUT_CHILDREN_SLOT } from './prebuilt/slots.ts';
61
- import { BuildTimeContextError, createBuildTimeStore } from './prebuilt/synthetic-store.ts';
50
+ import { bytesToStream, renderEntry } from './prebuilt/capture-render.ts';
62
51
  import {
63
- getPrebuiltRegistration,
64
- type PrebuiltComponentOptions,
65
- type PrebuiltRegistration,
66
- } from './prebuilt-runtime.ts';
52
+ collectCandidateRoutes,
53
+ enumerateCombos,
54
+ type ParamCombo,
55
+ } from './prebuilt/capture-routes.ts';
56
+ import { warnNestingClamps } from './prebuilt/lifetime.ts';
57
+ import { BuildTimeContextError } from './prebuilt/synthetic-store.ts';
58
+ import { getPrebuiltRegistration } from './prebuilt-runtime.ts';
67
59
  import { createRouteMatcher } from './route-matcher.ts';
68
- import type { ManifestFile, ManifestRoot, ManifestSegmentNode } from './route-matcher.ts';
69
- import { createFromReadableStream, renderToReadableStream } from '../rsc-runtime/rsc.ts';
60
+ import type { ManifestRoot } from './route-matcher.ts';
61
+ import { createFromReadableStream } from '../rsc-runtime/rsc.ts';
70
62
  import { loadModule } from './safe-load.ts';
71
- import { hasDynamicSegments, resolvePathWithParams } from './sitemap-generator.ts';
63
+ import { resolvePathWithParams } from './sitemap-generator.ts';
64
+ import { resolveRenderTimeoutMs } from './render-timeout.ts';
72
65
 
73
66
  // ─── Types ────────────────────────────────────────────────────────────────
74
67
 
@@ -146,66 +139,6 @@ export interface CaptureOptions {
146
139
  log?: (message: string) => void;
147
140
  }
148
141
 
149
- const DEFAULT_RENDER_TIMEOUT_MS = 30_000;
150
-
151
- // ─── Route collection ─────────────────────────────────────────────────────
152
-
153
- interface CandidateRoute {
154
- urlPath: string;
155
- page: ManifestFile;
156
- /** Layout files along the chain that declare prebuilt components. */
157
- layoutsToLoad: ManifestFile[];
158
- /** Component IDs attributed to this route's page + layout chain. */
159
- componentIds: string[];
160
- /** Component IDs from layout files (receive SlotOutlet as children). */
161
- layoutComponentIds: Set<string>;
162
- }
163
-
164
- /**
165
- * Walk the manifest tree and collect pages whose file chain (page +
166
- * layouts above it) has prebuilt components attributed to it. Slots and
167
- * intercepting/private segments are not walked — slot-scoped prebuilt is
168
- * already unkeyable at request time when slot params diverge (see
169
- * resolveKeyParams in prebuilt-runtime.ts), so the build doesn't model
170
- * slots either.
171
- */
172
- function collectCandidateRoutes(
173
- root: ManifestSegmentNode,
174
- fileComponentMap: Record<string, string[]>
175
- ): CandidateRoute[] {
176
- const routes: CandidateRoute[] = [];
177
-
178
- const walk = (node: ManifestSegmentNode, layoutChain: ManifestFile[]) => {
179
- if (node.segmentType === 'intercepting' || node.segmentType === 'private') return;
180
- const chain = node.layout ? [...layoutChain, node.layout] : layoutChain;
181
-
182
- if (node.page) {
183
- const componentIds = new Set<string>();
184
- const layoutIds = new Set<string>();
185
- for (const f of chain)
186
- for (const id of fileComponentMap[f.filePath] ?? []) {
187
- componentIds.add(id);
188
- layoutIds.add(id);
189
- }
190
- for (const id of fileComponentMap[node.page.filePath] ?? []) componentIds.add(id);
191
- if (componentIds.size > 0) {
192
- routes.push({
193
- urlPath: node.urlPath,
194
- page: node.page,
195
- layoutsToLoad: chain.filter((l) => (fileComponentMap[l.filePath] ?? []).length > 0),
196
- componentIds: Array.from(componentIds),
197
- layoutComponentIds: layoutIds,
198
- });
199
- }
200
- }
201
-
202
- for (const child of node.children) walk(child, chain);
203
- };
204
-
205
- walk(root, []);
206
- return routes;
207
- }
208
-
209
142
  // ─── Lazy chunk loading ───────────────────────────────────────────────────
210
143
 
211
144
  /**
@@ -218,181 +151,6 @@ async function loadLazyChunk(chunkFile: string): Promise<void> {
218
151
  await import(/* @vite-ignore */ url);
219
152
  }
220
153
 
221
- // ─── Param enumeration ────────────────────────────────────────────────────
222
-
223
- type ParamCombo = CoercedParams;
224
-
225
- /**
226
- * Resolve the param combos to capture for a route. Static routes have
227
- * exactly one combo (the empty record) — `export const prerender`-style
228
- * components on static pages need no enumerator. Dynamic routes require
229
- * `generateStaticSegmentParams` (design/44 §generateStaticSegmentParams);
230
- * without it every request renders live and the wrapper is a no-op.
231
- */
232
- async function enumerateCombos(
233
- route: CandidateRoute,
234
- pageModule: Record<string, unknown>,
235
- log: (message: string) => void
236
- ): Promise<ParamCombo[] | null> {
237
- if (!hasDynamicSegments(route.urlPath)) return [{}];
238
-
239
- const generateFn = pageModule.generateStaticSegmentParams;
240
- if (typeof generateFn !== 'function') {
241
- log(
242
- `[timber] cache.component: route ${route.urlPath} has prebuilt components but no ` +
243
- `generateStaticSegmentParams export — all its entries will render dynamically ` +
244
- `until the page declares its param combos`
245
- );
246
- return null;
247
- }
248
- const combos: unknown = await (generateFn as () => unknown)();
249
- if (!Array.isArray(combos)) {
250
- throw new Error(
251
- `generateStaticSegmentParams must return an array of param records, got ${typeof combos}`
252
- );
253
- }
254
- return combos as ParamCombo[];
255
- }
256
-
257
- // ─── Rendering ────────────────────────────────────────────────────────────
258
-
259
- function concatChunks(chunks: Uint8Array[]): Uint8Array {
260
- let total = 0;
261
- for (const c of chunks) total += c.byteLength;
262
- const out = new Uint8Array(total);
263
- let off = 0;
264
- for (const c of chunks) {
265
- out.set(c, off);
266
- off += c.byteLength;
267
- }
268
- return out;
269
- }
270
-
271
- /**
272
- * Drain a flight stream to completion under a deadline. On timeout the
273
- * reader is cancelled (never abandoned mid-read — design/13 A2/A3) and
274
- * the entry fails.
275
- */
276
- async function drainWithTimeout(
277
- stream: ReadableStream<Uint8Array>,
278
- timeoutMs: number
279
- ): Promise<Uint8Array> {
280
- const reader = stream.getReader();
281
- const chunks: Uint8Array[] = [];
282
- let timer: ReturnType<typeof setTimeout> | undefined;
283
- let timedOut = false;
284
- const deadline = new Promise<never>((_, reject) => {
285
- timer = setTimeout(() => {
286
- timedOut = true;
287
- reject(new Error(`render did not complete within ${timeoutMs}ms`));
288
- }, timeoutMs);
289
- });
290
- try {
291
- for (;;) {
292
- const { done, value } = await Promise.race([reader.read(), deadline]);
293
- if (done) break;
294
- chunks.push(value as Uint8Array);
295
- }
296
- } finally {
297
- clearTimeout(timer);
298
- if (timedOut) await reader.cancel().catch(() => {});
299
- }
300
- return concatChunks(chunks);
301
- }
302
-
303
- /** Wrap payload bytes as a single-chunk stream for the smoke revival. */
304
- function bytesToStream(bytes: Uint8Array): ReadableStream<Uint8Array> {
305
- return new ReadableStream({
306
- start(c) {
307
- c.enqueue(bytes);
308
- c.close();
309
- },
310
- });
311
- }
312
-
313
- /**
314
- * View of a registered component that satisfies createElement — same
315
- * narrowing rationale as prebuilt-runtime.ts.
316
- */
317
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
318
- type RenderableComponent = (props: any) => React.ReactNode;
319
-
320
- interface EntryOutcome {
321
- bytes: Uint8Array | null;
322
- failure: unknown;
323
- nested: NestedWrapperRender[];
324
- resolvedTags: string[] | undefined;
325
- segmentParamsRead: boolean;
326
- }
327
-
328
- /**
329
- * Render one (component, props, coerced-params) entry in isolation and drain
330
- * its flight payload. Any `onError` during serialization fails the entry —
331
- * a payload with an embedded error row would replay that error on every
332
- * future request, so only fully clean renders are captured.
333
- */
334
- async function renderEntry(
335
- registration: PrebuiltRegistration,
336
- props: Record<string, unknown>,
337
- coercedParams: CoercedParams,
338
- timeoutMs: number,
339
- isLayout: boolean
340
- ): Promise<EntryOutcome> {
341
- const storeHandle = createBuildTimeStore(registration.id, coercedParams);
342
- const { store, violations } = storeHandle;
343
- let failure: unknown = null;
344
-
345
- beginCapture(registration.id);
346
- let bytes: Uint8Array | null = null;
347
- let resolvedTags: string[] | undefined;
348
- let nested: NestedWrapperRender[];
349
- try {
350
- // Render AND drain inside one ALS scope: flight executes components
351
- // lazily as the stream is pulled, and each pull must still see the
352
- // synthetic store (segmentParams.get() inside the component).
353
- // Tag resolution also runs inside this scope so function-form tags
354
- // that read segment params see the synthetic store (codex P2 on PR #858).
355
- // Layout captures get <SlotOutlet slot="children" /> as children so
356
- // the cached payload has a context-driven hole (design/45, TIM-1181).
357
- const renderProps =
358
- isLayout && !('children' in props)
359
- ? { ...props, children: createElement(SlotOutlet, { slot: LAYOUT_CHILDREN_SLOT }) }
360
- : props;
361
- bytes = await requestContextAls.run(store, async () => {
362
- const stream = renderToReadableStream(
363
- createElement(registration.component as RenderableComponent, renderProps),
364
- {
365
- onError(error: unknown) {
366
- failure ??= error ?? new Error('unknown render error');
367
- // Digest string keeps flight from warning about a missing
368
- // digest; the payload is discarded because `failure` is set.
369
- return 'timber-prebuilt-capture-error';
370
- },
371
- }
372
- );
373
- const drained = await drainWithTimeout(stream, timeoutMs);
374
- resolvedTags = resolveCapturedTags(registration.options, props);
375
- return drained;
376
- });
377
- } catch (error) {
378
- // Sync component throw (renderToReadableStream creation), drain
379
- // timeout, or stream error.
380
- failure ??= error;
381
- } finally {
382
- nested = endCapture();
383
- }
384
-
385
- // Side-channel check FIRST: a component that touched per-request context
386
- // is a hard error even when it caught the throw and rendered a fallback —
387
- // accepting that payload would bake the request-dependent branch for
388
- // every future request (codex P1 on PR #836).
389
- const { segmentParamsRead } = storeHandle;
390
- if (violations.length > 0)
391
- return { bytes: null, failure: violations[0], nested, resolvedTags, segmentParamsRead };
392
- if (failure !== null) return { bytes: null, failure, nested, resolvedTags, segmentParamsRead };
393
- return { bytes, failure: null, nested, resolvedTags, segmentParamsRead };
394
- }
395
-
396
154
  /** Human-readable classification for a failed entry. */
397
155
  function describeFailure(error: unknown): string {
398
156
  if (isDenySignal(error)) return `component called deny(${error.status})`;
@@ -401,63 +159,8 @@ function describeFailure(error: unknown): string {
401
159
  return String(error);
402
160
  }
403
161
 
404
- // ─── Nesting clamp warnings (design/45 §Nesting Semantics) ────────────────
405
-
406
- /** Render a lifetime declaration for the clamp warning. */
407
- function describeLifetime(options: PrebuiltComponentOptions): string {
408
- const parts: string[] = [];
409
- if (options.prerender) parts.push('prerender');
410
- if (options.ttl !== undefined) parts.push(`ttl: ${options.ttl}`);
411
- if (options.tags !== undefined) {
412
- parts.push(
413
- typeof options.tags === 'function' ? 'tags: fn' : `tags: ${JSON.stringify(options.tags)}`
414
- );
415
- }
416
- return parts.join(', ') || 'no lifetime';
417
- }
418
-
419
- /**
420
- * Warn when an inner wrapped component declares a refresh channel the
421
- * enclosing prerendered entry cannot honor. The outer here is always
422
- * prerender-tier (that's all the build captures), whose effective
423
- * lifetime is deploy-long with no tags — so ANY inner ttl/tags warns.
424
- * Once per (outer, inner) pair per build.
425
- */
426
- function warnNestingClamps(
427
- outerId: string,
428
- nested: NestedWrapperRender[],
429
- warnedPairs: Set<string>,
430
- log: (message: string) => void
431
- ): number {
432
- let count = 0;
433
- for (const { innerId, options } of nested) {
434
- if (options.ttl === undefined && options.tags === undefined) continue;
435
- const pairKey = `${outerId} ${innerId}`;
436
- if (warnedPairs.has(pairKey)) continue;
437
- warnedPairs.add(pairKey);
438
- count++;
439
- log(
440
- `[timber] ${innerId} (${describeLifetime(options)}) is embedded in prerendered ` +
441
- `${outerId} — the embedded copy refreshes only when ${outerId} does (on redeploy). ` +
442
- `Runtime revalidation will NOT update the embedded copy; tag ${outerId} itself if ` +
443
- `you need that. Chain: ${outerId} (prerender) → ${innerId} (${describeLifetime(options)})`
444
- );
445
- }
446
- return count;
447
- }
448
-
449
162
  // ─── Capture orchestration ────────────────────────────────────────────────
450
163
 
451
- /** Resolve tags from callsite options — static arrays pass through, function tags are evaluated with the capture-time props. */
452
- function resolveCapturedTags(
453
- options: PrebuiltComponentOptions,
454
- props: Record<string, unknown>
455
- ): string[] | undefined {
456
- if (!options.tags) return undefined;
457
- const resolved = typeof options.tags === 'function' ? options.tags(props) : options.tags;
458
- return resolved.length > 0 ? resolved : undefined;
459
- }
460
-
461
164
  /** Buffered entry pending the param-independence decision (TIM-1175). */
462
165
  interface PendingEntry {
463
166
  callSiteProps: Record<string, unknown>;
@@ -488,7 +191,7 @@ export async function capturePrebuiltPayloads(
488
191
  options: CaptureOptions
489
192
  ): Promise<CaptureSummary> {
490
193
  const log = options.log ?? ((message: string) => console.warn(message));
491
- const timeoutMs = options.renderTimeoutMs ?? DEFAULT_RENDER_TIMEOUT_MS;
194
+ const timeoutMs = resolveRenderTimeoutMs(options.renderTimeoutMs);
492
195
  const matchRoute = createRouteMatcher(manifest);
493
196
 
494
197
  const summary: CaptureSummary = { captured: 0, skipped: [], hardErrors: [], nestingWarnings: 0 };
@@ -588,8 +291,9 @@ export async function capturePrebuiltPayloads(
588
291
  });
589
292
  continue;
590
293
  }
294
+ let coercedParams: CoercedParams;
591
295
  try {
592
- await coerceSegmentParams(match);
296
+ coercedParams = await coerceSegmentParams(match);
593
297
  } catch (error) {
594
298
  skip({
595
299
  componentId: route.componentIds[0],
@@ -602,7 +306,6 @@ export async function capturePrebuiltPayloads(
602
306
  });
603
307
  continue;
604
308
  }
605
- const coercedParams = match.segmentParams;
606
309
 
607
310
  for (const componentId of route.componentIds) {
608
311
  let registration = getPrebuiltRegistration(componentId);
@@ -709,13 +412,6 @@ export async function capturePrebuiltPayloads(
709
412
  } else if (outcome.failure === null && !pending.anyParamRead) {
710
413
  provenParamIndependent.add(proofKey);
711
414
  }
712
- summary.nestingWarnings += warnNestingClamps(
713
- componentId,
714
- outcome.nested,
715
- warnedPairs,
716
- log
717
- );
718
-
719
415
  if (outcome.failure !== null) {
720
416
  const issue: CaptureIssue = {
721
417
  componentId,
@@ -748,6 +444,20 @@ export async function capturePrebuiltPayloads(
748
444
  continue;
749
445
  }
750
446
 
447
+ // Clamp warnings for an accepted entry only: a skipped one stores
448
+ // nothing to clamp (and a failed render never resolved its tags),
449
+ // and must not spend the pair's one warning.
450
+ summary.nestingWarnings += warnNestingClamps(
451
+ {
452
+ id: componentId,
453
+ options: registration.options,
454
+ tags: outcome.resolvedTags ?? [],
455
+ },
456
+ outcome.nested,
457
+ warnedPairs,
458
+ log
459
+ );
460
+
751
461
  // Once param-dependent is confirmed, emit directly instead of
752
462
  // buffering — no need to hold bytes in memory (TIM-1179).
753
463
  if (pending.anyParamRead) {