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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1393) hide show
  1. package/LICENSE +8 -0
  2. package/agent-skill.md +346 -0
  3. package/bin/timber.mjs +15 -1
  4. package/dist/_chunks/actions-Rjk4htmA.js +1199 -0
  5. package/dist/_chunks/actions-Rjk4htmA.js.map +1 -0
  6. package/dist/_chunks/als-registry-DaxkVjt5.js +45 -0
  7. package/dist/_chunks/als-registry-DaxkVjt5.js.map +1 -0
  8. package/dist/_chunks/als-slots-BEEIPKYm.js +26 -0
  9. package/dist/_chunks/als-slots-BEEIPKYm.js.map +1 -0
  10. package/dist/_chunks/base-path-DaQrzbez.js +80 -0
  11. package/dist/_chunks/base-path-DaQrzbez.js.map +1 -0
  12. package/dist/_chunks/build-manifest-DWppEdLB.js +86 -0
  13. package/dist/_chunks/build-manifest-DWppEdLB.js.map +1 -0
  14. package/dist/_chunks/build-output-helper-RV_BRcF1.js +367 -0
  15. package/dist/_chunks/build-output-helper-RV_BRcF1.js.map +1 -0
  16. package/dist/_chunks/cache-api-DGdYfNJn.js +1182 -0
  17. package/dist/_chunks/cache-api-DGdYfNJn.js.map +1 -0
  18. package/dist/_chunks/canonicalize-CgHoscYO.js +66 -0
  19. package/dist/_chunks/canonicalize-CgHoscYO.js.map +1 -0
  20. package/dist/_chunks/chains-DGX9zmg9.js +272 -0
  21. package/dist/_chunks/chains-DGX9zmg9.js.map +1 -0
  22. package/dist/_chunks/classify-QwG5rxKI.js +147 -0
  23. package/dist/_chunks/classify-QwG5rxKI.js.map +1 -0
  24. package/dist/_chunks/cli-check-ajNY3B2e.js +252 -0
  25. package/dist/_chunks/cli-check-ajNY3B2e.js.map +1 -0
  26. package/dist/_chunks/cli-context-By7k2xVo.js +70 -0
  27. package/dist/_chunks/cli-context-By7k2xVo.js.map +1 -0
  28. package/dist/_chunks/cli-schema-sync-D2eI8jEg.js +299 -0
  29. package/dist/_chunks/cli-schema-sync-D2eI8jEg.js.map +1 -0
  30. package/dist/_chunks/client-dep-entries-2HCF09no.js +66 -0
  31. package/dist/_chunks/client-dep-entries-2HCF09no.js.map +1 -0
  32. package/dist/_chunks/cloudflare-Byxl8FWP.js +1333 -0
  33. package/dist/_chunks/cloudflare-Byxl8FWP.js.map +1 -0
  34. package/dist/_chunks/codec-registry-oOUxugz3.js +21 -0
  35. package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -0
  36. package/dist/_chunks/codegen-Bps1sLKJ.js +432 -0
  37. package/dist/_chunks/codegen-Bps1sLKJ.js.map +1 -0
  38. package/dist/_chunks/convention-lint-DLmhGsRS.js +590 -0
  39. package/dist/_chunks/convention-lint-DLmhGsRS.js.map +1 -0
  40. package/dist/_chunks/dev-server-TFpEwm3H.js +2039 -0
  41. package/dist/_chunks/dev-server-TFpEwm3H.js.map +1 -0
  42. package/dist/_chunks/dist-DtrJyBbw.js +386 -0
  43. package/dist/_chunks/dist-DtrJyBbw.js.map +1 -0
  44. package/dist/_chunks/error-boundary-DsNScGRM.js +1024 -0
  45. package/dist/_chunks/error-boundary-DsNScGRM.js.map +1 -0
  46. package/dist/_chunks/fast-hash-C-tVYrLb.js +41 -0
  47. package/dist/_chunks/fast-hash-C-tVYrLb.js.map +1 -0
  48. package/dist/_chunks/format-BKclgVbk.js +14 -0
  49. package/dist/_chunks/format-BKclgVbk.js.map +1 -0
  50. package/dist/_chunks/fs-identity-BRKuL215.js +207 -0
  51. package/dist/_chunks/fs-identity-BRKuL215.js.map +1 -0
  52. package/dist/_chunks/graph-cache-CYiUS2aS.js +303 -0
  53. package/dist/_chunks/graph-cache-CYiUS2aS.js.map +1 -0
  54. package/dist/_chunks/href-validation-BIrxavIy.js +213 -0
  55. package/dist/_chunks/href-validation-BIrxavIy.js.map +1 -0
  56. package/dist/_chunks/json-lossy-check-CVuRs2hG.js +66 -0
  57. package/dist/_chunks/json-lossy-check-CVuRs2hG.js.map +1 -0
  58. package/dist/_chunks/live-graph-cNuWMYQI.js +151 -0
  59. package/dist/_chunks/live-graph-cNuWMYQI.js.map +1 -0
  60. package/dist/_chunks/logger-BP0LN6vP.js +662 -0
  61. package/dist/_chunks/logger-BP0LN6vP.js.map +1 -0
  62. package/dist/_chunks/{metadata-routes-Cjmvi3rQ.js → metadata-routes-DSDjM_hJ.js} +71 -27
  63. package/dist/_chunks/metadata-routes-DSDjM_hJ.js.map +1 -0
  64. package/dist/_chunks/navigation-root-BQfo1-kG.js +126 -0
  65. package/dist/_chunks/navigation-root-BQfo1-kG.js.map +1 -0
  66. package/dist/_chunks/param-value-C8TNYchQ.js +66 -0
  67. package/dist/_chunks/param-value-C8TNYchQ.js.map +1 -0
  68. package/dist/_chunks/plugin-context-BPBPc3lL.js +345 -0
  69. package/dist/_chunks/plugin-context-BPBPc3lL.js.map +1 -0
  70. package/dist/_chunks/poison-rules-DoEhbqaY.js +110 -0
  71. package/dist/_chunks/poison-rules-DoEhbqaY.js.map +1 -0
  72. package/dist/_chunks/poison-scan-CfQ3unZR.js +99 -0
  73. package/dist/_chunks/poison-scan-CfQ3unZR.js.map +1 -0
  74. package/dist/_chunks/purge-store-Byr8XOjU.js +14 -0
  75. package/dist/_chunks/purge-store-Byr8XOjU.js.map +1 -0
  76. package/dist/_chunks/render-timeout-DOf_BBcO.js +46 -0
  77. package/dist/_chunks/render-timeout-DOf_BBcO.js.map +1 -0
  78. package/dist/_chunks/resolve-schema-CBR6Lm4i.js +50 -0
  79. package/dist/_chunks/resolve-schema-CBR6Lm4i.js.map +1 -0
  80. package/dist/_chunks/rolldown-runtime-D7D4PA-g.js +13 -0
  81. package/dist/_chunks/rsc-cache-key-ClUiXQnK.js +243 -0
  82. package/dist/_chunks/rsc-cache-key-ClUiXQnK.js.map +1 -0
  83. package/dist/_chunks/rsc-media-type-DDc7duTD.js +61 -0
  84. package/dist/_chunks/rsc-media-type-DDc7duTD.js.map +1 -0
  85. package/dist/_chunks/rsc-payload-path-dffcs4jp.js +54 -0
  86. package/dist/_chunks/rsc-payload-path-dffcs4jp.js.map +1 -0
  87. package/dist/_chunks/scan-BoP17W3w.js +140 -0
  88. package/dist/_chunks/scan-BoP17W3w.js.map +1 -0
  89. package/dist/_chunks/scanner-DmqdxzbW.js +2056 -0
  90. package/dist/_chunks/scanner-DmqdxzbW.js.map +1 -0
  91. package/dist/_chunks/schema-bridge-C83xa9lT.js +199 -0
  92. package/dist/_chunks/schema-bridge-C83xa9lT.js.map +1 -0
  93. package/dist/_chunks/segment-classify-C539Pa2O.js +197 -0
  94. package/dist/_chunks/segment-classify-C539Pa2O.js.map +1 -0
  95. package/dist/_chunks/segment-context-xtPUGfdq.js +137 -0
  96. package/dist/_chunks/segment-context-xtPUGfdq.js.map +1 -0
  97. package/dist/_chunks/segment-keys-D5hu1hz4.js +62 -0
  98. package/dist/_chunks/segment-keys-D5hu1hz4.js.map +1 -0
  99. package/dist/_chunks/singleflight-BeVMMKi0.js +55 -0
  100. package/dist/_chunks/singleflight-BeVMMKi0.js.map +1 -0
  101. package/dist/_chunks/sizeof-BM1409x2.js +36 -0
  102. package/dist/_chunks/sizeof-BM1409x2.js.map +1 -0
  103. package/dist/_chunks/ssr-data-nA3I70_n.js +49 -0
  104. package/dist/_chunks/ssr-data-nA3I70_n.js.map +1 -0
  105. package/dist/_chunks/state-BhNGPsdi.js +50 -0
  106. package/dist/_chunks/state-BhNGPsdi.js.map +1 -0
  107. package/dist/_chunks/status-page-marker-BRX9Ib-d.js +564 -0
  108. package/dist/_chunks/status-page-marker-BRX9Ib-d.js.map +1 -0
  109. package/dist/_chunks/tree-match-6yihorhk.js +169 -0
  110. package/dist/_chunks/tree-match-6yihorhk.js.map +1 -0
  111. package/dist/_chunks/use-query-states-I3JMng6J.js +226 -0
  112. package/dist/_chunks/use-query-states-I3JMng6J.js.map +1 -0
  113. package/dist/_chunks/walkers-Czu2jXFq.js +144 -0
  114. package/dist/_chunks/walkers-Czu2jXFq.js.map +1 -0
  115. package/dist/_chunks/write-file-atomic-D1qWqHb4.js +32 -0
  116. package/dist/_chunks/write-file-atomic-D1qWqHb4.js.map +1 -0
  117. package/dist/adapters/build-output-helper.d.ts +72 -0
  118. package/dist/adapters/build-output-helper.d.ts.map +1 -0
  119. package/dist/adapters/canonicalize-module.d.ts +8 -0
  120. package/dist/adapters/canonicalize-module.d.ts.map +1 -0
  121. package/dist/adapters/cloudflare-dev.d.ts +109 -0
  122. package/dist/adapters/cloudflare-dev.d.ts.map +1 -0
  123. package/dist/adapters/cloudflare-dev.js +74 -0
  124. package/dist/adapters/cloudflare-dev.js.map +1 -0
  125. package/dist/adapters/cloudflare-kv-cache.d.ts +65 -0
  126. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -0
  127. package/dist/adapters/cloudflare-kv-cache.js +123 -0
  128. package/dist/adapters/cloudflare-kv-cache.js.map +1 -0
  129. package/dist/adapters/cloudflare.d.ts +224 -24
  130. package/dist/adapters/cloudflare.d.ts.map +1 -1
  131. package/dist/adapters/cloudflare.js +2 -188
  132. package/dist/adapters/compress-module.d.ts +25 -4
  133. package/dist/adapters/compress-module.d.ts.map +1 -1
  134. package/dist/adapters/fs-identity.d.ts +63 -0
  135. package/dist/adapters/fs-identity.d.ts.map +1 -0
  136. package/dist/adapters/nitro-presets.d.ts +31 -0
  137. package/dist/adapters/nitro-presets.d.ts.map +1 -0
  138. package/dist/adapters/nitro-preview.d.ts +64 -0
  139. package/dist/adapters/nitro-preview.d.ts.map +1 -0
  140. package/dist/adapters/nitro.d.ts +54 -37
  141. package/dist/adapters/nitro.d.ts.map +1 -1
  142. package/dist/adapters/nitro.js +631 -359
  143. package/dist/adapters/nitro.js.map +1 -1
  144. package/dist/adapters/shared.d.ts +67 -0
  145. package/dist/adapters/shared.d.ts.map +1 -0
  146. package/dist/adapters/types.d.ts +122 -16
  147. package/dist/adapters/types.d.ts.map +1 -1
  148. package/dist/adapters/types.js +0 -0
  149. package/dist/analyze/chains.d.ts +124 -0
  150. package/dist/analyze/chains.d.ts.map +1 -0
  151. package/dist/analyze/classify.d.ts +153 -0
  152. package/dist/analyze/classify.d.ts.map +1 -0
  153. package/dist/analyze/crawl-entry.d.ts +17 -0
  154. package/dist/analyze/crawl-entry.d.ts.map +1 -0
  155. package/dist/analyze/crawl-entry.js +314 -0
  156. package/dist/analyze/crawl-entry.js.map +1 -0
  157. package/dist/analyze/crawl.d.ts +134 -0
  158. package/dist/analyze/crawl.d.ts.map +1 -0
  159. package/dist/analyze/graph-cache.d.ts +104 -0
  160. package/dist/analyze/graph-cache.d.ts.map +1 -0
  161. package/dist/analyze/graph-command.d.ts +43 -0
  162. package/dist/analyze/graph-command.d.ts.map +1 -0
  163. package/dist/analyze/graph-command.js +472 -0
  164. package/dist/analyze/graph-command.js.map +1 -0
  165. package/dist/analyze/live-graph.d.ts +81 -0
  166. package/dist/analyze/live-graph.d.ts.map +1 -0
  167. package/dist/analyze/poison-rules.d.ts +72 -0
  168. package/dist/analyze/poison-rules.d.ts.map +1 -0
  169. package/dist/analyze/poison-scan.d.ts +48 -0
  170. package/dist/analyze/poison-scan.d.ts.map +1 -0
  171. package/dist/analyze/scan.d.ts +73 -0
  172. package/dist/analyze/scan.d.ts.map +1 -0
  173. package/dist/cache/cache-api.d.ts +48 -0
  174. package/dist/cache/cache-api.d.ts.map +1 -0
  175. package/dist/cache/fast-hash.d.ts +5 -0
  176. package/dist/cache/fast-hash.d.ts.map +1 -1
  177. package/dist/cache/handler-store.d.ts +33 -0
  178. package/dist/cache/handler-store.d.ts.map +1 -0
  179. package/dist/cache/index.d.ts +32 -9
  180. package/dist/cache/index.d.ts.map +1 -1
  181. package/dist/cache/index.js +3 -326
  182. package/dist/cache/invalidation-epoch.d.ts +43 -0
  183. package/dist/cache/invalidation-epoch.d.ts.map +1 -0
  184. package/dist/cache/json-lossy-check.d.ts +11 -0
  185. package/dist/cache/json-lossy-check.d.ts.map +1 -0
  186. package/dist/cache/redis-handler.d.ts +141 -9
  187. package/dist/cache/redis-handler.d.ts.map +1 -1
  188. package/dist/cache/singleflight.d.ts +21 -2
  189. package/dist/cache/singleflight.d.ts.map +1 -1
  190. package/dist/cache/sizeof.d.ts +22 -0
  191. package/dist/cache/sizeof.d.ts.map +1 -0
  192. package/dist/cache/stable-stringify.d.ts +9 -0
  193. package/dist/cache/stable-stringify.d.ts.map +1 -1
  194. package/dist/cache/store.d.ts +53 -0
  195. package/dist/cache/store.d.ts.map +1 -0
  196. package/dist/cache/stores/cloudflare-kv.d.ts +38 -0
  197. package/dist/cache/stores/cloudflare-kv.d.ts.map +1 -0
  198. package/dist/cache/stores/cloudflare-kv.js +29 -0
  199. package/dist/cache/stores/cloudflare-kv.js.map +1 -0
  200. package/dist/cache/stores/memory.d.ts +42 -0
  201. package/dist/cache/stores/memory.d.ts.map +1 -0
  202. package/dist/cache/stores/memory.js +90 -0
  203. package/dist/cache/stores/memory.js.map +1 -0
  204. package/dist/cache/stores/redis.d.ts +69 -0
  205. package/dist/cache/stores/redis.d.ts.map +1 -0
  206. package/dist/cache/stores/redis.js +35 -0
  207. package/dist/cache/stores/redis.js.map +1 -0
  208. package/dist/cache/stores/vercel.d.ts +36 -0
  209. package/dist/cache/stores/vercel.d.ts.map +1 -0
  210. package/dist/cache/stores/vercel.js +33 -0
  211. package/dist/cache/stores/vercel.js.map +1 -0
  212. package/dist/cache/tag-aware-handler.d.ts +52 -0
  213. package/dist/cache/tag-aware-handler.d.ts.map +1 -0
  214. package/dist/cache/timber-cache.d.ts +21 -11
  215. package/dist/cache/timber-cache.d.ts.map +1 -1
  216. package/dist/cdn/cloudflare-purge.d.ts +23 -0
  217. package/dist/cdn/cloudflare-purge.d.ts.map +1 -0
  218. package/dist/cdn/cloudflare-purge.js +30 -0
  219. package/dist/cdn/cloudflare-purge.js.map +1 -0
  220. package/dist/cdn/fastly-purge.d.ts +25 -0
  221. package/dist/cdn/fastly-purge.d.ts.map +1 -0
  222. package/dist/cdn/fastly-purge.js +33 -0
  223. package/dist/cdn/fastly-purge.js.map +1 -0
  224. package/dist/cdn/headers.d.ts +97 -0
  225. package/dist/cdn/headers.d.ts.map +1 -0
  226. package/dist/cdn/index.d.ts +5 -0
  227. package/dist/cdn/index.d.ts.map +1 -0
  228. package/dist/cdn/index.js +94 -0
  229. package/dist/cdn/index.js.map +1 -0
  230. package/dist/cdn/purge-store.d.ts +23 -0
  231. package/dist/cdn/purge-store.d.ts.map +1 -0
  232. package/dist/cdn/workers-cache-purge.d.ts +20 -0
  233. package/dist/cdn/workers-cache-purge.d.ts.map +1 -0
  234. package/dist/cdn/workers-cache-purge.js +35 -0
  235. package/dist/cdn/workers-cache-purge.js.map +1 -0
  236. package/dist/cli-check.d.ts +133 -0
  237. package/dist/cli-check.d.ts.map +1 -0
  238. package/dist/cli-context.d.ts +54 -0
  239. package/dist/cli-context.d.ts.map +1 -0
  240. package/dist/cli-schema-sync.d.ts +59 -0
  241. package/dist/cli-schema-sync.d.ts.map +1 -0
  242. package/dist/cli.d.ts +85 -13
  243. package/dist/cli.d.ts.map +1 -1
  244. package/dist/cli.js +224 -63
  245. package/dist/cli.js.map +1 -1
  246. package/dist/client/browser-dev.d.ts +42 -2
  247. package/dist/client/browser-dev.d.ts.map +1 -1
  248. package/dist/client/browser-entry/action-dispatch.d.ts +19 -0
  249. package/dist/client/browser-entry/action-dispatch.d.ts.map +1 -0
  250. package/dist/client/browser-entry/action-queue.d.ts +63 -0
  251. package/dist/client/browser-entry/action-queue.d.ts.map +1 -0
  252. package/dist/client/browser-entry/hmr.d.ts +21 -0
  253. package/dist/client/browser-entry/hmr.d.ts.map +1 -0
  254. package/dist/client/browser-entry/hydrate.d.ts +53 -0
  255. package/dist/client/browser-entry/hydrate.d.ts.map +1 -0
  256. package/dist/client/browser-entry/index.d.ts +30 -0
  257. package/dist/client/browser-entry/index.d.ts.map +1 -0
  258. package/dist/client/browser-entry/post-hydration.d.ts +26 -0
  259. package/dist/client/browser-entry/post-hydration.d.ts.map +1 -0
  260. package/dist/client/browser-entry/router-init.d.ts +41 -0
  261. package/dist/client/browser-entry/router-init.d.ts.map +1 -0
  262. package/dist/client/browser-entry/rsc-stream.d.ts +32 -0
  263. package/dist/client/browser-entry/rsc-stream.d.ts.map +1 -0
  264. package/dist/client/browser-entry/scroll.d.ts +28 -0
  265. package/dist/client/browser-entry/scroll.d.ts.map +1 -0
  266. package/dist/client/deny-last-resort.d.ts +29 -0
  267. package/dist/client/deny-last-resort.d.ts.map +1 -0
  268. package/dist/client/error-boundary.d.ts +58 -9
  269. package/dist/client/error-boundary.d.ts.map +1 -1
  270. package/dist/client/error-boundary.js +2 -126
  271. package/dist/client/error-reconstituter.d.ts +55 -0
  272. package/dist/client/error-reconstituter.d.ts.map +1 -0
  273. package/dist/client/form.d.ts +16 -27
  274. package/dist/client/form.d.ts.map +1 -1
  275. package/dist/client/global-context.d.ts +15 -0
  276. package/dist/client/global-context.d.ts.map +1 -0
  277. package/dist/client/history.d.ts +50 -9
  278. package/dist/client/history.d.ts.map +1 -1
  279. package/dist/client/index.d.ts +20 -33
  280. package/dist/client/index.d.ts.map +1 -1
  281. package/dist/client/index.js +330 -1150
  282. package/dist/client/index.js.map +1 -1
  283. package/dist/client/internal.d.ts +20 -0
  284. package/dist/client/internal.d.ts.map +1 -0
  285. package/dist/client/internal.js +792 -0
  286. package/dist/client/internal.js.map +1 -0
  287. package/dist/client/link.d.ts +85 -60
  288. package/dist/client/link.d.ts.map +1 -1
  289. package/dist/client/location-search.d.ts +12 -0
  290. package/dist/client/location-search.d.ts.map +1 -0
  291. package/dist/client/navigation-api.d.ts +133 -0
  292. package/dist/client/navigation-api.d.ts.map +1 -0
  293. package/dist/client/navigation-commit.d.ts +111 -0
  294. package/dist/client/navigation-commit.d.ts.map +1 -0
  295. package/dist/client/navigation-context.d.ts +54 -36
  296. package/dist/client/navigation-context.d.ts.map +1 -1
  297. package/dist/client/navigation-root.d.ts +106 -0
  298. package/dist/client/navigation-root.d.ts.map +1 -0
  299. package/dist/client/navigation-transition.d.ts +192 -0
  300. package/dist/client/navigation-transition.d.ts.map +1 -0
  301. package/dist/client/nuqs-adapter.d.ts +1 -1
  302. package/dist/client/nuqs-adapter.d.ts.map +1 -1
  303. package/dist/client/params-context.d.ts +81 -0
  304. package/dist/client/params-context.d.ts.map +1 -0
  305. package/dist/client/react-root.d.ts +45 -0
  306. package/dist/client/react-root.d.ts.map +1 -0
  307. package/dist/client/router-effects.d.ts +137 -0
  308. package/dist/client/router-effects.d.ts.map +1 -0
  309. package/dist/client/router-lifecycle.d.ts +98 -0
  310. package/dist/client/router-lifecycle.d.ts.map +1 -0
  311. package/dist/client/router-pipeline.d.ts +84 -0
  312. package/dist/client/router-pipeline.d.ts.map +1 -0
  313. package/dist/client/router-ref.d.ts +2 -2
  314. package/dist/client/router-ref.d.ts.map +1 -1
  315. package/dist/client/router-skew.d.ts +21 -0
  316. package/dist/client/router-skew.d.ts.map +1 -0
  317. package/dist/client/router-types.d.ts +334 -0
  318. package/dist/client/router-types.d.ts.map +1 -0
  319. package/dist/client/router-url.d.ts +24 -0
  320. package/dist/client/router-url.d.ts.map +1 -0
  321. package/dist/client/router.d.ts +1 -97
  322. package/dist/client/router.d.ts.map +1 -1
  323. package/dist/client/rsc-fetch.d.ts +110 -28
  324. package/dist/client/rsc-fetch.d.ts.map +1 -1
  325. package/dist/client/segment-cache.d.ts +186 -25
  326. package/dist/client/segment-cache.d.ts.map +1 -1
  327. package/dist/client/segment-context.d.ts.map +1 -1
  328. package/dist/client/segment-outlet.d.ts +68 -0
  329. package/dist/client/segment-outlet.d.ts.map +1 -0
  330. package/dist/client/segment-update-context.d.ts +15 -0
  331. package/dist/client/segment-update-context.d.ts.map +1 -0
  332. package/dist/client/shallow-url.d.ts +10 -0
  333. package/dist/client/shallow-url.d.ts.map +1 -0
  334. package/dist/client/slot-content-cache-context.d.ts +35 -0
  335. package/dist/client/slot-content-cache-context.d.ts.map +1 -0
  336. package/dist/client/slot-context.d.ts +31 -0
  337. package/dist/client/slot-context.d.ts.map +1 -0
  338. package/dist/client/slot-outlet.d.ts +16 -0
  339. package/dist/client/slot-outlet.d.ts.map +1 -0
  340. package/dist/client/slot-provider.d.ts +25 -0
  341. package/dist/client/slot-provider.d.ts.map +1 -0
  342. package/dist/client/ssr-data.d.ts +26 -50
  343. package/dist/client/ssr-data.d.ts.map +1 -1
  344. package/dist/client/stale-client.d.ts +69 -0
  345. package/dist/client/stale-client.d.ts.map +1 -0
  346. package/dist/client/state.d.ts +21 -13
  347. package/dist/client/state.d.ts.map +1 -1
  348. package/dist/client/status-page-marker.d.ts +25 -0
  349. package/dist/client/status-page-marker.d.ts.map +1 -0
  350. package/dist/client/top-loader.d.ts +7 -6
  351. package/dist/client/top-loader.d.ts.map +1 -1
  352. package/dist/client/unload-guard.d.ts +5 -0
  353. package/dist/client/unload-guard.d.ts.map +1 -1
  354. package/dist/client/use-cookie.d.ts +12 -0
  355. package/dist/client/use-cookie.d.ts.map +1 -1
  356. package/dist/client/use-link-status.d.ts +5 -5
  357. package/dist/client/use-link-status.d.ts.map +1 -1
  358. package/dist/client/use-pathname.d.ts +13 -11
  359. package/dist/client/use-pathname.d.ts.map +1 -1
  360. package/dist/client/use-pending-navigation.d.ts +23 -0
  361. package/dist/client/use-pending-navigation.d.ts.map +1 -0
  362. package/dist/client/use-query-states.d.ts +10 -4
  363. package/dist/client/use-query-states.d.ts.map +1 -1
  364. package/dist/client/use-router.d.ts +15 -8
  365. package/dist/client/use-router.d.ts.map +1 -1
  366. package/dist/client/use-search-params.d.ts +15 -8
  367. package/dist/client/use-search-params.d.ts.map +1 -1
  368. package/dist/client/use-segment-params.d.ts +55 -0
  369. package/dist/client/use-segment-params.d.ts.map +1 -0
  370. package/dist/codec.d.ts +69 -0
  371. package/dist/codec.d.ts.map +1 -0
  372. package/dist/codec.js +76 -0
  373. package/dist/codec.js.map +1 -0
  374. package/dist/config-types.d.ts +323 -0
  375. package/dist/config-types.d.ts.map +1 -0
  376. package/dist/config-validation.d.ts +68 -0
  377. package/dist/config-validation.d.ts.map +1 -0
  378. package/dist/cookies/define-cookie.d.ts +58 -25
  379. package/dist/cookies/define-cookie.d.ts.map +1 -1
  380. package/dist/cookies/index.d.ts +3 -2
  381. package/dist/cookies/index.d.ts.map +1 -1
  382. package/dist/cookies/index.js +256 -36
  383. package/dist/cookies/index.js.map +1 -1
  384. package/dist/cookies/json-cookie.d.ts +64 -0
  385. package/dist/cookies/json-cookie.d.ts.map +1 -0
  386. package/dist/cookies/validation.d.ts +34 -0
  387. package/dist/cookies/validation.d.ts.map +1 -0
  388. package/dist/dev-tools/404-page.d.ts +50 -0
  389. package/dist/dev-tools/404-page.d.ts.map +1 -0
  390. package/dist/dev-tools/browser-logs.d.ts +40 -0
  391. package/dist/dev-tools/browser-logs.d.ts.map +1 -0
  392. package/dist/dev-tools/dev-page-shell.d.ts +95 -0
  393. package/dist/dev-tools/dev-page-shell.d.ts.map +1 -0
  394. package/dist/dev-tools/error-page.d.ts +32 -0
  395. package/dist/dev-tools/error-page.d.ts.map +1 -0
  396. package/dist/dev-tools/holding-server.d.ts +46 -0
  397. package/dist/dev-tools/holding-server.d.ts.map +1 -0
  398. package/dist/dev-tools/hydration-overlay.d.ts +11 -0
  399. package/dist/dev-tools/hydration-overlay.d.ts.map +1 -0
  400. package/dist/dev-tools/index.d.ts +31 -0
  401. package/dist/dev-tools/index.d.ts.map +1 -0
  402. package/dist/dev-tools/instrumentation.d.ts +74 -0
  403. package/dist/dev-tools/instrumentation.d.ts.map +1 -0
  404. package/dist/{server/dev-logger.d.ts → dev-tools/logger.d.ts} +1 -1
  405. package/dist/dev-tools/logger.d.ts.map +1 -0
  406. package/dist/{plugins/dev-logs.d.ts → dev-tools/logs.d.ts} +17 -3
  407. package/dist/dev-tools/logs.d.ts.map +1 -0
  408. package/dist/{plugins/dev-error-overlay.d.ts → dev-tools/overlay.d.ts} +15 -25
  409. package/dist/dev-tools/overlay.d.ts.map +1 -0
  410. package/dist/dev-tools/stack-classifier.d.ts +34 -0
  411. package/dist/dev-tools/stack-classifier.d.ts.map +1 -0
  412. package/dist/dev-tools/terminal.d.ts +28 -0
  413. package/dist/dev-tools/terminal.d.ts.map +1 -0
  414. package/dist/fonts/ast-walk.d.ts +68 -0
  415. package/dist/fonts/ast-walk.d.ts.map +1 -0
  416. package/dist/fonts/ast.d.ts +112 -8
  417. package/dist/fonts/ast.d.ts.map +1 -1
  418. package/dist/fonts/bundle.d.ts +50 -0
  419. package/dist/fonts/bundle.d.ts.map +1 -0
  420. package/dist/fonts/css.d.ts +1 -1
  421. package/dist/fonts/dev-middleware.d.ts +22 -0
  422. package/dist/fonts/dev-middleware.d.ts.map +1 -0
  423. package/dist/fonts/fallbacks.d.ts +0 -7
  424. package/dist/fonts/fallbacks.d.ts.map +1 -1
  425. package/dist/fonts/google.d.ts +5 -3
  426. package/dist/fonts/google.d.ts.map +1 -1
  427. package/dist/fonts/local.d.ts +5 -5
  428. package/dist/fonts/local.d.ts.map +1 -1
  429. package/dist/fonts/paths.d.ts +43 -0
  430. package/dist/fonts/paths.d.ts.map +1 -0
  431. package/dist/fonts/pipeline.d.ts +177 -0
  432. package/dist/fonts/pipeline.d.ts.map +1 -0
  433. package/dist/fonts/transform.d.ts +82 -0
  434. package/dist/fonts/transform.d.ts.map +1 -0
  435. package/dist/fonts/types.d.ts +47 -1
  436. package/dist/fonts/types.d.ts.map +1 -1
  437. package/dist/fonts/virtual-modules.d.ts +77 -0
  438. package/dist/fonts/virtual-modules.d.ts.map +1 -0
  439. package/dist/index.d.ts +35 -181
  440. package/dist/index.d.ts.map +1 -1
  441. package/dist/index.js +8871 -14233
  442. package/dist/index.js.map +1 -1
  443. package/dist/params/codec-registry.d.ts +26 -0
  444. package/dist/params/codec-registry.d.ts.map +1 -0
  445. package/dist/params/define-schema.d.ts +81 -0
  446. package/dist/params/define-schema.d.ts.map +1 -0
  447. package/dist/params/index.d.ts +5 -0
  448. package/dist/params/index.d.ts.map +1 -0
  449. package/dist/params/index.js +34 -0
  450. package/dist/params/index.js.map +1 -0
  451. package/dist/params/resolve-schema.d.ts +34 -0
  452. package/dist/params/resolve-schema.d.ts.map +1 -0
  453. package/dist/plugin-context.d.ts +262 -0
  454. package/dist/plugin-context.d.ts.map +1 -0
  455. package/dist/plugins/build-manifest.d.ts +7 -3
  456. package/dist/plugins/build-manifest.d.ts.map +1 -1
  457. package/dist/plugins/build-report.d.ts +61 -11
  458. package/dist/plugins/build-report.d.ts.map +1 -1
  459. package/dist/plugins/cache.d.ts +64 -0
  460. package/dist/plugins/cache.d.ts.map +1 -0
  461. package/dist/plugins/callsite-ast.d.ts +117 -0
  462. package/dist/plugins/callsite-ast.d.ts.map +1 -0
  463. package/dist/plugins/callsite-jsx.d.ts +35 -0
  464. package/dist/plugins/callsite-jsx.d.ts.map +1 -0
  465. package/dist/plugins/chunks.d.ts +11 -4
  466. package/dist/plugins/chunks.d.ts.map +1 -1
  467. package/dist/plugins/client-chunks.d.ts +40 -0
  468. package/dist/plugins/client-chunks.d.ts.map +1 -0
  469. package/dist/plugins/client-dep-entries.d.ts +44 -0
  470. package/dist/plugins/client-dep-entries.d.ts.map +1 -0
  471. package/dist/plugins/cloudflare-wasm.d.ts +21 -0
  472. package/dist/plugins/cloudflare-wasm.d.ts.map +1 -0
  473. package/dist/plugins/content.d.ts +1 -1
  474. package/dist/plugins/content.d.ts.map +1 -1
  475. package/dist/plugins/dev-discovery.d.ts +123 -0
  476. package/dist/plugins/dev-discovery.d.ts.map +1 -0
  477. package/dist/plugins/dev-server.d.ts +24 -1
  478. package/dist/plugins/dev-server.d.ts.map +1 -1
  479. package/dist/plugins/entries.d.ts +34 -4
  480. package/dist/plugins/entries.d.ts.map +1 -1
  481. package/dist/plugins/fonts.d.ts +35 -74
  482. package/dist/plugins/fonts.d.ts.map +1 -1
  483. package/dist/plugins/graph-endpoint.d.ts +112 -0
  484. package/dist/plugins/graph-endpoint.d.ts.map +1 -0
  485. package/dist/plugins/mdx.d.ts +18 -5
  486. package/dist/plugins/mdx.d.ts.map +1 -1
  487. package/dist/plugins/post-build.d.ts +110 -0
  488. package/dist/plugins/post-build.d.ts.map +1 -0
  489. package/dist/plugins/prebuilt-capture.d.ts +67 -0
  490. package/dist/plugins/prebuilt-capture.d.ts.map +1 -0
  491. package/dist/plugins/prebuilt-options-analysis.d.ts +40 -0
  492. package/dist/plugins/prebuilt-options-analysis.d.ts.map +1 -0
  493. package/dist/plugins/prebuilt.d.ts +98 -0
  494. package/dist/plugins/prebuilt.d.ts.map +1 -0
  495. package/dist/plugins/prerender-sugar.d.ts +39 -0
  496. package/dist/plugins/prerender-sugar.d.ts.map +1 -0
  497. package/dist/plugins/react-resolve.d.ts +49 -0
  498. package/dist/plugins/react-resolve.d.ts.map +1 -0
  499. package/dist/plugins/request-dep/analysis.d.ts +106 -0
  500. package/dist/plugins/request-dep/analysis.d.ts.map +1 -0
  501. package/dist/plugins/request-dep/index.d.ts +75 -0
  502. package/dist/plugins/request-dep/index.d.ts.map +1 -0
  503. package/dist/plugins/request-dep/origin.d.ts +61 -0
  504. package/dist/plugins/request-dep/origin.d.ts.map +1 -0
  505. package/dist/plugins/routing.d.ts +1 -1
  506. package/dist/plugins/routing.d.ts.map +1 -1
  507. package/dist/plugins/rsc-assets-manifest.d.ts +33 -0
  508. package/dist/plugins/rsc-assets-manifest.d.ts.map +1 -0
  509. package/dist/plugins/server-bundle.d.ts.map +1 -1
  510. package/dist/plugins/shims.d.ts +29 -5
  511. package/dist/plugins/shims.d.ts.map +1 -1
  512. package/dist/plugins/static-build.d.ts +246 -26
  513. package/dist/plugins/static-build.d.ts.map +1 -1
  514. package/dist/routing/codegen-shared.d.ts +26 -0
  515. package/dist/routing/codegen-shared.d.ts.map +1 -0
  516. package/dist/routing/codegen-types.d.ts +61 -0
  517. package/dist/routing/codegen-types.d.ts.map +1 -0
  518. package/dist/routing/codegen-write.d.ts +42 -0
  519. package/dist/routing/codegen-write.d.ts.map +1 -0
  520. package/dist/routing/codegen.d.ts +8 -3
  521. package/dist/routing/codegen.d.ts.map +1 -1
  522. package/dist/routing/collision-probe.d.ts +104 -0
  523. package/dist/routing/collision-probe.d.ts.map +1 -0
  524. package/dist/routing/collision-spaces.d.ts +26 -0
  525. package/dist/routing/collision-spaces.d.ts.map +1 -0
  526. package/dist/routing/convention-lint.d.ts +55 -0
  527. package/dist/routing/convention-lint.d.ts.map +1 -0
  528. package/dist/routing/export-detect.d.ts +91 -0
  529. package/dist/routing/export-detect.d.ts.map +1 -0
  530. package/dist/routing/file-cache.d.ts +8 -0
  531. package/dist/routing/file-cache.d.ts.map +1 -0
  532. package/dist/routing/index.d.ts +13 -7
  533. package/dist/routing/index.d.ts.map +1 -1
  534. package/dist/routing/index.js +5 -2
  535. package/dist/routing/interception-overlap.d.ts +35 -0
  536. package/dist/routing/interception-overlap.d.ts.map +1 -0
  537. package/dist/routing/interception.d.ts +234 -10
  538. package/dist/routing/interception.d.ts.map +1 -1
  539. package/dist/routing/link-codegen.d.ts +105 -0
  540. package/dist/routing/link-codegen.d.ts.map +1 -0
  541. package/dist/routing/manifest-codegen.d.ts +26 -0
  542. package/dist/routing/manifest-codegen.d.ts.map +1 -0
  543. package/dist/routing/scanner.d.ts +14 -10
  544. package/dist/routing/scanner.d.ts.map +1 -1
  545. package/dist/routing/schema-validation.d.ts +35 -0
  546. package/dist/routing/schema-validation.d.ts.map +1 -0
  547. package/dist/routing/segment-classify.d.ts +114 -0
  548. package/dist/routing/segment-classify.d.ts.map +1 -0
  549. package/dist/routing/segment-codegen.d.ts +38 -0
  550. package/dist/routing/segment-codegen.d.ts.map +1 -0
  551. package/dist/routing/segment-keys.d.ts +118 -0
  552. package/dist/routing/segment-keys.d.ts.map +1 -0
  553. package/dist/routing/slot-placement.d.ts +48 -0
  554. package/dist/routing/slot-placement.d.ts.map +1 -0
  555. package/dist/routing/types.d.ts +81 -26
  556. package/dist/routing/types.d.ts.map +1 -1
  557. package/dist/routing/walkers.d.ts +57 -0
  558. package/dist/routing/walkers.d.ts.map +1 -0
  559. package/dist/rsc-runtime/rsc.d.ts +1 -1
  560. package/dist/rsc-runtime/rsc.d.ts.map +1 -1
  561. package/dist/rsc-runtime/ssr.d.ts +14 -0
  562. package/dist/rsc-runtime/ssr.d.ts.map +1 -1
  563. package/dist/rsc-runtime/transforms.d.ts +13 -0
  564. package/dist/rsc-runtime/transforms.d.ts.map +1 -0
  565. package/dist/schema-bridge.d.ts +145 -0
  566. package/dist/schema-bridge.d.ts.map +1 -0
  567. package/dist/search-params/define.d.ts +262 -0
  568. package/dist/search-params/define.d.ts.map +1 -0
  569. package/dist/search-params/index.d.ts +3 -7
  570. package/dist/search-params/index.d.ts.map +1 -1
  571. package/dist/search-params/index.js +179 -360
  572. package/dist/search-params/index.js.map +1 -1
  573. package/dist/search-params/parse-total.d.ts +81 -0
  574. package/dist/search-params/parse-total.d.ts.map +1 -0
  575. package/dist/search-params/serialize-equal.d.ts +9 -0
  576. package/dist/search-params/serialize-equal.d.ts.map +1 -0
  577. package/dist/search-params/wrappers.d.ts +76 -0
  578. package/dist/search-params/wrappers.d.ts.map +1 -0
  579. package/dist/server/access-gate.d.ts +98 -10
  580. package/dist/server/access-gate.d.ts.map +1 -1
  581. package/dist/server/action-client.d.ts +44 -9
  582. package/dist/server/action-client.d.ts.map +1 -1
  583. package/dist/server/action-encryption.d.ts +76 -0
  584. package/dist/server/action-encryption.d.ts.map +1 -0
  585. package/dist/server/action-handler.d.ts +40 -5
  586. package/dist/server/action-handler.d.ts.map +1 -1
  587. package/dist/server/actions.d.ts +78 -40
  588. package/dist/server/actions.d.ts.map +1 -1
  589. package/dist/server/als-registry.d.ts +166 -16
  590. package/dist/server/als-registry.d.ts.map +1 -1
  591. package/dist/server/body-limits.d.ts.map +1 -1
  592. package/dist/server/build-manifest.d.ts +25 -30
  593. package/dist/server/build-manifest.d.ts.map +1 -1
  594. package/dist/server/canonicalize.d.ts +10 -0
  595. package/dist/server/canonicalize.d.ts.map +1 -1
  596. package/dist/server/chain-url-parts.d.ts +82 -0
  597. package/dist/server/chain-url-parts.d.ts.map +1 -0
  598. package/dist/server/children-interception.d.ts +49 -0
  599. package/dist/server/children-interception.d.ts.map +1 -0
  600. package/dist/server/coalesce-tick.d.ts +40 -0
  601. package/dist/server/coalesce-tick.d.ts.map +1 -0
  602. package/dist/server/compress.d.ts.map +1 -1
  603. package/dist/server/cookie-context.d.ts +149 -0
  604. package/dist/server/cookie-context.d.ts.map +1 -0
  605. package/dist/server/cookie-parsing.d.ts +65 -0
  606. package/dist/server/cookie-parsing.d.ts.map +1 -0
  607. package/dist/server/csp-nonce.d.ts +36 -0
  608. package/dist/server/csp-nonce.d.ts.map +1 -0
  609. package/dist/server/csrf.d.ts +58 -15
  610. package/dist/server/csrf.d.ts.map +1 -1
  611. package/dist/server/debug.d.ts +0 -1
  612. package/dist/server/debug.d.ts.map +1 -1
  613. package/dist/server/default-logger.d.ts +23 -0
  614. package/dist/server/default-logger.d.ts.map +1 -0
  615. package/dist/server/default-status-page.d.ts +45 -0
  616. package/dist/server/default-status-page.d.ts.map +1 -0
  617. package/dist/server/deny-boundary.d.ts +257 -0
  618. package/dist/server/deny-boundary.d.ts.map +1 -0
  619. package/dist/server/deny-renderer.d.ts +21 -15
  620. package/dist/server/deny-renderer.d.ts.map +1 -1
  621. package/dist/server/early-hints-sender.d.ts.map +1 -1
  622. package/dist/server/early-hints.d.ts +14 -12
  623. package/dist/server/early-hints.d.ts.map +1 -1
  624. package/dist/server/error-boundary-wrapper.d.ts +102 -10
  625. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  626. package/dist/server/error-response-headers.d.ts +3 -0
  627. package/dist/server/error-response-headers.d.ts.map +1 -0
  628. package/dist/server/fallback-error.d.ts +19 -7
  629. package/dist/server/fallback-error.d.ts.map +1 -1
  630. package/dist/server/flight-injection-state.d.ts +66 -0
  631. package/dist/server/flight-injection-state.d.ts.map +1 -0
  632. package/dist/server/flight-scripts.d.ts +45 -0
  633. package/dist/server/flight-scripts.d.ts.map +1 -0
  634. package/dist/server/form-data.d.ts +41 -0
  635. package/dist/server/form-data.d.ts.map +1 -1
  636. package/dist/server/form-flash.d.ts +2 -2
  637. package/dist/server/head-response.d.ts +35 -0
  638. package/dist/server/head-response.d.ts.map +1 -0
  639. package/dist/server/html-injector-core.d.ts +257 -0
  640. package/dist/server/html-injector-core.d.ts.map +1 -0
  641. package/dist/server/html-injectors.d.ts +84 -42
  642. package/dist/server/html-injectors.d.ts.map +1 -1
  643. package/dist/server/index.d.ts +17 -54
  644. package/dist/server/index.d.ts.map +1 -1
  645. package/dist/server/index.js +195 -2922
  646. package/dist/server/index.js.map +1 -1
  647. package/dist/server/instrumentation.d.ts +11 -4
  648. package/dist/server/instrumentation.d.ts.map +1 -1
  649. package/dist/server/internal.d.ts +47 -0
  650. package/dist/server/internal.d.ts.map +1 -0
  651. package/dist/server/internal.js +4645 -0
  652. package/dist/server/internal.js.map +1 -0
  653. package/dist/server/json-status-response.d.ts +34 -0
  654. package/dist/server/json-status-response.d.ts.map +1 -0
  655. package/dist/server/logger.d.ts +78 -7
  656. package/dist/server/logger.d.ts.map +1 -1
  657. package/dist/server/metadata-collector.d.ts +73 -0
  658. package/dist/server/metadata-collector.d.ts.map +1 -0
  659. package/dist/server/metadata-platform.d.ts +2 -2
  660. package/dist/server/metadata-render.d.ts +2 -2
  661. package/dist/server/metadata-render.d.ts.map +1 -1
  662. package/dist/server/metadata-routes.d.ts +71 -11
  663. package/dist/server/metadata-routes.d.ts.map +1 -1
  664. package/dist/server/metadata-social.d.ts +2 -2
  665. package/dist/server/metadata.d.ts +10 -2
  666. package/dist/server/metadata.d.ts.map +1 -1
  667. package/dist/server/middleware-runner.d.ts +20 -5
  668. package/dist/server/middleware-runner.d.ts.map +1 -1
  669. package/dist/server/node-stream-transforms.d.ts +105 -0
  670. package/dist/server/node-stream-transforms.d.ts.map +1 -0
  671. package/dist/server/nuqs-ssr-provider.d.ts +7 -3
  672. package/dist/server/nuqs-ssr-provider.d.ts.map +1 -1
  673. package/dist/server/param-coercion.d.ts +83 -0
  674. package/dist/server/param-coercion.d.ts.map +1 -0
  675. package/dist/server/pipeline-helpers.d.ts +193 -0
  676. package/dist/server/pipeline-helpers.d.ts.map +1 -0
  677. package/dist/server/pipeline-interception.d.ts +70 -9
  678. package/dist/server/pipeline-interception.d.ts.map +1 -1
  679. package/dist/server/pipeline-metadata.d.ts +7 -1
  680. package/dist/server/pipeline-metadata.d.ts.map +1 -1
  681. package/dist/server/pipeline-outcome.d.ts +59 -0
  682. package/dist/server/pipeline-outcome.d.ts.map +1 -0
  683. package/dist/server/pipeline-phases.d.ts +70 -0
  684. package/dist/server/pipeline-phases.d.ts.map +1 -0
  685. package/dist/server/pipeline.d.ts +147 -23
  686. package/dist/server/pipeline.d.ts.map +1 -1
  687. package/dist/server/port-resolution.d.ts +31 -0
  688. package/dist/server/port-resolution.d.ts.map +1 -0
  689. package/dist/server/prebuilt/cache-key.d.ts +63 -0
  690. package/dist/server/prebuilt/cache-key.d.ts.map +1 -0
  691. package/dist/server/prebuilt/capture-render.d.ts +25 -0
  692. package/dist/server/prebuilt/capture-render.d.ts.map +1 -0
  693. package/dist/server/prebuilt/capture-routes.d.ts +37 -0
  694. package/dist/server/prebuilt/capture-routes.d.ts.map +1 -0
  695. package/dist/server/prebuilt/capture-state.d.ts +101 -0
  696. package/dist/server/prebuilt/capture-state.d.ts.map +1 -0
  697. package/dist/server/prebuilt/key-discipline.d.ts +52 -0
  698. package/dist/server/prebuilt/key-discipline.d.ts.map +1 -0
  699. package/dist/server/prebuilt/lifetime.d.ts +38 -0
  700. package/dist/server/prebuilt/lifetime.d.ts.map +1 -0
  701. package/dist/server/prebuilt/manifest-tag-index.d.ts +27 -0
  702. package/dist/server/prebuilt/manifest-tag-index.d.ts.map +1 -0
  703. package/dist/server/prebuilt/overlay.d.ts +100 -0
  704. package/dist/server/prebuilt/overlay.d.ts.map +1 -0
  705. package/dist/server/prebuilt/payload-source.d.ts +79 -0
  706. package/dist/server/prebuilt/payload-source.d.ts.map +1 -0
  707. package/dist/server/prebuilt/slots.d.ts +106 -0
  708. package/dist/server/prebuilt/slots.d.ts.map +1 -0
  709. package/dist/server/prebuilt/synthetic-store.d.ts +67 -0
  710. package/dist/server/prebuilt/synthetic-store.d.ts.map +1 -0
  711. package/dist/server/prebuilt-builder.d.ts +121 -0
  712. package/dist/server/prebuilt-builder.d.ts.map +1 -0
  713. package/dist/server/prebuilt-runtime.d.ts +111 -0
  714. package/dist/server/prebuilt-runtime.d.ts.map +1 -0
  715. package/dist/server/primitives.d.ts +101 -90
  716. package/dist/server/primitives.d.ts.map +1 -1
  717. package/dist/server/publish-params.d.ts +33 -0
  718. package/dist/server/publish-params.d.ts.map +1 -0
  719. package/dist/server/react-cache-bridge.d.ts +59 -0
  720. package/dist/server/react-cache-bridge.d.ts.map +1 -0
  721. package/dist/server/react-cache-scope.d.ts +49 -0
  722. package/dist/server/react-cache-scope.d.ts.map +1 -0
  723. package/dist/server/render-timeout.d.ts +66 -0
  724. package/dist/server/render-timeout.d.ts.map +1 -0
  725. package/dist/server/render-utils.d.ts +35 -0
  726. package/dist/server/render-utils.d.ts.map +1 -0
  727. package/dist/server/request-context.d.ts +128 -103
  728. package/dist/server/request-context.d.ts.map +1 -1
  729. package/dist/server/request-dep.d.ts +15 -0
  730. package/dist/server/request-dep.d.ts.map +1 -0
  731. package/dist/server/response-cache-policy.d.ts +3 -0
  732. package/dist/server/response-cache-policy.d.ts.map +1 -0
  733. package/dist/server/route-element-builder.d.ts +57 -30
  734. package/dist/server/route-element-builder.d.ts.map +1 -1
  735. package/dist/server/route-element-helpers.d.ts +12 -0
  736. package/dist/server/route-element-helpers.d.ts.map +1 -0
  737. package/dist/server/route-handler.d.ts +1 -1
  738. package/dist/server/route-handler.d.ts.map +1 -1
  739. package/dist/server/route-matcher.d.ts +55 -38
  740. package/dist/server/route-matcher.d.ts.map +1 -1
  741. package/dist/server/route-module-loader.d.ts +37 -0
  742. package/dist/server/route-module-loader.d.ts.map +1 -0
  743. package/dist/server/rsc-cache-key-guard.d.ts +78 -0
  744. package/dist/server/rsc-cache-key-guard.d.ts.map +1 -0
  745. package/dist/server/rsc-entry/action-dispatcher.d.ts +67 -0
  746. package/dist/server/rsc-entry/action-dispatcher.d.ts.map +1 -0
  747. package/dist/server/rsc-entry/action-middleware-runner.d.ts +66 -0
  748. package/dist/server/rsc-entry/action-middleware-runner.d.ts.map +1 -0
  749. package/dist/server/rsc-entry/api-handler.d.ts +19 -3
  750. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  751. package/dist/server/rsc-entry/deny-fallback.d.ts +55 -0
  752. package/dist/server/rsc-entry/deny-fallback.d.ts.map +1 -0
  753. package/dist/server/rsc-entry/error-renderer.d.ts +35 -21
  754. package/dist/server/rsc-entry/error-renderer.d.ts.map +1 -1
  755. package/dist/server/rsc-entry/helpers.d.ts +14 -59
  756. package/dist/server/rsc-entry/helpers.d.ts.map +1 -1
  757. package/dist/server/rsc-entry/index.d.ts +30 -6
  758. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  759. package/dist/server/rsc-entry/render-route.d.ts +50 -0
  760. package/dist/server/rsc-entry/render-route.d.ts.map +1 -0
  761. package/dist/server/rsc-entry/render-signals.d.ts +65 -0
  762. package/dist/server/rsc-entry/render-signals.d.ts.map +1 -0
  763. package/dist/server/rsc-entry/revalidate-renderer.d.ts +98 -0
  764. package/dist/server/rsc-entry/revalidate-renderer.d.ts.map +1 -0
  765. package/dist/server/rsc-entry/rsc-payload.d.ts +30 -6
  766. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  767. package/dist/server/rsc-entry/rsc-stream.d.ts +12 -30
  768. package/dist/server/rsc-entry/rsc-stream.d.ts.map +1 -1
  769. package/dist/server/rsc-entry/ssr-bridge.d.ts +6 -2
  770. package/dist/server/rsc-entry/ssr-bridge.d.ts.map +1 -1
  771. package/dist/server/rsc-entry/ssr-renderer.d.ts +44 -7
  772. package/dist/server/rsc-entry/ssr-renderer.d.ts.map +1 -1
  773. package/dist/server/rsc-error-envelope.d.ts +11 -0
  774. package/dist/server/rsc-error-envelope.d.ts.map +1 -0
  775. package/dist/server/safe-load.d.ts +39 -0
  776. package/dist/server/safe-load.d.ts.map +1 -0
  777. package/dist/server/sensitive-fields.d.ts +74 -0
  778. package/dist/server/sensitive-fields.d.ts.map +1 -0
  779. package/dist/server/signal-identity.d.ts +43 -0
  780. package/dist/server/signal-identity.d.ts.map +1 -0
  781. package/dist/server/sitemap-generator.d.ts +130 -0
  782. package/dist/server/sitemap-generator.d.ts.map +1 -0
  783. package/dist/server/sitemap-handler.d.ts +22 -0
  784. package/dist/server/sitemap-handler.d.ts.map +1 -0
  785. package/dist/server/skippable-prefix.d.ts +29 -0
  786. package/dist/server/skippable-prefix.d.ts.map +1 -0
  787. package/dist/server/slot-interception.d.ts +80 -0
  788. package/dist/server/slot-interception.d.ts.map +1 -0
  789. package/dist/server/slot-resolver.d.ts +138 -7
  790. package/dist/server/slot-resolver.d.ts.map +1 -1
  791. package/dist/server/slot-subtree-contain.d.ts +54 -0
  792. package/dist/server/slot-subtree-contain.d.ts.map +1 -0
  793. package/dist/server/ssr-bridge-types.d.ts +198 -0
  794. package/dist/server/ssr-bridge-types.d.ts.map +1 -0
  795. package/dist/server/ssr-entry.d.ts +8 -47
  796. package/dist/server/ssr-entry.d.ts.map +1 -1
  797. package/dist/server/ssr-render.d.ts +60 -27
  798. package/dist/server/ssr-render.d.ts.map +1 -1
  799. package/dist/server/ssr-wrappers.d.ts +93 -0
  800. package/dist/server/ssr-wrappers.d.ts.map +1 -0
  801. package/dist/server/state-tree-diff.d.ts +44 -9
  802. package/dist/server/state-tree-diff.d.ts.map +1 -1
  803. package/dist/server/static-generator.d.ts +112 -0
  804. package/dist/server/static-generator.d.ts.map +1 -0
  805. package/dist/server/static-not-found.d.ts +52 -0
  806. package/dist/server/static-not-found.d.ts.map +1 -0
  807. package/dist/server/status-code-resolver.d.ts +26 -15
  808. package/dist/server/status-code-resolver.d.ts.map +1 -1
  809. package/dist/server/stream-utils.d.ts +59 -0
  810. package/dist/server/stream-utils.d.ts.map +1 -0
  811. package/dist/server/tracing.d.ts +57 -26
  812. package/dist/server/tracing.d.ts.map +1 -1
  813. package/dist/server/tree-match.d.ts +59 -0
  814. package/dist/server/tree-match.d.ts.map +1 -0
  815. package/dist/server/types.d.ts +89 -8
  816. package/dist/server/types.d.ts.map +1 -1
  817. package/dist/server/utils/element-type.d.ts +50 -0
  818. package/dist/server/utils/element-type.d.ts.map +1 -0
  819. package/dist/server/utils/escape-html.d.ts +14 -0
  820. package/dist/server/utils/escape-html.d.ts.map +1 -0
  821. package/dist/server/version-skew.d.ts +61 -0
  822. package/dist/server/version-skew.d.ts.map +1 -0
  823. package/dist/server/workers-cache-bridge.d.ts +26 -0
  824. package/dist/server/workers-cache-bridge.d.ts.map +1 -0
  825. package/dist/shared/als-slots.d.ts +42 -0
  826. package/dist/shared/als-slots.d.ts.map +1 -0
  827. package/dist/shared/base-path.d.ts +56 -0
  828. package/dist/shared/base-path.d.ts.map +1 -0
  829. package/dist/shared/csrf-reject.d.ts +16 -0
  830. package/dist/shared/csrf-reject.d.ts.map +1 -0
  831. package/dist/shared/error-digest.d.ts +28 -0
  832. package/dist/shared/error-digest.d.ts.map +1 -0
  833. package/dist/shared/href-validation.d.ts +49 -0
  834. package/dist/shared/href-validation.d.ts.map +1 -0
  835. package/dist/shared/merge-search-params.d.ts +22 -0
  836. package/dist/shared/merge-search-params.d.ts.map +1 -0
  837. package/dist/shared/param-value.d.ts +104 -0
  838. package/dist/shared/param-value.d.ts.map +1 -0
  839. package/dist/shared/payload-root.d.ts +110 -0
  840. package/dist/shared/payload-root.d.ts.map +1 -0
  841. package/dist/shared/redirect-type.d.ts +17 -0
  842. package/dist/shared/redirect-type.d.ts.map +1 -0
  843. package/dist/shared/rsc-cache-key.d.ts +163 -0
  844. package/dist/shared/rsc-cache-key.d.ts.map +1 -0
  845. package/dist/shared/rsc-error-envelope.d.ts +16 -0
  846. package/dist/shared/rsc-error-envelope.d.ts.map +1 -0
  847. package/dist/shared/rsc-manifest.d.ts +28 -0
  848. package/dist/shared/rsc-manifest.d.ts.map +1 -0
  849. package/dist/shared/rsc-media-type.d.ts +52 -0
  850. package/dist/shared/rsc-media-type.d.ts.map +1 -0
  851. package/dist/shared/rsc-payload-path.d.ts +48 -0
  852. package/dist/shared/rsc-payload-path.d.ts.map +1 -0
  853. package/dist/shared/segment-info.d.ts +66 -0
  854. package/dist/shared/segment-info.d.ts.map +1 -0
  855. package/dist/shared/slot-params.d.ts +52 -0
  856. package/dist/shared/slot-params.d.ts.map +1 -0
  857. package/dist/shared/static-platform-files.d.ts +71 -0
  858. package/dist/shared/static-platform-files.d.ts.map +1 -0
  859. package/dist/shared/status-reason-phrase.d.ts +26 -0
  860. package/dist/shared/status-reason-phrase.d.ts.map +1 -0
  861. package/dist/shims/font-google.d.ts +1 -1
  862. package/dist/shims/font-google.d.ts.map +1 -1
  863. package/dist/shims/font-google.js +42 -0
  864. package/dist/shims/font-google.js.map +1 -0
  865. package/dist/shims/font-local.d.ts +26 -0
  866. package/dist/shims/font-local.d.ts.map +1 -0
  867. package/dist/shims/font-local.js +20 -0
  868. package/dist/shims/font-local.js.map +1 -0
  869. package/dist/shims/headers.d.ts +53 -1
  870. package/dist/shims/headers.d.ts.map +1 -1
  871. package/dist/shims/image.d.ts +120 -120
  872. package/dist/shims/image.d.ts.map +1 -1
  873. package/dist/shims/navigation-client.d.ts +25 -12
  874. package/dist/shims/navigation-client.d.ts.map +1 -1
  875. package/dist/shims/navigation-rsc.d.ts +21 -0
  876. package/dist/shims/navigation-rsc.d.ts.map +1 -0
  877. package/dist/shims/navigation.d.ts +10 -5
  878. package/dist/shims/navigation.d.ts.map +1 -1
  879. package/dist/utils/state-machine.d.ts +80 -0
  880. package/dist/utils/state-machine.d.ts.map +1 -0
  881. package/dist/utils/write-file-atomic.d.ts +17 -0
  882. package/dist/utils/write-file-atomic.d.ts.map +1 -0
  883. package/docs/api/30-api-server.mdx +239 -0
  884. package/docs/api/31-api-client.mdx +170 -0
  885. package/docs/api/32-api-cache.mdx +339 -0
  886. package/docs/api/33-api-search-params.mdx +176 -0
  887. package/docs/api/34-api-config.mdx +359 -0
  888. package/docs/api/35-api-typescript.mdx +91 -0
  889. package/docs/api/36-cli.mdx +202 -0
  890. package/docs/learn/00-introduction.mdx +109 -0
  891. package/docs/learn/01-quick-start.mdx +94 -0
  892. package/docs/learn/02-pages-and-layouts.mdx +147 -0
  893. package/docs/learn/03-fetching-data.mdx +227 -0
  894. package/docs/learn/04-access-control.mdx +115 -0
  895. package/docs/learn/05-the-flush-point.mdx +175 -0
  896. package/docs/learn/06-typed-params.mdx +275 -0
  897. package/docs/learn/07-typed-routes.mdx +108 -0
  898. package/docs/learn/08-forms-and-actions.mdx +146 -0
  899. package/docs/learn/09-streaming.mdx +140 -0
  900. package/docs/learn/10-caching.mdx +270 -0
  901. package/docs/learn/11-middleware.mdx +164 -0
  902. package/docs/learn/12-error-handling.mdx +192 -0
  903. package/docs/learn/13-deploying.mdx +287 -0
  904. package/llms.txt +55 -0
  905. package/package.json +120 -29
  906. package/src/adapters/build-output-helper.ts +353 -0
  907. package/src/adapters/canonicalize-module.ts +29 -0
  908. package/src/adapters/cloudflare-dev.ts +183 -0
  909. package/src/adapters/cloudflare-kv-cache.ts +207 -0
  910. package/src/adapters/cloudflare.ts +809 -150
  911. package/src/adapters/compress-module.ts +110 -86
  912. package/src/adapters/fs-identity.ts +155 -0
  913. package/src/adapters/nitro-presets.ts +124 -0
  914. package/src/adapters/nitro-preview.ts +476 -0
  915. package/src/adapters/nitro.ts +317 -457
  916. package/src/adapters/raw-imports.d.ts +5 -0
  917. package/src/adapters/shared.ts +283 -0
  918. package/src/adapters/types.ts +127 -17
  919. package/src/adapters/wrangler.d.ts +7 -0
  920. package/src/analyze/chains.ts +411 -0
  921. package/src/analyze/classify.ts +259 -0
  922. package/src/analyze/crawl-entry.ts +68 -0
  923. package/src/analyze/crawl.ts +500 -0
  924. package/src/analyze/graph-cache.ts +331 -0
  925. package/src/analyze/graph-command.ts +762 -0
  926. package/src/analyze/live-graph.ts +232 -0
  927. package/src/analyze/poison-rules.ts +165 -0
  928. package/src/analyze/poison-scan.ts +159 -0
  929. package/src/analyze/scan.ts +149 -0
  930. package/src/cache/cache-api.ts +107 -0
  931. package/src/cache/fast-hash.ts +5 -0
  932. package/src/cache/handler-store.ts +76 -0
  933. package/src/cache/index.ts +115 -22
  934. package/src/cache/invalidation-epoch.ts +93 -0
  935. package/src/cache/json-lossy-check.ts +69 -0
  936. package/src/cache/redis-handler.ts +198 -20
  937. package/src/cache/singleflight.ts +72 -6
  938. package/src/cache/sizeof.ts +35 -0
  939. package/src/cache/stable-stringify.ts +65 -2
  940. package/src/cache/store.ts +71 -0
  941. package/src/cache/stores/cloudflare-kv.ts +52 -0
  942. package/src/cache/stores/memory.ts +125 -0
  943. package/src/cache/stores/redis.ts +97 -0
  944. package/src/cache/stores/vercel.ts +59 -0
  945. package/src/cache/tag-aware-handler.ts +254 -0
  946. package/src/cache/timber-cache.ts +165 -40
  947. package/src/cdn/cloudflare-purge.ts +50 -0
  948. package/src/cdn/fastly-purge.ts +63 -0
  949. package/src/cdn/headers.ts +153 -0
  950. package/src/cdn/index.ts +23 -0
  951. package/src/cdn/purge-store.ts +34 -0
  952. package/src/cdn/workers-cache-purge.ts +34 -0
  953. package/src/cli-check.ts +417 -0
  954. package/src/cli-context.ts +119 -0
  955. package/src/cli-schema-sync.ts +401 -0
  956. package/src/cli.ts +330 -78
  957. package/src/client/browser-dev.ts +192 -5
  958. package/src/client/browser-entry/action-dispatch.ts +237 -0
  959. package/src/client/browser-entry/action-queue.ts +152 -0
  960. package/src/client/browser-entry/hmr.ts +70 -0
  961. package/src/client/browser-entry/hydrate.ts +143 -0
  962. package/src/client/browser-entry/index.ts +120 -0
  963. package/src/client/browser-entry/post-hydration.ts +99 -0
  964. package/src/client/browser-entry/router-init.ts +406 -0
  965. package/src/client/browser-entry/rsc-stream.ts +145 -0
  966. package/src/client/browser-entry/scroll.ts +50 -0
  967. package/src/client/deny-last-resort.tsx +54 -0
  968. package/src/client/error-boundary.tsx +279 -61
  969. package/src/client/error-reconstituter.tsx +84 -0
  970. package/src/client/form.tsx +36 -32
  971. package/src/client/global-context.ts +31 -0
  972. package/src/client/history.ts +74 -11
  973. package/src/client/index.ts +89 -53
  974. package/src/client/internal.ts +54 -0
  975. package/src/client/link.tsx +468 -151
  976. package/src/client/location-search.ts +15 -0
  977. package/src/client/navigation-api.ts +380 -0
  978. package/src/client/navigation-commit.ts +318 -0
  979. package/src/client/navigation-context.ts +67 -134
  980. package/src/client/navigation-root.tsx +236 -0
  981. package/src/client/navigation-transition.ts +337 -0
  982. package/src/client/nuqs-adapter.tsx +21 -9
  983. package/src/client/params-context.ts +187 -0
  984. package/src/client/react-root.ts +82 -0
  985. package/src/client/router-effects.ts +235 -0
  986. package/src/client/router-lifecycle.ts +354 -0
  987. package/src/client/router-pipeline.ts +458 -0
  988. package/src/client/router-ref.ts +3 -3
  989. package/src/client/router-skew.ts +30 -0
  990. package/src/client/router-types.ts +370 -0
  991. package/src/client/router-url.ts +32 -0
  992. package/src/client/router.ts +491 -424
  993. package/src/client/rsc-fetch.ts +510 -109
  994. package/src/client/segment-cache.ts +362 -41
  995. package/src/client/segment-context.ts +7 -4
  996. package/src/client/segment-outlet.tsx +96 -0
  997. package/src/client/segment-update-context.ts +23 -0
  998. package/src/client/shallow-url.ts +22 -0
  999. package/src/client/slot-content-cache-context.ts +43 -0
  1000. package/src/client/slot-context.ts +50 -0
  1001. package/src/client/slot-outlet.tsx +22 -0
  1002. package/src/client/slot-provider.tsx +32 -0
  1003. package/src/client/ssr-data.ts +27 -67
  1004. package/src/client/stale-client.ts +191 -0
  1005. package/src/client/state.ts +31 -24
  1006. package/src/client/status-page-marker.tsx +32 -0
  1007. package/src/client/top-loader.tsx +13 -10
  1008. package/src/client/unload-guard.ts +35 -3
  1009. package/src/client/use-cookie.ts +70 -18
  1010. package/src/client/use-link-status.ts +7 -7
  1011. package/src/client/use-pathname.ts +22 -31
  1012. package/src/client/use-pending-navigation.ts +40 -0
  1013. package/src/client/use-query-states.ts +206 -36
  1014. package/src/client/use-router.ts +31 -9
  1015. package/src/client/use-search-params.ts +38 -49
  1016. package/src/client/use-segment-params.ts +69 -0
  1017. package/src/client/use-selected-layout-segment.ts +2 -2
  1018. package/src/codec.ts +149 -0
  1019. package/src/config-types.ts +323 -0
  1020. package/src/config-validation.ts +464 -0
  1021. package/src/cookies/define-cookie.ts +222 -53
  1022. package/src/cookies/index.ts +13 -2
  1023. package/src/cookies/json-cookie.ts +105 -0
  1024. package/src/cookies/validation.ts +192 -0
  1025. package/src/dev-tools/404-page.ts +286 -0
  1026. package/src/dev-tools/browser-logs.ts +55 -0
  1027. package/src/dev-tools/dev-page-shell.ts +278 -0
  1028. package/src/dev-tools/error-page.ts +331 -0
  1029. package/src/dev-tools/holding-server.ts +185 -0
  1030. package/src/dev-tools/hydration-overlay.ts +158 -0
  1031. package/src/dev-tools/index.ts +79 -0
  1032. package/src/dev-tools/instrumentation.ts +261 -0
  1033. package/src/{server/dev-logger.ts → dev-tools/logger.ts} +33 -51
  1034. package/src/{plugins/dev-logs.ts → dev-tools/logs.ts} +122 -26
  1035. package/src/{plugins/dev-error-overlay.ts → dev-tools/overlay.ts} +25 -80
  1036. package/src/dev-tools/stack-classifier.ts +75 -0
  1037. package/src/dev-tools/terminal.ts +182 -0
  1038. package/src/fonts/ast-walk.ts +235 -0
  1039. package/src/fonts/ast.ts +479 -128
  1040. package/src/fonts/bundle.ts +138 -0
  1041. package/src/fonts/css.ts +1 -1
  1042. package/src/fonts/dev-middleware.ts +85 -0
  1043. package/src/fonts/fallbacks.ts +0 -23
  1044. package/src/fonts/google.ts +101 -19
  1045. package/src/fonts/local.ts +12 -11
  1046. package/src/fonts/paths.ts +58 -0
  1047. package/src/fonts/pipeline.ts +348 -0
  1048. package/src/fonts/transform.ts +311 -0
  1049. package/src/fonts/types.ts +52 -1
  1050. package/src/fonts/virtual-modules.ts +179 -0
  1051. package/src/index.ts +513 -380
  1052. package/src/params/codec-registry.ts +34 -0
  1053. package/src/params/define-schema.ts +115 -0
  1054. package/src/params/index.ts +17 -0
  1055. package/src/params/resolve-schema.ts +84 -0
  1056. package/src/plugin-context.ts +502 -0
  1057. package/src/plugins/build-manifest.ts +204 -36
  1058. package/src/plugins/build-report.ts +299 -87
  1059. package/src/plugins/cache.ts +243 -0
  1060. package/src/plugins/callsite-ast.ts +472 -0
  1061. package/src/plugins/callsite-jsx.ts +243 -0
  1062. package/src/plugins/chunks.ts +74 -5
  1063. package/src/plugins/client-chunks.ts +185 -0
  1064. package/src/plugins/client-dep-entries.ts +78 -0
  1065. package/src/plugins/cloudflare-wasm.ts +141 -0
  1066. package/src/plugins/content.ts +31 -2
  1067. package/src/plugins/dev-discovery.ts +218 -0
  1068. package/src/plugins/dev-server.ts +360 -97
  1069. package/src/plugins/entries.ts +149 -16
  1070. package/src/plugins/fonts.ts +260 -657
  1071. package/src/plugins/graph-endpoint.ts +532 -0
  1072. package/src/plugins/mdx.ts +108 -35
  1073. package/src/plugins/post-build.ts +327 -0
  1074. package/src/plugins/prebuilt-capture.ts +213 -0
  1075. package/src/plugins/prebuilt-options-analysis.ts +175 -0
  1076. package/src/plugins/prebuilt.ts +670 -0
  1077. package/src/plugins/prerender-sugar.ts +316 -0
  1078. package/src/plugins/react-resolve.ts +149 -0
  1079. package/src/plugins/request-dep/analysis.ts +447 -0
  1080. package/src/plugins/request-dep/index.ts +376 -0
  1081. package/src/plugins/request-dep/origin.ts +310 -0
  1082. package/src/plugins/routing.ts +273 -277
  1083. package/src/plugins/rsc-assets-manifest.ts +251 -0
  1084. package/src/plugins/server-bundle.ts +99 -14
  1085. package/src/plugins/shims.ts +260 -97
  1086. package/src/plugins/static-build.ts +681 -71
  1087. package/src/react-canary.d.ts +2 -0
  1088. package/src/routing/codegen-shared.ts +39 -0
  1089. package/src/routing/codegen-types.ts +62 -0
  1090. package/src/routing/codegen-write.ts +163 -0
  1091. package/src/routing/codegen.ts +349 -232
  1092. package/src/routing/collision-probe.ts +438 -0
  1093. package/src/routing/collision-spaces.ts +281 -0
  1094. package/src/routing/convention-lint.ts +651 -0
  1095. package/src/routing/export-detect.ts +536 -0
  1096. package/src/routing/file-cache.ts +23 -0
  1097. package/src/routing/index.ts +16 -7
  1098. package/src/routing/interception-overlap.ts +141 -0
  1099. package/src/routing/interception.ts +1044 -67
  1100. package/src/routing/link-codegen.ts +280 -0
  1101. package/src/routing/manifest-codegen.ts +232 -0
  1102. package/src/routing/scanner.ts +417 -223
  1103. package/src/routing/schema-validation.ts +155 -0
  1104. package/src/routing/segment-classify.ts +280 -0
  1105. package/src/routing/segment-codegen.ts +99 -0
  1106. package/src/routing/segment-keys.ts +186 -0
  1107. package/src/routing/slot-placement.ts +97 -0
  1108. package/src/routing/types.ts +82 -26
  1109. package/src/routing/walkers.ts +98 -0
  1110. package/src/rsc-runtime/rsc.ts +9 -0
  1111. package/src/rsc-runtime/ssr.ts +51 -0
  1112. package/src/rsc-runtime/transforms.ts +13 -0
  1113. package/src/rsc-runtime/vendor-types.d.ts +27 -0
  1114. package/src/schema-bridge.ts +382 -0
  1115. package/src/search-params/define.ts +677 -0
  1116. package/src/search-params/index.ts +14 -20
  1117. package/src/search-params/parse-total.ts +91 -0
  1118. package/src/search-params/serialize-equal.ts +14 -0
  1119. package/src/search-params/wrappers.ts +150 -0
  1120. package/src/server/access-gate.tsx +195 -56
  1121. package/src/server/action-client.ts +126 -33
  1122. package/src/server/action-encryption.ts +144 -0
  1123. package/src/server/action-handler.ts +457 -111
  1124. package/src/server/actions.ts +172 -85
  1125. package/src/server/als-registry.ts +224 -25
  1126. package/src/server/body-limits.ts +10 -2
  1127. package/src/server/build-manifest.ts +33 -57
  1128. package/src/server/canonicalize.ts +6 -3
  1129. package/src/server/chain-url-parts.ts +163 -0
  1130. package/src/server/children-interception.ts +116 -0
  1131. package/src/server/coalesce-tick.ts +75 -0
  1132. package/src/server/compress.ts +43 -8
  1133. package/src/server/cookie-context.ts +454 -0
  1134. package/src/server/cookie-parsing.ts +163 -0
  1135. package/src/server/csp-nonce.ts +58 -0
  1136. package/src/server/csrf.ts +228 -35
  1137. package/src/server/debug.ts +0 -1
  1138. package/src/server/default-logger.ts +100 -0
  1139. package/src/server/default-status-page.ts +88 -0
  1140. package/src/server/deny-boundary.ts +527 -0
  1141. package/src/server/deny-renderer.ts +201 -179
  1142. package/src/server/early-hints-sender.ts +4 -3
  1143. package/src/server/early-hints.ts +39 -29
  1144. package/src/server/error-boundary-wrapper.ts +160 -44
  1145. package/src/server/error-response-headers.ts +18 -0
  1146. package/src/server/fallback-error.ts +88 -104
  1147. package/src/server/flight-injection-state.ts +113 -0
  1148. package/src/server/flight-scripts.ts +67 -0
  1149. package/src/server/form-data.ts +124 -12
  1150. package/src/server/form-flash.ts +3 -3
  1151. package/src/server/head-response.ts +54 -0
  1152. package/src/server/html-injector-core.ts +512 -0
  1153. package/src/server/html-injectors.ts +270 -255
  1154. package/src/server/index.ts +36 -192
  1155. package/src/server/instrumentation.ts +11 -4
  1156. package/src/server/internal.ts +168 -0
  1157. package/src/server/json-status-response.ts +105 -0
  1158. package/src/server/logger.ts +126 -38
  1159. package/src/server/metadata-collector.ts +177 -0
  1160. package/src/server/metadata-platform.ts +2 -2
  1161. package/src/server/metadata-render.ts +30 -8
  1162. package/src/server/metadata-routes.ts +220 -24
  1163. package/src/server/metadata-social.ts +2 -2
  1164. package/src/server/metadata.ts +23 -2
  1165. package/src/server/middleware-runner.ts +32 -5
  1166. package/src/server/node-stream-transforms.ts +323 -0
  1167. package/src/server/nuqs-ssr-provider.tsx +8 -7
  1168. package/src/server/param-coercion.ts +201 -0
  1169. package/src/server/pipeline-helpers.ts +485 -0
  1170. package/src/server/pipeline-interception.ts +241 -32
  1171. package/src/server/pipeline-metadata.ts +15 -1
  1172. package/src/server/pipeline-outcome.ts +290 -0
  1173. package/src/server/pipeline-phases.ts +496 -0
  1174. package/src/server/pipeline.ts +385 -427
  1175. package/src/server/port-resolution.ts +53 -0
  1176. package/src/server/prebuilt/cache-key.ts +299 -0
  1177. package/src/server/prebuilt/capture-render.ts +118 -0
  1178. package/src/server/prebuilt/capture-routes.ts +104 -0
  1179. package/src/server/prebuilt/capture-state.ts +196 -0
  1180. package/src/server/prebuilt/key-discipline.ts +122 -0
  1181. package/src/server/prebuilt/lifetime.ts +151 -0
  1182. package/src/server/prebuilt/manifest-tag-index.ts +46 -0
  1183. package/src/server/prebuilt/overlay.ts +256 -0
  1184. package/src/server/prebuilt/payload-source.ts +202 -0
  1185. package/src/server/prebuilt/slots.ts +202 -0
  1186. package/src/server/prebuilt/synthetic-store.ts +125 -0
  1187. package/src/server/prebuilt-builder.ts +514 -0
  1188. package/src/server/prebuilt-runtime.ts +813 -0
  1189. package/src/server/primitives.ts +153 -171
  1190. package/src/server/publish-params.ts +42 -0
  1191. package/src/server/react-cache-bridge.ts +124 -0
  1192. package/src/server/react-cache-scope.ts +104 -0
  1193. package/src/server/render-timeout.ts +128 -0
  1194. package/src/server/render-utils.ts +45 -0
  1195. package/src/server/request-context.ts +269 -332
  1196. package/src/server/request-dep.ts +37 -0
  1197. package/src/server/response-cache-policy.ts +45 -0
  1198. package/src/server/route-element-builder.ts +514 -355
  1199. package/src/server/route-element-helpers.ts +37 -0
  1200. package/src/server/route-handler.ts +67 -27
  1201. package/src/server/route-matcher.ts +238 -267
  1202. package/src/server/route-module-loader.ts +161 -0
  1203. package/src/server/rsc-cache-key-guard.ts +122 -0
  1204. package/src/server/rsc-entry/action-dispatcher.ts +142 -0
  1205. package/src/server/rsc-entry/action-middleware-runner.ts +130 -0
  1206. package/src/server/rsc-entry/api-handler.ts +49 -81
  1207. package/src/server/rsc-entry/deny-fallback.ts +151 -0
  1208. package/src/server/rsc-entry/error-renderer.ts +301 -113
  1209. package/src/server/rsc-entry/helpers.ts +90 -115
  1210. package/src/server/rsc-entry/index.ts +370 -350
  1211. package/src/server/rsc-entry/render-route.ts +229 -0
  1212. package/src/server/rsc-entry/render-signals.ts +108 -0
  1213. package/src/server/rsc-entry/revalidate-renderer.ts +349 -0
  1214. package/src/server/rsc-entry/rsc-payload.ts +192 -72
  1215. package/src/server/rsc-entry/rsc-stream.ts +128 -131
  1216. package/src/server/rsc-entry/ssr-bridge.ts +19 -6
  1217. package/src/server/rsc-entry/ssr-renderer.ts +300 -137
  1218. package/src/server/rsc-error-envelope.ts +18 -0
  1219. package/src/server/rsc-prop-warnings.ts +1 -1
  1220. package/src/server/safe-load.ts +53 -0
  1221. package/src/server/sensitive-fields.ts +230 -0
  1222. package/src/server/server-only-guard-noop.js +3 -0
  1223. package/src/server/server-timing.ts +1 -1
  1224. package/src/server/signal-identity.ts +112 -0
  1225. package/src/server/sitemap-generator.ts +337 -0
  1226. package/src/server/sitemap-handler.ts +157 -0
  1227. package/src/server/skippable-prefix.ts +172 -0
  1228. package/src/server/slot-interception.ts +168 -0
  1229. package/src/server/slot-resolver.ts +707 -300
  1230. package/src/server/slot-subtree-contain.ts +273 -0
  1231. package/src/server/ssr-bridge-types.ts +201 -0
  1232. package/src/server/ssr-entry.ts +225 -104
  1233. package/src/server/ssr-render.ts +354 -91
  1234. package/src/server/ssr-wrappers.tsx +162 -0
  1235. package/src/server/state-tree-diff.ts +85 -30
  1236. package/src/server/static-generator.ts +680 -0
  1237. package/src/server/static-not-found.ts +134 -0
  1238. package/src/server/status-code-resolver.ts +107 -148
  1239. package/src/server/stream-utils.ts +343 -0
  1240. package/src/server/tracing.ts +163 -68
  1241. package/src/server/tree-match.ts +494 -0
  1242. package/src/server/types.ts +96 -11
  1243. package/src/server/utils/element-type.ts +88 -0
  1244. package/src/server/utils/escape-html.ts +20 -0
  1245. package/src/server/version-skew.ts +104 -0
  1246. package/src/server/waituntil-bridge.ts +1 -1
  1247. package/src/server/workers-cache-bridge.ts +33 -0
  1248. package/src/shared/als-slots.ts +74 -0
  1249. package/src/shared/base-path.ts +80 -0
  1250. package/src/shared/csrf-reject.ts +15 -0
  1251. package/src/shared/error-digest.ts +46 -0
  1252. package/src/shared/href-validation.ts +159 -0
  1253. package/src/shared/merge-search-params.ts +55 -0
  1254. package/src/shared/param-value.ts +281 -0
  1255. package/src/shared/payload-root.ts +153 -0
  1256. package/src/shared/redirect-type.ts +17 -0
  1257. package/src/shared/rsc-cache-key.ts +269 -0
  1258. package/src/shared/rsc-error-envelope.ts +16 -0
  1259. package/src/shared/rsc-manifest.ts +29 -0
  1260. package/src/shared/rsc-media-type.ts +59 -0
  1261. package/src/shared/rsc-payload-path.ts +52 -0
  1262. package/src/shared/segment-info.ts +67 -0
  1263. package/src/shared/slot-params.ts +109 -0
  1264. package/src/shared/static-platform-files.ts +75 -0
  1265. package/src/shared/status-reason-phrase.ts +61 -0
  1266. package/src/shims/font-google.ts +1 -1
  1267. package/src/shims/font-local.ts +34 -0
  1268. package/src/shims/headers.ts +122 -1
  1269. package/src/shims/navigation-client.ts +36 -32
  1270. package/src/shims/navigation-rsc.ts +47 -0
  1271. package/src/shims/navigation.ts +10 -7
  1272. package/src/utils/state-machine.ts +111 -0
  1273. package/src/utils/write-file-atomic.ts +32 -0
  1274. package/dist/_chunks/als-registry-B7DbZ2hS.js +0 -41
  1275. package/dist/_chunks/als-registry-B7DbZ2hS.js.map +0 -1
  1276. package/dist/_chunks/debug-B3Gypr3D.js +0 -108
  1277. package/dist/_chunks/debug-B3Gypr3D.js.map +0 -1
  1278. package/dist/_chunks/format-RyoGQL74.js +0 -164
  1279. package/dist/_chunks/format-RyoGQL74.js.map +0 -1
  1280. package/dist/_chunks/interception-BOoWmLUA.js +0 -676
  1281. package/dist/_chunks/interception-BOoWmLUA.js.map +0 -1
  1282. package/dist/_chunks/metadata-routes-Cjmvi3rQ.js.map +0 -1
  1283. package/dist/_chunks/request-context-BQUC8PHn.js +0 -330
  1284. package/dist/_chunks/request-context-BQUC8PHn.js.map +0 -1
  1285. package/dist/_chunks/ssr-data-MjmprTmO.js +0 -88
  1286. package/dist/_chunks/ssr-data-MjmprTmO.js.map +0 -1
  1287. package/dist/_chunks/tracing-CemImE6h.js +0 -187
  1288. package/dist/_chunks/tracing-CemImE6h.js.map +0 -1
  1289. package/dist/_chunks/use-cookie-DX-l1_5E.js +0 -91
  1290. package/dist/_chunks/use-cookie-DX-l1_5E.js.map +0 -1
  1291. package/dist/_chunks/use-query-states-D5KaffOK.js +0 -109
  1292. package/dist/_chunks/use-query-states-D5KaffOK.js.map +0 -1
  1293. package/dist/adapters/cloudflare.js.map +0 -1
  1294. package/dist/cache/index.js.map +0 -1
  1295. package/dist/cache/register-cached-function.d.ts +0 -17
  1296. package/dist/cache/register-cached-function.d.ts.map +0 -1
  1297. package/dist/client/browser-entry.d.ts +0 -21
  1298. package/dist/client/browser-entry.d.ts.map +0 -1
  1299. package/dist/client/error-boundary.js.map +0 -1
  1300. package/dist/client/head.d.ts +0 -16
  1301. package/dist/client/head.d.ts.map +0 -1
  1302. package/dist/client/link-status-provider.d.ts +0 -11
  1303. package/dist/client/link-status-provider.d.ts.map +0 -1
  1304. package/dist/client/segment-merger.d.ts +0 -119
  1305. package/dist/client/segment-merger.d.ts.map +0 -1
  1306. package/dist/client/stale-reload.d.ts +0 -44
  1307. package/dist/client/stale-reload.d.ts.map +0 -1
  1308. package/dist/client/transition-root.d.ts +0 -74
  1309. package/dist/client/transition-root.d.ts.map +0 -1
  1310. package/dist/client/types.d.ts +0 -14
  1311. package/dist/client/types.d.ts.map +0 -1
  1312. package/dist/client/use-navigation-pending.d.ts +0 -26
  1313. package/dist/client/use-navigation-pending.d.ts.map +0 -1
  1314. package/dist/client/use-params.d.ts +0 -92
  1315. package/dist/client/use-params.d.ts.map +0 -1
  1316. package/dist/content/index.d.ts +0 -11
  1317. package/dist/content/index.d.ts.map +0 -1
  1318. package/dist/content/index.js +0 -2
  1319. package/dist/plugins/adapter-build.d.ts +0 -18
  1320. package/dist/plugins/adapter-build.d.ts.map +0 -1
  1321. package/dist/plugins/cache-transform.d.ts +0 -36
  1322. package/dist/plugins/cache-transform.d.ts.map +0 -1
  1323. package/dist/plugins/dev-error-overlay.d.ts.map +0 -1
  1324. package/dist/plugins/dev-logs.d.ts.map +0 -1
  1325. package/dist/plugins/dynamic-transform.d.ts +0 -72
  1326. package/dist/plugins/dynamic-transform.d.ts.map +0 -1
  1327. package/dist/plugins/server-action-exports.d.ts +0 -26
  1328. package/dist/plugins/server-action-exports.d.ts.map +0 -1
  1329. package/dist/routing/status-file-lint.d.ts +0 -33
  1330. package/dist/routing/status-file-lint.d.ts.map +0 -1
  1331. package/dist/search-params/analyze.d.ts +0 -54
  1332. package/dist/search-params/analyze.d.ts.map +0 -1
  1333. package/dist/search-params/builtin-codecs.d.ts +0 -105
  1334. package/dist/search-params/builtin-codecs.d.ts.map +0 -1
  1335. package/dist/search-params/codecs.d.ts +0 -53
  1336. package/dist/search-params/codecs.d.ts.map +0 -1
  1337. package/dist/search-params/create.d.ts +0 -106
  1338. package/dist/search-params/create.d.ts.map +0 -1
  1339. package/dist/search-params/registry.d.ts +0 -20
  1340. package/dist/search-params/registry.d.ts.map +0 -1
  1341. package/dist/server/asset-headers.d.ts +0 -42
  1342. package/dist/server/asset-headers.d.ts.map +0 -1
  1343. package/dist/server/client-module-map.d.ts +0 -47
  1344. package/dist/server/client-module-map.d.ts.map +0 -1
  1345. package/dist/server/dev-fetch-instrumentation.d.ts +0 -22
  1346. package/dist/server/dev-fetch-instrumentation.d.ts.map +0 -1
  1347. package/dist/server/dev-logger.d.ts.map +0 -1
  1348. package/dist/server/dev-span-processor.d.ts +0 -29
  1349. package/dist/server/dev-span-processor.d.ts.map +0 -1
  1350. package/dist/server/dev-warnings.d.ts +0 -129
  1351. package/dist/server/dev-warnings.d.ts.map +0 -1
  1352. package/dist/server/flush.d.ts +0 -74
  1353. package/dist/server/flush.d.ts.map +0 -1
  1354. package/dist/server/manifest-status-resolver.d.ts +0 -58
  1355. package/dist/server/manifest-status-resolver.d.ts.map +0 -1
  1356. package/dist/server/prerender.d.ts +0 -77
  1357. package/dist/server/prerender.d.ts.map +0 -1
  1358. package/dist/server/tree-builder.d.ts +0 -126
  1359. package/dist/server/tree-builder.d.ts.map +0 -1
  1360. package/dist/utils/directive-parser.d.ts +0 -70
  1361. package/dist/utils/directive-parser.d.ts.map +0 -1
  1362. package/src/cache/register-cached-function.ts +0 -103
  1363. package/src/client/browser-entry.ts +0 -678
  1364. package/src/client/head.ts +0 -61
  1365. package/src/client/link-status-provider.tsx +0 -30
  1366. package/src/client/segment-merger.ts +0 -339
  1367. package/src/client/stale-reload.ts +0 -87
  1368. package/src/client/transition-root.tsx +0 -166
  1369. package/src/client/types.ts +0 -21
  1370. package/src/client/use-navigation-pending.ts +0 -38
  1371. package/src/client/use-params.ts +0 -141
  1372. package/src/content/index.ts +0 -13
  1373. package/src/plugins/adapter-build.ts +0 -118
  1374. package/src/plugins/cache-transform.ts +0 -199
  1375. package/src/plugins/dynamic-transform.ts +0 -161
  1376. package/src/plugins/server-action-exports.ts +0 -220
  1377. package/src/routing/status-file-lint.ts +0 -112
  1378. package/src/search-params/analyze.ts +0 -192
  1379. package/src/search-params/builtin-codecs.ts +0 -228
  1380. package/src/search-params/codecs.ts +0 -153
  1381. package/src/search-params/create.ts +0 -321
  1382. package/src/search-params/registry.ts +0 -31
  1383. package/src/server/asset-headers.ts +0 -81
  1384. package/src/server/client-module-map.ts +0 -58
  1385. package/src/server/dev-fetch-instrumentation.ts +0 -96
  1386. package/src/server/dev-span-processor.ts +0 -78
  1387. package/src/server/dev-warnings.ts +0 -283
  1388. package/src/server/flush.ts +0 -182
  1389. package/src/server/manifest-status-resolver.ts +0 -215
  1390. package/src/server/prerender.ts +0 -139
  1391. package/src/server/tree-builder.ts +0 -382
  1392. package/src/shims/server-only-noop.js +0 -6
  1393. package/src/utils/directive-parser.ts +0 -529
