@timber-js/app 0.2.0-alpha.192 → 0.2.0-alpha.195

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 (678) hide show
  1. package/agent-skill.md +2 -0
  2. package/dist/_chunks/{actions-BjbbNRFN.js → actions-CWYtq6ii.js} +3 -3
  3. package/dist/_chunks/actions-CWYtq6ii.js.map +1 -0
  4. package/dist/_chunks/als-registry-C6kcfprT.js.map +1 -1
  5. package/dist/_chunks/als-slots-BEEIPKYm.js.map +1 -1
  6. package/dist/_chunks/{build-output-helper-C3DrfzZR.js → build-output-helper-9dqCv1pZ.js} +3 -2
  7. package/dist/_chunks/build-output-helper-9dqCv1pZ.js.map +1 -0
  8. package/dist/_chunks/{cache-api-DllJ-Lyw.js → cache-api-CQeYzA5g.js} +6 -8
  9. package/dist/_chunks/cache-api-CQeYzA5g.js.map +1 -0
  10. package/dist/_chunks/chains-h7EO-u3n.js +412 -0
  11. package/dist/_chunks/chains-h7EO-u3n.js.map +1 -0
  12. package/dist/_chunks/{cli-check-DJZDc22E.js → cli-check-BVthpfLS.js} +43 -6
  13. package/dist/_chunks/cli-check-BVthpfLS.js.map +1 -0
  14. package/dist/_chunks/{cli-schema-sync-D4_AZVUb.js → cli-schema-sync-3Wutm8pH.js} +7 -6
  15. package/dist/_chunks/{cli-schema-sync-D4_AZVUb.js.map → cli-schema-sync-3Wutm8pH.js.map} +1 -1
  16. package/dist/_chunks/{cloudflare-CGP6BZKO.js → cloudflare-BKJC3SC_.js} +28 -22
  17. package/dist/_chunks/{cloudflare-CGP6BZKO.js.map → cloudflare-BKJC3SC_.js.map} +1 -1
  18. package/dist/_chunks/codec-registry-oOUxugz3.js.map +1 -1
  19. package/dist/_chunks/{convention-lint-CpteIpTm.js → convention-lint-DO10_pVl.js} +93 -7
  20. package/dist/_chunks/convention-lint-DO10_pVl.js.map +1 -0
  21. package/dist/_chunks/dist-DtrJyBbw.js +386 -0
  22. package/dist/_chunks/dist-DtrJyBbw.js.map +1 -0
  23. package/dist/_chunks/{error-boundary-D-ODYX41.js → error-boundary-D-lkwyaD.js} +3 -3
  24. package/dist/_chunks/{error-boundary-D-ODYX41.js.map → error-boundary-D-lkwyaD.js.map} +1 -1
  25. package/dist/_chunks/{file-cache-DmX7OqZP.js → file-cache-Dw6BJPG7.js} +5 -1
  26. package/dist/_chunks/{file-cache-DmX7OqZP.js.map → file-cache-Dw6BJPG7.js.map} +1 -1
  27. package/dist/_chunks/{format-CfwjgPz9.js → format-BKclgVbk.js} +3 -3
  28. package/dist/_chunks/{format-CfwjgPz9.js.map → format-BKclgVbk.js.map} +1 -1
  29. package/dist/_chunks/graph-cache-CP4GEmf9.js +304 -0
  30. package/dist/_chunks/graph-cache-CP4GEmf9.js.map +1 -0
  31. package/dist/_chunks/href-validation-CMc5JRls.js.map +1 -1
  32. package/dist/_chunks/live-graph-Bx4HodF1.js +150 -0
  33. package/dist/_chunks/live-graph-Bx4HodF1.js.map +1 -0
  34. package/dist/_chunks/{logger-CH7IcMmg.js → logger-pumCm3Il.js} +25 -7
  35. package/dist/_chunks/{logger-CH7IcMmg.js.map → logger-pumCm3Il.js.map} +1 -1
  36. package/dist/_chunks/{mdx-file-C005ay-P.js → mdx-file-CXyHGUpS.js} +3 -3
  37. package/dist/_chunks/mdx-file-CXyHGUpS.js.map +1 -0
  38. package/dist/_chunks/{plugin-context-rCinWLiE.js → plugin-context-8idfR3UZ.js} +2 -2
  39. package/dist/_chunks/plugin-context-8idfR3UZ.js.map +1 -0
  40. package/dist/_chunks/poison-rules-DoEhbqaY.js +110 -0
  41. package/dist/_chunks/poison-rules-DoEhbqaY.js.map +1 -0
  42. package/dist/_chunks/poison-scan-BAxfTT5L.js +101 -0
  43. package/dist/_chunks/poison-scan-BAxfTT5L.js.map +1 -0
  44. package/dist/_chunks/resolve-schema-CBR6Lm4i.js.map +1 -1
  45. package/dist/_chunks/rolldown-runtime-D7D4PA-g.js +13 -0
  46. package/dist/_chunks/{router-ref-DuYuV_0Q.js → router-ref-BzqbPwYC.js} +2 -2
  47. package/dist/_chunks/{router-ref-DuYuV_0Q.js.map → router-ref-BzqbPwYC.js.map} +1 -1
  48. package/dist/_chunks/{rsc-media-type-DRqE_lD_.js → rsc-media-type-DDc7duTD.js} +17 -2
  49. package/dist/_chunks/{rsc-media-type-DRqE_lD_.js.map → rsc-media-type-DDc7duTD.js.map} +1 -1
  50. package/dist/_chunks/scan-BoP17W3w.js +140 -0
  51. package/dist/_chunks/scan-BoP17W3w.js.map +1 -0
  52. package/dist/_chunks/{scanner-CAietmj4.js → scanner-BRIOmHE2.js} +43 -4
  53. package/dist/_chunks/scanner-BRIOmHE2.js.map +1 -0
  54. package/dist/_chunks/schema-bridge-C83xa9lT.js.map +1 -1
  55. package/dist/_chunks/segment-classify-C539Pa2O.js.map +1 -1
  56. package/dist/_chunks/{segment-keys-BawYuNFO.js → segment-keys-BhqoHiLc.js} +14 -2
  57. package/dist/_chunks/{segment-keys-BawYuNFO.js.map → segment-keys-BhqoHiLc.js.map} +1 -1
  58. package/dist/_chunks/slot-params-BCTmZkQB.js.map +1 -1
  59. package/dist/_chunks/{ssr-data-14MXm7Pj.js → ssr-data-Ya2HJPFp.js} +1 -7
  60. package/dist/_chunks/{ssr-data-14MXm7Pj.js.map → ssr-data-Ya2HJPFp.js.map} +1 -1
  61. package/dist/_chunks/use-query-states-I3JMng6J.js.map +1 -1
  62. package/dist/_chunks/{use-segment-params-C4r4BD9T.js → use-segment-params-DzTBpkvj.js} +3 -3
  63. package/dist/_chunks/use-segment-params-DzTBpkvj.js.map +1 -0
  64. package/dist/_chunks/{walkers-BsVLmD1S.js → walkers-BU6z9xRV.js} +9 -6
  65. package/dist/_chunks/{walkers-BsVLmD1S.js.map → walkers-BU6z9xRV.js.map} +1 -1
  66. package/dist/adapters/build-output-helper.d.ts +1 -1
  67. package/dist/adapters/build-output-helper.d.ts.map +1 -1
  68. package/dist/adapters/cloudflare-dev.d.ts.map +1 -1
  69. package/dist/adapters/cloudflare-dev.js +2 -1
  70. package/dist/adapters/cloudflare-dev.js.map +1 -1
  71. package/dist/adapters/cloudflare-kv-cache.d.ts +1 -1
  72. package/dist/adapters/cloudflare-kv-cache.d.ts.map +1 -1
  73. package/dist/adapters/cloudflare-kv-cache.js +7 -8
  74. package/dist/adapters/cloudflare-kv-cache.js.map +1 -1
  75. package/dist/adapters/cloudflare.d.ts +1 -1
  76. package/dist/adapters/cloudflare.d.ts.map +1 -1
  77. package/dist/adapters/cloudflare.js +1 -1
  78. package/dist/adapters/nitro-presets.d.ts +37 -0
  79. package/dist/adapters/nitro-presets.d.ts.map +1 -0
  80. package/dist/adapters/nitro-preview.d.ts +32 -0
  81. package/dist/adapters/nitro-preview.d.ts.map +1 -0
  82. package/dist/adapters/nitro.d.ts +28 -51
  83. package/dist/adapters/nitro.d.ts.map +1 -1
  84. package/dist/adapters/nitro.js +224 -171
  85. package/dist/adapters/nitro.js.map +1 -1
  86. package/dist/analyze/chains.d.ts +124 -0
  87. package/dist/analyze/chains.d.ts.map +1 -0
  88. package/dist/analyze/classify.d.ts +150 -0
  89. package/dist/analyze/classify.d.ts.map +1 -0
  90. package/dist/analyze/crawl-entry.d.ts +17 -0
  91. package/dist/analyze/crawl-entry.d.ts.map +1 -0
  92. package/dist/analyze/crawl-entry.js +313 -0
  93. package/dist/analyze/crawl-entry.js.map +1 -0
  94. package/dist/analyze/crawl.d.ts +134 -0
  95. package/dist/analyze/crawl.d.ts.map +1 -0
  96. package/dist/analyze/graph-cache.d.ts +104 -0
  97. package/dist/analyze/graph-cache.d.ts.map +1 -0
  98. package/dist/analyze/graph-command.d.ts +43 -0
  99. package/dist/analyze/graph-command.d.ts.map +1 -0
  100. package/dist/analyze/graph-command.js +472 -0
  101. package/dist/analyze/graph-command.js.map +1 -0
  102. package/dist/analyze/live-graph.d.ts +81 -0
  103. package/dist/analyze/live-graph.d.ts.map +1 -0
  104. package/dist/analyze/poison-rules.d.ts +72 -0
  105. package/dist/analyze/poison-rules.d.ts.map +1 -0
  106. package/dist/analyze/poison-scan.d.ts +48 -0
  107. package/dist/analyze/poison-scan.d.ts.map +1 -0
  108. package/dist/analyze/scan.d.ts +73 -0
  109. package/dist/analyze/scan.d.ts.map +1 -0
  110. package/dist/cache/cache-api.d.ts +2 -2
  111. package/dist/cache/cache-api.d.ts.map +1 -1
  112. package/dist/cache/index.d.ts +8 -8
  113. package/dist/cache/index.d.ts.map +1 -1
  114. package/dist/cache/index.js +1 -1
  115. package/dist/cache/redis-handler.d.ts +1 -1
  116. package/dist/cache/redis-handler.d.ts.map +1 -1
  117. package/dist/cache/stores/cloudflare-kv.d.ts +1 -1
  118. package/dist/cache/stores/cloudflare-kv.d.ts.map +1 -1
  119. package/dist/cache/stores/cloudflare-kv.js.map +1 -1
  120. package/dist/cache/stores/memory.d.ts +1 -1
  121. package/dist/cache/stores/memory.d.ts.map +1 -1
  122. package/dist/cache/stores/memory.js.map +1 -1
  123. package/dist/cache/stores/redis.d.ts +1 -1
  124. package/dist/cache/stores/redis.d.ts.map +1 -1
  125. package/dist/cache/stores/redis.js.map +1 -1
  126. package/dist/cache/stores/vercel.d.ts +1 -1
  127. package/dist/cache/stores/vercel.d.ts.map +1 -1
  128. package/dist/cache/stores/vercel.js.map +1 -1
  129. package/dist/cache/tag-aware-handler.d.ts +2 -2
  130. package/dist/cache/tag-aware-handler.d.ts.map +1 -1
  131. package/dist/cache/timber-cache.d.ts +1 -1
  132. package/dist/cache/timber-cache.d.ts.map +1 -1
  133. package/dist/cdn/cloudflare-purge.d.ts +1 -1
  134. package/dist/cdn/cloudflare-purge.d.ts.map +1 -1
  135. package/dist/cdn/cloudflare-purge.js.map +1 -1
  136. package/dist/cdn/fastly-purge.d.ts +1 -1
  137. package/dist/cdn/fastly-purge.d.ts.map +1 -1
  138. package/dist/cdn/fastly-purge.js.map +1 -1
  139. package/dist/cdn/index.d.ts +4 -4
  140. package/dist/cdn/index.d.ts.map +1 -1
  141. package/dist/cdn/workers-cache-purge.d.ts +5 -1
  142. package/dist/cdn/workers-cache-purge.d.ts.map +1 -1
  143. package/dist/cdn/workers-cache-purge.js.map +1 -1
  144. package/dist/cli-check.d.ts +10 -0
  145. package/dist/cli-check.d.ts.map +1 -1
  146. package/dist/cli.d.ts +12 -4
  147. package/dist/cli.d.ts.map +1 -1
  148. package/dist/cli.js +30 -6
  149. package/dist/cli.js.map +1 -1
  150. package/dist/client/browser-entry/hydrate.d.ts +2 -2
  151. package/dist/client/browser-entry/hydrate.d.ts.map +1 -1
  152. package/dist/client/browser-entry/post-hydration.d.ts +2 -2
  153. package/dist/client/browser-entry/router-init.d.ts +2 -2
  154. package/dist/client/browser-entry/rsc-stream.d.ts +1 -1
  155. package/dist/client/error-boundary.js +1 -1
  156. package/dist/client/form.d.ts +2 -2
  157. package/dist/client/form.d.ts.map +1 -1
  158. package/dist/client/history.d.ts +2 -2
  159. package/dist/client/index.d.ts +18 -18
  160. package/dist/client/index.d.ts.map +1 -1
  161. package/dist/client/index.js +3 -3
  162. package/dist/client/index.js.map +1 -1
  163. package/dist/client/internal.d.ts +19 -19
  164. package/dist/client/internal.d.ts.map +1 -1
  165. package/dist/client/internal.js +15 -19
  166. package/dist/client/internal.js.map +1 -1
  167. package/dist/client/link.d.ts +3 -3
  168. package/dist/client/navigation-commit.d.ts +5 -5
  169. package/dist/client/navigation-root.d.ts +1 -1
  170. package/dist/client/navigation-root.d.ts.map +1 -1
  171. package/dist/client/params-context.d.ts +3 -3
  172. package/dist/client/router-pipeline.d.ts +7 -7
  173. package/dist/client/router-ref.d.ts +1 -1
  174. package/dist/client/router-types.d.ts +6 -6
  175. package/dist/client/router-types.d.ts.map +1 -1
  176. package/dist/client/router.d.ts +1 -1
  177. package/dist/client/rsc-fetch.d.ts +4 -4
  178. package/dist/client/rsc-fetch.d.ts.map +1 -1
  179. package/dist/client/segment-cache.d.ts +2 -2
  180. package/dist/client/slot-provider.d.ts +1 -1
  181. package/dist/client/ssr-data.d.ts +2 -2
  182. package/dist/client/state.d.ts +4 -4
  183. package/dist/client/use-query-states.d.ts +1 -1
  184. package/dist/client/use-segment-params.d.ts +3 -3
  185. package/dist/codec.d.ts +2 -2
  186. package/dist/codec.js.map +1 -1
  187. package/dist/config-types.d.ts +12 -9
  188. package/dist/config-types.d.ts.map +1 -1
  189. package/dist/config-validation.d.ts +1 -1
  190. package/dist/cookies/define-cookie.d.ts +3 -3
  191. package/dist/cookies/index.d.ts +3 -3
  192. package/dist/cookies/index.js +4 -5
  193. package/dist/cookies/index.js.map +1 -1
  194. package/dist/cookies/json-cookie.d.ts +1 -1
  195. package/dist/dev-tools/404-page.d.ts +2 -2
  196. package/dist/dev-tools/error-page.d.ts +2 -2
  197. package/dist/dev-tools/index.d.ts +12 -12
  198. package/dist/dev-tools/instrumentation.d.ts +1 -1
  199. package/dist/dev-tools/logs.d.ts +1 -1
  200. package/dist/dev-tools/overlay.d.ts +2 -2
  201. package/dist/dev-tools/terminal.d.ts +1 -1
  202. package/dist/fonts/ast.d.ts +4 -4
  203. package/dist/fonts/bundle.d.ts +3 -3
  204. package/dist/fonts/css.d.ts +1 -1
  205. package/dist/fonts/dev-middleware.d.ts +1 -1
  206. package/dist/fonts/google.d.ts +1 -1
  207. package/dist/fonts/local.d.ts +1 -1
  208. package/dist/fonts/pipeline.d.ts +3 -3
  209. package/dist/fonts/transform.d.ts +2 -2
  210. package/dist/fonts/types.d.ts +1 -1
  211. package/dist/fonts/virtual-modules.d.ts +1 -1
  212. package/dist/index.d.ts +3 -18
  213. package/dist/index.d.ts.map +1 -1
  214. package/dist/index.js +861 -314
  215. package/dist/index.js.map +1 -1
  216. package/dist/params/codec-registry.d.ts +1 -1
  217. package/dist/params/define-schema.d.ts +2 -2
  218. package/dist/params/index.d.ts +4 -4
  219. package/dist/params/index.js.map +1 -1
  220. package/dist/params/resolve-schema.d.ts +1 -1
  221. package/dist/plugin-context.d.ts +9 -9
  222. package/dist/plugin-context.d.ts.map +1 -1
  223. package/dist/plugins/adapter-build.d.ts +2 -2
  224. package/dist/plugins/build-manifest.d.ts +2 -2
  225. package/dist/plugins/build-report.d.ts +5 -5
  226. package/dist/plugins/cache.d.ts +1 -1
  227. package/dist/plugins/callsite-jsx.d.ts +2 -2
  228. package/dist/plugins/chunks.d.ts +1 -1
  229. package/dist/plugins/chunks.d.ts.map +1 -1
  230. package/dist/plugins/cloudflare-wasm.d.ts +1 -1
  231. package/dist/plugins/content.d.ts +1 -1
  232. package/dist/plugins/content.d.ts.map +1 -1
  233. package/dist/plugins/dev-discovery.d.ts +123 -0
  234. package/dist/plugins/dev-discovery.d.ts.map +1 -0
  235. package/dist/plugins/dev-server.d.ts +1 -1
  236. package/dist/plugins/dev-server.d.ts.map +1 -1
  237. package/dist/plugins/entries.d.ts +1 -1
  238. package/dist/plugins/fonts.d.ts +3 -3
  239. package/dist/plugins/fonts.d.ts.map +1 -1
  240. package/dist/plugins/graph-endpoint.d.ts +112 -0
  241. package/dist/plugins/graph-endpoint.d.ts.map +1 -0
  242. package/dist/plugins/mdx.d.ts +1 -1
  243. package/dist/plugins/mdx.d.ts.map +1 -1
  244. package/dist/plugins/prebuilt-capture.d.ts +2 -2
  245. package/dist/plugins/prebuilt-options-analysis.d.ts +1 -1
  246. package/dist/plugins/prebuilt.d.ts +1 -1
  247. package/dist/plugins/prerender-sugar.d.ts +11 -14
  248. package/dist/plugins/prerender-sugar.d.ts.map +1 -1
  249. package/dist/plugins/request-dep/analysis.d.ts +1 -1
  250. package/dist/plugins/request-dep/index.d.ts +5 -5
  251. package/dist/plugins/request-dep/origin.d.ts +1 -1
  252. package/dist/plugins/routing.d.ts +1 -1
  253. package/dist/plugins/routing.d.ts.map +1 -1
  254. package/dist/plugins/server-bundle.d.ts.map +1 -1
  255. package/dist/plugins/shims.d.ts +1 -1
  256. package/dist/plugins/shims.d.ts.map +1 -1
  257. package/dist/plugins/static-build.d.ts +5 -5
  258. package/dist/routing/codegen-shared.d.ts +1 -1
  259. package/dist/routing/codegen-write.d.ts +1 -1
  260. package/dist/routing/codegen.d.ts +1 -1
  261. package/dist/routing/collision-probe.d.ts +1 -1
  262. package/dist/routing/collision-spaces.d.ts +1 -1
  263. package/dist/routing/convention-lint.d.ts +1 -1
  264. package/dist/routing/convention-lint.d.ts.map +1 -1
  265. package/dist/routing/index.d.ts +13 -13
  266. package/dist/routing/index.js +3 -3
  267. package/dist/routing/interception.d.ts +1 -1
  268. package/dist/routing/interception.d.ts.map +1 -1
  269. package/dist/routing/link-codegen.d.ts +1 -1
  270. package/dist/routing/manifest-codegen.d.ts +1 -1
  271. package/dist/routing/scanner.d.ts +14 -1
  272. package/dist/routing/scanner.d.ts.map +1 -1
  273. package/dist/routing/schema-validation.d.ts +1 -1
  274. package/dist/routing/segment-classify.d.ts +1 -1
  275. package/dist/routing/segment-codegen.d.ts +1 -1
  276. package/dist/routing/segment-keys.d.ts +1 -1
  277. package/dist/routing/slot-placement.d.ts +1 -1
  278. package/dist/routing/walkers.d.ts +1 -1
  279. package/dist/rsc-runtime/transforms.d.ts +13 -0
  280. package/dist/rsc-runtime/transforms.d.ts.map +1 -0
  281. package/dist/schema-bridge.d.ts +1 -1
  282. package/dist/search-params/define.d.ts +3 -3
  283. package/dist/search-params/index.d.ts +3 -3
  284. package/dist/search-params/index.js.map +1 -1
  285. package/dist/search-params/wrappers.d.ts +1 -1
  286. package/dist/server/access-gate.d.ts +1 -1
  287. package/dist/server/action-client.d.ts +1 -1
  288. package/dist/server/action-handler.d.ts +5 -5
  289. package/dist/server/actions.d.ts +2 -2
  290. package/dist/server/als-registry.d.ts +8 -8
  291. package/dist/server/asset-headers.d.ts +1 -1
  292. package/dist/server/chain-url-parts.d.ts +3 -3
  293. package/dist/server/children-interception.d.ts +2 -2
  294. package/dist/server/cookie-context.d.ts +1 -1
  295. package/dist/server/cookie-parsing.d.ts +2 -2
  296. package/dist/server/default-logger.d.ts +1 -1
  297. package/dist/server/deny-boundary.d.ts +2 -2
  298. package/dist/server/deny-renderer.d.ts +5 -5
  299. package/dist/server/early-hints.d.ts +1 -1
  300. package/dist/server/error-boundary-wrapper.d.ts +2 -4
  301. package/dist/server/error-boundary-wrapper.d.ts.map +1 -1
  302. package/dist/server/fallback-error.d.ts +5 -5
  303. package/dist/server/flight-injection-state.d.ts +1 -1
  304. package/dist/server/form-flash.d.ts +1 -1
  305. package/dist/server/html-injector-core.d.ts +2 -2
  306. package/dist/server/html-injectors.d.ts +1 -1
  307. package/dist/server/index.d.ts +18 -18
  308. package/dist/server/index.d.ts.map +1 -1
  309. package/dist/server/index.js +34 -38
  310. package/dist/server/index.js.map +1 -1
  311. package/dist/server/instrumentation.d.ts +1 -1
  312. package/dist/server/internal.d.ts +50 -50
  313. package/dist/server/internal.d.ts.map +1 -1
  314. package/dist/server/internal.js +1024 -1026
  315. package/dist/server/internal.js.map +1 -1
  316. package/dist/server/metadata-collector.d.ts +2 -2
  317. package/dist/server/metadata-platform.d.ts +2 -2
  318. package/dist/server/metadata-render.d.ts +2 -2
  319. package/dist/server/metadata-routes.d.ts +3 -3
  320. package/dist/server/metadata-social.d.ts +2 -2
  321. package/dist/server/metadata.d.ts +2 -2
  322. package/dist/server/middleware-runner.d.ts +1 -1
  323. package/dist/server/node-stream-transforms.d.ts +1 -1
  324. package/dist/server/param-coercion.d.ts +4 -4
  325. package/dist/server/pipeline-helpers.d.ts +3 -3
  326. package/dist/server/pipeline-interception.d.ts +1 -1
  327. package/dist/server/pipeline-metadata.d.ts +1 -1
  328. package/dist/server/pipeline-outcome.d.ts +2 -2
  329. package/dist/server/pipeline-phases.d.ts +3 -3
  330. package/dist/server/pipeline-phases.d.ts.map +1 -1
  331. package/dist/server/pipeline.d.ts +9 -9
  332. package/dist/server/prebuilt/cache-key.d.ts +1 -1
  333. package/dist/server/prebuilt/capture-state.d.ts +1 -1
  334. package/dist/server/prebuilt/key-discipline.d.ts +1 -1
  335. package/dist/server/prebuilt/manifest-tag-index.d.ts +1 -1
  336. package/dist/server/prebuilt/overlay.d.ts +2 -2
  337. package/dist/server/prebuilt/payload-source.d.ts +1 -1
  338. package/dist/server/prebuilt/slots.d.ts +1 -1
  339. package/dist/server/prebuilt/synthetic-store.d.ts +2 -2
  340. package/dist/server/prebuilt-builder.d.ts +2 -2
  341. package/dist/server/primitives.d.ts +2 -2
  342. package/dist/server/publish-params.d.ts +1 -1
  343. package/dist/server/request-context.d.ts +3 -3
  344. package/dist/server/route-element-builder.d.ts +16 -6
  345. package/dist/server/route-element-builder.d.ts.map +1 -1
  346. package/dist/server/route-handler.d.ts +1 -1
  347. package/dist/server/route-matcher.d.ts +4 -4
  348. package/dist/server/rsc-cache-key-guard.d.ts.map +1 -1
  349. package/dist/server/rsc-entry/action-middleware-runner.d.ts +2 -2
  350. package/dist/server/rsc-entry/api-handler.d.ts +1 -1
  351. package/dist/server/rsc-entry/api-handler.d.ts.map +1 -1
  352. package/dist/server/rsc-entry/deny-fallback.d.ts +3 -3
  353. package/dist/server/rsc-entry/error-renderer.d.ts +4 -4
  354. package/dist/server/rsc-entry/helpers.d.ts +6 -6
  355. package/dist/server/rsc-entry/index.d.ts +7 -6
  356. package/dist/server/rsc-entry/index.d.ts.map +1 -1
  357. package/dist/server/rsc-entry/render-route.d.ts +4 -4
  358. package/dist/server/rsc-entry/revalidate-renderer.d.ts +4 -4
  359. package/dist/server/rsc-entry/rsc-payload.d.ts +4 -4
  360. package/dist/server/rsc-entry/rsc-payload.d.ts.map +1 -1
  361. package/dist/server/rsc-entry/rsc-stream.d.ts +3 -3
  362. package/dist/server/rsc-entry/ssr-bridge.d.ts +1 -1
  363. package/dist/server/rsc-entry/ssr-renderer.d.ts +7 -7
  364. package/dist/server/rsc-entry/wrap-action-dispatch.d.ts +5 -5
  365. package/dist/server/sitemap-generator.d.ts +2 -2
  366. package/dist/server/sitemap-handler.d.ts +1 -1
  367. package/dist/server/skippable-prefix.d.ts +3 -3
  368. package/dist/server/slot-interception.d.ts +2 -2
  369. package/dist/server/slot-resolver.d.ts +3 -7
  370. package/dist/server/slot-resolver.d.ts.map +1 -1
  371. package/dist/server/ssr-bridge-types.d.ts +2 -2
  372. package/dist/server/ssr-entry.d.ts +1 -1
  373. package/dist/server/static-generator.d.ts +1 -1
  374. package/dist/server/static-not-found.d.ts +1 -1
  375. package/dist/server/status-code-resolver.d.ts +1 -1
  376. package/dist/server/tracing.d.ts +3 -3
  377. package/dist/server/tree-builder.d.ts +3 -3
  378. package/dist/server/tree-match.d.ts +1 -1
  379. package/dist/server/types.d.ts +2 -2
  380. package/dist/server/utils/mdx-file.d.ts +2 -0
  381. package/dist/server/utils/mdx-file.d.ts.map +1 -1
  382. package/dist/server/workers-cache-bridge.d.ts +1 -1
  383. package/dist/shared/als-slots.d.ts +1 -1
  384. package/dist/shared/payload-root.d.ts +2 -2
  385. package/dist/shared/rsc-media-type.d.ts +12 -0
  386. package/dist/shared/rsc-media-type.d.ts.map +1 -1
  387. package/dist/shared/slot-params.d.ts +1 -1
  388. package/dist/shims/font-google.d.ts +1 -1
  389. package/dist/shims/font-google.js.map +1 -1
  390. package/dist/shims/font-local.d.ts +1 -1
  391. package/dist/shims/font-local.js.map +1 -1
  392. package/dist/shims/navigation-client.d.ts +4 -4
  393. package/dist/shims/navigation.d.ts +2 -2
  394. package/docs/api/34-api-config.mdx +7 -4
  395. package/docs/api/36-cli.mdx +23 -3
  396. package/docs/learn/11-error-handling.mdx +11 -0
  397. package/docs/learn/13-configuration.mdx +1 -1
  398. package/docs/more/01-advanced-routing.mdx +1 -0
  399. package/package.json +11 -10
  400. package/src/adapters/build-output-helper.ts +4 -4
  401. package/src/adapters/cloudflare-dev.ts +7 -1
  402. package/src/adapters/cloudflare-kv-cache.ts +11 -8
  403. package/src/adapters/cloudflare.ts +21 -15
  404. package/src/adapters/compress-module.ts +2 -2
  405. package/src/adapters/nitro-presets.ts +139 -0
  406. package/src/adapters/nitro-preview.ts +340 -0
  407. package/src/adapters/nitro.ts +100 -465
  408. package/src/adapters/shared.ts +1 -1
  409. package/src/analyze/chains.ts +411 -0
  410. package/src/analyze/classify.ts +258 -0
  411. package/src/analyze/crawl-entry.ts +68 -0
  412. package/src/analyze/crawl.ts +500 -0
  413. package/src/analyze/graph-cache.ts +332 -0
  414. package/src/analyze/graph-command.ts +762 -0
  415. package/src/analyze/live-graph.ts +232 -0
  416. package/src/analyze/poison-rules.ts +165 -0
  417. package/src/analyze/poison-scan.ts +162 -0
  418. package/src/analyze/scan.ts +149 -0
  419. package/src/cache/cache-api.ts +7 -7
  420. package/src/cache/index.ts +9 -9
  421. package/src/cache/redis-handler.ts +2 -2
  422. package/src/cache/stores/cloudflare-kv.ts +1 -1
  423. package/src/cache/stores/memory.ts +2 -2
  424. package/src/cache/stores/redis.ts +1 -1
  425. package/src/cache/stores/vercel.ts +1 -1
  426. package/src/cache/tag-aware-handler.ts +2 -2
  427. package/src/cache/timber-cache.ts +8 -8
  428. package/src/cdn/cloudflare-purge.ts +1 -1
  429. package/src/cdn/fastly-purge.ts +1 -1
  430. package/src/cdn/index.ts +10 -4
  431. package/src/cdn/workers-cache-purge.ts +6 -2
  432. package/src/cli-check.ts +53 -4
  433. package/src/cli-schema-sync.ts +3 -3
  434. package/src/cli.ts +50 -11
  435. package/src/client/browser-dev.ts +1 -1
  436. package/src/client/browser-entry/action-dispatch.ts +5 -5
  437. package/src/client/browser-entry/hmr.ts +1 -1
  438. package/src/client/browser-entry/hydrate.ts +9 -9
  439. package/src/client/browser-entry/index.ts +10 -10
  440. package/src/client/browser-entry/post-hydration.ts +5 -5
  441. package/src/client/browser-entry/router-init.ts +9 -9
  442. package/src/client/browser-entry/rsc-stream.ts +3 -3
  443. package/src/client/error-boundary.tsx +4 -4
  444. package/src/client/form.tsx +7 -2
  445. package/src/client/history.ts +2 -2
  446. package/src/client/index.ts +21 -18
  447. package/src/client/internal.ts +19 -19
  448. package/src/client/link.tsx +9 -9
  449. package/src/client/navigation-api.ts +1 -1
  450. package/src/client/navigation-commit.ts +5 -5
  451. package/src/client/navigation-context.ts +1 -1
  452. package/src/client/navigation-root.tsx +1 -1
  453. package/src/client/nuqs-adapter.tsx +2 -2
  454. package/src/client/params-context.ts +4 -4
  455. package/src/client/router-effects.ts +3 -3
  456. package/src/client/router-lifecycle.ts +2 -2
  457. package/src/client/router-pipeline.ts +10 -10
  458. package/src/client/router-ref.ts +2 -2
  459. package/src/client/router-skew.ts +2 -2
  460. package/src/client/router-types.ts +6 -6
  461. package/src/client/router.ts +13 -13
  462. package/src/client/rsc-fetch.ts +11 -16
  463. package/src/client/segment-cache.ts +2 -2
  464. package/src/client/segment-outlet.tsx +1 -1
  465. package/src/client/shallow-url.ts +1 -1
  466. package/src/client/slot-outlet.tsx +1 -1
  467. package/src/client/slot-provider.tsx +1 -1
  468. package/src/client/ssr-data.ts +3 -3
  469. package/src/client/stale-client.ts +1 -1
  470. package/src/client/state.ts +4 -4
  471. package/src/client/top-loader.tsx +1 -1
  472. package/src/client/unload-guard.ts +1 -1
  473. package/src/client/use-cookie.ts +2 -2
  474. package/src/client/use-pathname.ts +2 -2
  475. package/src/client/use-pending-navigation.ts +1 -1
  476. package/src/client/use-query-states.ts +3 -3
  477. package/src/client/use-router.ts +2 -2
  478. package/src/client/use-search-params.ts +3 -3
  479. package/src/client/use-segment-params.ts +6 -6
  480. package/src/client/use-selected-layout-segment.ts +2 -2
  481. package/src/codec.ts +2 -2
  482. package/src/config-types.ts +12 -9
  483. package/src/config-validation.ts +1 -1
  484. package/src/cookies/define-cookie.ts +6 -6
  485. package/src/cookies/index.ts +3 -3
  486. package/src/cookies/json-cookie.ts +1 -1
  487. package/src/dev-tools/404-page.ts +4 -4
  488. package/src/dev-tools/dev-page-shell.ts +1 -1
  489. package/src/dev-tools/error-page.ts +4 -4
  490. package/src/dev-tools/index.ts +12 -12
  491. package/src/dev-tools/instrumentation.ts +1 -1
  492. package/src/dev-tools/logs.ts +1 -1
  493. package/src/dev-tools/overlay.ts +3 -3
  494. package/src/dev-tools/terminal.ts +2 -2
  495. package/src/fonts/ast.ts +5 -5
  496. package/src/fonts/bundle.ts +5 -5
  497. package/src/fonts/css.ts +1 -1
  498. package/src/fonts/dev-middleware.ts +2 -2
  499. package/src/fonts/google.ts +2 -2
  500. package/src/fonts/local.ts +4 -4
  501. package/src/fonts/pipeline.ts +8 -8
  502. package/src/fonts/transform.ts +5 -5
  503. package/src/fonts/types.ts +1 -1
  504. package/src/fonts/virtual-modules.ts +1 -1
  505. package/src/index.ts +90 -95
  506. package/src/params/codec-registry.ts +1 -1
  507. package/src/params/define-schema.ts +2 -2
  508. package/src/params/index.ts +4 -4
  509. package/src/params/resolve-schema.ts +2 -2
  510. package/src/plugin-context.ts +10 -10
  511. package/src/plugins/adapter-build.ts +5 -5
  512. package/src/plugins/build-manifest.ts +4 -4
  513. package/src/plugins/build-report.ts +6 -6
  514. package/src/plugins/cache.ts +3 -3
  515. package/src/plugins/callsite-ast.ts +1 -1
  516. package/src/plugins/callsite-jsx.ts +2 -2
  517. package/src/plugins/chunks.ts +1 -1
  518. package/src/plugins/cloudflare-wasm.ts +1 -1
  519. package/src/plugins/content.ts +5 -1
  520. package/src/plugins/dev-discovery.ts +218 -0
  521. package/src/plugins/dev-server.ts +97 -12
  522. package/src/plugins/entries.ts +1 -1
  523. package/src/plugins/fonts.ts +17 -10
  524. package/src/plugins/graph-endpoint.ts +532 -0
  525. package/src/plugins/mdx.ts +4 -3
  526. package/src/plugins/prebuilt-capture.ts +3 -3
  527. package/src/plugins/prebuilt-options-analysis.ts +1 -1
  528. package/src/plugins/prebuilt.ts +7 -7
  529. package/src/plugins/prerender-sugar.ts +11 -19
  530. package/src/plugins/request-dep/analysis.ts +1 -1
  531. package/src/plugins/request-dep/index.ts +8 -8
  532. package/src/plugins/request-dep/origin.ts +1 -1
  533. package/src/plugins/routing.ts +12 -7
  534. package/src/plugins/server-bundle.ts +9 -2
  535. package/src/plugins/shims.ts +16 -31
  536. package/src/plugins/static-build.ts +10 -10
  537. package/src/routing/codegen-shared.ts +1 -1
  538. package/src/routing/codegen-write.ts +3 -3
  539. package/src/routing/codegen.ts +14 -5
  540. package/src/routing/collision-probe.ts +3 -3
  541. package/src/routing/collision-spaces.ts +3 -3
  542. package/src/routing/convention-lint.ts +136 -6
  543. package/src/routing/export-detect.ts +1 -1
  544. package/src/routing/index.ts +13 -13
  545. package/src/routing/interception.ts +41 -4
  546. package/src/routing/link-codegen.ts +3 -3
  547. package/src/routing/manifest-codegen.ts +2 -2
  548. package/src/routing/scanner.ts +33 -9
  549. package/src/routing/schema-validation.ts +4 -4
  550. package/src/routing/segment-classify.ts +2 -2
  551. package/src/routing/segment-codegen.ts +1 -1
  552. package/src/routing/segment-keys.ts +1 -1
  553. package/src/routing/slot-placement.ts +1 -1
  554. package/src/routing/walkers.ts +1 -1
  555. package/src/rsc-runtime/transforms.ts +13 -0
  556. package/src/rsc-runtime/vendor-types.d.ts +12 -0
  557. package/src/schema-bridge.ts +1 -1
  558. package/src/search-params/define.ts +8 -8
  559. package/src/search-params/index.ts +3 -3
  560. package/src/search-params/wrappers.ts +3 -3
  561. package/src/server/access-gate.tsx +6 -6
  562. package/src/server/action-client.ts +5 -5
  563. package/src/server/action-handler.ts +16 -16
  564. package/src/server/actions.ts +5 -5
  565. package/src/server/als-registry.ts +8 -8
  566. package/src/server/asset-headers.ts +2 -2
  567. package/src/server/chain-url-parts.ts +5 -5
  568. package/src/server/children-interception.ts +4 -4
  569. package/src/server/compress.ts +1 -1
  570. package/src/server/cookie-context.ts +4 -4
  571. package/src/server/cookie-parsing.ts +2 -2
  572. package/src/server/default-logger.ts +3 -3
  573. package/src/server/deny-boundary.ts +10 -10
  574. package/src/server/deny-renderer.ts +38 -25
  575. package/src/server/early-hints-sender.ts +2 -2
  576. package/src/server/early-hints.ts +2 -2
  577. package/src/server/error-boundary-wrapper.ts +4 -12
  578. package/src/server/fallback-error.ts +13 -13
  579. package/src/server/flight-injection-state.ts +1 -1
  580. package/src/server/form-flash.ts +2 -2
  581. package/src/server/html-injector-core.ts +4 -4
  582. package/src/server/html-injectors.ts +5 -5
  583. package/src/server/index.ts +18 -18
  584. package/src/server/instrumentation.ts +1 -1
  585. package/src/server/internal.ts +50 -50
  586. package/src/server/logger.ts +4 -4
  587. package/src/server/metadata-collector.ts +7 -7
  588. package/src/server/metadata-platform.ts +2 -2
  589. package/src/server/metadata-render.ts +4 -4
  590. package/src/server/metadata-routes.ts +3 -3
  591. package/src/server/metadata-social.ts +2 -2
  592. package/src/server/metadata.ts +2 -2
  593. package/src/server/middleware-runner.ts +1 -1
  594. package/src/server/node-stream-transforms.ts +4 -4
  595. package/src/server/param-coercion.ts +8 -8
  596. package/src/server/pipeline-helpers.ts +7 -7
  597. package/src/server/pipeline-interception.ts +2 -2
  598. package/src/server/pipeline-metadata.ts +1 -1
  599. package/src/server/pipeline-outcome.ts +8 -8
  600. package/src/server/pipeline-phases.ts +24 -28
  601. package/src/server/pipeline.ts +22 -22
  602. package/src/server/prebuilt/cache-key.ts +1 -1
  603. package/src/server/prebuilt/capture-state.ts +1 -1
  604. package/src/server/prebuilt/key-discipline.ts +1 -1
  605. package/src/server/prebuilt/manifest-tag-index.ts +1 -1
  606. package/src/server/prebuilt/overlay.ts +6 -6
  607. package/src/server/prebuilt/payload-source.ts +2 -2
  608. package/src/server/prebuilt/slots.ts +5 -5
  609. package/src/server/prebuilt/synthetic-store.ts +2 -2
  610. package/src/server/prebuilt-builder.ts +16 -16
  611. package/src/server/prebuilt-runtime.ts +12 -12
  612. package/src/server/primitives.ts +7 -7
  613. package/src/server/publish-params.ts +3 -3
  614. package/src/server/request-context.ts +7 -7
  615. package/src/server/route-element-builder.ts +108 -50
  616. package/src/server/route-handler.ts +4 -4
  617. package/src/server/route-matcher.ts +5 -5
  618. package/src/server/rsc-cache-key-guard.ts +3 -5
  619. package/src/server/rsc-entry/action-middleware-runner.ts +7 -7
  620. package/src/server/rsc-entry/api-handler.ts +18 -9
  621. package/src/server/rsc-entry/deny-fallback.ts +10 -10
  622. package/src/server/rsc-entry/error-renderer.ts +27 -27
  623. package/src/server/rsc-entry/helpers.ts +10 -10
  624. package/src/server/rsc-entry/index.ts +51 -47
  625. package/src/server/rsc-entry/render-route.ts +20 -20
  626. package/src/server/rsc-entry/revalidate-renderer.ts +12 -12
  627. package/src/server/rsc-entry/rsc-payload.ts +19 -15
  628. package/src/server/rsc-entry/rsc-stream.ts +8 -8
  629. package/src/server/rsc-entry/ssr-bridge.ts +3 -3
  630. package/src/server/rsc-entry/ssr-renderer.ts +23 -23
  631. package/src/server/rsc-entry/wrap-action-dispatch.ts +9 -9
  632. package/src/server/rsc-prop-warnings.ts +1 -1
  633. package/src/server/sensitive-fields.ts +1 -1
  634. package/src/server/server-timing.ts +1 -1
  635. package/src/server/sitemap-generator.ts +3 -3
  636. package/src/server/sitemap-handler.ts +3 -3
  637. package/src/server/skippable-prefix.ts +7 -7
  638. package/src/server/slot-interception.ts +5 -5
  639. package/src/server/slot-resolver.ts +20 -28
  640. package/src/server/ssr-bridge-types.ts +2 -2
  641. package/src/server/ssr-entry.ts +18 -18
  642. package/src/server/ssr-render.ts +4 -4
  643. package/src/server/ssr-wrappers.tsx +1 -1
  644. package/src/server/state-tree-diff.ts +1 -1
  645. package/src/server/static-generator.ts +6 -6
  646. package/src/server/static-not-found.ts +3 -3
  647. package/src/server/status-code-resolver.ts +1 -1
  648. package/src/server/tracing.ts +5 -5
  649. package/src/server/tree-builder.ts +4 -4
  650. package/src/server/tree-match.ts +1 -1
  651. package/src/server/types.ts +2 -2
  652. package/src/server/utils/mdx-file.ts +2 -2
  653. package/src/server/waituntil-bridge.ts +1 -1
  654. package/src/server/workers-cache-bridge.ts +2 -2
  655. package/src/shared/als-slots.ts +1 -1
  656. package/src/shared/payload-root.ts +2 -2
  657. package/src/shared/rsc-media-type.ts +16 -0
  658. package/src/shared/slot-params.ts +1 -1
  659. package/src/shims/font-google.ts +1 -1
  660. package/src/shims/font-local.ts +1 -1
  661. package/src/shims/navigation-client.ts +5 -5
  662. package/src/shims/navigation.ts +2 -2
  663. package/dist/_chunks/actions-BjbbNRFN.js.map +0 -1
  664. package/dist/_chunks/build-output-helper-C3DrfzZR.js.map +0 -1
  665. package/dist/_chunks/cache-api-DllJ-Lyw.js.map +0 -1
  666. package/dist/_chunks/cli-check-DJZDc22E.js.map +0 -1
  667. package/dist/_chunks/convention-lint-CpteIpTm.js.map +0 -1
  668. package/dist/_chunks/dist-BA3u1z3W.js +0 -423
  669. package/dist/_chunks/dist-BA3u1z3W.js.map +0 -1
  670. package/dist/_chunks/mdx-file-C005ay-P.js.map +0 -1
  671. package/dist/_chunks/plugin-context-rCinWLiE.js.map +0 -1
  672. package/dist/_chunks/scanner-CAietmj4.js.map +0 -1
  673. package/dist/_chunks/use-segment-params-C4r4BD9T.js.map +0 -1
  674. package/dist/content/index.d.ts +0 -2
  675. package/dist/content/index.d.ts.map +0 -1
  676. package/dist/content/index.js +0 -0
  677. package/src/content/index.ts +0 -5
  678. package/src/shims/server-only-noop.js +0 -6
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@timber-js/app",
3
- "version": "0.2.0-alpha.192",
3
+ "version": "0.2.0-alpha.195",
4
4
  "description": "Vite-native React framework built for Servers and Serverless Platforms — correct HTTP semantics, real status codes, pages that work without JavaScript",
