@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
@@ -4,51 +4,15 @@
4
4
  * Integrates with Vite's built-in error overlay (`server.hot.send`) rather
5
5
  * than implementing a custom overlay.
6
6
  *
7
- * Stack trace source-mapping uses the correct Vite environment module graph:
8
- * RSC errors use `server.environments.rsc.moduleGraph`, SSR/other errors use
9
- * `server.environments.ssr.moduleGraph`. `server.ssrFixStacktrace()` is NOT
10
- * used because it hardcodes the SSR module graph, which doesn't contain
11
- * source maps for RSC modules (separate Vite environment with its own
12
- * module graph). This caused RSC errors to show transpiled line numbers
13
- * instead of original source positions.
7
+ * Stacks are shown as they arrive: Vite's module runner already reports
8
+ * source positions for the code it runs, and a second mapping pass moves
9
+ * them (TIM-1555).
14
10
  *
15
- * Design doc: 21-dev-server.md §"Error Overlay"
11
+ * Design doc: 21-dev-server.md §"Error Overlay", §"RSC Source-Mapping"
16
12
  */
17
13
 
18
- import type { ViteDevServer, DevEnvironment } from 'vite';
19
- import { createRequire } from 'node:module';
20
- import { resolve, dirname } from 'node:path';
21
- import { classifyFrame, type FrameType } from './stack-classifier.ts';
22
-
23
- // ─── Trace Mapping (lazy-loaded) ─────────────────────────────────────────────
24
-
25
- interface TraceMappingModule {
26
- TraceMap: new (map: unknown) => unknown;
27
- originalPositionFor: (
28
- map: unknown,
29
- needle: { line: number; column: number }
30
- ) => { source: string | null; line: number | null; column: number | null };
31
- }
32
-
33
- let _traceMapping: TraceMappingModule | null = null;
34
-
35
- /**
36
- * Lazy-load @jridgewell/trace-mapping from Vite's dependency tree.
37
- * Vite bundles it internally; we resolve from Vite's package to avoid
38
- * adding a direct dependency.
39
- */
40
- function getTraceMapping(): TraceMappingModule {
41
- if (_traceMapping) return _traceMapping;
42
- // Resolve from Vite's package location so we pick up its transitive
43
- // @jridgewell/trace-mapping without declaring it as a direct dependency.
44
- // createRequire(import.meta.url) gives us ESM-compatible require (TIM-796),
45
- // then we hop to Vite's path to reach its dependency tree (TIM-804).
46
- const esmRequire = createRequire(import.meta.url);
47
- const vitePath = esmRequire.resolve('vite');
48
- const viteRequire = createRequire(vitePath);
49
- _traceMapping = viteRequire('@jridgewell/trace-mapping') as TraceMappingModule;
50
- return _traceMapping;
51
- }
14
+ import type { ViteDevServer } from 'vite';
15
+ import { classifyFrame } from './stack-classifier.ts';
52
16
 
53
17
  // ─── Types ──────────────────────────────────────────────────────────────────
54
18
 
@@ -164,200 +128,13 @@ export function classifyErrorPhase(error: Error, projectRoot: string): ErrorPhas
164
128
  import { formatTerminalError as _formatTerminalError } from './terminal.ts';
165
129
  export const formatTerminalError = _formatTerminalError;
166
130
 