@@ -3,36 +3,59 @@
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, mkdir, cp } 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';
10
+ import { parse as parseJsonc } from 'jsonc-parser';
9
11
  import { AsyncLocalStorage } from 'node:async_hooks';
10
- import type { TimberPlatformAdapter, TimberConfig } from './types';
11
- // Inlined from server/asset-headers.ts — adapters are loaded by Node at
12
- // Vite startup time, before Vite's module resolver is available, so cross-
13
- // directory .ts imports don't resolve.
14
- const IMMUTABLE_CACHE = 'public, max-age=31536000, immutable';
15
- const STATIC_CACHE = 'public, max-age=3600, must-revalidate';
16
-
17
- function generateHeadersFile(): string {
18
- return `# Auto-generated by @timber-js/app — static asset cache headers.
19
- # See design/25-production-deployments.md §"CDN / Edge Cache"
20
-
21
- /assets/*
22
- Cache-Control: ${IMMUTABLE_CACHE}
23
-
24
- /*
25
- Cache-Control: ${STATIC_CACHE}
26
- `;
27
- }
12
+ import type {
13
+ BuildArtifacts,
14
+ PreviewTarget,
15
+ StaticBuildArtifacts,
16
+ TimberPlatformAdapter,
17
+ TimberConfig,
18
+ } from './types.ts';
19
+ import {
20
+ runSharedBuildSteps,
21
+ buildStaticDirectoryOutput,
22
+ writeHeadersFile,
23
+ } from './build-output-helper.ts';
24
+ import { adapterBase, generateHeadersFile } from './shared.ts';
25
+ // Isomorphic, zero-import module — safe to load from an adapter, which Node's
26
+ // native ESM loader evaluates before Vite's resolver exists. Same precedent as
27
+ // `adapters/shared.ts` importing `../shared/base-path.js`.
28
+ import { RSC_KEY_HEADERS } from '../shared/rsc-cache-key.ts';
29
+ // Same reasoning: the media type the origin's own RSC gate matches on, so the
30
+ // two predicates cannot drift apart. See `shared/rsc-media-type.ts`.
31
+ import { RSC_CONTENT_TYPE } from '../shared/rsc-media-type.ts';
28
32
 
