@timber-js/app 0.2.0-alpha.207 → 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 (526) 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-BndF-3Td.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-DwQBrLBz.js → status-page-marker-gaihi0KZ.js} +140 -28
  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 +20 -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 +95 -108
  132. package/dist/client/internal.js.map +1 -1
  133. package/dist/client/navigation-commit.d.ts +20 -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 +3 -8
  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/segment-cache.d.ts +44 -4
  149. package/dist/client/segment-cache.d.ts.map +1 -1
  150. package/dist/client/ssr-data.d.ts +18 -64
  151. package/dist/client/ssr-data.d.ts.map +1 -1
  152. package/dist/client/state.d.ts +2 -5
  153. package/dist/client/state.d.ts.map +1 -1
  154. package/dist/client/use-pathname.d.ts +1 -1
  155. package/dist/config-types.d.ts +2 -1
  156. package/dist/config-types.d.ts.map +1 -1
  157. package/dist/config-validation.d.ts.map +1 -1
  158. package/dist/cookies/index.js +1 -1
  159. package/dist/dev-tools/dev-page-shell.d.ts +17 -0
  160. package/dist/dev-tools/dev-page-shell.d.ts.map +1 -1
  161. package/dist/dev-tools/index.d.ts +1 -1
  162. package/dist/dev-tools/index.d.ts.map +1 -1
  163. package/dist/dev-tools/instrumentation.d.ts +17 -2
  164. package/dist/dev-tools/instrumentation.d.ts.map +1 -1
  165. package/dist/dev-tools/overlay.d.ts +6 -27
  166. package/dist/dev-tools/overlay.d.ts.map +1 -1
  167. package/dist/index.d.ts.map +1 -1
  168. package/dist/index.js +632 -373
  169. package/dist/index.js.map +1 -1
  170. package/dist/plugin-context.d.ts +26 -40
  171. package/dist/plugin-context.d.ts.map +1 -1
  172. package/dist/plugins/build-manifest.d.ts.map +1 -1
  173. package/dist/plugins/build-report.d.ts +15 -2
  174. package/dist/plugins/build-report.d.ts.map +1 -1
  175. package/dist/plugins/dev-server.d.ts.map +1 -1
  176. package/dist/plugins/entries.d.ts.map +1 -1
  177. package/dist/plugins/fonts.d.ts +19 -1
  178. package/dist/plugins/fonts.d.ts.map +1 -1
  179. package/dist/plugins/post-build.d.ts +110 -0
  180. package/dist/plugins/post-build.d.ts.map +1 -0
  181. package/dist/plugins/prebuilt-capture.d.ts +11 -4
  182. package/dist/plugins/prebuilt-capture.d.ts.map +1 -1
  183. package/dist/plugins/prebuilt.d.ts +17 -1
  184. package/dist/plugins/prebuilt.d.ts.map +1 -1
  185. package/dist/plugins/prerender-sugar.d.ts.map +1 -1
  186. package/dist/plugins/react-resolve.d.ts +49 -0
  187. package/dist/plugins/react-resolve.d.ts.map +1 -0
  188. package/dist/plugins/rsc-assets-manifest.d.ts +33 -0
  189. package/dist/plugins/rsc-assets-manifest.d.ts.map +1 -0
  190. package/dist/plugins/shims.d.ts.map +1 -1
  191. package/dist/plugins/static-build.d.ts +32 -9
  192. package/dist/plugins/static-build.d.ts.map +1 -1
  193. package/dist/routing/codegen-write.d.ts +0 -9
  194. package/dist/routing/codegen-write.d.ts.map +1 -1
  195. package/dist/routing/index.js +2 -2
  196. package/dist/routing/segment-codegen.d.ts.map +1 -1
  197. package/dist/server/access-gate.d.ts.map +1 -1
  198. package/dist/server/action-handler.d.ts +5 -4
  199. package/dist/server/action-handler.d.ts.map +1 -1
  200. package/dist/server/actions.d.ts +46 -7
  201. package/dist/server/actions.d.ts.map +1 -1
  202. package/dist/server/als-registry.d.ts +58 -5
  203. package/dist/server/als-registry.d.ts.map +1 -1
  204. package/dist/server/children-interception.d.ts.map +1 -1
  205. package/dist/server/cookie-context.d.ts +2 -23
  206. package/dist/server/cookie-context.d.ts.map +1 -1
  207. package/dist/server/csp-nonce.d.ts +0 -9
  208. package/dist/server/csp-nonce.d.ts.map +1 -1
  209. package/dist/server/csrf.d.ts +27 -4
  210. package/dist/server/csrf.d.ts.map +1 -1
  211. package/dist/server/debug.d.ts +0 -1
  212. package/dist/server/debug.d.ts.map +1 -1
  213. package/dist/server/default-logger.d.ts +2 -1
  214. package/dist/server/default-logger.d.ts.map +1 -1
  215. package/dist/server/deny-boundary.d.ts +12 -6
  216. package/dist/server/deny-boundary.d.ts.map +1 -1
  217. package/dist/server/deny-renderer.d.ts +2 -2
  218. package/dist/server/deny-renderer.d.ts.map +1 -1
  219. package/dist/server/error-boundary-wrapper.d.ts +7 -3
  220. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  221. package/dist/server/fallback-error.d.ts +9 -2
  222. package/dist/server/fallback-error.d.ts.map +1 -1
  223. package/dist/server/head-response.d.ts +4 -4
  224. package/dist/server/html-injectors.d.ts.map +1 -1
  225. package/dist/server/index.d.ts +0 -1
  226. package/dist/server/index.d.ts.map +1 -1
  227. package/dist/server/index.js +3 -4
  228. package/dist/server/index.js.map +1 -1
  229. package/dist/server/instrumentation.d.ts +10 -3
  230. package/dist/server/instrumentation.d.ts.map +1 -1
  231. package/dist/server/internal.d.ts +1 -4
  232. package/dist/server/internal.d.ts.map +1 -1
  233. package/dist/server/internal.js +961 -581
  234. package/dist/server/internal.js.map +1 -1
  235. package/dist/server/json-status-response.d.ts +34 -0
  236. package/dist/server/json-status-response.d.ts.map +1 -0
  237. package/dist/server/logger.d.ts +26 -0
  238. package/dist/server/logger.d.ts.map +1 -1
  239. package/dist/server/param-coercion.d.ts +11 -6
  240. package/dist/server/param-coercion.d.ts.map +1 -1
  241. package/dist/server/pipeline-helpers.d.ts +95 -7
  242. package/dist/server/pipeline-helpers.d.ts.map +1 -1
  243. package/dist/server/pipeline-interception.d.ts +11 -0
  244. package/dist/server/pipeline-interception.d.ts.map +1 -1
  245. package/dist/server/pipeline-outcome.d.ts +11 -1
  246. package/dist/server/pipeline-outcome.d.ts.map +1 -1
  247. package/dist/server/pipeline-phases.d.ts +2 -2
  248. package/dist/server/pipeline-phases.d.ts.map +1 -1
  249. package/dist/server/pipeline.d.ts +23 -35
  250. package/dist/server/pipeline.d.ts.map +1 -1
  251. package/dist/server/prebuilt/capture-render.d.ts +25 -0
  252. package/dist/server/prebuilt/capture-render.d.ts.map +1 -0
  253. package/dist/server/prebuilt/capture-routes.d.ts +37 -0
  254. package/dist/server/prebuilt/capture-routes.d.ts.map +1 -0
  255. package/dist/server/prebuilt/capture-state.d.ts +79 -35
  256. package/dist/server/prebuilt/capture-state.d.ts.map +1 -1
  257. package/dist/server/prebuilt/lifetime.d.ts +38 -0
  258. package/dist/server/prebuilt/lifetime.d.ts.map +1 -0
  259. package/dist/server/prebuilt/slots.d.ts +7 -0
  260. package/dist/server/prebuilt/slots.d.ts.map +1 -1
  261. package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -1
  262. package/dist/server/prebuilt-builder.d.ts.map +1 -1
  263. package/dist/server/prebuilt-runtime.d.ts.map +1 -1
  264. package/dist/server/primitives.d.ts +6 -81
  265. package/dist/server/primitives.d.ts.map +1 -1
  266. package/dist/server/react-cache-bridge.d.ts +59 -0
  267. package/dist/server/react-cache-bridge.d.ts.map +1 -0
  268. package/dist/server/react-cache-scope.d.ts +49 -0
  269. package/dist/server/react-cache-scope.d.ts.map +1 -0
  270. package/dist/server/render-timeout.d.ts +15 -0
  271. package/dist/server/render-timeout.d.ts.map +1 -1
  272. package/dist/server/render-utils.d.ts +9 -0
  273. package/dist/server/render-utils.d.ts.map +1 -1
  274. package/dist/server/request-context.d.ts +26 -5
  275. package/dist/server/request-context.d.ts.map +1 -1
  276. package/dist/server/route-element-builder.d.ts.map +1 -1
  277. package/dist/server/route-handler.d.ts.map +1 -1
  278. package/dist/server/route-matcher.d.ts +7 -0
  279. package/dist/server/route-matcher.d.ts.map +1 -1
  280. package/dist/server/rsc-entry/action-middleware-runner.d.ts +22 -22
  281. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -1
  282. package/dist/server/rsc-entry/api-handler.d.ts +7 -0
  283. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  284. package/dist/server/rsc-entry/deny-fallback.d.ts +32 -6
  285. package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -1
  286. package/dist/server/rsc-entry/error-renderer.d.ts +11 -18
  287. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  288. package/dist/server/rsc-entry/helpers.d.ts +0 -1
  289. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  290. package/dist/server/rsc-entry/index.d.ts +5 -15
  291. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  292. package/dist/server/rsc-entry/render-route.d.ts +5 -6
  293. package/dist/server/rsc-entry/render-route.d.ts.map +1 -1
  294. package/dist/server/rsc-entry/render-signals.d.ts +65 -0
  295. package/dist/server/rsc-entry/render-signals.d.ts.map +1 -0
  296. package/dist/server/rsc-entry/revalidate-renderer.d.ts +6 -16
  297. package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -1
  298. package/dist/server/rsc-entry/rsc-payload.d.ts +7 -3
  299. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  300. package/dist/server/rsc-entry/rsc-stream.d.ts +8 -53
  301. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  302. package/dist/server/rsc-entry/ssr-bridge.d.ts +2 -2
  303. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  304. package/dist/server/rsc-entry/ssr-renderer.d.ts +9 -4
  305. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  306. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +1 -1
  307. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts.map +1 -1
  308. package/dist/server/signal-identity.d.ts +43 -0
  309. package/dist/server/signal-identity.d.ts.map +1 -0
  310. package/dist/server/slot-resolver.d.ts +4 -3
  311. package/dist/server/slot-resolver.d.ts.map +1 -1
  312. package/dist/server/slot-subtree-contain.d.ts.map +1 -1
  313. package/dist/server/ssr-bridge-types.d.ts +91 -53
  314. package/dist/server/ssr-bridge-types.d.ts.map +1 -1
  315. package/dist/server/ssr-entry.d.ts +8 -5
  316. package/dist/server/ssr-entry.d.ts.map +1 -1
  317. package/dist/server/ssr-render.d.ts +26 -40
  318. package/dist/server/ssr-render.d.ts.map +1 -1
  319. package/dist/server/ssr-wrappers.d.ts +1 -1
  320. package/dist/server/static-generator.d.ts.map +1 -1
  321. package/dist/server/stream-utils.d.ts +12 -0
  322. package/dist/server/stream-utils.d.ts.map +1 -1
  323. package/dist/server/tracing.d.ts +12 -16
  324. package/dist/server/tracing.d.ts.map +1 -1
  325. package/dist/server/types.d.ts +1 -1
  326. package/dist/server/version-skew.d.ts +3 -3
  327. package/dist/shared/csrf-reject.d.ts +16 -0
  328. package/dist/shared/csrf-reject.d.ts.map +1 -0
  329. package/dist/shared/error-digest.d.ts +28 -0
  330. package/dist/shared/error-digest.d.ts.map +1 -0
  331. package/dist/shared/payload-root.d.ts +11 -10
  332. package/dist/shared/payload-root.d.ts.map +1 -1
  333. package/dist/shared/rsc-payload-path.d.ts +6 -0
  334. package/dist/shared/rsc-payload-path.d.ts.map +1 -1
  335. package/dist/utils/write-file-atomic.d.ts +17 -0
  336. package/dist/utils/write-file-atomic.d.ts.map +1 -0
  337. package/docs/api/30-api-server.mdx +17 -14
  338. package/docs/api/32-api-cache.mdx +51 -23
  339. package/docs/api/34-api-config.mdx +34 -6
  340. package/docs/api/36-cli.mdx +11 -1
  341. package/docs/learn/03-fetching-data.mdx +17 -1
  342. package/docs/learn/04-access-control.mdx +1 -1
  343. package/docs/learn/10-caching.mdx +29 -11
  344. package/docs/learn/11-middleware.mdx +8 -2
  345. package/docs/learn/12-error-handling.mdx +6 -1
  346. package/package.json +7 -3
  347. package/src/adapters/build-output-helper.ts +55 -53
  348. package/src/adapters/canonicalize-module.ts +29 -0
  349. package/src/adapters/cloudflare.ts +105 -63
  350. package/src/adapters/compress-module.ts +16 -5
  351. package/src/adapters/fs-identity.ts +2 -3
  352. package/src/adapters/nitro-presets.ts +0 -15
  353. package/src/adapters/nitro-preview.ts +272 -136
  354. package/src/adapters/nitro.ts +119 -82
  355. package/src/adapters/shared.ts +23 -14
  356. package/src/adapters/types.ts +110 -21
  357. package/src/analyze/graph-cache.ts +3 -4
  358. package/src/cache/json-lossy-check.ts +3 -9
  359. package/src/cache/singleflight.ts +5 -2
  360. package/src/cache/sizeof.ts +3 -1
  361. package/src/cache/tag-aware-handler.ts +43 -26
  362. package/src/cli-check.ts +8 -98
  363. package/src/cli-context.ts +119 -0
  364. package/src/cli.ts +19 -28
  365. package/src/client/browser-dev.ts +1 -1
  366. package/src/client/browser-entry/action-dispatch.ts +26 -4
  367. package/src/client/browser-entry/hydrate.ts +53 -58
  368. package/src/client/browser-entry/index.ts +16 -27
  369. package/src/client/browser-entry/post-hydration.ts +6 -40
  370. package/src/client/browser-entry/router-init.ts +66 -84
  371. package/src/client/error-boundary.tsx +9 -41
  372. package/src/client/error-reconstituter.tsx +10 -5
  373. package/src/client/history.ts +35 -21
  374. package/src/client/index.ts +0 -1
  375. package/src/client/internal.ts +2 -7
  376. package/src/client/navigation-commit.ts +41 -18
  377. package/src/client/navigation-context.ts +3 -39
  378. package/src/client/react-root.ts +3 -2
  379. package/src/client/router-pipeline.ts +96 -132
  380. package/src/client/router-types.ts +46 -44
  381. package/src/client/router-url.ts +32 -0
  382. package/src/client/router.ts +62 -21
  383. package/src/client/rsc-fetch.ts +117 -155
  384. package/src/client/segment-cache.ts +110 -11
  385. package/src/client/ssr-data.ts +19 -80
  386. package/src/client/state.ts +2 -9
  387. package/src/client/use-pathname.ts +1 -1
  388. package/src/config-types.ts +2 -1
  389. package/src/config-validation.ts +2 -1
  390. package/src/dev-tools/dev-page-shell.ts +18 -0
  391. package/src/dev-tools/index.ts +0 -2
  392. package/src/dev-tools/instrumentation.ts +50 -2
  393. package/src/dev-tools/overlay.ts +8 -238
  394. package/src/index.ts +26 -14
  395. package/src/plugin-context.ts +39 -40
  396. package/src/plugins/build-manifest.ts +4 -11
  397. package/src/plugins/build-report.ts +70 -70
  398. package/src/plugins/dev-server.ts +24 -44
  399. package/src/plugins/entries.ts +2 -1
  400. package/src/plugins/fonts.ts +35 -7
  401. package/src/plugins/post-build.ts +327 -0
  402. package/src/plugins/prebuilt-capture.ts +28 -32
  403. package/src/plugins/prebuilt.ts +54 -39
  404. package/src/plugins/prerender-sugar.ts +0 -4
  405. package/src/plugins/react-resolve.ts +149 -0
  406. package/src/plugins/{adapter-build.ts → rsc-assets-manifest.ts} +20 -109
  407. package/src/plugins/shims.ts +1 -0
  408. package/src/plugins/static-build.ts +42 -74
  409. package/src/routing/codegen-write.ts +25 -3
  410. package/src/routing/segment-codegen.ts +3 -2
  411. package/src/rsc-runtime/vendor-types.d.ts +8 -0
  412. package/src/server/access-gate.tsx +2 -1
  413. package/src/server/action-client.ts +1 -1
  414. package/src/server/action-handler.ts +253 -110
  415. package/src/server/actions.ts +73 -25
  416. package/src/server/als-registry.ts +73 -5
  417. package/src/server/chain-url-parts.ts +1 -1
  418. package/src/server/children-interception.ts +2 -1
  419. package/src/server/cookie-context.ts +18 -48
  420. package/src/server/csp-nonce.ts +0 -12
  421. package/src/server/csrf.ts +140 -8
  422. package/src/server/debug.ts +0 -1
  423. package/src/server/default-logger.ts +2 -1
  424. package/src/server/deny-boundary.ts +25 -13
  425. package/src/server/deny-renderer.ts +30 -97
  426. package/src/server/error-boundary-wrapper.ts +7 -3
  427. package/src/server/fallback-error.ts +26 -11
  428. package/src/server/flight-scripts.ts +1 -1
  429. package/src/server/head-response.ts +4 -4
  430. package/src/server/html-injector-core.ts +2 -2
  431. package/src/server/html-injectors.ts +2 -4
  432. package/src/server/index.ts +0 -4
  433. package/src/server/instrumentation.ts +10 -3
  434. package/src/server/internal.ts +1 -6
  435. package/src/server/json-status-response.ts +105 -0
  436. package/src/server/logger.ts +39 -3
  437. package/src/server/param-coercion.ts +15 -12
  438. package/src/server/pipeline-helpers.ts +257 -12
  439. package/src/server/pipeline-interception.ts +133 -0
  440. package/src/server/pipeline-outcome.ts +103 -31
  441. package/src/server/pipeline-phases.ts +127 -237
  442. package/src/server/pipeline.ts +204 -207
  443. package/src/server/prebuilt/capture-render.ts +118 -0
  444. package/src/server/prebuilt/capture-routes.ts +104 -0
  445. package/src/server/prebuilt/capture-state.ts +155 -48
  446. package/src/server/prebuilt/lifetime.ts +151 -0
  447. package/src/server/prebuilt/slots.ts +14 -2
  448. package/src/server/prebuilt/synthetic-store.ts +3 -0
  449. package/src/server/prebuilt-builder.ts +30 -320
  450. package/src/server/prebuilt-runtime.ts +125 -129
  451. package/src/server/primitives.ts +8 -168
  452. package/src/server/react-cache-bridge.ts +124 -0
  453. package/src/server/react-cache-scope.ts +104 -0
  454. package/src/server/render-timeout.ts +20 -0
  455. package/src/server/render-utils.ts +11 -1
  456. package/src/server/request-context.ts +36 -9
  457. package/src/server/route-element-builder.ts +11 -6
  458. package/src/server/route-handler.ts +36 -23
  459. package/src/server/route-matcher.ts +15 -1
  460. package/src/server/rsc-entry/action-middleware-runner.ts +79 -123
  461. package/src/server/rsc-entry/api-handler.ts +27 -103
  462. package/src/server/rsc-entry/deny-fallback.ts +93 -26
  463. package/src/server/rsc-entry/error-renderer.ts +39 -91
  464. package/src/server/rsc-entry/helpers.ts +2 -4
  465. package/src/server/rsc-entry/index.ts +64 -58
  466. package/src/server/rsc-entry/render-route.ts +15 -80
  467. package/src/server/rsc-entry/render-signals.ts +108 -0
  468. package/src/server/rsc-entry/revalidate-renderer.ts +56 -57
  469. package/src/server/rsc-entry/rsc-payload.ts +28 -61
  470. package/src/server/rsc-entry/rsc-stream.ts +113 -213
  471. package/src/server/rsc-entry/ssr-bridge.ts +2 -2
  472. package/src/server/rsc-entry/ssr-renderer.ts +182 -263
  473. package/src/server/rsc-entry/wrap-action-dispatch.ts +12 -14
  474. package/src/server/signal-identity.ts +112 -0
  475. package/src/server/slot-resolver.ts +18 -18
  476. package/src/server/slot-subtree-contain.ts +2 -1
  477. package/src/server/ssr-bridge-types.ts +92 -56
  478. package/src/server/ssr-entry.ts +87 -111
  479. package/src/server/ssr-render.ts +55 -64
  480. package/src/server/ssr-wrappers.tsx +2 -2
  481. package/src/server/static-generator.ts +7 -42
  482. package/src/server/static-not-found.ts +3 -3
  483. package/src/server/stream-utils.ts +51 -0
  484. package/src/server/tracing.ts +58 -75
  485. package/src/server/types.ts +1 -1
  486. package/src/server/version-skew.ts +5 -5
  487. package/src/shared/csrf-reject.ts +15 -0
  488. package/src/shared/error-digest.ts +46 -0
  489. package/src/shared/payload-root.ts +11 -10
  490. package/src/shared/rsc-payload-path.ts +8 -1
  491. package/src/utils/write-file-atomic.ts +32 -0
  492. package/dist/_chunks/actions-jNrXdzgs.js +0 -346
  493. package/dist/_chunks/actions-jNrXdzgs.js.map +0 -1
  494. package/dist/_chunks/als-registry-C6kcfprT.js.map +0 -1
  495. package/dist/_chunks/build-manifest-DTmSGLRz.js.map +0 -1
  496. package/dist/_chunks/build-output-helper-9dqCv1pZ.js.map +0 -1
  497. package/dist/_chunks/cache-api-CUD9Ezaq.js.map +0 -1
  498. package/dist/_chunks/cli-check-G8o30ldg.js.map +0 -1
  499. package/dist/_chunks/convention-lint-5KzoMg_A.js.map +0 -1
  500. package/dist/_chunks/dev-server-BzBxgYAV.js.map +0 -1
  501. package/dist/_chunks/error-boundary-BndF-3Td.js.map +0 -1
  502. package/dist/_chunks/fs-identity-D7vb6GdI.js.map +0 -1
  503. package/dist/_chunks/graph-cache-CP4GEmf9.js.map +0 -1
  504. package/dist/_chunks/json-lossy-check-ClNvBM_3.js.map +0 -1
  505. package/dist/_chunks/logger-k2DQ4EUf.js.map +0 -1
  506. package/dist/_chunks/navigation-context-D0TU0Jog.js.map +0 -1
  507. package/dist/_chunks/plugin-context-8idfR3UZ.js.map +0 -1
  508. package/dist/_chunks/primitives-DLAnvsrk.js.map +0 -1
  509. package/dist/_chunks/segment-context-D9_89u34.js +0 -34
  510. package/dist/_chunks/segment-context-D9_89u34.js.map +0 -1
  511. package/dist/_chunks/sizeof-lXffQ1Vr.js.map +0 -1
  512. package/dist/_chunks/ssr-data-D6T6Y3ef.js +0 -60
  513. package/dist/_chunks/ssr-data-D6T6Y3ef.js.map +0 -1
  514. package/dist/_chunks/state-FippDgxN.js.map +0 -1
  515. package/dist/_chunks/status-page-marker-DwQBrLBz.js.map +0 -1
  516. package/dist/client/types.d.ts +0 -14
  517. package/dist/client/types.d.ts.map +0 -1
  518. package/dist/plugins/adapter-build.d.ts +0 -38
  519. package/dist/plugins/adapter-build.d.ts.map +0 -1
  520. package/dist/server/asset-headers.d.ts +0 -32
  521. package/dist/server/asset-headers.d.ts.map +0 -1
  522. package/dist/server/dev-source-map.d.ts +0 -22
  523. package/dist/server/dev-source-map.d.ts.map +0 -1
  524. package/src/client/types.ts +0 -21
  525. package/src/server/asset-headers.ts +0 -59
  526. package/src/server/dev-source-map.ts +0 -31