167
- // ─── Module Runner Offset ───────────────────────────────────────────────────
168
-
169
- /**
170
- * Dynamically compute the line offset that Vite's module runner adds
171
- * when wrapping modules in an async function.
172
- *
173
- * Vite's `calculateOffsetOnce()` uses the same technique: create a new
174
- * AsyncFunction, throw from line 1, and check where the engine reports
175
- * the error. The difference between the reported line and 1 is the offset.
176
- *
177
- * This is engine-dependent (currently 2 on Node 18-22) and could change
178
- * in future Node.js or V8 versions. Computing it at runtime ensures we
179
- * always match the actual behavior.
180
- */
181
- let _cachedOffset: number | null = null;
182
-
183
- export function calculateModuleRunnerOffset(): number {
184
- if (_cachedOffset !== null) return _cachedOffset;
185
-
186
- try {
187
- // Parse the AsyncFunction source to count wrapper lines before the body.
188
- // AsyncFunction.toString() returns something like:
189
- // "async function anonymous(\n) {\nBODY\n}"
190
- // The number of newlines before BODY is the offset Vite's module runner adds.
191
- // eslint-disable-next-line no-new-func -- intentional: mirrors Vite's technique
192
- const AsyncFunction = async function () {}.constructor as typeof Function;
193
- const wrapper = new AsyncFunction('BODY');
194
- const src = wrapper.toString();
195
- const bodyIndex = src.indexOf('BODY');
196
- if (bodyIndex === -1) {
197
- _cachedOffset = 2; // fallback
198
- return _cachedOffset;
199
- }
200
- const beforeBody = src.slice(0, bodyIndex);
201
- const newlineCount = (beforeBody.match(/\n/g) || []).length;
202
- _cachedOffset = newlineCount;
203
- } catch (e) {
204
- console.debug(
205
- '[timber] overlay offset calculation failed:',
206
- e instanceof Error ? e.message : e
207
- );
208
- _cachedOffset = 2; // fallback to known-good value
209
- }
210
-
211
- return _cachedOffset;
212
- }
213
-
214
- // ─── Stack Trace Source-Mapping ──────────────────────────────────────────────
215
-
216
- /**
217
- * Phases where the error originated in the RSC environment.
218
- * These use `server.environments.rsc.moduleGraph` for source-mapping.
219
- */
220
- const RSC_PHASES: ReadonlySet<ErrorPhase> = new Set(['render', 'access', 'middleware', 'handler']);
221
-
222
- /**
223
- * Rewrite an error's stack trace using the correct Vite environment module graph.
224
- *
225
- * `server.ssrFixStacktrace()` hardcodes `server.environments.ssr.moduleGraph`,
226
- * but RSC errors have stack frames pointing to modules loaded in the RSC
227
- * environment — a separate Vite module graph with separate transform results
228
- * and source maps. Using the SSR module graph silently fails to find the
229
- * modules, leaving transpiled/bundled line numbers in the stack trace.
230
- *
231
- * This function picks the RSC module graph for render-phase errors and falls
232
- * back to SSR for module-transform/proxy errors. If the first pass doesn't
233
- * rewrite any frames (e.g., mixed RSC+SSR stack), it tries the other graph.
234
- */
235
- function fixStacktraceForEnvironment(server: ViteDevServer, error: Error, phase: ErrorPhase): void {
236
- if (!error.stack) return;
237
-
238
- // Pick the primary environment based on error phase
239
- const primaryEnvName = RSC_PHASES.has(phase) ? 'rsc' : 'ssr';
240
- const fallbackEnvName = primaryEnvName === 'rsc' ? 'ssr' : 'rsc';
241
-
242
- const primaryEnv = server.environments[primaryEnvName] as DevEnvironment | undefined;
243
- const fallbackEnv = server.environments[fallbackEnvName] as DevEnvironment | undefined;
244
-
245
- // Try primary environment first
246
- if (primaryEnv?.moduleGraph) {
247
- const rewritten = rewriteStacktrace(error.stack, primaryEnv.moduleGraph);
248
- if (rewritten.changed) {
249
- error.stack = rewritten.stack;
250
- return;
251
- }
252
- }
253
-
254
- // Fall back to the other environment if primary didn't rewrite anything
255
- if (fallbackEnv?.moduleGraph) {
256
- const rewritten = rewriteStacktrace(error.stack, fallbackEnv.moduleGraph);
257
- if (rewritten.changed) {
258
- error.stack = rewritten.stack;
259
- return;
260
- }
261
- }
262
- }
263
-
264
- /**
265
- * Rewrite stack trace frames using source maps from an environment's module graph.
266
- *
267
- * Mirrors Vite's internal `ssrRewriteStacktrace` logic but works with any
268
- * `EnvironmentModuleGraph`, not just the SSR one.
269
- *
270
- * Returns the rewritten stack and whether any frames were actually changed.
271
- */
272
- function rewriteStacktrace(
273
- stack: string,
274
- moduleGraph: DevEnvironment['moduleGraph']
275
- ): { stack: string; changed: boolean } {
276
- let changed = false;
277
-
278
- const result = stack
279
- .split('\n')
280
- .map((line) => {
281
- return line.replace(
282
- /^ {4}at (?:(\S.*?)\s\()?(.+?):(\d+)(?::(\d+))?\)?/,
283
- (input, varName, id, lineStr, colStr) => {
284
- if (!id) return input;
285
-
286
- const mod = moduleGraph.getModuleById(id);
287
- const rawSourceMap = mod?.transformResult?.map;
288
- if (!rawSourceMap) return input;
289
-
290
- // Vite's module runner wraps each module in an async function,
291
- // adding N lines before the module body. The offset is computed
292
- // dynamically to match the actual engine behavior (see TIM-783).
293
- const OFFSET = calculateModuleRunnerOffset();
294
- const origLine = Number(lineStr) - OFFSET;
295
- const origCol = Number(colStr) - 1;
296
- if (origLine <= 0 || origCol < 0) return input;
297
-
298
- // Use @jridgewell/trace-mapping resolved from Vite's dependency tree.
299
- // Vite bundles it internally; we resolve from Vite's package location
300
- // to avoid adding a direct dependency.
301
- let pos: { source: string | null; line: number | null; column: number | null };
302
- try {
303
- const { TraceMap: TM, originalPositionFor: opf } = getTraceMapping();
304
- const traced = new TM(rawSourceMap);
305
- pos = opf(traced, { line: origLine, column: origCol });
306
- } catch (e) {
307
- console.debug(
308
- '[timber] source map tracing failed:',
309
- e instanceof Error ? e.message : e
310
- );
311
- return input;
312
- }
313
-
314
- if (!pos.source || pos.line == null) return input;
315
-
316
- changed = true;
317
- const source = `${resolve(dirname(id), pos.source)}:${pos.line}:${(pos.column ?? 0) + 1}`;
318
- const trimmedVarName = varName?.trim();
319
- if (!trimmedVarName || trimmedVarName === 'eval') return ` at ${source}`;
320
- return ` at ${trimmedVarName} (${source})`;
321
- }
322
- );
323
- })
324
- .join('\n');
325
-
326
- return { stack: result, changed };
327
- }
328
-
329
- // ─── Error Source-Mapping (exported for use by fallback-error.ts) ────────────
330
-
331
- /**
332
- * Source-map an error's stack trace using the Vite dev server's module graph.
333
- *
334
- * Exported so that the fallback error renderer (fallback-error.ts) can
335
- * source-map errors before rendering the dev error page. Without this,
336
- * the dev error page shows transpiled positions (e.g. page.tsx:1:1 instead
337
- * of page.tsx:4:9).
338
- *
339
- * See TIM-811.
340
- */
341
- export function fixErrorStacktrace(server: ViteDevServer, error: Error, phase?: ErrorPhase): void {
342
- fixStacktraceForEnvironment(
343
- server,
344
- error,
345
- phase ?? classifyErrorPhase(error, server.config.root)
346
- );
347
- }
348
-
349
131
  // ─── Overlay Integration ────────────────────────────────────────────────────