29
33
  // ─── Bindings passthrough ─────────────────────────────────────────────────
30
34
  // ALS stores the env object per-request so server components and middleware
31
35
  // can access KV, D1, DO, R2, Queues, etc. via getCloudflareBindings().
32
36
  // No global fallback — if called outside a request, it throws.
33
37
  // See design/11-platform.md §"Platform Target" and design/25-production-deployments.md.
34
-
35
- const bindingsAls = new AsyncLocalStorage<Record<string, unknown>>();
38
+ //
39
+ // The ALS is stored on globalThis via Symbol.for so it survives Vite's
40
+ // module instance split in dev mode. The Vite host process (where
41
+ // cloudflareDevBindings → runWithBindings runs) and the RSC module runner
42
+ // (where getCloudflareBindings runs) load separate instances of this file,
43
+ // each with their own module-level variables. globalThis + Symbol.for
44
+ // ensures both share the same ALS — same pattern React uses for
45
+ // Symbol.for('react.element').
46
+
47
+ const BINDINGS_ALS_KEY = Symbol.for('timber:cf-bindings-als');
48
+
49
+ function getBindingsAls(): AsyncLocalStorage<Record<string, unknown>> {
50
+ let als = (globalThis as any)[BINDINGS_ALS_KEY] as
51
+ | AsyncLocalStorage<Record<string, unknown>>
52
+ | undefined;
53
+ if (!als) {
54
+ als = new AsyncLocalStorage<Record<string, unknown>>();
55
+ (globalThis as any)[BINDINGS_ALS_KEY] = als;
56
+ }
57
+ return als;
58
+ }
36
59
 