@@ -3,15 +3,21 @@
3
3
  // Primary deployment target. Generates a Workers-compatible entry point
4
4
  // and wrangler.jsonc configuration. See design/11-platform.md §"Cloudflare Workers".
5
5
 
6
- import { writeFile, readFile, cp, rm, readdir, access } from 'node:fs/promises';
6
+ import { writeFile, readFile, cp, rm, readdir, access, mkdtemp, rename } from 'node:fs/promises';
7
+ import { tmpdir } from 'node:os';
7
8
  import { execFile } from 'node:child_process';
8
- import { join, relative } from 'node:path';
9
+ import { join } from 'node:path';
9
10
  import { parse as parseJsonc } from 'jsonc-parser';
10
11
  import { AsyncLocalStorage } from 'node:async_hooks';
11
- import type { TimberPlatformAdapter, TimberConfig } from './types.ts';
12
+ import type {
13
+ BuildArtifacts,
14
+ PreviewTarget,
15
+ StaticBuildArtifacts,
16
+ TimberPlatformAdapter,
17
+ TimberConfig,
18
+ } from './types.ts';
12
19
  import {
13
20
  runSharedBuildSteps,
14
- findUnhashedStaticFiles,
15
21
  buildStaticDirectoryOutput,
16
22
  writeHeadersFile,
17
23
  } from './build-output-helper.ts';