5
5
  "keywords": [
6
6
  "cloudflare-workers",
@@ -148,26 +148,27 @@
148
148
  },
149
149
  "dependencies": {
150
150
  "@opentelemetry/api": "^1.9.1",
151
- "@opentelemetry/context-async-hooks": "^2.9.0",
152
- "@opentelemetry/sdk-trace-base": "^2.9.0",
153
- "cookie": "^1.1.1",
151
+ "@opentelemetry/context-async-hooks": "^2.10.0",
152
+ "@opentelemetry/sdk-trace-base": "^2.10.0",
153
+ "cookie": "^2.0.1",
154
154
  "jsonc-parser": "^3.3.1",
155
- "magic-string": "^0.30.21",
155
+ "magic-string": "^1.2.2",
156
156
  "nitro": "3.0.260610-beta",
157
- "srvx": "^0.12.0"
157
+ "oxc-transform-react": "^0.145.0",
158
+ "srvx": "^0.12.7"
158
159
  },
159
160
  "peerDependencies": {
160
161
  "@content-collections/core": "^0.14.0 || ^0.15.0",
161
162
  "@content-collections/mdx": "^0.2.0",
162
163
  "@content-collections/vite": "^0.2.0 || ^0.3.0",
163
164
  "@typescript/native-preview": "^7.0.0-dev.0",
164
- "@vitejs/plugin-react": "^6.0.0",
165
+ "@vitejs/plugin-react": "^6.1.0",
165
166
  "@vitejs/plugin-rsc": ">=0.5.28",
166
167
  "nuqs": "^2.0.0",
167
- "react": "19.2.7",
168
- "react-dom": "19.2.7",
168
+ "react": "19.2.8",
169
+ "react-dom": "19.2.8",
169
170
  "satteri": "^0.9.5",
170
- "vite": "^8.1.0",
171
+ "vite": "8.2.1",
171
172
  "vite-plugin-satteri": "^0.2.15",
172
173
  "wrangler": "^4.0.0",
173
174
  "zod": "^3.22.0 || ^4.0.0"
@@ -13,7 +13,7 @@
13
13
 
14
14
  import { writeFile, mkdir, cp, rm, readdir, readFile } from 'node:fs/promises';
15
15
  import { join, basename, relative } from 'node:path';
16
- import { adapterBase, generateHeadersFile } from './shared.js';
16
+ import { adapterBase, generateHeadersFile } from './shared.ts';
17
17
  // Isomorphic, zero-import module — safe to load from an adapter, which Node's
18
18
  // native ESM loader evaluates before Vite's resolver exists. Same precedent as
19
19
  // `adapters/shared.ts` importing `../shared/base-path.js`.
@@ -21,9 +21,9 @@ import {
21
21
  HEADERS_FILE,
22
22
  USER_MERGED_PLATFORM_FILES,
23
23
  USER_PLATFORM_DIR,
24
- } from '../shared/static-platform-files.js';
25
- import { detectFsIdentity, fsKey } from './fs-identity.js';
26
- import type { TimberConfig } from './types';
24
+ } from '../shared/static-platform-files.ts';
25
+ import { detectFsIdentity, fsKey } from './fs-identity.ts';
26
+ import type { TimberConfig } from './types.ts';
27
27
 