37
60
  /**
38
61
  * Get Cloudflare Worker bindings for the current request.
@@ -55,10 +78,8 @@ const bindingsAls = new AsyncLocalStorage<Record<string, unknown>>();
55
78
  * }
56
79
  * ```
57
80
  */
58
- export function getCloudflareBindings<
59
- T extends Record<string, unknown> = Record<string, unknown>,
60
- >(): T {
61
- const env = bindingsAls.getStore();
81
+ export function getCloudflareBindings<T = Record<string, unknown>>(): T {
82
+ const env = getBindingsAls().getStore();
62
83
  if (!env) {
63
84
  throw new Error(
64
85
  'getCloudflareBindings() called outside a Cloudflare Workers request context. ' +
@@ -71,14 +92,98 @@ export function getCloudflareBindings<
71
92
 
72
93
  /**
73
94
  * Run a function with Cloudflare bindings available via getCloudflareBindings().
74
- * @internal Used by wrapWithExecutionContext.
95
+ * @internal Used by cloudflareDevBindings() to wrap dev-server requests.
75
96
  */
76
97
  export function runWithBindings<T>(env: Record<string, unknown>, fn: () => T): T {
77
- return bindingsAls.run(env, fn);
98
+ return getBindingsAls().run(env, fn);
99
+ }
100
+
101
+ // ─── Binding configuration types ──────────────────────────────────────────────
102
+ // Declarative binding config that maps to wrangler.jsonc binding sections.
103
+ // See design/35-cloudflare-primitives.md §"Binding Declarations in Adapter Config".
104
+
105
+ /** KV namespace binding. `id` defaults to `''` (filled in by wrangler or dashboard). */
106
+ export interface CloudflareKVBinding {
107
+ name: string;
108
+ id?: string;
109
+ }
110
+
111
+ /** D1 database binding. `database_id` is required (from Cloudflare dashboard). */
112
+ export interface CloudflareD1Binding {
113
+ name: string;
114
+ database_id: string;
115
+ }
116
+
117
+ /** R2 bucket binding. `bucket_name` must match the bucket created in Cloudflare. */
118
+ export interface CloudflareR2Binding {
119
+ name: string;
120
+ bucket_name: string;
121
+ }
122
+
123
+ /** Queue producer binding. `queue` is the queue name in Cloudflare. */
124
+ export interface CloudflareQueueProducer {
125
+ name: string;
126
+ queue: string;
127
+ }
128
+
129
+ /** Queue consumer declaration. Attached to the worker, not a binding name. */
130
+ export interface CloudflareQueueConsumer {
131
+ queue: string;
132
+ max_batch_size?: number;
133
+ max_retries?: number;
134
+ dead_letter_queue?: string;
135
+ }
136
+
137
+ /** Durable Object binding. `script_name` is for external DO references. */
138
+ export interface CloudflareDurableObjectBinding {
139
+ name: string;
140
+ class_name: string;
141
+ script_name?: string;
142
+ }
143
+
144
+ /**
145
+ * Declarative Cloudflare bindings configuration.
146
+ *
147
+ * These are converted to the appropriate wrangler.jsonc sections
148
+ * (`kv_namespaces`, `d1_databases`, `r2_buckets`, `queues`, `durable_objects`).
149
+ * The `wrangler` escape hatch overrides any generated binding sections
150
+ * if there's a conflict.
151
+ *
152
+ * @example
153
+ * ```ts
154
+ * cloudflare({
155
+ * bindings: {
156
+ * kv: [{ name: 'TIMBER_CACHE' }],
157
+ * d1: [{ name: 'MY_DB', database_id: 'xxxx' }],
158
+ * r2: [{ name: 'MY_BUCKET', bucket_name: 'my-bucket' }],
159
+ * queues: {
160
+ * producers: [{ name: 'EMAIL_QUEUE', queue: 'email-queue' }],
161
+ * consumers: [{ queue: 'email-queue', max_batch_size: 10 }],
162
+ * },
163
+ * durableObjects: [{ name: 'MY_DO', class_name: 'MyDurableObject' }],
164
+ * },
165
+ * })
166
+ * ```
167
+ */
168
+ export interface CloudflareBindings {
169
+ kv?: CloudflareKVBinding[];
170
+ d1?: CloudflareD1Binding[];
171
+ r2?: CloudflareR2Binding[];
172
+ queues?: {
173
+ producers?: CloudflareQueueProducer[];
174
+ consumers?: CloudflareQueueConsumer[];
175
+ };
176
+ durableObjects?: CloudflareDurableObjectBinding[];
78
177
  }
79
178
 
80
179
  /** Options for the Cloudflare Workers adapter. */
81
180
  export interface CloudflareAdapterOptions {
181
+ /**
182
+ * Worker name used in the generated wrangler.jsonc.
183
+ * @default 'timber-app'
184
+ */
185
+ name?: string;
186
+
82
187
  /**
83
188
  * Cloudflare compatibility date.
84
189
  * @default Current date in YYYY-MM-DD format at build time.
@@ -91,11 +196,42 @@ export interface CloudflareAdapterOptions {
91
196
  */
92
197
  compatibilityFlags?: string[];
93
198
 
199
+ /**
200
+ * Declarative Cloudflare bindings. Generates the appropriate
201
+ * `kv_namespaces`, `d1_databases`, `r2_buckets`, `queues`, and
202
+ * `durable_objects` sections in wrangler.jsonc.
203
+ *
204
+ * If both `bindings` and `wrangler` specify the same section,
205
+ * `wrangler` wins (it's the escape hatch).
206
+ */
207
+ bindings?: CloudflareBindings;
208
+
94
209
  /**
95
210
  * Custom wrangler.jsonc fields to merge.
96
- * Overrides generated values.
211
+ * Overrides generated values (including bindings-generated sections).
97
212
  */
98
213
  wrangler?: Record<string, unknown>;
214
+
215
+ /**
216
+ * Path to a module that exports additional Worker handlers (queue, scheduled, email, etc.).
217
+ * The module is imported in the generated `_worker.js` and its named exports are
218
+ * spread into the default export alongside `fetch`.
219
+ *
220
+ * The module receives `(batch/event, env, ctx)` — standard Cloudflare handler signatures.
221
+ * It does NOT have access to timber's request pipeline (no ALS, no getCloudflareBindings).
222
+ * Use `env` directly for bindings.
223
+ *
224
+ * @example
225
+ * ```ts
226
+ * // timber.config.ts
227
+ * adapter: cloudflare({ workerHandlers: './src/worker-handlers.ts' })
228
+ *
229
+ * // src/worker-handlers.ts
230
+ * export async function queue(batch, env) { ... }
231
+ * export async function scheduled(controller, env, ctx) { ... }
232
+ * ```
233
+ */
234
+ workerHandlers?: string;
99
235
  }
100
236
 
101
237
  /**
@@ -115,164 +251,648 @@ export function cloudflare(options: CloudflareAdapterOptions = {}): TimberPlatfo
115
251
  return {
116
252
  name: 'cloudflare',
117
253
 
118
- async buildOutput(config: TimberConfig, buildDir: string) {
119
- const outDir = join(buildDir, 'cloudflare');
120
- await mkdir(outDir, { recursive: true });
121
-
122
- // Copy client assets to static output.
123
- // When client JavaScript is disabled, skip .js files — only CSS,
124
- // fonts, images, and other static assets are needed.
125
- const clientDir = join(buildDir, 'client');
126
- const staticDir = join(outDir, 'static');
127
- await mkdir(staticDir, { recursive: true });
128
- await cp(clientDir, staticDir, {
129
- recursive: true,
130
- filter: config.clientJavascriptDisabled ? (src: string) => !src.endsWith('.js') : undefined,
131
- }).catch(() => {
132
- // Client dir may not exist when client JavaScript is disabled
254
+ async buildOutput(config: TimberConfig, artifacts: BuildArtifacts) {
255
+ const outDir = join(artifacts.outputDir, 'cloudflare');
256
+
257
+ // ── Static mode: Cloudflare Pages-compatible output ──────────────
258
+ // No Workers entry — just HTML files + client assets in a flat
259
+ // directory that Cloudflare Pages can serve directly.
260
+ if (artifacts.output === 'static') {
261
+ await buildStaticOutput(config, artifacts, outDir, options);
262
+ return;
263
+ }
264
+
265
+ // Clean stale prebuilt artifacts from prior builds.
266
+ await rm(join(outDir, 'prebuilt'), { recursive: true, force: true }).catch(() => {});
267
+ await rm(join(outDir, 'static', 'prebuilt'), { recursive: true, force: true }).catch(
268
+ () => {}
269
+ );
270
+
271
+ // Steps 1–5: shared across all adapters (mkdir, copy client/rsc/ssr,
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.
275
+ await runSharedBuildSteps({
276
+ config,
277
+ artifacts: { ...artifacts, prebuilt: undefined },
278
+ outDir,
279
+ publicDirName: 'static',
133
280
  });
134
281
 
135
- // Write _headers file for static asset cache control.
136
- // Cloudflare Workers Static Assets reads this to set Cache-Control
137
- // headers on responses. Hashed assets get immutable; others get 1h.
138
- await writeFile(join(staticDir, '_headers'), generateHeadersFile());
139
-
140
- // Copy server bundles (rsc + ssr) into the output directory.
141
- // These are already fully bundled by Vite with resolve.noExternal: true.
142
- const rscDir = join(buildDir, 'rsc');
143
- const ssrDir = join(buildDir, 'ssr');
144
- await cp(rscDir, join(outDir, 'rsc'), { recursive: true });
145
- await cp(ssrDir, join(outDir, 'ssr'), { recursive: true });
146
-
147
- // Write the build manifest init module (if manifest data was produced).
148
- // This must be imported before the RSC handler so the global is set
149
- // when virtual:timber-build-manifest evaluates.
150
- if (config.manifestInit) {
151
- await writeFile(join(outDir, '_timber-manifest-init.js'), config.manifestInit);
282
+ // Compile optional worker handlers (queue, scheduled, etc.)
283
+ // Uses Vite's build API to bundle the TypeScript source into ESM.
284
+ let hasWorkerHandlers = false;
285
+ if (options.workerHandlers) {
286
+ const handlersEntry = join(process.cwd(), options.workerHandlers);
287
+ const { build: viteBuild } = await import('vite');
288
+ await viteBuild({
289
+ configFile: false,
290
+ logLevel: 'info',
291
+ build: {
292
+ lib: {
293
+ entry: handlersEntry,
294
+ formats: ['es'],
295
+ fileName: () => '_worker-handlers.js',
296
+ },
297
+ outDir,
298
+ emptyOutDir: false,
299
+ minify: false,
300
+ rollupOptions: {
301
+ external: [/^node:/, /^cloudflare:/],
302
+ },
303
+ },
304
+ });
305
+ hasWorkerHandlers = true;
152
306
  }
153
307
 
308
+ // Inline prebuilt flight payloads into the worker JS module (TIM-1162).
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;
314
+ await writeFile(
315
+ join(outDir, '_timber-prebuilt-source.js'),
316
+ generatePrebuiltSourceModule(prebuiltData)
317
+ );
318
+
319
+ // Write the runtime init module — sets process.env.TIMBER_RUNTIME
320
+ // BEFORE the RSC entry evaluates (ESM import order). Without this,
321
+ // createRequestHandler's auto-wire for WorkersCachePurge would not
322
+ // detect the Cloudflare runtime (TIM-1170).
323
+ await writeFile(join(outDir, '_timber-runtime-init.js'), generateRuntimeInitModule());
324
+
154
325
  // Generate the Workers entry point
155
- const hasManifestInit = !!config.manifestInit;
156
- const workerEntry = generateWorkerEntry(outDir, outDir, hasManifestInit);
326
+ const hasManifestInit = !!artifacts.manifestInit;
327
+ const workerEntry = generateWorkerEntry(hasManifestInit, hasWorkerHandlers);
157
328
  await writeFile(join(outDir, '_worker.js'), workerEntry);
158
329
 
159
- // Generate wrangler.jsonc
160
- const wranglerConfig = generateWranglerConfig(config, options);
330
+ // Generate wrangler.jsonc — merges user's wrangler config from disk if present
331
+ const root = config.root ?? process.cwd();
332
+ const userConfig = await readUserWranglerConfig(root);
333
+ const wranglerConfig = generateWranglerConfig(config, options, userConfig);
161
334
  await writeFile(join(outDir, 'wrangler.jsonc'), JSON.stringify(wranglerConfig, null, 2));
162
335
  },
163
336
 
164
- async preview(_config: TimberConfig, buildDir: string) {
165
- const cmd = generatePreviewCommand(buildDir);
166
- await spawnPreviewProcess(cmd.command, cmd.args, cmd.cwd);
167
- },
168
-
169
- // Default no-op. wrapWithExecutionContext() replaces this per-request
170
- // with a function that routes to ctx.waitUntil().
171
- waitUntil(_promise: Promise<unknown>) {},
172
- };
173
- }
174
-
175
- /**
176
- * Wrap a timber request handler to bind the Cloudflare execution context
177
- * for `waitUntil()` support and env bindings passthrough.
178
- * Called from the generated worker entry.
179
- *
180
- * This function:
181
- * 1. Binds `adapter.waitUntil()` to `ctx.waitUntil()` per-request
182
- * 2. Makes `env` accessible via `getCloudflareBindings()` per-request via ALS
183
- */
184
- export function wrapWithExecutionContext(
185
- adapter: TimberPlatformAdapter,
186
- handler: (req: Request) => Promise<Response>
187
- ): ExportedHandler<Record<string, unknown>> {
188
- return {
189
- async fetch(
190
- request: Request,
191
- env: Record<string, unknown>,
192
- ctx: ExecutionContext
193
- ): Promise<Response> {
194
- // Bind the adapter's waitUntil to the Workers execution context
195
- const originalWaitUntil = adapter.waitUntil;
196
- adapter.waitUntil = (promise: Promise<unknown>) => {
197
- ctx.waitUntil(promise);
198
- };
199
-
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-'));
200
347
  try {
201
- // Run the handler within ALS so getCloudflareBindings() works
202
- return await runWithBindings(env, () => handler(request));
348
+ await stagePagesPreview(join(target.outputDir, 'cloudflare'), base, stage);
349
+ const cmd = generatePreviewCommand(target, stage);
350
+ await spawnPreviewProcess(cmd.command, cmd.args, cmd.cwd);
203
351
  } finally {
204
- // Restore (in case adapter is reused across isolate resets)
205
- adapter.waitUntil = originalWaitUntil;
352
+ await rm(stage, { recursive: true, force: true });
206
353
  }
207
354
  },
355
+
356
+ // No adapter-level waitUntil: on Workers there is no ambient
357
+ // ExecutionContext outside a request, so support is provided
358
+ // per-request by the generated _worker.js, which bridges
359
+ // ctx.waitUntil() into the ALS via runWithWaitUntil().
360
+ // See design/11-platform.md §"waitUntil()".
208
361
  };
209
362
  }
210
363
 
211
364
  // ─── Exported helpers (used by tests and build) ─────────────────────────────
212
365
 
213
366
  /** @internal Exported for testing. */
214
- export function generateWorkerEntry(
215
- buildDir: string,
216
- outDir: string,
217
- hasManifestInit = false
218
- ): string {
219
- // The RSC entry is the main request handler — it exports the fetch handler as default.
220
- // The Vite RSC plugin outputs it to rsc/index.js.
221
- let rscEntryRelative = relative(outDir, join(buildDir, 'rsc', 'index.js'));
222
- // Ensure the import path starts with ./ for ESM compatibility
223
- if (!rscEntryRelative.startsWith('.')) {
224
- rscEntryRelative = './' + rscEntryRelative;
225
- }
226
-
367
+ export function generateWorkerEntry(hasManifestInit = false, hasWorkerHandlers = false): string {
227
368
  // Build manifest init must be imported before the RSC handler so that
228
369
  // globalThis.__TIMBER_BUILD_MANIFEST__ is set when the virtual module evaluates.
229
370
  // ESM guarantees imports are evaluated in order.
230
371
  const manifestImport = hasManifestInit ? "import './_timber-manifest-init.js'\n" : '';
231
372
 
373
+ // Optional additional Worker handlers (queue, scheduled, email, etc.)
374
+ // Compiled by buildOutput via Vite's build API into _worker-handlers.js.
375
+ // The module's named exports are spread into the default export alongside fetch.
376
+ const handlersImport = hasWorkerHandlers
377
+ ? "import * as workerHandlers from './_worker-handlers.js'\n"
378
+ : '';
379
+ const handlersSpread = hasWorkerHandlers ? ' ...workerHandlers,\n' : '';
380
+
232
381
  return `// Generated by @timber-js/app/adapters/cloudflare
233
382
  // Do not edit — this file is regenerated on each build.
234
383
 
235
- ${manifestImport}import handler from '${rscEntryRelative}'
384
+ import { AsyncLocalStorage } from 'node:async_hooks'
385
+ // Side-effect imports: evaluated IN ORDER before the _worker.js body runs.
386
+ // _timber-runtime-init.js sets TIMBER_RUNTIME before createRequestHandler()
387
+ // runs (during the RSC entry's top-level await) so the auto-wire for
388
+ // WorkersCachePurge can detect the Cloudflare runtime (TIM-1170).
389
+ // _timber-prebuilt-source.js sets globalThis.__TIMBER_PREBUILT_SOURCE__
390
+ // for cache.component payloads.
391
+ import './_timber-runtime-init.js'
392
+ import './_timber-prebuilt-source.js'
393
+ ${manifestImport}import handler, { runWithWaitUntil, runWithWorkersCachePurge, stripHeadBody } from './rsc/index.js'
394
+ ${handlersImport}
395
+
396
+ // Bind Cloudflare env to ALS so getCloudflareBindings() works at runtime.
397
+ // Uses the same Symbol.for key as getCloudflareBindings() reads from.
398
+ const ALS_KEY = Symbol.for('timber:cf-bindings-als')
399
+ let bindingsAls = globalThis[ALS_KEY]
400
+ if (!bindingsAls) {
401
+ bindingsAls = new AsyncLocalStorage()
402
+ globalThis[ALS_KEY] = bindingsAls
403
+ }
404
+
405
+ // Register timber's platform tracer so pipeline phase spans (timber.proxy,
406
+ // timber.middleware, timber.render, timber.access, timber.action, …) appear
407
+ // as native Cloudflare spans in the Observability dashboard, nested under
408
+ // the auto-instrumented fetch/KV/D1 spans. Requires observability.traces
409
+ // enabled in wrangler.jsonc (generated by default).
410
+ //
411
+ // Lazily imported and guarded: runtimes without the custom spans API
412
+ // (older compatibility dates, older local workerd) fall back to OTEL-only
413
+ // emission. withSpan() in the framework composes both channels.
414
+ const TRACER_KEY = Symbol.for('timber:platform-tracer')
415
+ let tracerInit
416
+ function initPlatformTracer() {
417
+ tracerInit ??= import('cloudflare:workers')
418
+ .then(({ tracing }) => {
419
+ if (tracing && typeof tracing.enterSpan === 'function') {
420
+ globalThis[TRACER_KEY] ??= {
421
+ enterSpan: (name, fn) => tracing.enterSpan(name, fn),
422
+ }
423
+ }
424
+ })
425
+ .catch(() => {})
426
+ return tracerInit
427
+ }
428
+
429
+ // The \`Vary\` tokens this cache can serve a correct answer for.
430
+ //
431
+ // Cloudflare's Cache API keys on the request URL. It does not implement
432
+ // RFC 9111 §4.1 secondary key selection, so a stored response is handed to
433
+ // every request for that URL regardless of what \`Vary\` nominates — except
434
+ // \`Accept-Encoding\`, which the platform segregates itself. Storing a
435
+ // response whose \`Vary\` says "this answer is specific to header H" under a
436
+ // key that ignores H is cross-client reuse (TIM-1269): a developer writing
437
+ // the correct \`public, s-maxage=60\` + \`Vary: Cookie\` gets their logged-in
438
+ // page served to anonymous visitors. Refusing to store is the conservative
439
+ // answer, and the only one available without rewriting the key.
440
+ //
441
+ // The framework's own tokens are on this list because the adapter already
442
+ // segregates them, more strictly than \`Vary\` would:
443
+ //
444
+ // - \`Accept\` — \`isRsc\` above excludes \`text/x-component\` from both lookup
445
+ // and store, so the HTML/Flight split \`Vary: Accept\` exists to protect
446
+ // never reaches this cache in the first place.
447
+ // - \`X-Timber-State-Tree\`, \`X-Timber-URL\`, \`X-Timber-Deployment-Id\` — the
448
+ // origin reads all three only on RSC requests (version skew at
449
+ // \`server/pipeline-phases.ts\`, interception rewrites likewise, state-tree
450
+ // diffing at \`server/rsc-entry/render-route.ts\`). On the non-RSC requests
451
+ // this cache stores, they cannot change the response.
452
+ //
453
+ // That second bullet is a coupling, not an observation: if any of those
454
+ // headers ever starts varying a document response, this list is wrong and
455
+ // the cache poisons. Because the list is derived, a header added to
456
+ // \`RSC_KEY_HEADERS\` inherits the exemption silently — so
457
+ // \`tests/adapters/cloudflare-vary.test.ts\` fails until that header is named
458
+ // there alongside the evidence for its gate, and the gates themselves are
459
+ // covered there, in \`tests/render-route.test.ts\`, and in
460
+ // \`tests/interception-x-timber-url.test.ts\`.
461
+ //
462
+ // Interpolated from \`RSC_KEY_HEADERS\` rather than spelled again — "which
463
+ // headers vary an RSC response" has one answer, and a hand-copied second
464
+ // list here would drift silently on the fallback path nobody exercises.
465
+ //
466
+ // Known residual: a route handler that content-negotiates on \`Accept\`
467
+ // (JSON vs HTML) *and* marks itself \`public\` is still mis-keyed, because the
468
+ // \`isRsc\` split is binary and does not separate those two. That is no worse
469
+ // than the pre-TIM-1269 behaviour, which stored every \`Vary\` but \`*\`.
470
+ const VARY_HONORED = new Set(${JSON.stringify(['accept-encoding', ...RSC_KEY_HEADERS.map((h) => h.toLowerCase())])})
471
+
472
+ // Applied to BOTH sides of the cache — what may be stored, and what a hit
473
+ // may serve. Refusing to store only stops new poisoning: entries a previous
474
+ // deployment wrote under the old predicate stay servable for whatever
475
+ // s-maxage the developer chose, which can be a day. Checking on the way out
476
+ // makes the fix take effect on deploy rather than on expiry, and costs one
477
+ // header read per hit. A rejected entry falls through to the origin and is
478
+ // then declined by the same predicate on the way back in, so it is not
479
+ // rewritten — it simply ages out.
480
+ function canHonorVary(vary) {
481
+ // Absent or empty Vary nominates nothing — the URL is the whole key.
482
+ if (!vary) return true
483
+ return vary.split(',').every((token) => VARY_HONORED.has(token.trim().toLowerCase()))
484
+ }
485
+
486
+ export default {
487
+ ${handlersSpread} async fetch(request, env, ctx) {
488
+ // One-time on first request; resolved-promise await thereafter.
489
+ await initPlatformTracer()
490
+
491
+ // Edge-cache GET/HEAD responses via the Cache API (caches.default).
492
+ // caches.default and ctx.cache.purge() operate on the same underlying
493
+ // Cloudflare CDN cache — "independent" in the CF docs means independent
494
+ // write APIs, not independent stores (TIM-1172). Tag-based purging via
495
+ // revalidateTag() clears entries stored here when their Cache-Tag header
496
+ // matches the invalidated tag. See design/25 §TIM-1172.
497
+ //
498
+ // RSC navigation requests (Accept: text/x-component) are excluded.
499
+ // Their varying inputs are now in the URL via ?_rsc= (TIM-1268), but
500
+ // this cache keys on the request URL alone and cannot honour Vary, so a
501
+ // payload request that arrives without the param — stripped query,
502
+ // hand-rolled client — would share a key with the document.
503
+ //
504
+ // This exclusion is load-bearing in the other direction too: the store
505
+ // predicate below treats "Vary: Accept" as honoured *because* of it
506
+ // (see VARY_HONORED). Removing it would make that allowlist unsound.
507
+ const isRsc = request.headers.get('Accept')?.includes(${JSON.stringify(RSC_CONTENT_TYPE)})
508
+ const reqCc = request.headers.get('Cache-Control') || ''
509
+ const bypassCache = reqCc.includes('no-cache') || reqCc.includes('max-age=0')
510
+ || request.headers.has('Pragma')
511
+ const cacheable = !isRsc && !bypassCache
512
+ && (request.method === 'GET' || request.method === 'HEAD')
513
+ const cache = cacheable && typeof caches !== 'undefined' ? caches.default : null
514
+ if (cache) {
515
+ const cached = await cache.match(request)
516
+ // A hit whose Vary this cache cannot key on is treated as a miss —
517
+ // see canHonorVary. Entries written before that predicate existed are
518
+ // exactly the ones that would be served to the wrong client.
519
+ if (cached) {
520
+ if (canHonorVary(cached.headers.get('Vary'))) return stripHeadBody(cached, request.method)
521
+ // Declining the hit means nobody will ever read this body. Release
522
+ // it rather than leaving the stream dangling for the rest of the
523
+ // request (design/02-rendering-pipeline.md §"Cancel Readers When You
524
+ // No Longer Need the Stream").
525
+ cached.body?.cancel().catch(() => {})
526
+ }
527
+ }
528
+
529
+ // Bridge ctx.cache into the per-request ALS so WorkersCachePurge can
530
+ // call ctx.cache.purge({ tags }) during cache.invalidate/revalidateTag.
531
+ // Workers Cache is available on all Cloudflare plans — no API token needed.
532
+ const workersCacheCtx = ctx.cache && typeof ctx.cache.purge === 'function' ? ctx.cache : null
533
+ const runHandler = () =>
534
+ runWithWaitUntil((promise) => ctx.waitUntil(promise), () => handler(request))
535
+ const response = await bindingsAls.run(env, () =>
536
+ workersCacheCtx
537
+ ? runWithWorkersCachePurge(workersCacheCtx, runHandler)
538
+ : runHandler()
539
+ )
540
+
541
+ // Cache public responses at the edge. A response is edge-cacheable if
542
+ // it has 'public' or 's-maxage' (a shared-cache TTL directive) and no
543
+ // 'no-store' or 'private'. Cloudflare's cache.put() only accepts GET
544
+ // requests and rejects 206, so only store GET 200s. HEAD requests
545
+ // are served from cache.match() hits with the body stripped (TIM-1325).
546
+ // See design/25-production-deployments.md §"CDN / Edge Cache".
547
+ if (cache && request.method === 'GET' && response.status === 200) {
548
+ const cc = response.headers.get('Cache-Control')
549
+ if (cc && !cc.includes('no-store') && !cc.includes('private')
550
+ && (cc.includes('public') || cc.includes('s-maxage'))
551
+ && canHonorVary(response.headers.get('Vary'))
552
+ && !response.headers.has('Set-Cookie')) {
553
+ ctx.waitUntil(cache.put(request, response.clone()))
554
+ }
555
+ }
556
+
557
+ return response
558
+ }
559
+ }
560
+ `;
561
+ }
562
+
563
+ /** Build-time prebuilt data read from `.timber/dist/prebuilt/`. */
564
+ export interface PrebuiltModuleData {
565
+ /** Raw manifest.json content. */
566
+ manifestJson: string;
567
+ /** Payload file paths and their raw bytes. */
568
+ payloads: Array<{ file: string; bytes: Buffer }>;
569
+ }
570
+
571
+ /**
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.
575
+ *
576
+ * @internal Exported for testing.
577
+ */
578
+ export async function readPrebuiltData(prebuiltDir: string): Promise<PrebuiltModuleData> {
579
+ const manifestJson = await readFile(join(prebuiltDir, 'manifest.json'), 'utf-8');
580
+ const payloads: PrebuiltModuleData['payloads'] = [];
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 });
590
+ }
591
+ }
592
+ }
593
+ return { manifestJson, payloads };
594
+ }
595
+
596
+ /**
597
+ * Generate the prebuilt payload source module for Cloudflare Workers.
598
+ *
599
+ * Inlines manifest JSON and flight payload bytes directly into the module
600
+ * so they're part of the worker's JS bundle — no external Text/Data module
601
+ * imports needed. This avoids depending on wrangler's find_additional_modules
602
+ * to discover non-JS files, which doesn't reliably resolve Text/Data imports.
603
+ *
604
+ * @internal Exported for testing.
605
+ */
606
+ export function generatePrebuiltSourceModule(data: PrebuiltModuleData | null): string {
607
+ if (!data) {
608
+ return `// Generated by @timber-js/app/adapters/cloudflare
609
+ // No prebuilt artifacts — all cache.component wrappers render dynamically.
610
+ globalThis.__TIMBER_PREBUILT_SOURCE__ = {
611
+ async loadManifest() { return null },
612
+ async readPayload() { return null },
613
+ }
614
+ `;
615
+ }
616
+
617
+ const entries: string[] = [];
618
+ for (const { file, bytes } of data.payloads) {
619
+ const b64 = Buffer.from(bytes).toString('base64');
620
+ entries.push(` ${JSON.stringify(file)}: ${JSON.stringify(b64)}`);
621
+ }
622
+
623
+ return `// Generated by @timber-js/app/adapters/cloudflare
624
+ // Prebuilt payload source — inlines cache.component flight payloads
625
+ // directly into the worker bundle (TIM-1162).
626
+ const _manifest = ${data.manifestJson.trim()}
627
+
628
+ function _decode(b64) {
629
+ const bin = atob(b64)
630
+ const buf = new Uint8Array(bin.length)
631
+ for (let i = 0; i < bin.length; i++) buf[i] = bin.charCodeAt(i)
632
+ return buf
633
+ }
634
+
635
+ const _payloads = {
636
+ ${entries.join(',\n')}
637
+ }
236
638
 
237
- // Set TIMBER_RUNTIME for instrumentation.ts conditional SDK initialization.
238
- // See design/25-production-deployments.md §"TIMBER_RUNTIME".
639
+ globalThis.__TIMBER_PREBUILT_SOURCE__ = {
640
+ async loadManifest() { return _manifest },
641
+ async readPayload(file) {
642
+ const b64 = _payloads[file]
643
+ return b64 ? _decode(b64) : null
644
+ },
645
+ }
646
+ `;
647
+ }
648
+
649
+ /**
650
+ * Generate the runtime init module that sets TIMBER_RUNTIME before the
651
+ * RSC entry evaluates. Imported as a side-effect module in _worker.js.
652
+ *
653
+ * @internal Exported for testing.
654
+ */
655
+ export function generateRuntimeInitModule(): string {
656
+ return `// Generated by @timber-js/app/adapters/cloudflare
657
+ // Sets TIMBER_RUNTIME before the RSC handler evaluates (TIM-1170).
658
+ // Must be a separate module imported before rsc/index.js so that ESM
659
+ // evaluation order guarantees the env var is set when
660
+ // createRequestHandler() runs its auto-wire logic.
239
661
  globalThis.process ??= { env: {} }
240
662
  process.env.TIMBER_RUNTIME = 'cloudflare'
241
-
242
- export default { fetch: handler }
243
663
  `;
244
664
  }