@@ -245,14 +251,14 @@ export function cloudflare(options: CloudflareAdapterOptions = {}): TimberPlatfo
245
251
  return {
246
252
  name: 'cloudflare',
247
253
 
248
- async buildOutput(config: TimberConfig, buildDir: string) {
249
- const outDir = join(buildDir, 'cloudflare');
254
+ async buildOutput(config: TimberConfig, artifacts: BuildArtifacts) {
255
+ const outDir = join(artifacts.outputDir, 'cloudflare');
250
256
 
251
257
  // ── Static mode: Cloudflare Pages-compatible output ──────────────
252
258
  // No Workers entry — just HTML files + client assets in a flat
253
259
  // directory that Cloudflare Pages can serve directly.
254
- if (config.output === 'static' && config.staticPagesDir) {
255
- await buildStaticOutput(config, buildDir, outDir, options);
260
+ if (artifacts.output === 'static') {
261
+ await buildStaticOutput(config, artifacts, outDir, options);
256
262
  return;
257
263
  }
258
264
 
@@ -264,9 +270,11 @@ export function cloudflare(options: CloudflareAdapterOptions = {}): TimberPlatfo
264
270
 
265
271
  // Steps 1–5: shared across all adapters (mkdir, copy client/rsc/ssr,
266
272
  // write _headers, write manifest-init).
273
+ // Prebuilt payloads are inlined into the worker below rather than
274
+ // copied: Workers has no filesystem to read them from.
267
275
  await runSharedBuildSteps({
268
276
  config,
269
- buildDir,
277
+ artifacts: { ...artifacts, prebuilt: undefined },
270
278
  outDir,
271
279
  publicDirName: 'static',
272
280
  });
@@ -298,15 +306,15 @@ export function cloudflare(options: CloudflareAdapterOptions = {}): TimberPlatfo
298
306
  }
299
307
 
300
308
  // Inline prebuilt flight payloads into the worker JS module (TIM-1162).
301
- // Data is read from buildDir/prebuilt/ and embedded as literals —
302
- // no external Text/Data module imports needed.
303
- const prebuiltData = await readPrebuiltData(buildDir);
309
+ // Data is read from the build's prebuilt/ artifact and embedded as
310
+ // literals — no external Text/Data module imports needed.
311
+ const prebuiltData = artifacts.prebuilt
312
+ ? await readPrebuiltData(artifacts.prebuilt.path)
313
+ : null;
304
314
  await writeFile(
305
315
  join(outDir, '_timber-prebuilt-source.js'),
306
316
  generatePrebuiltSourceModule(prebuiltData)
307
317
  );
308
- // Remove the copied prebuilt/ dir — data is inlined, files aren't needed.
309
- await rm(join(outDir, 'prebuilt'), { recursive: true, force: true }).catch(() => {});
310
318
 
311
319
  // Write the runtime init module — sets process.env.TIMBER_RUNTIME
312
320
  // BEFORE the RSC entry evaluates (ESM import order). Without this,
@@ -315,8 +323,8 @@ export function cloudflare(options: CloudflareAdapterOptions = {}): TimberPlatfo
315
323
  await writeFile(join(outDir, '_timber-runtime-init.js'), generateRuntimeInitModule());
316
324
 
317
325
  // Generate the Workers entry point
318
- const hasManifestInit = !!config.manifestInit;
319
- const workerEntry = generateWorkerEntry(outDir, outDir, hasManifestInit, hasWorkerHandlers);
326
+ const hasManifestInit = !!artifacts.manifestInit;
327
+ const workerEntry = generateWorkerEntry(hasManifestInit, hasWorkerHandlers);
320
328
  await writeFile(join(outDir, '_worker.js'), workerEntry);
321
329
 
322
330
  // Generate wrangler.jsonc — merges user's wrangler config from disk if present
@@ -326,9 +334,23 @@ export function cloudflare(options: CloudflareAdapterOptions = {}): TimberPlatfo
326
334
  await writeFile(join(outDir, 'wrangler.jsonc'), JSON.stringify(wranglerConfig, null, 2));
327
335
  },
328
336
 
329
- async preview(_config: TimberConfig, buildDir: string) {
330
- const cmd = generatePreviewCommand(buildDir);
331
- await spawnPreviewProcess(cmd.command, cmd.args, cmd.cwd);
337
+ async preview(config: TimberConfig, target: PreviewTarget) {
338
+ const base = adapterBase(config);
339
+ if (target.output !== 'static' || base === '/') {
340
+ const cmd = generatePreviewCommand(target);
341
+ await spawnPreviewProcess(cmd.command, cmd.args, cmd.cwd);
342
+ return;
343
+ }
344
+ // A static build under a base: serve a staged copy with the site
345
+ // mounted at the base, as the deployment is reached.
346
+ const stage = await mkdtemp(join(tmpdir(), 'timber-pages-preview-'));
347
+ try {
348
+ await stagePagesPreview(join(target.outputDir, 'cloudflare'), base, stage);
349
+ const cmd = generatePreviewCommand(target, stage);
350
+ await spawnPreviewProcess(cmd.command, cmd.args, cmd.cwd);
351
+ } finally {
352
+ await rm(stage, { recursive: true, force: true });
353
+ }
332
354
  },
333
355
 
334
356
  // No adapter-level waitUntil: on Workers there is no ambient
@@ -342,20 +364,7 @@ export function cloudflare(options: CloudflareAdapterOptions = {}): TimberPlatfo
342
364
  // ─── Exported helpers (used by tests and build) ─────────────────────────────
343
365
 
344
366
  /** @internal Exported for testing. */
345
- export function generateWorkerEntry(
346
- buildDir: string,
347
- outDir: string,
348
- hasManifestInit = false,
349
- hasWorkerHandlers = false
350
- ): string {
351
- // The RSC entry is the main request handler — it exports the fetch handler as default.
352
- // The Vite RSC plugin outputs it to rsc/index.js.
353
- let rscEntryRelative = relative(outDir, join(buildDir, 'rsc', 'index.js'));
354
- // Ensure the import path starts with ./ for ESM compatibility
355
- if (!rscEntryRelative.startsWith('.')) {
356
- rscEntryRelative = './' + rscEntryRelative;
357
- }
358
-
367
+ export function generateWorkerEntry(hasManifestInit = false, hasWorkerHandlers = false): string {
359
368
  // Build manifest init must be imported before the RSC handler so that
360
369
  // globalThis.__TIMBER_BUILD_MANIFEST__ is set when the virtual module evaluates.
361
370
  // ESM guarantees imports are evaluated in order.
@@ -381,7 +390,7 @@ import { AsyncLocalStorage } from 'node:async_hooks'
381
390
  // for cache.component payloads.
382
391
  import './_timber-runtime-init.js'
383
392
  import './_timber-prebuilt-source.js'
384
- ${manifestImport}import handler, { runWithWaitUntil, runWithWorkersCachePurge, stripHeadBody } from '${rscEntryRelative}'
393
+ ${manifestImport}import handler, { runWithWaitUntil, runWithWorkersCachePurge, stripHeadBody } from './rsc/index.js'
385
394
  ${handlersImport}
386
395
 
387
396
  // Bind Cloudflare env to ALS so getCloudflareBindings() works at runtime.
@@ -560,35 +569,26 @@ export interface PrebuiltModuleData {
560
569
  }
561
570
 
562
571
  /**
563
- * Discover and read prebuilt flight payload files from the build directory.
564
- * Returns null when no prebuilt artifacts exist (no cache.component usage).
572
+ * Read the prebuilt flight payloads the capture pass wrote. Called only
573
+ * when the build produced a `prebuilt` artifact, which always carries its
574
+ * `manifest.json` — so a read failure here is a real error, not absence.
565
575
  *
566
576
  * @internal Exported for testing.
567
577
  */
568
- export async function readPrebuiltData(buildDir: string): Promise<PrebuiltModuleData | null> {
569
- const prebuiltDir = join(buildDir, 'prebuilt');
570
- let manifestJson: string;
571
- try {
572
- manifestJson = await readFile(join(prebuiltDir, 'manifest.json'), 'utf-8');
573
- } catch {
574
- return null;
575
- }
578
+ export async function readPrebuiltData(prebuiltDir: string): Promise<PrebuiltModuleData> {
579
+ const manifestJson = await readFile(join(prebuiltDir, 'manifest.json'), 'utf-8');
576
580
  const payloads: PrebuiltModuleData['payloads'] = [];
577
- try {
578
- const componentDirs = await readdir(prebuiltDir, { withFileTypes: true });
579
- for (const dir of componentDirs) {
580
- if (!dir.isDirectory()) continue;
581
- const files = await readdir(join(prebuiltDir, dir.name));
582
- for (const file of files) {
583
- if (file.endsWith('.flight')) {
584
- const filePath = `${dir.name}/${file}`;
585
- const bytes = await readFile(join(prebuiltDir, filePath));
586
- payloads.push({ file: filePath, bytes });
587
- }
581
+ const componentDirs = await readdir(prebuiltDir, { withFileTypes: true });
582
+ for (const dir of componentDirs) {
583
+ if (!dir.isDirectory()) continue;
584
+ const files = await readdir(join(prebuiltDir, dir.name));
585
+ for (const file of files) {
586
+ if (file.endsWith('.flight')) {
587
+ const filePath = `${dir.name}/${file}`;
588
+ const bytes = await readFile(join(prebuiltDir, filePath));
589
+ payloads.push({ file: filePath, bytes });
588
590
  }
589
591
  }
590
- } catch {
591
- // No subdirectories — manifest exists but no payloads
592
592
  }
593
593
  return { manifestJson, payloads };
594
594
  }
@@ -883,16 +883,16 @@ export function generateWranglerConfig(
883
883
  */
884
884
  export async function buildStaticOutput(
885
885
  config: TimberConfig,
886
- buildDir: string,
886
+ artifacts: StaticBuildArtifacts,
887
887
  outDir: string,
888
888
  _options: CloudflareAdapterOptions
889
889
  ): Promise<void> {
890
890
  // Cloudflare Pages serves from the outDir root directly (no subdirectory).
891
891
  // Use '.' as publicDirName so files land at outDir/ not outDir/static/.
892
- await buildStaticDirectoryOutput(config, buildDir, outDir, '.');
892
+ await buildStaticDirectoryOutput(config, artifacts, outDir, '.');
893
893
 
894
894
  // Write _headers file for cache control + content-type rules.
895
- await writeHeadersFile(outDir, config, await findUnhashedStaticFiles(outDir));
895
+ await writeHeadersFile(outDir, config, artifacts);
896
896
  }
897
897
 
898
898
  // ─── Preview ─────────────────────────────────────────────────────────────────
@@ -904,9 +904,22 @@ export interface PreviewCommand {
904
904
  cwd: string;
905
905
  }
906
906
 
907
- /** @internal Exported for testing. */
908
- export function generatePreviewCommand(buildDir: string): PreviewCommand {
909
- const cfDir = join(buildDir, 'cloudflare');
907
+ /**
908
+ * A server build runs its Worker under `wrangler dev` with the generated
909
+ * wrangler.jsonc. A static build writes no Worker and no wrangler.jsonc — its
910
+ * output is a Pages directory (`_headers`, `_redirects`, the site) — so it
911
+ * is served by `wrangler pages dev`, which applies those files as Pages does.
912
+ *
913
+ * @internal Exported for testing.
914
+ */
915
+ export function generatePreviewCommand(
916
+ { output, outputDir }: PreviewTarget,
917
+ pagesRoot = join(outputDir, 'cloudflare')
918
+ ): PreviewCommand {
919
+ if (output === 'static') {
920
+ return { command: 'wrangler', args: ['pages', 'dev', pagesRoot], cwd: pagesRoot };
921
+ }
922
+ const cfDir = join(outputDir, 'cloudflare');
910
923
  return {
911
924
  command: 'wrangler',
912
925
  args: ['dev', '--local', '--config', join(cfDir, 'wrangler.jsonc')],
@@ -914,6 +927,35 @@ export function generatePreviewCommand(buildDir: string): PreviewCommand {
914
927
  };
915
928
  }
916
929
 
930
+ /** Pages config files, read from the served root; their rules are in deployed-URL space. */
931
+ const PAGES_ROOT_FILES = ['_headers', '_redirects'];
932
+
933
+ /**
934
+ * Stage a static Cloudflare build for `wrangler pages dev` under a non-root
935
+ * base. The build writes the site at the directory root (a Pages project is
936
+ * served at its domain root, and the base path is supplied by whatever routes
937
+ * to it), but its HTML requests `/repo/...` and its `_headers`/`_redirects`
938
+ * rules are base-prefixed. Serving the directory as-is would 404 every page
939
+ * and asset, so the preview mounts the site at the base and keeps the rule
940
+ * files at the root, where Pages reads them and where their prefixed
941
+ * patterns match.
942
+ *
943
+ * @param base Normalized deployment base, not `/`.
944
+ * @internal Exported for testing.
945
+ */
946
+ export async function stagePagesPreview(
947
+ siteDir: string,
948
+ base: string,
949
+ stageDir: string
950
+ ): Promise<void> {
951
+ const mount = join(stageDir, ...base.split('/').filter(Boolean));
952
+ await cp(siteDir, mount, { recursive: true });
953
+ const rootFiles = new Set(await readdir(mount));
954
+ for (const name of PAGES_ROOT_FILES) {
955
+ if (rootFiles.has(name)) await rename(join(mount, name), join(stageDir, name));
956
+ }
957
+ }
958
+
917
959
  /**
918
960
  * Spawn a long-running preview process and pipe stdio to the parent.
919
961
  * Resolves when the process exits.
@@ -80,16 +80,27 @@ export function inlineCompressImports(code: string): string {
80
80
  for (const { pattern, replacement } of INLINED_IMPORTS) {
81
81
  out = out.replace(pattern, replacement);
82
82
  }
83
- const surviving = MODULE_SPECIFIERS.map((pattern) => pattern.exec(out)).find(Boolean);
83
+ assertStandalone(out, 'server/compress.ts', '_compress.mjs');
84
+ return out;
85
+ }
86
+
87
+ /**
88
+ * Throw if type-stripped server source still imports anything but a Node
89
+ * builtin. Such a module is emitted alone into the build output, where no
90
+ * specifier has anything to resolve to.
91
+ *
92
+ * @internal Shared by the standalone-module generators.
93
+ */
94
+ export function assertStandalone(code: string, source: string, emitted: string): void {
95
+ const surviving = MODULE_SPECIFIERS.map((pattern) => pattern.exec(code)).find(Boolean);
84
96
  if (surviving) {
85
97
  throw new Error(
86
- `[timber] server/compress.ts is emitted as a standalone _compress.mjs (type-stripped, ` +
98
+ `[timber] ${source} is emitted as a standalone ${emitted} (type-stripped, ` +
87
99
  `not bundled), so it cannot import anything at runtime. Found: ${surviving[0].trim()}\n` +
88
- ` Either inline the value in adapters/compress-module.ts (see INLINED_IMPORTS) or ` +
89
- `keep the dependency out of server/compress.ts.`
100
+ ` Either inline the value in the generator in adapters/ or ` +
101
+ `keep the dependency out of ${source}.`
90
102
  );
91
103
  }
92
- return out;
93
104
  }
94
105
 
95
106
  /**
@@ -21,9 +21,8 @@
21
21
  * macOS and a case-insensitive mount on Linux are both ordinary, and the
22
22
  * answer that matters is the one for the directory being written.
23
23
  *
24
- * Leaf module — Node built-ins only. Deliberately not in `adapters/shared.ts`,
25
- * which `server/asset-headers.ts` re-exports from and which therefore must
26
- * stay free of `node:fs` for the Workers bundle.
24
+ * Leaf module — Node built-ins only. Kept apart from `adapters/shared.ts`,
25
+ * whose rule builders are pure string functions: this one touches the disk.
27
26
  */
28
27
 
29
28
  import { writeFile, stat, rm } from 'node:fs/promises';
@@ -26,12 +26,6 @@ export interface PresetConfig {
26
26
  nitroPreset: string;
27
27
  /** Output directory name within the build dir. */
28
28
  outputDir: string;
29
- /**
30
- * Path to the server bundle directory relative to outputDir.
31
- * Nitro places the bundled server entry + _chunks/ here.
32
- * Most presets use `server`; Vercel uses `functions/__server.func`.
33
- */
34
- serverBundleDir: string;
35
29
  /** Whether the runtime supports waitUntil. */
36
30
  supportsWaitUntil: boolean;
37
31
  /** Whether the runtime supports application-level 103 Early Hints. */
@@ -46,7 +40,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
46
40
  'vercel': {
47
41
  nitroPreset: 'vercel',
48
42
  outputDir: '.vercel/output',
49
- serverBundleDir: 'functions/__server.func',
50
43
  supportsWaitUntil: true,
51
44
  supportsEarlyHints: false,
52
45
  runtimeName: 'vercel',
@@ -55,7 +48,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
55
48
  'vercel-edge': {
56
49
  nitroPreset: 'vercel-edge',
57
50
  outputDir: '.vercel/output',
58
- serverBundleDir: 'functions/__server.func',
59
51
  supportsWaitUntil: true,
60
52
  supportsEarlyHints: false,
61
53
  runtimeName: 'vercel-edge',
@@ -63,7 +55,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
63
55
  'netlify': {
64
56
  nitroPreset: 'netlify',
65
57
  outputDir: '.netlify/functions-internal',
66
- serverBundleDir: 'server',
67
58
  supportsWaitUntil: false,
68
59
  supportsEarlyHints: false,
69
60
  runtimeName: 'netlify',
@@ -71,7 +62,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
71
62
  'netlify-edge': {
72
63
  nitroPreset: 'netlify-edge',
73
64
  outputDir: '.netlify/edge-functions',
74
- serverBundleDir: 'server',
75
65
  supportsWaitUntil: true,
76
66
  supportsEarlyHints: false,
77
67
  runtimeName: 'netlify-edge',
@@ -79,7 +69,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
79
69
  'aws-lambda': {
80
70
  nitroPreset: 'aws-lambda',
81
71
  outputDir: '.output',
82
- serverBundleDir: 'server',
83
72
  supportsWaitUntil: false,
84
73
  supportsEarlyHints: false,
85
74
  runtimeName: 'aws-lambda',
@@ -87,7 +76,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
87
76
  'deno-deploy': {
88
77
  nitroPreset: 'deno-deploy',
89
78
  outputDir: '.output',
90
- serverBundleDir: 'server',
91
79
  supportsWaitUntil: true,
92
80
  supportsEarlyHints: false,
93
81
  runtimeName: 'deno-deploy',
@@ -95,7 +83,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
95
83
  'azure-functions': {
96
84
  nitroPreset: 'azure-functions',
97
85
  outputDir: '.output',
98
- serverBundleDir: 'server',
99
86
  supportsWaitUntil: false,
100
87
  supportsEarlyHints: false,
101
88
  runtimeName: 'azure-functions',
@@ -103,7 +90,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
103
90
  'node-server': {
104
91
  nitroPreset: 'node-server',
105
92
  outputDir: '.output',
106
- serverBundleDir: 'server',
107
93
  supportsWaitUntil: true,
108
94
  // Disabled by default: most node-server deployments sit behind a
109
95
  // reverse proxy (nginx, caddy, traefik) that doesn't support 103
@@ -118,7 +104,6 @@ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
118
104
  'bun': {
119
105
  nitroPreset: 'bun',
120
106
  outputDir: '.output',
121
- serverBundleDir: 'server',
122
107
  supportsWaitUntil: true,
123
108
  // Disabled for same reason as node-server — reverse proxies choke on 103.
124
109
  // Link headers on the 200 response are converted to 103 by CDNs.