28
28
  /** Options for the shared build output steps. */
29
29
  export interface BuildOutputBaseOptions {
@@ -30,7 +30,7 @@
30
30
  */
31
31
 
32
32
  import type { Plugin, ViteDevServer } from 'vite';
33
- import { runWithBindings } from './cloudflare.js';
33
+ import { runWithBindings } from './cloudflare.ts';
34
34
 
35
35
  /**
36
36
  * Dynamically import wrangler. Extracted as a named export so tests
@@ -140,6 +140,12 @@ export function cloudflareDevBindings(options: CloudflareDevBindingsOptions = {}
140
140
  apply: 'serve',
141
141
 
142
142
  async configureServer(server: ViteDevServer) {
143
+ // The analyze crawl (design/47 §6) boots a middleware-mode server
144
+ // only to walk import edges — it never renders a request, so the
145
+ // workerd boot and the wrangler remote-bindings handshake (~6.8 s
146
+ // measured) are pure waste there. Skip the proxy entirely.
147
+ if (process.env.TIMBER_ANALYZE === '1') return;
148
+
143
149
  // Dynamic import — wrangler is an optional peer dependency.
144
150
  // Users must install it themselves: `pnpm add -D wrangler`
145
151
  const { getPlatformProxy } = await (options._loadWrangler ?? loadWrangler)();
@@ -1,6 +1,6 @@
1
- import type { CacheHandler } from '../cache/index';
2
- import { getCloudflareBindings } from './cloudflare';
3
- import { warnLossyJsonValue } from '../cache/json-lossy-check.js';
1
+ import type { CacheHandler } from '../cache/index.ts';
2
+ import { getCloudflareBindings } from './cloudflare.ts';
3
+ import { warnLossyJsonValue } from '../cache/json-lossy-check.ts';
4
4
 
5
5
  /**
6
6
  * Cloudflare Workers KV interface — the subset of KVNamespace we depend on.
@@ -38,9 +38,9 @@ const LEGACY_GRACE_MS = 30 * 86400 * 1000;
38
38
  * new format (TagIndexEntry[]). Old-format entries get a 30-day grace period
39
39
  * so they survive until explicitly invalidated or cycled through a new set().
40
40
  */
41
- function parseTagIndex(raw: unknown): TagIndexEntry[] {
41
+ function parseTagIndex(raw: unknown, now: number): TagIndexEntry[] {
42
42
  if (!Array.isArray(raw)) return [];
43
- const legacyDeadline = Date.now() + LEGACY_GRACE_MS;
43
+ const legacyDeadline = now + LEGACY_GRACE_MS;
44
44
  return raw.map((item: unknown) => {
45
45
  if (typeof item === 'string') return { key: item, expiresAt: legacyDeadline };
46
46
  return item as TagIndexEntry;
@@ -143,7 +143,7 @@ export class CloudflareKVCacheHandler implements CacheHandler {
143
143
  const kvExpiresAt = now + kvTtl * 1000;
144
144
  await Promise.all(
145
145
  opts.tags.map(async (tag) => {
146
- const existing = parseTagIndex(await kv.get(this.tagKey(tag), { type: 'json' }));
146
+ const existing = parseTagIndex(await kv.get(this.tagKey(tag), { type: 'json' }), now);
147
147
  const fresh = existing.filter((e) => e.expiresAt > now && e.key !== key);
148
148
  fresh.push({ key, expiresAt: kvExpiresAt });
149
149
  await kv.put(this.tagKey(tag), JSON.stringify(fresh), {
@@ -164,8 +164,8 @@ export class CloudflareKVCacheHandler implements CacheHandler {
164
164
  if (raw) {
165
165
  await Promise.all(
166
166
  raw.tags.map(async (tag) => {
167
- const entries = parseTagIndex(await kv.get(this.tagKey(tag), { type: 'json' }));
168
167
  const now = Date.now();
168
+ const entries = parseTagIndex(await kv.get(this.tagKey(tag), { type: 'json' }), now);
169
169
  const filtered = entries.filter((e) => e.key !== opts.key);
170
170
  if (filtered.length > 0) {
171
171
  await kv.put(this.tagKey(tag), JSON.stringify(filtered), {
@@ -181,7 +181,10 @@ export class CloudflareKVCacheHandler implements CacheHandler {
181
181
  }
182
182
 
183
183
  if (opts.tag) {
184
- const entries = parseTagIndex(await kv.get(this.tagKey(opts.tag), { type: 'json' }));
184
+ const entries = parseTagIndex(
185
+ await kv.get(this.tagKey(opts.tag), { type: 'json' }),
186
+ Date.now()
187
+ );
185
188
  if (entries.length > 0) {
186
189
  // Re-check each member's stored tags before deleting — the tag index
187
190
  // can contain stale references from partial writes or entries whose
@@ -8,21 +8,21 @@ import { execFile } from 'node:child_process';
8
8
  import { join, relative } from 'node:path';
9
9
  import { parse as parseJsonc } from 'jsonc-parser';
10
10
  import { AsyncLocalStorage } from 'node:async_hooks';
11
- import type { TimberPlatformAdapter, TimberConfig } from './types';
11
+ import type { TimberPlatformAdapter, TimberConfig } from './types.ts';
12
12
  import {
13
13
  runSharedBuildSteps,
14
14
  findUnhashedStaticFiles,
15
15
  buildStaticDirectoryOutput,
16
16
  writeHeadersFile,
17
- } from './build-output-helper.js';
18
- import { adapterBase, generateHeadersFile } from './shared.js';
17
+ } from './build-output-helper.ts';
18
+ import { adapterBase, generateHeadersFile } from './shared.ts';
19
19
  // Isomorphic, zero-import module — safe to load from an adapter, which Node's
20
20
  // native ESM loader evaluates before Vite's resolver exists. Same precedent as
21
21
  // `adapters/shared.ts` importing `../shared/base-path.js`.
22
- import { RSC_KEY_HEADERS } from '../shared/rsc-cache-key.js';
22
+ import { RSC_KEY_HEADERS } from '../shared/rsc-cache-key.ts';
23
23
  // Same reasoning: the media type the origin's own RSC gate matches on, so the
24
24
  // two predicates cannot drift apart. See `shared/rsc-media-type.ts`.
25
- import { RSC_CONTENT_TYPE } from '../shared/rsc-media-type.js';
25
+ import { RSC_CONTENT_TYPE } from '../shared/rsc-media-type.ts';
26
26
 
27
27
  // ─── Bindings passthrough ─────────────────────────────────────────────────
28
28
  // ALS stores the env object per-request so server components and middleware
@@ -381,7 +381,7 @@ import { AsyncLocalStorage } from 'node:async_hooks'
381
381
  // for cache.component payloads.
382
382
  import './_timber-runtime-init.js'
383
383
  import './_timber-prebuilt-source.js'
384
- ${manifestImport}import handler, { runWithWaitUntil, runWithWorkersCachePurge } from '${rscEntryRelative}'
384
+ ${manifestImport}import handler, { runWithWaitUntil, runWithWorkersCachePurge, stripHeadBody } from '${rscEntryRelative}'
385
385
  ${handlersImport}
386
386
 
387
387
  // Bind Cloudflare env to ALS so getCloudflareBindings() works at runtime.
@@ -479,12 +479,18 @@ ${handlersSpread} async fetch(request, env, ctx) {
479
479
  // One-time on first request; resolved-promise await thereafter.
480
480
  await initPlatformTracer()
481
481
 
482
- // Edge-cache GET/HEAD responses via the Cache API. RSC navigation
483
- // requests (Accept: text/x-component) are excluded. Their varying
484
- // inputs are now in the URL via ?_rsc= (TIM-1268), but this cache keys
485
- // on the request URL alone and cannot honour Vary, so a payload request
486
- // that arrives without the param — stripped query, hand-rolled client —
487
- // would share a key with the document.
482
+ // Edge-cache GET/HEAD responses via the Cache API (caches.default).
483
+ // caches.default and ctx.cache.purge() operate on the same underlying
484
+ // Cloudflare CDN cache — "independent" in the CF docs means independent
485
+ // write APIs, not independent stores (TIM-1172). Tag-based purging via
486
+ // revalidateTag() clears entries stored here when their Cache-Tag header
487
+ // matches the invalidated tag. See design/25 §TIM-1172.
488
+ //
489
+ // RSC navigation requests (Accept: text/x-component) are excluded.
490
+ // Their varying inputs are now in the URL via ?_rsc= (TIM-1268), but
491
+ // this cache keys on the request URL alone and cannot honour Vary, so a
492
+ // payload request that arrives without the param — stripped query,
493
+ // hand-rolled client — would share a key with the document.
488
494
  //
489
495
  // This exclusion is load-bearing in the other direction too: the store
490
496
  // predicate below treats "Vary: Accept" as honoured *because* of it
@@ -502,7 +508,7 @@ ${handlersSpread} async fetch(request, env, ctx) {
502
508
  // see canHonorVary. Entries written before that predicate existed are
503
509
  // exactly the ones that would be served to the wrong client.
504
510
  if (cached) {
505
- if (canHonorVary(cached.headers.get('Vary'))) return cached
511
+ if (canHonorVary(cached.headers.get('Vary'))) return stripHeadBody(cached, request.method)
506
512
  // Declining the hit means nobody will ever read this body. Release
507
513
  // it rather than leaving the stream dangling for the rest of the
508
514
  // request (design/02-rendering-pipeline.md §"Cancel Readers When You
@@ -527,7 +533,7 @@ ${handlersSpread} async fetch(request, env, ctx) {
527
533
  // it has 'public' or 's-maxage' (a shared-cache TTL directive) and no
528
534
  // 'no-store' or 'private'. Cloudflare's cache.put() only accepts GET
529
535
  // requests and rejects 206, so only store GET 200s. HEAD requests
530
- // benefit from cache.match() which handles HEAD→GET matching automatically.
536
+ // are served from cache.match() hits with the body stripped (TIM-1325).
531
537
  // See design/25-production-deployments.md §"CDN / Edge Cache".
532
538
  if (cache && request.method === 'GET' && response.status === 200) {
533
539
  const cc = response.headers.get('Cache-Control')
@@ -610,7 +616,7 @@ globalThis.__TIMBER_PREBUILT_SOURCE__ = {
610
616
 
611
617
  const entries: string[] = [];
612
618
  for (const { file, bytes } of data.payloads) {
613
- const b64 = bytes.toString('base64');
619
+ const b64 = Buffer.from(bytes).toString('base64');
614
620
  entries.push(` ${JSON.stringify(file)}: ${JSON.stringify(b64)}`);
615
621
  }
616
622
 
@@ -21,7 +21,7 @@ import { transformWithOxc } from 'vite';
21
21
  // in both dev (Vite resolves the TS source) and the published package
22
22
  // (the string is inlined into the compiled adapter entry).
23
23
  import compressSource from '../server/compress.ts?raw';
24
- import { RSC_CONTENT_TYPE } from '../shared/rsc-media-type.js';
24
+ import { RSC_CONTENT_TYPE } from '../shared/rsc-media-type.ts';
25
25
 
26
26
  /**
27
27
  * The one import `server/compress.ts` is allowed to carry, and its inlined
@@ -36,7 +36,7 @@ import { RSC_CONTENT_TYPE } from '../shared/rsc-media-type.js';
36
36
  const INLINED_IMPORTS: ReadonlyArray<{ pattern: RegExp; replacement: string }> = [
37
37
  {
38
38
  pattern:
39
- /^import\s*\{\s*RSC_CONTENT_TYPE\s*,?\s*\}\s*from\s*["'][^"']*shared\/rsc-media-type\.js["'];?[ \t]*$/m,
39
+ /^import\s*\{\s*RSC_CONTENT_TYPE\s*,?\s*\}\s*from\s*["'][^"']*shared\/rsc-media-type\.(?:js|ts)["'];?[ \t]*$/m,
40
40
  replacement: `const RSC_CONTENT_TYPE = ${JSON.stringify(RSC_CONTENT_TYPE)};`,
41
41
  },
42
42
  ];
@@ -0,0 +1,139 @@
1
+ // Nitro preset catalog — per-platform build configuration.
2
+ //
3
+ // Shared by the nitro adapter (build + entry generation) and the preview
4
+ // module. See design/25-production-deployments.md for the preset matrix.
5
+
6
+ /**
7
+ * Supported Nitro deployment presets.
8
+ *
9
+ * Each preset maps to a Nitro deployment target. The adapter generates
10
+ * the appropriate configuration and entry point for the selected platform.
11
+ */
12
+ export type NitroPreset =
13
+ | 'vercel'
14
+ | 'vercel-edge'
15
+ | 'netlify'
16
+ | 'netlify-edge'
17
+ | 'aws-lambda'
18
+ | 'deno-deploy'
19
+ | 'azure-functions'
20
+ | 'node-server'
21
+ | 'bun';
22
+
23
+ /** Preset-specific Nitro configuration. */
24
+ export interface PresetConfig {
25
+ /** Nitro preset name passed to the Nitro build. */
26
+ nitroPreset: string;
27
+ /** Output directory name within the build dir. */
28
+ outputDir: string;
29
+ /**
30
+ * Path to the server bundle directory relative to outputDir.
31
+ * Nitro places the bundled server entry + _chunks/ here.
32
+ * Most presets use `server`; Vercel uses `functions/__server.func`.
33
+ */
34
+ serverBundleDir: string;
35
+ /** Whether the runtime supports waitUntil. */
36
+ supportsWaitUntil: boolean;
37
+ /** Whether the runtime supports application-level 103 Early Hints. */
38
+ supportsEarlyHints: boolean;
39
+ /** Value for TIMBER_RUNTIME env var. See design/25-production-deployments.md. */
40
+ runtimeName: string;
41
+ /** Additional nitro.config fields for this preset. */
42
+ extraConfig?: Record<string, unknown>;
43
+ }
44
+
45
+ export const PRESET_CONFIGS: Record<NitroPreset, PresetConfig> = {
46
+ 'vercel': {
47
+ nitroPreset: 'vercel',
48
+ outputDir: '.vercel/output',
49
+ serverBundleDir: 'functions/__server.func',
50
+ supportsWaitUntil: true,
51
+ supportsEarlyHints: false,
52
+ runtimeName: 'vercel',
53
+ extraConfig: { vercel: { functions: { maxDuration: 30 } } },
54
+ },
55
+ 'vercel-edge': {
56
+ nitroPreset: 'vercel-edge',
57
+ outputDir: '.vercel/output',
58
+ serverBundleDir: 'functions/__server.func',
59
+ supportsWaitUntil: true,
60
+ supportsEarlyHints: false,
61
+ runtimeName: 'vercel-edge',
62
+ },
63
+ 'netlify': {
64
+ nitroPreset: 'netlify',
65
+ outputDir: '.netlify/functions-internal',
66
+ serverBundleDir: 'server',
67
+ supportsWaitUntil: false,
68
+ supportsEarlyHints: false,
69
+ runtimeName: 'netlify',
70
+ },
71
+ 'netlify-edge': {
72
+ nitroPreset: 'netlify-edge',
73
+ outputDir: '.netlify/edge-functions',
74
+ serverBundleDir: 'server',
75
+ supportsWaitUntil: true,
76
+ supportsEarlyHints: false,
77
+ runtimeName: 'netlify-edge',
78
+ },
79
+ 'aws-lambda': {
80
+ nitroPreset: 'aws-lambda',
81
+ outputDir: '.output',
82
+ serverBundleDir: 'server',
83
+ supportsWaitUntil: false,
84
+ supportsEarlyHints: false,
85
+ runtimeName: 'aws-lambda',
86
+ },
87
+ 'deno-deploy': {
88
+ nitroPreset: 'deno-deploy',
89
+ outputDir: '.output',
90
+ serverBundleDir: 'server',
91
+ supportsWaitUntil: true,
92
+ supportsEarlyHints: false,
93
+ runtimeName: 'deno-deploy',
94
+ },
95
+ 'azure-functions': {
96
+ nitroPreset: 'azure-functions',
97
+ outputDir: '.output',
98
+ serverBundleDir: 'server',
99
+ supportsWaitUntil: false,
100
+ supportsEarlyHints: false,
101
+ runtimeName: 'azure-functions',
102
+ },
103
+ 'node-server': {
104
+ nitroPreset: 'node-server',
105
+ outputDir: '.output',
106
+ serverBundleDir: 'server',
107
+ supportsWaitUntil: true,
108
+ // Disabled by default: most node-server deployments sit behind a
109
+ // reverse proxy (nginx, caddy, traefik) that doesn't support 103
110
+ // Early Hints over HTTP/1.1. Sending 103 causes nginx to intermittently
111
+ // treat the response as an error and retry after proxy_connect_timeout
112
+ // (~5s stalls on ~23% of requests). Link headers on the 200 response
113
+ // are the safe fallback — Cloudflare and other CDNs convert them to
114
+ // 103 automatically at the edge (over HTTP/2+ to the browser).
115
+ supportsEarlyHints: false,
116
+ runtimeName: 'node-server',
117
+ },
118
+ 'bun': {
119
+ nitroPreset: 'bun',
120
+ outputDir: '.output',
121
+ serverBundleDir: 'server',
122
+ supportsWaitUntil: true,
123
+ // Disabled for same reason as node-server — reverse proxies choke on 103.
124
+ // Link headers on the 200 response are converted to 103 by CDNs.
125
+ supportsEarlyHints: false,
126
+ runtimeName: 'bun',
127
+ },
128
+ };
129
+
130
+ /** Presets that produce a locally-runnable server entry. */
131
+ export const LOCALLY_PREVIEWABLE = new Set<NitroPreset>(['node-server', 'bun']);
132
+
133
+ /**
134
+ * Get the preset configuration for a given preset name.
135
+ * @internal Exported for testing.
136
+ */
137
+ export function getPresetConfig(preset: NitroPreset): PresetConfig {
138
+ return PRESET_CONFIGS[preset];
139
+ }