245
665
 
666
+ /** Wrangler binding sections generated from `CloudflareBindings`. */
667
+ export interface WranglerBindingsConfig {
668
+ kv_namespaces?: Array<{ binding: string; id: string }>;
669
+ d1_databases?: Array<{ binding: string; database_id: string }>;
670
+ r2_buckets?: Array<{ binding: string; bucket_name: string }>;
671
+ queues?: {
672
+ producers?: Array<{ binding: string; queue: string }>;
673
+ consumers?: Array<Record<string, unknown>>;
674
+ };
675
+ durable_objects?: {
676
+ bindings: Array<Record<string, string>>;
677
+ };
678
+ }
679
+
680
+ /**
681
+ * Convert declarative `CloudflareBindings` into wrangler.jsonc binding sections.
682
+ *
683
+ * Maps:
684
+ * - `kv` → `kv_namespaces`
685
+ * - `d1` → `d1_databases`
686
+ * - `r2` → `r2_buckets`
687
+ * - `queues` → `queues` (producers + consumers)
688
+ * - `durableObjects` → `durable_objects`
689
+ *
690
+ * Empty arrays are omitted from the output.
691
+ *
692
+ * @internal Exported for testing.
693
+ */
694
+ export function generateBindingsConfig(
695
+ bindings: CloudflareBindings | undefined
696
+ ): WranglerBindingsConfig {
697
+ if (!bindings) return {};
698
+
699
+ const result: WranglerBindingsConfig = {};
700
+
701
+ // KV namespaces
702
+ if (bindings.kv && bindings.kv.length > 0) {
703
+ result.kv_namespaces = bindings.kv.map((kv) => ({
704
+ binding: kv.name,
705
+ id: kv.id ?? '',
706
+ }));
707
+ }
708
+
709
+ // D1 databases
710
+ if (bindings.d1 && bindings.d1.length > 0) {
711
+ result.d1_databases = bindings.d1.map((d1) => ({
712
+ binding: d1.name,
713
+ database_id: d1.database_id,
714
+ }));
715
+ }
716
+
717
+ // R2 buckets
718
+ if (bindings.r2 && bindings.r2.length > 0) {
719
+ result.r2_buckets = bindings.r2.map((r2) => ({
720
+ binding: r2.name,
721
+ bucket_name: r2.bucket_name,
722
+ }));
723
+ }
724
+
725
+ // Queues (producers and/or consumers)
726
+ if (bindings.queues) {
727
+ const queues: Record<string, unknown> = {};
728
+ if (bindings.queues.producers && bindings.queues.producers.length > 0) {
729
+ queues.producers = bindings.queues.producers.map((p) => ({
730
+ binding: p.name,
731
+ queue: p.queue,
732
+ }));
733
+ }
734
+ if (bindings.queues.consumers && bindings.queues.consumers.length > 0) {
735
+ queues.consumers = bindings.queues.consumers.map((c) => {
736
+ const consumer: Record<string, unknown> = { queue: c.queue };
737
+ if (c.max_batch_size !== undefined) consumer.max_batch_size = c.max_batch_size;
738
+ if (c.max_retries !== undefined) consumer.max_retries = c.max_retries;
739
+ if (c.dead_letter_queue !== undefined) consumer.dead_letter_queue = c.dead_letter_queue;
740
+ return consumer;
741
+ });
742
+ }
743
+ if (Object.keys(queues).length > 0) {
744
+ result.queues = queues;
745
+ }
746
+ }
747
+
748
+ // Durable Objects
749
+ if (bindings.durableObjects && bindings.durableObjects.length > 0) {
750
+ result.durable_objects = {
751
+ bindings: bindings.durableObjects.map((dobj) => {
752
+ const entry: Record<string, string> = {
753
+ name: dobj.name,
754
+ class_name: dobj.class_name,
755
+ };
756
+ if (dobj.script_name) entry.script_name = dobj.script_name;
757
+ return entry;
758
+ }),
759
+ };
760
+ }
761
+
762
+ return result;
763
+ }
764
+
765
+ /**
766
+ * One-level deep merge: for each key in `override`, if both the base and
767
+ * override values are plain objects (not arrays, not null), merge their
768
+ * keys with override winning on conflicts. Everything else (primitives,
769
+ * arrays, null) is replaced outright — matching the intuitive behavior
770
+ * where `kv_namespaces: [...]` replaces fully but
771
+ * `durable_objects: { migrations }` merges with generated `bindings`.
772
+ */
773
+ function shallowDeepMerge(
774
+ base: Record<string, unknown>,
775
+ override: Record<string, unknown>
776
+ ): Record<string, unknown> {
777
+ const result = { ...base };
778
+ for (const key of Object.keys(override)) {
779
+ const baseVal = result[key];
780
+ const overVal = override[key];
781
+ if (isPlainObject(baseVal) && isPlainObject(overVal)) {
782
+ result[key] = { ...baseVal, ...overVal };
783
+ } else {
784
+ result[key] = overVal;
785
+ }
786
+ }
787
+ return result;
788
+ }
789
+
790
+ /** True for `{}` literals — false for arrays, null, Date, etc. */
791
+ function isPlainObject(val: unknown): val is Record<string, unknown> {
792
+ return val !== null && typeof val === 'object' && !Array.isArray(val);
793
+ }
794
+
795
+ const WRANGLER_CONFIG_FILES = ['wrangler.jsonc', 'wrangler.json'] as const;
796
+
797
+ /**
798
+ * Read the user's wrangler config from the project root, if one exists.
799
+ * Checks wrangler.jsonc first, then wrangler.json.
800
+ * @internal Exported for testing.
801
+ */
802
+ export async function readUserWranglerConfig(
803
+ root: string
804
+ ): Promise<Record<string, unknown> | null> {
805
+ for (const filename of WRANGLER_CONFIG_FILES) {
806
+ const filepath = join(root, filename);
807
+ try {
808
+ await access(filepath);
809
+ } catch {
810
+ continue;
811
+ }
812
+ const content = await readFile(filepath, 'utf-8');
813
+ return parseJsonc(content) as Record<string, unknown>;
814
+ }
815
+ return null;
816
+ }
817
+
246
818
  /** @internal Exported for testing. */