350
132
 
351
133
  /**
352
134
  * Send an error to Vite's browser overlay and log it to stderr.
353
135
  *
354
- * Uses `server.ssrFixStacktrace()` to map stack traces back to source,
355
- * then sends the error via `server.hot.send()` for the browser overlay.
356
- *
357
- * When `rscDebugComponents` is provided (dev mode only), the server
358
- * component tree context is appended to the error message. This helps
359
- * developers identify which server component caused the error without
360
- * exposing source code.
136
+ * Reads `error` and never writes it: the pipeline may render the same object
137
+ * on the fallback error page after reporting it here.
361
138
  *
362
139
  * The dev server remains running — errors are handled, not fatal.
363
140
  */
@@ -367,13 +144,6 @@ export function sendErrorToOverlay(
367
144
  phase: ErrorPhase,
368
145
  projectRoot: string
369
146
  ): void {
370
- // Fix stack trace to use source-mapped positions.
371
- // Use the RSC environment's module graph for render/access/middleware errors
372
- // (which originate in the RSC environment), and fall back to SSR for others.
373
- // server.ssrFixStacktrace() is NOT used — it hardcodes the SSR module graph
374
- // which doesn't contain source maps for RSC-loaded modules.
375
- fixStacktraceForEnvironment(server, error, phase);
376
-
377
147
  // Log to stderr with frame dimming
378
148
  const formatted = formatTerminalError(error, phase, projectRoot);
379
149
  process.stderr.write(`${formatted}\n`);
package/src/index.ts CHANGED
@@ -37,7 +37,7 @@ import { timberRequestDep } from './plugins/request-dep/index.ts';
37
37
  import { timberPrebuilt } from './plugins/prebuilt.ts';
38
38
  import { timberPrerenderSugar } from './plugins/prerender-sugar.ts';
39
39
  import { timberCloudflareWasm } from './plugins/cloudflare-wasm.ts';
40
- import { timberAdapterBuild } from './plugins/adapter-build.ts';
40
+ import { timberPostBuild } from './plugins/post-build.ts';
41
41
  import { timberBuildReport } from './plugins/build-report.ts';
42
42
  import { createNoopTimer } from './utils/startup-timer.ts';
43
43
  import {
@@ -289,11 +289,11 @@ export function timber(config?: TimberUserConfig): PluginOption[] {
289
289
  // ── Resolve build output directory ─────────────────────────
290
290
  // Priority: timber.config.ts `buildDir` > Vite `build.outDir` > .timber/dist
291
291
  // Set Vite's build.outDir so the RSC plugin and all environment
292
- // builds write to the correct location.
293
- const viteOutDir = userConfig.build?.outDir;
294
- const timberBuildDir = ctx.config.buildDir;
292
+ // builds write to the correct location. ctx.buildDir is read back
293
+ // from Vite in configResolved, so there is one answer to where the
294
+ // build went.
295
295
  const resolvedRoot = resolve(userConfig.root ?? process.cwd());
296
- ctx.buildDir = resolveBuildDir(resolvedRoot, timberBuildDir, viteOutDir);
296
+ const buildDir = resolveBuildDir(resolvedRoot, ctx.config.buildDir, userConfig.build?.outDir);
297
297
 
298
298
  // Warn if the Vite root differs from cwd and the re-loaded config
299
299
  // has reactCompiler but the early cwd-based load missed it. In this
@@ -386,9 +386,9 @@ export function timber(config?: TimberUserConfig): PluginOption[] {
386
386
  resolvedDevPortExplicit = start.explicit;
387
387
  }
388
388
 
389
- // Derive relative buildOutDir from the absolute ctx.buildDir (set above)
389
+ // Derive relative buildOutDir from the absolute buildDir (set above)
390
390
  // so Vite's config receives a root-relative path.
391
- const buildOutDir = relative(resolvedRoot, ctx.buildDir);
391
+ const buildOutDir = relative(resolvedRoot, buildDir);
392
392
 
393
393
  // Set per-environment build.outDir so Vite's RSC plugin writes
394
394
  // each environment to the correct subdirectory under our buildDir.
@@ -500,8 +500,10 @@ export function timber(config?: TimberUserConfig): PluginOption[] {
500
500
  // The watcher.add() call in dev-server.ts ensures the files are
501
501
  // watched even if created after server start.
502
502
 
503
- // Sync buildDir from Vite's resolved build.outDir. Vite keeps
504
- // outDir as-is (may be relative), so resolve against root.
503
+ // The build directory is what Vite resolved build.outDir to — the
504
+ // config hook's value after every other plugin and the user config had
505
+ // their say. Vite keeps outDir as-is (may be relative), so resolve
506
+ // against root.
505
507
  ctx.buildDir = resolve(resolved.root, resolved.build.outDir);
506
508
  // In production builds, swap to a no-op timer to avoid overhead
507
509
  if (!ctx.dev) {
@@ -552,6 +554,14 @@ export function timber(config?: TimberUserConfig): PluginOption[] {
552
554
  // We do NOT set customBuildApp — the RSC plugin's orchestration is correct
553
555
  // and handles bundle ordering, asset manifest generation, and environment
554
556
  // imports manifest. See @vitejs/plugin-rsc's buildApp implementation.
557
+ //
558
+ // Everything after it runs in timber-post-build, in the order that plugin
559
+ // states. The plugins that own a post-build step expose it as their `api`
560
+ // and are handed to it here, so no step's order depends on where a plugin
561
+ // sits in this array. See design/18-build-system.md §"Post-Build Phase".
562
+ const fonts = timberFonts(ctx);
563
+ const prebuilt = timberPrebuilt(ctx);
564
+ const buildReport = timberBuildReport(ctx);
555
565
  return [
556
566
  rootSync,
557
567
  timberReactResolve(),
@@ -570,19 +580,19 @@ export function timber(config?: TimberUserConfig): PluginOption[] {
570
580
  timberRouting(ctx),
571
581
  timberEntries(ctx),
572
582
  timberBuildManifest(ctx),
573
- timberFonts(ctx),
583
+ fonts,
574
584
  timberMdx(ctx),
575
585
  timberRequestDep(ctx),
576
586
  timberCacheTransform(ctx),
577
587
  timberPrerenderSugar(ctx), // export const prerender → cache.component() desugaring
578
- timberPrebuilt(ctx), // cache.component() → __prebuilt() callsite rewrite
579
- timberStaticBuild(ctx), // Static mode: validate + post-build HTML generation
588
+ prebuilt, // cache.component() → __prebuilt() callsite rewrite
589
+ timberStaticBuild(ctx), // Static mode: validate dynamic API usage
580
590
  timberContent(ctx),
581
591
  timberServerBundle(), // Bundle all deps in server environments for prod
582
592
  timberCloudflareWasm(ctx), // Externalize WASM for Cloudflare Workers
583
593
  timberChunks(ctx),
584
- timberBuildReport(ctx), // Post-build: route table with bundle sizes
585
- timberAdapterBuild(ctx), // Post-build: invoke adapter.buildOutput()
594
+ buildReport, // Route table with bundle sizes, printed by timber-post-build
595
+ timberPostBuild(ctx, { fonts: fonts.api, prebuilt: prebuilt.api, report: buildReport.api }),
586
596
  timberDevLogs(ctx), // Dev-only: forward server console.* to browser console
587
597
  timberDevServer(ctx), // Must be last — configureServer post-hook runs after all watchers
588
598
  ];
@@ -14,13 +14,13 @@ import { createRequire } from 'node:module';
14
14
  import { parseAst } from 'vite';
15
15
  import type { RouteTree } from './routing/types.ts';
16
16
  import type { BuildManifest } from './server/build-manifest.ts';
17
- import type { CaptureSummary } from './server/prebuilt-builder.ts';
18
17
  import type { StartupTimer } from './utils/startup-timer.ts';
19
18
  import { createStartupTimer } from './utils/startup-timer.ts';
20
19
  import type { TimberUserConfig, ClientJavascriptConfig } from './config-types.ts';
21
- import type { RscManifest } from './plugins/static-build.ts';
22
20
  import type { HoldingServer } from './dev-tools/holding-server.ts';
23
21
  import type { ProgramNode } from './plugins/callsite-ast.ts';
22
+ import type { TimberConfig, TimberPlatformAdapter } from './adapters/types.ts';
23
+ import { normalizeBasePath } from './shared/base-path.ts';
24
24
 
25
25
  // Re-export for sub-plugin convenience — they import from plugin-context.ts
26
26
  export type { TimberUserConfig, ClientJavascriptConfig } from './config-types.ts';
@@ -88,7 +88,11 @@ export interface PluginContext {
88
88
  * does). See TIM-1261.
89
89
  */
90
90
  base: string;
91
- /** CSS build manifest (populated by adapter after client build, null in dev) */
91
+ /**
92
+ * The build manifest. Created by timber-build-manifest from the client
93
+ * bundle and finalized by the post-build phase (plugins/post-build.ts),
94
+ * which is the only reader. Null in dev.
95
+ */
92
96
  buildManifest: BuildManifest | null;
93
97
  /** Per-build deployment ID for version skew detection (null in dev) */
94
98
  deploymentId: string | null;
@@ -103,13 +107,16 @@ export interface PluginContext {
103
107
  * `timber.config.ts` `buildDir` or Vite's `build.outDir`.
104
108
  * Timber config takes precedence when both are set.
105
109
  *
106
- * Used by adapter-build and cli preview.
110
+ * The `config` hook resolves it into Vite's `build.outDir`, and
111
+ * `configResolved` reads it back from Vite — the one assignment after
112
+ * construction, so what the build writes to and what `timber preview`
113
+ * serves (through {@link TimberPluginApi}) are the same directory.
107
114
  */
108
115
  buildDir: string;
109
116
  /**
110
117
  * Per-route client reference keys captured during the RSC build.
111
118
  * Maps absolute route file paths to the set of client reference
112
- * hash keys they transitively import. Used by adapter-build to
119
+ * hash keys they transitively import. Used by the post-build phase to
113
120
  * populate per-route modulepreload entries from clientReferenceDeps.
114
121
  */
115
122
  routeClientRefKeys?: Map<string, Set<string>>;
@@ -138,19 +145,6 @@ export interface PluginContext {
138
145
  * See design/27-chunking-strategy.md, TIM-1107.
139
146
  */
140
147
  sharedModuleFacades?: Map<string, string[]>;
141
- /**
142
- * Module ID → prebuilt component IDs declared in it. Recorded by the
143
- * timber-prebuilt transform (RSC environment, production builds only),
144
- * consumed by the RSC `generateBundle` module-graph walk that computes
145
- * `routePrebuiltComponents`. See design/44-render-at-build-time.md.
146
- */
147
- prebuiltModuleComponents?: Map<string, string[]>;
148
- /**
149
- * Module ID → mapping of variable name to component ID for the prebuilt
150
- * components declared in that module. Used at `generateBundle` time to
151
- * trace imports from other modules back to specific component IDs.
152
- */
153
- prebuiltBindingNames?: Map<string, Map<string, string>>;
154
148
  /**
155
149
  * Component ID → distinct static call-site prop objects captured from
156
150
  * JSX usage sites during the transform and generateBundle phases.
@@ -165,12 +159,6 @@ export interface PluginContext {
165
159
  * components to render under which route's param combos.
166
160
  */
167
161
  routePrebuiltComponents?: Map<string, string[]>;
168
- /**
169
- * Page file paths that were desugared from `export const prerender` by
170
- * timber-prerender-sugar. The prebuilt transform uses this to verify
171
- * the generated `cache.component(...)` call was picked up.
172
- */
173
- prerenderSugarPages?: Set<string>;
174
162
  /**
175
163
  * Component ID → built chunk file name for prebuilt-declaring modules
176
164
  * that are only reachable via dynamic imports (import.meta.glob, lazy
@@ -179,8 +167,6 @@ export interface PluginContext {
179
167
  * RSC generateBundle alongside routePrebuiltComponents.
180
168
  */
181
169
  prebuiltLazyChunks?: Map<string, string>;
182
- /** Post-build prebuilt capture summary (populated by timber-prebuilt, consumed by build-report). */
183
- captureSummary?: CaptureSummary;
184
170
  /**
185
171
  * Content-keyed AST parse memo shared across cache/prebuilt/prerender-sugar
186
172
  * transforms. Collapses both cross-plugin and cross-environment duplicate
@@ -192,18 +178,6 @@ export interface PluginContext {
192
178
  * ranges and rewrite CODE via MagicString; the AST itself is never mutated.
193
179
  */
194
180
  parseCached?: ParseMemo;
195
- /**
196
- * Content-Type mappings for extensionless static API route outputs.
197
- * Populated during static generation, consumed by adapter-build to
198
- * write per-path Content-Type rules in _headers. See TIM-1241.
199
- */
200
- staticContentTypes?: Record<string, string>;
201
- /**
202
- * RSC flight payload manifest mapping unhashed → hashed URLs.
203
- * Populated during static generation, consumed by adapters to set
204
- * immutable cache headers for `_rsc/` files. See TIM-1254.
205
- */
206
- rscManifest?: RscManifest;
207
181
  }
208
182
 
209
183
  // ── AST parse memo ───────────────────────────────────────────────────────
@@ -274,6 +248,30 @@ export function isTimberPluginApi(api: unknown): api is TimberPluginApi {
274
248
  );
275
249
  }
276
250
 
251
+ /**
252
+ * The configured platform adapter. `adapter` is typed `unknown` on the user
253
+ * config so that `timber.config.ts` does not depend on the adapter types; the
254
+ * adapter factories are what produce values of this shape.
255
+ */
256
+ export function contextAdapter(ctx: PluginContext): TimberPlatformAdapter | undefined {
257
+ return ctx.config.adapter as TimberPlatformAdapter | undefined;
258
+ }
259
+
260
+ /**
261
+ * The configuration an adapter is handed, derived once from the resolved
262
+ * context — by the post-build phase for `buildOutput` and by `timber preview`
263
+ * for `preview`.
264
+ */
265
+ export function adapterConfig(ctx: PluginContext): TimberConfig {
266
+ return {
267
+ root: ctx.root,
268
+ // Normalized once here, not in each adapter: the platform files
269
+ // adapters write address deployed-URL space (TIM-1274).
270
+ base: normalizeBasePath(ctx.base),
271
+ clientJavascriptDisabled: ctx.clientJavascript.disabled,
272
+ };
273
+ }
274
+
277
275
  /**
278
276
  * Resolve the app directory. Checks (in order):
279
277
  * 1. Explicit `configAppDir` from timber.config.ts
@@ -439,8 +437,9 @@ export function loadTimberConfigFile(root: string): TimberUserConfig | null {
439
437
 
440
438
  /**
441
439
  * Detect config keys set in both inline (vite.config.ts) and file (timber.config.ts)
442
- * and warn the user. The `output` key is excluded because it defaults to 'server'
443
- * in createPluginContext and would always appear as an inline key.
440
+ * and warn the user. Only keys the inline config actually sets count — the
441
+ * `output` default is applied after the merge (timber-root-sync), so it never
442
+ * appears here as an inline key.
444
443
  *
445
444
  * Returns the list of conflicting key names (for testing).
446
445
  */
@@ -418,7 +418,7 @@ export function timberBuildManifest(ctx: PluginContext): Plugin {
418
418
 
419
419
  // RSC environment: walk the module graph to find which client
420
420
  // references each route file transitively imports. Store the
421
- // mapping in ctx so the adapter-build post hook can cross-reference
421
+ // mapping in ctx so the post-build phase can cross-reference
422
422
  // with clientReferenceDeps to populate per-route modulepreloads.
423
423
  if (envName === 'rsc' && ctx.routeTree) {
424
424
  const clientRefIndex = buildClientRefIndex(bundle);
@@ -475,17 +475,10 @@ export function timberBuildManifest(ctx: PluginContext): Plugin {
475
475
 
476
476
  // When client JavaScript is disabled, strip JS chunks from the bundle
477
477
  // so Rollup never writes them to disk. CSS assets are preserved —
478
- // they're still needed for server-rendered HTML.
479
- //
480
- // This is an optimization: adapter-build.ts still strips JS from the
481
- // build manifest and RSC assets manifest as a defense-in-depth fallback.
478
+ // they're still needed for server-rendered HTML. The JS references
479
+ // in the manifest are stripped once, by the post-build phase, after
480
+ // it has merged in everything else (plugins/post-build.ts).
482
481
  if (ctx.clientJavascript.disabled) {
483
- // Clear JS and modulepreload from the manifest (they'd be stripped
484
- // by adapter-build.ts anyway, but doing it here avoids the round-trip).
485
- ctx.buildManifest.js = {};
486
- ctx.buildManifest.modulepreload = {};
487
-
488
- // Remove JS chunks from the Rollup bundle — prevents disk writes.
489
482
  for (const [fileName, item] of Object.entries(bundle)) {
490
483
  if (item.type === 'chunk') {
491
484
  delete bundle[fileName];