247
819
  export function generateWranglerConfig(
248
820
  config: TimberConfig,
249
- options: CloudflareAdapterOptions
821
+ options: CloudflareAdapterOptions,
822
+ userConfig?: Record<string, unknown> | null
250
823
  ): Record<string, unknown> {
251
- const compatDate = options.compatibilityDate ?? new Date().toISOString().slice(0, 10);
252
-
253
- const flags = options.compatibilityFlags ?? ['nodejs_compat'];
254
-
255
824
  const base: Record<string, unknown> = {
256
825
  name: 'timber-app',
257
826
  main: '_worker.js',
258
- compatibility_date: compatDate,
259
- compatibility_flags: flags,
260
- // The build output is already fully bundled by Vite — skip wrangler's
261
- // esbuild pass to avoid issues with top-level await and module format.
827
+ compatibility_date: new Date().toISOString().slice(0, 10),
828
+ compatibility_flags: ['nodejs_compat'],
262
829
  no_bundle: true,
263
830
  find_additional_modules: true,
264
831
  rules: [{ type: 'ESModule', globs: ['**/*.js'] }],
265
832
  assets: {
266
833
  directory: './static',
834
+ binding: 'ASSETS',
835
+ },
836
+ observability: {
837
+ traces: { enabled: true },
267
838
  },
268
839
  };
269
840
 
270
- // Merge user overrides
841
+ // Layer 1: user's wrangler.jsonc / wrangler.json from disk
842
+ let merged: Record<string, unknown> = userConfig ? shallowDeepMerge(base, userConfig) : base;
843
+
844
+ // Layer 2: explicit adapter options override disk config
845
+ const explicit: Record<string, unknown> = {};
846
+ if (options.name != null) explicit.name = options.name;
847
+ if (options.compatibilityDate != null) explicit.compatibility_date = options.compatibilityDate;
848
+ if (options.compatibilityFlags != null) explicit.compatibility_flags = options.compatibilityFlags;
849
+ if (Object.keys(explicit).length > 0) {
850
+ merged = { ...merged, ...explicit };
851
+ }
852
+
853
+ // Layer 3: declarative bindings
854
+ const bindingsConfig = generateBindingsConfig(options.bindings);
855
+ merged = shallowDeepMerge(merged, bindingsConfig as Record<string, unknown>);
856
+
857
+ // Layer 4: wrangler escape hatch — highest priority, deep merge.
271
858
  if (options.wrangler) {
272
- return { ...base, ...options.wrangler };
859
+ merged = shallowDeepMerge(merged, options.wrangler);
273
860
  }
274
861
 
275
- return base;
862
+ // Generated config targets a single environment — env blocks can override
863
+ // main/assets per-environment and break the build output.
864
+ delete merged.env;
865
+
866
+ // These fields are required for the build output to work correctly.
867
+ merged.main = '_worker.js';
868
+ merged.find_additional_modules = true;
869
+
870
+ return merged;
871
+ }
872
+
873
+ // ─── Static output ──────────────────────────────────────────────────────────
874
+
875
+ /**
876
+ * Build a Cloudflare Pages-compatible static output directory.
877
+ *
878
+ * No Workers entry — just pre-rendered HTML, RSC flight files, and client
879
+ * assets in a flat directory. Uses the shared buildStaticDirectoryOutput
880
+ * then adds a `_headers` file for cache control.
881
+ *
882
+ * @internal Exported for testing.
883
+ */
884
+ export async function buildStaticOutput(
885
+ config: TimberConfig,
886
+ artifacts: StaticBuildArtifacts,
887
+ outDir: string,
888
+ _options: CloudflareAdapterOptions
889
+ ): Promise<void> {
890
+ // Cloudflare Pages serves from the outDir root directly (no subdirectory).
891
+ // Use '.' as publicDirName so files land at outDir/ not outDir/static/.
892
+ await buildStaticDirectoryOutput(config, artifacts, outDir, '.');
893
+
894
+ // Write _headers file for cache control + content-type rules.
895
+ await writeHeadersFile(outDir, config, artifacts);
276
896
  }
277
897
 
278
898
  // ─── Preview ─────────────────────────────────────────────────────────────────
@@ -284,9 +904,22 @@ export interface PreviewCommand {
284
904
  cwd: string;
285
905
  }
286
906
 
287
- /** @internal Exported for testing. */
288
- export function generatePreviewCommand(buildDir: string): PreviewCommand {
289
- 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');
290
923
  return {
291
924
  command: 'wrangler',
292
925
  args: ['dev', '--local', '--config', join(cfDir, 'wrangler.jsonc')],
@@ -294,6 +927,35 @@ export function generatePreviewCommand(buildDir: string): PreviewCommand {
294
927
  };
295
928
  }
296
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
+
297
959
  /**
298
960
  * Spawn a long-running preview process and pipe stdio to the parent.
299
961
  * Resolves when the process exits.
@@ -310,16 +972,13 @@ function spawnPreviewProcess(command: string, args: string[], cwd: string): Prom
310
972
  }
311
973
 
312
974
  // ─── Cloudflare Workers type stubs ───────────────────────────────────────────
313
- // Minimal type declarations so this file compiles without @cloudflare/workers-types.
314
- // In production builds, users install @cloudflare/workers-types themselves.
315
-
316
- declare global {
317
- interface ExecutionContext {
318
- waitUntil(promise: Promise<unknown>): void;
319
- passThroughOnException(): void;
320
- }
321
-
322
- interface ExportedHandler<Env = Record<string, unknown>> {
323
- fetch?(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> | Response;
324
- }
975
+ // Local type declarations so this file compiles without @cloudflare/workers-types.
976
+ // These are NOT declared globally — that would clash with @cloudflare/workers-types
977
+ // when users install it. Instead, they're module-scoped and used only within
978
+ // this file's function signatures.
979
+
980
+ /** @internal Minimal stub — use @cloudflare/workers-types for full types. */
981
+ export interface CfExecutionContext {
982
+ waitUntil(promise: Promise<unknown>): void;
983
+ passThroughOnException(): void;
325
984
  }